From 9841d192053936b968eb23f7e6fda56c55472c19 Mon Sep 17 00:00:00 2001 From: Paillat-dev Date: Fri, 21 Aug 2026 14:29:44 +0200 Subject: [PATCH 1/8] feat: First commit on zensical rework --- .github/ISSUE_TEMPLATE/bug_report.yml | 56 - .github/ISSUE_TEMPLATE/config.yml | 5 - .github/ISSUE_TEMPLATE/feature_request.yml | 38 - .github/SECURITY.md | 8 - .github/workflows/codespell.yml | 13 - .github/workflows/devskim.yml | 34 - .github/workflows/docs.yml | 29 + .github/workflows/njsscan.yml | 41 - .github/workflows/node.js.yml | 27 - .github/workflows/test-deploy.yml | 27 - .github/workflows/version-updates.yml | 20 - .gitignore | 5 +- .python-version | 1 + CONTRIBUTING.md | 23 - LICENSE | 19 - babel.config.js | 15 - crowdin.yml | 17 - {static/img => docs/assets}/favicon.ico | Bin docs/assets/interactions/button-styles.png | Bin 40520 -> 0 bytes .../interactions/groups-and-subcommands.jpg | Bin 78518 -> 0 bytes docs/assets/interactions/modal-example.png | Bin 15094 -> 0 bytes .../interactions/select-menus-example.png | Bin 39618 -> 0 bytes {static/img => docs/assets}/logo.png | Bin docs/extensions/_category_.json | 7 - docs/extensions/bridge/_category_.json | 3 - docs/extensions/bridge/index.mdx | 196 - docs/extensions/commands/_category_.json | 6 - docs/extensions/commands/groups.mdx | 54 - docs/extensions/commands/help-command.mdx | 471 - .../extensions/commands/prefixed-commands.mdx | 326 - docs/extensions/pages/_category_.json | 6 - docs/extensions/pages/paginator-basics.mdx | 166 - docs/extensions/pages/paginator-faq.mdx | 20 - docs/extensions/tasks/_category_.json | 3 - docs/extensions/tasks/tasks.mdx | 216 - docs/getting-started/_category_.json | 7 - .../creating-your-first-bot.mdx | 262 - docs/getting-started/hosting-your-bot.mdx | 112 - docs/getting-started/more-features.mdx | 361 - .../rules-and-common-practices.mdx | 186 - docs/gsoc-ideas.mdx | 331 - docs/index.md | 176 + docs/installation.mdx | 68 - docs/interactions/_category_.json | 4 - .../application-commands/_category_.json | 6 - .../application-commands/context-menus.mdx | 84 - .../application-commands/localizations.mdx | 56 - .../application-commands/slash-commands.mdx | 295 - docs/interactions/index.mdx | 251 - .../ui-components/_category_.json | 6 - docs/interactions/ui-components/buttons.mdx | 307 - docs/interactions/ui-components/dropdowns.mdx | 330 - .../ui-components/modal-dialogs.mdx | 104 - docs/introduction.mdx | 50 - docs/markdown.md | 111 + docs/more/_category_.json | 7 - docs/more/community-resources.mdx | 23 - docs/more/contributing.mdx | 464 - docs/more/git.mdx | 47 - docs/more/virtual-environments.mdx | 62 - docs/popular-topics/_category_.json | 7 - docs/popular-topics/cogs.mdx | 140 - docs/popular-topics/error-handling.mdx | 409 - docs/popular-topics/intents.mdx | 58 - docs/popular-topics/sharding.mdx | 48 - docs/popular-topics/subclassing-bots.mdx | 115 - docs/popular-topics/threads.mdx | 107 - docs/voice/_category_.json | 4 - docs/voice/index.mdx | 24 - docs/voice/playing.mdx | 150 - docs/voice/receiving.mdx | 134 - docusaurus.config.js | 119 - i18n/de/code.json | 404 - .../options.json | 14 - .../current.json | 46 - .../assets/interactions/button-styles.png | Bin 40520 -> 0 bytes .../interactions/groups-and-subcommands.jpg | Bin 78518 -> 0 bytes .../assets/interactions/modal-example.png | Bin 15094 -> 0 bytes .../interactions/select-menus-example.png | Bin 39618 -> 0 bytes .../current/extensions/_category_.json | 7 - .../current/extensions/bridge/_category_.json | 3 - .../current/extensions/bridge/index.mdx | 190 - .../extensions/commands/_category_.json | 6 - .../current/extensions/commands/groups.mdx | 56 - .../extensions/commands/help-command.mdx | 481 - .../extensions/commands/prefixed-commands.mdx | 324 - .../current/extensions/pages/_category_.json | 6 - .../extensions/pages/paginator-basics.mdx | 168 - .../extensions/pages/paginator-faq.mdx | 20 - .../current/extensions/tasks/_category_.json | 3 - .../current/extensions/tasks/tasks.mdx | 216 - .../current/getting-started/_category_.json | 7 - .../creating-your-first-bot.mdx | 262 - .../getting-started/hosting-your-bot.mdx | 109 - .../current/getting-started/more-features.mdx | 379 - .../rules-and-common-practices.mdx | 184 - .../current/installation.mdx | 80 - .../current/interactions/_category_.json | 4 - .../application-commands/_category_.json | 6 - .../application-commands/context-menus.mdx | 85 - .../application-commands/localizations.mdx | 56 - .../application-commands/slash-commands.mdx | 292 - .../current/interactions/index.mdx | 242 - .../ui-components/_category_.json | 6 - .../interactions/ui-components/buttons.mdx | 314 - .../interactions/ui-components/dropdowns.mdx | 339 - .../ui-components/modal-dialogs.mdx | 107 - .../current/introduction.mdx | 50 - .../current/more/_category_.json | 7 - .../current/more/community-resources.mdx | 23 - .../current/more/contributing.mdx | 463 - .../current/more/git.mdx | 55 - .../current/more/virtual-environments.mdx | 62 - .../current/popular-topics/_category_.json | 7 - .../current/popular-topics/cogs.mdx | 140 - .../current/popular-topics/error-handling.mdx | 383 - .../current/popular-topics/intents.mdx | 62 - .../current/popular-topics/sharding.mdx | 48 - .../popular-topics/subclassing-bots.mdx | 115 - .../current/popular-topics/threads.mdx | 105 - .../current/voice/_category_.json | 4 - .../current/voice/index.mdx | 24 - .../current/voice/playing.mdx | 149 - .../current/voice/receiving.mdx | 130 - .../docusaurus-plugin-content-pagesindex.tsx | 37 - i18n/de/docusaurus-theme-classic/footer.json | 6 - i18n/de/docusaurus-theme-classic/navbar.json | 22 - i18n/en/code.json | 404 - .../options.json | 14 - .../current.json | 46 - i18n/en/docusaurus-theme-classic/footer.json | 6 - i18n/en/docusaurus-theme-classic/navbar.json | 22 - i18n/es/code.json | 404 - .../options.json | 14 - .../current.json | 46 - .../assets/interactions/button-styles.png | Bin 40520 -> 0 bytes .../interactions/groups-and-subcommands.jpg | Bin 78518 -> 0 bytes .../assets/interactions/modal-example.png | Bin 15094 -> 0 bytes .../interactions/select-menus-example.png | Bin 39618 -> 0 bytes .../current/extensions/_category_.json | 7 - .../current/extensions/bridge/_category_.json | 3 - .../current/extensions/bridge/index.mdx | 190 - .../extensions/commands/_category_.json | 6 - .../current/extensions/commands/groups.mdx | 56 - .../extensions/commands/help-command.mdx | 481 - .../extensions/commands/prefixed-commands.mdx | 324 - .../current/extensions/pages/_category_.json | 6 - .../extensions/pages/paginator-basics.mdx | 168 - .../extensions/pages/paginator-faq.mdx | 20 - .../current/extensions/tasks/_category_.json | 3 - .../current/extensions/tasks/tasks.mdx | 216 - .../current/getting-started/_category_.json | 7 - .../creating-your-first-bot.mdx | 262 - .../getting-started/hosting-your-bot.mdx | 109 - .../current/getting-started/more-features.mdx | 379 - .../rules-and-common-practices.mdx | 184 - .../current/installation.mdx | 80 - .../current/interactions/_category_.json | 4 - .../application-commands/_category_.json | 6 - .../application-commands/context-menus.mdx | 85 - .../application-commands/localizations.mdx | 56 - .../application-commands/slash-commands.mdx | 292 - .../current/interactions/index.mdx | 242 - .../ui-components/_category_.json | 6 - .../interactions/ui-components/buttons.mdx | 314 - .../interactions/ui-components/dropdowns.mdx | 339 - .../ui-components/modal-dialogs.mdx | 107 - .../current/introduction.mdx | 50 - .../current/more/_category_.json | 7 - .../current/more/community-resources.mdx | 23 - .../current/more/contributing.mdx | 463 - .../current/more/git.mdx | 55 - .../current/more/virtual-environments.mdx | 62 - .../current/popular-topics/_category_.json | 7 - .../current/popular-topics/cogs.mdx | 140 - .../current/popular-topics/error-handling.mdx | 383 - .../current/popular-topics/intents.mdx | 62 - .../current/popular-topics/sharding.mdx | 48 - .../popular-topics/subclassing-bots.mdx | 115 - .../current/popular-topics/threads.mdx | 105 - .../current/voice/_category_.json | 4 - .../current/voice/index.mdx | 24 - .../current/voice/playing.mdx | 149 - .../current/voice/receiving.mdx | 130 - .../docusaurus-plugin-content-pagesindex.tsx | 37 - i18n/es/docusaurus-theme-classic/footer.json | 6 - i18n/es/docusaurus-theme-classic/navbar.json | 22 - i18n/fr/code.json | 404 - .../options.json | 14 - .../current.json | 46 - .../assets/interactions/button-styles.png | Bin 40520 -> 0 bytes .../interactions/groups-and-subcommands.jpg | Bin 78518 -> 0 bytes .../assets/interactions/modal-example.png | Bin 15094 -> 0 bytes .../interactions/select-menus-example.png | Bin 39618 -> 0 bytes .../current/extensions/_category_.json | 7 - .../current/extensions/bridge/_category_.json | 3 - .../current/extensions/bridge/index.mdx | 190 - .../extensions/commands/_category_.json | 6 - .../current/extensions/commands/groups.mdx | 56 - .../extensions/commands/help-command.mdx | 481 - .../extensions/commands/prefixed-commands.mdx | 324 - .../current/extensions/pages/_category_.json | 6 - .../extensions/pages/paginator-basics.mdx | 168 - .../extensions/pages/paginator-faq.mdx | 20 - .../current/extensions/tasks/_category_.json | 3 - .../current/extensions/tasks/tasks.mdx | 216 - .../current/getting-started/_category_.json | 7 - .../creating-your-first-bot.mdx | 262 - .../getting-started/hosting-your-bot.mdx | 109 - .../current/getting-started/more-features.mdx | 379 - .../rules-and-common-practices.mdx | 184 - .../current/installation.mdx | 80 - .../current/interactions/_category_.json | 4 - .../application-commands/_category_.json | 6 - .../application-commands/context-menus.mdx | 85 - .../application-commands/localizations.mdx | 56 - .../application-commands/slash-commands.mdx | 292 - .../current/interactions/index.mdx | 242 - .../ui-components/_category_.json | 6 - .../interactions/ui-components/buttons.mdx | 314 - .../interactions/ui-components/dropdowns.mdx | 339 - .../ui-components/modal-dialogs.mdx | 107 - .../current/introduction.mdx | 50 - .../current/more/_category_.json | 7 - .../current/more/community-resources.mdx | 23 - .../current/more/contributing.mdx | 463 - .../current/more/git.mdx | 55 - .../current/more/virtual-environments.mdx | 62 - .../current/popular-topics/_category_.json | 7 - .../current/popular-topics/cogs.mdx | 140 - .../current/popular-topics/error-handling.mdx | 383 - .../current/popular-topics/intents.mdx | 62 - .../current/popular-topics/sharding.mdx | 48 - .../popular-topics/subclassing-bots.mdx | 115 - .../current/popular-topics/threads.mdx | 105 - .../current/voice/_category_.json | 4 - .../current/voice/index.mdx | 24 - .../current/voice/playing.mdx | 149 - .../current/voice/receiving.mdx | 130 - .../docusaurus-plugin-content-pagesindex.tsx | 37 - i18n/fr/docusaurus-theme-classic/footer.json | 6 - i18n/fr/docusaurus-theme-classic/navbar.json | 22 - i18n/hi/code.json | 404 - .../options.json | 14 - .../current.json | 46 - .../assets/interactions/button-styles.png | Bin 40520 -> 0 bytes .../interactions/groups-and-subcommands.jpg | Bin 78518 -> 0 bytes .../assets/interactions/modal-example.png | Bin 15094 -> 0 bytes .../interactions/select-menus-example.png | Bin 39618 -> 0 bytes .../current/extensions/_category_.json | 7 - .../current/extensions/bridge/_category_.json | 3 - .../current/extensions/bridge/index.mdx | 190 - .../extensions/commands/_category_.json | 6 - .../current/extensions/commands/groups.mdx | 56 - .../extensions/commands/help-command.mdx | 481 - .../extensions/commands/prefixed-commands.mdx | 324 - .../current/extensions/pages/_category_.json | 6 - .../extensions/pages/paginator-basics.mdx | 168 - .../extensions/pages/paginator-faq.mdx | 20 - .../current/extensions/tasks/_category_.json | 3 - .../current/extensions/tasks/tasks.mdx | 216 - .../current/getting-started/_category_.json | 7 - .../creating-your-first-bot.mdx | 262 - .../getting-started/hosting-your-bot.mdx | 109 - .../current/getting-started/more-features.mdx | 379 - .../rules-and-common-practices.mdx | 184 - .../current/installation.mdx | 80 - .../current/interactions/_category_.json | 4 - .../application-commands/_category_.json | 6 - .../application-commands/context-menus.mdx | 85 - .../application-commands/localizations.mdx | 56 - .../application-commands/slash-commands.mdx | 292 - .../current/interactions/index.mdx | 242 - .../ui-components/_category_.json | 6 - .../interactions/ui-components/buttons.mdx | 314 - .../interactions/ui-components/dropdowns.mdx | 339 - .../ui-components/modal-dialogs.mdx | 107 - .../current/introduction.mdx | 50 - .../current/more/_category_.json | 7 - .../current/more/community-resources.mdx | 23 - .../current/more/contributing.mdx | 463 - .../current/more/git.mdx | 55 - .../current/more/virtual-environments.mdx | 62 - .../current/popular-topics/_category_.json | 7 - .../current/popular-topics/cogs.mdx | 140 - .../current/popular-topics/error-handling.mdx | 383 - .../current/popular-topics/intents.mdx | 62 - .../current/popular-topics/sharding.mdx | 48 - .../popular-topics/subclassing-bots.mdx | 115 - .../current/popular-topics/threads.mdx | 105 - .../current/voice/_category_.json | 4 - .../current/voice/index.mdx | 24 - .../current/voice/playing.mdx | 149 - .../current/voice/receiving.mdx | 130 - .../docusaurus-plugin-content-pagesindex.tsx | 37 - i18n/hi/docusaurus-theme-classic/footer.json | 6 - i18n/hi/docusaurus-theme-classic/navbar.json | 22 - i18n/it/code.json | 404 - .../options.json | 14 - .../current.json | 46 - .../assets/interactions/button-styles.png | Bin 40520 -> 0 bytes .../interactions/groups-and-subcommands.jpg | Bin 78518 -> 0 bytes .../assets/interactions/modal-example.png | Bin 15094 -> 0 bytes .../interactions/select-menus-example.png | Bin 39618 -> 0 bytes .../current/extensions/_category_.json | 7 - .../current/extensions/bridge/_category_.json | 3 - .../current/extensions/bridge/index.mdx | 190 - .../extensions/commands/_category_.json | 6 - .../current/extensions/commands/groups.mdx | 56 - .../extensions/commands/help-command.mdx | 481 - .../extensions/commands/prefixed-commands.mdx | 324 - .../current/extensions/pages/_category_.json | 6 - .../extensions/pages/paginator-basics.mdx | 168 - .../extensions/pages/paginator-faq.mdx | 20 - .../current/extensions/tasks/_category_.json | 3 - .../current/extensions/tasks/tasks.mdx | 216 - .../current/getting-started/_category_.json | 7 - .../creating-your-first-bot.mdx | 262 - .../getting-started/hosting-your-bot.mdx | 109 - .../current/getting-started/more-features.mdx | 379 - .../rules-and-common-practices.mdx | 184 - .../current/installation.mdx | 80 - .../current/interactions/_category_.json | 4 - .../application-commands/_category_.json | 6 - .../application-commands/context-menus.mdx | 85 - .../application-commands/localizations.mdx | 56 - .../application-commands/slash-commands.mdx | 292 - .../current/interactions/index.mdx | 242 - .../ui-components/_category_.json | 6 - .../interactions/ui-components/buttons.mdx | 314 - .../interactions/ui-components/dropdowns.mdx | 339 - .../ui-components/modal-dialogs.mdx | 107 - .../current/introduction.mdx | 50 - .../current/more/_category_.json | 7 - .../current/more/community-resources.mdx | 23 - .../current/more/contributing.mdx | 463 - .../current/more/git.mdx | 55 - .../current/more/virtual-environments.mdx | 62 - .../current/popular-topics/_category_.json | 7 - .../current/popular-topics/cogs.mdx | 140 - .../current/popular-topics/error-handling.mdx | 383 - .../current/popular-topics/intents.mdx | 62 - .../current/popular-topics/sharding.mdx | 48 - .../popular-topics/subclassing-bots.mdx | 115 - .../current/popular-topics/threads.mdx | 105 - .../current/voice/_category_.json | 4 - .../current/voice/index.mdx | 24 - .../current/voice/playing.mdx | 149 - .../current/voice/receiving.mdx | 130 - .../docusaurus-plugin-content-pagesindex.tsx | 37 - i18n/it/docusaurus-theme-classic/footer.json | 6 - i18n/it/docusaurus-theme-classic/navbar.json | 22 - i18n/ja/code.json | 404 - .../options.json | 14 - .../current.json | 46 - .../assets/interactions/button-styles.png | Bin 40520 -> 0 bytes .../interactions/groups-and-subcommands.jpg | Bin 78518 -> 0 bytes .../assets/interactions/modal-example.png | Bin 15094 -> 0 bytes .../interactions/select-menus-example.png | Bin 39618 -> 0 bytes .../current/extensions/_category_.json | 7 - .../current/extensions/bridge/_category_.json | 3 - .../current/extensions/bridge/index.mdx | 190 - .../extensions/commands/_category_.json | 6 - .../current/extensions/commands/groups.mdx | 56 - .../extensions/commands/help-command.mdx | 481 - .../extensions/commands/prefixed-commands.mdx | 324 - .../current/extensions/pages/_category_.json | 6 - .../extensions/pages/paginator-basics.mdx | 168 - .../extensions/pages/paginator-faq.mdx | 20 - .../current/extensions/tasks/_category_.json | 3 - .../current/extensions/tasks/tasks.mdx | 216 - .../current/getting-started/_category_.json | 7 - .../creating-your-first-bot.mdx | 262 - .../getting-started/hosting-your-bot.mdx | 109 - .../current/getting-started/more-features.mdx | 379 - .../rules-and-common-practices.mdx | 184 - .../current/installation.mdx | 80 - .../current/interactions/_category_.json | 4 - .../application-commands/_category_.json | 6 - .../application-commands/context-menus.mdx | 85 - .../application-commands/localizations.mdx | 56 - .../application-commands/slash-commands.mdx | 292 - .../current/interactions/index.mdx | 242 - .../ui-components/_category_.json | 6 - .../interactions/ui-components/buttons.mdx | 314 - .../interactions/ui-components/dropdowns.mdx | 339 - .../ui-components/modal-dialogs.mdx | 107 - .../current/introduction.mdx | 50 - .../current/more/_category_.json | 7 - .../current/more/community-resources.mdx | 23 - .../current/more/contributing.mdx | 463 - .../current/more/git.mdx | 55 - .../current/more/virtual-environments.mdx | 62 - .../current/popular-topics/_category_.json | 7 - .../current/popular-topics/cogs.mdx | 140 - .../current/popular-topics/error-handling.mdx | 383 - .../current/popular-topics/intents.mdx | 62 - .../current/popular-topics/sharding.mdx | 48 - .../popular-topics/subclassing-bots.mdx | 115 - .../current/popular-topics/threads.mdx | 105 - .../current/voice/_category_.json | 4 - .../current/voice/index.mdx | 24 - .../current/voice/playing.mdx | 149 - .../current/voice/receiving.mdx | 130 - .../docusaurus-plugin-content-pagesindex.tsx | 37 - i18n/ja/docusaurus-theme-classic/footer.json | 6 - i18n/ja/docusaurus-theme-classic/navbar.json | 22 - i18n/ko/code.json | 404 - .../options.json | 14 - .../current.json | 46 - .../assets/interactions/button-styles.png | Bin 40520 -> 0 bytes .../interactions/groups-and-subcommands.jpg | Bin 78518 -> 0 bytes .../assets/interactions/modal-example.png | Bin 15094 -> 0 bytes .../interactions/select-menus-example.png | Bin 39618 -> 0 bytes .../current/extensions/_category_.json | 7 - .../current/extensions/bridge/_category_.json | 3 - .../current/extensions/bridge/index.mdx | 190 - .../extensions/commands/_category_.json | 6 - .../current/extensions/commands/groups.mdx | 56 - .../extensions/commands/help-command.mdx | 481 - .../extensions/commands/prefixed-commands.mdx | 324 - .../current/extensions/pages/_category_.json | 6 - .../extensions/pages/paginator-basics.mdx | 168 - .../extensions/pages/paginator-faq.mdx | 20 - .../current/extensions/tasks/_category_.json | 3 - .../current/extensions/tasks/tasks.mdx | 216 - .../current/getting-started/_category_.json | 7 - .../creating-your-first-bot.mdx | 262 - .../getting-started/hosting-your-bot.mdx | 109 - .../current/getting-started/more-features.mdx | 379 - .../rules-and-common-practices.mdx | 184 - .../current/installation.mdx | 80 - .../current/interactions/_category_.json | 4 - .../application-commands/_category_.json | 6 - .../application-commands/context-menus.mdx | 85 - .../application-commands/localizations.mdx | 56 - .../application-commands/slash-commands.mdx | 292 - .../current/interactions/index.mdx | 242 - .../ui-components/_category_.json | 6 - .../interactions/ui-components/buttons.mdx | 314 - .../interactions/ui-components/dropdowns.mdx | 339 - .../ui-components/modal-dialogs.mdx | 107 - .../current/introduction.mdx | 50 - .../current/more/_category_.json | 7 - .../current/more/community-resources.mdx | 23 - .../current/more/contributing.mdx | 463 - .../current/more/git.mdx | 55 - .../current/more/virtual-environments.mdx | 62 - .../current/popular-topics/_category_.json | 7 - .../current/popular-topics/cogs.mdx | 140 - .../current/popular-topics/error-handling.mdx | 383 - .../current/popular-topics/intents.mdx | 62 - .../current/popular-topics/sharding.mdx | 48 - .../popular-topics/subclassing-bots.mdx | 115 - .../current/popular-topics/threads.mdx | 105 - .../current/voice/_category_.json | 4 - .../current/voice/index.mdx | 24 - .../current/voice/playing.mdx | 149 - .../current/voice/receiving.mdx | 130 - .../docusaurus-plugin-content-pagesindex.tsx | 37 - i18n/ko/docusaurus-theme-classic/footer.json | 6 - i18n/ko/docusaurus-theme-classic/navbar.json | 22 - i18n/pt/code.json | 404 - .../options.json | 14 - .../current.json | 46 - .../assets/interactions/button-styles.png | Bin 40520 -> 0 bytes .../interactions/groups-and-subcommands.jpg | Bin 78518 -> 0 bytes .../assets/interactions/modal-example.png | Bin 15094 -> 0 bytes .../interactions/select-menus-example.png | Bin 39618 -> 0 bytes .../current/extensions/_category_.json | 7 - .../current/extensions/bridge/_category_.json | 3 - .../current/extensions/bridge/index.mdx | 190 - .../extensions/commands/_category_.json | 6 - .../current/extensions/commands/groups.mdx | 56 - .../extensions/commands/help-command.mdx | 481 - .../extensions/commands/prefixed-commands.mdx | 324 - .../current/extensions/pages/_category_.json | 6 - .../extensions/pages/paginator-basics.mdx | 168 - .../extensions/pages/paginator-faq.mdx | 20 - .../current/extensions/tasks/_category_.json | 3 - .../current/extensions/tasks/tasks.mdx | 216 - .../current/getting-started/_category_.json | 7 - .../creating-your-first-bot.mdx | 262 - .../getting-started/hosting-your-bot.mdx | 109 - .../current/getting-started/more-features.mdx | 379 - .../rules-and-common-practices.mdx | 184 - .../current/installation.mdx | 80 - .../current/interactions/_category_.json | 4 - .../application-commands/_category_.json | 6 - .../application-commands/context-menus.mdx | 85 - .../application-commands/localizations.mdx | 56 - .../application-commands/slash-commands.mdx | 292 - .../current/interactions/index.mdx | 242 - .../ui-components/_category_.json | 6 - .../interactions/ui-components/buttons.mdx | 314 - .../interactions/ui-components/dropdowns.mdx | 339 - .../ui-components/modal-dialogs.mdx | 107 - .../current/introduction.mdx | 50 - .../current/more/_category_.json | 7 - .../current/more/community-resources.mdx | 23 - .../current/more/contributing.mdx | 463 - .../current/more/git.mdx | 55 - .../current/more/virtual-environments.mdx | 62 - .../current/popular-topics/_category_.json | 7 - .../current/popular-topics/cogs.mdx | 140 - .../current/popular-topics/error-handling.mdx | 383 - .../current/popular-topics/intents.mdx | 62 - .../current/popular-topics/sharding.mdx | 48 - .../popular-topics/subclassing-bots.mdx | 115 - .../current/popular-topics/threads.mdx | 105 - .../current/voice/_category_.json | 4 - .../current/voice/index.mdx | 24 - .../current/voice/playing.mdx | 149 - .../current/voice/receiving.mdx | 130 - .../docusaurus-plugin-content-pagesindex.tsx | 37 - i18n/pt/docusaurus-theme-classic/footer.json | 6 - i18n/pt/docusaurus-theme-classic/navbar.json | 22 - i18n/ru/code.json | 404 - .../options.json | 14 - .../current.json | 46 - .../assets/interactions/button-styles.png | Bin 40520 -> 0 bytes .../interactions/groups-and-subcommands.jpg | Bin 78518 -> 0 bytes .../assets/interactions/modal-example.png | Bin 15094 -> 0 bytes .../interactions/select-menus-example.png | Bin 39618 -> 0 bytes .../current/extensions/_category_.json | 7 - .../current/extensions/bridge/_category_.json | 3 - .../current/extensions/bridge/index.mdx | 190 - .../extensions/commands/_category_.json | 6 - .../current/extensions/commands/groups.mdx | 56 - .../extensions/commands/help-command.mdx | 481 - .../extensions/commands/prefixed-commands.mdx | 324 - .../current/extensions/pages/_category_.json | 6 - .../extensions/pages/paginator-basics.mdx | 168 - .../extensions/pages/paginator-faq.mdx | 20 - .../current/extensions/tasks/_category_.json | 3 - .../current/extensions/tasks/tasks.mdx | 216 - .../current/getting-started/_category_.json | 7 - .../creating-your-first-bot.mdx | 262 - .../getting-started/hosting-your-bot.mdx | 109 - .../current/getting-started/more-features.mdx | 379 - .../rules-and-common-practices.mdx | 184 - .../current/installation.mdx | 80 - .../current/interactions/_category_.json | 4 - .../application-commands/_category_.json | 6 - .../application-commands/context-menus.mdx | 85 - .../application-commands/localizations.mdx | 56 - .../application-commands/slash-commands.mdx | 292 - .../current/interactions/index.mdx | 242 - .../ui-components/_category_.json | 6 - .../interactions/ui-components/buttons.mdx | 314 - .../interactions/ui-components/dropdowns.mdx | 339 - .../ui-components/modal-dialogs.mdx | 107 - .../current/introduction.mdx | 50 - .../current/more/_category_.json | 7 - .../current/more/community-resources.mdx | 23 - .../current/more/contributing.mdx | 463 - .../current/more/git.mdx | 55 - .../current/more/virtual-environments.mdx | 62 - .../current/popular-topics/_category_.json | 7 - .../current/popular-topics/cogs.mdx | 140 - .../current/popular-topics/error-handling.mdx | 383 - .../current/popular-topics/intents.mdx | 62 - .../current/popular-topics/sharding.mdx | 48 - .../popular-topics/subclassing-bots.mdx | 115 - .../current/popular-topics/threads.mdx | 105 - .../current/voice/_category_.json | 4 - .../current/voice/index.mdx | 24 - .../current/voice/playing.mdx | 149 - .../current/voice/receiving.mdx | 130 - .../docusaurus-plugin-content-pagesindex.tsx | 37 - i18n/ru/docusaurus-theme-classic/footer.json | 6 - i18n/ru/docusaurus-theme-classic/navbar.json | 22 - i18n/zh/code.json | 404 - .../options.json | 14 - .../current.json | 46 - .../assets/interactions/button-styles.png | Bin 40520 -> 0 bytes .../interactions/groups-and-subcommands.jpg | Bin 78518 -> 0 bytes .../assets/interactions/modal-example.png | Bin 15094 -> 0 bytes .../interactions/select-menus-example.png | Bin 39618 -> 0 bytes .../current/extensions/_category_.json | 7 - .../current/extensions/bridge/_category_.json | 3 - .../current/extensions/bridge/index.mdx | 190 - .../extensions/commands/_category_.json | 6 - .../current/extensions/commands/groups.mdx | 56 - .../extensions/commands/help-command.mdx | 481 - .../extensions/commands/prefixed-commands.mdx | 324 - .../current/extensions/pages/_category_.json | 6 - .../extensions/pages/paginator-basics.mdx | 168 - .../extensions/pages/paginator-faq.mdx | 20 - .../current/extensions/tasks/_category_.json | 3 - .../current/extensions/tasks/tasks.mdx | 216 - .../current/getting-started/_category_.json | 7 - .../creating-your-first-bot.mdx | 262 - .../getting-started/hosting-your-bot.mdx | 109 - .../current/getting-started/more-features.mdx | 379 - .../rules-and-common-practices.mdx | 184 - .../current/installation.mdx | 80 - .../current/interactions/_category_.json | 4 - .../application-commands/_category_.json | 6 - .../application-commands/context-menus.mdx | 85 - .../application-commands/localizations.mdx | 56 - .../application-commands/slash-commands.mdx | 292 - .../current/interactions/index.mdx | 242 - .../ui-components/_category_.json | 6 - .../interactions/ui-components/buttons.mdx | 314 - .../interactions/ui-components/dropdowns.mdx | 339 - .../ui-components/modal-dialogs.mdx | 107 - .../current/introduction.mdx | 50 - .../current/more/_category_.json | 7 - .../current/more/community-resources.mdx | 23 - .../current/more/contributing.mdx | 463 - .../current/more/git.mdx | 55 - .../current/more/virtual-environments.mdx | 62 - .../current/popular-topics/_category_.json | 7 - .../current/popular-topics/cogs.mdx | 140 - .../current/popular-topics/error-handling.mdx | 383 - .../current/popular-topics/intents.mdx | 62 - .../current/popular-topics/sharding.mdx | 48 - .../popular-topics/subclassing-bots.mdx | 115 - .../current/popular-topics/threads.mdx | 105 - .../current/voice/_category_.json | 4 - .../current/voice/index.mdx | 24 - .../current/voice/playing.mdx | 149 - .../current/voice/receiving.mdx | 130 - .../docusaurus-plugin-content-pagesindex.tsx | 37 - i18n/zh/docusaurus-theme-classic/footer.json | 6 - i18n/zh/docusaurus-theme-classic/navbar.json | 22 - package.json | 122 - pyproject.toml | 17 + renovate.json | 8 - src/components/DiscordComponent.tsx | 46 - src/components/PYCButton.tsx | 51 - src/components/PYCCard.tsx | 15 - src/components/PYCHero.tsx | 31 - src/components/PYCTitleBar.tsx | 26 - src/constants/site.ts | 6 - src/layouts/DefaultLayout.tsx | 46 - src/pages/index.tsx | 37 - src/scss/helpers/_functions.scss | 1 - src/scss/helpers/_index.scss | 2 - src/scss/helpers/_mixins.scss | 23 - src/scss/infima/_overrides.scss | 142 - src/scss/main.scss | 347 - src/scss/modules/_pyc-button.scss | 149 - src/scss/modules/_pyc-hero.scss | 82 - src/scss/modules/_pyc-icon.scss | 16 - src/scss/modules/_pyc-title-bar.scss | 31 - src/scss/modules/_pyc-user-card.scss | 102 - static/.nojekyll | 0 static/CNAME | 1 - static/fonts/ginto-nord/ginto-nord500.woff | Bin 67068 -> 0 bytes static/fonts/ginto-nord/ginto-nord500.woff2 | Bin 54184 -> 0 bytes static/fonts/ginto-nord/ginto-nord600.woff | Bin 64628 -> 0 bytes static/fonts/ginto-nord/ginto-nord600.woff2 | Bin 52300 -> 0 bytes static/fonts/ginto-nord/ginto-nord700.woff | Bin 71160 -> 0 bytes static/fonts/ginto-nord/ginto-nord700.woff2 | Bin 57460 -> 0 bytes static/fonts/ginto/ginto-italic300.woff | Bin 61640 -> 0 bytes static/fonts/ginto/ginto-italic400.woff | Bin 59820 -> 0 bytes static/fonts/ginto/ginto-italic500.woff | Bin 59820 -> 0 bytes static/fonts/ginto/ginto-italic600.woff | Bin 67148 -> 0 bytes static/fonts/ginto/ginto-italic700.woff | Bin 67484 -> 0 bytes static/fonts/ginto/ginto300.woff | Bin 57716 -> 0 bytes static/fonts/ginto/ginto400.woff | Bin 55752 -> 0 bytes static/fonts/ginto/ginto500.woff | Bin 55752 -> 0 bytes static/fonts/ginto/ginto600.woff | Bin 62512 -> 0 bytes static/fonts/ginto/ginto700.woff | Bin 62768 -> 0 bytes static/fonts/whitney/whitney300.woff | Bin 79856 -> 0 bytes static/fonts/whitney/whitney400.woff | Bin 77784 -> 0 bytes static/fonts/whitney/whitney500.woff | Bin 76744 -> 0 bytes static/fonts/whitney/whitney600.woff | Bin 82688 -> 0 bytes static/fonts/whitney/whitney700.woff | Bin 80000 -> 0 bytes static/img/banner-v3.png | Bin 44658 -> 0 bytes static/img/bob.png | Bin 40907 -> 0 bytes static/img/dorukyum.png | Bin 484659 -> 0 bytes static/img/robocord.png | Bin 48040 -> 0 bytes static/robots.txt | 2 - tsconfig.json | 20 - uv.lock | 609 + yarn.lock | 11520 ---------------- zensical.toml | 141 + 680 files changed, 1088 insertions(+), 82954 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml delete mode 100644 .github/SECURITY.md delete mode 100644 .github/workflows/codespell.yml delete mode 100644 .github/workflows/devskim.yml create mode 100644 .github/workflows/docs.yml delete mode 100644 .github/workflows/njsscan.yml delete mode 100644 .github/workflows/node.js.yml delete mode 100644 .github/workflows/test-deploy.yml delete mode 100644 .github/workflows/version-updates.yml create mode 100644 .python-version delete mode 100644 CONTRIBUTING.md delete mode 100644 LICENSE delete mode 100644 babel.config.js delete mode 100644 crowdin.yml rename {static/img => docs/assets}/favicon.ico (100%) delete mode 100644 docs/assets/interactions/button-styles.png delete mode 100644 docs/assets/interactions/groups-and-subcommands.jpg delete mode 100644 docs/assets/interactions/modal-example.png delete mode 100644 docs/assets/interactions/select-menus-example.png rename {static/img => docs/assets}/logo.png (100%) delete mode 100644 docs/extensions/_category_.json delete mode 100644 docs/extensions/bridge/_category_.json delete mode 100644 docs/extensions/bridge/index.mdx delete mode 100644 docs/extensions/commands/_category_.json delete mode 100644 docs/extensions/commands/groups.mdx delete mode 100644 docs/extensions/commands/help-command.mdx delete mode 100644 docs/extensions/commands/prefixed-commands.mdx delete mode 100644 docs/extensions/pages/_category_.json delete mode 100644 docs/extensions/pages/paginator-basics.mdx delete mode 100644 docs/extensions/pages/paginator-faq.mdx delete mode 100644 docs/extensions/tasks/_category_.json delete mode 100644 docs/extensions/tasks/tasks.mdx delete mode 100644 docs/getting-started/_category_.json delete mode 100644 docs/getting-started/creating-your-first-bot.mdx delete mode 100644 docs/getting-started/hosting-your-bot.mdx delete mode 100644 docs/getting-started/more-features.mdx delete mode 100644 docs/getting-started/rules-and-common-practices.mdx delete mode 100644 docs/gsoc-ideas.mdx create mode 100644 docs/index.md delete mode 100644 docs/installation.mdx delete mode 100644 docs/interactions/_category_.json delete mode 100644 docs/interactions/application-commands/_category_.json delete mode 100644 docs/interactions/application-commands/context-menus.mdx delete mode 100644 docs/interactions/application-commands/localizations.mdx delete mode 100644 docs/interactions/application-commands/slash-commands.mdx delete mode 100644 docs/interactions/index.mdx delete mode 100644 docs/interactions/ui-components/_category_.json delete mode 100644 docs/interactions/ui-components/buttons.mdx delete mode 100644 docs/interactions/ui-components/dropdowns.mdx delete mode 100644 docs/interactions/ui-components/modal-dialogs.mdx delete mode 100644 docs/introduction.mdx create mode 100644 docs/markdown.md delete mode 100644 docs/more/_category_.json delete mode 100644 docs/more/community-resources.mdx delete mode 100644 docs/more/contributing.mdx delete mode 100644 docs/more/git.mdx delete mode 100644 docs/more/virtual-environments.mdx delete mode 100644 docs/popular-topics/_category_.json delete mode 100644 docs/popular-topics/cogs.mdx delete mode 100644 docs/popular-topics/error-handling.mdx delete mode 100644 docs/popular-topics/intents.mdx delete mode 100644 docs/popular-topics/sharding.mdx delete mode 100644 docs/popular-topics/subclassing-bots.mdx delete mode 100644 docs/popular-topics/threads.mdx delete mode 100644 docs/voice/_category_.json delete mode 100644 docs/voice/index.mdx delete mode 100644 docs/voice/playing.mdx delete mode 100644 docs/voice/receiving.mdx delete mode 100644 docusaurus.config.js delete mode 100644 i18n/de/code.json delete mode 100644 i18n/de/docusaurus-plugin-content-blog/options.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/assets/interactions/modal-example.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/extensions/_category_.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/getting-started/_category_.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/installation.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/interactions/_category_.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/interactions/index.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/introduction.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/more/_category_.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/more/community-resources.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/more/contributing.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/more/git.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/popular-topics/_category_.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/voice/_category_.json delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/voice/index.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/voice/playing.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-docs/current/voice/receiving.mdx delete mode 100644 i18n/de/docusaurus-plugin-content-pagesindex.tsx delete mode 100644 i18n/de/docusaurus-theme-classic/footer.json delete mode 100644 i18n/de/docusaurus-theme-classic/navbar.json delete mode 100644 i18n/en/code.json delete mode 100644 i18n/en/docusaurus-plugin-content-blog/options.json delete mode 100644 i18n/en/docusaurus-plugin-content-docs/current.json delete mode 100644 i18n/en/docusaurus-theme-classic/footer.json delete mode 100644 i18n/en/docusaurus-theme-classic/navbar.json delete mode 100644 i18n/es/code.json delete mode 100644 i18n/es/docusaurus-plugin-content-blog/options.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/interactions/modal-example.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/extensions/_category_.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/getting-started/_category_.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/installation.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/interactions/_category_.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/interactions/index.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/introduction.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/more/_category_.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/more/community-resources.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/more/contributing.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/more/git.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/popular-topics/_category_.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/voice/_category_.json delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/voice/index.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/voice/playing.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-docs/current/voice/receiving.mdx delete mode 100644 i18n/es/docusaurus-plugin-content-pagesindex.tsx delete mode 100644 i18n/es/docusaurus-theme-classic/footer.json delete mode 100644 i18n/es/docusaurus-theme-classic/navbar.json delete mode 100644 i18n/fr/code.json delete mode 100644 i18n/fr/docusaurus-plugin-content-blog/options.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/interactions/modal-example.png delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/extensions/_category_.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/getting-started/_category_.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/installation.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/interactions/_category_.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/interactions/index.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/introduction.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/more/_category_.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/more/community-resources.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/more/contributing.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/more/git.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/_category_.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/voice/_category_.json delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/voice/index.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/voice/playing.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-docs/current/voice/receiving.mdx delete mode 100644 i18n/fr/docusaurus-plugin-content-pagesindex.tsx delete mode 100644 i18n/fr/docusaurus-theme-classic/footer.json delete mode 100644 i18n/fr/docusaurus-theme-classic/navbar.json delete mode 100644 i18n/hi/code.json delete mode 100644 i18n/hi/docusaurus-plugin-content-blog/options.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/assets/interactions/modal-example.png delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/extensions/_category_.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/getting-started/_category_.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/installation.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/interactions/_category_.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/interactions/index.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/introduction.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/more/_category_.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/more/community-resources.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/more/contributing.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/more/git.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/_category_.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/voice/_category_.json delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/voice/index.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/voice/playing.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-docs/current/voice/receiving.mdx delete mode 100644 i18n/hi/docusaurus-plugin-content-pagesindex.tsx delete mode 100644 i18n/hi/docusaurus-theme-classic/footer.json delete mode 100644 i18n/hi/docusaurus-theme-classic/navbar.json delete mode 100644 i18n/it/code.json delete mode 100644 i18n/it/docusaurus-plugin-content-blog/options.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/assets/interactions/modal-example.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/extensions/_category_.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/getting-started/_category_.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/installation.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/interactions/_category_.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/interactions/index.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/introduction.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/more/_category_.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/more/community-resources.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/more/contributing.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/more/git.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/popular-topics/_category_.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/voice/_category_.json delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/voice/index.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/voice/playing.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-docs/current/voice/receiving.mdx delete mode 100644 i18n/it/docusaurus-plugin-content-pagesindex.tsx delete mode 100644 i18n/it/docusaurus-theme-classic/footer.json delete mode 100644 i18n/it/docusaurus-theme-classic/navbar.json delete mode 100644 i18n/ja/code.json delete mode 100644 i18n/ja/docusaurus-plugin-content-blog/options.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/interactions/modal-example.png delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/extensions/_category_.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/getting-started/_category_.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/installation.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/interactions/_category_.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/interactions/index.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/introduction.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/more/_category_.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/more/community-resources.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/more/contributing.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/more/git.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/_category_.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/voice/_category_.json delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/voice/index.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/voice/playing.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-docs/current/voice/receiving.mdx delete mode 100644 i18n/ja/docusaurus-plugin-content-pagesindex.tsx delete mode 100644 i18n/ja/docusaurus-theme-classic/footer.json delete mode 100644 i18n/ja/docusaurus-theme-classic/navbar.json delete mode 100644 i18n/ko/code.json delete mode 100644 i18n/ko/docusaurus-plugin-content-blog/options.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/assets/interactions/modal-example.png delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/extensions/_category_.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/getting-started/_category_.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/installation.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/interactions/_category_.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/interactions/index.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/introduction.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/more/_category_.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/more/community-resources.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/more/contributing.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/more/git.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/_category_.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/voice/_category_.json delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/voice/index.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/voice/playing.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-docs/current/voice/receiving.mdx delete mode 100644 i18n/ko/docusaurus-plugin-content-pagesindex.tsx delete mode 100644 i18n/ko/docusaurus-theme-classic/footer.json delete mode 100644 i18n/ko/docusaurus-theme-classic/navbar.json delete mode 100644 i18n/pt/code.json delete mode 100644 i18n/pt/docusaurus-plugin-content-blog/options.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/interactions/modal-example.png delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/extensions/_category_.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/getting-started/_category_.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/installation.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/interactions/_category_.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/interactions/index.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/introduction.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/more/_category_.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/more/community-resources.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/more/contributing.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/more/git.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/_category_.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/voice/_category_.json delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/voice/index.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/voice/playing.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-docs/current/voice/receiving.mdx delete mode 100644 i18n/pt/docusaurus-plugin-content-pagesindex.tsx delete mode 100644 i18n/pt/docusaurus-theme-classic/footer.json delete mode 100644 i18n/pt/docusaurus-theme-classic/navbar.json delete mode 100644 i18n/ru/code.json delete mode 100644 i18n/ru/docusaurus-plugin-content-blog/options.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/assets/interactions/modal-example.png delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/extensions/_category_.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/getting-started/_category_.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/installation.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/interactions/_category_.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/interactions/index.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/introduction.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/more/_category_.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/more/community-resources.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/more/contributing.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/more/git.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/_category_.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/voice/_category_.json delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/voice/index.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/voice/playing.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-docs/current/voice/receiving.mdx delete mode 100644 i18n/ru/docusaurus-plugin-content-pagesindex.tsx delete mode 100644 i18n/ru/docusaurus-theme-classic/footer.json delete mode 100644 i18n/ru/docusaurus-theme-classic/navbar.json delete mode 100644 i18n/zh/code.json delete mode 100644 i18n/zh/docusaurus-plugin-content-blog/options.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/assets/interactions/modal-example.png delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/extensions/_category_.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/_category_.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/installation.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/interactions/_category_.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/interactions/index.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/introduction.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/more/_category_.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/more/community-resources.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/more/contributing.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/more/git.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/_category_.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/voice/_category_.json delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/voice/index.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/voice/playing.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-docs/current/voice/receiving.mdx delete mode 100644 i18n/zh/docusaurus-plugin-content-pagesindex.tsx delete mode 100644 i18n/zh/docusaurus-theme-classic/footer.json delete mode 100644 i18n/zh/docusaurus-theme-classic/navbar.json delete mode 100644 package.json create mode 100644 pyproject.toml delete mode 100644 renovate.json delete mode 100644 src/components/DiscordComponent.tsx delete mode 100644 src/components/PYCButton.tsx delete mode 100644 src/components/PYCCard.tsx delete mode 100644 src/components/PYCHero.tsx delete mode 100644 src/components/PYCTitleBar.tsx delete mode 100644 src/constants/site.ts delete mode 100644 src/layouts/DefaultLayout.tsx delete mode 100644 src/pages/index.tsx delete mode 100644 src/scss/helpers/_functions.scss delete mode 100644 src/scss/helpers/_index.scss delete mode 100644 src/scss/helpers/_mixins.scss delete mode 100644 src/scss/infima/_overrides.scss delete mode 100644 src/scss/main.scss delete mode 100644 src/scss/modules/_pyc-button.scss delete mode 100644 src/scss/modules/_pyc-hero.scss delete mode 100644 src/scss/modules/_pyc-icon.scss delete mode 100644 src/scss/modules/_pyc-title-bar.scss delete mode 100644 src/scss/modules/_pyc-user-card.scss delete mode 100644 static/.nojekyll delete mode 100644 static/CNAME delete mode 100644 static/fonts/ginto-nord/ginto-nord500.woff delete mode 100644 static/fonts/ginto-nord/ginto-nord500.woff2 delete mode 100644 static/fonts/ginto-nord/ginto-nord600.woff delete mode 100644 static/fonts/ginto-nord/ginto-nord600.woff2 delete mode 100644 static/fonts/ginto-nord/ginto-nord700.woff delete mode 100644 static/fonts/ginto-nord/ginto-nord700.woff2 delete mode 100644 static/fonts/ginto/ginto-italic300.woff delete mode 100644 static/fonts/ginto/ginto-italic400.woff delete mode 100644 static/fonts/ginto/ginto-italic500.woff delete mode 100644 static/fonts/ginto/ginto-italic600.woff delete mode 100644 static/fonts/ginto/ginto-italic700.woff delete mode 100644 static/fonts/ginto/ginto300.woff delete mode 100644 static/fonts/ginto/ginto400.woff delete mode 100644 static/fonts/ginto/ginto500.woff delete mode 100644 static/fonts/ginto/ginto600.woff delete mode 100644 static/fonts/ginto/ginto700.woff delete mode 100644 static/fonts/whitney/whitney300.woff delete mode 100644 static/fonts/whitney/whitney400.woff delete mode 100644 static/fonts/whitney/whitney500.woff delete mode 100644 static/fonts/whitney/whitney600.woff delete mode 100644 static/fonts/whitney/whitney700.woff delete mode 100644 static/img/banner-v3.png delete mode 100644 static/img/bob.png delete mode 100644 static/img/dorukyum.png delete mode 100644 static/img/robocord.png delete mode 100644 static/robots.txt delete mode 100644 tsconfig.json create mode 100644 uv.lock delete mode 100644 yarn.lock create mode 100644 zensical.toml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index cb780146..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: Bug Report -description: Report broken or incorrect behaviour -labels: unconfirmed bug -body: - - type: markdown - attributes: - value: > - Thanks for taking the time to fill out a bug. If you want real-time support, - consider joining our Discord at https://pycord.dev/discord instead. - - Please note that this form is for bugs only! - - type: input - attributes: - label: Summary - description: A simple summary of your bug report - validations: - required: true - - type: textarea - attributes: - label: Reproduction Steps - description: > - What you did to make it happen. - validations: - required: true - - type: textarea - attributes: - label: Expected Results - description: > - What did you expect to happen? - validations: - required: true - - type: textarea - attributes: - label: Actual Results - description: > - What actually happened? - validations: - required: true - - type: textarea - attributes: - label: System Information - description: Browser / Device information, if applicable. - validations: - required: false - - type: checkboxes - attributes: - label: Checklist - description: > - Let's make sure you've properly done due diligence when reporting this issue! - options: - - label: I have searched the open issues for duplicates. - required: true - - type: textarea - attributes: - label: Additional Context - description: If there is anything else to say, please do so here. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 0da9b912..00000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,5 +0,0 @@ -blank_issues_enabled: false -contact_links: - - name: Discord Server - about: Use our official Discord server to ask for help and questions as well. - url: https://pycord.dev/discord diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml deleted file mode 100644 index 833e25be..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Feature Request -description: Suggest a feature for this guide -labels: feature request -body: - - type: input - attributes: - label: Summary - description: > - A short summary of what your feature request is. - validations: - required: true - - type: textarea - attributes: - label: The Problem - description: > - What problem is your feature trying to solve? What becomes easier or possible - when this feature is implemented? - validations: - required: true - - type: textarea - attributes: - label: The Ideal Solution - description: > - What is your ideal solution to the problem? What would you like this feature to - do? - validations: - required: true - - type: textarea - attributes: - label: The Current Solution - description: > - What is the current solution to the problem, if any? - validations: - required: false - - type: textarea - attributes: - label: Additional Context - description: If there is anything else to say, please do so here. \ No newline at end of file diff --git a/.github/SECURITY.md b/.github/SECURITY.md deleted file mode 100644 index 15dfa20a..00000000 --- a/.github/SECURITY.md +++ /dev/null @@ -1,8 +0,0 @@ -# Security Policy - -## Reporting a Vulnerability - -If you find a vulnerability you have two ways to report it: - -- Write a dm to one of our core developers on https://pycord.dev/discord -- Write an email to admin@pycord.dev diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml deleted file mode 100644 index ed5081a4..00000000 --- a/.github/workflows/codespell.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: codespell -on: [pull_request, push] -jobs: - codespell: - if: github.event.pull_request.user.type != 'Bot' && !contains(github.event.pull_request.labels.*.name, 'skip-ci') - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v7 - - uses: actions/setup-python@v7 - with: - python-version: "3.x" - - run: pip install codespell - - run: codespell --ignore-words-list="groupt,nd,ot,claus,everytime" --skip="./yarn.lock" diff --git a/.github/workflows/devskim.yml b/.github/workflows/devskim.yml deleted file mode 100644 index eb8a160b..00000000 --- a/.github/workflows/devskim.yml +++ /dev/null @@ -1,34 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - -name: DevSkim - -on: - push: - branches: [ main, production ] - pull_request: - branches: [ main ] - schedule: - - cron: '22 3 * * 4' - -jobs: - lint: - name: DevSkim - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - steps: - - name: Checkout code - uses: actions/checkout@v7 - - - name: Run DevSkim scanner - uses: microsoft/DevSkim-Action@v1 - - - name: Upload DevSkim scan results to GitHub Security tab - uses: github/codeql-action/upload-sarif@v4 - with: - sarif_file: devskim-results.sarif diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 00000000..5c33c5f8 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,29 @@ +name: Documentation +on: + push: + branches: + - master + - main +permissions: + contents: read + pages: write + id-token: write +jobs: + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - uses: actions/configure-pages@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-python@v6 + with: + python-version: 3.x + - run: pip install zensical + - run: zensical build --clean + - uses: actions/upload-pages-artifact@v5 + with: + path: site + - uses: actions/deploy-pages@v5 + id: deployment diff --git a/.github/workflows/njsscan.yml b/.github/workflows/njsscan.yml deleted file mode 100644 index efb50ed0..00000000 --- a/.github/workflows/njsscan.yml +++ /dev/null @@ -1,41 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - -# This workflow integrates njsscan with GitHub's Code Scanning feature -# nodejsscan is a static security code scanner that finds insecure code patterns in your Node.js applications - -name: njsscan sarif - -on: - push: - branches: [ main, production ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ main ] - schedule: - - cron: '41 15 * * 4' - -permissions: - contents: read - -jobs: - njsscan: - permissions: - contents: read # for actions/checkout to fetch code - security-events: write # for github/codeql-action/upload-sarif to upload SARIF results - runs-on: ubuntu-latest - name: njsscan code scanning - steps: - - name: Checkout the code - uses: actions/checkout@v7 - - name: nodejsscan scan - id: njsscan - uses: ajinabraham/njsscan-action@c7b65a3590ade829628b2b3c87b34ac0ce666a79 - with: - args: '. --sarif --output results.sarif || true' - - name: Upload njsscan report - uses: github/codeql-action/upload-sarif@v4 - with: - sarif_file: results.sarif diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml deleted file mode 100644 index e0c991d3..00000000 --- a/.github/workflows/node.js.yml +++ /dev/null @@ -1,27 +0,0 @@ -# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -name: Node.js CI - -on: [push, pull_request] - -jobs: - check: - - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [22.6.0] - # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - - steps: - - uses: actions/checkout@v7 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v7 - with: - node-version: ${{ matrix.node-version }} - cache: 'yarn' - - run: yarn install --frozen-lockfile - - run: yarn run typecheck - - run: yarn run check diff --git a/.github/workflows/test-deploy.yml b/.github/workflows/test-deploy.yml deleted file mode 100644 index 75b1cbff..00000000 --- a/.github/workflows/test-deploy.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Test deployment - -on: - pull_request: - branches: - - main - push: - branches-ignore: - - production - # Review gh actions docs if you want to further define triggers, paths, etc - # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on - -jobs: - test-deploy: - name: Test deployment - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v7 - - uses: actions/setup-node@v7 - with: - node-version: 24.19.0 - cache: yarn - - - name: Install dependencies - run: yarn install --frozen-lockfile - - name: Test build website - run: yarn build diff --git a/.github/workflows/version-updates.yml b/.github/workflows/version-updates.yml deleted file mode 100644 index f98f1f34..00000000 --- a/.github/workflows/version-updates.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Version Update Auto Merge -on: pull_request - -permissions: - contents: write - pull-requests: write - -jobs: - auto-merge: - runs-on: ubuntu-latest - if: ${{ github.actor == 'dependabot[bot]' }} - steps: - - run: gh pr review --approve "$PR_URL" - env: - PR_URL: ${{github.event.pull_request.html_url}} - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - - run: gh pr merge --auto --squash "$PR_URL" - env: - PR_URL: ${{github.event.pull_request.html_url}} - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.gitignore b/.gitignore index 714ef102..3153a6ff 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,7 @@ yarn-error.log* /.vscode # Bot Tests -bot_tests/ \ No newline at end of file +bot_tests/ + +# Zensical out dir +site/ \ No newline at end of file diff --git a/.python-version b/.python-version new file mode 100644 index 00000000..24ee5b1b --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.13 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 37cf3933..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,23 +0,0 @@ -# Contributing to Pycord Guide - -First of all, thank you for contributing. Contributions help keep the guide up-to-date and make the guide better. Contributions are always welcome. - -The following is a set of guidelines for contributing to the guide. These are guidelines, not hard rules. - -## Submitting a Pull Request - -1. Make sure you are up to date with the latest changes. It is recommended you pull the latest changes from the master branch before working on your own. -2. Make sure to test your changes before submitting a pull request. -3. In the guide, make sure to explain everything in a way that is easy to understand. If it's an advanced guide that required some expertise, explain that in a note admonition. -4. Make sure you follow proper grammar and spelling. -5. Try to follow the guide's style. -6. Try to follow git conventions. If you are not familiar with git, you can find a good tutorial [here](https://www.conventionalcommits.org/en/v1.0.0/). - -### Licensing - -By submitting a pull request, you agree: - -1. That you are submitting your own work. You hold the copyright to your work. -2. To transfer your copyright to the guide. -3. To license your contribution under the MIT License. -4. If you are found to be in fault with any of the above, we shall not be held responsible in any way after the pull request has been merged. diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 408b3a7f..00000000 --- a/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) Pycord Development, All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index 8dcf3b17..00000000 --- a/babel.config.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - presets: [require.resolve('@docusaurus/core/lib/babel/preset')], - plugins: [ - [ - 'module-resolver', - { - root: ['./'], - alias: { - '@components': './src/components', - '@constants': './src/constants', - }, - }, - ], - ], -}; \ No newline at end of file diff --git a/crowdin.yml b/crowdin.yml deleted file mode 100644 index 8928ab37..00000000 --- a/crowdin.yml +++ /dev/null @@ -1,17 +0,0 @@ -base_url: "https://pycord.crowdin.com" -project_id_env: CROWDIN_PROJECT_ID -api_token_env: CROWDIN_API_TOKEN - -preserve_hierarchy: true - -commit_message: "docs: Update translations" - -export_languages: ["de", "ja", "fr", "it", "hi", "ko", "pt-BR", "es-ES", "zh-CN", "ru"] - -files: - - source: /i18n/en/**/* - translation: /i18n/%two_letters_code%/**/%original_file_name% - - source: /docs/**/* - translation: /i18n/%two_letters_code%/docusaurus-plugin-content-docs/current/**/%original_file_name% - - source: /src/pages/* - translation: /i18n/%two_letters_code%/docusaurus-plugin-content-pages%original_file_name% \ No newline at end of file diff --git a/static/img/favicon.ico b/docs/assets/favicon.ico similarity index 100% rename from static/img/favicon.ico rename to docs/assets/favicon.ico diff --git a/docs/assets/interactions/button-styles.png b/docs/assets/interactions/button-styles.png deleted file mode 100644 index 7480e1da90a413f8dfe8e13b66a9a2a8c5dc2bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40520 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 CfS#QI diff --git a/docs/assets/interactions/groups-and-subcommands.jpg b/docs/assets/interactions/groups-and-subcommands.jpg deleted file mode 100644 index ce6b5110ab3b4285f55402fb88c1b8a8f6ba9900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78518 zcmd?RcT`i`+Aka{Dk>@>3Q8;>Dncw2rDdxd5fGxHAT=r?C15O+03q3m6hUAM0$bP+ zl_pZ6LWs0Px{4U7frJneM5Kfyl&~Pl%D3F-ocFzVzwaO4xc3|19e13S!CI4*x#nEY zoX`9{bw<&r7=mrEJ#BLuwqywm)(3rH3Lfk?E1cgA7|h-tb^r#0t%9vsvI({fDlLIN zuq7I>6@QgsFxw@X|53iMWZysQEQP^h{b0-gS;rN+{yd(XaS|5anT_p@dH zDlakrSydr`9XscX4Z_~_#opR^)Zh^8*hw4vRgAS8v@4`1x?)&7eCMtWWN|?Bcppi3d}HKI>px zU^}mR-Mw|<+_|$q+x*w{ulE1rBue<=U6U#JR9`B%TYw*sz)?L2q%=fD5o9zotX zhz=O+6!uow9X}u6pq(e6QS#ntbJNS<;Lan54x7MWKgawZz0REfYb=*+`TU>vqPQ@a z1zn*~)cof?TRIH(26}Q$)qmdGcMJyGs0@RBsJeCa&egx#`^lF}Z$R8ST?m7%bAiEB zze3Nr-Mw-2$Y0+tS$h%&TQR6m%+vz1oEik@nGRckZuVvqgRD zHVvJen)xC(FTbGhWznm*bt7yhQ_Ammevm+KXrC>_w+LR`dK{w z@VAlgqd&&R#nUshbCP*rVeuzjOJK|XK^AoW2W5Yw3mSwaOP4QSwp{5aT}zgR{v>?k z@)f%duiSLvywcU%s=JTeTebP*{*x{?>=d-x|Mw0B)X4u{3((UF4g_Y23KnebvLz5RE!zk~!oaH&UynEZwg$Ej z_H60D)kQ_|_1~HJj(=z3JO7=D@A`KpzWcurzjT)6nUD4IdFAfM{OXq(HDFyhe$>_7 z$}3VQ_d#{i7s0SwL`G%E>RZ2m+;j5V!7Q7lzwP_FD{9t-@ER??g z{^Rc$tdfsFdSO{@X91g6vWQ;f4Q^t!O1-_hZO2@jFrKy>!0;I=xK%&EUGy%)Iu*w^ zVoPei-=agQ_bcv%hDTjuOWNJY9gS$VVc^IIt&AgeWn|X40`}d^Vp8w}&pdnLFEXBO z`URHa0NY_RyCV#V`tqA)s#rJ~D0RW_2W}A%ct?2_%@}_e@Rk=B{CEs7`G`jB799Lk zbx&~gyT~J7T1J~SJkx`f>fG$o?@gxQ{y1T9eZk(~Iw#dx5KNo_>y&O#QB%}8dFVcw znmh&Rk7Au%Ewo$$eo??QEDw#Pho}BvE{--bV!(r9RIFj0lU{^dRgeJPla_}SApR#k?cO0y(7WT|Z+c!Jw3rb0zOyr~RfzKd~aFkeo zhjCgQbb+NoD3;;Dr!P?eyv~Ab>J50d!Aqv=&>-Gwm&oU870kbhjy9W`FsYW^6 zqhF9iJ%|NsVlzW(o*YMC%!ewmUMXOkiSEac-ATfhE?rUb zBST?yb!*(U!)}1}kOKB#)At#EM)Rh(t$Hn>c3p>$XfWaK^4tE(&vAE~mUesk4I-k5 z7B0p;$AnDATRGvz?@sQF#ToAG!i3kt0|o4UEZ9%em)8+7$ar)G#HDQSJj^0V0&m2w z^|aN7IzaHSv3WUN^#qNJNjCb!wRT%lFN>8~hbn1e&o|`p$Gaoz9)~=-c{OC%vgY{+hKprZfLwZ}K7y}uPXSvcvo6FTtbn_P z{;uiqqz#1Kc2~Xl`X|g$C4MQc{)cd=M%Q&}@F;y=oBxv96gR^x8)2;5G zN(KVbg=FjufnIE|ktQX2+@$MHS1s-u5(4{@WgC+D$%6d_V2g-Yf6Q{Dp8}>_iyHm` zZpNX8r)Ap!E3d0XK$cT?Ym6Z$QUQBgk%f)ZP>H5+TuPsH)%xb_Nk!jp_}=K$YnZ6D zs*G6flk&=5Y8|<7a}u1#^w&wo+ABQxoYDerFL!isF}H^vi0n%MS4Amc%kxE-z+$o2 zkVzAK1CT69>>wP%VR@&^U$yd89!cOT6g!WlpSY9N22aVj*t4Rk1mk;%go@Hr4b`J@ z`V{U~y)mYG2)H|a!Xd@!T$)XtMujWgZc$j5(@xO)-T&|pb|^IivVuBB*o>XJsRrA@`?o#7ohVMJQzi?0i>&+w(Z;$uVMfM~>2QE`J zk?4!9?-K*iTk%V~k^YPX`tn-80yO>vP_7djFGCdqZB5|%Uc)$VKy65`*xu1y1l}8J z4;c{zp?3hG4ZYyrYC1L9v4_GodsxBQWA8rmXKH-L0gP4Q;G8oiU%tsS!yTRMfcsKSX%Pm1n`G%7Kcgqo-;IqMZVBKND7 z2lmO!#mRyR1#IP_Y>E7tQF7l1{VF_qarC~-g5OWj0EENOfOR5Li{-iwyvdeQBm9L=8DzJn!{h*GmAQ{%_E9tV<~FK~iwnQoX; za%CG@&(eDz`x15TyKo-SM1gp77qsL}@h0-uL8#3jlSrvG8I}YCk^I#a$t!RM9yYbd zU&zk&%8m!HVjl&Qw_+aZ7d*#^M(f8VPL2hsVOPvglqz7D{=o@jC#|hLK^*T(FNddE zLzz@em|Ovizr9CuTmshi4kk(cyk--I<^>#ROhFj|n8^d1!*wUsM2wT7*d+W#(t1m{ z%%_(I!|QgKoAHy?#zS+hJG^6?D%Dquy&A+gX!a+=u`zh(a7lGnd*qeONz3i`M$%W` zewCVGHr2!G2n!If?S!S1hQkqVZG|%A#DJ_CqAnVej7EfI(D@*7=mqg@a#HPizakt} zvJ7}GHfaP6n1;z){Zw&0+2I#B>lTemt<8vN)Arg810Fz|O@*i>x4_?WN9wsKDaNCN zVpgglHcGT^TuiTeHL!PdTTmwLQ`@Cn&fHi53w!n0OG>{2hAN>W>5~fB4fImNUa)CU z2YL&Tx`nAJ#&{fW5%2WY6sO2`l7176Rq>FwDgiC(=O22`P zGDWrY)30Lt%Ukcr9AAr!69R|B%)R;OHF&)mvC=~lI;jVnR9@mfUj1Y-TAcBvI%RPr z@0$0W{+TxRF%CP&cF@`TSeYB!&7f`)kA>Kxjqrh9t|T}ZM)b<&Qy+163{ZR=hp$Uu=7Rq}+dA zj{JPiW)SoUo;NWUqvHE2ZU0_#+QyoSMmJF+?`V;nM{32#F>Z6DE zW{HX$wD$IrDJpAyZ{ZJj7$VgH-S>;3v4(o3$FJ0hFFK<)1pnZpH~NaL@;t{D9Y`j{ zj=Xs|}?im?vyNY0C7q zmWth(aHU$a0-SX{U6rN*3^y&pW2Sl)u!g}M3HGAb^tW1w*W&Eh1bxGI!C{kz#TbYs)3;K6+2sG5R?r+ z_omyZ-5UK?diuFf{#aG!l7!`G>i5yY%H`Q_)DLh4-a#57Tl^g?Sr#D8&6pR2%q zU}q+F600OrjpA(~iE5fa%VeJQ0}zR*Cp~a7)*wBk1fIot*)zFPJ)274-ZQ|>qbHNK z&aCAj|F{uw&>+Al(CbXcQ2eOWIP5?kw<46AKE)7*)MasR{>io))Mv2*<$++N@Rfy| zq)Q%0ABsbYY|$&wFV!+K9(-Oi?fN@nMy-4|buoP^2F_t+W z7sOcqquh5BP-EL|u2+V;&-M`Cr)A#`#q#&xtQgbrUVSmEqu8o=mR=_9pJei@R_1CY zQX|5M-?)ji^HMaVZmS@N(iN~bbEA_Ud=#)>MUXvIhvW~Ysueb))Ntqq%Y9u~BjGaK zQ69PeDc&j{*VvRXxP}s@j}PNppe~47xNP$<8_P%DgA_vAZd^#O_51kmTvXS$uEx^#&*|q6PXAh^r+-mM6rvR{ zTPGR0f9#Xz4mzR>{SLHIzyh*R_o_n$F4B{J#Bw7_Hu?QJIG>pqgn9tYm=RIcFN2`e z5nNn~u<8jSZ@@4Y3*Houxwh9m>zQp6oH}3oF0(~4Kxr&%2^@~l6M7TfFu?Egk!ARv zv(}4`xgdkI9_fz-w9yTSd-Sd5w~>w5Xo9{x9qG+M@zoOr!ivNL9!d>b%Q`H#$WAeR zz&<8JvNv|e7ZT5Aaxar|X6j(YzMJ2AM$7B$_EwORri?Ugg_%yCR5bZBiy1$Qj^)Th z`v9^;7Ymrshm#)}A^X^pD}a&I41Wh_pp3V=vKU@*tp9w-;z zt)Dj?jVI3*m0hj#iSk^+ONm4`D&Ng#yAQCs<*(d31NBR?OXp1%!l^Ga_I^a<&~xa_ z$Fd@b=|hoM6tEc5Yi9u&9tEzs%<<)}A{>+%e+BgcWWx++aQqOk8}eOvicO;N)p#+|Fe8q>kQsw$BS_U+V7EI)j zAObO2%GhmqCvjk%B#HHzfXI^SHXh{;jNNtd4I#kADi4J-Pe%4npXf(N%F%^w!u?h{ zVUgUfQ2Gn1Th6@nh(Cm2zX}2UoMf?y1Sble#PWpwg?wsstu8XoP>;J7ZvuFTNc@AA z>h~pW*0C*GE5+D`xy;tfL}h;y*1_=B2elqv#JnaWJ8$q4GpH(9IUz`%Z)RfPU0M3k zW44?+m_7T$s7+u0W*xGfK#Y7W!+|XB+vG>YYe-f(pFY_!>=xTCBy7hO>CYlIY3{kI z@(8b1+!$C2=r#9Basod)(b=Fzw;`L&UWG-Zp6St2z)q(~z7IP*ohaCJVI*ao$&GaO z$X38C5MIV5ERc?72$9t)z;QNs{;`StPn8CuTw5G@=R5$O?To-PjzMbXMf%7N1xy_| zIc>RH0UOVdll+Ti=M^v|kh3#}dlX1b9^xj`eX(riO8{I{b0#p9uha}r_S6xDM$Zb` zx37CSp=H?pOnT$_tv8nMh?{^u1)Kk%K zc!Qpli3ZCpqS%482$_6SU1FHm zjyYl|FHGN@%MET@`CJMk*2C#T74Y)p1j0_RiLhOSeNTQ!+fJ)_9o0l!SGzG#RO2La zPTcz@eZuZ5?I2#et5i^ne1&sF_wV@R?`r?syQ=%j{pNc7{OY&8C0oB2*_RQ+2$7S* zTu(fc{@MLaN|*IKs2aSv z(fmJd$p6<@f-9K+vuSS$S@rir!4}Vh@;W*O6-_TE$AE0_+zA#*B5We7_BU+@5ImpQ zy!*lynzn)X??x;q8K-&PEG{YdHiOP31KZs4@ z$U(m5_9ZNaw(EUgh!1#GCZ^bgGV=l7=F0DKb+Yp!u~FRw8;n=Ltf&*yy`y3mkCj({ zfipv8no0`TilsoLsPTfBIjJt*7QDmc0?;nrM$?h0_Xf-+qFi40$S@H+d-X=oBchw{ zg4!bb4IS_DAjQvDWAI_IC;Qa1lJL+tUT?66WoQSV-cX@wYd2YJG*V5?y}39y?xz%J zCXf^ByS|Km&4ELU^bXwz+dm~Y$QKAxe>k9&6l7mwkXYs zDz4{etG=fhh^HvSZjqb1PIP@sKv8?}r!(zo`K7-54_Foca1Qc@NPvD^i36W zfB0&d08#wBj@bo)OxKXTzKBO&?H8`+>INk3yTCwq&t+e**AWKUSsLGPOCDqZMojR0DVf;c{u6h)?RaV4=wUPuopnGH&lsXh;(=x{ zVtBNL`w+dw(g2`4i(8Xx(R|Jg1*w@vefEnV)j`J9 zp2-Dnu4Amgd`fohIjimz+qUc1IdjMwB4Ct(`dUgH%GR=|>+JXLp&(efd_$Vfu3W#X z-TDMA{2t2d3hl$!9|m2Xop|>m^@es`&LwyIx+;v!PKGQtf^c!VwTVbU$uxIh`8z_m zP4w5Hg3adEE6ZPUmmwA z)|NpA@Nd;&ZKGm%1zluwR77rsi%u|N!bu5+7G5oIWdXPh>;!iLxje>N^Vp`reI0b3 zDbO4#)@@`ROm}UG4wlzM1Y~}R$_q1X00v-;Xjq&|;A2(5Ms9_18W|Vr)D_H8b*zkPR>1taf+KfN?>J>o zr*fs|-iAp+D@6lVbuK0?HBTPJbfr^gtf%&hKxa8|;8YuZs0t}^Cil&NYmQ6JWjfIM z+w%+1UI;m0BE>l>+uS|zR-(|DT8ms2B@bXvGixt3&@Unv;5ISujHgb7da9-CIhWt( z2=vK1DL?GiZnSkQ7~%+C{b0+6;S-dM!~6HUe&mF4XOlCmr>S+)#}JatD`07X-U?W` zg`A3<+a-TCah$k~7!Q~F*$piml}%w@et_VC#EJqh6@H})cA(!TgU?ATCo(`ZeQ^QN zp83-c{D3&riCEAjRnE(kh|7?(tzzR>^ghUwOF!W_F)c@ZR|eO_e1-(vc_BNm=IBPL zGd|?p<@8;Se3Q71n^jXO8!v4Rx^ymg$!)h&L&<>G!iIT53CJb}%!eU|*bz3`At^S< zE5iO=98Q8+%@}=oe|G=d&!3ypuidfv_yv=LY$5VV;D9fvl7iHx5A`8|ed>+E7>$f1 z`W1Ry+sm=)j23KMyBIM<9ay{#;{(Yb;DGFQ#aq$X{h&Xvvlm~vI zS1^B*q4>%7Ar~f-!d-?FzQ5&{Nsg;sW9}R*krNxk=N}m9W$#tl2wa$Pd)I9=+g)OG zmF#DtkzV9mZ5=1LS)xDdeIeuM_k?npG^hg%$D4h4RGQ0XDqs{S?jt9$+K7EjaFr(1 zD~`&Xf&v3s$+3_{O}U-#feD?FDOGh7R^d?{TS6}jjRej^1$B92t}EXJVqdwl6Wu&( z0qiR`y9jd#X0gTo=k0HA@3|`W$md=JLqn$LX%4*yI?`E0k23N!G3=+WrQV8o4FQEZ z>MfD}g(4?lXQauo2Obb#Fl3w0KSd4=WHmhc zgqnOP)hIe(n?mNR{PuGEOg-zz=SQYT-Z=i=S9Vze+XngBh|=4|faMv`3332&sKF3+ zQo;5EWuM;qa(7(#rR0~#O79U5?<~J{%zM-6lobJqKN9EDYz5B1odx39nK-=N=mPu& zQWQifdmJeZ0zdS+$^@8agZOowfx$It!HK1_3CWMN^b;;*U%zoF@kM!9-uln4@3Z%knV)>Vm@D)V#I>jS*K9jdXQCbcRfnWuTd| z!*?hYXJ@dwl|kl6=*u9<4;(T_0}_>og_HC7z`U)fg03W6H^kj!C00GzX>L*Gj%#fs z>=9?VyR-X!2X~6~E2^)GdUJURID`D|O}wd6;WfOB=QwmY%POJgYHA> zz-TeJDjyyTMQ84h$}FK6&2Ri5u>vNr(~VVY&I;UsFZleqe;EW>H#2nW0~c9{H4I*57$I@-CrnRFS00|2C|@onb_IrXmT@kiZu>J zxz-5V3)?XZJ7a`jWiKJpgx0(d^q~?`r3P?$)WPzAXnDpTt2X13uu=5&`C?y>?A!c| zUX%1CGVUScGXqT2P;%kK%orBf@;YCPggkP{J^mm6Z^##0_V)xYWNk9Ahx?xNSKK2R z*o$t4tp8*IyZ~}B%T55~Aq*<6%a3`|%%0H7iw{KKhhke5Q6b3^#3sn{Us+r@;k>$f z>&QE?Nz|lK8}5dvB;`c=`RdejNo^>S^Rz6m;76xkx&dm@vwBKaF(XAcjS5u6Y(C_Q z71Q~|R$;trhNLhFJOI>O6yK;jvd!}24d&ZbvjP>{BnK$XVKv&LHRuLl!ezkx#Z znnu@tFDiRblH#VXJ~tZiR0V%!bJiGRXoZDHeZ0Wc{F4 zO?rs*pqd-4Pxpn#naZ>@Gi<9wq_|l*7Lp~RIJT$jN3G{W0I#!vDyBayyEz+a(0WNE z&q*sB*C@#KF7tEx!ztAEz?5@c%Jc-&r;zyWoi5!DD<`6F&m)_WYl!vbXezM@`*T1b z(H|YI(hQFaudSxX*ZLrv$q=`}rh+*)gaLQQUDFf9S`!W6+KSqD!Kxl;mG%8?p+_y+ zC%eqbYsrC{dd4XozM!i=nU zw~31-Bzcad3ebRN?crNe)gOTSWd1-PWF|Mg^<@rj1wygj#jVeACggY z30vgTupq;}L_Q+u_;J@D{ZRJ^J4C(DizggyUShO%^+H|4PmA}y8B*DV$p}SadUxK= zy{tbx;BLqJ!$_~V=II^BVzry61%vwF0WPUMGSeU7CM2V}Wl(;>{XboZ^&6n|C+y=k zL9nbcX;bV=+=leSZUV~R({`gD(KPF*0G;Sp_#<5AY+6T-qZzN(H{X-*yOB5=x{3R%$8C8Fhwccr(=R z7ugEc?kqf({-rhP&P<(P8*fckMQjR6>zw2hz5UsXO}!^b345z=It! zdoti(UobQ1v1X!4{f>P$Sy90xz3-`KLyMgdUX$|}h zQS^%f2JBCsyp5bZoKI*ZRnVK^5VWq5xri3A4|6oAT_6HTa1g~tS?-lVu0B3$15k-8 zG4~+172pDcR~g{F%W$sJ25NPa#%GCBrAhTg=gN6UtHM#IP2a!A-;{*kgaYp|s5j^R z2goRr^)xz*o|fE92lSbfZa?iO`IC$xt$gV!ytAkG+(F9oT2he8#0gv=ZBRS>; zWbDr8z~05Q*>;mDiK^B)W(;*!>0pTuBn>G}v>e|*Dl0~gqjQWYrTOHD1p|)y;Mo+X zayn;`h<+%gNKX^`kZ&ETAkWHzFL%W(nw2UE>a{#}K7#S+_*9^HEM6nzkM&hs>5~y_(Bftl+a%kT)rf&9WK%(p%Fj z-OTz%>6xr1sYA0x=2o;$@}xKqT9tI&6DT@-xJ zDD`#yo_ag9z<<#p-^b87L?ek5eA_21@Zeo``#}e?Yb!4qaQ=3Rvsezr2jwO70C>M{ z6H$Z}km^Y)gl@fx{5w4qc~cp6}fx-J4Kw0$BlTXfGzxQ==+0FOdGY^i%; z`Lt*+IX4?2J!Kzhxq#JwZe0GL;V_|}=6ur+;}eLT)~9^L6!!;PZih6hYlQW{1aEJ# z^aRM}Zm!+PL#!Zt*5w&cd3IQq5`R5iDQ2Xz46n<#K)Q*Evfaka^taY8ahAt|ib`cz zJ|?RUZuh1KkMx1EC1Z+S_G2S__{;WF|oJQ2Wu7i6k4*TpCzZFqWDAl#d3^ zG}pME;Om*CQ|;mtoxbJn>!;piEfh|JCA#YjNI6{cQ5kI_2g1eWQosT_@A}ytBZ{~J zf_=ymf;^f#q^>v}b3cH;yG^ zS+#SLvI1Z9dAdEQsjiA`%y4~RY*M*#|HaIaZx~u~K~0@HYAo?iVT538k?0{orf~s1 zp`e~ehg`)Hj#${LvZT-73Awf+TlE*fTlA6g2a9{D$9%_77oh`)moyJ2c^m?=+b( z9wCSB&7+m@I@0stmz@1THTSJ>@+of)aN#i$>FbQ>aRM^#t|y>l5*Ku0DDr62yysq1 zTGaZ~S9T?1xpvYU8CqE{EoKktr!`u&Z>0xt^{9rF@=EH0hH;gCaD+kO3}hZI-vwld zhIvXdHDyT{a8K;RSGrG72ULFT1dq0s0BpW){48QQV0|X_A^;bw+H|Qpigh1iXX`ZT z=XN+Pww-O(fx`2 z(kA3G%Om&$K*uv*db#ums|8Xm`S1sX-9Hu`UK4f$G^teYLbnWFf-!c|c>K1ivR1mT zTkH{;&R0&>`;@k$Al~0#j2uzQwBmLxR&Qrv9R}+ZFf!mZhn8qSjPQ<7j~1O%>0_Ye zamb;(oZTYGTUx93C_^Dx)mAQMV`G6jzk5FRYS9H$R84So@L~Qi}FuXctzDoRy zs*UCwbfb;zEFA1Y4mHfH*BCsJq~-jXJ~M)u@gt~+m96O`iKC|n=>dBPRNnzO=f6&2-Ro$z~OZUM|e4 zN3KNrBm0?r;Uh*XJjV64D7jGuVmtFl{@wh`Zn%6b-sy~4K!KyfiBRjq`&Ol)HB{+&kA6A4-8J1qyr@PTVT&pm6&Dl2t zdcD210gJ`RckO2W#G3?!{2AonNkof0i1*OzXN8c+D2o+A*-{U%2<;A;*|5q(+IrxG zxR}R?o69oWT5F$&JL)ce83t$hH_gA6WhA(pvYxS8bQ4pH&uRBqw}x01|@$_RPyRv`T`-j0Z?>QXFkNFe7$r zrZU3r^2jUjXGDx<#zXW5yidVp4jUIFa};Mh$mBNAphVu7=!s^@DZdw4nsx$DVPlS3 zuk6IjaWuxM$jNhh#IE|ShajKbDUUF|FOKhWTO=4?kkRB}#3=3~xSH%XWQdZQ5Rd4a zC?QOIq}Z&PB}}Y!dG%yEx2m`H#7opmkJ9|tH|+E+`wOLevkDssjKVRIYajc-iRFGC z`(3mvPh0=#`1cJ8|EpWZRKAwNC0i#<(tnhhHOg$j=Vspp&887CQ3XG%|`*UP^D` zI5yL^GVyMqL!@oElOn4~-bAuWYmuE!4rGwng+l5E+xWOK^VOBAi!qlk>Aub}dw4;- z^t0cL$6dqTaV})@-lt8Z?RWjcL@~hSbOe2J!MT|plSyj8YL0uVbo-ceuv@WV`QtAJ zSgpl=p}wwz60^Gp2W?y~MA*eOb;eBzZtijM*lc!o_@f>H62*uK`+&Z#YWmy)qD}Z_ z79CB$zL^eSeZ(p)o|agpQw9%_al(puQC~N)Jm^7^TaBO3yFmZ?LH@AA<+98^x4g$T z$0`=SpK?85Ii8wUQB%!c{IzNVgLcDW3X$Yx{6!^MO$ zr4iMm?CQ|T9lX5qOFgxbW$ykf57Ru%&b}@$w@LPR?VdIEEs^k}y(s|TNNb;X)ZL%Z zohPCTzvpXpNPbS_Ohzlc|JCSFOGY7(#BSbzi#pX!!3AB6kJx4?cVbOP=uP}+Yu%pV z6ly%^KspxI++16{r|Evj@3qC*w(jvVrgLR4v6s~I=@B`fGDip5aK;q1t_8mxSUn7X zM0MWew{qQ{#%g@SI=iOK_!?KMTj#G!)zWH-b=?SA)h6c{s=&NrP63LXiJ+S4eGh-)>M}Ov&*{p( zojtSjVR>)D7#r-j&pX{Ye%b!hfa%G8hpZTCHRKH0oJWG*0bV^A9{Gv{16Ny%%ON+^ zQ{9K~Mz2#{rP!vAd1WOx?c3Yj7ET*?8!BMBH#pKpo0@{27T?145yh-QXOJeWuHS!$ z&G^EV2GGmq=Ly-!*A}$(mis@eT*GgDuxtv++v_erqKCRFhfG$I-w0$b&L4eGI}Env z90u(3kq>uwmzq2C;&kFQIkumAF`68s!rPmV`kMx%xR*Gkd>&is&K~6K{`?~~&iq3{ z)7UY+!HLdZkY4)fQEHdZ1W{gzWMU#1z-sC7W^uVSbI!#atsC>@VUe33fB9FYlN3e5 zNJxesSY@P(klz(O5Z|5E2RlcCfDbeTrNc+AfZu3IwJFsXPbwKVsv_pj4GJsM-R3w z#l>3Bu$29-2fjY_ipALMI9Bd(>&;=Q{gb4&wV}yo0VSgj=a|79{W>D~Yd+)(9-;#q zWfjx(x}o5w*1gE3$Qx$}hB)i<;$L$NQyU8!n?l2t`W%1pxM-^%)V}Au)S0!OeC1qK z&sk4Y3LF0$hzW~U^}R5fxKK)lk_zPBN7AxO0XBW!dqF-wA6ZMN*B}hQAI@iq2v>Q> zPL96mm(v_fuVX*Xsd+X^6|j4jU2TxtXUZoHe@&ix1#ld)uxlwAt_tq$nyP5KU1$=k z>aYm{H1vtp0wd#-T>jJ>l-HYcrLnzCYlOG})-x zMt9=>fx@`s{gglw5$u2f`75z;8JpPQ2&LVwf+CL#dAWT=qDcK8FfDG40abBPEofCE zl^B`^u8eFbM_+zJx>(}`>9buGn6ZGV;E0}N0ctr?`}!$3OWSWWrgzW5l>GruG_&G= zu;?ivRrrtET=WEW7@KiwN)z5^)=+eRWVJ;4zZ{DpUVIVS;2Bkc%PzA+3`ntLUIb7iX~e~FvBkZt$c>S1e!_@p3wl=$E( ze$fjX=eSk)=cvUS>(?N}Wm^B7<}ZW$6F0y2IH zq^MwcGAyB;@kDAFagn^9a5Is`sYatGDjV)pl-?{R6Q#i*@%A($w$`E)M|SCwS@1Zf z!8o$Qo-FXFYs3UmB+-ydA{Ez|FUc4$dTU>?=mBoI|6(~+(= zuRQOLS8A`i4o`{itZV>3+Axg(|(5u2v>n`wUPO4s(*(aGNC5_%Dt=_;`U;n;Cz zRaQ|y0V&Uwfzz!I=~sa0ycwKXYf9bp(%xPz?XKJ{U5`7D2iu#>r$gom!>aS9wb#~< zK{xM@=@N|;uyyiKO8vzt+Nc6Hz+mW~{1j;n&O21G3<3$+d&rw?lO%~?38rCeKj znz^xlO^u52_2i(qY^6Y*(Eef~X^u6o@v@o>L3IV1G=Se<R&8ZOfh3xj7V{WRO8suvKfHxH8R$kJt(sA)=Tu z6H$J9Oim>_kV)3}w!#_QxHl5RwTlS~PT6>?i<1VYy@~cT3Cy*syT0HY$W7hVu5UsN z1=$cTN-e8O3H7W!{b%rI!yKn|C%it}mHJg?ggDwN4LqJCG+R{M#LcJ~WbR^QAWl~sCfNRNr zNp_3E3<&)P7zyAZnJGHj)1n8zDYFKXP~bL}nrKsU`p+(+?^rK&#Qs@z?doq?$$Gcm z1xiDCcProi8K#5b+DkyXO3QS`6j@HNo0c*Tzufw-R6!-h-+oE}8G#%k!$q!;@B;Rm zGzz2Wt7uv>Lndt%lx*$IVLURA;8|EVg%juy7@?A{#dz##JX}wNJaNA|0$%lt+gT4X zuRCjmddM%l;2w{xI;P(4C8y`&#+4%x9<*{y9J|Tbbg(eb53oJzI2!+*39cwDNc794 zdl-&%7`1(x1?$vG$A!JUmH}|lDLSAto1xnT0bKoUq|bTLf{&kT{T%Y1b<@fA?Y03b zaVmlpJ6`wD+N95ryfrhKybh-Aakm?U&WMQpXmF4y^_PKSSLEm90Qp-;CcGlPhBoU! z6fGA)EA+k>)a)_57ax&ycS38qIHN&8Wa8Acq1|5TyHQU-jpuWcFuH)f|7f^ z`Ez1aT&W?hRxOVOm^CiD9C(uLloYtMtC9KQK|a#YOg}T88K|CL+QY@h3lcx-d@6(1 z{!4N@ULYjGjo$q6uPOeYx4A1x+@LptAm;w>&9Hx0ti>T%SMfSmiqS2%)opbif8a;J85t*%0;%RaBmPOB+$Q#U!)VP4) zI@Fmi(UTj647GN$Oxev|qsy95?br4KlaV$i57%?+;g*)*`=E_$M3LQ?0qP;d(f9d; zFS)$wFP)UAapKbCxaiDdPx{~+;H))fSBoPv=6@kJsErym=9WFVQ~6n*Cy`vB%b~H9 z^eo8v6~w1n{Zem;h>Os+9B60gD7cyz2GIrq(*0XNYZH3=Xs`L|VMH`!^E7iV4x)JU zwa}J(&*vrM=*_`I;0)QYbR~Q%(AGS`Cv9}~731`5C{UW%%Ga#u%F^wu6@{^6tJSuI z&JZ^vwK5jM&aIfnRby+W*rj z80A8?n=&QdHz8#4`F_i|nXF51Rtoh3%FPQlrrq=QX}UU5=`6X)q$BJVuw`3iwxf>; zt%vaL3E-yh;;-WC1P$LHac(Q0E7+yypA*pX-G09jb~c}~B~O32p%|mxGO(`8dgqzE z0&;sq5DHXTn47p$(3?(u1=5c;(GKISP%&Ie}Thz8^; zd@wPFrf+f%RXFBcnc3#vsx>QCc_0+DJPV51qtsSYom8LpZ6}M>UQ}|`=Ur*Onx%6; zm)X`vmmOc@V1h1VOod8&2Yr4cK(oEMB|CqNzQ)k6!QKBMwiw9$aK$|F!0J#xQ^yA% z93w(i*rRcixS_Xik%sE;N+xXE(k$j@1tasAk)m@R1mOgz#PRAU-VmtU0z{GW8K&!Y zo0opB8HtpS!->o1cXdYmar%yOBxa7!i z1?+bh{R`6q01A~YP81l$z8Cf{Dzo*DdDQM7deEb>8hKYMm#@k6B*Q-F zA*KZFHdZMm;VPk>^-qKPCY`4uV<+1KK2Eo7&-&8@QIRbS9qZ~^ly4*-j6l@P$x*$? z*zgf@E9t&*sHZlil96EO;ruI8Fm$$g#~h`35DI4nZqEW4d+e}U#n+!_mujah+n&#} zQGbQVSxu>CPEQbui=~s-<^ADE6jDf_KcCi}G{Wd)B!b#5_F!d~^;=2?Rj5A~_JVM{ z^>ZwJ)a88V1rIu7bU{9HacoAe%!SvQNq^zueR>dt?e*e~L7`E=`sl@>A>6 zgBOG!*&@z7GW2F>kHJmz9j^X?mygSt`p8K+(QCVH$}4a7(?2VIET?g2KA3>}=NiGn zw?nL!f-!3cF){T!j7)OFvurp@D?lUrkja z2QDneq@P0Ef@3$ZhF@9M>#_*h1;bvfb3(haQ-U?!)wjFO#p>R8R`7A}bN#q>M-Q4W z>Slj<^VCGde7H{otSt8_1qR~zo$XsdJki-v(oH>i7mE}tOB2?++oJCU6h8JED7<$h zIkn&W7SmAEaz$J}s;Q;_b3c?7a6_?Q0qI$~qWD3ge49{cT)*2POMn8;dJKJYnn&zt zUi?A2*`ZiEq8C77O4^XQPE*TFLCFG>4-#%|LTp7L_42 zD$lFr_(`GBJ0&7PK|;X z3w9%W<)j5b^S_*rOj%|P3{NgDH;(mY_kd7=mB-(uy2aak+h~4}#Vh`Nb0hWqy+C`K zAF(CI{$7p7(0I7H^cIfYsMz>Pf>&%68I^IGdmvVJw2myc({&~awJ8SO7yPj6gS%rx z)8U4vM~p{JvysQLeftXkLq`h%R(C?YLK#PD@HUi4h3v~BC^ZkoN}Mtizn5OFN}c@; zKaIIBIXpceIT3mGYyALwfvYMY+Zk@~*1x>QKy~ z6C8Tk0%kjV%JWjbQ^(HA;5@$&RQbtQe(}e0uLxpp{o3&RfNMO%skfZI9jGv@Qw|Iw z0OmiS@n0r;?X0zul#Mv4;bEe<;gnG|h6cQM4|LC~ptQ(}(k(n%N?g>i-6*!9vwaP^ z`u*)6@%Ed-%SUHZ{-ko~7M*{>u0Ai%ZRkjhCx@(_$S$P~qcS zsJ-H2m>J@r7GB~QpytB|bdJ1Ol^O*0vtCXHS2h|c{#IPnhD@Wy&gNEa3PfOPVR>X~FRr`#; zsv?qF=isDkfVYDB0`RnT)H^9o8-~r^6iVvCZNP4{U?J>0_wJ*2eL=Yg z9rq2m5}6CjYPuEPu`_el3E~c*MUAW0%9m_l*JT{+lUb_FkjQPgRBM@d70HqQd2< z%b(qy!)=`_l4oXa(4wzCypiFH+-|cGx$SBRD=Po+3bh{tNmU`hclono(=DIw|2a+s z{rSJ!l5h1QsL|WBLV^{Z!F9JcshpcQCCrW7AMt(MWA~$w3eC&$dWn$XwI_pa)?F<* z@kWaVLE%5uienU&0JoBMIHt;BS;m}LB(0M~irJEse0L|m_rD36!e5N0E`V>-s5YJ* zj;^qqGgKG<{`n!_?hw<=+|Ib+#&eX0H{yFrdfRag0Bmkf2dMR;Mm~QyI~4oTU*qU7 z8*#-kBs4T|uj5@T_U>K>>xS71h;G?AzHWR&nWd_|ZtB-6-U8t!sR&#WK>p}YT9-P! zJT|kZ%gUp0Qu9_)5;|9&VAs?4(|GBPs=%chx45-L`?_OEQ&i2%^pWbcvo7pjB7(U@ zdP7t*O}A|Tt6JU7=g}b8Fj$P~>(sM~?FIth(lXjJ;zqObV6phqe#_kvCM{o0Tg^jT zWsc$Pt-`Y}`tR>uP!eAj5fVl_9;6*k(*^#q3RSbTdrU+>ZLRtGwbb!9 zkp3qHvuSA#l(PtZ=PI&;z&-ugci3 z%Wwc*xc435*kdRNYV|s`edm}V)l#df%3R~ZL~B^u<>c<07hyBXRLb`6FO%>EZ-RaU zd<8aCj@EQ>Wdf4g7XTGXI*b7{?cmL|S~#HmT3`W)}oUtS|be`e50#166Y59Z{FwTR8KD!J05_gxz33JtxOsR1O2nYFo5t@ z2JJP00DoACo^OGyN{81Kalo6Gv~E;%o3?sEE%l?T-yDthd2_XQ+S&O`@|X^HlU~^c=zt^ z4^$8pb0Y%vHNP(HpOA8ku%UR@1HMhX39(B}VX6Y1!c&YbrUsHF>T)#TbJQu+69qm2XpqS1e!he!RFlxJjT+oXSem3 zOe7i2hL?7Jn-;52(JUtJ5*&#s3%{Kpm8o-dHgG=VrZ0oR1eW(kQ8A$Yhin@}rS{QA z96iy=>TV%{jy@c(+YN-S+(v(6^cssN7i)UszQy^za325edd+WR(x@lIHh46=s0`SU z9xiIED=)9NFQkN$1eDT-doYy$7VyNHs@a(`E%izCUn zg3CPy)G&F7gWcM=vFXzKK+|l>;{DXsTa}EJw;q$`7!F=)f0@0nw~&pPR3JjnA@zP! z21I4R`$qB~bbP012d^HbCCdZ$2$Q4lqH|mB6l_bKh=vUFW)AG8opRT>!7WI&6&3M43*GGGd4EG3E;c?1jQmJ+GY`+6>%)K9K2S8O^; zjwyz!NP@Lj76lmcjoe&P>eLVVqi2dgL?|O0o^3Q&bsHJUHDRYX!I6^J z^w`$41?VAQN^n#RV5+2!okUI;N1(W6J0~kpcAHU1QgFeDyByM{+I12#7fKz4DNmOD zL}u(0-mLDvGMW1Fbp&sQ;cRhp=56KE%*sbvQMs<}*$sV37M$YDCrb-ka(?|PzdKo5 zL(g7x&(%!~2e;0ri~+K>9H=T1L2Z7BhjThW-bmJ1^V3b)KInYb)M90D#k>AnIb4&P z#DPl=11-Reyp*-Wmm29sTRM@Rr$Ei7K@##CrMQJfW9G{{x ztQq1CTK5f!vDM-fXn#A8TT4{ZcgQ1o^vlb#NK>Xj zL0-l$gZ(9p`bxx8=mz}B&LDSaTXsKAqgmjGdQsYE$v+D3(PV92^^^v*-JJ5%$?-#b z&idW-L*FP`51DD5CD57ZsPnVlA0>3LmS`qD*Pn1e68`au4JMFmT1U50$T)>Q*TjYG&Yjipj&Uz8#1!v_GsI^#?p~pkv}p7v?$3X@@57j* z3|<5?XA^tTx^L0QAVnpxJ~U>nT}ISXq$i7-3JUQ^rh9*jufaSyVB)FMiOAVf}d@SV7= zV09TF`&how66o{3@fzn_!1d?$+Zf0@J{OEj$IjX0b%X_EE9*z$zu4WSWfWAilSv^m zFrule8@xe5CpXVtTpGlJFJ7Q|f6NjuiXTx$Z4-5JUpA)|70u19>55Cj1ou=e$1A{wg6yK&srkck#pIF+QrV_-5yPoWv|UnT zR$`QHE)K+D@%DK(c~i(cpl3|B@%RAMjSG3CGoZ)(oPMf|c20KGAQ zv0VHY?ee<;mQ%*lH5F<}{-$IG`4w=m6%5NmC}{mUc3;96FvUzL1j-`V;}nEuHTeB7 z&U2>Si&#H<#ouCcBF?oQut3P9NN;`!VVhi_{s=A)aW((9sqgFq8-3kCc@Eq2`9yre z<@{*{F*$WHffe;%BrdyUy7EM*?x2KWTPqrW0gk|%XZfqMUQGfGtf_L%g`e$7Ica{F z9Jc>2+a{jZlIZ>&82kP<@>+G7WvfC z8cPSEcH{$Y#&J{fHhwZ1g}itiYZFceMFc9&KP$eJUCK;pF}9A=cUQ(%}!|4h1*1B&Qx8*;%t9h(&r- zee?Zq3-cIk!g^eqy|6jzM^^pt-ky1F*ZPypXUFFv;tGa5ZE|@LhDGD@i1AThMpb~y zia?Y9wD7o}@PM#E<_wqs04#d%LqgDFQ^4sjkaPZl;(#Q&u;28pD|B0DVzYZsEj!OK z6nooPFClUvkI&~fEQaho|Jebj_v+$KU^Pt5u5SJKKRbt24~&q@!I=eY&&gEBr{lSK zh<}sCo&*xgn!hmC5V_?m3W?rXHu&$vlb8cTKZV=45A<8NeR9y<+N^u@^xj63BU!cv z&P|QF@peDg*>Cykc6Q~fhig{-^X{MjFk?2^(~b3@3>5ilAH9%bTUtRYtLeR7T9M>P zsjBkO>FeVyT{kOVG}qr&gjrKsSZ3h7z3Y+jg^kPqdprHk@@_1=Rr|CHg<+~(WNt4t z?lo0L>A#r{>Iyv=(aF=edq(IX&%b)TT>9^e(Amd3;e%>fz?eu594l z$Ic|=`D>odUhT=V@Zt}r6K}U^QET|mX5n5ZI<~fKr5tS#CC3e$>Awti)_iafnEYv& z$f1j_^pbAM01{)WeSUVp=~LOmkdBbB&?9ixz^S(Z$)UgE4=`azKkxK?U`dLBttae} zsfn&+C`qz8z=&`iu2dW5)Vr^fdfZ@Gtfk@%rnoyDF0HJJ-+LF-zB|z-!?>Yq@6`iJ z>HqsVo|cPr_5vhZgP!jPCKLPHRySKW zM-`*jwD(133vQNa)tuPnEqh*t~sA1Jl^FuUIV7$4?ij7g3XQ%COH6s(uC) z{M_=~zlDV{sb>q{7benDF|#j;2(K=qgS-JL8MwCXth7jg^DfGBD)g_+AP2p$4b10h zq`s;hX!eQy5?%CUW63h*mGRdy6x9s^O)B_h-8u5Hh5G*yX;y@2~Mm(&3KP8 zRBs$Se54*Z{(Wu`?fc9d;fTfU@!9-&3)rYE-QFo&<0fq?M6U1kzQ=h$FttSQ=x|5^ zj78eG36DJ^$a%Qy^(W~h&$35NlcrN%r+5drw72bX0hNS;YzsTDPffP3&Ivz$P`|$Q zPE8RxOc6&Q?k`YMGZf^$0;bnM`|4FB@R10(m}o2FXf$CLZ%?b8NV)cvffHxGx|CK% zvZc`;HH|a)Zp_6C9pL_JuUo|B4Wsz5bv>64Ryd^jR)yYY&k^-mdw{vi8~~^hNrPeg zqXB#}AI{zGXS&6(vJ{z<<(Jiskdc1Zo&vyb!3;pqV2>^C!~iNBPm9p^o6#JfSh-GO?(zI3P39t9{g?#kHTJ6_*)a%B$@ z<(04$fO6NnU;eok;<&?Z9<#!;WYRzrTGJGe|J zXVHH`_{E04uLo_p2c{K2O9sFBJVz?*u&4TFGG9!E6b zkT5nz0k}p7K~aS<&~o7fKSczqQ|NT!O|QL^Y(jxH{bqSb-ZUIf;jT9tqjcZC`l&pT zXNPw|Z%l!xRGJ9Xs<)VAryje0>SNWRZa%mYAxo8|y#E=wW}%AN3T!e!$9?JTfkBefPp<6`76{8(0JoRN)GS~VPu+zAg z$8=l99pYmRPdT3FHu530j9q0Ks$kvNhoKwR8V?)1`_`GOw_gwK#VSt_(MO5a{pSxB z1Rf?i%BavY+#T7*8IOx1a{F}c$5@wrv4M{Eoh%{4Tf^Ph$l zw5CO04zXQ*dcCo0;M?5V*!KtqeF62K%TAF-W0PMrNg$1>2@mlu?{QW35#L9hJ2C3Z z?J8%FkC!A~j<>5DY(xk8SvHrSexdfm@U6CFjq|g&o{2*t(n?b{eOSc{{vX&~Myx1s z6yQ%Ct1s&@YcgDazAJJ#Q4BS?HhHyY{8G+sj>tJRQd!zi(;J zN>6e)&qSo9jMs)-c^?zcWPWE$gZ@&n@l#(320eIXz*4J`^{<(mX7Xbkt?!P%afj)% z#KL=L)yMTwX~&1HOLs;UU%Ndb__8Ml@+yZ0Olioo3-HHou0X-KB%jEVU6Cw~0tVR2 z+O!xGw#v`_k>m7?AHUV_XBT{5j`3_hR$&oQmS2z`YxnGw-jh7PVZ7lk*|{ik zTk9OcviPEnEoy2EBd5yImmz zITR2B%@rx}(?q8mQrFQqt#air7d=qR(Cqi#j;L(OBg@Zxti!>=0KM`=#J0gxDeJe* z2&IXeclDZ5fU|BuFf09b!2w=lMVE#wg-?7p3rV>j-dnTqw72mU z|3lZHr?;o0UQI8x!9eFAf8uGPyKmeV+^@Lat_O!ss->bWi@N-N>TH#l6ZZWMzVLHu z+4nJ*v+BK`d@w{apkPlvzww9oh~e9|2e2^t+aya&=!X|SkNOw1=$nwz`2bVRVeVe! z+KEMkXabQk?2DTcH%mxdzS*c<_pa{h9mtTa^>?xF<;7k|Zc=2tw(~frwrK|xVe!3t zn17_n^5wT}=O`I1wjCjIe2t;+hV`McB4BNwQzT0j9W7@P?R68++gsZ&Sck$8?Ii{$ zo1vr$_7Wk;(3CF^RUmL+zyIA9faYhjU_tbyYdY=LY+y7pv=Pv#bxT?c`W^lJtqyXS zZ#0jFW&U0yq2s*Hl{{TYhkHEQ|MmN~PoYs?Om4@o{4nKM9NV^^*aYZ|q+vy;^s5$J zfjgZ|bN~)fzcKx)ssd?2+SJq=0R*!@nKv`TbITYX9}fZKDjCQfzmkz30COqr{-K{` zs`iCxwKd+^;1hU=JV&7?gOo(tlvR|9K#}NKLkecIt##ec-C*8)>u)1N0ebhERmnvL zVq^TczTL2GaJSk`ZF8@!0C57Y$^|476X05fXE@olj~+mbGB3wq-b>*17J5C=W&ByH zxWK^Rek*28*#KNg>7|D8&{+!$=vp}0=!HW&@SGrkdpX3n>Tm5=3D&{IHlzw-v9UwM zhScogl0tvg&=fajVrXK;?-%c%*{-eDkK*&+*%k4*mt+2UA9qn-eK39aFEJT7A3R+< z`z4{HMF>vrGm`|(->xj|a6wi$eY$*^Vt#aT7T{Z^R9*r`n=$P(bsX^k`l(Yew68dwZTrc6LhpzKYtn5j7gX&6h=fSO7QMos&oL%DIVda>#)v&Hg0)H_dq zv%EbBdyGNOFMrMQ{B~a7@4dz*yH7zxWB$i$M}Qhh=vi4w>I3$qm(fc`*Sc}e8S z^Q5RE@0&+X2aG!%v9u&@k;MO5VcVHiW4y(<)FOeEyv`#-FZ#t~dGZXKiN-93kKDlD zlD}1$D>^ib;^Ral4m}F56q4U;Qh8}P(bF4gkv~w|`l@?DzGuq0lX?&xdp6)|X^&rO z|2|sct?uI^At6qf_P_7LPtdk^AYTdKEr-7?e@AuT?;T;+6IF3yfrH(RUf*tXW~4)R z^4NE{ip!NAKfwK^-{@RLd5rYJBlweu(A~BUq5aC)^d$gOyaV%t`3U;yqmk2m=^^4* z$3m!y>^ReEH7ttg*Q@xNbSWIlYxV&088n)W^8xvh|9!`qtQ)cqTf8%%$OVIN_EwKW$o)L1 zrsyo`Ls4tB#z$!kRt+s6CBue5&%J?o7M%%51D zCa0UNH!8kbuA$M2R$}SJZ`rqa=_Z!SP>>cR4>_a_icPW$5;hkn(-NkAQS1`2qjlCB z{bEq`j~**4i(M(8TK0Qt!|Y4k4r&ZwEvqbDtUe7yKkIJXSqQoYE1P_(*AlT2JJukmBo(Iu%RKdV+QyZd8ITB=f>MNwzls4 zH^~XG(L(gS3pD|+Bpe=+Z2gK*oyM;$=6P?B#BvvfN)H#pjV#gU5nFL>x;2rCEp12b zK7Ib&H{LUra=s>prOtTnWgjqkn_+ySqxB=$5x-4>l3pWxM^H(1apraO^+gQvliE&G zgc=UaS&Y>>*}IF0H!s8mHkNC?rL`it4*$&026^poTxSRN?lP@9ZZhcuy%hg^aKA4N zD6__u;-=^zg|z~pXiz#DVCw<4t(+`cYy^nckwk9Cx?9a>x}BMgsoq(I{@$h~)H&)g zO4RkP83U^6=%vqdi9MxWY^VL{mRg}>yg6CVr-i1X5$3-lAExEw5k}C8(Lj|-dufga{=X(T}+z8SteT^K7#9e zEQE2H(a=NnLI9c5sR8J&{^94OwuqIy3pSakyu8VB4bNB{-XN;u z28UJpb+e(LQV8MZz=G?0KxiUEOZW$4nGh6Vu?X}aG9Y8j=vs=Ag^-jkE=^ZY}1)e442*wE0NC8`tjSOJzS zia#>`thmaKg8~s459fiQOux@XNo=-*NUNEt8Jx1O>Yb!WK+p-bFwJhLJ@*2X@UwlMo!DH*3R0(kI7-v>2-w@S3?Qfl{f)~ZRu6smMEPd!Bwe~?25 z-L8Jl3%M}t4Idn=E16s@wLl7oenbaMcOByU16%<);Y9fAcf_yOFf?eZWS8u87txQc zIf%PDIePhFG59pYRLZv=F*m+4N!Zl05bLy^S8#V#Gg?oHgG8*yv+;Pv2m_Ybc2dtYoXXx?*pWBjuXrJpty{ahgarkyEGH@;Lz` zX%xiLiFuyQTo?r5g*4e#fw)za`!G|Iz@b0zK0+6!_ddCw9oLZf+akCmZ<29}0Wi>@ zz@=hgYP?Rb6Yo*SO@>sb_%9sRB)`9rp@GFxfft(ib!p{X?jyo>oRkYmpmaP1;whT4 z3h*cUO!eC|>+8tk@S`qCml>Ir8B(V=*iee(_DtbuNtOBL;kE#gmFk%<=geGIcLh21 z!^KZU>d_*%hDzHyy6P2N$jHl#{g1g3RSzP9-;B!)6+swEvjIl?b@a>|oY za{W^&&OO&3e}C)wI+qrDemD#zzp^Q0Wa10t8Huv42Fsy8CW7!MM~6J?hK#6s-Mb&@ zs~lpv&1R;#^ZwJy>N7rPA)x`i;(OwH)qP2;$hKFg{p%9Nv$>`${fy zLF4OwDjGLO9R-YSmi`-7T!mE&Ba@xOHTy4-K-u z_yRWZN34h5C0^EW9b=ELAu83bmAOmgTy2Ls`af1Xh@)O1XFF%`4*C5aUX!ltuVu2l ze*U}yuo_d_6lvGC*@t}WuP-UaPaF-f%Q%*edjNec0gcjGS@rbN6#j7z>?uJ>I8!6s zdqq7@l-5Wq*K`~&;J_#zHaD8>s#Cm6-!LySxG{#KcA^a)n=wI;bJ#7014Twv^GpGQ z%+5{!vZTRb*E@k_o+8JTM}Trtn z6sE*;$orONZIMcPZ~eM6w5nUas;jr2EnRg;ml4|=t{^hUmAC*QPG(KUm5sVRt2X6? zYh3~|BCzymAf$m34zek!=%IQ!D<&H5KZ5uFboaC|ZR>3)yz}Dp)`}_01OG3J?>nwOsd!R&EO!70z%=2~!>^ek19#!s_1j9B(0WcrfgsP-P1-0rQ^9dCM z2q>Qor_o&#m5IQ{aye+8z95J3zTmNbexV(+-L;H)9YwTuQ_Zr;II=VJT>9=`3M6#dE&-#EX7tuVuB7$M0uUc0uhF{Fe-9LdU6&pGv*LiO1b_hjEP;`8 zR<*K=_%DFh13DpDOTI-HIy?3I3dBy5$h`i6zi-t%;6;bDzO`a9Wjb6_M&S zU&)@d!ut8w$~sMj?ydWhGj@nPXuS~p(Sq+2bpkP>F=rSR#{NEpsrfQS571uiDa@5^ zC5b`8=4g}FHjM@y9VVXme(F9nOBv3dykGq0Za$FT=zT(Rs~8=SnY_aXhV6>9zJ=IU zi+HXDV6_)uT9N|sUHMy>52(MMv#uf^r}ee6qi#EZi=sN#^UPEKRhWr%@-QFTLJSpo z*Gy~LdfzVh0_3$}cVK#XqmtzMDfHc~dA{jY^^vX=B5q?};du^6;!KEYsOL!6)S;=?kRzTj;3ZN%Hj#>CIEm2W zXQf7IhUw`a=U;l!D(OTC>Y?P}C8Zee3 zwQ}J&o|-r(T1N}Hn+e#^fO750?k#G+?hJ!>BE=yEet{c-LLoz=n-aPYZ7>M;I@jkY zF7*U@?%vAzRf6f&A{f^;f#`#g987*ON&@4Wn}ED0=*rOHon<1oXw!tv^_fr_0CJDs z=K&W|F7WnBw>I69HR(H}@3PIs^i@@*hI0?A7fPc65+SnWjyZ88)q96<;wkJph*dRu zO6Jr>P{Oq$L^pHmj77PZ7y@i4K?jF(mmG30HZ-J2V^LH3afnNzp7K8PU^n${ql$G; ziMsJD>yOdaeQ`6uuy+9CJ+N|6@okw5bTQVr*ycOW-I}Z(zi*p#7VK@ zRQYRa7#vR4@{(wAb@I4cpy_li*Ameh3o(tOFL(0j?p85(rZ5)tYi#S5$E!lG1(bRD zC#;L7(YEa)qfC|&^9uT5OSUqu?20^@KJvnQr{t9|LX6mmKP%6Mn(%bgMVNSshc`$S zX|XRUOtkepjrytA=Nj~t)%}qAiLy_q;25+u{$ioOMNo2Oc4v*PI3cjv}L3 zYqKxIt$UD_muuR_2K!Q7Gm=^8v_VHP-2Ke6?SIKN?*M7v?msKO-y-M|`)|vO=<~4X zmrj4D=pbN%;!hfI5vTP490PWgXMDOStjT*znFJ|gYv%4_do6fqMqfMb!?d$k?YqGu39g?z%ao?>6mw$u+<4|nrCVcGUhwfrux*O zdMOto`i2!wn>{`KHxEo5L7X({^s3F$uD?=mQ1Zh|yEh8x$qpX}JtEFNMGUM4IA?Xl zWr95Q7C-0?KJPrCrpj*KVxj8D@dQBmbr1idk9Z+Z| z#Y5nWwZcUF=?aQ@@}z<9lw;Lr#^}+yq$a=e;4`m6BAvZp4G-o(z(U~rNYCOOXtpGh`DW(RtKHw0YgdOZ{PY8*uDGO3ZSk1NM;c~%R+L@)V$?dA)qp({gj zybyId>uQot#Bw)PQmG1@Xy5#+12U*obfj_y*^+x&Q;M&GR~$bH5n&h|nwH~ffM6*H)Y zu-%nd_LEnuS>7|fn^u87g(~&*7(nU~;ggb;O~BS>Z0dlC1Fr`Lt+1bAS3XCP8!?e7 z3Yg@s+F(p_d4_f8Zc0hwO;zpEE9s}etENzzFR>J1_Iy=Lfz=sG*>B1cOk!wBo ze0}czRlI+-p!+8zR6aTK8@LLGdw}Sd5Qz$kLw|&SMXwd7b1hqyt|ks#8BlR*a&ul` z)zDMD{`L+ZA3;@J=Z@JTuqwMYGhW?WBBv^Waj%!1-BwwaEm&{rHdfUZvl+rvTeL^SRCo zVBvff(j$rp`h;P+7S_?{48TnyZ2k?^i>!wpVHV!#ownLgtKUP|i$D>MeD28B? zBmt(EA9m8GcaM-CH;Z}lVuCSlpP_OS3`F=x63C5gAU)ZFv=dDp1~xR5>Xlp0x5No+ zoL>haHntVv2(4J!@;0XWqVd|wh`w{WLy2K6AJ_p3`uzpwFsL1%*(mzh6f$5)dMiN* z$99(ti409iTV&^i3`Bhn5F2aZ8>bzg&2>07V`6EzspDdT14RgUbtX4itLk6Ojopt5 zdD!)f?HRm8&~an5c7F+93#@zKo+b^803Svoh&bQk0(y%7v*IvJpZDOuWmW$d8rJ_M zmhk^Q_ZfE11Omu=)*Aqu(QBQf@^qkA8IxV_t+n)&v^oiiVo)@RucH-@*l?7G5I(of zf<5JaVL+UIPV{lY+$wOgCJtnHwNMb+Qu>rWhIz?uYT*102^~&MM zkM-Z;dHqpgVXs3Dc}*^g1=bO{*Nn}UBhsh`9Nb)m~!Q`_tF%YM0YPv*Euj#-281t?8aDL#Cz=jUwkf zTk||87vt{wt!ebAWqB&x7HI6nho@~MbJ7EZpNKMYozr75m6#wqDTHt*zBroV4M!lc zEX)&u%!?yXmHa#4iA+xQrRMxDPtibHX?iETug^2e-j}kz$K)HeKpU?OckAB5EACBS zK-u{Hl0sSNT-#k=C1mMo#SeCwV44OTME$nnlOkA@;t&d~LA8U_8q3g3+3^rgm_yCJ z-qBda77_@lSrZqZqv{Z5QeuO$51P`pbnXj4Q^OrD_O?!Dr_bAU| zLF=XrdD@-3C9VueEBNWZKC2#U_VgVuHMnvS6qfyg!l>+%7S&FW6$5jXSMQrYA|ioP zU+@L<07ea&76^SBybl9`czf}iMd43iJF5LS?9D}sje;o8+z2bj_qedHEZ^81ocD3O zF#t(`;%+v*A#za&kb8DJ;Pl>8W}a5SP7ZOL4};i}(*V?T7BX!rb&(weY(l}$fC`zv zKO1F{Fuf!iZ|}v%!RyQ43p|CeXuhj{7)JFgTGIh*U1^KSMeINu0#k9zOF~6l$juM_ z|6tI5Xmj86RGG_AKoK^lsL$i6cIh`Q-g(ueZ_{E;i_Z zYM7(mhVuzqaIwza^S5@zy^W|gp7I9O8Xr9TFyYX>*>KglfIlnlP0cY{hDD&aK$9P? zB-Ru)y%8y&lE24efPfxm6dCWZE>qaiR15A3z`JpV_SRoBO7>D}s0>KCS;*6j8|-#k ziOlSxEF?_7__uP}xFyhclx{<;|BD%mBc6)j;$!j{!fHhqVUuLP^aQR<{7MonJ&98l zd@-KfECIU-{T^1Et`)y220kUYCBUgDcvX!>eFLp~4YkMAp{gI9 zXiNk{3jbEY{OWJ?n_w1kWF1v%fg_6z<>Y||3rO9NLxU==nbXk-Ql2d3Rg&t-TkOVX zu^DxB^_O~5LHyMr*qfn14jkmjRONU=9?R%Ws7hNBa>%r{&AMoc{j27_-SLDNI)J;6 zr2Sd3k+1_dj9EkOZ%1A2Y%ft?BzO18PKZd7 z{p?2K3fX30>)0&2D9I!f>x@Sb%B`ajOl-$=4a!scPajkZ*L;GJAoh!-@Zs*2(zE3J zpPtt{oIcOic1?7Q!EH=Ls&0-e#ZJ=)xizbsNkSlm7dKj$0+_B2E4jTBI$1 zX}+0a{$jFdL%MGtKda{^VfHtvV}5Co*?IxGM_vK+X&kAi%qIcJ+jRH4` z&>c8euH~`fd9v~(*d=+OTAN5sal>wClR4^ zCh8}sf&j(4$fJq3o%%;PuxKkU5gj417cBxt>-r?6uOpUZCER0IhLs!FdT)Js{l7px zPq`hWUt?_2=F-5rBV9*E78JD=zsWym8h2#aeJ?5~$qAJs=r5KdCVwk+kd*1SAW#1K zlRvsj=mwY7mT?6ovg@M7CIkpat|NdHUq#l<;_`<+1+q<*m4N-xlSfP&Qe7YPk`73u zB~NkgnJctC#B{<*tWjB*r@s>haSO-j6yV#HUeQH ze)ehbS_zix78q&}Qt3*%`O!bHzxEw7X`tg~j(^gX(_|FOhR5n3WU-N>oazA{*(O72PCCNW2UZHqx;{l1g0VPf!8ugX16<4+H25 z^2$lB^098kjoNYsnY_ECs&9W!aZr`EkpmIb-oA%&G0)a&d2q`3haO(-e_6f-|26i(p^a>tHCrz;!D@4@DBjN%qzOh_Mk? zj*%X9?}L6_yZG43{sW6H4tSi)tE^$BeMGR}{L)XKgXZx4t4<|4Y|#tq)CrSbkaPeZ z5=4N{7e8z*49J$3a9}&|9-@ipYV&+KP{KMXy1Puts{R%cZ^Fdd&V9|!Wm3lvA_p-_ zY6<@wvJ|q}=1}E@a_=ZmH(j#Ft_%}T+{wI%Omf2XPare|n8$aL{hD+@8jdS&VvibV z{eZt{5*{f$mTg4hp13MICTy0eri}=m1!3Yq(z8HoOanh!aK{5U#bXVkvS~WRy@%SS ze(~e)KJVRq#dzy%9OhDa#H{6Uoqe^PLFuQs;6q}rqcu55Oc3{-lVidVMF8#BVUhRp zbStp!01hSz#E}ost@1+X5d`@WUQHvG9H4ipwAZvpnDDp|zq>#ZSg(1FDpb4)%lA() z6GBNknb>RDRo=W1jmqfq@<(nC_xj>e{Nz~K{M>4wPhwRyDKsRnq~~OTl7}NjPEu4I z)L4?v6>OFSx=PhEbAUqh_i_$75bF~vR`KkvcPX12c>$hY6bCae`rYo#dX#UN@_sd+ z{eVb`oE`<7v0cmM&*&&VrU3z(C$E+y3L1&)YLDUqPgRICWP9d@uds(&06^F^#pfe$ zaf8tUpKy4}2YZc}<$vmXSlkA|>29k2qxMDDs;*o#y38qy0WZRT;TI~75x&ts3BCej zWHotm?LJ(j__1V3L^_f36~G6#lC88p;>_!YR|tQ+uvcpqdnH$(wlU2Um8W6{Zc(Ih z!K_7B3d6|Mp;aHf#}IbGV8HQ1Vjq(p&PUz%mh*{0FiZMPSlm`c2a#f1hl$NI==urB z@5_(iqIYeY{U7ALX;f2LyeDcoD9=Yu(k|@4dcX z_yXkQoW0L~|A*i32|99iLvXfbd5YEBR4hd^#5?y|Yv~E!&AZlD?^uoVwN{Z`N5)x8 zrYO)}U9p=4HM~`@ngsef-c9TR38gN1n4F;3$P1;2G?%zlL&;KDlU+W&sL@KW0h8e* zO>@IA&E0d+8uEf_fyXs6VJHrMXA{Dxr8w&~3r?yO`+h+3S zi0O?eEYBo~bPx+vM06erk+=K|)F<~a|i=+O9F|2DXZDwTZMauul^U9Q!v>DugV)Sd#o&BM{U z5K?4#|3a|-scOjwW>H9_o+mTFpKScdsNo0}OqBe_yu5VWk+~CkNy~hX>N|P%$gW`q z5Qth5`}b&OdmRkg)k}HaKJ3B)4Xq?UV+p1*73k?eUQd+=q(%kF7CUb7hSlpQ7~11- zZD#4|{kRt>MXSLNyL>yHi+-78ozhKbkI&(e4de!P#S6m##a?wEOal=}6y?Zlc4MXVBU)A=km_u@ceC5aVZWJe@!ND&B+B5jv~b7m1B{KFIuXA71D$ zo2Y(!p*pOH;W$0|l@8%Xu|J5vG^kgdmgqLaBsDb#K$^xA)=igS{)=2c{WazIX4HOWbuF7XsJBq_y^QOre-X!~| z@{cfUaA>%~ZHW6-kI5mp7?E>5VgpTwuwPLR*X%N9#^qq;t5OxmJK62eP+9hkRi2dR z+gX|OBy7Lge$`i_higZ66sM|L3u-a}w)lUVsQ7b>URieR6P` z!jyPT!fI}kBuHB!f27pu0ZAVhsb0^lNo(}e?^eQ7*~M0|gxBe~LXGC+@P4;9@spxs z4jm3IMfn^CaPTG=9*}A`bprLT>%$B~w~HB<*fvs1VvVmw=2mfpVU|gvb+tHP(!VPB zG4??@wkx!(d|i3#=6g+BE+)Mm{XtoJCzdm)GPEzgL8lyr_Fa{#s;An|rQ`wOult z^y|j|x96At@c}FBpRREK-dg^j_B*YAYIXjfc7y-ktNj0UjgkMQy)>zDIpw;^R;CzyD{t>wgUdTK{YZgJ-aKmgkp;_YZpRgW-O}WW;@PE*L-H?c?Mh zYm{@dD&>QC7!^aUxVGxIdvA9h{%n@%viSGiAO8mjj=`=$P3bMpZF2`)m=L+)&`_&l z!Kw(R>-J>)KH=hwM||5%Io~Z-eDvW}vTmB?qaaQGCzFR3U%CDr3-s4t{^l6}+hx(p zvqbpgd95cPm*>iuUPPcExk{_fO&2tYTc?xQI{@^gU5l{tt9m=9%c@q(a5B z=>g9L6MDY2$;}V1#u_xB`Bu1*H-^;xwIvK50C{||cbpV|C2~(3`o9?B|GzrJVgGFg zCL{OrhY*cgycjT?*ZLi%5iSrTfIXD-+9RRcT9fmdc@+NE*20OZqQ+Dg{1XW49Cu2( zmP2^<*P@HST~$$fcbln8wXxhNQiWMqz=Y*Rf(9uU7-7SJ*pN<)Xu2NEyaY;ZEuphg zJ7(yTosW7yR4~*lF{+`aduoqo;2SbmX|^ zXwTYua^ah9?WoVVnwi-jCGflRne(O+vk5ja#f==D2im_IiXOlJ?~GIsWt6`7?_e8?fjVFYwjf=beFoTwHWXJP1 zJqM?`?WHPG;5|>DcKHmTnNIjG+yw2(cy&M9TvbcPB9hSMUThY`6PXxj?q24`WAc(_RE1gR9q>S9D%*MUcf(z$?O=>%OZ2=Pu& zqOBwCaJ}F!GC$;iEXJgIhx|xDHh2RtsL_YCoN*ny+m+8IWa!{-v)NjUZ!JFWia%XW zpJw1^NSq>z^=t*%HyXd2p0QLdwiDB?Z&fc!$PI|yHo0mz{m zvkh5t2kA!wUU;~^%Mi5YY)j%`K!bxS*qVe(&}WAH+{7UdOf((ZQYo>r>Tb3Tl6Hv zuJ%J-L6ij@8)24qcoYBXrl8$z=c~`#6Z?+tDF990-V72sY`m8vaRY6Am{QwTW-fKU zLB5RMOk51C-rDbQmeyeM(ZoYgnNfU_5?KJI%<8qhRtW*nrXkZJHxD0)`ub4YwGnYR z+5n2I2XfO@92Ui+hsn23EFakE<}>qWS`u|H)~R4{&I_9-<_CWE-sjD{#wozIRsh*Y z#8RN~4&DHl0fc(>A!$&P+7zk{6PfGEFwl=yX~U~(9DnSJKqmNE_vGn%BN}2Y&l3h_ zTbJbWf%EbHp4ldnDQ=%pBt2+)_%Q^S8O?Cb4x-BiLb$p6IFKxPK5-h# z6gjS_=TUfKCVKOE>!xmPp5J)(mN;Lgjr?IVk?H+qG_rz=9pU5M#1Yts1atF(ScFia z&eCdQK$Zo{4cbE1q&rbp;ZAC;h`ts78kXd@2cXu>B__O)-g5G-!2{jlW7eECp9mi3 zGO)ErkxQTt?^^s6*6D>|;o15HiZZ5 z=AUKFeVLxOY-EDHxgEUnc0^m%i*V#dHJ8k+u^pC0K(V4#<&dfZXP*sEwM24R*eDff zfrahVAD5|XdIwV!82{NjL-XQ+@2~_V37W}OH$|IFZj!Vgmc*wJ&(PMwValLh_9CK5 zhl9O{vS~ar$GIaQzOh1gmDImpN&u@r3BamEuV`6SS6l3_8I$m>*GJMM_dC3w0zq4&n zTX3x?n=#r1p>p3-0)Tj(ZE3Q+W!F}-?vpRn>QWAv6!{@=gS1m|3aoDj)1Iy;wN7?! zkf&EZ|71M6B|L-uuJvrrz}#3q4}am{GiE;+3>0$^oJqj1LoX&7s~ZP_WX}zvZ4)fc zQ2S#!qYtaz9 zX&WZtKaRomp+iMV)AF7R-Kf{|hD*8wb$Ond_#&TkZ-a(4g7!ViXQg~wSGWFpXhukg zQeJB|JrN5R+eCqPHovX9%qk^GE<$$tOH3BL)J_udU|Y0;u6)@F@lQi!-jqUi3%p;PVe`?O4qlSzuKIbzI_1th zLIw^9M|HxtwLP!Pd;6@;-rMP!Yr(m<;rDUcj=9T9Plps8KRr?wG7qfd{}xro2>^94 z9{!#(q^n#9Q?D|S>YkHu#I7X-?O}xYhhZ)45Rx(VXK8zbIeOSQQ&LoKXxz(SYOM+W zjkvGF3ZV;`yp~7CTba^-`n6Vi2FyhxzKYQ6gQZTneq-{JG}|H%;k-Xnh98ZY=e36O z6&4*Sa?S)-ihtKY9;yM6%9Yah4c~XQkya5u*&!(s0urOX(%f*d)Q1aOQDdJ^aIWKM zv-P0iMmg;ER4+h+4jSBXlf2-R8d|=PX2stzw|W&3HEC5eVDSyhkC{Ne*y};HHOq`- zPsuRo5A)3Gh)(g%r}PMj+)$#*QWlfISgmdmVki}%fxsJ}MV2koyrUX|bwn-5S>$M6 z7j4;)W$)fyeg=w@Za`_k)`zST#rmH}?K%xa|MfoNXA3RDvtXxQc3ZbOqe~S>p9JNN zMW)+*c^Ei+i4_||&YV-7d!j$hn(LkTMmD8AH3U33X_a z>P9u3B6Pl~Mp)L-ZhG42(Gr=s69j)Zu0UbxQUP6m4555`GI*Ny&55F)tRXXt%hovm zV;w_DqY9g-y}5$&NJ08k`}DQiOhM?Me5XNk9uKF&sbi;~JECM=sszqZ0zz^ey$n6h z(E$zoLx6Y!W=sRR!z*s90ST~}v<+&%AW@uQel(-2Tc3_)%qN7mul-sUyaB2{-tAyo zLb$>AmEK@yg+<~;dqT^{i~?4j$?Pa{Dw^e#DEcS4qRQnthRLj$DDr1PGW)aw4N_q( z#1O#izMLDK^c5kYJzC4z6ZK znG>T#j!1V&OOmIit?!GT@Ckc!%aiJNogWxi=99)h_`F-+DdSd?Bj^(|p2XaX^!IZU z^TYx5$V}yU6->EtSglzLjTKVj;c!&~@XMk6TywwN9vq{YvZK&xA#QK)Tc9x*h8H2O zgM^U1gK(|a`E}A40kZ3JR|CE6efnv$Z@*NUnxB~_Pow`@blg+P=pTFMXTY)SLcdZ2 zDD~w`6VIppFIPxY~F>A6mhDut|5m7|9bm|Fbtiy8U`7evc zyxVFY_sq76kDRV~mC-Ew#B3;O#tp}qP6v=tSm@q-YzeXFgtMGV`5nEQgP8`%-@54= zw5`PRkwf^KhPzb{If0HSk!?~jGufn}^Q&50q7~2Hto)@XkJ_mB*;emlT!16zCa>MS zmvMnmPPY?{D=)f+2MkvyAMLFE@{mgBPR!UaMGPiYI1lWc;cHdtOgv=kDtjQk%XwMw zTI(jd%re>GTorEUqgd%8G4U*wu1M)>h`yXUK0|O8%{L-epNCjYc3;x+>te`O6@zBD zD~gk>o;lS{h3j!FWw6}?qypLseIMLUnpdtz z_yAbf9#Si9Ib0w3z&cOP&z57!?mBc}ZKx*cMeuibn3@84n37 znWW!#QC@V2eAUeTLw+!B(Cop8UPT(tua})3gU+WSO9Tgd(vmw-=qW*@oRdWv$x*ND zSL_}`R9GrE+78*)PwNKj3>rb$#~~S%CPY&7$tRaB!|#B*C)$<9hLz*4bg*5sbel*< zXido0ot3s8i5J=2Mh{dk=Uo|zi;a%vRLiGduJ^(KpU*h~ND0(y_d;QcABjJzo&w~N zpdTjtS@kDdN9ibSV#Onb77(ZlR?}YdPCgV_YJ=p;? z4BZn*{LtXiQbKEz_;XYN9XVW}Nrwe6%;phv0SEP2cO%hy#p7mp?b1Z3_0#;uU0FepCv#&k1#mxc80(#Sg(rC$dP zUGsFfgQmS!n)|&D5e)*}fnz4V{i&LBC@&KDbt;wRl`02v-5YcT{w8~oay|( zveZq&SPS$j0>T|C$R$L3Y~tKxuY(TTV-dH=8dvq-NNp1s;lU1W#k}@i-Zz3tTP4Cu zTRQ-bcK8(BRPjZn%kYwu8+2{)5dd22#G3flJ1RZzyZpk>Fm9w$e+9tcE{0+y4enCz zq^@*Jgn_L))F$1+Hd5;LUY<=x0tHMZHb&^C+u*lf68b8IFXatCejS^YUeYGW2cbc@n}-i!(+X-ggH*>Od6K(XjG+d?|U97e@%=sMK( z`3{oRLp++{#?GS$@7e2A@YO5w?Q?IFv#XbZ@qxgE0$Vx@@{e{G?V zu?iDy>WzX@cDuKuyXUgp-HfKgT^%jGdMqAn^}t7VfxZ%gBMsSmvk1B3_uT~h3L$^`o#7jjw}gkl3EUrHVYEbI&ce!<0S>|AZXD* zAdolZ&Sl0~eZ#S{^<6b~>*7kNIT+8xwOLQUR)yPC`BCyw-eWvm9y6=vlv8)=@zzV1 z2IdgeWXPI|{75GcWf?lwcJ>GKFfDmGA}hAh_8iQGZgY|$aVPUd`L2DJ62s5UPP}@W z7PzZ6`>c;!Z6#Leszel7-xeJB*3w93B9;0Ec#*+1K_llyq~RU=BS0?d2IsORLz;%UIw<(N$_s;s$Zikw3OPT z&9Kt=*MgNwVu#WfkElN)c~2OwV;h!AzNFzKie|$tsUicUA371fhr6Zgb#L^@t-SXY zRkudO%8J&QD@*5f&pbJKntA{;9b?N?54cLn&wg?$+NA`A=I>Qet)o&{IY;7hK*DH% zNe;E&j;7tQa`bP8X^7QJ)Sc>WK>xFSjYE9n;O-8N&<<*fm6|m0%+kG^Z$+r8V=iZW zh|7(#lO;#4Y4u;@o&U(pB@DmGQXJkfs54hurslZkNTSXI^*aROl@k6Dak(9`v8E&n-fst@1hW(>umY)7d?zl<1Ia;L0D#^(s#u7*?W)HUKasbPlVA#r>(Igh z-9vgcznY|188Zyd%Y z_F-TR%X1bd@T+zD&l9>*;?yg_E?zbuAx|EV?vNo^WjF10T6{pwx&;a(_S-=$lasxO9}@47YeSx4UdkYvWd7i;EyRy6x`xWx`| z5EB*6xbsXE2|uHt#P7XHe#%vDbQ?rKwtJ;Hk;#&JjuoXsCHixg; zDtG=!=sKR+%>I?78trS3^XJ}vQoSxVPK?0p;D500u)lH~D5_YpdDkZJko^`q_c@hDKW`eO*nu9Rq0Pe(pu6S|YEX>kWJ*(V}>pYq!|B z<(26i$|FQJdu9X{g)#6Eh`~Zc9 zx(gxk5G0W-O7AqVwIz{Frkpt1N@neu*c1cA(4RIsFaxHhr)%r)I=KB4^>8!j7b@$; ztFkx`N&d^w&Q|N+h&V#F}g%xj_0CgOShi=v!;9jKQPNGxJI@Bi9V>_U6FiO zwML%gs_eQncSduCh$*Y#YiZT8l9@x*VR(wX%MwT6UW|>5s*>bv9hZ<1~4zj1o?6&p0(!1q=w= zsJDrBceYwnzwzZ@(~#wAjNk4wkFM}qFVxElTex`_lb?w+Ia7V$TpQM*ZR5Ar#ki%z z8?z@^N_`SKOf#PkEDFBOqF}3fR{moI_rDa2@*f?W{r!JS{^=BisG&eR1+Qs;4-6=f zF}ev2MnPg2SgSzgA&4=AMJ9A%xQFfCNG-x79QpKiwY*ZR#j~t zc_p=to3w5v1WJli54D}HN;{R(illjcQ{wW!cABPJAmx5lQ_Aug1-fxmtR>}(Ko3*O z5s_P_lf0?2f)oJ6uRbFUtlhr_{x*@W(GsNLV+i`OPp`kY*PG4 zyICc;WzGqPCDiO8>Xiw{6%Ulf!sZc8h}Gn}GBk_ai2wdTz*&AP zTB`|`5M5KnNva7#G%>(1a?w=8K;ZP{tK;73ccg|B_3Aa{HLoJHebHKL`&%OqIJQl8 z*_YKYaQdb;sU5*;?-0LsX%VZ{AgD`VcivQh86OM~S_mK3J&XT}KPmZ?dLecO3T6Cr>yv_B5)KaI9`IS_b&n?i zT(4Ido#O`sB5#~^q3e96>!=13*$ftAF7TjLIvqbaz+pgFAz<(D5-Bn#5q6~n2lg`0 zU&t^yzaxE*WdY%H$}dK{l0V*dc0c>zw)>&B@JF;-wB#@zG9};S3}t2iBn9o@zZOw` z#ByO}v}UYW|2&&Zbi80(RtRc&^+OE|Ml}4GUkYYhTe;yb+q#r!TwdN(?do7SjNM@+ zKJ1EWvpw}8_oq%~31_1`;v07M)3bkLdB76D5JQ;=$srCu9wdAqDHdzU_>!Rd1ttC& z;x5SuBUp{VAg_}QB)w0HCOll8VGXzUf=k1WN{wF*X>Gt#BN5o%ZDBd*%!fbuxC;NU zHZ7`tbj71+Q|M9gpt*XlfYuh95n_p&W+1zjEO27}d7fOi4!nQUeS$`i+iFd^6a|yF zATan1P}ytt4)k5Nek}{)kTC^cqm^EEwTuL|%_?(;oq54>YJ6^Y@vwwZe=A+1_M*VK zQfhqta#(T6Jz0uZdQxvi>u0d3V6}erRP$mcIK1fa>FiMe=wG@KT=#==rz(x8@m$>k zW7f{e;v`^djRSTAa2+Mm?h^0I^&u=nXC=1@t|{%!x|BAq!(Q7HamH>cs{}~IXJDe) zOwkXb%}+Wk(oT17@(%TU5b63wVLjSaF!UhdIM1;fBn+%^j#kVR1(eKnF!IpvG;QMf zBIWljB<>KBZwuC1C!ZWX+g-CoqL49FSvdBVFy$-6n?pnv#6*#`yuhSqtvi)RUSXPJ%HbV#dD^OeX3Aum|Rf}dr6l3{N1*lG8u-L z+?Pjcpp|o)U?8-vR-Tv0@rl`btS+@BbmycbJ`QfIJOHJMkn5ldLa~D{qcxv^i&$wv z3@9OZE9zNQje73^x5KvTj910Hhf~3*=Y}s|l0s$CpO+*CtOSYFLa<=jESi@l3-5*Rb5bl)= z5R|t}3METkb1F8`S}42~fNW;Z(I&8ldfIP`Nfty;iAe)cQsR$ABN~q}?UUESHc!aS zs>>R+e8Y zy-vQ!=#Q+YOA3xcd`Z_CD3!fiqRx_Bx1QEyUB663A`+WxpTZv%8Z&aTEEPxGV&MyT z^CvcCH|zJ2`q^Hg7;F#@|IM8F7F*OG@trjncM6c`YU{SChkvGM8uCxV=@U{bolW8uJxrge){IQJmMZj+Mh8bJO(v-WPWK58d?t1v+EKmv{x-u}H@?V){tj=Ep z&VL#>_V!gt@K^w+B&j`SPEoA!kRA>M4(wrh08oRUJOVBXLhcPOr4O06fEaoLhe-pO zLW%~I%CCzi-(eqAZtd-CKQ6VQ!YRdQ3~3z{kbguZNZ=`XPHh7znYgEYeyE$(Rh97# zRPUQMwiWC5oXHsZjAc{ut7~@J>Uu0hxR zcBg!2>&9#ahc-7Nf46ID8py58f^^(}W_7W%{70pssuVGlMysGHwW|Si15CPQOvvTw zS1N50e1*~hq6v{(lt=$sbPEW^S*}+)epG5lgcXc=(;CkycX7+cNR|>hyR}Vo4tKyK zrF%gejo}{38wm-^OuaMc25Q}>*E;6VVb8aNV&vARC4h z+mLo*yhAI6=oF52)d8P^FkfodY?HpUE~{UGd426-XwCQOI`|e!nYtK&M@BX3E6j8Ln7$| zZCzgFtN409b19BfCrG$=2xSr>`D%eK*mAg~T%(eX~Ga#+8dJRj7A-QTom*itG7EU5-5W!yK|ySfKavavK;p< zz3iG_6&c;BGE!fLZWly)0l@I2f>OxW z^*R)G;TaF*d!*LD;SKf5i#H|hEv=P_s!7OJz1jr4B1PctJ4x@N@vk|2K+oF%X-e&y z9ksl;vsy5y>o{~~&;UvcDENf&Z{aLfn?Nbk>h;M-H450>!WSPS?%bjKUbY1#f!2?OC zWgogo`@IQanP?^yF^uNHgtVkCkJ6h_aw1m3A41-q#V2H2|LVQvQdyZIFspb|iay<7 z(&$xL)=Y0|>8+Xt?`U~7NvpkJZ@Il1ozDqV=Bo!e>q$Q-&#M@0JEfC~TC>kKj*F~B@|RbYUEv0LZdbTxDnFJ(-m5Nlj(q8cglK)ZK*5W zM#{YmPo=3h7zsueGHu1a{Hx_b8Xupb{cuVS7>gik+IdkVgz9~c2-b)2DSweY+yFa z6a}km@9!0eLJLKLHCVQJwFG&$W;8xzB@}_#tfk4 zO5m{AC%3E@l&(fAZOfqeVM~~8+!N|Aw8ltY40JgJ(O-4g*?ge9?2`@i*XgjZ0y8hS z%jTWOa{u%u&TOY|fBP3oNqo&zI*5OX-XgB{&>ZU(6c7v=bHZZ=>z z#kI&j6K{h2(?KK}JbPbsDEN)v*$;UZP9$s*AB&hkj*lGm>g35mz{Y{uENXBVzLvOD zN@+$FC0fNTzb_nsUs#?ea&z*f?|8MlG&bqoAYyP_SM8H%+Mw^WX1xP0A_6zcr`O-I zMHmTY(J`xBoVoIEe;ZuB%u&VF>@r^rRLa&n%9e-j>o@Q`32_W;DS#C8p@7t;NP8p$6M87q~T`27n-Uk~MtV1 zok(k>2wy%K>t%^9b$WT)8h;s~D|7Ti^vG#tp(w35H4O<@FBCdSb>%+*ovijL0FQ_w5lIGS(V^grfdb$OhprA zM&(Q;*62BuO`dmftt1bEw&v7di=tKW^WYtfEuezh?Nj?Bl7;$1wgYrz!+1sp51YLu zJ>a^-k(>qbvhq@!zU@7@prk#s{RIcl{h`W#=Nxd`z9p-|^J>9vY}HiyAcyZK>sozHcdM`)EU6!<2WI90yd7scN`a~S_kv@0p^ z@EH8R2H>reyoz=XXe57+#$OS_>tfE=!gc^$zf4wko}NT-AdP-Mc~#A!Vavpf z_y)A5gO^tZiBWv6{kdeciC8RT(hky z9EW~u@58>7if7F6rL5K`^O}@N1L2vMXS!=*MEc3DzY4>EywWM7!&K-Zpn)qSv^(l4+P4#7dZ~_yQvF5bCGwsat!edA#os4QC57C#qj9(udUCDyDyRNO zcI-Y@bAFgKi<@Axs60Lt-<5B!ZQhONT>Tu94^*V}<3n6=FMOVpMcKF%rlj={r zgxyx{VwYdkUVZR+{!_shRY%#E_>*0yYNuF0f&Lo6U^0`w%%lEZ8SH4k8a^gf$cT4_ zk_&EI<`TyB^zI zZ8!2H^MlUf;Y@;T3z3r=LE!{BbEDC!#j`vx%vdoo~*N6jtZpVh*t|i4TFZgHD1MIYD39X zR@n0iyIe4fd-<|rbwGw2eP`;2w;NA8ZE)ynx4M4_zx0ZmRpAEvUKg8ARB2{K0U#Es zZf2u)mpI^u1DWiH{!u`H^<1u$ms&{>oZ*O~HfAM{U|KiqPfh)Bx48N_tj#NwmV`t+&q zlPfBgA6>gV%%|PWp6o}a4F;dxde0HLFsmj%v@UY3R#%hAzrk|QlGif9>=}^P)Y~A` z7*q1!G3j6PuTi42V&#PFnyoH;vvlNkWz?DtE;^Zo!KuNw$IrO8;x#9uvkO+g-S@*z zY{Jkj-}ub^&Q-shjH^hkp6ubY%f&ItXMDXtoaR}!Pr)~Km-AKnr`eqmuIGy*%=b@; z>eU~F*O1sKjOn2;{N9QE9+(0^2wEXeQFGjuPeAntdc}u2_$q*N_dA1HwNmRFWqpj2& z)Z;2(kWOwO`-;P2{^d2Nts~?JgOZ3^!$q*gPz7IMBa^G^2YGVXY_&dLU(r(*f3_>{ z{f?==tj|0DFmc%#gMB6r-Egc+cg2?7twr99F02~1V=ALc&C%-mFrZb=m8~fMWUD+~ z88D?=Cp9%Z*Z^DqlyD-fKV;DQGMt)%PST79rUo;;TYucROJGuJ(^ml! z=aTPgoHza+Ig*F6IprowZD509Y$?u>>deUS-IpD-pDS%>O-SpO_!?``v=$<%q{bh_ zG9ALzmLD16>B}y|Ch!|=>;?;RG0^b?9-~QLxawu}{A5fH z$Jc74!@Bj|th#m+eSEsN7k(KgIl_UAW~nBP;8E9wA%adz7J@L|b#sX8&W(rLwjRH% zm7pbFX7Hki-Kuzu5U!rd5O#2n|AY!8b;iW(L8}MJiV&q*>Wz3$xvT;>s-frP7l4le z?r5n5fZT8RgO5E(^cPvCT%9mnDy7zo$)c&}coT`>HW7%Up6ZRTOtRxBcX?%a#%bLp z28iaQ$OO6-p=MJq53+Aqat?Qx@0o&I+||H+dNU7!u{Y01;^K7k=sf~_k~sOT(Yq4m zUyGhG+KA$5GR*qrAOC${*cCDq_(mWi+_(q6kRv%52^l+(B`45)XOa2nq~KW}!Q?E2 zLnLK?w>`i%4H}X+`4U=lwUjN+?F)>nRHrav?$0&rQJGmzv|dP?s`_j<%nA3 zu`bDjz=HNoZ49Lb%1y7!nN)>oeTt<%98*P`qIv}MVqzcQCXpqsV;0Cn5ISy%NFQ>9 z-#&CQT&Z}k%9Y97IV$ihWjzZj zQ91b$5UCCTH*p3qF97*(RJ}?V1?~+Lhc|wMS{l(?M|&Ms4O`viW=k;jcxf(HRSXg9^v`|632Rax!E@nFO1AsSOk)LCAttERu!t zH^?Q2)M2<;Qj#pL?2SU8oCfc;MFm(v z5GFjQB!epKA=k{7BTe@q%#*HW3hWNK{3iW*RGI!GtK1$= zXL`5yJr-p(y*N$(H(R%@*LS35aID202naFCrN7Jc_8u&fE88~!RO2SNKB;Fud*8=n z4=`~*Go{w_vfaK%SCymmV*{I{6}GSJqJBTx8LA_HShN4Ff=@I%>BEdluNXkT6OiXR zG=U%cwe08!FNJzW3`^jwRBo5{sP&-ofkSXwo*xfuesyb1S0h}T!_vFnx%n>4Vrtxe zx!1ioEY>Ff<*jT{#e*{o=pZuM(gF;sKkqp>K&nPm3Z_v}**_?-N)O<1l&{>~Q2_W| zMr?+Nviq_;Z+8=aLg2G^z8t>s?v3)JpQwy(YH?;>(8Zz-Fw*l5MSvn6 zf<;gQRGHcW;c=Carwy`6)bA~hahmbY8W z2CQ4%qOT%og09wSWAAqY%ZX4nIc%X&x@4HsNK3F2_tK+8zUX76Q7&EOn!0BI>?gc6 z0#TWA5YUu-eD>ZtAn;jb5tL?j{OFF`7Exy&WQ#2lF$-wsT=eCVkf&7TCIFpMlOsL= zQP<32un3`As~}2~UJ2)^cgTwgn|l+smW96FfcTs6Bns z#=8gHM~#d5A@f{P?c9X=&?Tm8D@&*%nM{=Y(F$B?wLe}ItM%ZHnFMEGi>S=SG2jO^v=M!Pi)lwZLs9Fomz zqUou(ua&1BTXThaYnR_MHo>@e0^LfNmoTPZrp*U@RXO~%s8+6ye?xoGQ=IN+3*8T} zmGj*U-}U+lYFIsA5}{Gpe$bZ63UGFD0c8e)Hah>%qo94(l1P$Fi;osk--(9Mry%Tz@qZYs?6f$lW%`Pc-giOG9&VG*+^kf8SBFpd@&85t>{%D@4_8zFOidH?Sa!+31w6}7zZ3AiEJr8Ge;P8sC>Z9{X=rfP^Y~iO ziE>R3m)^&>9qJ6`m_1Vza4#Eg-8EySlX*5rVjPQa>!kR0?4oz*wl5=>Gg)(j-hqLV zKoz$DIZ>@tPtXz%{33BR+rP$T4Mm&coSgKda~&O9*k_d!~-ZJVCiFOQiTRB za>m35QmIjA`AD zHjNtX!C~^u+Wg0|-I36Qc z75hnDJ86(_VhiG%16UFO=w(vN3c-ee33f1GBS7Z>^ovqz@VUXTO>-O9Ar*~^dV@G;bWUm>;REu?f z7J@N>X18$B<%rkFEkuv*a&QzMX>J27MY}6~`PZNM2>Qp|?R-9c$~xRRb5h#{`|N}X zDyoM6(=TtAvE(OKt?lLIZe_Zc`C7AtYIJPk-3Ryxi2uF%m>X12kFuHqAg(aR00F{j z(@%4i;e7kiUaJE|J}t$Eb|tRqO?CY*%)NU&)BpcJtfM3;6-BHAsT`JaD2J_+oRXrD z#VX~rX7zTO%vLExEEGj72{|romgCAX2{9~lm`#x}+Z?uKhkmbq-`n^5`}{uF_jcW` z>!0iT{pDudUgove^Z9%{?vMK+AHgcW@u7OY+(a*KIQv$oZDZe{`&H>e*tR_Vs@ery zP7d)W;tSni;BL4SN^DtFy${uB+&_cUz$m_*(SZouiwfW~2vk%db4DY>J>$GhS@*BW z2Z27vGtDMS?4vYs6tIM&g%ZxonV>^q?MWf30na*@f+oxo{`4>z+G#4athJ#nD( z^@2T22tL{-(YvhF@&M&BL-9le~Q#c zN4Y?u^y#3({<_G>Fgdj#+C~zE`)t4}ls&Y*@JHb-Lk|HDSWa^xb}rfAg?IYj_EP;+ zH_mKoOLNK(7_;hsli=EP>_&yaA|W{S*m~9jtJB-QWDh&Et=sn2w199^79njEI9-O- z!RanNbH`A4Al63?!EEk>>_t0*NkN&$ujKpsF0E|nuMM%Iv^0V;u3o2yC*7L6ZX1rY zbC8(oDyJKnsl7UuKJASyahfTNrk_vz`J7OQT98WTxIBau3OKnR%aV6^;Gv5dEur9X zAfXpOuPBiA0@dsLjEAK@P%ZQr+7%}DujCJA8N5jgR6ZrkE8hO%!KqOVT1o=fV5idMM95nZymw+__DvTJm=yBs#jPc-4zVPMv@G;$biE#t*E(b!SL@|JE78D|vUKL0_0MBBvqrAMpaa=f3qNfT7c7aTor?hLk$!6S)JO1Tl`S%{eh9!F$kRYGiEh7V>k zrZSWBI0xNl1~$lA#R3*s9X-q{r~nqr>XGQI77LBLrw3DU0Uh}!33NAd=Cr!-aKT|@ z>d8wl-EG};oVK}hGlPwcM$1Gm&d@!+vl>^S-PjsUsMX?BT!MU8%>c{k1z82sG&tia zxH*{Qi&~Y>Zrf8`Q;Q=z_I3)j&8^;D^Yr@hJT>Z}LqYy_Nw?ga+CA|+s~0vW&-f}v zefmrJ*91J1UzjNwdYh^sT5HqmZw0?ONeh&N-q-e*?ddn_c9ZXO&L6hJ1v|a72sz!e zUu$?fBMj9CI4;XKO5_&F$pU<)J6DbacLhhs0Xdv7x_l=ZcCy#n0L}2LnowHW8tpSW z1SXAw9bkJyZ)u-FmJ{`;l>5e?7Ir-fc7E>^quts__G3S%M94F8M*k>mo!I2i01Ol8 z!QFDZX52am6!4};B`qSdU0S^+>t4e-?$utxm&72^a&~FDMaJglJCOxDT9zbSUy38kA-eW*xJFZ@SVl{2+TME@!J1xr96G0&-;%XDvi4enNt%BLuP<8UiK z233aEhxhSrnXNkxdx2cC`VcxCuXb&rEh*AGD}4Q?)57y9Pa3%;;D2P-X)ijpx6&cOK*5~ynRP6FbmOmMt)7(2<|zCmZN#3$?B-#se=`hv3JVj{uz`tZ< zcOBCpjH24Js#%PHSPFh)@c#hDRqwS?&P0I8M?c7Nl|!7fW=Sr#HjnIe?S*d z`CVlCqb2Uq8a4B*f9UWb${Gu$HRQ>c;Gu^l^I2I=q%&{>teg626xgaEEMFAf>AK`l@u~y3I=|#0=d`$UYQMRDr12*{nols(`VM{ z4Y4wKT>tXOW8aro2WDMePp2<<)fn!~oKAFmR9EgX*v$lADjd1N+X3$eEO3BhB+3Zi zlhre%I1#G3m}yIin?>DPL$g(lPlNUC?t4pCC8KV{B0d#2Wvz>-wu~B0cHi&U#+eej zHI!z`kr^EMPf=zFQLHXQ0;WCRWE!;B->Cke2PP+?aoPjam_MG`?Xtg-UTa#Yvgo}`6-UTCdoDZCrwZjx%i#-<6S7BssZ(w6 z&BptX^F6uK3yxFbw;7k7k5bjIBQ!0)xYWw9@Qjg5=Lpbm%XR0(ook5g_^r}C^q&b^ zKahLDQtfcoUX>8@7~im>fRLjM9RNt~H=Rl|o{z5l_IXyQK0~pbx`TDbWi0)20oP_O zP??Q?6biGKK_D!{XM>MXzA=A}8B0`*fS>Cr=u)T$?K_Q`^q7HXVLoLu_A9S7xA>LExMQ@<4M3xM4Z4Zb1@1=(;4O zs`kk}pj%!hs(p3v(|eHyNG)~KI&|k9EKvM{n%J4O1UU%I(vAp$+Jn%u6UT~T@#Fz^ z3qU}+$DCZ8fewe?VG%Yqt`!s65b^|6dAjO*V9q}N&HBD8)0xj+#B%0nu9i3FUe!Lz zt$m;sU+C_c-!hnH$tur%_vR1893I89V&Qan5xo``+xTsvQ~R zz1`+X$_$^03TSkmS&)>Ux*aHzlmle$88Xd=ChVc~-4L5ti)K`Zx%GCr*(xLY*~00Y z=~nN?eHWz5F2b14@z@)2AqVE0jRq-u0T&Fo7$KDD<_dsqbLkg0Qr=CShc)iReQyTI zQ%BvmQXhi|^3+biRtf%cshtZ@`gZYRp-U1rRkr!HJ6VV?G6gIH+Oy>+)0znP8C}DFx;8bvr9!qhiXpPwm zf{THS@?3t&Qm{-qkGQy-}Fb`C{qH@b-}U zdZU`upO0@bieh_wETKFTckgeHFEyf_L^`&yp}Py`HGC30%S%z^yJ0lp8I3zvNEIC# zL#g`3&-T6j=`4knK`ofL0i^CLWMHVg7FZt|^EPhd>KT#~Wo;#;m_WMcP=}x4B1)xG zBX;c973*&<`-owX`vFA?$=fsg#s+wr9u^wl5TsJ`sun6p&&p-{=VOebai4^*Q+ZQ-`gzz}vp(O)7sn+7|Uh1?MXp#A80% z-=XA`)HBlw5mFGmt+x-fUQQ*p&tLdG5(c_(p5pT^Pbd;TAPc&tnq+=VRwv>yyRe}* zDGePy7o~micxHZ;&u}mo?5T9!e@FR!kA9 zHf9TGE>(i<;s)~y<7^9I2s#YoP-I&)6L^~#C3`b=wWhW)p|`i}1m5-8vCyQ_3D0_A zm`hGij?5?;7>E!TPGuOU18pb_=S46E)W&0)VsFWHf|_SyRJ0DworaH39RLiIoYc3QEzY(Lp1Egh zpc^79V0t~BO2%I*o|WU$Gevkt{J+Rfc1v|-sSw=}G0m<~Fqs01#aQG8sWYBWXIpv7Rl*_rlKrk3hyS@!WVIMUaRzV%iW$;E zLbY4I`zuPsB~LV1Iq|jQ?y+-@nGv@Jxkrf96Mm--pX&3A!jr$2q&}Fsm@ue(!Fb@+ z2~2M~!b3SMJ1@9Q^sAmq{QSZQHM}gRnuX^Jre?GLC;(IMk8qc*e-tc@u0^(WJjZ%^Fq8)clSt{i(i=~QxKb9&~X z@tq9{p$x)<`kQZlSz087;g!%?4nUgS*SzMjz5R>Y?#(CYPmV3bCY6kO*%oqQjmjov zv6B;iw7Oswg%H#Kuw}oCzlU8fbp@360JGiaAYV1c%tcKc!a8?PzF+*fbja+LJ7nv( z)OOGQMrM(7WY{eeJ$&3!5tqwt5k>4h_rVFR_x!?6U^UFluj+jFFY^)Oz~%7V5~kO5 zrt_o8!Xo(DbfFiPfUw~%{cMTb{0R|=+*vhpcIsim{?YIJt?YXSom<~K>27J)J#uPq ztLfo9J44sDR^4R#?`s`4fATo9;`#m6E7!eV_v`PUFx}G^c9}F>=BIt+e1=_R4W+7K z;Cf|Enlq`c?y}C{Am{gW^JdMk8L)Y!S4@}N)SXTJYIq<){&-Du5s{6uV zo!Y0|NHjC$G7ATZ$$*(M!rXm8|!*l!$-JE!@VWyM#oS4+;OM9#$c@5%emBP&`scf;oJMM0Wp@>h9rEWNp7*|=L>TI2@qlX;l;@t!RmTS!M*1nEg* z<_6EgT{Z6=0A`#TrZR}gom$aH8V*F6X`h=Pc6ncQKcXihD)KOlF?{k>aC+pA}m$x(w|5Mm}aZCe%`K1(7^m4pr9HCGWkX z+Pyo~Hpir;ckk8xirN4DMD_oXHisCRVi!`((a3z>biDk%u84m4%9p35c-=&`4uf?AKT?_$b`0J3i=7*u8vZHL+ulh_1RB$OfWzK5XZ^gtYbs?f#Q z6J6>3Bcm%l|C!$UE%&

hqh!guLG#0H;*-x9o?+Y*faS(JEL}b!q@qM|!Qgnr3}M zmR1;G?oj~{&yDdnuE%is!y{g;kv5|v^x7vhU5yBn_}2dL4==N3SxsiAImdqWIf^Rf z)J}e|v#k;ErJf3Hl=HOtJa$G>qdJFJEQWeSseicSB!h%%c)1s9s$Bq=-q>?Y)28dk zNc&Ik;kc);k<+?Qt=s-d?3LC+I~S<7hze2;(2V^Q!RH`Fcp*>lo}>hRU~MQGJ}z=eb%C~E4~s?Yu8|{R z$|d(oQg~|fDcT!^k$UUMp~KCAlV27_kbX~m;Lc&_J-(YhYz7%uWjnY;Yuu#FM92)h z-}Ji<^JacidwQJG0QZhAHa^BHmRN+o-h6^e@Tz*yHf=WJeUh`EO?lOw6bvx#@-6MX z-?!O4cjUi&tA2gU?S?X9lspNG(=SonX2dIe4$SF+_SL(L=PTy1QICN{`N!B@oIRcP z0_Dc%hAynd`btU_!HzNaL~77fpgT*F*Lv zjH#SaewZv&dQG;^tvik84w`K?s;vwx$n($ZgG&j&8czZah`c#~io*OU+KB>`t*ULf zwWLv)6Tj^xD^U{dx2z>8q?eLmMR}R)Al-?p0++|q6L*}ud?VQd{P{M->&3;}wGN0e z-uxXY^GnZ*J1*|bQJkz6nlXxs8qk-0Xaqa&uwO(ecvVarYC>xJRA1K!Y`(%p{dR(m zZCHkPo(NEKq$>}#*GZ_7+yx@OaX)&Bjg)%GkI>7*+>n#e314;1Gm#HIW3TxaGVD}J z&wV`TaN8GAG_dK4%K=-nSNR8mdB4E`rkv}bM_F3n+}^f#y~47aqpS$K3m|xIq_eWC z@#E8`TlrjG?3$5fY&C=W9n38^@_R92$KF3H|6Vcj+4pIn+&=8&;9PDB`O=LHqr4ks zRb1rn%s&bpSeNUO+jtRCOq3k3Kn{fQs(B#tpe41FTYO%G*}I*)%`%==GED>JIjCLA7vcrZnTt_qf$d zb@WbPlL0#JTYw2%D8}oLLT&_$E?;jA+?lRuo&UT?idFas5l(dKBj%VOu^qBmP+l|9 zqry>Nb|_wxRJK2N<$5#n|MER{Th=o!`Gj`73%5h zA-w^WiGVtRvl%*fpd=Jd#{v3bNFgnpK*1%se$N-(mx4ng?yVM5?v`aY&i>;y2uti( zr~gVhzx|wn3$XT5qJKo0^~yoAZ@;U6i6nj}22QQ65jc;M+$|%YPG{;o-;iGG9OJmM z^RTU<$U;NIwfIp~NoUsMOA&UfPAQqVhrB9mOnd{UQI`<^vFzko6ecmHO$=_$#NWrb zy+PMG#D1A@{f1Is?p8T-Y_cNtQnG#1NGmeL->SX(RLZumMz6HRt6iVG@=6_zkkpzn zsbebMu>XnO@B0@qNM%KOndgj?b4!DA2i83E z@p!iDpqKNc^Ow!tdD&@B=jiaPjLF7`D{m5#>GUs5Nhq~kB*M&m!W#BtlmXwWR>oO# z56$!#G-dF1kV%i(lho3G&ZtisAhM2)*;MX~FTZwcocD200r+_V#T%%-=a*nH9_~QF z_**uWC%qyTO#p7r%i5F#Q>Myy{kTbL&evb+ck@fWEGKxiAFZ*Bttu`lPPBh=Qtx4r z{}}wBTH%H6j{HIdv8!_dZdHE4)($cA6D6zt%Z0BS+afEpjvD91-N788nc~;EylyU> zxf?Xf{Ej%xnN-2@fIRi^4-`80mh}72{yFubSVF~K`_mQOUwB3bD=+-4B$om8d^Gou zLMk8-`?hz)%g4)EuVH}PVyJU~JM}2l(=X{G`bW}0@4bU3wq+u%%6k33 z>uix#WB2_EKmUDZ*)N98TKPs#HWHy3T(YN_+xk^_*yvT)J!q8dRhktl@@>lZBS9q{ z2Bw5;E?Z6Psiz02i??j z4mJ);Hjz+xcZK1Jb_ijL`5PN*WX6?6%He2`|9`gyAi4PrXejmfHJxr7CIHHhZtxBf z_K7=7hMfI_tPim0FEx)u<^B>8kV)Q-6_1v(VV581fBN$IePsMc(_6_a-p)9eCwA%M z+FStzT~ygggSsVm;7;e`oPa~r|EED+U5TV5Yi8yp4~)`J=giGms?7I1LV9vb~#1w`p)H8%Ln;*8<9|(>};C8?*?%e zJAWA)@sPV$uS_p96q;Zr4eZD4!uz(})VA>6GA+Zw)Yt^#(iEss?iEdRAEXB3;w`FC zs5fF*v!!1D<0|evSy*Cdco)#qRSm-w6`yICjGnQygsg!PjZ>VufzJsHSaE~>>i*V# zwICgIVoN43F)VQu*OHk(R#6(H7MbBePmN5i`IYkKiQSrdgLp3YwS5_veJNqxo1_Z{ z>Lb}>K+*A+S>WaVZActBQ3hufJ~72>{&Hu8jg{m@Q)jD}Nft+@=Wzkk8MPMyu|Pui zToX$;%ybk)M%?DUyzW1iAaI<}*9b!qq{>*t6vDwQ3^lU=Cya#=G$3Z;k_ofH$C2zL zXtPi)z+6;4hhe4#Tccs>Iq zj{4shdn5Gxzq0K9J(mQU4;AY}9|LUkD7jKA+vvzd7a8CQu9xqU;^^4z;y1AIm~*rV z!C=;Sm&Un%vQ{j5_*_-xz`m+<@1PymvyNZQ{P9mqC~Hr%OV;S^A}_gahK| z%Qet3ZNl1%0xymiNiFcMMci!gq|0F|E5c@R@*f4eZ+Q(Sn@uV$@r?Afmvi(Ur%VIV z5GEao5=D>Szy!!%$t~nPnq|pJ0s@N~k5P;$Za1yHxSZ4`U;D+c`xJDd$sv1DN7%s6W(~ zH$*C@i_kh`KPpt(GX7iWgu)oqurz!aJvY)>pYiNz{L4y zyPcDG43+EVMu#Sl!4sjrwf-{7-Wu5I?Rm(eB+6Zst%47bS1_3_@2b;|6(hUG(hk%qlp_x(8 znPs3{c#Q^3svj`7VXeePm~H&Tj|^V2)Dh{kj8M^B2LQ?IekAMnn;{+N5Z(r7XoHcj zDH3d1w7*}lKc#xhj;RETt5K*{=6A60gLoSY#?+F!h{0umVFFEEalrb-wKB0?>)r6@ z+F$uz&Bi4b53NrTv(1%^%db{zXmlbK8G6Z^_lYjv3?tLzgeCEP7Gb@7qx8I($wo`H z_*oz2y8xo6j*{^Y8p+_u(Wpp~B;U#&DQbot2yQ`{Bn=`dW9Es@@XU zNtCdI)Rh<$izJ9X&>O4Au$)c+R8%?Pofy%Y>6fPc>2v}zXyOxt8LweW3CvFz=2{k2 zQZ!s!Z{66^x$|tAi@yv|jlGUE1+Bmy8WnH(1Xr8ItSIOBtQRM;MSR8kOVP$w$aC;5 z=q}xcIQizTBlhnEYU|Cw>FA%USzd+O~FJbjC1a=fSW9mpB8Rg92a!+wF22~9~B zO;n{an($%cH#7J)G>9ci)H*S+i;l4$k482l@1x)g3dP z_Jv$bembJ>M*+&LNyVfYs;b;Z{tXb0_Ow8i0A8_-C=j&*6!SP7yJu}c`{_PcdTXXn zUTKhzSp|84e3TS_y?4%#Y&LQ6!$N9*r8m<>KijGon8ovC;omnBScS7YfC;}3|0fWU z3X*OVoT*>|0K`>qci}?wnAQWix8=`SqKB;uV6tt>;8W@n5FSW%gGCE<(WVm8d;5ee zr!#b>EP5P07{iCM>5m}?oB04Tr_%s9ECoe7O6=e(IOlD15k*DQ)f!&;-0T+1AGNp4 zQ=1DfkNBvPo!2|9G-#TSe4l}hwg48~;5}>`?vn%VIzGNv>@*&i2vL)+2g)KPDOi?+ z9TfmONRuWm24jQFoAKI~$;r{B(v1v*Ns?^;^W-X0eO-Mcsk*-)+xO|)zB&b(M%3u& zf)(PMYK$Bt775?cfY?)J5(LO|xW5PtWrln&h!gXj1X}HMfQ7oR?zOm#ht-L+G|O+P z^tMUhuAfA zX(W61Em76?U+K9M?<=2h5u+aGKcG#!_H=%|@d))-|K|T8)!;@-VfxY0Q6sH@-)OD^lb^x1ythn=lMA!TX)mts0vV;nHLeSBB71++!1)s)e==Ud}8agpK>D3kNLnxMw%+7MU|F;{L!zEgJ*jWa)WU6B^ma3^eTXVZ39KBZV~U2 zp6bQ;+1|CZ0lcotS+DLE%zlO;x7(g zR?Zqad+!tiY~?~f$D}WfsABjO=@y=_Q&4z6SBz&-@A(|2^0NmX-px;HN&RIRUQskn zJ4qWJn}z_FN`!9XeDgm3264=ERBeWv;H86Hyp_#4YU-Ew?sD;_@;qk|e%0S2|HqXR&FlD_CHycKV~E zx!bDVP?sT?@R30MvB0CH)~<=Fb_E?V{wzm7h8HWFIX=?|F`# zGBGHua#`jU{uHhF43n-A*M#xIB@;60173mnL;>Qd7-%codYOSLHv`Lh!c?BQAMsQ< zCAqnMbcFHIPu?v#Y%}^g^^%7BPv+!moMPh|si#=R)^=*5uCv~OoA8b}^KA~}R6KOq zd)i&;S}w!;`}ZqB8Wx#d@~mrH9U|ThHCL2lrj7*L=N!#P--Emmt4>fEdCk;>yDZ$gE}6firC zhRclW7U?`1ky)7i@wWzx+3W(6dI_8}9yDqKz77Iv0(nh3%zI07ZRm2+H09pf4|Uns z;KqGzLzlfc@_Bnh?(^q`Ic9r9RtXp6N-2^ZavF67^snTkj?HXR1&Eo=s^icdjO@FJ zGG+I^+`9hI8B~SWs84`qW0^|!K=azul)3;vwN+crRIWUzOG_MxmgDG?itIlMPoy?P zbk&5%lX^2&wAMu+@F0x(7)Tr-MXTCY)bx|RUFB0PcOSrpzI%Gvnsp7dl-^D`wWVf; zbT8UINSqHX?xB z^w3U&qrQ>6U>@m%(JZoesx}qaST2Pw0?bJ$=OZS}-#-$_MV?-c&hL`RmcFWoyPMy3 z3X6=42-(w&L?DnW9c)^=TDntCthS%;+-rCz@5q`0#a|Z9V6i@toA(x7#VQ1R2!?oV zLaYu&KzSHuP^2es(Ih`lDz7OR9T{Pw0}z05%Jy-Jdpe3dedzG&6iQvk0*2y#}y3?|9z?!0e>iY57umOpXVIrGOJTL zpp4M0`CR(26FS7bR`tz{@7cL8J!gmDGGzdaIa2avs);9rw-$^cqL^PsQ4Jq|QiHWu zdGQOSTL?l`e*0t7&Mu7>9UVFb2L!7_@|0oB>AU4G?-UO)zxx~)2b3d&bJKVDLc@CF zYy#k08{tp20Ic>rR7+eUyd!%B^;I2eX05F$Mr(bl?P=N$;G&2gC5}brS-H7DrwH}7 zE5b-#bj_@xYv9%LfSg)B<_SzMZ`2ap-$%XqQpOB15hXclw4BeKBVCY z%-eC$Sy<@>^xOlriz|7vs{~NC9UkWkSmvasOb|fm_BJ5A2(lt_Y-g3g3I8VQxg3mM7~X zuLW0m2jSNyQz%>a5fP@#aKPy3kQGxIU3Ep4P90D2*(rX`j}^igLfjR(T;+Yla%u2FKl z*jZpaZ)5&(taDFb?WKmUpCf~r?m6iUWY&nY5axOM$@ahGn%97carYmEF9BFx+|Vsq z8Fdl*_?gS!DY_~!K?x!Zy9u-U0geGP-YYp<5Y^_hxk?-;0Jn_oxP1ifsFUFwgW1+>i%t)GJV+9Te@#SR%(53h9l0udY`-NOdYKTV7t~&aaxLiVZdr zBUBS{H&6_4bB2eGA`tcEGH(2`T$~Pc3KR-sEjbXkF*|Q$cvQJl`9&~yQa#78KXl!k z+PJqv!E{Gqk74!Tw>Mw!miHl+=hiZ%+i-0EmT0wR;dz=VDqhE;&y=Z-?b1Bmc!0Lp zvu$Qj9io?UK6Y?S?y||tD`?a3%whNm({J95dD_ianhh(ydTS5F13lTHW2z5u^N--e zs{qbf6K)wR%M1VrU_8!Rc?=tg5CVeF2Pe?}Y{e$T41NPzB1{+4i_pGpK4#zM^vDA3 z*tmQj%xPL~Mb*Igfsp(UG^}=_!KLcV14h>b#*_%ZK@p{I1VDyUU3fF|!yU`7Re`*n zR-&fVUHno27W#;ZM8qG3&2m-X1vmEZFr13G@KS%+XHwUhL1)Xc=u>BF`h$)A`_|?b z1bHQuu_^;LFj9J#6sDsJhdWMJPjaepbg9lLY7+x^qh~o9)D1wlf*SR3mUj)9f#V2D ze*LBZBzi(P3cAq9PsN<7Az7qP8~V*S*L|Q(9BE2x^REs+{X8Ph)f?J!Z$TAU2wY#u z8H|&x5wacduz8|mC2+>KXag~9xCCpPB5|S{PHFVA#RKW3Vusgcv8%z0dYgR4v}JZf zgAk7>2pmjb4&~#k&ZKnSPD`a2(0&fn0NE$>1!z5X$lVMP5! zJ`pC2dbVIx4(S2vFU8IuBX%j1CyaZHFMb}?I{d@mG@mB5S53hfNh0L~UU=>{7Cdp8 z&`Q+`@*?G!_m%7OlN#%ao5vAJY9bE`jJak=Y=Sx$rx=Gad>d_J=v%#|gmf3r$hvIX zUtC&-2qaVCK8>%jZ>1Oc{&Drd>RHn$J`uu_L|L5?s{LD$s0oi&+&%1y0TgzN z6a<8|N&{Km@FtzL4Qa;{*&Az$IJK|FYy{wBW79_!S>8H_2E(*nISaN8k)bble^?-v zp~9RJXC%eR9dit?2DuEX+Qz-lfo`^ju|Y$LeKLE5h6>futhc~)k z^#&d=Z?UA6NrJ{v1BpXmHo$R5X-mxn;7>OGt;?=xs$0WAd(2XUfk$ts=bUMh-T8EO z^kMTldT0Z7yF0GxJEu{zx_@>zr3QHtQR#JgI8YA8YhpU2hOMku6tsTB5CGVC3L%kXxb0tLLYsJ}XK=B7)5f5Skv=XZFM`3!yMQ8#P z`dNiI)B_)Y`oYC|#5MwB73*uv8F8J!mrceuBj8#?tR>t=w0pO=aqFJ<&(>NZM|6NN z86)F~0Dk}&@uZn4beU%rJkzOk95z_4%R z7cbPzZYzfD5qo%ktH1kAJlE-7Rr{EBKI;NK40fZjlA1nzkw(nFu;W??4>t$e3#JbN8yZ6G zN`PyC5Wm{>MJRkjR~Z`H8Ae&&N>>+|tf`G1bkrS9jp}&I43<;xF44zSy8)Vwe2_^Z z0*+b%ctteRQ#>j#G9zr3I`V1o<^muC)zU9XJ2{{2bac+t%4lQH1-ui95BO)Mx7nx} zTqsP`M?~E3{lWAK|Bco0pmp|rj9vq*d*Gg?jR{<2@iSxTrU$uHDhDrbgz&ep&u})RwopZ@MZlGkbI* zaKWpy$ZJ}ZbjN>n>*YpCH{y!uT2C~p@*C#Pia!US{S;d>B00+^Ko$!PJ8ZSSH0BMlz!Hp(TBp~OBU`07K z>>HR!ly4@e25L4WB^RhUMVVIEA{;_zw5?nRgOTKDrwap})A`wR+=31(h76U@OmzeH2l;RUE?y#)DW*%=td4**h`bp{s!{oGNwnHQNm=6*Q9is-d-blx16&|* z>hnIL?m@{Bvpl|Ui_f8c9(FHglOXybbVt2Ei@B*x)XIzZDvY&uegmYdG5it>&_2g7 zCIBR%nsl@6C60}Nt9s^l1MchnRTfz#%=8H7#VD{HF$+LV=fSgP5;y4qF@gnp0#wLc z{d|Nae)hLuvU?yb3D#WwhUdkHKIXa`M4{9^AvK-CY-;ULh439nBVa0Sb&)Smin#eU zXdMdakF@a1&Xl^12A72u^!!kK%aHB|_T~#1<2s0$0O%hDP+{!*Dj>?8sbp=y7q#f9 zHqa-0j27{m(TT2oivhcmUd7g%%=oA_njAQEAAj(l`DnF;;6Dog%q-A4#ssRbfF?g$ zQK%_sdnr&pDSLxK0Vz22cp}DWZ7#p3tr654jPYQN?rpwiobIjIQX8Ccvy`KmG}7m? zA~3g?w1l5cIa@nx(h=e}LAAv-|HX`jv5y2W;Za!vc9pyra7@;h97k6PpNk($PN3Cz zA5Eq=i9sHG|NHf3YlJV$f$#7hco<-ARo7tI+(PMFP3|{ysvAP4IYp@)?2}KOC%gXx zG$y=Jc~B>Ban)z)O%MY&zLqSpL=%NZGU9NHCAewSsYMOl&gyAZRi3Wo)DoJBo9!p( z!*ZIMnlJWes&ZFFgx!n;!q&itXKE+$MGWJYkt$tjfum-PT{dMi%pVPR?T_ITr~vLh zp7lpz19k^`47Cai%rZ7(p;FjDXl@{X;anePOR?CgSx2+qzrMN#e;J^0R}=C-z0)-} zarQNIXN-QWu=!d^js5uo*6=zD=f|{?G5NUThT;t21M#VMxKCgRNZwtYW4wSp9Dvgz zV&KJSsAN@(K$g*51s9K@msG{}H+$WhXu*jdw5-|mosH0;*1G62-^?c=9}8d&Uj)5(!_vJu{nE?ZWjb<;=&6b=p+@3HcPulv01W5kTPxA zGmA|miLS zOP1j}I7@^}tZs$RiNcjax&LwMR7niwH24bZ6A}v`Iod#0Zd`wYMU7>|#lzbO8-Rch ze}^nsqd1K15fW(_QR_~)`7S7AsPQ#DZMf%VK~UP2Q$z&AmctktVK4(Hyhc$781;8F z-<$-#a0ozG z0IU`u%R}q5jh%3+L!Ct<-Q?%x&)j9h^S@GOh!asOSa7}z z@O){o^gp?*ln+_jwL-UB#4e!{L92Pz`s1GPlY%oJ#&!vG8PFu;qr@v{+?j!K+U2>h z#MKtH{fy}JU<-2h=R)+Wa;{vL=`w@kjH4}PK?3MU=2|EM8bjEE)k6^YN#eat0Ag$$ zCPPV%cn(57tr5joJG^C3g~2g}oZ1F@);l-@#;tt+A#?#VwDM%C(`LQUZ#q$u^WvUn z+-4lW=Sv>5;Rol-Dp=4Rn9G8x$MqJ)GN6QYk@xkQ5!He$V_!xIwOt3>U8^L{Zv{?5 zgv1K=A>wz$CfkFx=c|3ZwzXpAF50+zW^3kY^)v@zd$8`2JehbY$$p#%1vYl;+p+c;1&{2kpf|mibUnddg z*{M!o+ZnnG#pA}`Lbk|CA&23_2bgUdiNs*NiafrJ_J+}ZTM1L(85JSRzBZVqnea&uF3*#xES&=ZDe!>6Nx4Z|%Mj3Bb zahdmUq`27$fiIB8AbUbZa8WIA)kWeeaVoDBx3=*JI^<-HKtsA`VeATXv;zQy-7|dO zaYXBlm$=wNGrnQhaCt!|zeFXi=bh>!8$9S1x!3g;B9T=tc{ErV<|DUMeiZwe`kwa* z7$a|!r8n+F#|dM^zXgQj8J_@ra0}5|>mAynX-t9tHN|0DyU;tm2Cm%dhLZMdFo6w{!@*W(?t_hV`WZ3&1 z?bKR*82xzH#`zKPsY_}BIbc$Ga2>DK#zH>+Q_=)3UbBS}jAyH?a;_662|%ru1!W~IrcAZKOj|*k zb0FEs^%$!Xwhgy^Y#3(Wq!>GPJ*RArD-NiocC7d$|4JZfG=bx&??v3_e89@vNd8%z zD7b8TVjQ#)7&)T}=jCJO;VJF6q2$Fb&4rVF^%PgCz_NdlEB+eQW?@cF`jU1=uFN|v70~@miX5kJc%VUo&g9vE(v+gCO;7+NXt(5{)u>afToc= z%_cpm=(t~+7j5a?nT#Uq_xrMGFz$>TZiaGNv7|Ul5k$z9@+F(4@ZMmlzQCdlw>^xv z6^3BwCt!~vd^QQxU$R^t`RK&iH}>x$@kNgetxYWA$)g^vwFBizuYJa*2Q^#V2mk3r zXI4MITKg#Wwb{P18?_?p^SLrHXK82`L|>MQy9HLl_P|N1Z7NP}UV1&rKpmb14;+O; z8?cS{?vi^xfyBCl_~M=k2Pyz)CHU;)2iBziQE(P}ypbLe=oKaz?|HKV zcMfV6-WDfmJhtBPPP}oNMYpznErkvexv0elZ$uY9#JN#>gBK+x5s0wjG4f;zq{vq| zQ`d2=?oJ8OhBx)AOpKgDtl&;I%atzhHQGS@`g(1F6C2D`ih9fGWaEJ*Um>H}iy3E{ zW#nbmmgQ6}z$ajASxBSu(CC$-j@nq|$G+4|t##PZLi8J@0!p0?H`FPghs*TBT1Aq+ zfy{tI!wF)JIV^jP3qnS*?V6x!1afd91|L=?lAQ`e0TtJ${ z029uqw6*f%1)XAF7lG|FtQImtzL{K~*5aepFNLHwmYPPRKc*v#l-rU*hnzph&9d#S zd#xQx3aG>`EDo)6M6ji`4|806e}bsD`lVA$NtVev3j#*-j>SERqr(2{WkSY z@~(^p*;BS;U(VaSMPSQmi3vv~le!K(UV##*zvaIf{ayR??}R;(Kr^TPW9~n`UC#PP z_R2rDU8nMe%-bGbiVnKErPk-Qkk>4+9lshHOBOR+zM8|c?D3i3C3WG`wX%Q*-^~BI z>Tj(%^W&}r5&F+qQfo?89{r{^d~rG4nKv&WHOy>zsSnUH3y)R`Q$Q%$_}a_UvcxXJVe{YS2*Lq`Y+L5{>2~ zwWpUZku(rL?Bv&o|5Q|Z`VzlLyq;>PTq+x6UnBmwVy~>DOnj6`bz*gu_?yDxk+IjM zOSByqACeyTZ!a%hl8@C?Q-0=ej>(2pGmU+!H7h_69YgU?zXDyl=ao^<^1JUQL*UpdKLDgKRJ>X5y`9>iw`TY13y$ZSB z(t{3!q}0GhCSwEF2_bP4VZmt^s<_Kq{Jbj100e9K&o(r!UMf-R6{?p7!|8cMK07)9 zZu*gna;~$)3Wd|FJTpK@OKs6F-&-1>;0}KT`0J?*)|!F%EV_vHrXZA2g*@p6pSKD* z_tW@rU2<-7YvPNM8H`0pL}bs4g%<%NCB(toE6@>T>ZR9wT`&tJ%Gr_QW$HdA0n-vV^JJUN zl(?VG=r57M8FOAhz(hF>o4Fh`)y$~TSL%n9=aK;iGfgF$5SfyuCF+ccjv&r*vLl2^ zUajo;OyqbI^2pb(FBJxL;W778FTbP2L zsjSGcQq8M{k`gCFO6Pf{=LWuPMyJU3n_KS0QF7_|#vE?_cWaHo{eb;?C4aE5uH_`Rak zAw#Budy7v)nX{BBIX7ij2!p)Z*0=m36hrH&Me%7PFXqDn7^V?0?J|@*`>O?5ks6%F zP?xP!j7o_66Kr-a2E%6) zxb#|*6|4mB3ac<4i4!#J@O`N$Z+X0%+@LWPnNL@hmT;Wn16rr^?SibJc!LSZFBBu2 zMX(9AK6tkh9ydfj{X9_E=20tQOCb|K`qn{_j*}|~ErSlS$qlO1Q!(TtTK|`*aaRSS z2|ysyXTnb`ZIU6X?hCi;U0v>@D8#AM&2*WXgen^+PW!0y6Ay(AaA-wEnyG_xfN!N> znY%mVy~v|aNGjK{;M2|K*i58M;aHWc;CMBL4T^ddOvv5^C%`fed&@i5GZbW7s zX}SEaOmpeouYcY+yR);)<4=;_Y6%TKJ7RHr{NX#?$kZ}}Hp%3)w-~pa>CV)3_;~d~ zMvCxauQa9h6s=8_BwigzxTnSKEQGCEnfhsR=^PSMGMl@BL{JS@8OZp+d}RD;1RH#+ zzuO2R^S&0lthF=2g4)#rk0PBnXS~3$czdbp_(BeQ_w3=H1@}Q6x{9zIpI-8r&7)XX zEA`cGFr@vajFO1CUAR?;#uN^Na-IKj8|ICyf_bgz%G_s*rJ5F05s%(Gp%P1R3^L}I z^W1$FczST)R?)X9xPmk=^o#30px4bvd)~6i+z)la@m{lY|Lrn;fNk7)=w&z&8WA_s|*HUT?C!dy&26;8=@ z)eB*CAaAPRZzF-&X7>qG)YoUz#^8R>o!3&;$T85W{yKmVcz#M(f~*&Lyd)U@?Zroa z-xU5=PsE|cUdy(=>ppZ-pJae`_TFsP_P(q3B4we77v3B$D?SZFqU+K>k3rG{1w$ro zU@PH>`QeTolDI-3fQ0y89O%zJ>Rws-LSUp{y7=YadS2_wv=x_ z_R048B<(}VI6o6?qZudKW$Gn<7XJW#HfZMNjX$tf+3(yG%(iUa+d`Lg+|Sm+EpRj+ z4)-?qDofG7c+ML+I~;sUR+sXgD|p}YyX|=weM95%^v0Anz_Az&dNpb^u{<%}Z2pR5 zuJASdUe=w0=8=M-DQBOr1)>p;1SKkpwUffyA>KNJRo$+~lWQ}PD9!9Bqh#l6NTiaw zEvsXpFJx4AV>jAtazSsyyN4I|=i4V~n={JH+C%=#R&RsI6gKlp!JHRPEVWLVJAZVe zQ}sAMj3jDGP#GWWu0Q38cKGv#Pf2QC;;Ove=HXKU$y~=?0Nx#&;?Eb&j3@h)qZOd^ zUgt>_L!+M&H8g*QeCnsNYMxbfW*5kXaO?q1iUX*s2&x5WzB99Z$9_Y5b$uMvwVpLG zaI<>NzQ@o1=gpc{bjFO7WQT*o_mKzAQ#euQ5Jwj0kR=^oU3{DG8BN&cJI=5Y8?4oM zgGQ*ck19xkP-Omm<%?ITdiFap86C=Omh8p68`w9N<)^?cEPq#+VEW>VczE+S#A+g^ zLRmjk?h=!{V&j&QdqtXI>kDt_9!59d1LsuqAtCniRJF5 zLw1$1A#h`&YHz5ny~rXccC2ZCJZ|y;&FihCf&Ap^R;#`OtF&9OaInvw=oNLH7-^{9 za7wFfnboa7d7&^@3G-F&!;SxG2b6?VjX%$KJHo>G+g=MiybTk&N|$(h@QF*4e|dU4 zRya|J9&|&rHQqyDLB&`lD(Y}OqefS1TlCbTB4V&-2ao!2NN^X<32fn`!3Y2e_0fNB z3;Rt&z~6(Eh~dgGP2RGS92RK+foAIeXgF~5&KPr;9XkthQgEJJr&Y-Bv-E2%TQZp0 zEXiy{2J1%}p+q@cR#QY=9&b>&7!hJO*WEZ=5Y(-KC*BlGY5#47mu+NH9S4N&FMgw?yF2DCkv3;dSiO(`3`PAgT60e}26oRIi2}Dj< zgf<)IaBEt1^uY~Re}#1kgT+j%4dqg}y<28%yWm%Ybu4&%=h~UxBPfz|Kk)QOKP#A& zgDUJ#L_H+kn=6q&a4|@h_Z{#ooSHjF{S4VTPbjxI-=yvcjF4f1Ak~N+lq%CWsX@L zc^Biot-In@Yk_w|Sas!xs}c#%S@ACTRiknSO0zP86;aIDjir?d+u z0cdD1wwL!_Z+uI^LG57F6FF97cW}1CO6Z~sb&ERNX2JDwaXR&!AJBcpLW4k8bFX}k=SCt+@0UNf68uf3y&eaclyokhaZ#xUu^v2N1;v*%EON4I;Z&h}OWh$_ zzIY|PT*Yk|;*C3Ae=j#75(IR!)&!(yH02$P1$IHf+mXpCh9!jva_)Dk#yl+D->EBv zzahqY{jCiRi|vw&&%4%74_9!pTqmO;2OYUDN-a)mXGOJG#wod7Q-UP@lh3Ag7@wBSKstNkqaK!_D)9TCB$!Bwy-?Y>(!4$M2 zsJM%0ml)*0w$WzF5wsZ-MK)M=!+~q(JE5B;=fHlalV!Z`4%b1PpXjlJDG={a{0V0N^O9MrA8=DlhL61xO~(WKZt!=YX8$g2fE{kEzAwJ!^oQ( z-btX(bNa)zo~5;@2%TiYKnEjk$gk?RCX@nO8fNqg8)guBUzH$_c>^~V8*tr@KBew^ z_b}65VpYy2rgp)J#jd4A2DJkBolFj#YBpDGoJ?vcXLE&_SzQVQ7-C(l+2%v3G%|LZ z^s)q_-{arla$w~%&{{x8Ep&rMNh@3&0CX!;jG!kI4KyDa;TFTj)qS}=x^TjQIT0-VtYFB(^;qV0|W8?knaVEoOdaa=yWKp`}yT z<%rml5S2$x#FOND#{V_C8~}xH+5dh(Y@Jv1KZTwDb#MO;;1+yVnb_UG3ENKSa2;9A zMJ0HGh+5#@y+)&~h4`30zNpm}oE68b~LCzii3m|nxL|LDb+xIG? z{Ak*{t~(+`guF#RlVjAo(9{=hkb$kTq(xtRBOT zyl(FlkuNgzH9o0sSUg!h3yUeIdyx}bknQtg;pyB@VEYF`tg>xtwwS^9vb-P%Z9Hi5 zIDL6h^(#5YtdWqBW(zyyTj?eqK!&#QRAk!Ov>VEBb8kJc`sfv(e_4OeB3v2f(Q{5hsBuD*K(I(KS9 z_oJb1pxn7L(uf2@i@AiF?dia^u9eL*!d5~zi2i%O&AH`e1umk_g&Gi^p&}FB{Fhf2 z_LP`=RLuu;2eH3xporjuu{2mPN;(jqT{|OfJz7jSu%(-F4RGN_`Be=KFL3=eKX1j4H_4gkzU&U6*TC?eFDL4)aIjRNOQmNKE z(Bq{huG>G)_zAb8T2-i=q1&fzM=L`Qk1g?AX1LyUgROSnRJTyQq>2;-6WM0a#VW3< z;1^4y(ykY=9+7jrw>MG;zP$Hmb4b9O$;u+m*w#~=!t6tlfcHu8$&QAb^xIQ|hpX*p zFK>FxCW9vjvlU!-?omDNLZct8(wdgFY%_kghM3Bz11mnp z;al;dfh(9=(*``6klEK$XbkgCiic-C_y|@?fBq7ESiy^_XXmsBju)G!QW6m&FJ#dNBnNpR zXYaChgSamH#LtY>tqhuI9nbfP0c#_`pe3AsnxO>*2|>E-!KDdaDLNpV)!?Jt(6dkR z{r=-|bm$HVev7HWXIw7Rhng{kL(;+LnA*&2viata;iC$46Ql}-&PUa_fy7(fTPoTj zf=_-&mAPup!F^rc(;X$@l3PPvk_F;KQU*Kfg77nbWf<+)AO61IQCyTWykT74!419x z!e57fr>^M>G}zFUVZCdpOwNy;%R(c8yYHJTteTy)HgAn%8UygJcD8>8 zwJh-qc>ml{$&KiFVZ5UGX!nGCh-~*@L6^1X$;8G~+Lze)(x?Ua3dN7o;IXj*uF(C8 zALz(~jmNtj3da%?hH>0$?Kby(L!y?RfY-H}I~v&IEYUVZ2lJ4rL3!fj`$t*Zd>$2z zSu5iu{!9{k(1=hpyo6036NX27@kC1ep-c$N0MjDGfalXQD8RlYDA4!ly5LPK^V;dr zff$;Rw|!}%zSlazDa|czr8I2&uL+BnxDe;LJbMQd7RY6tOw*fXqsS<|g)j4q?N6$7 zI93L-G3#%*ABpBcbz9>7(4MivD_FLLn2G?02cTLVlXl-D`Ag`k14cmw$4j08%WFrv zx0>3rGZ~&uiQCT0+K0=o1*bzHJ zG4cF7l;D>MTJ3Oq{BiB!E*=xPSfMPpFQKA!DwIjZFr3gA9^v>#dTYAABOY`x(-Pd6 z`L=*v%)2_#_f^x3r}NMU*DL!_5`4WUO;4&sq1bBj#CX&CZei)iAAN4k#>KaGOeaL)=vT24%f3+o@^K`S{JB#yi?z0%GK=;W7%S+%g6 z#PJ7 zwUdTMdcH$B*ekKj4V8PyzUkt{<8eJ)P>LY_^XyLILlN?D{QJt9tE3M(jut!Hevx!L zxpiOi81|Zv#PDz|DH}sZIH`xKrOvOcO~DrIp0S^7-3A%D%<1ZgM_@7@!ZLf6Ofe- zGCh9Xz#9N`EfIad;lPp;ylSP_x_#I;E`VE@VVFoHTZ&kzt>yI(Sfq-R+Nr{e+==?03U8x3reqd`m>kABjK9+VoegYi zG;xj&6C{(sqOJkzDD=z4=Fx% zRJcDgfDp2CEj^YVN9xI7mhhbp6oiH>W|6w^K0v`-eMS=DpCafjM13?PD~4hL=#G#p z7Kt9YXs+cRzuxU0t4Tb3N4J1xj)xwb81j|Qk(UL$$iNv2m!2~op)L5j1{e%;SxRDQ z*Fs11Fpm5J4z^MLqeZHS?|1L;c+>x-Kl*#O=HQ(q>);StmzJn&%<0TQ8v``_oKIO( zrR=iqvY*UWwFy~Doq*}A11Mrb{DoS{6~QjT zX=j}q&s%_Q4Qayj;yT6%cWqLytMS~rI1?jtW81()(M_&yaTitDf}eiw(H}gyk>_v; zYVI5s5*R${B`GqTl`J4Ib;m zetetI(-Rk65dWsm6F{mw&m#djiE!OzAwPK;!IrjoDA>1Gdqc{gUS<+UjIhGOx3~mJ z$*f<64nI0h&Lz#n2EAIyK#L!(Nyyw!uYX4se}gX`8Sa@sGX?<3SY~!z>xWn6VkTo) z6p}jR?VPFVgpcDqcjuxxmZC;ftQsc;+;c-=O*8NuiLB{H%gkbXU8B%k>aZ@U+fP@mos-AxoIN#(Re|1}g3;IAU>Uw%E(}?nkH*5|W_*RB~m}g43y*&fq0q(qWYyBFi z8L&%P*v%@uj_d4qbmKa(htlEMiCeVi|Ay@7gR$JG27`rJ=`lxt}^vI zmLxPiU&RFFVB8B_Tua^I*lDc=bFsX&gx0$%D_1ieb#~Qmt=WJ$;SD^0OoNESFJwve zzdC&QlI-4J`d8J9C~MMBJCWY{8WJVfONbWVO-T6^yZ!Rf7Wk%S=&qOLUN*R_^U+XD zVw=?+VVG1#9Teet%PT+QkP~(qld8yIP59u`KhFH;N>}C{{`LnHJuKFB7k6ae2cWx5 z`j&f<&StPkO6-L7x~?UcE?4v6$-C=dGJ5h}ZrZthe#6b#g+K3dK*!`AkD9;RlvO65 zcCbdek`w*t77asWZ=m`t;~!2gpY3ZvcGa_QWK@sD3r0yg;K0vx+n?W;T zMvoSUT!&xLeUvB&t)$?v>6*XO%gb@v%SzaJG|ogHXcuI4S^~ZNl zes>8)Tqb=z7cY`6Mm4{1e=)PHNckKwnEqzhl6|$~i?Se%@SJsINT`?1gznewNbDxn zLOC5B@HuEITZ>xJ-_VLP!cE4U=~~YBUyHJf`a`{+pR7<|w9kTmG6GEKP9Gi};TUZ7 z?C#zLd`v1$Amg3HU*MOE)dh+DsjyJ&x&BJ&a=-rXTo&>qU-4>x`av7Gf6Uzv(Or!5 z53Ue6FR(%pA_Y&jkQ~UV_aPEnA*;E+&dFWbar)!_k22ANbaC#Y%m4IB+q*|DZeG2< zkY?ZDWx+`z5Kce;^D5wP#8Dq5pJpTf0o@hhesky=WQp*^o`?($NdJlS$?DBVlIa3S ziiyCE10`CE)u&TBG=9qUZ^mT>}jq(*}6)$^<0+#E?t;= z_o0fRvVRk;zL4TZ0zPGD6U6DT!Bx|#3W3mz5FjtF53wym;=*kM8KsF;QmH>^l_rli zMSPHYsD;y3mhqNyX-MY27PE*qx-X#Edo#Y%w4zE!iJqQQdLv%+h#=#f%;l3nK@B;S z`AABqhCBT!#rlLUhn1@ZKqthTTPqz1U1)Yy#3uzD8Ronf*fas2hJ8NupPP9<(aVx6 z_C2hpbuF{n|NfZ>cCL;OJ*CZ2)tn@c@_)**{y^p`ybET3ZvKxlQ77VuS>dc#bstfapjge?A;$_}nU$Dx#rxUG>12ds!ML8; z@OaA|zTh~>A+vSP{-Az8guX2Fy`;XLA|R>un#bj#foLxE>XO>WUOw7qi%aN7ali9s z72l`&ckZb4jLb;f`UqBd-r6J?;2ti`NVh}MV#CKkI`!b}BV6@uvb%Xs=64yNyI7OV zHNdRmYme=W&ny;`ds~vj4Y<%u!aL$+>{KH)g8S9{nyQ@G}2>wStMSPt*$XuAfU_W1p?%Cs6-`hL%y~RA6PmTAI zQ01g=srhuwO&QYktr*+tvcNX}2~$2~Gq4$Z7i| zHPIw#M`zh$+yohX^Eir((~B!f`mlWRFgX>BK6B{_G{)>7#e|Vkm|dNFsT?Fbcha)0 zX6+Q=C~iK`X292t$}LCEh7T}_My8*#CVD)k?Ra;~(&Ge>Q-8gie4hK&lFkvd?aKU7 zux5TzDGd;4tACA?>W^GF&wG(X1gjqBQlz7zWp|tz#s*`bn4G|- zV3t2z!pfp$0ni6>u`uFfdD1V6Xx+azE6nql)zfAH+o!usWp$o5rrQc;XD2S_qy9^` zW*6aDs0Rr{TT}F7FNl!%}+3r(3<#_2#;4x zTYK%|$F+|IHy!}QKc8X#(BI=^FRGVVO&D`*l z4>s)~VwZ>ngu^-}Hnh>16`_6i7YnponE$R^OT~_$NN#-szH({}|IaGTz3f@_c)FwJ zSEeRcPcOcuyzOg0Ki|e}7cOCzhS8Zs&Z_iFUyDl42&((BQ20^&ddPZr^R%QFk9}aV z_prm^cU2s*5-gQ~15_dPg@eWqbNy`gX^cU*_)4;4O^ZQ*b^4aYNfWi*OH1 z>UtSXfGqQ*;q$;?`A5rX?2I@@-KH-HgO@=zNA`^J>l-ND*(Q!RRF~VMwSe&dm?b>I zWV3XMC!4r%$Cp)qCVT6Zx}gk;9P6;oYa!)F%PA*Z|kw_s!rCUSqsR@ zHXV7FNYJNwDe2tQ$_Vj{FZt|5w;JTXTRK2YtD#y>Pk#4|Mo^Jl%r}~>J3Zh~V%r^p z$Lxjf$6VMd_-HFW0Jft&{wc7)w0fI`QDxhGQPW00Vr6O_tc>a% zq2oS^v)|QOT(Y&8%A_Mmw%96Xeh-DgR&JgLCHi@8b3==7Eiqisu2K@i%iem}4h>P% zeTXBLO~Pfx|4J7B4_H~WLQs^{@rv(qOikWj$>!aw|B--hi11@~Bb8@oDo}CUB1;lQ23Wy%$sO>)uN8 zyzq>Ie=b|zuL`bjKb5@4JegI$=elZ>zgglXDg@6TOEE;1Aid0vIh)-?kfF=S71Zcj z;BIrHduS~-u4+&O$ui%e8cEGDH~*nKO_}3cV&X`BU%VS=4ycokjWhN#B{-1T9-g%C zcP=DviY0#TF?`hrq73Wnr7uK`S!$01x@{NE})Z-tueCrT4dPl%dW{YM}O!STAX zT@deqp~hd3fDVng+qSDeTxMn|+7NU3CBDrITAg;AburS8>)r}S)pnxh=VY9(@?swG zJlNb*k#XsCz;oy-RY79N*se3m_hw}?l!?krFU}uUszRx{s2M`62Neb9>%#}JyjlL{ zSvFEb_nqtDzsD~GxVz)7XW{nqXy=@ z@COTLk~64J$BH>)w)(iKOJCG_<@$rQNq3u73(KTm?Jr0l?@)|yhbKQ)aioZ>;wz25 z{%U7vef(R;!p_(St|Zs`bazf8D$U=;{5`$axqcWTd6(zuZ-X@RReGb|uUWg49Qe)j zysul$*mY-8GSECT><>pIUf?fDkBDxD$Q&zGYoe!7lnqTx@BlW>P8Rp0e{+kPuWqkz zZyEiW@1kmZV47j!;TaSCx+8IV|R z`^!VA{oi<~f5&>&e*z`Ib%-%-cc@d8_RQT2b}ei56`dGIofe|_-w=uJpR7YmP@@UQ z8x_PNpIXF40Z}E|jHt1LlwZU}7P|4D4tLI}`_7$xV_V7{sgEd4YPWSvkN7#!BzU{`8$8Y#26X3vZw`kmN<+ft{;Acvtc z|5;t7W@9NuIIn6HDv!UfmjeXvN;6-Z(#W)c_{29i;OvsEn{Eii%;3*ap4Fo&I| z8?$?<4n(*2jH##^G1sLi=iV}4u^pG~iL2))NZ?dC+3Z9_8=9V-oIY$(nfPh~2FN+N zL^PFGWtds^rT!>~>ldV5zdx1u`uQ`(34puG}ND{DD{ryYNz0ufpj^PxoLfGa3!Xr!KW1-BY>0~0$O7GftD&Aa_9U1^RD2B}+v24B}BSY3?H%`4H z*3PY$_E^O|-ZO^J`pw!H)?h4o)#Gnd2rA+Ggm_Jk>E}WB&mHln(|cl5ylRQ@uY4L; zX3ubwzkcgMHv(+HhLJ3jm7n7mwa%ZQ<-C@Wl}kgZ{@L}%7klFomBI5>@j-I1sA`;L zf6l#$?)Y3IClE@TVt#>997tclYFGG#YG&%F4Y4UFX6DA&DY4 zc;l3)9z<_+sJ{9Nz8)!&EgRaVVp4O=6sX86MRckt;g%kVHygC^0UFAy>Am zKsVF440sVJ46CFtHSEsj_t}*r?baFF?j|CVG*~$+#Z<`dJIi?B&zBYDhQ^y)W`nz# zGe6=v&0xp#6$9C|pG|{5h$IkA@qSSWf`sZ(`qM?A;a&Dh3Lbs`lhpWaQY}+NEid1Qkz22vKFeGkZu9(jP<66?e6slw1OcRdD9J;*Fg-CtDnS7 z+)E^H@40s0MQwKjV0M^>4~60V8K*B}=x^zgqo*du>jh)B;V_ocU2-Os@)bwEjhPX{ zUtwIq6J-+)x#3$4gELu|O5vlK4LdOpQkE+8Si)U80PYRAVYl^%nI~X!|A5}Shgzl~ zoe;=@Q{!m@kRP)6k2OP}dzPQ;Ydd>2uw9+=^yaD2ibPkMECnI=SpO~lHLhFo_D$k5t*)v+z$VxtQlL$| zc%jSt_k%eBu|XHxMvYdyPQvCc4irJJaB);FKFBd$QbzZ5^Ko6sn-rE#!ra9xE%4Ww z6wTfl_d|%YLIO_qSKC{5K@WGL<28X70`ibaEC|2TaM9jXzBpv%qS-9;6s>JO&|NI> zFXjHjck>K@BxkznxE)8x>}*@VZDPF zq@#n3j=dQ&I=turFBmH-%?1$@Khy+z)0eOnatklz#2xduRR!vC>a9(c zHa4H^Iss%t@@7VAbBWXw0&XsfiwJ;3J=b9F=&dabcWPfM$l0XUttRT4(&jKv0Qp)R zTb0Y94R1F7kW%ZgFi{Sk ziIp6JDSJEIy?1nN&}(7VqTj^yu-}?+vL}}1@xg9C-BUC-0r+Dlat+0>4q=LEs=3Vr+9x5)%=znPhd zNE)s=MR-hdLEY(H|G7e%aE`kwJw;kqY}>0{$BzmIq`mu}`-N_n`r)`KCIgTvPxV@q9v>!mZpoUF6={P;=>Xv)Ha5k$YhP}&B7|bC5+`ZBxqOwPO%8Rbt=pVz%s@_1rAwFlhStcYPlTfg>;GEAEu0*3#XoMnoA9)K6#dZ+dO(`TzJ{+}EZ zdwsx|o0b*lP^`^=939Cc8V}>kC(jZ1e@>o{q|{}Kjq}PDEW`ur{}rVBn^BsDI9&mU zIBA^L*h#&;$U_+@qY!nfA^TjQ3J`~Z$W6_QJX6tUSBGiti~E}8s-ci{j$rLl2Q^|q zkyrGl0DAEVO_;@F$j;ArYe^4AqzZ_~eG%o&$W-WGS2BO$Th4^GOIbGx6tF@=yXM)7Ls+Tk$>Z+BgSib#VV;kd} diff --git a/docs/assets/interactions/select-menus-example.png b/docs/assets/interactions/select-menus-example.png deleted file mode 100644 index 32a47d0424f1ab420ca363682a12460aff040c91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39618 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 aeS&BlM7jQ%=K2BnBlKRJKmVP^m;VLX8_o0p diff --git a/static/img/logo.png b/docs/assets/logo.png similarity index 100% rename from static/img/logo.png rename to docs/assets/logo.png diff --git a/docs/extensions/_category_.json b/docs/extensions/_category_.json deleted file mode 100644 index 2691dc3d..00000000 --- a/docs/extensions/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 5, - "label": "Extensions", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/docs/extensions/bridge/_category_.json b/docs/extensions/bridge/_category_.json deleted file mode 100644 index 312090fc..00000000 --- a/docs/extensions/bridge/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Bridge" -} \ No newline at end of file diff --git a/docs/extensions/bridge/index.mdx b/docs/extensions/bridge/index.mdx deleted file mode 100644 index 09aa6c81..00000000 --- a/docs/extensions/bridge/index.mdx +++ /dev/null @@ -1,196 +0,0 @@ ---- -title: Bridge ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -## Concept - -Let's say that you want to make a command that is both a Slash Command and a Prefixed Command. Now, you could just copy and paste the code from the first command callback to the other and make some adjustments, but that's not very efficient. - -This is where the `ext.bridge` module comes in. It allows you to use one callback to make both a Slash Command and a Prefixed Command. - -### Example Usage - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def hello(ctx): - await ctx.respond("Hello!") - -bot.run("TOKEN") -``` - - - -

- - hello - -
- - Hello! - - - - !hello - - - -
- - !hello - -
- - Hello! -
- - -## Syntax - -First, instead of using `discord.Bot` or `commands.Bot`, we use `bridge.Bot`. `bridge.Bot` does inherit from `commands.Bot`, so you can do anything with `bridge.Bot` that `commands.Bot` can do. -Then, we define a command with `@bot.bridge_command()`. This makes a Bridge Command, which has both a Prefixed Command counterpart and a Slash Command counterpart. -Next, the callback has access to a `ctx` object, which is the context of the command. This context is either of `BridgeApplicationContext` type or `BridgeExtContext`. Because of that, it makes detecting how the function was called easier. - -### Using Bridge Commands in a Cog - -Like Slash Commands and Prefixed Commands, you can use Bridge Commands in a Cog. You can do this by using the `bridge_command` decorator. Here's an example: - -```python -import discord -from discord.ext import bridge, commands - -class Greetings(commands.Cog): - def __init__(self, bot): - self.bot = bot - - @bridge.bridge_command() - async def hello(self, ctx): - await ctx.respond("Hello!") - - @bridge.bridge_command() - async def bye(self, ctx): - await ctx.respond("Bye!") - -def setup(bot): - bot.add_cog(Greetings(bot)) -``` - -The cog will automatically split the Bridge Command into their Slash Command and Prefixed Command counterparts. - - - -
- - hello - -
- - Hello! -
- - - !hello - - - -
- - !hello - -
- - Hello! -
- - -
- - bye - -
- - Bye! -
- - - !bye - - - -
- - !bye - -
- - Bye! -
-
- -### Deferring - -You can defer if you want to communicate to the user that your bot is busy processing the command. This is done by using `ctx.defer()`. For the Slash Command implementation, `ctx.defer()` calls the function that gives out a "Bot is thinking" message. For the Prefixed Command implementation, `ctx.defer()` enables the typing indicator. - -### Options - -Options are pretty straightforward. You just specify them like you do with prefixed commands, and you're all set! - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def sum(ctx, a: int, b: int): - await ctx.respond(a + b) - -bot.run("TOKEN") -``` - - - -
- - sum - -
- - 4 -
- - - !sum 2 2 - - - -
- - !sum 2 2 - -
- - 4 -
-
diff --git a/docs/extensions/commands/_category_.json b/docs/extensions/commands/_category_.json deleted file mode 100644 index cf96d5a4..00000000 --- a/docs/extensions/commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/docs/extensions/commands/groups.mdx b/docs/extensions/commands/groups.mdx deleted file mode 100644 index 8af52910..00000000 --- a/docs/extensions/commands/groups.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Command Groups ---- - -Command groups are a way to create subcommands for your commands. For example, `!afk set` or `!afk -remove`. - -## Syntax - -Creating a command group is very simple. - -```python title="Command Groups Example" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!') - -@bot.group() -async def afk(): - pass - -@afk.command() -async def set(): - ... - -@afk.command() -async def remove(): - ... - -# Another command group - -@bot.group(invoke_without_command=True) # Indicates if the group callback should begin parsing and invocation only if no subcommand was found. -async def math(ctx): - await ctx.send('Subcommand not found') - -@math.command() -async def add(ctx, a: int, b: int): - ... - -@math.command() -async def subtract(ctx, a: int, b: int): - ... -``` - -To create a command group, the command's decorator must be `@bot.group`. Once you have a command with -that decorator, you can use `@function.command()`, such as `@math.command()`. Now, you have subcommand -groups! - -:::info Related Topics - -* [Prefixed Commands](./prefixed-commands.mdx) -* [Cogs](../../popular-topics/cogs) - -::: diff --git a/docs/extensions/commands/help-command.mdx b/docs/extensions/commands/help-command.mdx deleted file mode 100644 index c5b1d947..00000000 --- a/docs/extensions/commands/help-command.mdx +++ /dev/null @@ -1,471 +0,0 @@ ---- -title: Help Command ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Pycord's `commands` extension comes with a built-in help command. In this guide, we will take a look at them as well as learn how to create your own. Let's dive in! - -:::note - -This guide demonstrates using object-oriented programming and subclassing to make a help command for your -Pycord bot. It is important to understand these two concepts before continuing. - -**Learning Resources**: - -* [W3Schools - Python Subclassing](https://www.w3schools.com/python/python_classes.asp) -* [W3Schools - Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -::: - -## The Wrong Way - -A popular way to create a help command is to disable the built-in help command and create your own. This is not recommended as it will lead to a lot of confusion. - -```python title="The Wrong Way" -bot = commands.Bot(command_prefix='!', help_command=None) -# OR -bot.help_command = None -# OR -bot.remove_command("help") - -@bot.command() -async def help(ctx, *, argument=None): - ... -``` - -While it's possible to create a help command this way, doing so does not utilize the full capabilities -of making one with Pycord. Making a help command with subclassing and OOP will save time and effort. - -## Types of Help Commands - -There are two types of built-in help commands: - -* [`DefaultHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.DefaultHelpCommand) -* [`MinimalHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.MinimalHelpCommand) - -`DefaultHelpCommand` is the command enabled by default. It isn't the best looking, but `MinimalHelpCommand` can help make it look a bit better. - - - - ```python title="Default Help Command" - import discord - from discord.ext import commands - - bot = commands.Bot(command_prefix='!', help_command=commands.DefaultHelpCommand()) # help_command is DefaultHelpCommand by default so it isn't necessary to enable it like this - # We enable it here for the sake of understanding - - ... - - bot.run("token") - ``` - - - - !help - - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
-
- - - ```python title="Minimal Help Command" - import discord - from discord.ext import commands - - bot = commands.Bot(command_prefix='!', help_command=commands.MinimalHelpCommand()) - - ... - - bot.run("token") - ``` - - - - !help - - - - Use !help [command] for more info on a command. -
- You can also use !help [category] for more info on a category. -
-
- No Category -
- help ping -
-
-
-
- -## Updating Built-in Help Commands - -Let's try to make the `MinimalHelpCommand` look better. We can do this by putting its content in an -embed. - -```python title="Minimal Help Command Example" -bot = commands.Bot(command_prefix='!') - - -class MyNewHelp(commands.MinimalHelpCommand): - async def send_pages(self): - destination = self.get_destination() - for page in self.paginator.pages: - emby = discord.Embed(description=page) - await destination.send(embed=emby) - -bot.help_command = MyNewHelp() -``` - -Let's go through the code. - -First, we create a new class called `MyNewHelp`. This class is a subclass of `MinimalHelpCommand`. - -Next, we override the `send_pages` method. This method is responsible for sending the help command to -the user. We override this method because we don't want to change the content of the pages, just how -they are sent. - -We use the `get_destination` method to get the destination of the message. This is the channel or use that the help -command is to be sent to. - -We use the `paginator.pages` property to get the different pages of the help command. We put the page -in an embed, and then send the embed to the destination channel. - -Finally, we set this as our new help command using `bot.help_command = MyNewHelp()`. - - - - - Use !help [command] for more info on a command. -
- You can also use !help [category] for more info on a - category. -
-
- No Category -
- help ping -
-
-
- -## Creating Your Help Command - -Not satisfied with the built-in help commands? You can create your own! - -For this, we will subclass the `HelpCommand` class. - -There are 4 methods that we need to override: - -* `HelpCommand.send_bot_help(mapping)` that gets called with `help` -* `HelpCommand.send_command_help(command)` that gets called with `help ` -* `HelpCommand.send_group_help(group)` that gets called with `help ` -* `HelpCommand.send_cog_help(cog)` that gets called with `help ` - -### Bot Help - -```python title="Bot Help Example" -class MyHelp(commands.HelpCommand): - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help") - for cog, commands in mapping.items(): - command_signatures = [self.get_command_signature(c) for c in commands] - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's go through the code. - -* First, we create a new class called `MyHelp`. This class is a subclass of `HelpCommand`. - -* Next, we override the `send_bot_help` method. This method is responsible for sending the main help - command to the user. - -* We create an embed with the title "Help". - -* We iterate through `mapping.items()`, which returns a list of tuples, the first element being the - cog and the second element being a list of commands. - -* By using `self.get_command_signature(c)` we get the signature of the command, also known as the - `parameters` or `arguments`. - -* There is a chance that the cog is empty, so we use `if command_signatures:`. - -* We get the name of the cog using `getattr(cog, "qualified_name", "No Category")`. This calls the - cog's attribute `qualified_name` which returns "No Category" if the cog has no name. - -* We add a field to the embed with the name of the cog and the value of the command signatures. - -* Finally, we send the embed to the channel. - -Let's improve the code a little. - -```python title="Improved Bot Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - command_signatures = [self.get_command_signature(c) for c in filtered] - - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Now the help command won't show commands that the user can't use, as well as aliases for commands. -Let's get the help command to show command aliases. - -### Command Help - -This function is called when the user uses `help `. - -```python title="Command Help Example" -class MyHelp(commands.HelpCommand): - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command), color=discord.Color.random()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's quickly go through the code we haven't discussed yet. - -* In line 3, we create an embed with a title the signature of the command (so that the title of the - embed looks like ` [parameter]`), and a random color. - -* In lines 4 and 5, we get the command's `help` description and add it to the embed. The help description - of a command can be specified in the docstrings of a command function. For example: - - ```python - @bot.command() - async def ping(ctx): - """Returns the latency of the bot.""" - await ctx.send(f"Pong! {round(bot.latency * 1000)}ms") - ``` - -* Line 6 is shorthand for - - ```python - alias = command.aliases - if alias: - ... - - # is the same as - - if alias := command.aliases: - ... - ``` - - A very helpful (but not well-known) Python shorthand! - -* In line 7, we get the aliases of the command and add them to the embed. - -### Cog Help - -This is pretty easy! - -```python title="Custom Cog Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_cog_help(self, cog): - embed = discord.Embed(title=cog.qualified_name or "No Category", description=cog.description, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(cog.get_commands()): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Once again, we create an embed, get the commands that the user can use, and add them to the embed. - -### Group Help - -Similar to the cog help, this is pretty easy! - -```python title = "Custom Group Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_group_help(self, group): - embed = discord.Embed(title=self.get_command_signature(group), description=group.help, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(group.commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Add all of these methods together, and you have a fully functioning help command! - -
- Click to see the final code for this section - -
- :::note - - The following code has been slightly edited from the tutorial version. - - ::: - - ```python title="Custom Help Command Example" - class SupremeHelpCommand(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - if command_signatures := [ - self.get_command_signature(c) for c in filtered - ]: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command) , color=discord.Color.blurple()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_help_embed(self, title, description, commands): # a helper function to add commands to an embed - embed = discord.Embed(title=title, description=description or "No help found...") - - if filtered_commands := await self.filter_commands(commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No help found...") - - await self.get_destination().send(embed=embed) - - async def send_group_help(self, group): - title = self.get_command_signature(group) - await self.send_help_embed(title, group.help, group.commands) - - async def send_cog_help(self, cog): - title = cog.qualified_name or "No" - await self.send_help_embed(f'{title} Category', cog.description, cog.get_commands()) - - bot.help_command = SupremeHelpCommand() - ``` -
-
- -## Command Attributes - -How can you add cooldowns, set aliases, and change the name of help commands? Command attributes can -help you do all of that, and more! - -```python title="Help Command Attributes" -attributes = { - 'name': "help", - 'aliases': ["helpme"], - 'cooldown': commands.CooldownMapping.from_cooldown(3, 5, commands.BucketType.user), -} - -# You need to use CooldownMapping.from_cooldown(rate, per, type) - -bot.help_command = MyHelp(command_attrs=attributes) -``` - -## Error Handling - -When a user attempts to use a command that does not exist, we need to inform the user. -We can do this by overriding the `send_error_message` function. - -```python title="Custom Help Error Example" -class MyHelp(commands.HelpCommand): - async def send_error_message(self, error): - embed = discord.Embed(title="Error", description=error, color=discord.Color.red()) - channel = self.get_destination() - - await channel.send(embed=embed) -``` - - - - !help update\_pycord - - - - - Command 'update\_pycord' not found. - - - - -## Credits - -Most of the content from this guide is from -[InterStella0's walkthrough guide on subclassing HelpCommand](https://gist.github.com/InterStella0/b78488fb28cadf279dfd3164b9f0cf96). -Thanks to InterStella0 for making this guide amazing. - -:::info Related Topics - -* [Subclassing Bots](../../Popular-Topics/subclassing-bots) -* [Prefixed Commands](./prefixed-commands) -* [Cogs](../../popular-topics/cogs) - -::: diff --git a/docs/extensions/commands/prefixed-commands.mdx b/docs/extensions/commands/prefixed-commands.mdx deleted file mode 100644 index 51bb49cc..00000000 --- a/docs/extensions/commands/prefixed-commands.mdx +++ /dev/null @@ -1,326 +0,0 @@ ---- -title: Prefixed Commands -description: Learn how to use the commands extension for Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Before Discord added slash commands, all bots had prefixed commands. A user would type the bot's prefix -followed by a word or phrase to invoke a command, such as `?help` or `!help`. -However, this prefixed commands system isn't native to Discord! Developers made use of an `on_message` -event to check if the message began with a certain character, then invoke the command. Every time a -message was sent, the bot would see the message and check for its "prefix" - -The syntax becomes a little more complicated when you want to have multiple commands. There are several -disadvantages to this system. This is where the commands extension comes in. `ext.commands` has -various advantages, such as: - -* Simpler syntax -* Easier to use -* Easier to parse user input -* Comes with built-in help commands -* Comes with a built-in system for categorizing commands - - - - ```python title="Prefixed Commands with Events" - import discord - - client = discord.Client() - - @client.event - async def on_message(message): - if message.content.startswith("!ping"): - await message.channel.send("Pong!") - - elif message.content.startswith("!announce"): - if len(message.content.split(" ")) < 3: - await message.channel.send("You need to specify a title and a message. Correct usage: `!announce Hello Hello everyone!`") - return - - msg = message.content.split(" ", 2) - title = msg[1] - content = msg[2] - - await message.channel.send("**{}**\n{}".format(title, content)) - - elif message.content.startswith("!"): - await message.channel.send("Unknown command.") - ``` - - - - !ping - - - - Pong! - - - - !announce Hello Hello World! - - - - Hello - -
- - Hello World! -
- - - !help - - - - Unknown Command. - -
-
- - - ```python title="The Commands Extension" - import discord - from discord.ext import commands - - intents = discord.Intents.default() - intents.message_content = True - - bot = commands.Bot(command_prefix="!", intents=intents) - - @bot.command() - async def ping(ctx): - await ctx.send("Pong!") - - @bot.command() - async def announce(ctx, title, *, message): - await ctx.send("**{}**\n{}".format(title, message)) - - @bot.event - async def on_command_error(ctx, error): - if isinstance(error, commands.CommandNotFound): - await ctx.send("Unknown command.") - ``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !pycord - - - Unknown command. - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
- !announce -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- - :::tip - - The commands extension has many more uses. This example only showcases the basic features mentioned - in the previous example. Other things you can do with the commands extension include using a different - built-in help command and creating your own. The following tutorials showcase these. - - ::: -
-
- -## Syntax - -Before we check out the syntax, let's take a look at the bot classes. - -> `discord.Client` - Contains only events. -> -> `discord.Bot` - Subclasses `discord.Client`, adds commands. -> -> `discord.ext.commands.Bot` - Subclasses `discord.Bot`, adds prefixed commands, cogs, and more. - -This means that `discord.ext.commands.Bot` has both slash commands and prefixed commands, as well as -events, cogs and more. - -Now let's look at the syntax. - -```python title="A Simple Prefixed Bot" -import discord -from discord.ext import commands # Import the commands extension -# discord.ext.commands are not the same as discord.commands! - -intents = discord.Intents.default() #Defining intents -intents.message_content = True # Adding the message_content intent so that the bot can read user messages - -bot = commands.Bot(command_prefix="!", intents=intents) # You can change the command prefix to whatever you want. - -@bot.command() # This is the decorator we use to create a prefixed command. -async def ping(ctx): # This is the function we will use to create the command. - await ctx.send("Pong!") # This is the response the bot will send. - - -bot.run("token") # Run the bot with your token. -``` - - - - !ping - - - Pong! - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The help command is a built-in command and is enabled by default. You will learn more about it in the -following guides. - -::: - -## Parameters - -Prefixed commands can take parameters, just like slash commands. You can specify the parameters in -the function itself. - -```python title="Parameters Example 1" -@bot.command() -async def echo(ctx, *, message): - await ctx.send(message) -``` - -`ctx` is the context of the message. `*` means that the parameter can be any number of words. `message` -is the parameter. If you had not passed `*`, `message` would only have been one word. - -For example, if a user had used `!echo hello world`, `message` would have been `hello`. Since we -passed `*`, `message` is `hello world`, or the rest of the message. - -We can pass multiple parameters too! - -```python title="Parameters Example 2" -@bot.command() -async def echo(ctx, channel:discord.TextChannel, title, *, message): - await channel.send("**{}**\n{}".format(title, message)) -``` - -In the example above, `channel` is a parameter that is of type `discord.TextChannel`. When you -specify the type of the parameter, Pycord will automatically try to convert the parameter to that type. -That is why you can use `channel.send` directly without needing to convert it first. - -We also have a new parameter, `title`. This does not have a type, so it will be a string. `*` means -that the rest of the message belongs to the next parameter, in this case, `message`. - -When a user types `!echo #general Greetings! Hello World!`, `channel` will be the text channel -`#general`, `title` will be `Greetings!` and `message` will be `Hello World!`. - -Let's take an example where the user passes `!echo #general Holiday Greetings! Greetings to you all!`. -Here, the user wants the title to be "Holiday Greetings!" and the message to be "Greetings to you all!". -However, since Pycord parses the message at whitespaces, the title will end up being "Holiday" and the -message "Greetings! Greetings to you all!". The user can prevent this by typing `!echo "Holiday -Greetings!" Greetings to you all!`. - - - - !echo #general Holiday Greetings! Greetings to you all! - - - Holiday -
- Greetings! Greetings to you all! -
- - !echo #general "Holiday Greetings!" Greetings to you all! - - - Holiday Greetings! -
- Greetings to you all! -
-
- -Let's check out another example for parameters and parameter types. - -```python title="Parameters Example 3" -import random - -@bot.command() -async def gtn(ctx, guess:int): - number = random.randint(1, 10) - if guess == number: - await ctx.send("You guessed it!") - else: - await ctx.send("Nope! Better luck next time :)") -``` - -If you had not specified the type of the parameter, it would have been a string. And since `"5"` is not -the same as `5` in python, the bot would have responded with "Nope! Better luck next time :)". -Even if you do not specify the type of the parameter, you can still convert it later on, in this case, -with `int(guess)`. - -:::info Related Topics - -* [Command Groups](groups) -* [Rules and Common Practices](../../Getting-Started/rules-and-common-practices) - -::: diff --git a/docs/extensions/pages/_category_.json b/docs/extensions/pages/_category_.json deleted file mode 100644 index ca1119ce..00000000 --- a/docs/extensions/pages/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Pages", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/docs/extensions/pages/paginator-basics.mdx b/docs/extensions/pages/paginator-basics.mdx deleted file mode 100644 index fecd805b..00000000 --- a/docs/extensions/pages/paginator-basics.mdx +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: Paginator Basics ---- - -# Paginator Basics - -## [Page](https://docs.pycord.dev/en/stable/ext/pages/index.html#page) - -This class contains two attributes: `content` and `embeds`, which correspond to the attributes of the same name on the -`discord.Message` class. -To create a new Page, use the following syntax: - -```py -import discord -page = Page(content="My Page Content", embeds=[discord.Embed(title="My First Embed Title")]) -``` - -## [PageGroup](https://docs.pycord.dev/en/stable/ext/pages/index.html#pagegroup) - -This class represents a group of pages. It uses most of the same parameters as `Paginator`, which allows each -`PageGroup` to effectively have its own settings and behaviours. - -## [Paginator](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator) - -This is the main class for `ext.pages`, and is used to control most of the functionality of the extension. - -In its most basic form, with no arguments provided (default values listed below), a paginator can be created like so: - -```py title="Paginator Example" -import discord -from discord.ext.pages import Paginator, Page - -my_pages = [ - Page( - content="This is my first page. It has a list of embeds and message content.", - embeds=[ - discord.Embed(title="My First Embed Title"), - discord.Embed(title="My Second Embed Title"), - ], - ), - Page( - content="This is my second page. It only has message content.", - ), - Page( - embeds=[ - discord.Embed( - title="This is my third page.", - description="It has no message content, and one embed.", - ) - ], - ), -] -paginator = Paginator(pages=my_pages) -``` - -The only required parameter for `Paginator` is the `pages` parameter, which is usually a list of `Page` objects. - -You can also pass in a list of `PageGroup` objects, a list of strings, a list of embeds, or a list of lists of embeds. - -Once the `Paginator` instance is created, you can call either -[`Paginator.send()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.send) -or [`Paginator.respond()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.respond) -to send a message or response with the paginator's contents. - -#### Depending on what's being passed to the `pages` parameter, the behaviour of the paginator may differ: - -* Passing a list of `PageGroup` objects will essentially treat each `PageGroup` as its own Paginator, with most - `Paginator` attributes able to be set independently for each `PageGroup`. - * Each `PageGroup` accepts its own `pages` parameter, which inherits the same behaviour as the `pages` parameter - of `Paginator`, except it cannot contain other `PageGroup` objects. -* If a page is a `Page` object, this will allow you to specify both the `discord.Message.content` and - `discord.Message.embeds` attributes for a page. - * **This is the preferred method of defining a page.** -* If a page is a string, this will be used for the `discord.Message.content` attribute. This type of page cannot have - any embeds. -* If a page is a list of embeds, this will be used for the `discord.Message.embeds` attribute. This type of page - cannot have any message content. -* If a page is a list of lists of embeds, each parent list item will create a page containing all embeds from its - child list. This type of page cannot have any message content. - -#### Parameters for the `Paginator` class which have default values: - -* `show_disabled` **:** `True` - * Show buttons that are disabled (i.e. can't be clicked) -* `author_check` **:** `True` - * Only the author can interact with the paginator. -* `timeout` **:** `180` *(seconds)* - * The paginator will time out and become inactive after this many seconds. -* `disable_on_timeout` **:** `True` - * If the paginator times out, it will be automatically disabled and all buttons will be unusable. -* `use_default_buttons` **:** `True` - * Use the default set of 4 buttons and a page indicator. -* `show_indicator` **:** `True` - * When using the default buttons, shows a middle 5th button with the current/total page numbers. - -**For other parameters that can be set on initialization, please check the -[API Reference](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator)** - -## [PaginatorButton](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatorbutton) - -This class represents a button used to navigate between the pages of a paginator. It's also used to create the page -indicator. - -When creating your own custom buttons, you can either use this class directly or subclass it to add any additional -functionality you may need. - -To add custom buttons to the paginator instead of the default navigation buttons, you have two options to do so: - -1. **Using the `custom_buttons` parameter of `Paginator`:** - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - buttons = [ - PaginatorButton("first", label="<<-", style=discord.ButtonStyle.green), - PaginatorButton("prev", label="<-", style=discord.ButtonStyle.green), - PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True), - PaginatorButton("next", label="->", style=discord.ButtonStyle.green), - PaginatorButton("last", label="->>", style=discord.ButtonStyle.green), - ] - paginator = Paginator( - pages=["Page 1", "Page 2", "Page 3"], - show_indicator=True, - use_default_buttons=False, - custom_buttons=buttons, - ) - ``` -2. **Using `Paginator.add_button()`:** - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"], use_default_buttons=False) - paginator.add_button(PaginatorButton("prev", label="<", style=discord.ButtonStyle.green)) - paginator.add_button(PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True)) - paginator.add_button(PaginatorButton("next", label=">", style=discord.ButtonStyle.green)) - ``` - -If you want to use the default navigation buttons, but not all of them, you can also use `Paginator.remove_button()` to -selectively remove them: - -```py -from discord.ext.pages import Paginator - -paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"]) -paginator.remove_button("first") -paginator.remove_button("last") -``` - -## [PaginatorMenu](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatormenu) - -This class represents the `discord.Select` menu used to navigate between `PageGroup` instances. In most situations, you -will not need to interact with this class directly. - -If you do subclass it, you'll likely want to call `super()` in your `__init__` method to ensure that the `PageGroup` -navigation functionality is retained. - -## Usage Examples - -For a comprehensive list of examples showing all `Paginator` functionality, please see the -[example in cog form](https://github.com/Pycord-Development/pycord/blob/master/examples/views/paginator.py) in the repo. - -## Support and Feedback - -If you have any questions, suggestions, or feedback for `ext.pages`, please join the -[Discord server](https://discord.gg/pycord). diff --git a/docs/extensions/pages/paginator-faq.mdx b/docs/extensions/pages/paginator-faq.mdx deleted file mode 100644 index 698e34c2..00000000 --- a/docs/extensions/pages/paginator-faq.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Paginator FAQ ---- - -# Paginator FAQ - -* **What's the difference between `Paginator.send()` and `Paginator.respond()`?** - * `Paginator.send()` is used to send a channel message (DMChannel or TextChannel) with the paginator. - * `Paginator.respond()` is used to send an interaction response (or followup) message with the paginator. - -* **How can the bot send a paginator to a different destination than where it was invoked?** - * Use the `target` parameter in `Paginator.send()` or `Paginator.respond()`. - * You can also set the `target_message` parameter to control what's shown as a response where the paginator was originally invoked. - * For `Paginator.respond()`, this parameter is required if `target` is set, as an interaction requires being responded to. - -* **How can I change the paginator's behavior without re-creating and re-sending it?** - * Use the `Paginator.update()` method. - -* **How can I make the bot actually do something with the contents of a page?** - * Use the (upcoming) `Paginator.page_action()` method. diff --git a/docs/extensions/tasks/_category_.json b/docs/extensions/tasks/_category_.json deleted file mode 100644 index 430dcab9..00000000 --- a/docs/extensions/tasks/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Tasks" -} \ No newline at end of file diff --git a/docs/extensions/tasks/tasks.mdx b/docs/extensions/tasks/tasks.mdx deleted file mode 100644 index 32d4bbb7..00000000 --- a/docs/extensions/tasks/tasks.mdx +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Tasks ---- - -## Concept - -So you want to run a background task running at some specified interval? Thankfully, that's a common thing to do, whether you're working with some API or handling some background logic don't worry, the Pycord tasks extension is here to make life easier for you! - -With the tasks extension, you can make background tasks without worrying about the asyncio hell and mind bogglers like "what if my internet dies" and "how do I handle reconnecting" with the added benefit of a lot of useful additions that are one line of code away! - -### Example Usage - -```py -import discord -from discord.ext import tasks - -bot = discord.Bot() - -@bot.event -async def on_ready(): - very_useful_task.start() - -@tasks.loop(seconds=5) -async def very_useful_task(): - print('doing very useful stuff.') - -bot.run("TOKEN") -``` - -If you do run this code in your terminal you should see something like this after about 15 seconds: - -``` -doing very useful stuff. -doing very useful stuff. -doing very useful stuff. -``` - -For a more useful example here's a task in a cog context ripped straight from the [docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#recipes): - -```py -from discord.ext import tasks, commands - -class MyCog(commands.Cog): - def __init__(self): - self.index = 0 - self.printer.start() - - def cog_unload(self): - self.printer.cancel() - - @tasks.loop(seconds=5) - async def printer(self): - print(self.index) - self.index += 1 -``` - -As you'd expect this will increment a number and print it out every 5 seconds like so: - -```sh -0 -# 5 seconds later -1 -# 5 more seconds later -2 -# ... -``` - -## [Tasks](https://docs.pycord.dev/en/stable/ext/tasks/index.html) - -Now let's get into the nitty-gritty of tasks. - -As you've seen tasks can work in both outer scope and class contexts and the handle is roughly the same, you define a task using the `tasks.loop` decorator and use the `start` method to start it, the difference is you add the `self` argument when in a class context so since most people have all their bot's code in Cogs all the following code blocks will be in a Cog context to make it easy to copy it then apply whatever modifications you might need! - -### [Creating a task](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop) - -A look at `discord.ext.tasks.loop`'s definition in the documentation reveals that: - -1. As you've seen before it expects the time between each execution, that however doesn't have to be in seconds as - there are `seconds`, `minutes` and `hours` parameters to make it easier for us, they can also be floats in case you want - ultra-precision. -2. You can also pass in a `datetime.time` object or a sequence of them in the `time` parameter which will make it run - at the specified time(s). -3. You can pass in how many times a loop runs before it stops by passing in the `count` parameter, you can use `None` - to make it run forever which is also the default. -4. The loop function ***must*** be a coroutine. - -These are all really useful, and they aren't the only parameters so if you want to know more about them check out the -[docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop)! - -### Attributes - -A task has the following attributes: - -* `current_loop`: The current loop the task is on. -* `hours`, `minutes`, `seconds`: attributes that represent the time between each execution. -* `time`: A list of datetime.time objects that represent the times the task will run, returns `None` if no datetime - objects were passed. -* `next_iteration`: A `datetime.datetime` object that represents the next time the next iteration of the task will - run, can return `None` if the task stopped running. - -These attributes serve as a really powerful asset to get info about your loop. - -### Example - -Now let's create a cog that handles a leaderboard we have in our bot using Tasks then explain what we did after that and -also provide a refresher of how slash commands groups work in cogs. - -For the sake of this example let's pretend that we have a leaderboard module that does all the leaderboard handling for -us and that computing the leaderboard is very expensive computationally wise, so we want to store one version of it that -gets regularly updated instead of generating it every time someone calls the `/leaderboard view` command. - -```py -from discord.ext import tasks, commands -from discord.commands import SlashCommandGroup, CommandPermissions - -from leaderboard import * # Mock leaderboard module. - -class LeaderboardCog(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.update_leaderboard.start() - self.leaderboard_embed = generate_leaderboard_embed() - - leaderboard = SlashCommandGroup(name='leaderboard', description='Leaderboard commands.') - - @tasks.loop(minutes=10) - async def update_leaderboard(self): - print('Updating leaderboard...') - await update_leaderboard() - self.leaderboard_embed = generate_leaderboard_embed() - - @update_leaderboard.before_loop - async def before_update_leaderboard(self): - await self.bot.wait_until_ready() - print("About to start updating leaderboard.") - - @update_leaderboard.after_loop - async def after_update_leaderboard(self): - leaderboard_cleanup() - print("Stopped updating leaderboard.") - - @update_leaderboard.error - async def update_leaderboard_error(self, error): - print(f"Oh no, an error occurred while updating the leaderboard. Error: {error}") - - @leaderboard.command() - async def view(self, ctx): - await ctx.respond(embed=self.leaderboard_embed) - - @leaderboard.command() - async def update_info(self, ctx): - await ctx.respond(f"""***Leaderboard Info***\n - Last update: {(600 - self.update_leaderboard.next_iteration.timestamp())//60} minutes ago.\n - Next update: in {self.update_leaderboard.next_iteration.timestamp() // 60} minutes.\n - Time between loops: {self.update_leaderboard.minutes} minutes.\n - Times updated this session: {self.update_leaderboard.current_loop}. - Running? {self.update_leaderboard.is_running()} - Failed? {self.update_leaderboard.failed()}""", ephemeral=True) - - # Now for the owner only commands: - - leaderboard_config = SlashCommandGroup(name="leaderboard_config", description="Leaderboard configuration commands", permission=[CommandPermissions("owner", 2, True)]) - - @leaderboard_config.command() - async def set_time_between_updates(self, ctx, minutes: int): - self.update_leaderboard.change_interval(minutes=minutes) - await ctx.respond(f"Set time between updates to {minutes} minutes.") - - @leaderboard_config.command() - async def stop(self, ctx): - self.update_leaderboard.stop() - await ctx.respond("Stopped the leaderboard update.") - - @leaderboard_config.command() - async def restart(self, ctx): - self.update_leaderboard.restart() - await ctx.respond("Restarted the leaderboard update.") - -def setup(bot): - bot.add_cog(LeaderboardCog(bot)) -``` - -Phew, that was quite a bit of code. - -Now to explain what's going on: - -First things first we create a cog and in its `__init__` function we start the `update_leaderboard` task and generate -the first instance of our leaderboard's embed. - -After that, we define the `update_leaderboard` task using the `loop` decorator, and we make it run every ten minutes by -passing 10 to the `minutes` parameter. - -Then that we define the `before_update_leaderboard` task using the `before_loop` decorator, and we make it wait until the -bot is ready before starting the task. - -Next up we define the `after_update_leaderboard` task using the `after_loop` decorator, and we make it clean up the -leaderboard when the loop finally stops running. - -Then we define the `update_leaderboard_error` task using the `error` decorator, and we make it print any errors that may -occur while we update our leaderboard to the console. - -Then we get into the fun stuff, we create a slash command group using the `SlashCommandGroup` class and name it -`leaderboard`, we then create the `view` sub-command which sends the embed generated when the leaderboard is updated and -`update_info` which shows a lot of data about the task using some attributes and functions available to us. - -We also create a slash command group called `leaderboard_config` which is only available to the owner of the bot. - -Then we create the `set_time_between_updates` sub-command which takes in the time in minutes and changes the time -between updates of the leaderboard using the `change_interval` method, the `stop` sub-command which stops the task using -the `stop` method and `restart` which restarts the task using the `restart` method. - -Finally, we add the `LeaderboardCog` cog to the bot, and we're done! - -I'd highly recommend you check the tasks extension -[documentation](https://docs.pycord.dev/en/stable/ext/tasks/index.html) for more info on how to use them and what other -functions they have. diff --git a/docs/getting-started/_category_.json b/docs/getting-started/_category_.json deleted file mode 100644 index ceb18281..00000000 --- a/docs/getting-started/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 3, - "label": "Getting Started", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/docs/getting-started/creating-your-first-bot.mdx b/docs/getting-started/creating-your-first-bot.mdx deleted file mode 100644 index 17eec04c..00000000 --- a/docs/getting-started/creating-your-first-bot.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: Creating Your First Bot ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -Excited to create your first bot? Once you [install Pycord](../installation.mdx), you can start right -away! - -## Creating the Bot Application - -Just like how you need to sign up to use Discord, your bot also has to be signed up. To do this, -you should: - -1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click - on . -2. Give your bot a name, and click . -3. Now, you should see a page like this. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdW3OQnwUhacopqSWw%2F-Mjd_-mxrJCrzmaXrAg8%2Fimage.png?alt=media\&token=b8e2ae6c-2290-4d37-ad7c-eb412f3fb00e) -4. Click on the tab on the left side of the screen. -5. Click on . -6. You can give it a name, change the Avatar, etc. - -## Inviting the bot - -Now, lets get the bot added to some servers. Go to the tab -in the left pane and select `bot` and `applications.commands` as scopes. - -You may want your bot to have application commands, which is what the `application.commands` scope -allows your bot to make. - -Next, you want to choose what permissions the bot will have and select them. For now, you can just -give your bot the `administrator` permission, which gives your bot every permission. Once you select -your bot's permissions, click on to get the bot invite link. - -:::tip - -When your bot is all ready to go, make sure that administrator permissions aren't selected unless -your bot truly needs them. Try selecting only permissions the bot will need. For testing, -Administrator permissions are fine. - -::: - -![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-Mk6tNY3LfDkjd6pqdpL%2F-Mk6tkdpddEWoa2jczZk%2Fimage.png?alt=media\&token=52c8a29f-a798-48f8-a8c7-4ecca2681f79) - -You can use this link to invite the bot. - -## Tokens - -Now that you have an account for your bot, you need to log in. To log in, we need the bot's -password. All users and bots have a "token." You may think of this token as a password, as this allows -us to log our bot into Discord. - -Tokens are "snowflakes." Not actual snowflakes, though. Just like how no two snowflakes in real life have the same -pattern, snowflakes in computers are unique things - no two bots have the same token - so a token is -considered a snowflake. A Discord user ID is also a snowflake. - -Now, lets get your bot's token. To do this, you want to: - -1. Go back to the tab. -2. Click on the button in the "Token" section. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdbU12JISJorAZxrKH%2F-MjdbpUsapzb5n15Po5P%2Fimage.png?alt=media\&token=118e259f-940a-4f6c-b3a3-c29f3a54100d) - -Now, you have your bot's token copied to your clipboard. - -:::danger - -Do not, under any circumstances, give your token to anyone. Even if you are contacted by someone -claiming to be Discord staff, do not give them your bot's token. They are lying to you to try and -gain access to your bot. If an unauthorized user gains access to your bot's token, they can access -your bot and use it in malicious ways. - -Never push your token to GitHub or include it in your code. One way to prevent your token from -getting leaked is to store it in `.env` files. - -::: - -### Protecting Tokens - -#### Using dotenv - -You can store your tokens in `.env` files. This is a simple way to store sensitive information. - -1. Create a file with the name `.env` (only the extension, with a dot/period at the start and without a name before it). -2. Define the token in the `.env` file (replace the example value with your token). - ```env title=".env" - TOKEN = NzkyNzE1NDU0MTk2MDg4ODQy.X-hvzA.Ovy4MCQywSkoMRRclStW4xAYK7I - ``` -3. Install [`python-dotenv`](https://pypi.org/project/python-dotenv/). - ```bash - python -m pip install python-dotenv - ``` -4. Load the token from the `.env` file. - ```python - import dotenv - dotenv.load_dotenv() - token = str(os.getenv("TOKEN")) - ``` -5. Pass your token as parameter when running the bot. - ```python - client.run(token) - ``` - -:::tip - -If you are using Git to track your bot's changes, you should create a file called `.gitignore` and add -`.env` to it. This stops your `.env` file from getting tracked along with the rest of your code, and -will not be pushed to a remote Git repository. As a consequence, it will stay secure on your local machine. - -::: - -## Coding the Basics - -Here's an example of code you'll write with Pycord: - -```py -import discord -import os # default module -from dotenv import load_dotenv - -load_dotenv() # load all the variables from the env file -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") - -bot.run(os.getenv('TOKEN')) # run the bot with the token -``` - - - -
- - hello - -
- Hey! -
-
- -
- -Let's go through the code. First, the imports. - -```py -import discord -import os -from dotenv import load_dotenv -``` - -In the first line, `import discord`, we import Pycord. Although you install Pycord with `pip install py-cord`, you -import it with `import discord`. This is so it's as easy as possible when switching from Discord.py to Pycord. - -We then import `os` and `dotenv`. `os` is a default module that we will use to get the token from the env file. `dotenv` -is a module that we will use to load the env file. You installed this with `pip install python-dotenv`. - -Next, we load the env file with `load_dotenv()`. - -```py -bot = discord.Bot() -``` - -In this line, we create a new instance of [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). -In this object, we can pass various parameters for configuration purposes, such as `owner_ids` -and [`intents`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```py -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") -``` - -We use the [`event`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) decorator to override -the [`on_ready`](https://docs.pycord.dev/en/stable/api/events.html#discord.on_ready) function to define an -event that is automatically called when the bot is ready to use. - -```py -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") -``` - -Here, we use the [`slash_command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.slash_command) -decorator to define a slash command. We specify the `name` and `description` arguments. If not -specified, the name of the slash command would be the function name and the command description would -be empty. - -Optional: We type-hint the context parameter (`ctx`) as [`discord.ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext). In modern IDEs, type-hinting allows access to autocompletion and docstrings. You can read more about type-hinting [here](https://docs.python.org/3/library/typing.html). - -Finally, you want to run the bot using the token specified in the `.env` file. - -Now you have finished creating your first Pycord bot! What we have shown you is just the basic structure -of a bot. You can do a lot more with Python and Pycord knowledge, as well as your imagination! Pycord -will not limit your bot's abilities. - -:::note - -The part where we load the token from the environmental variables is not required. You may use another way to keep your token secure, or, although not recommended, simply specify the token normally as a string, as shown below. - -
- A Basic Bot without securing the token - -
- ```py - import discord - - bot = discord.Bot() - - @bot.event - async def on_ready(): - print(f"{bot.user} is ready and online!") - - @bot.slash_command(name="hello", description="Say hello to the bot") - async def hello(ctx: discord.ApplicationContext): - await ctx.send("Hey!") - - bot.run("TOKEN") - ``` -
-
- -::: - -## FAQ - -### How do I make prefixed commands? - -Prefixed commands are an older method of creating bot commands that listen for messages and replies -if the message starts with a certain character. You can read [this page](../extensions/commands/prefixed-commands.mdx) -to learn more about prefixed commands. - -### How do I setup modules/cogs? - -[Cogs](../popular-topics/cogs) are a great way to organize your commands by putting them into -groups called cogs. Cogs are separate files that your bot loads to get the commands inside. -You can read more about cogs, as well as learn how to use them and their benefits, -[here](../popular-topics/cogs). - -### How do I add components, such as buttons and dropdown menus, to my bot? - -Pycord makes it very easy to use Message Commands with your bot by using the `discord.ui` module. -To learn more, read about Message Commands in our [interactions directory](../interactions). - -:::info Related Topics - -* [Prefixed Commands](../extensions/commands/prefixed-commands) - -::: diff --git a/docs/getting-started/hosting-your-bot.mdx b/docs/getting-started/hosting-your-bot.mdx deleted file mode 100644 index 1453cdaf..00000000 --- a/docs/getting-started/hosting-your-bot.mdx +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Hosting Your Pycord Bot ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Hosting Your Pycord Bot - -If you're completely new to this, you might have thought something along the lines of "Yay! I got my -bot working," after following our [Creating your First Bot](creating-your-first-bot) guide, only -to close your IDE or shut down your computer to find your bot offline. - -The reason for this is that programs have to be hosted somewhere, meaning some machine somewhere has -to constantly run your bot. There are tons of hosting services that can help you host your bot for -little to no cost. - -## Can I get a Clear Explanation? - -Sure thing. When you run your bot, it first makes a connection to Discord's API. Once that's done, -Pycord sends "heartbeats" to Discord. "heartbeats" are small packets sent at a set interval telling -Discord that your bot is indeed still alive. If Discord doesn't receive a heartbeat after a certain -amount of time, your bot is pronounced dead and buried in the graveyard (not really). It is, though, -taken offline and its connection with Discord is terminated. - -Once you close the terminal that you've run your program on, the program is no longer running, and -the bot stops sending heartbeats and can no longer process commands. This is why you have to constantly -keep the process running. - -This goes for all programs, in a different nature. If the code isn't compiled/built/assembled/interpreted, -it can't be running. - -## What is a Host? - -A host is a server or container for running code offered by a **hosting provider.** There are a lot -of hosting providers, such as bigger ones like Amazon Web Services (AWS) and Google Cloud, and smaller -ones like GalaxyGate and DigitalOcean. - -There are three types of hosts. - - - - Shared hosting is a type of hosting where multiple people share one VPS. Getting a spot on - a shared host is usually cheap, sometimes even free. Shared hosts do not give you a lot of - resources, from less than a gigabyte of RAM (usually 512MB on free hosts) and half of a CPU - with very little storage. Shared hosting is usually used for website hosting and is not - recommended for hosting a Discord bot. - - - - A virtual private server (VPS) is a virtual computer (virtual machine) that is rented out to - customers. Most people use a VPS for hosting their projects such as Discord bots. You can get - anywhere from less than a gigabyte of RAM and a less powerful CPU to just under one hundred - gigabytes of RAM, a (or multiple) powerful CPU(s), and a fair amount of storage. A VPS is the - best choice for most users and can be fairly cheap. - - - - A dedicated host is a physical computer. You can buy these yourself or rent one from a hosting - provider. Dedicated hosts are often very expensive, but are also very powerful, having a - few hundred gigabytes of RAM and a few very powerful CPUs, along with a good amount of storage. - Dedicated hosts are usually used for very large projects and are overkill for something like - a Discord bot. - - - -
- -:::danger - -Make sure you choose a hosting provider you trust. Also make -sure the hosting provider you're looking at has good reviews on public forums. Googling along the -lines of "\[host] review" should do the trick. A provider you don't trust can compromise your token. - -::: - -Most hosting providers rent their services to you for a monthly or yearly fee. These can be anywhere -from a few dollars to hundreds or thousands of dollars. - -## How to Host Your Bot - -Once you rent or buy a VPS, you can get to work. Most hosting providers allow you to choose from a -wide range of operating systems, most allow you to choose one but some allow you to choose -multiple. Once that's ready, you have to SSH into the system. We won't get into SSH here, but you can -read [this article from DigitalOcean](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys). -You can also use VNC, which is remote desktop software. If you are using an OS that does not have a -GUI, and is only a command line (a "server" OS), such as Ubuntu Server or most Linux Server Operating Servers, you will most -likely use SSH. If you are using an OS that has a GUI, such as Windows Server, you will most likely use VNC. - -Once you've decided on your operating system, you'll want to set it up and install Python. Once that's -done, you can copy your bot's files to your remote system, install the required packages, and run -the bot. - -:::warning - -If you are using SSH to run the file, your bot will not stay running. This is because the file is -only told to run during your session. You can use a command like [nohup](https://en.wikipedia.org/wiki/Nohup) -to make sure your file stays running after you disconnect. - -::: - -Now your bot is hosted, but that doesn't mean it can't go offline. If your bot encounters an error, -it can often go offline or stop its process. For this, make sure you have proper error handling. -Also be sure to pay attention to your hosting provider's updates or news, as they usually notify -users of when they plan on doing maintenance to their servers, making their services unavailable for -a short time. - -:::info Related Topics - -* [Creating Your First Bot](creating-your-first-bot) - -::: diff --git a/docs/getting-started/more-features.mdx b/docs/getting-started/more-features.mdx deleted file mode 100644 index b3abbf02..00000000 --- a/docs/getting-started/more-features.mdx +++ /dev/null @@ -1,361 +0,0 @@ ---- -title: More Features -description: More features to make your bot cool and snazzy. ---- - -import { - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, - DiscordEmbedField, - DiscordEmbedFields, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -So, you just created your first Pycord bot! Now, let's add some more features to it. This will include adding event handlers, waiting for user response, styling the messages, and more. - -## Events - -### Event Handlers - -Events in Discord are a way to listen for certain actions. For example, if you want to know when a user joins your server, so you could send a welcome message, you can use the `on_member_join` event. - -First, you need to ask Discord to send you events. This is done via "Intents". Read up the [Intents](../Popular-Topics/intents) page for more information. - -Once you understand what intents are, you can enable the events you need, or just use the default ones with `discord.Intents.all()`. - -Now that that's done, let's add an event handler for when a user joins the server. We will use the [`on_member_join` event](https://docs.pycord.dev/en/stable/api/events.html#discord.on_member_join). We will send a private message to the user welcoming them to the server. - -```python -@bot.event -async def on_member_join(member): - await member.send( - f'Welcome to the server, {member.mention}! Enjoy your stay here.' - ) -``` - -We use the [`discord.Bot.event` decorator](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) to add the event handler. - -The `on_member_join` event is called when a user joins the server. The `member` parameter is the user that joined. Different events have different names and parameters. You can find all of them [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -So, that's how you add event handlers! - -### Waiting for User Response - -Let's say you want to create a Guess-the-Number game (where the user has to guess a number between 1-10). You need to send a message to a user and wait for them to respond. You can do this with the [`wait_for`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.wait_for) method. - -```python -@bot.command() -async def gtn(ctx): - """A Slash Command to play a Guess-the-Number game.""" - - await ctx.respond('Guess a number between 1 and 10.') - guess = await bot.wait_for('message', check=lambda message: message.author == ctx.author) - - if int(guess.content) == 5: - await ctx.send('You guessed it!') - else: - await ctx.send('Nope, try again.') -``` - -`wait_for` takes one argument, which is the event type. The event type is the name of the event you want to wait for. In this case, it's `message`. It could also be `reaction` to wait for a reaction to be added. - -We pass a keyword argument to `wait_for` called `check`. The function may look complicated if you're a beginner. We pass a `lambda` function, which simplifies the code a bit. - -The lambda function takes one parameter, `message`. When Pycord receives a message, it passes it to the `check` function. If the function returns `True`, the message is returned. If the function returns `False`, the message is ignored and the bot waits for another message. - -Here, we check if the message is from the user that sent the command. We simply use `message.author == ctx.author`. This will check if the author of the message was the person who invoked the command. - -## Styling Messages - -### Embeds - -Embeds are a Discord feature that allows applications to format their messages in cool embedded format, -enabling your bot to lay out messages with a lot of text into neat fields. - - - - - The Pycord Guide is a detailed guide that explains how to use Pycord and all of its features. - - - The Getting Started section explains how you can get a brand new bot created and running from scratch. - - - Interactions with Pycord - - - Pycord's various Extensions - - - Other Popular Topics - - - We have so much more! Just explore, and you will find everything you need. If you want another page added, open an issue on the GitHub. - - - Created with 💖 by the Pycord Team & Contributors - - - - -
- -Creating embeds is simple! Just create an instance of [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) and edit it to your liking. Once you're done, send it! - -```python -import discord - -bot = discord.Bot() - -@bot.command() -async def hello(ctx): - embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from - ) - embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") - - embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) - embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) - embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) - - embed.set_footer(text="Footer! No markdown here.") # footers can have icons too - embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") - embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") - embed.set_image(url="https://example.com/link-to-my-banner.png") - - await ctx.respond("Hello! Here's a cool embed.", embed=embed) # Send the embed with some text - -bot.run("TOKEN") -``` - - - -
- hello -
- Hello! Here's a cool embed. - - Embeds are super easy, barely an inconvenience. - - - A really nice field with some information. The description as well as the fields support markdown! - - Inline Field 1 - Inline Field 2 - Inline Field 3 - - Footer! No markdown here. - -
-
- -
- -This simple command sends replies to a [slash command](../interactions/application-commands/slash-commands) with an embed. -Let's break it down: - -```py -embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), - ) -``` - -This command creates an embed. We use the [`Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) -class to create an embed object with the title "My Amazing Embed", the description "Embeds are super easy, barely an inconvenience.", and the color `blurple`, Discord's main theme color. - -[discord.Colour](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Colour) is a class full of [classmethods](https://docs.python.org/3/library/functions.html#classmethod) -that return color values. While the official, documented name of this is `discord.Colour`, `discord.Color` -works as well. - -```py -embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") -embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) -embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) -embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) -``` - -This small section shows off embed fields. You can add fields to embeds with the [`add_field` method](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.add_field) -of the [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) class. These consist of three -keyword arguments: `title`, `value`, and `inline`. `title` and `value` are both required arguments, which inline defaults to `False` if it's not defined. The `inline` argument specifies whether space will be divided among the inline fields. There could be a mix of fields where inline has different values too. - -```py -embed.set_footer(text="Footer! No markdown here.") # footers can have icons too -embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") -embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") -embed.set_image(url="https://example.com/link-to-my-banner.png") -``` - -In this section, we're adding unique items to the embed. These items are: - -* Footer - With the [`set_footer()`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_footer) - method, you can set a small footer that holds a message. This has `text` and `icon_url` kwargs. -* Author - With the [`set_author`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_author) - method, you can set an author for the embed. This is a small text field at the top of the embed. This - includes `name`, `url` and `icon_url` kwargs. -* Thumbnail - With the [`set_thumbnail`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_thumbnail) - method, you can set a small image to reside at the top-right of the embed. This has a single `url` kwarg. -* Image - With the [`set_image`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_image) - method, you can set an image to sit at the bottom of an embed. This has a single `url` kwarg. - -There are a lot more methods and attributes you can use to configure embeds. Here, we just covered the basics. Also, remember that all of these values are not necessary in an embed. An embed may only contain a few of these. For example, only a description, a title and a description, and so on. - -### Markdown - -Markdown is a type of markup language that's limited in terms of formatting yet simple. Discord allows -for a watered-down version of markdown to be in their messages. - -#### Text Markdown - -Text formatting can be used in messages and in most embed parts, -as explained in the dedicated section below. - - - - - - - - - - - - - - - - - - - - - -
*italics****underlined italics***
**bold******underlined bold****
***bold italics********underlined bold italics*****
**underlined**~~strikethrough~~
- -#### Code Markdown - -To create a single-line code block without syntax highlight, wrap the text between single backticks. -This code block will only add a dark background to the text. - -``` -`print("Hello world!")` -``` - -To create a multi-line code block without syntax highlight, wrap the text between triple backticks -on first and last line. This type of code block will encase the code inside a box. - -```` -``` -message = "Hello world!" -print(message) -``` -```` - -To create a multi-line block with syntax highlight, add the name of the language you are using right after -the triple backticks on the first line. For example, for Python you can write either "python" or "py". - -```` -```python -message = "Hello world!" -print(message) -``` -```` - -If you want to use syntax highlight for a single line of code, you still have to format it -like a multi-line block but the code must be on a separate line than the triple backticks. - -#### Quote Markdown - -To create a single-line quote block, start the line with `>` followed by a space. - -``` -> This is a single-line quote. -``` - -To create a multi-line quote block, write `>>>` followed by a space. All text -from that point onwards will be included in that quote block. - -``` ->>> This is a -multi-line quote. -``` - -#### Spoiler Markdown - -To hide a spoiler, encase the text between double pipes. The users -will have to click on it before being able to see the text contained in it. - -``` -||spoiler|| -``` - -#### Link Markdown - -Link formatting only works in embeds and messages sent through webhooks, -by using the following syntax: - -``` -[Pycord](https://pycord.dev/) -``` - -Inside the supported elements that have just been mentioned, -the example above will look like this: [`Pycord`](https://pycord.dev/) - -Outside them, the link will still be clickable but the formatting will be ignored, -therefore the example above will look similarly to this: `[Pycord](https://pycord.dev/)` - -#### Embed Markdown - -Adding markdown to your embeds or messages will give your bot the sparkle it needs, -however, markdown is limited inside embeds. Use the following table as a reference -and keep in mind that embed title and filed names will always show in **bold**. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PartTextLink
Embed AuthorNoNo
Embed TitleYesNo
Embed DescriptionYesYes
Field NameYesNo
Field ValueYesYes
Embed FooterNoNo
diff --git a/docs/getting-started/rules-and-common-practices.mdx b/docs/getting-started/rules-and-common-practices.mdx deleted file mode 100644 index 98d1c1ff..00000000 --- a/docs/getting-started/rules-and-common-practices.mdx +++ /dev/null @@ -1,186 +0,0 @@ ---- -title: Rules and Common Practices -description: All about the rules and common practices for coding a Discord bot ---- - -# Rules and Common Practices of Creating a Bot - -When creating almost anything, there's always a certain set of rules to follow or common practices, -such as [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python. This applies to creating bots -with Pycord as well. - -:::note - -Most of these rules and common practices are only applicable for -[verified bots](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting), -but it's good to follow them nonetheless. - -::: - -## Rules - -There are rules for creating bots, and most of these are required by Discord themselves, not us at -Pycord. Not following these rules may get your bot denied for verification. - -### Terms of Service and Privacy Policy - -Starting at some point in time, Discord has made providing a privacy policy with your bot a requirement. -This is so that Discord knows exactly what you are doing with its users' data. - -:::tip -You don't need a lawyer or anyone special to write out a privacy policy for you, nor do you need -it approved by some official entity. Simply writing out how you are going to use Discord user -information neatly is all you need to do. -::: - -Providing a Terms of Service for your bot is optional, though usually a best practice. It tells users -what they can and cannot do with your service, and makes it easier to settle disputes if someone -disagrees with you. - -Read more in Discord's official [Legal Docs](https://discord.com/developers/docs/legal). - -### Developer Policy - -We could list almost every rule about using Discord's API here. *Or* we could simply link Discord's -Developer Policy to make it easier on us. You can find Discord's Developer Policy -[here](https://discord.com/developers/docs/policy). This outlines what you can and cannot do with -Discord's Developer API. And, don't worry, it's completely readable and understandable. - -## Best Practices - -Now, here's something we *can't* simply link an article for. We're going to discuss the best practices -of creating a Discord bot with Pycord. - -### Bot Sharding - -To any new or maybe even experienced bot developer, sharding a bot sounds beneficial once you hear -about it. I'm here to tell you that it isn't a good idea to shard your bot. - -*Wait a minute, why would it be an option if it wasn't a good idea?* It's simple. I lied. Sort of. -I'm not going to go into the details of sharding a bot, so you can read about it on -[this page](../Popular-Topics/sharding). Sharding is the process of taking your bot -and breaking it up into small pieces, so it's easier to perform tasks. This is very useful for large -bots, as it makes them faster and more reliable. Sharding is not a good practice for small bots. - -:::note -Discord will notify you once it is time to shard your bot, and will eventually force you to do so. -::: - -At the very least, wait for one thousand servers to shard your bot. If you shard your bot while it's -small, you'll just be wasting resources and possibly making your bot slower. - -### [Verification](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting) - -Verifying your Discord bot is something every developer would like to achieve. It shows that your bot -is in more than 75 servers. It's generally a good idea to try to get your bot verified as soon as -possible. We're talking at 76 servers soon. This is because Discord can be somewhat slow in terms of -bot verification, so verifying as soon as possible gives them enough time to verify before your bot -reaches the 100 server cap. If a bot is not verified, it cannot grow beyond 100 servers. - -It's also a good idea to only apply for the privileged intents that you need. Applying for intents -your bot doesn't use wastes both your time and Discord's time, as your privileged intent request -will be denied simply because you applied for an intent you didn't need. - -### Subclassing - -While it may take some time, subclassing a bot is very worth it. Once again, this was explained -elsewhere, so I won't go into the details, but I felt it fit here, so I put it here. - -Subclassing a bot makes it more flexible and allows it to do a lot more. Read more about subclassing -bots [here](../Popular-Topics/subclassing-bots) - -### Your Bot's Token - -Your bot is only able to be run for one reason: its token. If you followed the -[guide for creating your first bot](creating-your-first-bot), you should already know a bit about -keeping that token safe. That's exactly what you want to do. - -Sharing your token is never good. If someone evil gets a hold of your token, they can do terrible things, -such as making your bot leave all of its servers, spamming all the members the bot has contact with, -and even manipulating the servers the bot is in, if given the permissions. That's why it's very important -to keep your token safe. To learn how to do so, read [this part](creating-your-first-bot#tokens) of -the Creating Your First Bot guide. - -### Backups - -You always want to back up your bot's data. This includes both its code *and* its databases. This way, -if something tragic happens, such as your host failing a data migration or you breaking your Raspberry -Pi's SD card that held your bot, you'll still have its precious user data. I have a small program for -my bot that uploads its databases to a remote GitHub repository periodically to not lose any data. -It may be smarter to find a bit more of a reliable way to do so, though. - -Public or private, having a local Git repository connected to a remote one is a good idea for making -almost any application. For a lot of developers, it's like saving your work. If you do this, all of -your bot's code won't be lost if your computer spontaneously combusts, or you smash it to bits from -anger. You can simply grab the backup computer that everyone has lying around, and you're back -in business. - -### Organization and Cleanliness - -It is *extremely* important to have organized code. This includes commands, objects, functions, -and classes. If you don't have organized code, it will get progressively harder for you to recognize -it, and others won't be able to decipher it. - -Make sure you utilize indents and spaces, as these are very important in making your code readable. - -```py title="Bad Spacing" -class MyClass: - async def add(self,num1,num2): - return num1+num2 - async def sub(self,num1,num2): - return num1-num2 -``` - -```py title="Good Spacing" -class MyClass: - async def add(self, num1, num2): - return num1 + num2 - - async def sub(self, num1, num2): - return num1 - num2 -``` - -See the difference? Now, which one looks more readable? Hopefully, you answered the second example. -Python's [PEP8](https://www.python.org/dev/peps/pep-0008/) is a PEP (**Python Enhancement Proposal**) -style guide for Python. It is the style guide that is used by most Python developers and programmers, -providing a universal way to write and read code. - -### Databases - -As your bot grows, you'll inevitably have to store data for your bot. Now, most people would probably just load up some -JSON file on boot into a `dict`, modify it in memory then write to the file. However, JSON files aren't the solution. -When you write to a JSON file, it rewrites the entire file instead of just rewriting the section that changed. It's also -a configuration file format, not a storage file format. - -Instead of using a JSON file or some other related format, you should instead use a database. There are many databases -out there, like MongoDB, SQLite, and PostgreSQL to name a few. - -All of these databases I named do the job well, and which one you use depends on what features you want out of a database. - -<> - {/* Maybe clarify these/add more options */} - - -#### MongoDB - -MongoDB is a JSON-like format and if you already use JSON files, it shouldn't be too hard to migrate over to. - -#### SQLite - -SQLite is based on SQL, a common relational data model. It's a lightweight, easy-to-use, portable database solution that -works entirely on files. However, if for some reason you cannot read/write to and from a file, and you need to manage -lots of data, SQLite might not be for you. - -While SQLite is a part of the Python Standard Library as the `sqlite3` package, we recommend not using it as it is -synchronous and blocking. You should use an asynchronous alternative, such as [`aiosqlite`](https://pypi.org/project/aiosqlite/). - -#### PostgreSQL - -PostgreSQL is also based on SQL, but it also has more features than SQLite. It's compliant with the SQL standard, -open-source, and extensible. However, it's not that fast or simple compared to SQLite. - -#### MariaDB - -MariaDB is also based on SQL and is a fork of the MySQL project. It's compliant with the SQL standard, it's also open -source and is a complete drop-in replacement for any code with MySQL. You don't even need to change what package you're -using! diff --git a/docs/gsoc-ideas.mdx b/docs/gsoc-ideas.mdx deleted file mode 100644 index dd5c28c6..00000000 --- a/docs/gsoc-ideas.mdx +++ /dev/null @@ -1,331 +0,0 @@ ---- -title: GSoC '26 Ideas List -description: Google Summer of Code 2026 Project Ideas for Pycord -sidebar_position: 99 -sidebar_class_name: hidden ---- - -[shortcut link to the list](#project-ideas) - -## About Pycord - -**Pycord** is a modern, easy-to-use, feature-rich, and async-ready API wrapper for Discord. We empower developers to create powerful Discord bots and applications with an intuitive Python interface. - -- GitHub Organization: [Pycord-Development](https://github.com/Pycord-Development) -- Main Repository: [pycord](https://github.com/Pycord-Development/pycord) -- Documentation: [docs.pycord.dev](https://docs.pycord.dev) -- Guide: where you are right now! - ---- - -## GSoC 2026 Participation - -**This is Pycord's first year applying to participate in Google Summer of Code!** We're planning to accept **1 contributor** for summer 2026. - -## Getting Started - -Before applying, we strongly encourage you to: - -1. Join our community at [discord.gg/pycord](https://discord.gg/pycord) -2. Check out our repositories and get familiar with Pycord -3. Ask questions, discuss your ideas, and get feedback from our mentors and core developers -4. Review our [documentation](https://docs.pycord.dev) and [guide](https://guide.pycord.dev) - -## Contact & Communication - -- Our Discord Server [discord.gg/pycord](https://discord.gg/pycord) is our primary communication channel -- You can reach out by email at [admin@pycord.dev](mailto:admin@pycord.dev) - -When reaching out, please: - -- Introduce yourself and your background -- Mention which project(s) interest you **and why** -- Ask specific questions about the project scope or requirements -- Share any relevant experience, insight or ideas you have - -Mentorship note: Ideas list a primary mentor. Additional mentors may be assigned from the Pycord team based on project fit. - ---- - -## Project Ideas - -### 1. Guide Remake - -**Size:** Small (90 hours) or Medium (175 hours) - -**Difficulty:** Medium - -**Category:** Infrastructure - -**Mentor:** [Paillat](https://github.com/Paillat-dev) - -#### Description - -The current Pycord guide at [guide.pycord.dev](https://guide.pycord.dev) has accumulated technical debt and contains outdated content. We need a complete remake using modern web technologies to provide a good learning experience for new Pycord developers. - -This project involves both documentation and web development work. You'll be rebuilding the guide from the ground up with a modern tech stack while updating all tutorials and examples to reflect current Discord API features and Pycord best practices. - -The new guide should serve as the primary learning resource for developers new to Pycord, covering everything from basic bot setup to advanced features. - -#### Expected Outcomes - -- New guide website built with Astro framework and Tailwind CSS v4 -- Updated tutorials covering the latest Discord features and Pycord capabilities -- Modern, responsive design that works seamlessly across devices -- Beginner-friendly documentation - -#### Stretch Goals (Medium / 175h scope) - -- Full working code examples integrated and continuously synchronized from the core GitHub repository -- Video tutorials or animated examples for complex concepts -- Multi-language support or internationalization framework using Crowdin -- Advanced topics section covering best practices and optimization - -#### Skills Required/Preferred - -Non-negotiable: - -- Python (intermediate level) -- Technical writing and documentation skills -- Web development fundamentals (HTML, CSS, JavaScript) -- Basic understanding of Discord bots and the Discord API - -Preferred: - -- Experience with Astro framework -- Strong knowledge of Tailwind CSS -- Prior experience writing developer documentation -- Familiarity with Pycord or discord.py - -#### Resources - -- Current Guide: [guide.pycord.dev](https://guide.pycord.dev) -- Guide Repository: [github.com/Pycord-Development/guide](https://github.com/Pycord-Development/guide) -- Pycord Core: [github.com/Pycord-Development/pycord](https://github.com/Pycord-Development/pycord) -- Pycord Examples: [github.com/Pycord-Development/pycord/tree/master/examples](https://github.com/Pycord-Development/pycord/tree/master/examples) - ---- - -### 2. Pycord-next: The Future of Pycord - -**Size:** Medium (175 hours) or Large (350 hours) - -**Difficulty:** Hard - -**Category:** Core Development - -**Mentor:** [Paillat](https://github.com/Paillat-dev) - -#### Description - -Pycord-next is an ambitious ongoing refactor that aims to modernize and improve the core architecture of Pycord. This project is not about completing the entire refactor, but rather making meaningful, substantial contributions that push the project forward. - -As a contributor, you'll work closely with mentors and the core team to understand Pycord's internals, make architectural decisions, and implement changes that will shape the future of the library. This is a unique opportunity to have a lasting impact on a library used by thousands of Discord bot developers. - -Success in this project means demonstrating the ability to understand complex async Python codebases, make well-reasoned design decisions, and implement clean, well-typed, well-documented code. - -#### Expected Outcomes - -- Meaningful contributions to the pycord-next refactor following the project roadmap -- Well-documented code changes with comprehensive type annotations -- Participation in architectural discussions and decision-making -- Pull requests that advance specific areas of the refactor (models, gateway, HTTP client, etc.) -- Understanding and documentation of design decisions for future contributors - -Potential focus areas: - -- Model system refactoring -- Gateway connection handling improvements -- HTTP client modernization -- Type system improvements and full typing coverage - -#### Skills Required/Preferred - -Non-negotiable: - -- Advanced Python knowledge -- Strong understanding of async/await and asyncio -- Solid grasp of Object-Oriented Programming principles -- Experience with Python type hints and static typing -- Ability to read and understand large codebases - -Preferred: - -- Prior experience with Pycord or discord.py -- Understanding of the Discord API and WebSocket protocols -- Experience with API wrapper design patterns -- Familiarity with modern Python tooling (mypy, ruff, etc.) - -#### Important Note - -Applicants interested in this project should spend significant time exploring the Pycord codebase before applying. We expect candidates to demonstrate familiarity with the library's architecture in their proposals. - -#### Resources - -- Pycord-next Repository: [github.com/Pycord-Development/pycord-next](https://github.com/Pycord-Development/pycord-next) -- Main Pycord Repository: [github.com/Pycord-Development/pycord](https://github.com/Pycord-Development/pycord) -- Discord API Documentation: [discord.com/developers/docs](https://discord.com/developers/docs) - ---- - -### 3. Discord Bot Testing Framework - -**Size:** Medium (175 hours) or Large (350 hours) - -**Difficulty:** Hard - -**Category:** Infrastructure/Automation - -**Mentor:** [Paillat](https://github.com/Paillat-dev) - -#### Description - -Testing Discord bots is notoriously difficult because they rely on external services and real-time events. This project aims to create a comprehensive testing framework that allows developers to write reliable, reproducible tests for their Pycord bots. - -The framework should allow users to simulate Discord events, mock API responses, and verify bot behavior without needing a real Discord connection. This involves creating a new repository with the testing tools as well as potential contributions to Pycord core to ensure compatibility and testability. - -#### Expected Outcomes - -- A standalone testing library for Pycord bots (new repository) -- Event simulation system allowing developers to trigger customizable mock events -- Response verification tools to check bot outputs and API calls -- Mock Discord API client for offline testing -- Integration with popular Python testing frameworks (pytest) -- Comprehensive documentation and example test suites - -#### Stretch Goals (Large / 350h scope) - -- Integration testing tools for multi-bot scenarios -- Performance testing utilities -- CI/CD integration examples and GitHub Actions templates -- Contributions to Pycord core for improved testability - -#### Skills Required/Preferred - -Non-negotiable: - -- Advanced Python knowledge -- Experience with testing frameworks (pytest preferred) -- Understanding of mocking and test doubles -- Familiarity with async Python testing patterns - -Preferred: - -- Experience with Pycord or discord.py -- Knowledge of the Discord API structure -- Prior experience building testing tools or frameworks -- Understanding of CI/CD pipelines - -#### Resources - -- Pycord Repository: [github.com/Pycord-Development/pycord](https://github.com/Pycord-Development/pycord) -- pytest Documentation: [docs.pytest.org](https://docs.pytest.org) -- Discord API Documentation: [discord.com/developers/docs](https://discord.com/developers/docs) - ---- - -## Your Own Idea - -We welcome original project ideas! If you have a creative concept that uses or may improves Pycord in a meaningful way, we'd love to hear about it. - -Requirements for custom proposals: - -- Must use or otherwise be related to Pycord in a meaningful way -- Should be achievable within the GSoC timeframe (90-350 hours) -- Must have clear, measurable outcomes -- Needs to benefit the Pycord community or ecosystem - -Before submitting a custom idea: - -1. Join our Discord and discuss your idea with the community -2. Get feedback from and find potential mentors there -3. Refine your proposal based on community input (not limited to feedback from mentors) -4. Ensure scope is appropriate for GSoC - ---- - -## Application Process - -### How to Apply - -1. Familiarize yourself with Pycord and the project you're interested in -2. Join our Discord (mentioned above) and introduce yourself in the GSoC channel -3. Discuss your proposal with potential mentors before submitting -4. Submit your application - -### Application Template - -Your application should include: - -1. About You -- Name and contact information -- Educational background -- Relevant experience (coding, open source, Discord bots, etc.) -- Why you're interested in Pycord and GSoC - -2. Project Proposal -- Which project you're applying for and why -- Your understanding of the project goals -- Any unique approaches or ideas you'd bring to the project - -3. Technical Background -- Programming languages you know (especially Python) -- Relevant technologies (web frameworks, databases, etc.) -- Links to your code (GitHub, personal projects, etc.) -- Previous contributions to open source (if any) - -4. Availability -- Time commitment you can make (hours per week) -- Any known schedule conflicts during the coding period -- **Your timezone!** - -### Tips for Strong Applications - -- Don't wait until the last minute to reach out -- Show you understand the project and have concrete ideas -- Making a small contribution to Pycord before applying demonstrates commitment but is not a hard requirement -- Good communication is essential for remote mentorship -- Ask questions, we wouldd rather answer questions than receive an unclear proposal - ---- - -## General Information - -### What We're Looking For - -We value: - -- Clear communication and willingness to ask for help -- Self-motivated learning and problem-solving skills -- Community engagement and collaborative spirit -- Quality over quantity in code and documentation -- Passion for open source and helping other developers - -### Mentorship Style - -Our mentors will: - -- Provide regular feedback and guidance (minimum 3 hours per week) -- Help you navigate the codebase and community -- Review your work and suggest improvements -- Be available on Discord for questions -- Conduct weekly check-ins to track progress - -We expect contributors to: - -- Communicate proactively about progress and blockers -- Participate actively in the Pycord community -- Write clean, documented code following our style guidelines -- Be open to feedback and willing to iterate - ---- - -## Questions? - -If you have any questions about these projects or GSoC in general: - -- Join our Discord: [discord.gg/pycord](https://discord.gg/pycord) -- Email us at [admin@pycord.dev](mailto:admin@pycord.dev) -- Read more about GSoC [summerofcode.withgoogle.com](https://summerofcode.withgoogle.com/) - -We look forward to reading your applications! diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..06b8a6b6 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,176 @@ +--- +icon: lucide/rocket +--- + +# Get started + +For full documentation visit [zensical.org](https://zensical.org/docs/). + +## Commands + +- [`zensical new`][new] - Create a new project + +- [`zensical serve`][serve] - Start local web server + +- [`zensical build`][build] - Build your site + +## Examples + +### Admonitions + +> Go to [documentation](https://zensical.org/docs/authoring/admonitions/) + +!!! note + + This is a **note** admonition. Use it to provide helpful information. + +!!! warning + + This is a **warning** admonition. Be careful! + +### Details + +> Go to [documentation](https://zensical.org/docs/authoring/admonitions/#collapsible-blocks) + +??? info "Click to expand for more info" + + This content is hidden until you click to expand it. + Great for FAQs or long explanations. + +## Code Blocks + +> Go to [documentation](https://zensical.org/docs/authoring/code-blocks/) + +```python hl_lines="2" title="Code blocks" +def greet(name): + print(f"Hello, {name}!") # (1)! + + +greet("Python") +``` + +1. > Go to [documentation](https://zensical.org/docs/authoring/code-blocks/#code-annotations) + + Code annotations allow to attach notes to lines of code. + +Code can also be highlighted inline: `#!python print("Hello, Python!")`. + +## Content tabs + +> Go to [documentation](https://zensical.org/docs/authoring/content-tabs/) + +=== "Python" + + ```python + print("Hello from Python!") + ``` + +=== "Rust" + + ```rs + println!("Hello from Rust!"); + ``` + +## Diagrams + +> Go to [documentation](https://zensical.org/docs/authoring/diagrams/) + +```mermaid +graph LR + A[Start] --> B{Error?}; + B -->|Yes| C[Hmm...]; + C --> D[Debug]; + D --> B; + B ---->|No| E[Yay!]; +``` + +## Footnotes + +> Go to [documentation](https://zensical.org/docs/authoring/footnotes/) + +Here's a sentence with a footnote.[^1] + +Hover it, to see a tooltip. + +## Formatting + +> Go to [documentation](https://zensical.org/docs/authoring/formatting/) + +- ==This was marked (highlight)== +- ^^This was inserted (underline)^^ +- ~~This was deleted (strikethrough)~~ +- H~2~O +- A^T^A +- ++ctrl+alt+del++ + +## Icons, Emojis + +> Go to [documentation](https://zensical.org/docs/authoring/icons-emojis/) + +- :sparkles: `:sparkles:` +- :rocket: `:rocket:` +- :tada: `:tada:` +- :memo: `:memo:` +- :eyes: `:eyes:` + +## Maths + +> Go to [documentation](https://zensical.org/docs/authoring/math/) + +$$ +\cos x=\sum_{k=0}^{\infty}\frac{(-1)^k}{(2k)!}x^{2k} +$$ + +!!! warning "Needs configuration" + + Note that MathJax is included via a `script` tag on this page and is not + configured in the generated default configuration to avoid including it + in a pages that do not need it. See the documentation for details on how + to configure it on all your pages if they are more Maths-heavy than these + simple starter pages. + + + + + +## Task Lists + +> Go to [documentation](https://zensical.org/docs/authoring/lists/#using-task-lists) + +- [x] Install Zensical +- [x] Configure `zensical.toml` +- [x] Write amazing documentation +- [ ] Deploy anywhere + +## Tooltips + +> Go to [documentation](https://zensical.org/docs/authoring/tooltips/) + +[Hover me][example] + +[^1]: This is the footnote. + +[build]: https://zensical.org/docs/usage/build/ +[example]: https://example.com "I'm a tooltip!" +[new]: https://zensical.org/docs/usage/new/ +[serve]: https://zensical.org/docs/usage/preview/ diff --git a/docs/installation.mdx b/docs/installation.mdx deleted file mode 100644 index ea983675..00000000 --- a/docs/installation.mdx +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Installation -sidebar_position: 2 ---- - -Before you can start using Pycord, you need to install the library. - -:::note -Python **3.9 or above** is required to use Pycord. -::: - -:::tip -Before you start installing python packages globally, it's recommended you set up a virtual environment. -You can find instructions for that [here](More/virtual-environments). -::: - -## Fresh Installation - -To install Pycord, you can use the following command in your terminal: - -pip install py-cord - -:::tip -Remember that you need to install `py-cord`, not `pycord`. -Also, the `pip` command varies depending on your installation. For example, it might be `python3 -m pip` on macOS/Linux or `py3 -m pip` on some versions of Windows. -::: - -If you need voice support for your bot, you should run: - -pip install "py-cord\[voice]" - -## Migration - -### Updating Pycord - -If you are upgrading from a previous version of Pycord, you can use the following command in your terminal to upgrade to the latest version: - -pip install -U py-cord - -### Migrating from other libraries - -If you are migrating from another library, say, `discord.py`, first of all, you need to uninstall it. - -pip uninstall discord.py - -Then, you can install Pycord, it's as simple as that!: - -pip install py-cord - -:::caution -Uninstalling `discord.py` *after* installing `py-cord` can cause issues. Make sure to uninstall it first! -::: - -## Installing Other Builds - -### Development Build - -:::caution -The development build comes with cutting edge features and new functionality, but as it isn't a stable build you may encounter bugs. -::: - -To install the development build, you can use the following command in your terminal: - -pip install -U git+[https://github.com/Pycord-Development/pycord](https://github.com/Pycord-Development/pycord) - -:::important -Git is required to install this build. [Learn how you can install Git](./more/git). -::: diff --git a/docs/interactions/_category_.json b/docs/interactions/_category_.json deleted file mode 100644 index 986fb7a2..00000000 --- a/docs/interactions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 4, - "label": "Interactions" -} \ No newline at end of file diff --git a/docs/interactions/application-commands/_category_.json b/docs/interactions/application-commands/_category_.json deleted file mode 100644 index d523c407..00000000 --- a/docs/interactions/application-commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Application Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/docs/interactions/application-commands/context-menus.mdx b/docs/interactions/application-commands/context-menus.mdx deleted file mode 100644 index 1681c764..00000000 --- a/docs/interactions/application-commands/context-menus.mdx +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Context Menus -description: Learn all about Context Menus (User Commands & Message Commands) and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -When you right-click a message, you may see an option called "Apps". Hover over it, and you can see -commands a bot can run with that message. These are called message commands. - -When you right-click a user in the user list, you can once again see an option called "Apps". -Hover over it, and you can see commands a bot can run with that message. These are called user commands. - -Together, these two are called Context Menus or Context Menu Commands. These commands work very much like normal commands, except they take a member or message. - -:::note - -A bot can have up to 5 global Context Menus of each type. - -::: - -## User Commands - -Creating a user command is very simple. - -```python -@bot.user_command(name="Account Creation Date", guild_ids=[...]) # create a user command for the supplied guilds -async def account_creation_date(ctx, member: discord.Member): # user commands return the member - await ctx.respond(f"{member.name}'s account was created on {member.created_at}") -``` - - - -
- - Account Creation Date - -
- - {defaultOptions.profiles.bob.author}'s account was created on 2020-01-01 -
-
- -## Message Commands - -```python -@bot.message_command(name="Get Message ID") # creates a global message command. use guild_ids=[] to create guild-specific commands. -async def get_message_id(ctx, message: discord.Message): # message commands return the message - await ctx.respond(f"Message ID: `{message.id}`") -``` - - - - Do. Or do not. There is no try. - - - -
- - Get Message ID - -
- - Message ID: 930650407917748286 -
-
- -
- -:::info Related Topics - -* [Slash Commands](./slash-commands) -* [Interactions Index](../../interactions) - -::: diff --git a/docs/interactions/application-commands/localizations.mdx b/docs/interactions/application-commands/localizations.mdx deleted file mode 100644 index 620cc69d..00000000 --- a/docs/interactions/application-commands/localizations.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Localizations -description: Localizations are a way to make your bot more accessible to your users. Learn all about localizations now! ---- - -Localizations are a way to make your bot more accessible to your users. You can localize the command -name, the names of any arguments, and any text that is displayed to the user. - -## Syntax - -```python -@bot.slash_command( - name="ping", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - }, - options=[ - Option( - name="Example", - name_localizations={ - "en-GB": "British Example" - }, - description="Example option that does nothing", - description_localizations={ - "en-GB": "British example option that does nothing" - } - ) - ] -) -async def ping(ctx, example): - responses = {"en-US": "Pong!", - "en-GB": "British Pong!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -@bot.slash_command( - name="ping2", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - } -) -async def ping2(ctx, example: Option(str, "example", name_localizations={"en-GB": "British Example"}, description="Example option that does nothing", description_localizations={"en-GB": "British example option that does nothing"})): - responses = {"en-US": "Pong2!", - "en-GB": "British Pong2!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -``` - -* [`Locales`](https://discord.com/developers/docs/reference#locales) - List of valid locales recognized by Discord diff --git a/docs/interactions/application-commands/slash-commands.mdx b/docs/interactions/application-commands/slash-commands.mdx deleted file mode 100644 index e2669828..00000000 --- a/docs/interactions/application-commands/slash-commands.mdx +++ /dev/null @@ -1,295 +0,0 @@ ---- -title: Slash Commands -description: Learn all about Slash Commands and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On March 24, 2021, Discord added Slash Commands to Discord as an easier, more efficient, and better way of using bot commands. Pycord has implemented Slash Commands into the library, so it's simple, efficient, and familiar. - -:::important - -Remember that Slash Commands require your bot to be invited with the `application.commands` scope or Slash Commands will not show up. Bots already in the guild can simply be invited again with the scope; there is no need to kick the bot. - -::: - -## Syntax - -Let's create a simple Slash Command. - -```py -import discord - -bot = discord.Bot() - -# we need to limit the guilds for testing purposes -# so other users wouldn't see the command that we're testing - -@bot.command(description="Sends the bot's latency.") # this decorator makes a slash command -async def ping(ctx): # a slash command will be created with the name "ping" - await ctx.respond(f"Pong! Latency is {bot.latency}") - -bot.run("TOKEN") -``` - - - -
- - ping - -
- - Pong! Latency is 335ms. -
-
- -
- -Let's go through the code. - -First, we import Pycord's `discord` package. - -Next, we create a [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot) object and assign it to a variable `bot`. - -We then go ahead and use the [`@bot.command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.command) decorator, which registers a new Slash Command. We pass a `description` parameter to give a description to the Slash Command. We can also pass a `name` parameter to change the Slash Command's name. By default, the name of the Slash Command will be the name of the function, in this case, `/ping`. - -We create an async function called `ping` with parameters `ctx`, which, when called, sends the bot's ping/latency using [`ctx.respond`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext.respond). - -## Subcommand Groups - -You might want to group certain commands together to make them more organised. A command group is exactly what it sounds like, a group of individual Slash Commands together. - -In order to make a Slash Command group, you can use the `bot.create_group` function. - -```python -import discord - -bot = discord.Bot() - -# create Slash Command group with bot.create_group -greetings = bot.create_group("greetings", "Greet people") - -@greetings.command() -async def hello(ctx): - await ctx.respond(f"Hello, {ctx.author}!") - -@greetings.command() -async def bye(ctx): - await ctx.respond(f"Bye, {ctx.author}!") - -bot.run("TOKEN") -``` - -Or, you can instead manually make a `SlashCommandGroup` class like so: - -```python -import discord - -math = discord.SlashCommandGroup("math", "Math related commands") - -@math.command() -async def add(ctx, num1: int, num2: int): - sum = num1 + num2 - await ctx.respond(f"{num1} plus {num2} is {sum}.") - -@math.command() -async def subtract(ctx, num1: int, num2: int): - sum = num1 - num2 - await ctx.respond(f"{num1} minus {num2} is {sum}.") - -# you'll have to manually add the manually created Slash Command group -bot.add_application_command(math) -``` - -Here's what the registered subcommands will look like in the Slash Command Menu: - -![Picture of the subcommands in the Slash Command Menu](../../assets/interactions/groups-and-subcommands.jpg) - -You'll notice that there's the name of the Slash Command Group and then the name of the subcommand separated by a space. - -::: - -:::info Cogs - -If you are looking to add Slash Command Groups to cogs, please look at our [Cogs page](../../popular-topics/cogs)! - -::: - -## Sub-groups - -We've made a subcommand group, but did you know that you could create a group inside another? - -```python -from discord import SlashCommandGroup -from math import sqrt - -math = SlashCommandGroup("math", "Math related commands") -advanced = math.create_subgroup("advanced", "Advanced math commands") - -@advanced.command() -async def square_root(ctx, x: int): - await ctx.respond(sqrt(x)) - -bot.add_application_command(math) -``` - -The command created above can be invoked by typing `/math advanced square_root`. - -## Options & Option Types - -Whenever you're using Slash Commands, you might notice that you can specify parameters that the user has to set or can optionally set. These are called Options. - -Options can also include a description to provide more information. [You can learn more about Options in our documentation!](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.Option) - -Since you want different inputs from Options, you'll have to specify the type for that Option; there are a few ways of doing this. - - - - You could use Type Annotations and let Pycord figure out the option type or explicitly specified using the [`SlashCommandOptionType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.SlashCommandOptionType) enum. - - ```python - import discord - - bot = discord.Bot() - - @bot.command() - # pycord will figure out the types for you - async def add(ctx, first: discord.Option(int), second: discord.Option(int)): - # you can use them as they were actual integers - sum = first + second - await ctx.respond(f"The sum of {first} and {second} is {sum}.") - - @bot.command() - # this explicitly tells pycord what types the options are instead - async def join( - ctx, - first: discord.Option(discord.SlashCommandOptionType.string), - second: discord.Option(discord.SlashCommandOptionType.string) - ): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - - bot.run("TOKEN") - ``` - - - -
- - add - -
- - The sum of 1 and 1 is 2. -
- - -
- - join - -
- - When you join "Py" and "cord", you get: "Pycord". -
-
-
- - - Instead of Type Annotations, you can also use the option decorator. This is usually done to have type-hinting. - - ```python title="Slash Command Type" - import discord - - bot = discord.Bot() - - @bot.command() - @discord.option("first", type=discord.SlashCommandOptionType.string) # type = str also works - @discord.option("second", type=discord.SlashCommandOptionType.string) # type = str also works - async def join( - ctx, - first: str, - second: str, - ): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - - bot.run("TOKEN") - ``` - - - -
- - join - -
- - When you join "Py" and "cord", you get: "Pycord". -
-
-
-
- -## Autocomplete - -Discord's autocomplete allows developers to determine option choices that are used in a slash command option. You can do this by defining a function: - -```py -async def get_animal_types(ctx: discord.AutocompleteContext): - """ - Here we will check if 'ctx.options['animal_type']' is a marine or land animal and return respective option choices - """ - animal_type = ctx.options['animal_type'] - if animal_type == 'Marine': - return ['Whale', 'Shark', 'Fish', 'Octopus', 'Turtle'] - else: # is land animal - return ['Snake', 'Wolf', 'Lizard', 'Lion', 'Bird'] - -@bot.slash_command(name="animal") -async def animal_command( - ctx: discord.ApplicationContext, - animal_type: discord.Option(str, choices=['Marine', 'Land']), - animal: discord.Option(str, autocomplete=discord.utils.basic_autocomplete(get_animal_types)) -): - await ctx.respond(f'You picked an animal type of `{animal_type}` that led you to pick `{animal}`!') -``` - - - -
- - animal - -
- - You picked an animal type of Marine that led you to pick Shark! -
-
- -:::warning - -Autocomplete can **only** be used with slash commands. - -::: - -:::info Related Topics - -* [Interactions Index](../../interactions) -* [Rules and Common Practices](../../getting-started/rules-and-common-practices) -* [Cogs](../../popular-topics/cogs) - -::: diff --git a/docs/interactions/index.mdx b/docs/interactions/index.mdx deleted file mode 100644 index 1c962ae3..00000000 --- a/docs/interactions/index.mdx +++ /dev/null @@ -1,251 +0,0 @@ ---- -title: Discord Interactions ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -In December 2020, Discord released their first Interaction: the -[Slash Command](https://discord.com/developers/docs/interactions/application-commands#slash-commands). -Since then, Discord has added many types of Interactions, including: - -[**Application Commands**](https://discord.com/developers/docs/interactions/application-commands) - -* [**Slash Commands**](https://discord.com/developers/docs/interactions/application-commands#slash-commands): - Commands that can be used with the `/` prefix. -* **Context Menu Commands**: Commands that can be used from the right-click menu. - * [**User Commands**](https://discord.com/developers/docs/interactions/application-commands#user-commands): - Commands that can be used on a user by alt-clicking/selecting them. - * [**Message Commands**](https://discord.com/developers/docs/interactions/application-commands#message-commands): - Commands that can be used on a message by alt-clicking/selecting it. - -[**UI Components**](https://discord.com/developers/docs/interactions/message-components) - -* [**Buttons**](https://discord.com/developers/docs/interactions/message-components#buttons): - Buttons are attached to a message and can be clicked on to perform an action. -* [**Select Menus**](https://discord.com/developers/docs/interactions/message-components#select-menus): - Drop-down menus are used to select a number of options from a list. -* [**Modals**](https://discord.com/developers/docs/interactions/message-components#text-inputs): - Form-like modals can be used to ask for input from a user. - -## Application Commands - -Application Commands are another set of new features that are intended to avoid compromising users' safety and privacy. -They're relatively easy to add to your bot, and give people a simpler and safer way to use commands. - -### [Slash Commands](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.SlashCommand) - -Slash Commands were the first Interaction added to Discord. They're easy to use and create, and -is the only prefix commands alternative that does not need Message Content intent. - -:::note - -Preferring prefix commands over Application Commands is **not** a valid reason to apply for the -Message Content intent. Using that as a reason will get your application denied. - -::: - - - -
- - ping - -
- - Pong! Latency is 335ms. -
-
- -
- -This is what a Slash Command looks like. Not too different from a prefix command, -apart from the note telling you who invoked it. A Slash Command's fields can accept any of the following: - -* Members -* Roles -* Channels -* Attachments -* Text - -Just about as good as it gets. - -### [Message](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.MessageCommand) and [User](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.UserCommand) Commands - -Message Commands and User Commands were both introduced at around the same time, and are very similar to each other, so we'll be -introducing them together. These commands can be found in the `Apps` tab when alt-clicking. The only difference between the two is that -Message Commands only appear in the `Apps` tab of a message, while User Commands are found in the `Apps` tab of a user. Message Commands -can be used to quickly report a message, warn a user for a message, and other functions. Likewise, User Commands can be used to add a -user to a ticket, warn a user, and more. - -Here's an example of a Message Command: - - - - Hello World! - - - -
- - Reverse Message - -
- - Message 930650407917748286 reversed is "!dlroW olleH" -
-
- -
- -And here's an example of a User Command: - - - - {defaultOptions.profiles.dorukyum.author} has been on Discord for a long time - - - -
- - User Age - -
- - {defaultOptions.profiles.dorukyum.author} is 1 week old. -
- - -
- - User Age - -
- - {defaultOptions.profiles.bob.author} is 40 years old. -
- - - 🤔 - -
- -
- -Pretty cool, right? To learn more about these two, please read the [Context Menus guide](./application-commands/context-menus.mdx). - -## [Application Commands](#application-commands) vs. [Prefix Commands](../extensions/commands/prefixed-commands) - -Ever since Discord was created, apps on it have used prefix commands. Using prefixes meant that you would have to put a -certain character (or string of characters) in front of your command, such as the exclamation mark in `!ping`. The way this -worked was that your bot would listen for messages, pick out the ones that had their specific prefix, and then respond to the command. -Now, Discord is encouraging developers to switch their bots over to Application Commands, which is a new system meant to preserve the -privacy and safety of their users. But why exactly is Discord making us switch? What's the better option, Application Commands or prefix -commands? Below, we'll discuss everything you need to know. - -### Discord's Decision - -Application Commands were conceptualized partly due to privacy concerns. When Discord first began, they weren't entirely concerned about bots -having access to the content of every message that was being sent. However, as Discord grew, this became more of a problem. Hypothetically, bots -could simply log every message they're able to receive via the Discord API and hand their contents over to a company or other third party. This is -a problem, since that data is meant to be used only by Discord. As such, they locked down Message Content, and introduced Application Commands for -bot developers to use instead. - -Prefix commands work by reading messages, as described before. Application Commands, however, don't -work this way; instead, they work by having your bot get information from Discord about when a command was used. This way, Discord can limit -Message Content only to bots that *absolutely* depend on it, such as auto-moderation bots. - -### Who has to Use Application Commands - -Any verified bot that does not have the Message Content intent must use Application Commands. Discord is allowing developers to submit -applications for the ability to use the intent; however, since they don't want to keep supporting prefix commands due to privacy concerns, -they will automatically decline any application that includes only that as a reason. So, if your bot doesn't have an auto-moderation feature -(or any other functionality that requires Message Content), you're out of luck. - -Unverified bots, however, don't have to use Application Commands. This is because the Message Content intent is a `Privileged Intent`, meaning that -it must be applied for only if your bot is verified or about to be verified. Unverified bots don't have to apply for Privileged Intents, so they can -use them freely. - -So, if your bot is made only for a couple of servers, you can choose between prefix commands and Application Commands. However, if you plan on expanding -your bot's reach, it'll have to use Application Commands. - -### What's the Better Option - -Choosing which is the better option is up to you, if you're starting small. If -you plan on growing your bot, however, you will have to use Application Commands. Since prefix commands are slowly being phased out by Discord, -there isn't much of a choice for developers of larger bots. - -## Message Components - -Message Components are fairly new features in Discord, allowing developers to give their bots a fast -and understandable user interface. Message Components are easy to use and make your bot look modern, -sleek, and downright awesome. - -### [Views](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View) - -Views are not an Application Command nor are they a Message Component. Views are the invisible placeholders, or grid, -that Message Components lie in. Views can have up to 5 [`Action Rows`](https://docs.pycord.dev/en/stable/api/models.html#discord.ActionRow), -and Action Rows can have a maximum of 5 slots. Below, you can find a table showing how many slots a Message Interaction takes up. - -| Component | Slots | -| ------------ | ---------------------------- | -| Buttons | 1 Slot | -| Select Menus | 5 Slots | -| Text Modals | 1 Slot (opened via a Button) | - -So, based on this, you could have a maximum of 25 Buttons in a View with no Select Menus, and 5 Select -Menus in a View with no Buttons. This doesn't mean you can't have them both in a View, however. You can have -a combination of them, such as 20 Buttons and a Select Menu or 10 Buttons and 3 Select Menus. - -### [Buttons](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button) - -Buttons are the first of the Message Components. They allow for quick responses to prompts, such as for canceling or continuing an action. -Of course, these aren't their only uses; people have created awesome things with Buttons, such as calculators, games, and more! - - - - Discord Buttons are awesome! - -
- - Click me! - -
-
-
- -
- -This is what a Button looks like, very simple and modern. To learn more about Buttons, refer to our -[Buttons page](./ui-components/buttons.mdx). - -### [Select Menus](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Select) - -Select Menus are the second of Discord's Message Components. They allow users to select from a list of choices, which your bot can then use. -Select Menus are good for things such as choosing features, pages of a help menu, and more. - -![Select Menu Example Image](../assets/interactions/select-menus-example.png) - -This is what a Select Menu looks like. While not looking as good as Buttons, they still look great -and have even greater possibilities. To learn more about Select Menus, please refer to our [Select -Menus page](./ui-components/dropdowns.mdx). - -### [Modal Dialogs](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal) - -Text Modals are the most recently added Message Component in Discord. They're useful for text input and filling out forms, such as a -sign-up for your bot's service. These are meant to replace long bot setup processes by allowing users to fill out multiple text fields, -which avoids having the user send multiple messages for the bot. Modals can be accessed by either invoking an Application Command or by -interacting with another UI Component. - -![Text Modal Example Image](../assets/interactions/modal-example.png) - -This is what a Text Modal looks like, easy to use and one of the most useful Message Components yet. To learn more about Text Modals, -please visit our [Modal Dialogs page](./ui-components/modal-dialogs.mdx). diff --git a/docs/interactions/ui-components/_category_.json b/docs/interactions/ui-components/_category_.json deleted file mode 100644 index 53ba623e..00000000 --- a/docs/interactions/ui-components/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "UI Components", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/docs/interactions/ui-components/buttons.mdx b/docs/interactions/ui-components/buttons.mdx deleted file mode 100644 index 3e9e039f..00000000 --- a/docs/interactions/ui-components/buttons.mdx +++ /dev/null @@ -1,307 +0,0 @@ ---- -title: Buttons -description: Learn all about implementing buttons in your Discord Bot using Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On May 26, 2021, Discord added a new interaction called buttons. Instead of reactions, bots could now -send buttons and users could use them to interact with bots. This opened up a whole new world of -possibilities for bots. Soon after, developers made calculators, polls, and games like blackjack, UNO, -and even Minecraft! Buttons provided a clear and easy to use interface for interacting with bots. - -So, let's learn how you can add buttons to your bot! - -## Concept - -Buttons weren't the only update to the interactions system in Discord. Discord also added [Select Menus](./dropdowns) and [Modal Dialogs](./modal-dialogs), both of which work very similarly to buttons. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive button. - -```python -import discord - -bot = discord.Bot() # Create a bot object - -class MyView(discord.ui.View): # Create a class called MyView that subclasses discord.ui.View - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.primary, emoji="😎") # Create a button with the label "😎 Click me!" with color Blurple - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") # Send a message when the button is clicked - -@bot.slash_command() # Create a slash command -async def button(ctx): - await ctx.respond("This is a button!", view=MyView()) # Send a message with our View class that contains the button - -bot.run("TOKEN") # Run the bot -``` - -Using this command should return the following message: - - - -
- - button - -
- - This is a button! - -
- - Click me! - -
-
-
- -
- -As you can see, we create a class called `MyView` that [subclasses](#oop) -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `button_callback` to the `MyView` class with the decorator -[`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button). -This decorator adds a button to a component. This function takes two arguments: the button that was -clicked and the interaction. These arguments are passed to the function when the button is clicked -by the module. We use the [`interaction.response.send_message`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse.send_message) -function to send a message to the channel where the interaction was sent. - -Finally, we create a global slash command called `button` that sends the message, along with the view -that contains a button. - -This is the basic syntax of creating a button. What you create with it is up to you. You can worry -about making your button do amazing things, while Pycord handles the rest! - -## Button Styles - -| Name | Usage | Color | -| --------- | ----------------------------------------------------------------------------------------- | ------- | -| Primary | `discord.ButtonStyle.primary` / `discord.ButtonStyle.blurple` | Blurple | -| Secondary | `discord.ButtonStyle.secondary` / `discord.ButtonStyle.grey` / `discord.ButtonStyle.gray` | Grey | -| Success | `discord.ButtonStyle.success` / `discord.ButtonStyle.green` | Green | -| Danger | `discord.ButtonStyle.danger` / `discord.ButtonStyle.red` | Red | -| Link | `discord.ButtonStyle.link` / `discord.ButtonStyle.url` | Grey | - -Check out the [`discord.ButtonStyle`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ButtonStyle) class for more information. - -![Different Button Styles](../../assets/interactions/button-styles.png) - -You can set a button's style by adding the `style` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) decorator. - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.success) - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots, and each button takes up 1 slot. -So, how do we move the buttons to another row? - -This can be done by specifying the `row` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) -decorator. - -:::info The `row` argument - -The row argument specifies the relative row this button belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=1, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") -``` - -## Disabling Buttons - -### Pre-Disabled Buttons - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary, disabled=True) # pass `disabled=True` to make the button pre-disabled - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView()) -``` - -### Disabling Buttons on Press - - - - ```python - class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - button.disabled = True # set button.disabled to True to disable the button - button.label = "No more pressing!" # change the button's label to something else - await interaction.response.edit_message(view=self) # edit the message's view - ``` - - - - ```python - class MyView(discord.ui.View): - @discord.ui.button(emoji="😀", label="Button 1", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) - - @discord.ui.button(label="Button 2", style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) - ``` - - - -## Timeouts - -Sometimes, you want to have a button that is disabled after a certain amount of time. This is where timeouts come in. - - - - ```python - class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... - - @bot.command() - async def button(ctx): - await ctx.send("Press the button!", view=MyView(timeout=30)) - ``` - - - - ```python - class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... - ``` - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a button that is disabled after a certain amount of time, you want to have a -button that is always working. - -Normally, when the bot goes offline, all of its buttons stop working. You will be able to see the -buttons, but nothing will happen when you press them. This is a problem -if you are trying to create a self-role system with buttons, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons will stop working. When the bot comes back online, however, the buttons will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view must have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.button(label="A button", custom_id="button-1", style=discord.ButtonStyle.primary, emoji="😎") # the button has a custom_id set - async def button_callback(self, button, interaction): - await interaction.response.send_message("Button was pressed", ephemeral=True) - -@bot.command() -async def button(ctx): - await ctx.send(f"Press the button! View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many buttons can I have in a message? - -Each message can have a maximum of 25 buttons. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -* [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -* [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do buttons need any special permissions? - -No new permissions are needed for either the bot or the server to allow bots to use buttons. - -#### Should I replace reactions with buttons for my bot? - -That is up to you. Buttons do provide a cleaner interface for your bot and are easier to use. - -:::info Related Topics - -* [Slash Commands](../application-commands/slash-commands) -* [Interactions Index](../../interactions) - -::: diff --git a/docs/interactions/ui-components/dropdowns.mdx b/docs/interactions/ui-components/dropdowns.mdx deleted file mode 100644 index 12f0ac4f..00000000 --- a/docs/interactions/ui-components/dropdowns.mdx +++ /dev/null @@ -1,330 +0,0 @@ ---- -title: Select Menus -description: Learn all about implementing Select Menus or Dropdowns in your Discord Bot with Pycord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Shortly after the buttons were added, Discord added their second message component: Select Menus. Select Menus allow users to choose from a list of items sent by a bot. These are a great substitute for having a user send a number that corresponds to an option. You can even allow users to select multiple options from the Select Menus. This guide will show you the easy and painless ways of using them with Pycord. - -## Concept - -Select Menus aren't the only message component in Discord. There's also [Buttons](./buttons) and [Modal Dialogs](./modal-dialogs). Select Menus make it easy for users to pick one or multiple options from a list provided by a bot. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive select menu. - -```python -import discord - -bot = discord.Bot() - -class MyView(discord.ui.View): - @discord.ui.select( # the decorator that lets you specify the properties of the select menu - placeholder = "Choose a Flavor!", # the placeholder text that will be displayed if nothing is selected - min_values = 1, # the minimum number of values that must be selected by the users - max_values = 1, # the maximum number of values that can be selected by the users - options = [ # the list of options from which users can choose, a required field - discord.SelectOption( - label="Vanilla", - description="Pick this if you like vanilla!" - ), - discord.SelectOption( - label="Chocolate", - description="Pick this if you like chocolate!" - ), - discord.SelectOption( - label="Strawberry", - description="Pick this if you like strawberry!" - ) - ] - ) - async def select_callback(self, select, interaction): # the function called when the user is done selecting options - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") - -@bot.command() -async def flavor(ctx): - await ctx.respond("Choose a flavor!", view=MyView()) - -bot.run("TOKEN") -``` - -There's a lot going on over here! Don't worry, we will go over the code and explain it. - -As you can see, we create a class called `MyView` that subclasses -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `select_callback` to the `View` class with the decorator -[`discord.ui.select`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.select). -This decorator adds a select menu to the view. This decorator takes a few arguments to customize your select menu. Read them in the [Customization section](#customization). - -That was the decorator. Now, the function itself is pretty simple. It takes two parameters, not including `self`. The parameters are `select`: The select menu, and `interaction`: a [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object. Both of these are passed by Pycord, so you just need to specify them in the function! - -In the callback, you could do anything you want. You get the two parameters `select` and `interaction` to play around with. Here, we send a message using `await interaction.response.send_message` (where interaction is [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse)) with content `select.values[0]`, which sends the label of the first/only option the user selected. Obviously, this is only an example, and you could do just about anything you want. - -Finally, we create a global slash command called `flavour` that sends a message "Choose a flavor!" along with the view -that contains our select menu. - -This is the basic syntax of creating a select menu. What you create with it is up to you. You can worry -about making your code do amazing things, while Pycord handles the rest! - -## Customization - -#### Select Menu Properties - -* `select_type`: The type of select to create. This must be a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. -* `channel_types`: A list of channel types that can be selected in the menu. This is only valid for selects of `select_type` [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType). -* `options`: A list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. These are the options that can be selected in this menu. -* `placeholder` is the placeholder text shown in the select menu if no option is selected. -* `custom_id`: The ID of the select menu that gets received during an interaction. It is recommended not to set this to anything unless you are trying to create a persistent view. -* `row`: The relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). -* `min_values`: The minimum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -* `max_values`: The maximum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -* `disabled`: Whether the select is disabled or not. Defaults to False. - -#### Select Option Properties - -In the `options` parameter, you pass a list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. This class also has a few parameters: - -* `default` (whether the option is selected by default) -* `description` (an additional description, if any) -* `emoji` (a string or an emoji object, if any) -* `label` (the name displayed to users, can be up to 100 characters) -* `value` (a special value of the option, defaults to the label). - -## Select Types - -In addition to regular string selects, you can also have your select menu contain users, roles, mentionables, and channels as its options. You can use these alternative select types by passing a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value for the `select_type` parameter when creating the Select. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.user_select - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -Additionally, you can use shortcut decorators to create a [`discord.ui.Select`](https://docs.pycord.dev/en/master/api/ui_kit.html#discord.ui.select) with a predetermined [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. Using a shortcut decorator, the above code can be rewritten like this: - -```python -class MyView(discord.ui.View): - @discord.ui.user_select() - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -### Specifying Channel Types - -When using a [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType.channel_select) type select menu, you can pass in a list of [`discord.ChannelType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ChannelType) values to limit which types of channels users can choose when interacting with the select menu. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.channel_select, - channel_types=[discord.ChannelType.text, discord.ChannelType.voice] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"You selected {select.values[0].mention}") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots. A button takes a single slot, while a select menu takes up all 5 of them. This means a view can have a maximum of 5 select menus, or any possible combination of select menus and buttons. - -The arrangement of buttons and select menus is generally adjusted by Pycord. However, it is possible to move them to specific relative rows. This is done by specifying the `row` argument. - -:::info The `row` argument - -The row argument specifies the relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero-indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=0, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.select( - row = 1, - options = [...] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") -``` - -## Disabling Select Menus - -### Pre-Disabled Menus - -```python -class MyView(discord.ui.View): - @discord.ui.select( - disabled = True, # pass disabled=True to set the menu as disabled - options = [...] - ) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send("Select and option from the menu!", view=MyView()) -``` - -### Disabling Menus on Press - - - - ```python - class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - select.disabled = True # set the status of the select as disabled - await interaction.response.edit_message(view=self) # edit the message to show the changes - ``` - - - - ```python - class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def first_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) # edit the message to show the changes - - @discord.ui.select(options = [...]) - async def second_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) - ``` - - - -## Timeouts - -You may want a select menu to automatically stop working after a certain amount of time. This is where timeouts come in. - - - - ```python - class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... - - @bot.command() - async def select(ctx): - await ctx.send(view=MyView(timeout=30)) # specify the timeout here - ``` - - - - ```python - class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... - ``` - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a select menu that is disabled after a certain amount of time, you want to have a -select menu that is always working. - -Normally, when the bot goes offline, all of its views stop working, even if they don't have a timeout. You will be able to see the -views, but nothing will happen when you try to interact with them. This is a problem -if you are trying to create a self-role system, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons and select menus will stop working. However, when the bot comes back online, the buttons and select menus will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view much have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.select(custom_id="select-1", options = [...]) # a custom_id must be set - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send(f"View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many select menus can I have in a message? - -Each message can have a maximum of 5 select menus. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -* [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -* [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do select menus need any special permissions? - -No new permissions are needed in the bot or in the server. - -:::info Related Topics - -* [Slash Commands](../application-commands/slash-commands) -* [Interactions Index](../../interactions) - -::: diff --git a/docs/interactions/ui-components/modal-dialogs.mdx b/docs/interactions/ui-components/modal-dialogs.mdx deleted file mode 100644 index 8d377dd7..00000000 --- a/docs/interactions/ui-components/modal-dialogs.mdx +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Modal Dialogs -description: Learn how you can implement Modals in your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Modal Dialogs, also known as "modals", provide a form-like structure for bots to receive input from users. No extra permissions are needed for bots to send modal dialogs, so it becomes a convenient workaround for bots to receive longer input without needing the Message Content [intent](../../popular-topics/intents). - -## Concept - -Modal Dialogs consist of a title, custom ID, and up to 5 [`discord.ui.InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) components. While creating modals, we generally subclass [`discord.ui.Modal`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal), as we'll see later. - -Unlike other UI Components, Modals cannot be sent with messages. They must be invoked by an Application Command or another UI Component. - -## Usage Syntax - -```py -class MyModal(discord.ui.Modal): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - self.add_item(discord.ui.InputText(label="Short Input")) - self.add_item(discord.ui.InputText(label="Long Input", style=discord.InputTextStyle.long)) - - async def callback(self, interaction: discord.Interaction): - embed = discord.Embed(title="Modal Results") - embed.add_field(name="Short Input", value=self.children[0].value) - embed.add_field(name="Long Input", value=self.children[1].value) - await interaction.response.send_message(embeds=[embed]) -``` - - - - The `ctx` parameter we define in Application Commands receives an [`ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext) object. Using its `send_modal()` coroutine, you can send a Modal dialog to the user invoking the Application Command. - - ```py - @bot.slash_command() - async def modal_slash(ctx: discord.ApplicationContext): - """Shows an example of a modal dialog being invoked from a slash command.""" - modal = MyModal(title="Modal via Slash Command") - await ctx.send_modal(modal) - ``` - - - - The `interaction` parameter we define in UI Components receives an [`Interaction`](https://docs.pycord.dev/en/stable/api/models.html#discord.Interaction) object. The `response` attribute of the object contains an [`InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object, with various coroutines such as `send_message()` and `send_modal()`, which we utilize. - - ```py - class MyView(discord.ui.View): - @discord.ui.button(label="Send Modal") - async def button_callback(self, button, interaction): - await interaction.response.send_modal(MyModal(title="Modal via Button")) - - @bot.slash_command() - async def send_modal(ctx): - await ctx.respond(view=MyView()) - ``` - - - -The above example uses an embed to display the results of the modal submission, but you can do anything you want with the text provided by the user. -Each input field can be accessed in the order it was added to the modal dialog, via `Modal.children`. - -## Customization - -A Modal can have up to 5 [`InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) fields. These fields offer some customization. - -Each field has a label which is shown to the user. This is defined with `label`. - -The `style` parameter is used to determine whether it should be a short (single-line) or long (multi-line) input field. - -There are a number of aliases that can be used: - -```x title="Single-line InputTextStyle values:" -short -singleline -``` - -```x title="Multi-line InputTextStyle values:" -paragraph = 2 -multiline = 2 -long = 2 -``` - -:::info Related Topics - -* [Slash Commands](../application-commands/slash-commands) -* [Buttons](./buttons) -* [Interactions Index](../../interactions) - -::: diff --git a/docs/introduction.mdx b/docs/introduction.mdx deleted file mode 100644 index 547d83a2..00000000 --- a/docs/introduction.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Introduction -description: Pycord Guide is a complete guide for Pycord. Learn how to create Discord Bots today! -sidebar_position: 1 ---- - -Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord, written in Python. Pycord is a maintained fork of [discord.py](https://github.com/Rapptz/discord.py). - -## Before you begin - -Pycord is an advanced and complex Python library. To take advantage of the full capabilities of Pycord, you will need to have a good understanding of Python. You should know the basics of Python and have an understanding of the following concepts: - -* Variables -* Data Types -* Functions -* Packages -* Conditionals -* Loops -* Classes -* Object-Oriented Programming -* Inheritance -* Exception Handling -* Iterators -* Coroutines -* Async/Await - -This list is not exhaustive, but it should give you a good idea of what you need to know to get started. - -When you see an ellipsis - that's the three dots - in this guide, it is a placeholder for code that you need to fill in. Sometimes, it may be code for a command, while other times it could be something simple like a Guild ID. Make sure to replace them before running your bot! - -## Learning Resources - -Here are some good resources to get started or to freshen up your Python knowledge: - -* [Official Beginner's Guide](https://wiki.python.org/moin/BeginnersGuide) -* [Official Tutorial](https://docs.python.org/3/tutorial/) -* [Automate the Boring Stuff, a free online book for complete beginners to programming](https://automatetheboringstuff.com/) -* [Learn Python in y Minutes, complete cheat sheet for people who know programming already](https://learnxinyminutes.com/docs/python3/) -* [Swaroopch's free Python book](http://python.swaroopch.com/) -* [Codeabbey, exercises for beginners](http://www.codeabbey.com/) - -## Credits - -First of all, we would like to thank [Rapptz](https://github.com/Rapptz) for the original [discord.py](https://pypi.org/project/discord.py) library. Pycord is a maintained fork of this library. - -We would also like to thank the [discord.js guide](https://discordjs.guide), which inspired this guide style-wise, and the now defunct [original Pycord Guide](https://web.archive.org/web/20220813041929/https://namantech.me/pycord/), which inspired some content in this guide. - -We created this guide using [Docusaurus v2](https://docusaurus.io), a modern static site generator for React. We would also like to thank Danktuary for his [`@discord-message-components/react`](https://www.npmjs.com/package/@discord-message-components/react) package, from which we took the Discord message components. - -And finally, we would like to thank the amazing and loving community of Pycord users, contributors and developers. diff --git a/docs/markdown.md b/docs/markdown.md new file mode 100644 index 00000000..94e3b5a3 --- /dev/null +++ b/docs/markdown.md @@ -0,0 +1,111 @@ +--- +icon: simple/markdown +--- + +# Markdown in 5min + +## Headers + +``` +# H1 Header +## H2 Header +### H3 Header +#### H4 Header +##### H5 Header +###### H6 Header +``` + +## Text formatting + +``` +**bold text** +*italic text* +***bold and italic*** +~~strikethrough~~ +`inline code` +``` + +## Links and images + +``` +[Link text](https://example.com) +[Link with title](https://example.com "Hover title") +![Alt text](image.jpg) +![Image with title](image.jpg "Image title") +``` + +## Lists + +``` +Unordered: + +- Item 1 +- Item 2 + - Nested item + +Ordered: + +1. First item +2. Second item +3. Third item +``` + +## Blockquotes + +``` +> This is a blockquote +> Multiple lines +>> Nested quote +``` + +## Code blocks + +```` +```javascript +function hello() { + console.log("Hello, world!"); +} +``` +```` + +## Tables + +``` +| Header 1 | Header 2 | Header 3 | +|----------|----------|----------| +| Row 1 | Data | Data | +| Row 2 | Data | Data | +``` + +## Horizontal rule + +``` +--- +or +*** +or +___ +``` + +## Task lists + +``` +- [x] Completed task +- [ ] Incomplete task +- [ ] Another task +``` + +## Escaping characters + +``` +Use backslash to escape: \* \_ \# \` +``` + +## Line breaks + +``` +End a line with two spaces +to create a line break. + +Or use a blank line for a new paragraph. +``` diff --git a/docs/more/_category_.json b/docs/more/_category_.json deleted file mode 100644 index a8601729..00000000 --- a/docs/more/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 8, - "label": "More", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/docs/more/community-resources.mdx b/docs/more/community-resources.mdx deleted file mode 100644 index ed3075bd..00000000 --- a/docs/more/community-resources.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Community Resources ---- - -This page showcases the amazing things created by the Pycord community, including bots, Plugins, and more. - -## Plugins - -| Name | Type | GitHub | -| --------------- | ------------ | --------------------------------------------------------------- | -| Music Cord | Music | [NixonXC/cord-music](https://github.com/NixonXC/cord-music) | -| pycord-i18n | Localization | [Dorukyum-pycord-i18n](https://github.com/Dorukyum/pycord-i18n) | -| pycord-multicog | Cogs | [pycord-multicog](https://github.com/Dorukyum/pycord-multicog) | -| EzCord | Utilities | [EzCord](https://github.com/tibue99/ezcord) | - -## Bots - -| Name | Type | Link | -| ------------------------ | ------------ | ----------------------------------------------------------------------------------- | -| Discord-Multipurpose-Bot | Multipurpose | [github](https://github.com/pogrammar/Discord-multipurpose-bot/tree/master/Python) | -| inconnu | Fun & QOL | [github](https://github.com/tiltowait/inconnu) | -| Mai | Multipurpose | [github](https://github.com/TeamMai/Mai) & [website](https://xfghoul.github.io/Mai) | -| Toolkit | Multipurpose | [github](https://github.com/Dorukyum/Toolkit) | diff --git a/docs/more/contributing.mdx b/docs/more/contributing.mdx deleted file mode 100644 index 81b84777..00000000 --- a/docs/more/contributing.mdx +++ /dev/null @@ -1,464 +0,0 @@ ---- -title: Contributing to the Guide -description: Learn how to contribute to the Pycord Guide. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -This page outlines some of the basic syntax you need to know to contribute to the guide. We recommend you also check out: - -* [Docusaurus's Docs](https://docusaurus.io/docs/) -* [Contributing Rules](https://github.com/Pycord-Development/guide/blob/master/.github/CONTRIBUTING.md) - -## Info - -We use [Docusaurus v2](https://docusaurus.io/) to generate our guide. All the guide pages are generated -from `mdx` files in the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory. -MDX allows you to use JSX in your markdown content. - -## Structure - -Let's visit the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory and check its file structure. - -We can see various folders and a few files in it. Let's talk a bit about the `introduction.mdx` file. At the top, you can see something like: - -```md ---- -title: Introduction -description: ... -sidebar_position: 1 ---- -``` - -Most pages have this at the top. The `title` defaults to the file name. Since the titles need to be Capitalized according to need while the file names are lowercased (sometimes, the file names are shorter than the title!), we set a title ourselves. - -The `description` field is also important. This is the text shown in an embed when the page's link is shared on Discord, Twitter or other websites that support embedded links. Make sure to give a nice an interesting description! - -The `sidebar_position` field is pretty self-explanatory. It sets the position of the page in the sidebar. Most files in categories do not need this since they are sorted alphabetically. - -## Markdown Syntax - -This page quickly outlines some of the syntax that is used in markdown. - -````mdx -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - - ```python - print("We can use code blocks like this.") - ``` - -You can add [links to other websites](https://pycord.dev). You can add images like this: ![alternate text that describes the image](https://pycord.dev/image.png). - -- You can create -- unordered lists like this - -1. Or ordered lists -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` -4. Like this - -# Headers - -## Go - -### Like - -#### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet -```` - -
- Preview - -
- Markdown syntax is pretty easy. You can add **bold**, *italic* and *underline* text. You can use ~~strikethrough~~. You can use `inline code blocks`. - - ```python - print("We can use code blocks like this.") - ``` - - You can add [links to other websites](https://pycord.dev). You can add images by adding ![alt text](@site/static/img/favicon.ico). - - * You can create - * unordered lists like this - - 1. Or ordered lists - - 2. Like this - - 3. If you want markdown to automatically detect what number you are on, you can use `1.` - - 4. Like this - - # Headers - - ## Go - - ### Like - - #### This - - You can even use HTML in Markdown. - - This text is monospaced - Use
to add a break line. - - > We can use blockquotes too. - - 2 ways to create tables: - - - - - - - - - - - -
HeaderHeader
CellCell
- - | Header | Header | - | ------ | ------ | - | Cell | Cell | - - Here's a line for us to start with. - - This line is separated from the one above by two new lines, so it will be a *separate paragraph*. - - This line is also a separate paragraph, but... - This line is only separated by a single newline, so it's a separate line in the *same paragraph*. - - We can use emojis too! :joy: - - * [x] We can have task lists too - * [ ] This is a task - * [ ] That's not done yet -
-
- -## Admonitions - -We can add warnings, notes, etc. with the following syntax: - -```md -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: -``` - -
- Preview - -
- :::note - - Some **content** with *markdown* `syntax`. - - ::: - - :::tip - - Some **content** with *markdown* `syntax`. - - ::: - - :::info - - Some **content** with *markdown* `syntax`. - - ::: - - :::caution - - Some **content** with *markdown* `syntax`. - - ::: - - :::danger - - Some **content** with *markdown* `syntax`. - - ::: - - :::important - - Remember that it's `:::important`, not `::: important` with a space! - - ::: - - :::tip Cool Stuff - - You can edit an admonition's title by adding text after the `:::` and name, like this! - - ::: -
-
- -## Discord Message Components - -As most files already have the imports for these, it's not that hard to add them. - -First, import the necessary components: - -```tsx -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; -``` - -The div starts like so: - -```tsx - - - - -
-``` - -This is where you list a `DiscordMessage`. - -```tsx - - - Hello! - - - -
-``` - - - - Hello! - - - -
- -It has a pretty straightforward syntax. - -:::tip - -Add a `
` to the end of a component to make the content below it look better. - -::: - -### Slash Commands - -To make a message authored by a slash command, do the following: - -```tsx - - -
- - update - -
- Updated dependencies to the latest version! -
-
-``` - - - -
- - update - -
- - Updated dependencies to the latest version! -
-
- -### Buttons - -To make a message with buttons, do the following: - -```tsx - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
-``` - - - -
- - work - -
- - Work Done! - -
- - Work More - Sleep - -
-
-
- -## Page Format - -There are a few things you need to take care of: - -1. Make sure that the spelling and grammar is perfect. We have a GitHub action configured that will warn you about spelling errors when you start a pull request. Make sure to commit your changes accordingly. - - As for the grammar, you should try reading the changes you have done and wait for reviews from others. - -2. A common mistake people make is incorrect header style. People often think that the less the important the topic is, the lower it's heading style should be. - - ```md - [PAGE STARTS] - # Topic - ## Less Important Topic - ## Subtopic - ``` - - ```md - [PAGE STARTS] - # About - [Introduction] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - That's VERY wrong. Here's the correct example: - - ```md - [PAGE STARTS] - [Introduction] - ## Topic - ## Less Important Topic - ### Subtopic - ``` - - ```md - [PAGE STARTS] - [Introduction] - - ## About - [More Information] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - Note that the `---`s at the beginning have been skipped here. diff --git a/docs/more/git.mdx b/docs/more/git.mdx deleted file mode 100644 index 3c1d05ec..00000000 --- a/docs/more/git.mdx +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Installing Git -description: Learn how you can install Git on your system. ---- - -Git is software for tracking changes in any set of files (also known as a "version control" software), usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems). - -Let's see how to install Git on different platforms. - -## Windows - -On Windows, Git can be installed via: - -* [Git for Windows](https://gitforwindows.org) -* [Git Scm](https://git-scm.com/download/windows) - -## Linux - -On Linux, Git is probably already installed in your distribution's repository. If not, you can install it via [Git for Linux](https://git-scm.com/download/linux). You can also install it via the built-in package manager on your Linux distro. - -## Mac - -You can install Git for your macOS computer via [Git for Mac](https://git-scm.com/download/mac). Alternatively, it can be also be installed from the Xcode Command Line Tools by installing Xcode from the App Store, or by running this: - -xcode-select --install - -## Using Package Managers - -You can also install Git using package managers. - -### Chocolatey - -If you use the Chocolatey package manager, you can install Git using: - -choco install git - -### Scoop - -If you use Scoop, you can install Git using: - -scoop install git - -### Brew - -If you're on macOS or Linux, you can install Git using: - -brew install git diff --git a/docs/more/virtual-environments.mdx b/docs/more/virtual-environments.mdx deleted file mode 100644 index b0b8c7ea..00000000 --- a/docs/more/virtual-environments.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Virtual Environments -description: Learn how to set up a virtual environment for Pycord. ---- - -## Setup - -Sometimes you want to keep libraries from polluting system installs or use a different version of libraries than the ones installed on the system. You might also not have permissions to install libraries system-wide. For this purpose, the standard library as of Python 3.3 comes with a concept called “Virtual Environment”s to help maintain these separate versions. - -A more in-depth tutorial is found on [Virtual Environments and Packages](https://docs.python.org/3/tutorial/venv.html). - -However, for the quick and dirty: - -Go to your project’s working directory: - -```bash -$ cd your-bot-source -$ python3 -m venv venv -``` - -Activate the virtual environment: - -```bash -$ source venv/bin/activate -``` - -On Windows you activate it with: - -```batch -$ venv\Scripts\activate.bat -``` - -Use pip like usual: - -```bash -$ pip install -U py-cord -``` - -Congratulations. You now have a virtual environment all set up. - -## Additional info - -It can be useful to set up a requirements.txt, so you can just put all of your dependencies in there and have pip install it. -For instance, if you wanted to have the latest 2.0 version of pycord and [pytz](https://github.com/stub42/pytz/blob/master/src/README.rst), just create a file named requirements.txt with the following contents: - -``` -py-cord>=2.0.0 -pytz -``` - -And then (in your virtual environment) you can just execute - -```bash -pip install -r requirements.txt -``` - -To keep from committing your virtual environment to git, you can set up a .gitignore file with the following line -(assuming you named your virtual environment venv like the above example): - -``` -venv/ -``` diff --git a/docs/popular-topics/_category_.json b/docs/popular-topics/_category_.json deleted file mode 100644 index bafc4bd8..00000000 --- a/docs/popular-topics/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 7, - "label": "Popular Topics", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/docs/popular-topics/cogs.mdx b/docs/popular-topics/cogs.mdx deleted file mode 100644 index e39f9d39..00000000 --- a/docs/popular-topics/cogs.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Cogs ---- - -Cogs, often known as modules or extensions, are used to organize commands into groups. This is useful -for grouping commands that have the same general idea (such as moderation commands). This also helps -to avoid making your bot's files messy and cluttered. - -## Getting Started - -First, you'll need to create a folder to store your cogs, e.g. `cogs/`. - -Then, create a file inside the folder, e.g. `cogs/greetings.py`. By convention, the file name should -be the same as the name of the cog or module. - -We can then create the cog. - -```python title="./cogs/greetings.py" -import discord -from discord.ext import commands - -class Greetings(commands.Cog): # create a class for our cog that inherits from commands.Cog - # this class is used to create a cog, which is a module that can be added to the bot - - def __init__(self, bot): # this is a special method that is called when the cog is loaded - self.bot = bot - - @commands.command() # creates a prefixed command - async def hello(self, ctx): # all methods now must have both self and ctx parameters - await ctx.send('Hello!') - - @discord.slash_command() # we can also add application commands - async def goodbye(self, ctx): - await ctx.respond('Goodbye!') - - @discord.user_command() - async def greet(self, ctx, member: discord.Member): - await ctx.respond(f'{ctx.author.mention} says hello to {member.mention}!') - - math = discord.SlashCommandGroup("math", "Spooky math stuff") # create a Slash Command Group called "math" - advanced_math = math.create_subgroup( - "advanced", - "super hard math commands!" - ) - - @math.command() - async def add(self, ctx, a: int, b: int): - c = a + b - await ctx.respond(f"{a} + {b} is {c}.") - - @advanced_math.command() - async def midpoint(self, ctx, x1: float, y1: float, x2: float, y2: float): - mid_x = (x1 + x2)/2 - mid_y = (y1 + y2)/2 - await ctx.respond(f"The midpoint between those coordinates is ({mid_x}, {mid_y}).") - - @commands.Cog.listener() # we can add event listeners to our cog - async def on_member_join(self, member): # this is called when a member joins the server - # you must enable the proper intents - # to access this event. - # See the Popular-Topics/Intents page for more info - await member.send('Welcome to the server!') - -def setup(bot): # this is called by Pycord to setup the cog - bot.add_cog(Greetings(bot)) # add the cog to the bot -``` - -You can add any number of commands to your cog, as well as event listeners. However, this code will -not work on its own. In your main bot file, you must add the following code: - -```python -bot.load_extension('cogs.greetings') -``` - -This loads the file `cogs/greetings.py` and adds it to the bot. -The argument of `load_extension` should be your cog's path (e.g. cogs/greetings.py) without the file -extension and with the `/` replaced with `.` - -If you have multiple cogs, you can add them all at once by adding the following code: - -```python -cogs_list = [ - 'greetings', - 'moderation', - 'fun', - 'owner' -] - -for cog in cogs_list: - bot.load_extension(f'cogs.{cog}') -``` - -## Cog Rules - -When using a cog instead of the main file, there are some changes you have to make to your code. This -is because cogs work slightly different from a regular file. - -### The `self` variable - -The self variable is a variable that represents a class. In the case of cogs, `self` represents -the cog. In the `__init__` function, you can see that we have `self.bot = bot`. `bot` represents your -`discord.Bot` or `discord.ext.commands.Bot` instance, which is used for some functions. - -This means that instead of using functions that would usually be accessed via `bot`, you now need -to access them via `self.bot` - -Because we're in a class, all of our commands are methods of that class. Because of this, all of our -functions need to have `self` as the first parameter, where `self` is the cog. Without this, we -wouldn't be able to access our bot instance. - -### Creating Commands - -When creating prefixed commands, your decorator would usually be something like `@bot.command()`. If you're using -cogs, this isn't the case. In a cog, you can't access the bot instance outside of functions, so to -register a function as a command, you must instead use `@commands.command()`. - -Similar to prefixed commands, you'll have to use either the `@discord.slash_command()`, `@discord.user_command()`, -or `@discord.message_command()` decorators for Application Commands. - -Also, when creating a command, make sure that it is indented. If we want a command to be actually -inside a cog, it has to be inside your cog's class. If the command is not inside the cog, -your command becomes useless. - -### Events - -When creating events, you can no longer use `@bot.event` as a decorator. This is because we cannot -access the `bot` variable outside a function. To make an event, you have to use the `ext.commands` -method, `@commands.Cog.listener()`. Events also need `self` as their first parameter. - -And that's it! Cogs are a simple and easy way of organizing your code. Now you can check out how to -create a help command [here](../extensions/commands/help-command). - -:::info Related Topics - -* [Creating a Help Command](../extensions/commands/help-command) -* [Rules and Common Practices](../getting-started/rules-and-common-practices) -* [Prefixed Commands](../extensions/commands/prefixed-commands) -* [Application Commands](../interactions#application-commands) - -::: diff --git a/docs/popular-topics/error-handling.mdx b/docs/popular-topics/error-handling.mdx deleted file mode 100644 index a3ca1b9a..00000000 --- a/docs/popular-topics/error-handling.mdx +++ /dev/null @@ -1,409 +0,0 @@ ---- -title: Error Handling -description: All about handling errors. ---- - -import { - DiscordEmbed, - DiscordInteraction, - DiscordMessage, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -## About - -When using the library, errors are frequently raised due to various reasons. These reasons range from the Discord API -failing your bot's request due to missing permissions or an invalid syntax error. - -Before going into error handling, it's best that you learn the basic ways of handling errors. A good resource is: - -* [W3Schools' Guide to Python Try-Except Statements](https://www.w3schools.com/python/python_try_except.asp) - -## Basic Handling - -The most basic way to handle errors is to tackle it at the source. This can be done like so: - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -import asyncio - -import discord - -intents = discord.Intents.default() -intents.message_content = True - -bot = discord.Bot(intents=intents) - - -@bot.slash_command(description="Gets some feedback.") -@discord.option("name", description="Enter your name.") -async def feedback(ctx: discord.ApplicationContext, name: str): - try: - await ctx.respond(f"Hey, {name}! Send your feedback within the next 30 seconds please!") - - def is_author(m: discord.Message): - return m.author.id == ctx.author.id - - feedback_message = await bot.wait_for("message", check=is_author, timeout=30.0) - await ctx.send(f"Thanks for the feedback!\nReceived feedback: `{feedback_message.content}`") - except asyncio.TimeoutError: - await ctx.send("Timed out, please try again!") - - -bot.run("TOKEN") -``` - -If you respond within 30 seconds, the interaction will look like so: - - - -
- - feedback - -
- - Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - - Great bot! - - - - Thanks for the feedback! - -
- - Received feedback: Great bot! -
-
- -
- -Otherwise, if you don't respond in time, the interaction will go as follows: - - - -
- - feedback - -
- - Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - - Timed out, please try again! - -
- -
- -This basic method of error handling can be extended to handle -many other errors including ones raised directly by py-cord. - -## Per-Command Handling - -This type of error handling allows you to handle errors per each command you have on your bot. -Each and every command can have it's own error handler made to handle specific errors that each command may raise! - -An example of per-command error handling is as follows: - -:::note Bridge Commands -As of writing this guide page, bridge commands do not currently support per-command error handling. - -For these types of commands, it is recommended to utilize global error handling -until [the feature](https://github.com/Pycord-Development/pycord/issues/1388) is added. -::: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot(owner_id=...) # Your Discord user ID goes in owner_id - - -@bot.slash_command(description="A private command...") -@commands.is_owner() # This decorator will raise commands.NotOwner if the invoking user doesn't have the owner_id -async def secret(ctx: discord.ApplicationContext): - await ctx.respond(f"Hey {ctx.author.name}! This is a secret command!") - - -@secret.error -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.NotOwner): - await ctx.respond("Sorry, only the bot owner can use this command!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If your ID is registered as the owner ID, you'll get the following: - - - -
- - secret - -
- - Hey Dorukyum! This is a secret command! -
-
- -
- -Any other user whose ID doesn't match the bot owner's will get the following: - - - -
- - secret - -
- - Sorry, only the bot owner can use this command! -
-
- -
- -This local (per-command) error handler can also be used to handle the same types of errors that standard try-except -statements can handle. This is done by using the same method as above with the `isinstance` built-in function. - -## Per-Cog Handling - -Adding error handlers per-command can be quite the task in terms of work if you have a lot. If you have happened to -group your commands in cogs, then you're in luck! You can create an error handler that is specific to a cog and -handles all errors raised by commands inside that cog. - -Here's an example of a bot with a cog that implements its own error handling: - -```python title="./cogs/dm.py" -# This cog is for DM only commands! Sadly, we only have 1 command here right now... - -import discord -from discord.ext import commands - - -class DM(commands.Cog): - def __init__(self, bot: commands.Bot): - self.bot = bot - - @commands.command() - @commands.dm_only() # This decorator will raise commands.PrivateMessageOnly if invoked in a guild context. - async def avatar(self, ctx: commands.Context): - embed = discord.Embed( - title="Avatar", - description=f"Here's your enlarged avatar, {ctx.author.name}!", - color=ctx.author.top_role.color - ) - embed.set_image(url=ctx.author.display_avatar.url) - await ctx.send(embed=embed, reference=ctx.message) - - async def cog_command_error(self, ctx: commands.Context, error: commands.CommandError): - if isinstance(error, commands.PrivateMessageOnly): - await ctx.send("Sorry, you can only use this in private messages!", reference=ctx.message) - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -def setup(bot: commands.Bot): - bot.add_cog(DM(bot)) -``` - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -# This is the main file where we load the DM cog and run the bot. - -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix=commands.when_mentioned_or("!")) -bot.load_extension("cogs.dm") -bot.run("TOKEN") -``` - -If you use this command in a DM context, you'll get the following: - - - - !avatar - - - -
- - !avatar - -
- - - Here's your enlarged avatar, BobDotCom! - -
-
- -
- -Otherwise, if used in a guild context: - - - - !avatar - - - -
- - !avatar - -
- - Sorry, you can only use this in private messages! -
-
- -
- -Per-cog error handling comes in very handy as you can relegate all of your error handling to a single function instead -of spreading it out across several per-command error handlers or inside the commands themselves. - -## Global Handling - -If separating your error handling is not how you would like to handle errors, then global error handling is the way to -go. This method of handling allows you to relegate all handling to a single function that resides within your bot -instance. - -A non-subclassed bot would implement this like so: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot() - - -@bot.slash_command(description="Get the bot's current latency!") -@commands.cooldown(1, 30, commands.BucketType.user) -# ^ This decorator allows one usage of the command every 30 seconds and raises commands.CommandOnCooldown if exceeded -async def ping(ctx: discord.ApplicationContext): - await ctx.respond(f"Pong! `{int(bot.latency*1000)} ms`.") - - -@bot.event -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.CommandOnCooldown): - await ctx.respond("This command is currently on cooldown!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If you've subclassed your bot, the `on_application_command_error` event will be placed inside the subclass without a -`bot.event` decorator and `bot.slash_command` will be replaced with `discord.slash_command`. - -The error handling used above will yield this interaction if the command is used again too quickly: - - - -
- - ping - -
- - Pong! 49 ms. -
- - -
- - ping - -
- - This command is currently on cooldown! -
-
- -
- -The only issue regarding global error handling is that, if you have a large amount of commands, the global handler may -start to get crammed with a lot of code. This is where all the previously mentioned handlers can take their place! - -## FAQ - -#### Why does the example in per-cog handling have self at the start of its function signatures? - -This is a feature of classes and allows you to reference the cog object as `self` and get access to the bot object -passed at initialization through `self.bot`. - -If this is new to you, we recommend checking out these helpful resources to learn more about classes and cogs: - -* [W3Schools' Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -* [Our Cogs Guide Page](./cogs) - -#### How many errors can I handle in a single error handler? - -While all the examples in this guide page only handle one specific error and re-raise all others, all of these -error handlers can be extended to catch many errors. - -In [basic handling](#basic) (i.e. try/except statements) you can do one of two things: - -* Explicitly handle the errors you know might get raised and then have a broad `except Exception as exc:` statement - as a catch-all. -* Catch any and all errors via the catch-all statement mentioned above. - -In [per-command](#percommand), [per-cog](#percog), and [global handling](#global), you can use elif clauses with the -built-in isinstance function to catch specific errors. Atop of this, an else clause can be used to catch any other -errors you either don't want to handle or want to relegate to a different error handler. - -#### Can I use more than one type of error handler at once? - -Thankfully, all of these different ways of error handling can be mixed together, so you don't have to pick just one! -For commands that raise specific errors that no other commands will raise, you can use [per-command](#percommand). -For cogs that raise specific errors that no other cogs will raise, use [per-cog](#percog)! Lastly, for errors that -occur frequently across all commands and cogs, use [global handling](#global)! - -However, one important note to remember is that you should always raise the error again in an error handler if it -isn't handled there! If you don't do this, the error will go ignored and your other handlers won't have a chance to -do their work! - -#### What's the difference between slash and prefixed command error handling? - -Although most examples shown here use slash commands, the [per-cog handling](#percog) section presents a prefixed -command. The main difference you may notice is the change in command signature. - -To make the distinguishing features apparent: - -* Slash commands use `on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException)` - as presented in the [per-command](#percommand) and [global handling](#global) examples. -* Prefixed commands use `on_command_error(ctx: commands.Context, error: commands.CommandError)` as presented in the - [per-cog handling](#percog) example. - -This distinction is made as both types of commands need their own system for handling errors that are specific to -themselves. - -:::info Related Topics - -* [Slash Commands](../interactions/application-commands/slash-commands) -* [Prefixed Commands](../extensions/commands/prefixed-commands) -* [Cogs](./cogs) - -::: diff --git a/docs/popular-topics/intents.mdx b/docs/popular-topics/intents.mdx deleted file mode 100644 index 086db01b..00000000 --- a/docs/popular-topics/intents.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Intents -description: All about intents in Discord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## What are Intents? - -Intents allow bot developers to "subscribe" to specific events in Discord. This is useful for bots that need to respond to specific events, such as when a user joins a server or sends a message. You could choose to enable all intents or to enable only specific intents that your bot requires. - -## How do I enable intents? - -:::important - -Remember that [Privileged Intents](#what-are-privileged-intents) require you to enable them in the Discord Developer Portal. Verified Discord Bots that don't already have access to them will need to request Discord to allow access. - -::: - - - - ```python - import discord - - bot = discord.Bot(intents=discord.Intents.all()) - ``` - - - - You can view a list of intents and the events they subscribe to [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - - ```python title="Enabling Intents" - import discord - - bot = discord.Bot(intents=discord.intents.members(bans=True, guilds=True)) - ``` - - - -## What are Privileged Intents? - -Discord defines some intents as "privileged" because of the sensitive information they contain. Currently, there are three privileged intents: `members`, `presences`, and `message_content`. These intents must be enabled in your bot's Developer Portal. Once your bot reaches 100 servers, you will need to verify your bot for these intents to keep working and for your bot to be able to be invited to more guilds. - -:::tip - -Only enable these intents if you need them. These intents give your bot access to quite sensitive information about the users in your guild. These intents are privileged to respect the privacy of users, and you should do that as well. - -Not enabling these intents doesn't mean you won't be able to ban users, but you will be unable to detect when a new user joins a guild, or what game they are playing. The majority of bots won't need all intents. - -::: - -:::info Related Topics - -* [Sharding Bots](sharding) -* [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/docs/popular-topics/sharding.mdx b/docs/popular-topics/sharding.mdx deleted file mode 100644 index 5b5ce18f..00000000 --- a/docs/popular-topics/sharding.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Sharding -description: All about Sharding Discord Bots. ---- - -# Sharding - -## What is Sharding? - -Sharding is the process of breaking up your bot into smaller pieces so that it has a better time handling -events. As [Discord's Documentation](https://discord.com/developers/docs/topics/gateway#sharding) puts -it, sharding is "a method of user-controlled guild sharding which allows for splitting events across -several gateway connections." - -Sharding is used only for large bots and takes up additional resources for managing the new processes. -Pycord automatically shards your bot, so the only thing you need to do is use an `AutoShardedClient` -or `AutoShardedBot` class instead of a plain `Client` or `Bot` class. Pretty cool, right? - -Just because you *can* shard your bot doesn't mean you *should*. While Pycord makes it easy to shard -your bot, it isn't necessary to shard unless your bot is large. Sharding a small bot isn't -just useless, but *harmful*, as it uses extra resources and may slow down your bot. Discord -themselves will let you know when your bot needs sharding, so you won't need to worry about this until they contact you. - -## How Do I Shard in Pycord? - -Sharding in Pycord is straightforward. - -Just replace your `discord.Client`, `discord.Bot`, `commands.Bot` objects -with `discord.AutoShardedClient`, `discord.AutoShardedBot`, `commands.AutoShardedBot` respectively. - -These new objects have been inherited from the original objects, so all the functions from those other types should be present. - -If you want to specify the number of shards your bot uses, -just add the `shards` parameter, along with the number of shards you want. - -## Why Should I Shard my Bot? - -Sharding is very necessary for big bots. While your bot grows, it gets harder for your bot to control -how many guilds it is in and what parts of your code should do what. This is exactly what sharding -handles, it makes all of this easier for your bot. Remember, though, only shard your bot once it's -big enough, and that's at *least* 1,000 guilds. - -:::info Related Topics - -* [Hosting your Bot](../Getting-Started/hosting-your-bot) -* [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/docs/popular-topics/subclassing-bots.mdx b/docs/popular-topics/subclassing-bots.mdx deleted file mode 100644 index 56b2d643..00000000 --- a/docs/popular-topics/subclassing-bots.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Subclassing Bots -description: Subclassing is a popular way of creating Discord Bots. Explore how you can create a Discord bot by subclassing. ---- - -## About - -Subclassing is another popular way of creating Discord Bots. Here, you create a bot by extending a bot class. To some advanced users, this is preferable to creating a bot instance with `bot = discord.Bot()`. - -Subclassing is an intermediate python concept, so we recommend you learn about it before continuing. Some good resources are: - -* [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -* [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -## Why Subclassing? - -Many developers prefer to subclass their bots for many reasons, some of them being: - -#### Skeletal Frameworks for Bots - -Developers often share their bots code on open-source platforms, mostly GitHub, and allow users to self-host the bot (running their own instance of the bot with the code provided by the developer. Permissions vary in accordance to licences). Here, users find it easier and more convenient to have a small file that imports the custom bot class and runs it, rather than having to go through the code of the bot and find out which file to run. This makes it easier for people not familiar with programming to run and customize the bot, since it often brings down the code to: - -```python title="./main.py" -from src import Bot - -bot = Bot() - -bot.run("TOKEN") -``` - -Here, all the commands are inside the `/src` folder that the user need not bother with. - -#### Running Multiple Instances - -Some developers may need to run multiple instances of their bot (perhaps on different bot accounts). For example, a developer might have a second bot for testing alpha features. This system makes it simpler for the developer, and allows them to maintain multiple versions of the bot in the same directory: - -```python title="./alpha_bot.py" -from src import Bot - -class AlphaBot(Bot): # subclasses Bot - ... # insert any custom configuration - -bot = AlphaBot() - -@bot.slash_command() # adds a new slash command to this subclassed bot -async def alpha_feature(ctx): - await ctx.respond("Alpha Feature!") - -bot.run("TOKEN") -``` - -There are many more reasons to subclass! It's not required, and won't affect the speed of the bot, but it may affect your development process, for the good or for the worse. You don't miss out on any features when you subclass, either. Some developers want the OOP feel, while some just prefer that method and find it easier. - -## Basic Example - -```python -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override the on_ready event - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') - -bot = MyBot() - -@bot.slash_command() # create a slash command -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run('token') -``` - -As you can see, instead of creating a bot object with `bot = discord.Bot()`, we subclass [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). We then create an instance of our new bot class and run it. Notice how we don't need to use the `@event` decorator. - -Here's another example: - -```python title="./src/bot.py" -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override on_ready - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') -``` - -```python title="./src/__init__.py" -from .bot import MyBot # import the MyBot class from the bot.py file -``` - -```python title="./main.py" -from src import MyBot # import MyBot from /src - -bot = MyBot() # create an instance of MyBot - -@bot.slash_command() -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run("TOKEN") # run the bot -``` - -These are just two ways you could do it. There are ton of other structures you can implement. It's up to you. - -So, should you subclass? There are no limitations you face if you decide to subclass your bot, but, once again, it's up to you. - -:::info Related Topics - -* [Making a Help Command](../Extensions/Commands/help-command) -* [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/docs/popular-topics/threads.mdx b/docs/popular-topics/threads.mdx deleted file mode 100644 index 32640aec..00000000 --- a/docs/popular-topics/threads.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Threads -description: Threads with Pycord ---- - -In programming, threads are a way to run multiple processes at the same time. In Discord, threads are -a way to keep multiple conversations going at the same time. Let's take a brief look at how to use threads in Pycord. - -:::tip - -Not all the methods and attributes will be covered in this guide, but you can find them in our documentation! -[Check it out!](https://docs.pycord.dev/en/stable/api/models.html#discord.Thread) - -::: - -## Creating a thread - -With a few simple lines of code, we can create threads in Pycord. - -:::important - -All public threads need a starting message. This message will start the thread. However, private threads -(which are unlocked with having your server boosted to Level 2), do not require a starting message. - -::: - -### Creating thread from a message - -```python title="Creating a Thread from a Message" -message = await ctx.send("My Starting Message") -await message.create_thread(name="thread name", auto_archive_duration=60) -``` - -You may also use other ways to create the thread, for example, by using `on_message` events or by commands. - -### Creating thread in a channel - -```python title="Creating a Thread from a Channel" -channel = bot.get_channel(...) # define this! -await channel.create_thread(name="Thread Name", message=None, auto_archive_duration=60, type=None, reason=None) -``` - -A thread type could be `news_thread`, `public_thread`, `private_thread`. You may use it by passing `type=discord.ChannelType.news_thread`. - -## Deleting Threads - -Deleting Threads is simple. You need to get a thread and then use the `delete` method. - -```python title="Deleting a Thread" -thread = bot.get_channel(thread_id) # you could use other ways to get a thread -await thread.delete() -``` - -## Editing Threads - -**Parameters** - -* `name` (str) – The new name of the thread - -* `archived` (bool) – Whether to archive the thread or not. - -* `locked` (bool) – Whether to lock the thread or not. - -* `invitable` (bool) – Whether non-moderators can add other non-moderators to this thread. Only available for private threads. - -* `auto_archive_duration` (int) – The new duration in minutes before a thread gets automatically archived for inactivity. Must be one of 60, 1440, 4320, or 10080. - -* `slowmode_delay` (int) – Specifies the slow-mode rate limit for users in the thread, in seconds. A value of 0 disables slow-mode. The maximum value possible is 21600. - -```python title="Editing a Thread" -thread = bot.get_channel(id) -await thread.edit( - name="New Name", - archived=True, - locked=True, - slowmode_delay=10, - auto_archive_duration=60, -) -``` - -As you can see, threads are very simple. Once you learn how to use them, it's easy to create whatever you want. - -## FAQ - -### Why am I getting a `Forbidden` error when I try to create a thread? - -A `Forbidden` error occurs when the bot does not have the correct permissions to create threads. - -### Why am I getting an Unknown Message error when I try to create a thread? - -Getting an error looking something like `discord.ext.commands.errors.CommandInvokeError: Command -raised an exception: HTTPException: 400 Bad Request (error code: 10008): Unknown Message`? - -There could be multiple reasons, some of them being: - -* The message does not exist -* The message already has a thread -* The message is in channel x, you are trying to start a thread in channel y. -* The message was deleted. - -:::info Related Topics - -<> - {/* I can't think of any related topics for this at the moment. */} - - -::: diff --git a/docs/voice/_category_.json b/docs/voice/_category_.json deleted file mode 100644 index 769c773e..00000000 --- a/docs/voice/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 6, - "label": "Voice" -} \ No newline at end of file diff --git a/docs/voice/index.mdx b/docs/voice/index.mdx deleted file mode 100644 index 4dc7c926..00000000 --- a/docs/voice/index.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Voice ---- - -Welcome to the guide for voice features in Pycord. - -:::caution -This guide requires previous experience with Pycord and Python. -::: - -## Requirements - -The only requirement which is required for voice features is [`PyNaCl`](https://pypi.org/project/PyNaCl/). -The following features are optional: - -:::tip -Opus is also a required library, but this comes with Pycord. -Some hosts may not come with it, though, so remember to always check if required dependencies are installed. -::: - -* [`FFmpeg`](https://ffmpeg.org) - used for sending/receiving files other than `.pcm` and `.wav` -* [`Pycord.Wavelink`](https://github.com/Pycord-Development/Pycord.Wavelink), - [`Lavalink.py`](https://github.com/Devoxin/Lavalink.py), - [`Wavelink`](https://github.com/PythonistaGuild/Wavelink) or any other Python LavaLink library for music playback. diff --git a/docs/voice/playing.mdx b/docs/voice/playing.mdx deleted file mode 100644 index 17bb6b18..00000000 --- a/docs/voice/playing.mdx +++ /dev/null @@ -1,150 +0,0 @@ ---- -title: Wavelink Audio Player ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { - defaultOptions, -} from "@site/src/components/DiscordComponent"; - -# About - -Pycord and Wavelink try to keep the playing of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio playing feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/). - -## Starting out - -First you need to run a [Lavalink Server](https://github.com/freyacodes/Lavalink) to connect with. -There a multiple documentations to do this, so we are not covering that here. - -You also need to install the [wavelink](https://github.com/PythonistaGuild/Wavelink) library. - -```py title="Installing wavelink" -python3 -m pip install wavelink -``` - -You will now want to connect to your server via a node. - -```py title="Connect Node with Lavalink" -import discord -import wavelink - -bot = discord.Bot() - -async def connect_nodes(): - """Connect to our Lavalink nodes.""" - await bot.wait_until_ready() # wait until the bot is ready - - nodes = [ - wavelink.Node( - identifier="Node1", # This identifier must be unique for all the nodes you are going to use - uri="http://0.0.0.0:443", # Protocol (http/s) is required, port must be 443 as it is the one lavalink uses - password="youshallnotpass" - ) - ] - - await wavelink.Pool.connect(nodes=nodes, client=bot) # Connect our nodes -``` - -
- -Now you are finished making your node! Next, you will want to: - -1. Making a play command -2. Adding connect events - -### Making a play command - -To make a play command, you will need to make a function to connect and play audio in a voice channel. - -```py title="Play Command Example" -import typing - -@bot.slash_command(name="play") -async def play(ctx, search: str): - # First we may define our voice client, - # for this, we are going to use typing.cast() - # function just for the type checker know that - # `ctx.voice_client` is going to be from type - # `wavelink.Player` - vc = typing.cast(wavelink.Player, ctx.voice_client) - - if not vc: # We firstly check if there is a voice client - vc = await ctx.author.voice.channel.connect(cls=wavelink.Player) # If there isn't, we connect it to the channel - - # Now we are going to check if the invoker of the command - # is in the same voice channel than the voice client, when defined. - # If not, we return an error message. - if ctx.author.voice.channel.id != vc.channel.id: - return await ctx.respond("You must be in the same voice channel as the bot.") - - # Now we search for the song. You can optionally - # pass the "source" keyword, of type "wavelink.TrackSource" - song = await wavelink.Playable.search(search) - - if not song: # In case the song is not found - return await ctx.respond("No song found.") # we return an error message - - await vc.play(song) # Else, we play it - await ctx.respond(f"Now playing: `{song.title}`") # and return a success message -``` - - - -
- - play - -
- - Now playing: Never Gonna Give You Up -
-
- -
- -Now that you've done this, the only thing left to do is make your connect events. - -### Adding connect events - -The final step to this guide is connecting the node to your server when the bot goes online. - -To make it, you will want to do the following: - -```py title="Adding connect events" -@bot.event -async def on_ready(): - await connect_nodes() # connect to the server - -@bot.event -async def on_wavelink_node_ready(payload: wavelink.NodeReadyEventPayload): - # Everytime a node is successfully connected, we - # will print a message letting it know. - print(f"Node with ID {payload.session_id} has connected") - print(f"Resumed session: {payload.resumed}") - -bot.run("token") -``` - -Congratulations! You have now implemented voice playing into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -* [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/docs/voice/receiving.mdx b/docs/voice/receiving.mdx deleted file mode 100644 index c369279a..00000000 --- a/docs/voice/receiving.mdx +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: Receiving Voice Samples ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -# About - -Pycord tries to keep the recording of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio recording feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/audio_recording.py). - -## Starting out - -The first thing you want to do is make a cache of your voice connections. This is fairly easy; as -it's just putting a variable with an empty dictionary in our code, such as `connections = {}`. - -You will now want to create your command for recording. - -```py title="Record Command Example" -import discord - -bot = discord.Bot() -connections = {} - -@bot.command() -async def record(ctx): # If you're using commands.Bot, this will also work. - voice = ctx.author.voice - - if not voice: - await ctx.respond("You aren't in a voice channel!") - - vc = await voice.channel.connect() # Connect to the voice channel the author is in. - connections.update({ctx.guild.id: vc}) # Updating the cache with the guild and channel. - - vc.start_recording( - discord.sinks.WaveSink(), # The sink type to use. - once_done, # What to do once done. - ctx.channel # The channel to disconnect from. - ) - await ctx.respond("Started recording!") -``` - - - -
- - record - -
- - Started recording! -
-
- -
- -Now you are finished making your command for voice receiving! Next, you will want to: - -1. Make your finished callback -2. Make a stop command - -### Making a Callback - -To make a callback, you will want to define the currently undefined `once_done` function inside -our command, like so: - -```py title="Recorder Callback" -async def once_done(sink: discord.sinks, channel: discord.TextChannel, *args): # Our voice client already passes these in. - recorded_users = [ # A list of recorded users - f"<@{user_id}>" - for user_id, audio in sink.audio_data.items() - ] - await sink.vc.disconnect() # Disconnect from the voice channel. - files = [discord.File(audio.file, f"{user_id}.{sink.encoding}") for user_id, audio in sink.audio_data.items()] # List down the files. - await channel.send(f"finished recording audio for: {', '.join(recorded_users)}.", files=files) # Send a message with the accumulated files. -``` - - - - finished recording audio for:{" "} - - - {defaultOptions.profiles.bob.author} - - - - -
- -Now that you've done this, the only thing left to do is make your stop command. - -### Making a Stop Command - -The final step to this guide is stopping the audio recording. This is the easiest step by far. - -To make it, you will want to do the following: - -```py title="Stop Recording Command" -@bot.command() -async def stop_recording(ctx): - if ctx.guild.id in connections: # Check if the guild is in the cache. - vc = connections[ctx.guild.id] - vc.stop_recording() # Stop recording, and call the callback (once_done). - del connections[ctx.guild.id] # Remove the guild from the cache. - await ctx.delete() # And delete. - else: - await ctx.respond("I am currently not recording here.") # Respond with this if we aren't recording. - -bot.run("token") -``` - -Congratulations! You have now implemented voice recording into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -* [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/docusaurus.config.js b/docusaurus.config.js deleted file mode 100644 index d1f05e28..00000000 --- a/docusaurus.config.js +++ /dev/null @@ -1,119 +0,0 @@ -// @ts-check -// Note: type annotations allow type checking and IDEs autocompletion - -// @ts-ignore -const lightCodeTheme = require("prism-react-renderer").themes.vsLight; -// @ts-ignore -const darkCodeTheme = require("prism-react-renderer").themes.vsDark; - -const DefaultLocale = 'en'; - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: "Pycord Guide", - tagline: - "Imagine a place where you can learn how to create a Discord Bot", - url: "https://guide.pycord.dev", - trailingSlash: false, - baseUrl: "/", - onBrokenLinks: "throw", - onBrokenMarkdownLinks: "warn", - favicon: "img/favicon.ico", - organizationName: "Pycord-Development", // Usually your GitHub org/user name. - projectName: "guide", // Usually your repo name. - plugins: ["docusaurus-plugin-sass"], - presets: [ - [ - "classic", - { - docs: { - // @ts-ignore - editUrl: ({locale, versionDocsDirPath, docPath}) => { - // Link to Crowdin for French docs - if (locale !== DefaultLocale) { - return `https://translations.pycord.dev/guide/${locale}`; - } - // Link to GitHub for English docs - return `https://github.com/Pycord-Development/guide/edit/main/${versionDocsDirPath}/${docPath}`; - }, - routeBasePath: "/", - showLastUpdateAuthor: true, - showLastUpdateTime: true, - }, - theme: { - customCss: require.resolve("./src/scss/main.scss"), - }, - }, - ], - ], - i18n: { - defaultLocale: 'en', - locales: ['en', 'de', 'ja', 'fr', 'it', 'hi', 'ko', 'pt-BR', 'es-ES', 'zh-CN', 'ru'], - }, - themeConfig: { - docs: { - sidebar: { - autoCollapseCategories: true, - }, - }, - colorMode: { - defaultMode: "dark", - disableSwitch: true, // TODO: Support light mode (I know, I know. Eww. I'm sorry.) - }, - navbar: { - title: "Pycord Guide", - hideOnScroll: true, - items: [ - { - label: "Home", - position: "left", - href: "https://pycord.dev/", - }, - { - label: "Docs", - position: "left", - href: "https://docs.pycord.dev", - }, - { - label: "GitHub", - position: "left", - href: "https://pycord.dev/github", - }, - // TODO: Post v2.0: Version the docs - // { - // type: 'docsVersionDropdown', - // position: 'right', - // }, - // TODO: Locales - { - type: 'localeDropdown', - position: 'right', - }, - { - label: "Source", - // We should use href instead of to, but it creates a strange styling issue - to: 'https://github.com/Pycord-Development/guide', - position: 'right', - className: 'header-github-link', - 'aria-label': 'GitHub repository', - }, - ], - }, - footer: { - style: "dark", - copyright: `Copyright © 2022-${new Date().getFullYear()} Pycord Development, All rights reserved.`, - }, - prism: { - defaultLanguage: "python", - theme: lightCodeTheme, - darkTheme: darkCodeTheme, - }, - algolia: { - appId: "B3W8ZM9HW4", - apiKey: "1bf03e7f2ea8fef3ab0c70f50c65e063", // Public key - indexName: "pycord", - } - }, -}; - -module.exports = config; diff --git a/i18n/de/code.json b/i18n/de/code.json deleted file mode 100644 index 9cce6148..00000000 --- a/i18n/de/code.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "theme.ErrorPageContent.title": { - "message": "This page crashed.", - "description": "The title of the fallback page when the page crashed" - }, - "theme.NotFound.title": { - "message": "Page Not Found", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "We could not find what you were looking for.", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.admonition.note": { - "message": "note", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "tip", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.danger": { - "message": "danger", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "info", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.caution": { - "message": "caution", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "Scroll back to top", - "description": "The ARIA label for the back to top button" - }, - "theme.blog.archive.title": { - "message": "Archive", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "Archive", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "Blog list page navigation", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "Newer Entries", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "Older Entries", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "Blog post page navigation", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "Newer Post", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "Older Post", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.blog.post.plurals": { - "message": "One post|{count} posts", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} tagged with \"{tagName}\"", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "View All Tags", - "description": "The label of the link targeting the tag list page" - }, - "theme.colorToggle.ariaLabel": { - "message": "Switch between dark and light mode (currently {mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "dark mode", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "light mode", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "Breadcrumbs", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription": { - "message": "{count} items", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "Docs pages", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "Previous", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "Next", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "One doc tagged|{count} docs tagged", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "{nDocsTagged} with \"{tagName}\"", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versionBadge.label": { - "message": "Version: {versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "latest version", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "Edit this page", - "description": "The link label to edit the current page" - }, - "theme.common.headingLinkTitle": { - "message": "Direct link to {heading}", - "description": "Title for link to heading" - }, - "theme.lastUpdated.atDate": { - "message": " on {date}", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": " by {user}", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "Last updated{atDate}{byUser}", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "Versions", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "Tags:", - "description": "The label alongside a tag list" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "Close", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "Blog recent posts navigation", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.copied": { - "message": "Copied", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "Copy code to clipboard", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "Copy", - "description": "The copy button label on code blocks" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "Toggle word wrap", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "Toggle the collapsible sidebar category '{label}'", - "description": "The ARIA label to toggle the collapsible sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "Main", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "Languages", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "On this page", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "Read More", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "Read more about {title}", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.blog.post.readingTime.plurals": { - "message": "One min read|{readingTime} min read", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.breadcrumbs.home": { - "message": "Home page", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "Docs sidebar", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "Close navigation bar", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← Back to main menu", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "Toggle navigation bar", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.SearchBar.seeAll": { - "message": "See all {count} results" - }, - "theme.SearchPage.documentsFound.plurals": { - "message": "One document found|{count} documents found", - "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.SearchPage.existingResultsTitle": { - "message": "Search results for \"{query}\"", - "description": "The search page title for non-empty query" - }, - "theme.SearchPage.emptyResultsTitle": { - "message": "Search the documentation", - "description": "The search page title for empty query" - }, - "theme.SearchPage.inputPlaceholder": { - "message": "Type your search here", - "description": "The placeholder for search page input" - }, - "theme.SearchPage.inputLabel": { - "message": "Search", - "description": "The ARIA label for search page input" - }, - "theme.SearchPage.algoliaLabel": { - "message": "Search by Algolia", - "description": "The ARIA label for Algolia mention" - }, - "theme.SearchPage.noResultsText": { - "message": "No results were found", - "description": "The paragraph for empty search result" - }, - "theme.SearchPage.fetchingNewResults": { - "message": "Fetching new results...", - "description": "The paragraph for fetching new search results" - }, - "theme.SearchBar.label": { - "message": "Search", - "description": "The ARIA label and placeholder for search button" - }, - "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "Clear the query", - "description": "The label and ARIA label for search box reset button" - }, - "theme.SearchModal.searchBox.cancelButtonText": { - "message": "Cancel", - "description": "The label and ARIA label for search box cancel button" - }, - "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "Recent", - "description": "The title for recent searches" - }, - "theme.SearchModal.startScreen.noRecentSearchesText": { - "message": "No recent searches", - "description": "The text when no recent searches" - }, - "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { - "message": "Save this search", - "description": "The label for save recent search button" - }, - "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "Remove this search from history", - "description": "The label for remove recent search button" - }, - "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "Favorite", - "description": "The title for favorite searches" - }, - "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "Remove this search from favorites", - "description": "The label for remove favorite search button" - }, - "theme.SearchModal.errorScreen.titleText": { - "message": "Unable to fetch results", - "description": "The title for error screen of search modal" - }, - "theme.SearchModal.errorScreen.helpText": { - "message": "You might want to check your network connection.", - "description": "The help text for error screen of search modal" - }, - "theme.SearchModal.footer.selectText": { - "message": "to select", - "description": "The explanatory text of the action for the enter key" - }, - "theme.SearchModal.footer.selectKeyAriaLabel": { - "message": "Enter key", - "description": "The ARIA label for the Enter key button that makes the selection" - }, - "theme.SearchModal.footer.navigateText": { - "message": "to navigate", - "description": "The explanatory text of the action for the Arrow up and Arrow down key" - }, - "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "Arrow up", - "description": "The ARIA label for the Arrow up key button that makes the navigation" - }, - "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "Arrow down", - "description": "The ARIA label for the Arrow down key button that makes the navigation" - }, - "theme.SearchModal.footer.closeText": { - "message": "to close", - "description": "The explanatory text of the action for Escape key" - }, - "theme.SearchModal.footer.closeKeyAriaLabel": { - "message": "Escape key", - "description": "The ARIA label for the Escape key button that close the modal" - }, - "theme.SearchModal.footer.searchByText": { - "message": "Search by", - "description": "The text explain that the search is making by Algolia" - }, - "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "No results for", - "description": "The text explains that there are no results for the following search" - }, - "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "Try searching for", - "description": "The text for the suggested query when no results are found for the following search" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "Believe this query should return results?", - "description": "The text for the question where the user thinks there are missing results" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "Let us know.", - "description": "The text for the link to report missing results" - }, - "theme.SearchModal.placeholder": { - "message": "Search docs", - "description": "The placeholder of the input of the DocSearch pop-up modal" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "Try again", - "description": "The label of the button to try again rendering when the React error boundary captures an error" - }, - "theme.common.skipToMainContent": { - "message": "Skip to main content", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "Tags", - "description": "The title of the tag list page" - } -} diff --git a/i18n/de/docusaurus-plugin-content-blog/options.json b/i18n/de/docusaurus-plugin-content-blog/options.json deleted file mode 100644 index 9239ff70..00000000 --- a/i18n/de/docusaurus-plugin-content-blog/options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": { - "message": "Blog", - "description": "The title for the blog used in SEO" - }, - "description": { - "message": "Blog", - "description": "The description for the blog used in SEO" - }, - "sidebar.title": { - "message": "Recent posts", - "description": "The label for the left sidebar" - } -} diff --git a/i18n/de/docusaurus-plugin-content-docs/current.json b/i18n/de/docusaurus-plugin-content-docs/current.json deleted file mode 100644 index 36b4849a..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.defaultSidebar.category.Getting Started": { - "message": "Getting Started", - "description": "The label for category Getting Started in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Interactions": { - "message": "Interactions", - "description": "The label for category Interactions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Application Commands": { - "message": "Application Commands", - "description": "The label for category Application Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.UI Components": { - "message": "UI Components", - "description": "The label for category UI Components in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Extensions": { - "message": "Extensions", - "description": "The label for category Extensions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Commands": { - "message": "Commands", - "description": "The label for category Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Pages": { - "message": "Pages", - "description": "The label for category Pages in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Voice": { - "message": "Voice", - "description": "The label for category Voice in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Popular Topics": { - "message": "Popular Topics", - "description": "The label for category Popular Topics in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar defaultSidebar" - } -} diff --git a/i18n/de/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png b/i18n/de/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png deleted file mode 100644 index 7480e1da90a413f8dfe8e13b66a9a2a8c5dc2bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40520 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 CfS#QI diff --git a/i18n/de/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg b/i18n/de/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg deleted file mode 100644 index ce6b5110ab3b4285f55402fb88c1b8a8f6ba9900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78518 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 diff --git a/i18n/de/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png b/i18n/de/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png deleted file mode 100644 index 32a47d0424f1ab420ca363682a12460aff040c91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39618 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 aeS&BlM7jQ%=K2BnBlKRJKmVP^m;VLX8_o0p diff --git a/i18n/de/docusaurus-plugin-content-docs/current/extensions/_category_.json b/i18n/de/docusaurus-plugin-content-docs/current/extensions/_category_.json deleted file mode 100644 index 309b494a..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/extensions/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 5, - "label": "Extensions", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json b/i18n/de/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json deleted file mode 100644 index 652aa4ee..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Bridge" -} \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx b/i18n/de/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx deleted file mode 100644 index 451775d3..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Bridge ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -## Concept - -Let's say that you want to make a command that is both a Slash Command and a Prefixed Command. Now, you could just copy and paste the code from the first command callback to the other and make some adjustments, but that's not very efficient. - -This is where the `ext.bridge` module comes in. It allows you to use one callback to make both a Slash Command and a Prefixed Command. - -### Example Usage - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def hello(ctx): - await ctx.respond("Hello!") - -bot.run("TOKEN") -``` - - - -

- - hello - -
- Hello! - - - - !hello - - - -
- - !hello - -
- Hello! -
- - -## Syntax - -First, instead of using `discord.Bot` or `commands.Bot`, we use `bridge.Bot`. `bridge.Bot` does inherit from `commands.Bot`, so you can do anything with `bridge.Bot` that `commands.Bot` can do. -Then, we define a command with `@bot.bridge_command()`. This makes a Bridge Command, which has both a Prefixed Command counterpart and a Slash Command counterpart. -Next, the callback has access to a `ctx` object, which is the context of the command. This context is either of `BridgeApplicationContext` type or `BridgeExtContext`. Because of that, it makes detecting how the function was called easier. - -### Using Bridge Commands in a Cog - -Like Slash Commands and Prefixed Commands, you can use Bridge Commands in a Cog. You can do this by using the `bridge_command` decorator. Here's an example: - -```python -import discord -from discord.ext import bridge, commands - -class Greetings(commands.Cog): - def __init__(self, bot): - self.bot = bot - - @bridge.bridge_command() - async def hello(self, ctx): - await ctx.respond("Hello!") - - @bridge.bridge_command() - async def bye(self, ctx): - await ctx.respond("Bye!") - -def setup(bot): - bot.add_cog(Greetings(bot)) -``` - -The cog will automatically split the Bridge Command into their Slash Command and Prefixed Command counterparts. - - - -
- - hello - -
- Hello! -
- - - !hello - - - -
- - !hello - -
- Hello! -
- - -
- - bye - -
- Bye! -
- - - !bye - - - -
- - !bye - -
- Bye! -
-
- -### Deferring - -You can defer if you want to communicate to the user that your bot is busy processing the command. This is done by using `ctx.defer()`. For the Slash Command implementation, `ctx.defer()` calls the function that gives out a "Bot is thinking" message. For the Prefixed Command implementation, `ctx.defer()` enables the typing indicator. - - - -### Options - -Options are pretty straightforward. You just specify them like you do with prefixed commands, and you're all set! - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def sum(ctx, a: int, b: int): - await ctx.respond(a + b) - -bot.run("TOKEN") -``` - - - -
- - sum - -
- 4 -
- - - !sum 2 2 - - - -
- - !sum 2 2 - -
- 4 -
-
diff --git a/i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json b/i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json deleted file mode 100644 index 63f8e08e..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx b/i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx deleted file mode 100644 index bf345c07..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Command Groups ---- - -Command groups are a way to create subcommands for your commands. For example, `!afk set` or `!afk -remove`. - -## Syntax - -Creating a command group is very simple. - -```python title="Command Groups Example" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!') - -@bot.group() -async def afk(): - pass - -@afk.command() -async def set(): - ... - -@afk.command() -async def remove(): - ... - -# Another command group - -@bot.group(invoke_without_command=True) # Indicates if the group callback should begin parsing and invocation only if no subcommand was found. -async def math(ctx): - await ctx.send('Subcommand not found') - -@math.command() -async def add(ctx, a: int, b: int): - ... - -@math.command() -async def subtract(ctx, a: int, b: int): - ... -``` - -To create a command group, the command's decorator must be `@bot.group`. Once you have a command with -that decorator, you can use `@function.command()`, such as `@math.command()`. Now, you have subcommand -groups! - - - -:::info Related Topics - -- [Prefixed Commands](./prefixed-commands.mdx) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx b/i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx deleted file mode 100644 index e84fd42d..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx +++ /dev/null @@ -1,481 +0,0 @@ ---- -title: Help Command ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Pycord's `commands` extension comes with a built-in help command. In this guide, we will take a look at them as well as learn how to create your own. Let's dive in! - -:::note - -This guide demonstrates using object-oriented programming and subclassing to make a help command for your -Pycord bot. It is important to understand these two concepts before continuing. - -**Learning Resources**: - -- [W3Schools - Python Subclassing](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools - Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -::: - -## The Wrong Way - -A popular way to create a help command is to disable the built-in help command and create your own. This is not recommended as it will lead to a lot of confusion. - -```python title="The Wrong Way" -bot = commands.Bot(command_prefix='!', help_command=None) -# OR -bot.help_command = None -# OR -bot.remove_command("help") - -@bot.command() -async def help(ctx, *, argument=None): - ... -``` - -While it's possible to create a help command this way, doing so does not utilize the full capabilities -of making one with Pycord. Making a help command with subclassing and OOP will save time and effort. - -## Types of Help Commands - -There are two types of built-in help commands: - -- [`DefaultHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.DefaultHelpCommand) -- [`MinimalHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.MinimalHelpCommand) - -`DefaultHelpCommand` is the command enabled by default. It isn't the best looking, but `MinimalHelpCommand` can help make it look a bit better. - - - - -```python title="Default Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.DefaultHelpCommand()) # help_command is DefaultHelpCommand by default so it isn't necessary to enable it like this -# We enable it here for the sake of understanding - -... - -bot.run("token") -``` - - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- - -```python title="Minimal Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.MinimalHelpCommand()) - -... - -bot.run("token") -``` - - - - !help - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
- -
- -
- -## Updating Built-in Help Commands - -Let's try to make the `MinimalHelpCommand` look better. We can do this by putting its content in an -embed. - -```python title="Minimal Help Command Example" -bot = commands.Bot(command_prefix='!') - - -class MyNewHelp(commands.MinimalHelpCommand): - async def send_pages(self): - destination = self.get_destination() - for page in self.paginator.pages: - emby = discord.Embed(description=page) - await destination.send(embed=emby) - -bot.help_command = MyNewHelp() -``` - -Let's go through the code. - -First, we create a new class called `MyNewHelp`. This class is a subclass of `MinimalHelpCommand`. - -Next, we override the `send_pages` method. This method is responsible for sending the help command to -the user. We override this method because we don't want to change the content of the pages, just how -they are sent. - -We use the `get_destination` method to get the destination of the message. This is the channel or use that the help -command is to be sent to. - -We use the `paginator.pages` property to get the different pages of the help command. We put the page -in an embed, and then send the embed to the destination channel. - -Finally, we set this as our new help command using `bot.help_command = MyNewHelp()`. - - - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a - category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
-
- -## Creating Your Help Command - -Not satisfied with the built-in help commands? You can create your own! - -For this, we will subclass the `HelpCommand` class. - -There are 4 methods that we need to override: - -- `HelpCommand.send_bot_help(mapping)` that gets called with `help` -- `HelpCommand.send_command_help(command)` that gets called with `help ` -- `HelpCommand.send_group_help(group)` that gets called with `help ` -- `HelpCommand.send_cog_help(cog)` that gets called with `help ` - -### Bot Help - -```python title="Bot Help Example" -class MyHelp(commands.HelpCommand): - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help") - for cog, commands in mapping.items(): - command_signatures = [self.get_command_signature(c) for c in commands] - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's go through the code. - -- First, we create a new class called `MyHelp`. This class is a subclass of `HelpCommand`. - -- Next, we override the `send_bot_help` method. This method is responsible for sending the main help - command to the user. - -- We create an embed with the title "Help". - -- We iterate through `mapping.items()`, which returns a list of tuples, the first element being the - cog and the second element being a list of commands. - -- By using `self.get_command_signature(c)` we get the signature of the command, also known as the - `parameters` or `arguments`. - -- There is a chance that the cog is empty, so we use `if command_signatures:`. - -- We get the name of the cog using `getattr(cog, "qualified_name", "No Category")`. This calls the - cog's attribute `qualified_name` which returns "No Category" if the cog has no name. - -- We add a field to the embed with the name of the cog and the value of the command signatures. - -- Finally, we send the embed to the channel. - -Let's improve the code a little. - -```python title="Improved Bot Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - command_signatures = [self.get_command_signature(c) for c in filtered] - - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Now the help command won't show commands that the user can't use, as well as aliases for commands. -Let's get the help command to show command aliases. - -### Command Help - -This function is called when the user uses `help `. - -```python title="Command Help Example" -class MyHelp(commands.HelpCommand): - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command), color=discord.Color.random()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's quickly go through the code we haven't discussed yet. - -- In line 3, we create an embed with a title the signature of the command (so that the title of the - embed looks like ` [parameter]`), and a random color. - -- In lines 4 and 5, we get the command's `help` description and add it to the embed. The help description - of a command can be specified in the docstrings of a command function. For example: - - ```` - ```python - @bot.command() - async def ping(ctx): - """Returns the latency of the bot.""" - await ctx.send(f"Pong! {round(bot.latency * 1000)}ms") - ``` - ```` - -- Line 6 is shorthand for - - ```python - alias = command.aliases - if alias: - ... - - # is the same as - - if alias := command.aliases: - ... - ``` - - A very helpful (but not well-known) Python shorthand! - -- In line 7, we get the aliases of the command and add them to the embed. - -### Cog Help - -This is pretty easy! - -```python title="Custom Cog Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_cog_help(self, cog): - embed = discord.Embed(title=cog.qualified_name or "No Category", description=cog.description, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(cog.get_commands()): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Once again, we create an embed, get the commands that the user can use, and add them to the embed. - -### Group Help - -Similar to the cog help, this is pretty easy! - -```python title = "Custom Group Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_group_help(self, group): - embed = discord.Embed(title=self.get_command_signature(group), description=group.help, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(group.commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Add all of these methods together, and you have a fully functioning help command! - -
-Click to see the final code for this section -
- -:::note - -The following code has been slightly edited from the tutorial version. - -::: - -```python title="Custom Help Command Example" -class SupremeHelpCommand(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - if command_signatures := [ - self.get_command_signature(c) for c in filtered - ]: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command) , color=discord.Color.blurple()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_help_embed(self, title, description, commands): # a helper function to add commands to an embed - embed = discord.Embed(title=title, description=description or "No help found...") - - if filtered_commands := await self.filter_commands(commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No help found...") - - await self.get_destination().send(embed=embed) - - async def send_group_help(self, group): - title = self.get_command_signature(group) - await self.send_help_embed(title, group.help, group.commands) - - async def send_cog_help(self, cog): - title = cog.qualified_name or "No" - await self.send_help_embed(f'{title} Category', cog.description, cog.get_commands()) - -bot.help_command = SupremeHelpCommand() -``` - -
-
- -## Command Attributes - -How can you add cooldowns, set aliases, and change the name of help commands? Command attributes can -help you do all of that, and more! - -```python title="Help Command Attributes" -attributes = { - 'name': "help", - 'aliases': ["helpme"], - 'cooldown': commands.CooldownMapping.from_cooldown(3, 5, commands.BucketType.user), -} - -# You need to use CooldownMapping.from_cooldown(rate, per, type) - -bot.help_command = MyHelp(command_attrs=attributes) -``` - -## Error Handling - -When a user attempts to use a command that does not exist, we need to inform the user. -We can do this by overriding the `send_error_message` function. - -```python title="Custom Help Error Example" -class MyHelp(commands.HelpCommand): - async def send_error_message(self, error): - embed = discord.Embed(title="Error", description=error, color=discord.Color.red()) - channel = self.get_destination() - - await channel.send(embed=embed) -``` - - - - !help update_pycord - - - - Command 'update_pycord' not found. - - - - -## Credits - -Most of the content from this guide is from -[InterStella0's walkthrough guide on subclassing HelpCommand](https://gist.github.com/InterStella0/b78488fb28cadf279dfd3164b9f0cf96). -Thanks to InterStella0 for making this guide amazing. - -:::info Related Topics - -- [Subclassing Bots](../../Popular-Topics/subclassing-bots) -- [Prefixed Commands](./prefixed-commands) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx b/i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx deleted file mode 100644 index 87bef7ac..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx +++ /dev/null @@ -1,324 +0,0 @@ ---- -title: Prefixed Commands -description: Learn how to use the commands extension for Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Before Discord added slash commands, all bots had prefixed commands. A user would type the bot's prefix -followed by a word or phrase to invoke a command, such as `?help` or `!help`. -However, this prefixed commands system isn't native to Discord! Developers made use of an `on_message` -event to check if the message began with a certain character, then invoke the command. Every time a -message was sent, the bot would see the message and check for its "prefix" - -The syntax becomes a little more complicated when you want to have multiple commands. There are several -disadvantages to this system. This is where the commands extension comes in. `ext.commands` has -various advantages, such as: - -- Simpler syntax -- Easier to use -- Easier to parse user input -- Comes with built-in help commands -- Comes with a built-in system for categorizing commands - - - - -```python title="Prefixed Commands with Events" -import discord - -client = discord.Client() - -@client.event -async def on_message(message): - if message.content.startswith("!ping"): - await message.channel.send("Pong!") - - elif message.content.startswith("!announce"): - if len(message.content.split(" ")) < 3: - await message.channel.send("You need to specify a title and a message. Correct usage: `!announce Hello Hello everyone!`") - return - - msg = message.content.split(" ", 2) - title = msg[1] - content = msg[2] - - await message.channel.send("**{}**\n{}".format(title, content)) - - elif message.content.startswith("!"): - await message.channel.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !help - - - Unknown Command. - -
- -
- - -```python title="The Commands Extension" -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix="!", intents=intents) - -@bot.command() -async def ping(ctx): - await ctx.send("Pong!") - -@bot.command() -async def announce(ctx, title, *, message): - await ctx.send("**{}**\n{}".format(title, message)) - -@bot.event -async def on_command_error(ctx, error): - if isinstance(error, commands.CommandNotFound): - await ctx.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !pycord - - - Unknown command. - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
- !announce -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The commands extension has many more uses. This example only showcases the basic features mentioned -in the previous example. Other things you can do with the commands extension include using a different -built-in help command and creating your own. The following tutorials showcase these. - -::: - -
-
- -## Syntax - -Before we check out the syntax, let's take a look at the bot classes. - -> `discord.Client` - Contains only events. -> -> `discord.Bot` - Subclasses `discord.Client`, adds commands. -> -> `discord.ext.commands.Bot` - Subclasses `discord.Bot`, adds prefixed commands, cogs, and more. - -This means that `discord.ext.commands.Bot` has both slash commands and prefixed commands, as well as -events, cogs and more. - -Now let's look at the syntax. - -```python title="A Simple Prefixed Bot" -import discord -from discord.ext import commands # Import the commands extension -# discord.ext.commands are not the same as discord.commands! - -intents = discord.Intents.default() #Defining intents -intents.message_content = True # Adding the message_content intent so that the bot can read user messages - -bot = commands.Bot(command_prefix="!", intents=intents) # You can change the command prefix to whatever you want. - -@bot.command() # This is the decorator we use to create a prefixed command. -async def ping(ctx): # This is the function we will use to create the command. - await ctx.send("Pong!") # This is the response the bot will send. - - -bot.run("token") # Run the bot with your token. -``` - - - - !ping - - - Pong! - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The help command is a built-in command and is enabled by default. You will learn more about it in the -following guides. - -::: - -## Parameters - -Prefixed commands can take parameters, just like slash commands. You can specify the parameters in -the function itself. - -```python title="Parameters Example 1" -@bot.command() -async def echo(ctx, *, message): - await ctx.send(message) -``` - -`ctx` is the context of the message. `*` means that the parameter can be any number of words. `message` -is the parameter. If you had not passed `*`, `message` would only have been one word. - -For example, if a user had used `!echo hello world`, `message` would have been `hello`. Since we -passed `*`, `message` is `hello world`, or the rest of the message. - -We can pass multiple parameters too! - -```python title="Parameters Example 2" -@bot.command() -async def echo(ctx, channel:discord.TextChannel, title, *, message): - await channel.send("**{}**\n{}".format(title, message)) -``` - -In the example above, `channel` is a parameter that is of type `discord.TextChannel`. When you -specify the type of the parameter, Pycord will automatically try to convert the parameter to that type. -That is why you can use `channel.send` directly without needing to convert it first. - -We also have a new parameter, `title`. This does not have a type, so it will be a string. `*` means -that the rest of the message belongs to the next parameter, in this case, `message`. - -When a user types `!echo #general Greetings! Hello World!`, `channel` will be the text channel -`#general`, `title` will be `Greetings!` and `message` will be `Hello World!`. - -Let's take an example where the user passes `!echo #general Holiday Greetings! Greetings to you all!`. -Here, the user wants the title to be "Holiday Greetings!" and the message to be "Greetings to you all!". -However, since Pycord parses the message at whitespaces, the title will end up being "Holiday" and the -message "Greetings! Greetings to you all!". The user can prevent this by typing `!echo "Holiday -Greetings!" Greetings to you all!`. - - - - - - !echo #general Holiday Greetings! Greetings to you all! - - - Holiday -
- Greetings! Greetings to you all! -
- - !echo #general "Holiday Greetings!" Greetings to you all! - - - Holiday Greetings! -
- Greetings to you all! -
-
- -Let's check out another example for parameters and parameter types. - -```python title="Parameters Example 3" -import random - -@bot.command() -async def gtn(ctx, guess:int): - number = random.randint(1, 10) - if guess == number: - await ctx.send("You guessed it!") - else: - await ctx.send("Nope! Better luck next time :)") -``` - -If you had not specified the type of the parameter, it would have been a string. And since `"5"` is not -the same as `5` in python, the bot would have responded with "Nope! Better luck next time :)". -Even if you do not specify the type of the parameter, you can still convert it later on, in this case, -with `int(guess)`. - -:::info Related Topics - -- [Command Groups](groups) -- [Rules and Common Practices](../../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json b/i18n/de/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json deleted file mode 100644 index baeba701..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Pages", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx b/i18n/de/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx deleted file mode 100644 index be90b035..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Paginator Basics ---- - -# Paginator Basics - -## [Page](https://docs.pycord.dev/en/stable/ext/pages/index.html#page) - -This class contains two attributes: `content` and `embeds`, which correspond to the attributes of the same name on the -`discord.Message` class. -To create a new Page, use the following syntax: - -```py -import discord -page = Page(content="My Page Content", embeds=[discord.Embed(title="My First Embed Title")]) -``` - -## [PageGroup](https://docs.pycord.dev/en/stable/ext/pages/index.html#pagegroup) - -This class represents a group of pages. It uses most of the same parameters as `Paginator`, which allows each -`PageGroup` to effectively have its own settings and behaviours. - -## [Paginator](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator) - -This is the main class for `ext.pages`, and is used to control most of the functionality of the extension. - -In its most basic form, with no arguments provided (default values listed below), a paginator can be created like so: - -```py title="Paginator Example" -import discord -from discord.ext.pages import Paginator, Page - -my_pages = [ - Page( - content="This is my first page. It has a list of embeds and message content.", - embeds=[ - discord.Embed(title="My First Embed Title"), - discord.Embed(title="My Second Embed Title"), - ], - ), - Page( - content="This is my second page. It only has message content.", - ), - Page( - embeds=[ - discord.Embed( - title="This is my third page.", - description="It has no message content, and one embed.", - ) - ], - ), -] -paginator = Paginator(pages=my_pages) -``` - -The only required parameter for `Paginator` is the `pages` parameter, which is usually a list of `Page` objects. - -You can also pass in a list of `PageGroup` objects, a list of strings, a list of embeds, or a list of lists of embeds. - -Once the `Paginator` instance is created, you can call either -[`Paginator.send()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.send) -or [`Paginator.respond()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.respond) -to send a message or response with the paginator's contents. - -#### Depending on what's being passed to the `pages` parameter, the behaviour of the paginator may differ: - -- Passing a list of `PageGroup` objects will essentially treat each `PageGroup` as its own Paginator, with most - `Paginator` attributes able to be set independently for each `PageGroup`. - \- Each `PageGroup` accepts its own `pages` parameter, which inherits the same behaviour as the `pages` parameter - of `Paginator`, except it cannot contain other `PageGroup` objects. -- If a page is a `Page` object, this will allow you to specify both the `discord.Message.content` and - `discord.Message.embeds` attributes for a page. - \- **This is the preferred method of defining a page.** -- If a page is a string, this will be used for the `discord.Message.content` attribute. This type of page cannot have - any embeds. -- If a page is a list of embeds, this will be used for the `discord.Message.embeds` attribute. This type of page - cannot have any message content. -- If a page is a list of lists of embeds, each parent list item will create a page containing all embeds from its - child list. This type of page cannot have any message content. - -#### Parameters for the `Paginator` class which have default values: - -- `show_disabled` **:** `True` - - Show buttons that are disabled (i.e. can't be clicked) -- `author_check` **:** `True` - - Only the author can interact with the paginator. -- `timeout` **:** `180` _(seconds)_ - - The paginator will time out and become inactive after this many seconds. -- `disable_on_timeout` **:** `True` - - If the paginator times out, it will be automatically disabled and all buttons will be unusable. -- `use_default_buttons` **:** `True` - - Use the default set of 4 buttons and a page indicator. -- `show_indicator` **:** `True` - - When using the default buttons, shows a middle 5th button with the current/total page numbers. - -**For other parameters that can be set on initialization, please check the -[API Reference](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator)** - -## [PaginatorButton](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatorbutton) - -This class represents a button used to navigate between the pages of a paginator. It's also used to create the page -indicator. - -When creating your own custom buttons, you can either use this class directly or subclass it to add any additional -functionality you may need. - -To add custom buttons to the paginator instead of the default navigation buttons, you have two options to do so: - -1. **Using the `custom_buttons` parameter of `Paginator`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - buttons = [ - PaginatorButton("first", label="<<-", style=discord.ButtonStyle.green), - PaginatorButton("prev", label="<-", style=discord.ButtonStyle.green), - PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True), - PaginatorButton("next", label="->", style=discord.ButtonStyle.green), - PaginatorButton("last", label="->>", style=discord.ButtonStyle.green), - ] - paginator = Paginator( - pages=["Page 1", "Page 2", "Page 3"], - show_indicator=True, - use_default_buttons=False, - custom_buttons=buttons, - ) - ``` -2. **Using `Paginator.add_button()`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"], use_default_buttons=False) - paginator.add_button(PaginatorButton("prev", label="<", style=discord.ButtonStyle.green)) - paginator.add_button(PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True)) - paginator.add_button(PaginatorButton("next", label=">", style=discord.ButtonStyle.green)) - ``` - -If you want to use the default navigation buttons, but not all of them, you can also use `Paginator.remove_button()` to -selectively remove them: - -```py -from discord.ext.pages import Paginator - -paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"]) -paginator.remove_button("first") -paginator.remove_button("last") -``` - -## [PaginatorMenu](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatormenu) - -This class represents the `discord.Select` menu used to navigate between `PageGroup` instances. In most situations, you -will not need to interact with this class directly. - -If you do subclass it, you'll likely want to call `super()` in your `__init__` method to ensure that the `PageGroup` -navigation functionality is retained. - -## Usage Examples - -For a comprehensive list of examples showing all `Paginator` functionality, please see the -[example in cog form](https://github.com/Pycord-Development/pycord/blob/master/examples/views/paginator.py) in the repo. - -## Support and Feedback - -If you have any questions, suggestions, or feedback for `ext.pages`, please join the -[Discord server](https://discord.gg/pycord). diff --git a/i18n/de/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx b/i18n/de/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx deleted file mode 100644 index b8d68925..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Paginator FAQ ---- - -# Paginator FAQ - -- **What's the difference between `Paginator.send()` and `Paginator.respond()`?** - - `Paginator.send()` is used to send a channel message (DMChannel or TextChannel) with the paginator. - - `Paginator.respond()` is used to send an interaction response (or followup) message with the paginator. - -- **How can the bot send a paginator to a different destination than where it was invoked?** - - Use the `target` parameter in `Paginator.send()` or `Paginator.respond()`. - - You can also set the `target_message` parameter to control what's shown as a response where the paginator was originally invoked. - - For `Paginator.respond()`, this parameter is required if `target` is set, as an interaction requires being responded to. - -- **How can I change the paginator's behavior without re-creating and re-sending it?** - - Use the `Paginator.update()` method. - -- **How can I make the bot actually do something with the contents of a page?** - - Use the (upcoming) `Paginator.page_action()` method. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json b/i18n/de/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json deleted file mode 100644 index 36dfb009..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Tasks" -} \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx b/i18n/de/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx deleted file mode 100644 index 848f6066..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Tasks ---- - -## Concept - -So you want to run a background task running at some specified interval? Thankfully, that's a common thing to do, whether you're working with some API or handling some background logic don't worry, the Pycord tasks extension is here to make life easier for you! - -With the tasks extension, you can make background tasks without worrying about the asyncio hell and mind bogglers like "what if my internet dies" and "how do I handle reconnecting" with the added benefit of a lot of useful additions that are one line of code away! - -### Example Usage - -```py -import discord -from discord.ext import tasks - -bot = discord.Bot() - -@bot.event -async def on_ready(): - very_useful_task.start() - -@tasks.loop(seconds=5) -async def very_useful_task(): - print('doing very useful stuff.') - -bot.run("TOKEN") -``` - -If you do run this code in your terminal you should see something like this after about 15 seconds: - -``` -doing very useful stuff. -doing very useful stuff. -doing very useful stuff. -``` - -For a more useful example here's a task in a cog context ripped straight from the [docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#recipes): - -```py -from discord.ext import tasks, commands - -class MyCog(commands.Cog): - def __init__(self): - self.index = 0 - self.printer.start() - - def cog_unload(self): - self.printer.cancel() - - @tasks.loop(seconds=5) - async def printer(self): - print(self.index) - self.index += 1 -``` - -As you'd expect this will increment a number and print it out every 5 seconds like so: - -```sh -0 -# 5 seconds later -1 -# 5 more seconds later -2 -# ... -``` - -## [Tasks](https://docs.pycord.dev/en/stable/ext/tasks/index.html) - -Now let's get into the nitty-gritty of tasks. - -As you've seen tasks can work in both outer scope and class contexts and the handle is roughly the same, you define a task using the `tasks.loop` decorator and use the `start` method to start it, the difference is you add the `self` argument when in a class context so since most people have all their bot's code in Cogs all the following code blocks will be in a Cog context to make it easy to copy it then apply whatever modifications you might need! - -### [Creating a task](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop) - -A look at `discord.ext.tasks.loop`'s definition in the documentation reveals that: - -1. As you've seen before it expects the time between each execution, that however doesn't have to be in seconds as - there are `seconds`, `minutes` and `hours` parameters to make it easier for us, they can also be floats in case you want - ultra-precision. -2. You can also pass in a `datetime.time` object or a sequence of them in the `time` parameter which will make it run - at the specified time(s). -3. You can pass in how many times a loop runs before it stops by passing in the `count` parameter, you can use `None` - to make it run forever which is also the default. -4. The loop function **_must_** be a coroutine. - -These are all really useful, and they aren't the only parameters so if you want to know more about them check out the -[docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop)! - -### Attributes - -A task has the following attributes: - -- `current_loop`: The current loop the task is on. -- `hours`, `minutes`, `seconds`: attributes that represent the time between each execution. -- `time`: A list of datetime.time objects that represent the times the task will run, returns `None` if no datetime - objects were passed. -- `next_iteration`: A `datetime.datetime` object that represents the next time the next iteration of the task will - run, can return `None` if the task stopped running. - -These attributes serve as a really powerful asset to get info about your loop. - -### Example - -Now let's create a cog that handles a leaderboard we have in our bot using Tasks then explain what we did after that and -also provide a refresher of how slash commands groups work in cogs. - -For the sake of this example let's pretend that we have a leaderboard module that does all the leaderboard handling for -us and that computing the leaderboard is very expensive computationally wise, so we want to store one version of it that -gets regularly updated instead of generating it every time someone calls the `/leaderboard view` command. - -```py -from discord.ext import tasks, commands -from discord.commands import SlashCommandGroup, CommandPermissions - -from leaderboard import * # Mock leaderboard module. - -class LeaderboardCog(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.update_leaderboard.start() - self.leaderboard_embed = generate_leaderboard_embed() - - leaderboard = SlashCommandGroup(name='leaderboard', description='Leaderboard commands.') - - @tasks.loop(minutes=10) - async def update_leaderboard(self): - print('Updating leaderboard...') - await update_leaderboard() - self.leaderboard_embed = generate_leaderboard_embed() - - @update_leaderboard.before_loop - async def before_update_leaderboard(self): - await self.bot.wait_until_ready() - print("About to start updating leaderboard.") - - @update_leaderboard.after_loop - async def after_update_leaderboard(self): - leaderboard_cleanup() - print("Stopped updating leaderboard.") - - @update_leaderboard.error - async def update_leaderboard_error(self, error): - print(f"Oh no, an error occurred while updating the leaderboard. Error: {error}") - - @leaderboard.command() - async def view(self, ctx): - await ctx.respond(embed=self.leaderboard_embed) - - @leaderboard.command() - async def update_info(self, ctx): - await ctx.respond(f"""***Leaderboard Info***\n - Last update: {(600 - self.update_leaderboard.next_iteration.timestamp())//60} minutes ago.\n - Next update: in {self.update_leaderboard.next_iteration.timestamp() // 60} minutes.\n - Time between loops: {self.update_leaderboard.minutes} minutes.\n - Times updated this session: {self.update_leaderboard.current_loop}. - Running? {self.update_leaderboard.is_running()} - Failed? {self.update_leaderboard.failed()}""", ephemeral=True) - - # Now for the owner only commands: - - leaderboard_config = SlashCommandGroup(name="leaderboard_config", description="Leaderboard configuration commands", permission=[CommandPermissions("owner", 2, True)]) - - @leaderboard_config.command() - async def set_time_between_updates(self, ctx, minutes: int): - self.update_leaderboard.change_interval(minutes=minutes) - await ctx.respond(f"Set time between updates to {minutes} minutes.") - - @leaderboard_config.command() - async def stop(self, ctx): - self.update_leaderboard.stop() - await ctx.respond("Stopped the leaderboard update.") - - @leaderboard_config.command() - async def restart(self, ctx): - self.update_leaderboard.restart() - await ctx.respond("Restarted the leaderboard update.") - -def setup(bot): - bot.add_cog(LeaderboardCog(bot)) -``` - -Phew, that was quite a bit of code. - -Now to explain what's going on: - -First things first we create a cog and in its `__init__` function we start the `update_leaderboard` task and generate -the first instance of our leaderboard's embed. - -After that, we define the `update_leaderboard` task using the `loop` decorator, and we make it run every ten minutes by -passing 10 to the `minutes` parameter. - -Then that we define the `before_update_leaderboard` task using the `before_loop` decorator, and we make it wait until the -bot is ready before starting the task. - -Next up we define the `after_update_leaderboard` task using the `after_loop` decorator, and we make it clean up the -leaderboard when the loop finally stops running. - -Then we define the `update_leaderboard_error` task using the `error` decorator, and we make it print any errors that may -occur while we update our leaderboard to the console. - -Then we get into the fun stuff, we create a slash command group using the `SlashCommandGroup` class and name it -`leaderboard`, we then create the `view` sub-command which sends the embed generated when the leaderboard is updated and -`update_info` which shows a lot of data about the task using some attributes and functions available to us. - -We also create a slash command group called `leaderboard_config` which is only available to the owner of the bot. - -Then we create the `set_time_between_updates` sub-command which takes in the time in minutes and changes the time -between updates of the leaderboard using the `change_interval` method, the `stop` sub-command which stops the task using -the `stop` method and `restart` which restarts the task using the `restart` method. - -Finally, we add the `LeaderboardCog` cog to the bot, and we're done! - -I'd highly recommend you check the tasks extension -[documentation](https://docs.pycord.dev/en/stable/ext/tasks/index.html) for more info on how to use them and what other -functions they have. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/getting-started/_category_.json b/i18n/de/docusaurus-plugin-content-docs/current/getting-started/_category_.json deleted file mode 100644 index 9d6255f5..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/getting-started/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 3, - "label": "Getting Started", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx b/i18n/de/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx deleted file mode 100644 index 7fbabf77..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: Creating Your First Bot ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -Excited to create your first bot? Once you [install Pycord](../installation.mdx), you can start right -away! - -## Creating the Bot Application - -Just like how you need to sign up to use Discord, your bot also has to be signed up. To do this, -you should: - -1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click - on . -2. Give your bot a name, and click . -3. Now, you should see a page like this. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdW3OQnwUhacopqSWw%2F-Mjd_-mxrJCrzmaXrAg8%2Fimage.png?alt=media&token=b8e2ae6c-2290-4d37-ad7c-eb412f3fb00e) -4. Click on the tab on the left side of the screen. -5. Click on . -6. You can give it a name, change the Avatar, etc. - -## Inviting the bot - -Now, lets get the bot added to some servers. Go to the tab -in the left pane and select `bot` and `applications.commands` as scopes. - -You may want your bot to have application commands, which is what the `application.commands` scope -allows your bot to make. - -Next, you want to choose what permissions the bot will have and select them. For now, you can just -give your bot the `administrator` permission, which gives your bot every permission. Once you select -your bot's permissions, click on to get the bot invite link. - -:::tip - -When your bot is all ready to go, make sure that administrator permissions aren't selected unless -your bot truly needs them. Try selecting only permissions the bot will need. For testing, -Administrator permissions are fine. - -::: - -![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-Mk6tNY3LfDkjd6pqdpL%2F-Mk6tkdpddEWoa2jczZk%2Fimage.png?alt=media&token=52c8a29f-a798-48f8-a8c7-4ecca2681f79) - -You can use this link to invite the bot. - -## Tokens - -Now that you have an account for your bot, you need to log in. To log in, we need the bot's -password. All users and bots have a "token." You may think of this token as a password, as this allows -us to log our bot into Discord. - -Tokens are "snowflakes." Not actual snowflakes, though. Just like how no two snowflakes in real life have the same -pattern, snowflakes in computers are unique things - no two bots have the same token - so a token is -considered a snowflake. A Discord user ID is also a snowflake. - -Now, lets get your bot's token. To do this, you want to: - -1. Go back to the tab. -2. Click on the button in the "Token" section. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdbU12JISJorAZxrKH%2F-MjdbpUsapzb5n15Po5P%2Fimage.png?alt=media&token=118e259f-940a-4f6c-b3a3-c29f3a54100d) - -Now, you have your bot's token copied to your clipboard. - -:::danger - -Do not, under any circumstances, give your token to anyone. Even if you are contacted by someone -claiming to be Discord staff, do not give them your bot's token. They are lying to you to try and -gain access to your bot. If an unauthorized user gains access to your bot's token, they can access -your bot and use it in malicious ways. - -Never push your token to GitHub or include it in your code. One way to prevent your token from -getting leaked is to store it in `.env` files. - -::: - -### Protecting Tokens - -#### Using dotenv - -You can store your tokens in `.env` files. This is a simple way to store sensitive information. - -1. Create a file with the name `.env` (only the extension, with a dot/period at the start and without a name before it). -2. Define the token in the `.env` file (replace the example value with your token). - ```env title=".env" - TOKEN = NzkyNzE1NDU0MTk2MDg4ODQy.X-hvzA.Ovy4MCQywSkoMRRclStW4xAYK7I - ``` -3. Install [`python-dotenv`](https://pypi.org/project/python-dotenv/). - ```bash - python -m pip install python-dotenv - ``` -4. Load the token from the `.env` file. - ```python - import dotenv - dotenv.load_dotenv() - token = str(os.getenv("TOKEN")) - ``` -5. Pass your token as parameter when running the bot. - ```python - client.run(token) - ``` - -:::tip - -If you are using Git to track your bot's changes, you should create a file called `.gitignore` and add -`.env` to it. This stops your `.env` file from getting tracked along with the rest of your code, and -will not be pushed to a remote Git repository. As a consequence, it will stay secure on your local machine. - -::: - -## Coding the Basics - -Here's an example of code you'll write with Pycord: - -```py -import discord -import os # default module -from dotenv import load_dotenv - -load_dotenv() # load all the variables from the env file -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") - -bot.run(os.getenv('TOKEN')) # run the bot with the token -``` - - - -
- - hello - -
- Hey! -
-
-
- -Let's go through the code. First, the imports. - -```py -import discord -import os -from dotenv import load_dotenv -``` - -In the first line, `import discord`, we import Pycord. Although you install Pycord with `pip install py-cord`, you -import it with `import discord`. This is so it's as easy as possible when switching from Discord.py to Pycord. - -We then import `os` and `dotenv`. `os` is a default module that we will use to get the token from the env file. `dotenv` -is a module that we will use to load the env file. You installed this with `pip install python-dotenv`. - -Next, we load the env file with `load_dotenv()`. - -```py -bot = discord.Bot() -``` - -In this line, we create a new instance of [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). -In this object, we can pass various parameters for configuration purposes, such as `owner_ids` -and [`intents`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```py -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") -``` - -We use the [`event`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) decorator to override -the [`on_ready`](https://docs.pycord.dev/en/stable/api/events.html#discord.on_ready) function to define an -event that is automatically called when the bot is ready to use. - -```py -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") -``` - -Here, we use the [`slash_command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.slash_command) -decorator to define a slash command. We specify the `name` and `description` arguments. If not -specified, the name of the slash command would be the function name and the command description would -be empty. - -Optional: We type-hint the context parameter (`ctx`) as [`discord.ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext). In modern IDEs, type-hinting allows access to autocompletion and docstrings. You can read more about type-hinting [here](https://docs.python.org/3/library/typing.html). - -Finally, you want to run the bot using the token specified in the `.env` file. - -Now you have finished creating your first Pycord bot! What we have shown you is just the basic structure -of a bot. You can do a lot more with Python and Pycord knowledge, as well as your imagination! Pycord -will not limit your bot's abilities. - -:::note - -The part where we load the token from the environmental variables is not required. You may use another way to keep your token secure, or, although not recommended, simply specify the token normally as a string, as shown below. - -
-A Basic Bot without securing the token -
- -```py -import discord - -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.send("Hey!") - -bot.run("TOKEN") -``` - -
-
- -::: - -## FAQ - -### How do I make prefixed commands? - -Prefixed commands are an older method of creating bot commands that listen for messages and replies -if the message starts with a certain character. You can read [this page](../extensions/commands/prefixed-commands.mdx) -to learn more about prefixed commands. - -### How do I setup modules/cogs? - -[Cogs](../popular-topics/cogs) are a great way to organize your commands by putting them into -groups called cogs. Cogs are separate files that your bot loads to get the commands inside. -You can read more about cogs, as well as learn how to use them and their benefits, -[here](../popular-topics/cogs). - -### How do I add components, such as buttons and dropdown menus, to my bot? - -Pycord makes it very easy to use Message Commands with your bot by using the `discord.ui` module. -To learn more, read about Message Commands in our [interactions directory](../interactions). - -:::info Related Topics - -- [Prefixed Commands](../extensions/commands/prefixed-commands) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx b/i18n/de/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx deleted file mode 100644 index 2a68677b..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Hosting Your Pycord Bot ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Hosting Your Pycord Bot - -If you're completely new to this, you might have thought something along the lines of "Yay! I got my -bot working," after following our [Creating your First Bot](creating-your-first-bot) guide, only -to close your IDE or shut down your computer to find your bot offline. - -The reason for this is that programs have to be hosted somewhere, meaning some machine somewhere has -to constantly run your bot. There are tons of hosting services that can help you host your bot for -little to no cost. - -## Can I get a Clear Explanation? - -Sure thing. When you run your bot, it first makes a connection to Discord's API. Once that's done, -Pycord sends "heartbeats" to Discord. "heartbeats" are small packets sent at a set interval telling -Discord that your bot is indeed still alive. If Discord doesn't receive a heartbeat after a certain -amount of time, your bot is pronounced dead and buried in the graveyard (not really). It is, though, -taken offline and its connection with Discord is terminated. - -Once you close the terminal that you've run your program on, the program is no longer running, and -the bot stops sending heartbeats and can no longer process commands. This is why you have to constantly -keep the process running. - -This goes for all programs, in a different nature. If the code isn't compiled/built/assembled/interpreted, -it can't be running. - -## What is a Host? - -A host is a server or container for running code offered by a **hosting provider.** There are a lot -of hosting providers, such as bigger ones like Amazon Web Services (AWS) and Google Cloud, and smaller -ones like GalaxyGate and DigitalOcean. - -There are three types of hosts. - - - - Shared hosting is a type of hosting where multiple people share one VPS. Getting a spot on - a shared host is usually cheap, sometimes even free. Shared hosts do not give you a lot of - resources, from less than a gigabyte of RAM (usually 512MB on free hosts) and half of a CPU - with very little storage. Shared hosting is usually used for website hosting and is not - recommended for hosting a Discord bot. - - - A virtual private server (VPS) is a virtual computer (virtual machine) that is rented out to - customers. Most people use a VPS for hosting their projects such as Discord bots. You can get - anywhere from less than a gigabyte of RAM and a less powerful CPU to just under one hundred - gigabytes of RAM, a (or multiple) powerful CPU(s), and a fair amount of storage. A VPS is the - best choice for most users and can be fairly cheap. - - - A dedicated host is a physical computer. You can buy these yourself or rent one from a hosting - provider. Dedicated hosts are often very expensive, but are also very powerful, having a - few hundred gigabytes of RAM and a few very powerful CPUs, along with a good amount of storage. - Dedicated hosts are usually used for very large projects and are overkill for something like - a Discord bot. - - -
- -:::danger - -Make sure you choose a hosting provider you trust. Also make -sure the hosting provider you're looking at has good reviews on public forums. Googling along the -lines of "[host] review" should do the trick. A provider you don't trust can compromise your token. - -::: - -Most hosting providers rent their services to you for a monthly or yearly fee. These can be anywhere -from a few dollars to hundreds or thousands of dollars. - -## How to Host Your Bot - -Once you rent or buy a VPS, you can get to work. Most hosting providers allow you to choose from a -wide range of operating systems, most allow you to choose one but some allow you to choose -multiple. Once that's ready, you have to SSH into the system. We won't get into SSH here, but you can -read [this article from DigitalOcean](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys). -You can also use VNC, which is remote desktop software. If you are using an OS that does not have a -GUI, and is only a command line (a "server" OS), such as Ubuntu Server or most Linux Server Operating Servers, you will most -likely use SSH. If you are using an OS that has a GUI, such as Windows Server, you will most likely use VNC. - -Once you've decided on your operating system, you'll want to set it up and install Python. Once that's -done, you can copy your bot's files to your remote system, install the required packages, and run -the bot. - -:::warning - -If you are using SSH to run the file, your bot will not stay running. This is because the file is -only told to run during your session. You can use a command like [nohup](https://en.wikipedia.org/wiki/Nohup) -to make sure your file stays running after you disconnect. - -::: - -Now your bot is hosted, but that doesn't mean it can't go offline. If your bot encounters an error, -it can often go offline or stop its process. For this, make sure you have proper error handling. -Also be sure to pay attention to your hosting provider's updates or news, as they usually notify -users of when they plan on doing maintenance to their servers, making their services unavailable for -a short time. - -:::info Related Topics - -- [Creating Your First Bot](creating-your-first-bot) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx b/i18n/de/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx deleted file mode 100644 index 32eeb744..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx +++ /dev/null @@ -1,379 +0,0 @@ ---- -title: More Features -description: More features to make your bot cool and snazzy. ---- - -import { - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, - DiscordEmbedField, - DiscordEmbedFields, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -So, you just created your first Pycord bot! Now, let's add some more features to it. This will include adding event handlers, waiting for user response, styling the messages, and more. - -## Events - -### Event Handlers - -Events in Discord are a way to listen for certain actions. For example, if you want to know when a user joins your server, so you could send a welcome message, you can use the `on_member_join` event. - -First, you need to ask Discord to send you events. This is done via "Intents". Read up the [Intents](../Popular-Topics/intents) page for more information. - -Once you understand what intents are, you can enable the events you need, or just use the default ones with `discord.Intents.all()`. - -Now that that's done, let's add an event handler for when a user joins the server. We will use the [`on_member_join` event](https://docs.pycord.dev/en/stable/api/events.html#discord.on_member_join). We will send a private message to the user welcoming them to the server. - -```python -@bot.event -async def on_member_join(member): - await member.send( - f'Welcome to the server, {member.mention}! Enjoy your stay here.' - ) -``` - -We use the [`discord.Bot.event` decorator](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) to add the event handler. - -The `on_member_join` event is called when a user joins the server. The `member` parameter is the user that joined. Different events have different names and parameters. You can find all of them [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -So, that's how you add event handlers! - -### Waiting for User Response - -Let's say you want to create a Guess-the-Number game (where the user has to guess a number between 1-10). You need to send a message to a user and wait for them to respond. You can do this with the [`wait_for`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.wait_for) method. - -```python -@bot.command() -async def gtn(ctx): - """A Slash Command to play a Guess-the-Number game.""" - - await ctx.respond('Guess a number between 1 and 10.') - guess = await bot.wait_for('message', check=lambda message: message.author == ctx.author) - - if int(guess.content) == 5: - await ctx.send('You guessed it!') - else: - await ctx.send('Nope, try again.') -``` - -`wait_for` takes one argument, which is the event type. The event type is the name of the event you want to wait for. In this case, it's `message`. It could also be `reaction` to wait for a reaction to be added. - -We pass a keyword argument to `wait_for` called `check`. The function may look complicated if you're a beginner. We pass a `lambda` function, which simplifies the code a bit. - -The lambda function takes one parameter, `message`. When Pycord receives a message, it passes it to the `check` function. If the function returns `True`, the message is returned. If the function returns `False`, the message is ignored and the bot waits for another message. - -Here, we check if the message is from the user that sent the command. We simply use `message.author == ctx.author`. This will check if the author of the message was the person who invoked the command. - -## Styling Messages - -### Embeds - -Embeds are a Discord feature that allows applications to format their messages in cool embedded format, -enabling your bot to lay out messages with a lot of text into neat fields. - - - - - The Pycord Guide is a detailed guide that explains how to use Pycord and all of its features. - - - The Getting Started section explains how you can get a brand new bot created and running from scratch. - - - Interactions with Pycord - - - Pycord's various Extensions - - - Other Popular Topics - - - We have so much more! Just explore, and you will find everything you need. If you want another page added, open an issue on the GitHub. - - - Created with 💖 by the Pycord Team & Contributors - - - - -
- -Creating embeds is simple! Just create an instance of [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) and edit it to your liking. Once you're done, send it! - -```python -import discord - -bot = discord.Bot() - -@bot.command() -async def hello(ctx): - embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from - ) - embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") - - embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) - embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) - embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) - - embed.set_footer(text="Footer! No markdown here.") # footers can have icons too - embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") - embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") - embed.set_image(url="https://example.com/link-to-my-banner.png") - - await ctx.respond("Hello! Here's a cool embed.", embed=embed) # Send the embed with some text - -bot.run("TOKEN") -``` - - - -
- hello -
- Hello! Here's a cool embed. - - Embeds are super easy, barely an inconvenience. - - - A really nice field with some information. The description as well as the fields support markdown! - - Inline Field 1 - Inline Field 2 - Inline Field 3 - - Footer! No markdown here. - -
-
- -
- -This simple command sends replies to a [slash command](../interactions/application-commands/slash-commands) with an embed. -Let's break it down: - -```py -embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), - ) -``` - -This command creates an embed. We use the [`Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) -class to create an embed object with the title "My Amazing Embed", the description "Embeds are super easy, barely an inconvenience.", and the color `blurple`, Discord's main theme color. - -[discord.Colour](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Colour) is a class full of [classmethods](https://docs.python.org/3/library/functions.html#classmethod) -that return color values. While the official, documented name of this is `discord.Colour`, `discord.Color` -works as well. - -```py -embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") -embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) -embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) -embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) -``` - -This small section shows off embed fields. You can add fields to embeds with the [`add_field` method](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.add_field) -of the [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) class. These consist of three -keyword arguments: `title`, `value`, and `inline`. `title` and `value` are both required arguments, which inline defaults to `False` if it's not defined. The `inline` argument specifies whether space will be divided among the inline fields. There could be a mix of fields where inline has different values too. - -```py -embed.set_footer(text="Footer! No markdown here.") # footers can have icons too -embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") -embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") -embed.set_image(url="https://example.com/link-to-my-banner.png") -``` - -In this section, we're adding unique items to the embed. These items are: - -- Footer - With the [`set_footer()`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_footer) - method, you can set a small footer that holds a message. This has `text` and `icon_url` kwargs. -- Author - With the [`set_author`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_author) - method, you can set an author for the embed. This is a small text field at the top of the embed. This - includes `name`, `url` and `icon_url` kwargs. -- Thumbnail - With the [`set_thumbnail`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_thumbnail) - method, you can set a small image to reside at the top-right of the embed. This has a single `url` kwarg. -- Image - With the [`set_image`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_image) - method, you can set an image to sit at the bottom of an embed. This has a single `url` kwarg. - -There are a lot more methods and attributes you can use to configure embeds. Here, we just covered the basics. Also, remember that all of these values are not necessary in an embed. An embed may only contain a few of these. For example, only a description, a title and a description, and so on. - -### Markdown - -Markdown is a type of markup language that's limited in terms of formatting yet simple. Discord allows -for a watered-down version of markdown to be in their messages. - -#### Text Markdown - -Text formatting can be used in messages and in most embed parts, -as explained in the dedicated section below. - - - - - - - - - - - - - - - - - - - - -
*italics*__*underlined italics*__
**bold**__**underlined bold**__
***bold italics***__***underlined bold italics***__
__underlined__~~strikethrough~~
- -#### Code Markdown - -To create a single-line code block without syntax highlight, wrap the text between single backticks. -This code block will only add a dark background to the text. - -``` -`print("Hello world!")` -``` - -To create a multi-line code block without syntax highlight, wrap the text between triple backticks -on first and last line. This type of code block will encase the code inside a box. - -```` -``` -message = "Hello world!" -print(message) -``` -```` - -To create a multi-line block with syntax highlight, add the name of the language you are using right after -the triple backticks on the first line. For example, for Python you can write either "python" or "py". - -```` -```python -message = "Hello world!" -print(message) -``` -```` - -If you want to use syntax highlight for a single line of code, you still have to format it -like a multi-line block but the code must be on a separate line than the triple backticks. - -#### Quote Markdown - -To create a single-line quote block, start the line with `>` followed by a space. - -``` -> This is a single-line quote. -``` - -To create a multi-line quote block, write `>>>` followed by a space. All text -from that point onwards will be included in that quote block. - -``` ->>> This is a -multi-line quote. -``` - -#### Spoiler Markdown - -To hide a spoiler, encase the text between double pipes. The users -will have to click on it before being able to see the text contained in it. - -``` -||spoiler|| -``` - -#### Link Markdown - -Link formatting only works in embeds and messages sent through webhooks, -by using the following syntax: - -``` -[Pycord](https://pycord.dev/) -``` - -Inside the supported elements that have just been mentioned, -the example above will look like this: [`Pycord`](https://pycord.dev/) - -Outside them, the link will still be clickable but the formatting will be ignored, -therefore the example above will look similarly to this: `[Pycord](https://pycord.dev/)` - -#### Embed Markdown - -Adding markdown to your embeds or messages will give your bot the sparkle it needs, -however, markdown is limited inside embeds. Use the following table as a reference -and keep in mind that embed title and filed names will always show in **bold**. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PartTextLink
Embed AuthorNoNo
Embed TitleYesNo
Embed DescriptionYesYes
Field NameYesNo
Field ValueYesYes
Embed FooterNoNo
diff --git a/i18n/de/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx b/i18n/de/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx deleted file mode 100644 index e44b7c49..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Rules and Common Practices -description: All about the rules and common practices for coding a Discord bot ---- - -# Rules and Common Practices of Creating a Bot - -When creating almost anything, there's always a certain set of rules to follow or common practices, -such as [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python. This applies to creating bots -with Pycord as well. - -:::note - -Most of these rules and common practices are only applicable for -[verified bots](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting), -but it's good to follow them nonetheless. - -::: - -## Rules - -There are rules for creating bots, and most of these are required by Discord themselves, not us at -Pycord. Not following these rules may get your bot denied for verification. - -### Terms of Service and Privacy Policy - -Starting at some point in time, Discord has made providing a privacy policy with your bot a requirement. -This is so that Discord knows exactly what you are doing with its users' data. - -:::tip -You don't need a lawyer or anyone special to write out a privacy policy for you, nor do you need -it approved by some official entity. Simply writing out how you are going to use Discord user -information neatly is all you need to do. -::: - -Providing a Terms of Service for your bot is optional, though usually a best practice. It tells users -what they can and cannot do with your service, and makes it easier to settle disputes if someone -disagrees with you. - -Read more in Discord's official [Legal Docs](https://discord.com/developers/docs/legal). - -### Developer Policy - -We could list almost every rule about using Discord's API here. _Or_ we could simply link Discord's -Developer Policy to make it easier on us. You can find Discord's Developer Policy -[here](https://discord.com/developers/docs/policy). This outlines what you can and cannot do with -Discord's Developer API. And, don't worry, it's completely readable and understandable. - -## Best Practices - -Now, here's something we _can't_ simply link an article for. We're going to discuss the best practices -of creating a Discord bot with Pycord. - -### Bot Sharding - -To any new or maybe even experienced bot developer, sharding a bot sounds beneficial once you hear -about it. I'm here to tell you that it isn't a good idea to shard your bot. - -_Wait a minute, why would it be an option if it wasn't a good idea?_ It's simple. I lied. Sort of. -I'm not going to go into the details of sharding a bot, so you can read about it on -[this page](../Popular-Topics/sharding). Sharding is the process of taking your bot -and breaking it up into small pieces, so it's easier to perform tasks. This is very useful for large -bots, as it makes them faster and more reliable. Sharding is not a good practice for small bots. - -:::note -Discord will notify you once it is time to shard your bot, and will eventually force you to do so. -::: - -At the very least, wait for one thousand servers to shard your bot. If you shard your bot while it's -small, you'll just be wasting resources and possibly making your bot slower. - -### [Verification](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting) - -Verifying your Discord bot is something every developer would like to achieve. It shows that your bot -is in more than 75 servers. It's generally a good idea to try to get your bot verified as soon as -possible. We're talking at 76 servers soon. This is because Discord can be somewhat slow in terms of -bot verification, so verifying as soon as possible gives them enough time to verify before your bot -reaches the 100 server cap. If a bot is not verified, it cannot grow beyond 100 servers. - -It's also a good idea to only apply for the privileged intents that you need. Applying for intents -your bot doesn't use wastes both your time and Discord's time, as your privileged intent request -will be denied simply because you applied for an intent you didn't need. - -### Subclassing - -While it may take some time, subclassing a bot is very worth it. Once again, this was explained -elsewhere, so I won't go into the details, but I felt it fit here, so I put it here. - -Subclassing a bot makes it more flexible and allows it to do a lot more. Read more about subclassing -bots [here](../Popular-Topics/subclassing-bots) - -### Your Bot's Token - -Your bot is only able to be run for one reason: its token. If you followed the -[guide for creating your first bot](creating-your-first-bot), you should already know a bit about -keeping that token safe. That's exactly what you want to do. - -Sharing your token is never good. If someone evil gets a hold of your token, they can do terrible things, -such as making your bot leave all of its servers, spamming all the members the bot has contact with, -and even manipulating the servers the bot is in, if given the permissions. That's why it's very important -to keep your token safe. To learn how to do so, read [this part](creating-your-first-bot#tokens) of -the Creating Your First Bot guide. - -### Backups - -You always want to back up your bot's data. This includes both its code _and_ its databases. This way, -if something tragic happens, such as your host failing a data migration or you breaking your Raspberry -Pi's SD card that held your bot, you'll still have its precious user data. I have a small program for -my bot that uploads its databases to a remote GitHub repository periodically to not lose any data. -It may be smarter to find a bit more of a reliable way to do so, though. - -Public or private, having a local Git repository connected to a remote one is a good idea for making -almost any application. For a lot of developers, it's like saving your work. If you do this, all of -your bot's code won't be lost if your computer spontaneously combusts, or you smash it to bits from -anger. You can simply grab the backup computer that everyone has lying around, and you're back -in business. - -### Organization and Cleanliness - -It is _extremely_ important to have organized code. This includes commands, objects, functions, -and classes. If you don't have organized code, it will get progressively harder for you to recognize -it, and others won't be able to decipher it. - -Make sure you utilize indents and spaces, as these are very important in making your code readable. - -```py title="Bad Spacing" -class MyClass: - async def add(self,num1,num2): - return num1+num2 - async def sub(self,num1,num2): - return num1-num2 -``` - -```py title="Good Spacing" -class MyClass: - async def add(self, num1, num2): - return num1 + num2 - - async def sub(self, num1, num2): - return num1 - num2 -``` - -See the difference? Now, which one looks more readable? Hopefully, you answered the second example. -Python's [PEP8](https://www.python.org/dev/peps/pep-0008/) is a PEP (**Python Enhancement Proposal**) -style guide for Python. It is the style guide that is used by most Python developers and programmers, -providing a universal way to write and read code. - -### Databases - -As your bot grows, you'll inevitably have to store data for your bot. Now, most people would probably just load up some -JSON file on boot into a `dict`, modify it in memory then write to the file. However, JSON files aren't the solution. -When you write to a JSON file, it rewrites the entire file instead of just rewriting the section that changed. It's also -a configuration file format, not a storage file format. - -Instead of using a JSON file or some other related format, you should instead use a database. There are many databases -out there, like MongoDB, SQLite, and PostgreSQL to name a few. - -All of these databases I named do the job well, and which one you use depends on what features you want out of a database. - -<>{/* Maybe clarify these/add more options */} - -#### MongoDB - -MongoDB is a JSON-like format and if you already use JSON files, it shouldn't be too hard to migrate over to. - -#### SQLite - -SQLite is based on SQL, a common relational data model. It's a lightweight, easy-to-use, portable database solution that -works entirely on files. However, if for some reason you cannot read/write to and from a file, and you need to manage -lots of data, SQLite might not be for you. - -While SQLite is a part of the Python Standard Library as the `sqlite3` package, we recommend not using it as it is -synchronous and blocking. You should use an asynchronous alternative, such as [`aiosqlite`](https://pypi.org/project/aiosqlite/). - -#### PostgreSQL - -PostgreSQL is also based on SQL, but it also has more features than SQLite. It's compliant with the SQL standard, -open-source, and extensible. However, it's not that fast or simple compared to SQLite. - -#### MariaDB - -MariaDB is also based on SQL and is a fork of the MySQL project. It's compliant with the SQL standard, it's also open -source and is a complete drop-in replacement for any code with MySQL. You don't even need to change what package you're -using! diff --git a/i18n/de/docusaurus-plugin-content-docs/current/installation.mdx b/i18n/de/docusaurus-plugin-content-docs/current/installation.mdx deleted file mode 100644 index 521c69cd..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/installation.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Installation -sidebar_position: 2 ---- - -Before you can start using Pycord, you need to install the library. - -:::note -Python **3.8 or above** is required to use Pycord. -::: - -:::tip -Before you start installing python packages globally, it's recommended you set up a virtual environment. -You can find instructions for that [here](More/virtual-environments). -::: - -## Fresh Installation - -To install Pycord, you can use the following command in your terminal: - -``` -pip install py-cord -``` - -:::tip -Remember that you need to install `py-cord`, not `pycord`. -Also, the `pip` command varies depending on your installation. For example, it might be `python3 -m pip` on macOS/Linux or `py3 -m pip` on some versions of Windows. -::: - -If you need voice support for your bot, you should run: - -``` -pip install "py-cord[voice]" -``` - -## Migration - -### Updating Pycord - -If you are upgrading from a previous version of Pycord, you can use the following command in your terminal to upgrade to the latest version: - -``` -pip install -U py-cord -``` - -### Migrating from other libraries - -If you are migrating from another library, say, `discord.py`, first of all, you need to uninstall it. - -``` -pip uninstall discord.py -``` - -Then, you can install Pycord, it's as simple as that!: - -``` -pip install py-cord -``` - -:::caution -Uninstalling `discord.py` _after_ installing `py-cord` can cause issues. Make sure to uninstall it first! -::: - -## Installing Other Builds - -### Development Build - -:::caution -The development build comes with cutting edge features and new functionality, but as it isn't a stable build you may encounter bugs. -::: - -To install the development build, you can use the following command in your terminal: - -``` -pip install -U git+https://github.com/Pycord-Development/pycord -``` - -:::important -Git is required to install this build. [Learn how you can install Git](./more/git). -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/interactions/_category_.json b/i18n/de/docusaurus-plugin-content-docs/current/interactions/_category_.json deleted file mode 100644 index ea28be60..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/interactions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 4, - "label": "Interactions" -} \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json b/i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json deleted file mode 100644 index 6dcafe83..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Application Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx b/i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx deleted file mode 100644 index 8fdca991..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Context Menus -description: Learn all about Context Menus (User Commands & Message Commands) and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -When you right-click a message, you may see an option called "Apps". Hover over it, and you can see -commands a bot can run with that message. These are called message commands. - -When you right-click a user in the user list, you can once again see an option called "Apps". -Hover over it, and you can see commands a bot can run with that message. These are called user commands. - -Together, these two are called Context Menus or Context Menu Commands. These commands work very much like normal commands, except they take a member or message. - -:::note - -A bot can have up to 5 global Context Menus of each type. - -::: - -## User Commands - -Creating a user command is very simple. - -```python -@bot.user_command(name="Account Creation Date", guild_ids=[...]) # create a user command for the supplied guilds -async def account_creation_date(ctx, member: discord.Member): # user commands return the member - await ctx.respond(f"{member.name}'s account was created on {member.created_at}") -``` - - - -
- - Account Creation Date - -
- {defaultOptions.profiles.bob.author}'s account was created on 2020-01-01 -
-
- -## Message Commands - -```python -@bot.message_command(name="Get Message ID") # creates a global message command. use guild_ids=[] to create guild-specific commands. -async def get_message_id(ctx, message: discord.Message): # message commands return the message - await ctx.respond(f"Message ID: `{message.id}`") -``` - - - - Do. Or do not. There is no try. - - -
- - Get Message ID - -
- Message ID: 930650407917748286 -
-
- -
- -:::info Related Topics - -- [Slash Commands](./slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx b/i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx deleted file mode 100644 index edac55b3..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Localizations -description: Localizations are a way to make your bot more accessible to your users. Learn all about localizations now! ---- - -Localizations are a way to make your bot more accessible to your users. You can localize the command -name, the names of any arguments, and any text that is displayed to the user. - -## Syntax - -```python -@bot.slash_command( - name="ping", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - }, - options=[ - Option( - name="Example", - name_localizations={ - "en-GB": "British Example" - }, - description="Example option that does nothing", - description_localizations={ - "en-GB": "British example option that does nothing" - } - ) - ] -) -async def ping(ctx, example): - responses = {"en-US": "Pong!", - "en-GB": "British Pong!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -@bot.slash_command( - name="ping2", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - } -) -async def ping2(ctx, example: Option(str, "example", name_localizations={"en-GB": "British Example"}, description="Example option that does nothing", description_localizations={"en-GB": "British example option that does nothing"})): - responses = {"en-US": "Pong2!", - "en-GB": "British Pong2!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -``` - -- [`Locales`](https://discord.com/developers/docs/reference#locales) - List of valid locales recognized by Discord diff --git a/i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx b/i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx deleted file mode 100644 index f4a760b6..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx +++ /dev/null @@ -1,292 +0,0 @@ ---- -title: Slash Commands -description: Learn all about Slash Commands and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On March 24, 2021, Discord added Slash Commands to Discord as an easier, more efficient, and better way of using bot commands. Pycord has implemented Slash Commands into the library, so it's simple, efficient, and familiar. - -:::important - -Remember that Slash Commands require your bot to be invited with the `application.commands` scope or Slash Commands will not show up. Bots already in the guild can simply be invited again with the scope; there is no need to kick the bot. - -::: - -## Syntax - -Let's create a simple Slash Command. - -```py -import discord - -bot = discord.Bot() - -# we need to limit the guilds for testing purposes -# so other users wouldn't see the command that we're testing - -@bot.command(description="Sends the bot's latency.") # this decorator makes a slash command -async def ping(ctx): # a slash command will be created with the name "ping" - await ctx.respond(f"Pong! Latency is {bot.latency}") - -bot.run("TOKEN") -``` - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -Let's go through the code. - -First, we import Pycord's `discord` package. - -Next, we create a [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot) object and assign it to a variable `bot`. - -We then go ahead and use the [`@bot.command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.command) decorator, which registers a new Slash Command. We pass a `description` parameter to give a description to the Slash Command. We can also pass a `name` parameter to change the Slash Command's name. By default, the name of the Slash Command will be the name of the function, in this case, `/ping`. - -We create an async function called `ping` with parameters `ctx`, which, when called, sends the bot's ping/latency using [`ctx.respond`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext.respond). - -## Subcommand Groups - -You might want to group certain commands together to make them more organised. A command group is exactly what it sounds like, a group of individual Slash Commands together. - -In order to make a Slash Command group, you can use the `bot.create_group` function. - -```python -import discord - -bot = discord.Bot() - -# create Slash Command group with bot.create_group -greetings = bot.create_group("greetings", "Greet people") - -@greetings.command() -async def hello(ctx): - await ctx.respond(f"Hello, {ctx.author}!") - -@greetings.command() -async def bye(ctx): - await ctx.respond(f"Bye, {ctx.author}!") - -bot.run("TOKEN") -``` - -Or, you can instead manually make a `SlashCommandGroup` class like so: - -```python -import discord - -math = discord.SlashCommandGroup("math", "Math related commands") - -@math.command() -async def add(ctx, num1: int, num2: int): - sum = num1 + num2 - await ctx.respond(f"{num1} plus {num2} is {sum}.") - -@math.command() -async def subtract(ctx, num1: int, num2: int): - sum = num1 - num2 - await ctx.respond(f"{num1} minus {num2} is {sum}.") - -# you'll have to manually add the manually created Slash Command group -bot.add_application_command(math) -``` - -Here's what the registered subcommands will look like in the Slash Command Menu: - -![Picture of the subcommands in the Slash Command Menu](../../assets/interactions/groups-and-subcommands.jpg) - -You'll notice that there's the name of the Slash Command Group and then the name of the subcommand separated by a space. - -::: - -:::info Cogs - -If you are looking to add Slash Command Groups to cogs, please look at our [Cogs page](../../popular-topics/cogs)! - -::: - -## Sub-groups - -We've made a subcommand group, but did you know that you could create a group inside another? - -```python -from discord import SlashCommandGroup -from math import sqrt - -math = SlashCommandGroup("math", "Math related commands") -advanced = math.create_subgroup("advanced", "Advanced math commands") - -@advanced.command() -async def square_root(ctx, x: int): - await ctx.respond(sqrt(x)) - -bot.add_application_command(math) -``` - -The command created above can be invoked by typing `/math advanced square_root`. - -## Options & Option Types - -Whenever you're using Slash Commands, you might notice that you can specify parameters that the user has to set or can optionally set. These are called Options. - -Options can also include a description to provide more information. [You can learn more about Options in our documentation!](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.Option) - -Since you want different inputs from Options, you'll have to specify the type for that Option; there are a few ways of doing this. - - - - -You could use Type Annotations and let Pycord figure out the option type or explicitly specified using the [`SlashCommandOptionType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.SlashCommandOptionType) enum. - -```python -import discord - -bot = discord.Bot() - -@bot.command() -# pycord will figure out the types for you -async def add(ctx, first: discord.Option(int), second: discord.Option(int)): - # you can use them as they were actual integers - sum = first + second - await ctx.respond(f"The sum of {first} and {second} is {sum}.") - -@bot.command() -# this explicitly tells pycord what types the options are instead -async def join( - ctx, - first: discord.Option(discord.SlashCommandOptionType.string), - second: discord.Option(discord.SlashCommandOptionType.string) -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - add - -
- The sum of 1 and 1 is 2. -
- -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
- - -Instead of Type Annotations, you can also use the option decorator. This is usually done to have type-hinting. - -```python title="Slash Command Type" -import discord - -bot = discord.Bot() - -@bot.command() -@discord.option("first", type=discord.SlashCommandOptionType.string) # type = str also works -@discord.option("second", type=discord.SlashCommandOptionType.string) # type = str also works -async def join( - ctx, - first: str, - second: str, -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
-
- -## Autocomplete - -Discord's autocomplete allows developers to determine option choices that are used in a slash command option. You can do this by defining a function: - -```py -async def get_animal_types(ctx: discord.AutocompleteContext): - """ - Here we will check if 'ctx.options['animal_type']' is a marine or land animal and return respective option choices - """ - animal_type = ctx.options['animal_type'] - if animal_type == 'Marine': - return ['Whale', 'Shark', 'Fish', 'Octopus', 'Turtle'] - else: # is land animal - return ['Snake', 'Wolf', 'Lizard', 'Lion', 'Bird'] - -@bot.slash_command(name="animal") -async def animal_command( - ctx: discord.ApplicationContext, - animal_type: discord.Option(str, choices=['Marine', 'Land']), - animal: discord.Option(str, autocomplete=discord.utils.basic_autocomplete(get_animal_types)) -): - await ctx.respond(f'You picked an animal type of `{animal_type}` that led you to pick `{animal}`!') -``` - - - -
- - animal - -
- You picked an animal type of Marine that led you to pick Shark! -
-
- -:::warning - -Autocomplete can **only** be used with slash commands. - -::: - -:::info Related Topics - -- [Interactions Index](../../interactions) -- [Rules and Common Practices](../../getting-started/rules-and-common-practices) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/interactions/index.mdx b/i18n/de/docusaurus-plugin-content-docs/current/interactions/index.mdx deleted file mode 100644 index 3f695606..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/interactions/index.mdx +++ /dev/null @@ -1,242 +0,0 @@ ---- -title: Discord Interactions ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -In December 2020, Discord released their first Interaction: the -[Slash Command](https://discord.com/developers/docs/interactions/application-commands#slash-commands). -Since then, Discord has added many types of Interactions, including: - -[**Application Commands**](https://discord.com/developers/docs/interactions/application-commands) - -- [**Slash Commands**](https://discord.com/developers/docs/interactions/application-commands#slash-commands): - Commands that can be used with the `/` prefix. -- **Context Menu Commands**: Commands that can be used from the right-click menu. - - [**User Commands**](https://discord.com/developers/docs/interactions/application-commands#user-commands): - Commands that can be used on a user by alt-clicking/selecting them. - - [**Message Commands**](https://discord.com/developers/docs/interactions/application-commands#message-commands): - Commands that can be used on a message by alt-clicking/selecting it. - -[**UI Components**](https://discord.com/developers/docs/interactions/message-components) - -- [**Buttons**](https://discord.com/developers/docs/interactions/message-components#buttons): - Buttons are attached to a message and can be clicked on to perform an action. -- [**Select Menus**](https://discord.com/developers/docs/interactions/message-components#select-menus): - Drop-down menus are used to select a number of options from a list. -- [**Modals**](https://discord.com/developers/docs/interactions/message-components#text-inputs): - Form-like modals can be used to ask for input from a user. - -## Application Commands - -Application Commands are another set of new features that are intended to avoid compromising users' safety and privacy. -They're relatively easy to add to your bot, and give people a simpler and safer way to use commands. - -### [Slash Commands](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.SlashCommand) - -Slash Commands were the first Interaction added to Discord. They're easy to use and create, and -is the only prefix commands alternative that does not need Message Content intent. - -:::note - -Preferring prefix commands over Application Commands is **not** a valid reason to apply for the -Message Content intent. Using that as a reason will get your application denied. - -::: - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -This is what a Slash Command looks like. Not too different from a prefix command, -apart from the note telling you who invoked it. A Slash Command's fields can accept any of the following: - -- Members -- Roles -- Channels -- Attachments -- Text - -Just about as good as it gets. - -### [Message](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.MessageCommand) and [User](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.UserCommand) Commands - -Message Commands and User Commands were both introduced at around the same time, and are very similar to each other, so we'll be -introducing them together. These commands can be found in the `Apps` tab when alt-clicking. The only difference between the two is that -Message Commands only appear in the `Apps` tab of a message, while User Commands are found in the `Apps` tab of a user. Message Commands -can be used to quickly report a message, warn a user for a message, and other functions. Likewise, User Commands can be used to add a -user to a ticket, warn a user, and more. - -Here's an example of a Message Command: - - - - Hello World! - - -
- - Reverse Message - -
- Message 930650407917748286 reversed is "!dlroW olleH" -
-
- -
- -And here's an example of a User Command: - - - - {defaultOptions.profiles.dorukyum.author} has been on Discord for a long time - - -
- - User Age - -
- {defaultOptions.profiles.dorukyum.author} is 1 week old. -
- -
- - User Age - -
- {defaultOptions.profiles.bob.author} is 40 years old. -
- - 🤔 - -
- -
- -Pretty cool, right? To learn more about these two, please read the [Context Menus guide](./application-commands/context-menus.mdx). - -## [Application Commands](#application-commands) vs. [Prefix Commands](../extensions/commands/prefixed-commands) - -Ever since Discord was created, apps on it have used prefix commands. Using prefixes meant that you would have to put a -certain character (or string of characters) in front of your command, such as the exclamation mark in `!ping`. The way this -worked was that your bot would listen for messages, pick out the ones that had their specific prefix, and then respond to the command. -Now, Discord is encouraging developers to switch their bots over to Application Commands, which is a new system meant to preserve the -privacy and safety of their users. But why exactly is Discord making us switch? What's the better option, Application Commands or prefix -commands? Below, we'll discuss everything you need to know. - -### Discord's Decision - -Application Commands were conceptualized partly due to privacy concerns. When Discord first began, they weren't entirely concerned about bots -having access to the content of every message that was being sent. However, as Discord grew, this became more of a problem. Hypothetically, bots -could simply log every message they're able to receive via the Discord API and hand their contents over to a company or other third party. This is -a problem, since that data is meant to be used only by Discord. As such, they locked down Message Content, and introduced Application Commands for -bot developers to use instead. - -Prefix commands work by reading messages, as described before. Application Commands, however, don't -work this way; instead, they work by having your bot get information from Discord about when a command was used. This way, Discord can limit -Message Content only to bots that _absolutely_ depend on it, such as auto-moderation bots. - -### Who has to Use Application Commands - -Any verified bot that does not have the Message Content intent must use Application Commands. Discord is allowing developers to submit -applications for the ability to use the intent; however, since they don't want to keep supporting prefix commands due to privacy concerns, -they will automatically decline any application that includes only that as a reason. So, if your bot doesn't have an auto-moderation feature -(or any other functionality that requires Message Content), you're out of luck. - -Unverified bots, however, don't have to use Application Commands. This is because the Message Content intent is a `Privileged Intent`, meaning that -it must be applied for only if your bot is verified or about to be verified. Unverified bots don't have to apply for Privileged Intents, so they can -use them freely. - -So, if your bot is made only for a couple of servers, you can choose between prefix commands and Application Commands. However, if you plan on expanding -your bot's reach, it'll have to use Application Commands. - -### What's the Better Option - -Choosing which is the better option is up to you, if you're starting small. If -you plan on growing your bot, however, you will have to use Application Commands. Since prefix commands are slowly being phased out by Discord, -there isn't much of a choice for developers of larger bots. - -## Message Components - -Message Components are fairly new features in Discord, allowing developers to give their bots a fast -and understandable user interface. Message Components are easy to use and make your bot look modern, -sleek, and downright awesome. - -### [Views](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View) - -Views are not an Application Command nor are they a Message Component. Views are the invisible placeholders, or grid, -that Message Components lie in. Views can have up to 5 [`Action Rows`](https://docs.pycord.dev/en/stable/api/models.html#discord.ActionRow), -and Action Rows can have a maximum of 5 slots. Below, you can find a table showing how many slots a Message Interaction takes up. - -| Component | Slots | -| ------------ | ----------------------------------------------- | -| Buttons | 1 Slot | -| Select Menus | 5 Slots | -| Text Modals | 1 Slot (opened via a Button) | - -So, based on this, you could have a maximum of 25 Buttons in a View with no Select Menus, and 5 Select -Menus in a View with no Buttons. This doesn't mean you can't have them both in a View, however. You can have -a combination of them, such as 20 Buttons and a Select Menu or 10 Buttons and 3 Select Menus. - -### [Buttons](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button) - -Buttons are the first of the Message Components. They allow for quick responses to prompts, such as for canceling or continuing an action. -Of course, these aren't their only uses; people have created awesome things with Buttons, such as calculators, games, and more! - - - - Discord Buttons are awesome! -
- - Click me! - -
-
-
- -
- -This is what a Button looks like, very simple and modern. To learn more about Buttons, refer to our -[Buttons page](./ui-components/buttons.mdx). - -### [Select Menus](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Select) - -Select Menus are the second of Discord's Message Components. They allow users to select from a list of choices, which your bot can then use. -Select Menus are good for things such as choosing features, pages of a help menu, and more. - -![Select Menu Example Image](../assets/interactions/select-menus-example.png) - -This is what a Select Menu looks like. While not looking as good as Buttons, they still look great -and have even greater possibilities. To learn more about Select Menus, please refer to our [Select -Menus page](./ui-components/dropdowns.mdx). - -### [Modal Dialogs](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal) - -Text Modals are the most recently added Message Component in Discord. They're useful for text input and filling out forms, such as a -sign-up for your bot's service. These are meant to replace long bot setup processes by allowing users to fill out multiple text fields, -which avoids having the user send multiple messages for the bot. Modals can be accessed by either invoking an Application Command or by -interacting with another UI Component. - -![Text Modal Example Image](../assets/interactions/modal-example.png) - -This is what a Text Modal looks like, easy to use and one of the most useful Message Components yet. To learn more about Text Modals, -please visit our [Modal Dialogs page](./ui-components/modal-dialogs.mdx). diff --git a/i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json b/i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json deleted file mode 100644 index 7b0a72fe..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "UI Components", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx b/i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx deleted file mode 100644 index 10557c94..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx +++ /dev/null @@ -1,314 +0,0 @@ ---- -title: Buttons -description: Learn all about implementing buttons in your Discord Bot using Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On May 26, 2021, Discord added a new interaction called buttons. Instead of reactions, bots could now -send buttons and users could use them to interact with bots. This opened up a whole new world of -possibilities for bots. Soon after, developers made calculators, polls, and games like blackjack, UNO, -and even Minecraft! Buttons provided a clear and easy to use interface for interacting with bots. - -So, let's learn how you can add buttons to your bot! - -## Concept - -Buttons weren't the only update to the interactions system in Discord. Discord also added [Select Menus](./dropdowns) and [Modal Dialogs](./modal-dialogs), both of which work very similarly to buttons. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive button. - -```python -import discord - -bot = discord.Bot() # Create a bot object - -class MyView(discord.ui.View): # Create a class called MyView that subclasses discord.ui.View - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.primary, emoji="😎") # Create a button with the label "😎 Click me!" with color Blurple - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") # Send a message when the button is clicked - -@bot.slash_command() # Create a slash command -async def button(ctx): - await ctx.respond("This is a button!", view=MyView()) # Send a message with our View class that contains the button - -bot.run("TOKEN") # Run the bot -``` - -Using this command should return the following message: - - - -
- - button - -
- This is a button! -
- - Click me! - -
-
-
- -
- -As you can see, we create a class called `MyView` that [subclasses](#oop) -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `button_callback` to the `MyView` class with the decorator -[`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button). -This decorator adds a button to a component. This function takes two arguments: the button that was -clicked and the interaction. These arguments are passed to the function when the button is clicked -by the module. We use the [`interaction.response.send_message`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse.send_message) -function to send a message to the channel where the interaction was sent. - -Finally, we create a global slash command called `button` that sends the message, along with the view -that contains a button. - -This is the basic syntax of creating a button. What you create with it is up to you. You can worry -about making your button do amazing things, while Pycord handles the rest! - -## Button Styles - - - -| Name | Usage | Color | -| --------- | ----------------------------------------------------------------------------------------- | ------- | -| Primary | `discord.ButtonStyle.primary` / `discord.ButtonStyle.blurple` | Blurple | -| Secondary | `discord.ButtonStyle.secondary` / `discord.ButtonStyle.grey` / `discord.ButtonStyle.gray` | Grey | -| Success | `discord.ButtonStyle.success` / `discord.ButtonStyle.green` | Green | -| Danger | `discord.ButtonStyle.danger` / `discord.ButtonStyle.red` | Red | -| Link | `discord.ButtonStyle.link` / `discord.ButtonStyle.url` | Grey | - -Check out the [`discord.ButtonStyle`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ButtonStyle) class for more information. - -![Different Button Styles](../../assets/interactions/button-styles.png) - -You can set a button's style by adding the `style` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) decorator. - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.success) - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots, and each button takes up 1 slot. -So, how do we move the buttons to another row? - -This can be done by specifying the `row` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) -decorator. - -:::info The `row` argument - -The row argument specifies the relative row this button belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=1, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") -``` - -## Disabling Buttons - -### Pre-Disabled Buttons - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary, disabled=True) # pass `disabled=True` to make the button pre-disabled - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView()) -``` - -### Disabling Buttons on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - button.disabled = True # set button.disabled to True to disable the button - button.label = "No more pressing!" # change the button's label to something else - await interaction.response.edit_message(view=self) # edit the message's view -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(emoji="😀", label="Button 1", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) - - @discord.ui.button(label="Button 2", style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -Sometimes, you want to have a button that is disabled after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView(timeout=30)) -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a button that is disabled after a certain amount of time, you want to have a -button that is always working. - -Normally, when the bot goes offline, all of its buttons stop working. You will be able to see the -buttons, but nothing will happen when you press them. This is a problem -if you are trying to create a self-role system with buttons, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons will stop working. When the bot comes back online, however, the buttons will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view must have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.button(label="A button", custom_id="button-1", style=discord.ButtonStyle.primary, emoji="😎") # the button has a custom_id set - async def button_callback(self, button, interaction): - await interaction.response.send_message("Button was pressed", ephemeral=True) - -@bot.command() -async def button(ctx): - await ctx.send(f"Press the button! View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many buttons can I have in a message? - -Each message can have a maximum of 25 buttons. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do buttons need any special permissions? - -No new permissions are needed for either the bot or the server to allow bots to use buttons. - -#### Should I replace reactions with buttons for my bot? - -That is up to you. Buttons do provide a cleaner interface for your bot and are easier to use. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx b/i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx deleted file mode 100644 index 8320f25d..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx +++ /dev/null @@ -1,339 +0,0 @@ ---- -title: Select Menus -description: Learn all about implementing Select Menus or Dropdowns in your Discord Bot with Pycord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Shortly after the buttons were added, Discord added their second message component: Select Menus. Select Menus allow users to choose from a list of items sent by a bot. These are a great substitute for having a user send a number that corresponds to an option. You can even allow users to select multiple options from the Select Menus. This guide will show you the easy and painless ways of using them with Pycord. - -## Concept - -Select Menus aren't the only message component in Discord. There's also [Buttons](./buttons) and [Modal Dialogs](./modal-dialogs). Select Menus make it easy for users to pick one or multiple options from a list provided by a bot. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive select menu. - -```python -import discord - -bot = discord.Bot() - -class MyView(discord.ui.View): - @discord.ui.select( # the decorator that lets you specify the properties of the select menu - placeholder = "Choose a Flavor!", # the placeholder text that will be displayed if nothing is selected - min_values = 1, # the minimum number of values that must be selected by the users - max_values = 1, # the maximum number of values that can be selected by the users - options = [ # the list of options from which users can choose, a required field - discord.SelectOption( - label="Vanilla", - description="Pick this if you like vanilla!" - ), - discord.SelectOption( - label="Chocolate", - description="Pick this if you like chocolate!" - ), - discord.SelectOption( - label="Strawberry", - description="Pick this if you like strawberry!" - ) - ] - ) - async def select_callback(self, select, interaction): # the function called when the user is done selecting options - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") - -@bot.command() -async def flavor(ctx): - await ctx.respond("Choose a flavor!", view=MyView()) - -bot.run("TOKEN") -``` - -There's a lot going on over here! Don't worry, we will go over the code and explain it. - -As you can see, we create a class called `MyView` that subclasses -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `select_callback` to the `View` class with the decorator -[`discord.ui.select`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.select). -This decorator adds a select menu to the view. This decorator takes a few arguments to customize your select menu. Read them in the [Customization section](#customization). - -That was the decorator. Now, the function itself is pretty simple. It takes two parameters, not including `self`. The parameters are `select`: The select menu, and `interaction`: a [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object. Both of these are passed by Pycord, so you just need to specify them in the function! - - - -In the callback, you could do anything you want. You get the two parameters `select` and `interaction` to play around with. Here, we send a message using `await interaction.response.send_message` (where interaction is [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse)) with content `select.values[0]`, which sends the label of the first/only option the user selected. Obviously, this is only an example, and you could do just about anything you want. - -Finally, we create a global slash command called `flavour` that sends a message "Choose a flavor!" along with the view -that contains our select menu. - -This is the basic syntax of creating a select menu. What you create with it is up to you. You can worry -about making your code do amazing things, while Pycord handles the rest! - -## Customization - -#### Select Menu Properties - -- `select_type`: The type of select to create. This must be a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. -- `channel_types`: A list of channel types that can be selected in the menu. This is only valid for selects of `select_type` [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType). -- `options`: A list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. These are the options that can be selected in this menu. -- `placeholder` is the placeholder text shown in the select menu if no option is selected. -- `custom_id`: The ID of the select menu that gets received during an interaction. It is recommended not to set this to anything unless you are trying to create a persistent view. -- `row`: The relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). -- `min_values`: The minimum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `max_values`: The maximum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `disabled`: Whether the select is disabled or not. Defaults to False. - -#### Select Option Properties - -In the `options` parameter, you pass a list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. This class also has a few parameters: - -- `default` (whether the option is selected by default) -- `description` (an additional description, if any) -- `emoji` (a string or an emoji object, if any) -- `label` (the name displayed to users, can be up to 100 characters) -- `value` (a special value of the option, defaults to the label). - -## Select Types - -In addition to regular string selects, you can also have your select menu contain users, roles, mentionables, and channels as its options. You can use these alternative select types by passing a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value for the `select_type` parameter when creating the Select. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.user_select - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -Additionally, you can use shortcut decorators to create a [`discord.ui.Select`](https://docs.pycord.dev/en/master/api/ui_kit.html#discord.ui.select) with a predetermined [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. Using a shortcut decorator, the above code can be rewritten like this: - -```python -class MyView(discord.ui.View): - @discord.ui.user_select() - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -### Specifying Channel Types - -When using a [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType.channel_select) type select menu, you can pass in a list of [`discord.ChannelType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ChannelType) values to limit which types of channels users can choose when interacting with the select menu. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.channel_select, - channel_types=[discord.ChannelType.text, discord.ChannelType.voice] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"You selected {select.values[0].mention}") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots. A button takes a single slot, while a select menu takes up all 5 of them. This means a view can have a maximum of 5 select menus, or any possible combination of select menus and buttons. - -The arrangement of buttons and select menus is generally adjusted by Pycord. However, it is possible to move them to specific relative rows. This is done by specifying the `row` argument. - -:::info The `row` argument - -The row argument specifies the relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero-indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=0, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.select( - row = 1, - options = [...] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") -``` - -## Disabling Select Menus - -### Pre-Disabled Menus - -```python -class MyView(discord.ui.View): - @discord.ui.select( - disabled = True, # pass disabled=True to set the menu as disabled - options = [...] - ) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send("Select and option from the menu!", view=MyView()) -``` - -### Disabling Menus on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - select.disabled = True # set the status of the select as disabled - await interaction.response.edit_message(view=self) # edit the message to show the changes -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def first_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) # edit the message to show the changes - - @discord.ui.select(options = [...]) - async def second_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -You may want a select menu to automatically stop working after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select(ctx): - await ctx.send(view=MyView(timeout=30)) # specify the timeout here -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a select menu that is disabled after a certain amount of time, you want to have a -select menu that is always working. - -Normally, when the bot goes offline, all of its views stop working, even if they don't have a timeout. You will be able to see the -views, but nothing will happen when you try to interact with them. This is a problem -if you are trying to create a self-role system, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons and select menus will stop working. However, when the bot comes back online, the buttons and select menus will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view much have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.select(custom_id="select-1", options = [...]) # a custom_id must be set - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send(f"View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many select menus can I have in a message? - -Each message can have a maximum of 5 select menus. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do select menus need any special permissions? - -No new permissions are needed in the bot or in the server. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx b/i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx deleted file mode 100644 index 6ee4682f..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Modal Dialogs -description: Learn how you can implement Modals in your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Modal Dialogs, also known as "modals", provide a form-like structure for bots to receive input from users. No extra permissions are needed for bots to send modal dialogs, so it becomes a convenient workaround for bots to receive longer input without needing the Message Content [intent](../../popular-topics/intents). - -## Concept - -Modal Dialogs consist of a title, custom ID, and up to 5 [`discord.ui.InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) components. While creating modals, we generally subclass [`discord.ui.Modal`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal), as we'll see later. - -Unlike other UI Components, Modals cannot be sent with messages. They must be invoked by an Application Command or another UI Component. - -## Usage Syntax - -```py -class MyModal(discord.ui.Modal): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - self.add_item(discord.ui.InputText(label="Short Input")) - self.add_item(discord.ui.InputText(label="Long Input", style=discord.InputTextStyle.long)) - - async def callback(self, interaction: discord.Interaction): - embed = discord.Embed(title="Modal Results") - embed.add_field(name="Short Input", value=self.children[0].value) - embed.add_field(name="Long Input", value=self.children[1].value) - await interaction.response.send_message(embeds=[embed]) -``` - - - - -The `ctx` parameter we define in Application Commands receives an [`ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext) object. Using its `send_modal()` coroutine, you can send a Modal dialog to the user invoking the Application Command. - -```py -@bot.slash_command() -async def modal_slash(ctx: discord.ApplicationContext): - """Shows an example of a modal dialog being invoked from a slash command.""" - modal = MyModal(title="Modal via Slash Command") - await ctx.send_modal(modal) -``` - - - - -The `interaction` parameter we define in UI Components receives an [`Interaction`](https://docs.pycord.dev/en/stable/api/models.html#discord.Interaction) object. The `response` attribute of the object contains an [`InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object, with various coroutines such as `send_message()` and `send_modal()`, which we utilize. - -```py -class MyView(discord.ui.View): - @discord.ui.button(label="Send Modal") - async def button_callback(self, button, interaction): - await interaction.response.send_modal(MyModal(title="Modal via Button")) - -@bot.slash_command() -async def send_modal(ctx): - await ctx.respond(view=MyView()) -``` - - - - -The above example uses an embed to display the results of the modal submission, but you can do anything you want with the text provided by the user. -Each input field can be accessed in the order it was added to the modal dialog, via `Modal.children`. - -## Customization - -A Modal can have up to 5 [`InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) fields. These fields offer some customization. - -Each field has a label which is shown to the user. This is defined with `label`. - -The `style` parameter is used to determine whether it should be a short (single-line) or long (multi-line) input field. - -There are a number of aliases that can be used: - -```x title="Single-line InputTextStyle values:" -short -singleline -``` - -```x title="Multi-line InputTextStyle values:" -paragraph = 2 -multiline = 2 -long = 2 -``` - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Buttons](./buttons) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/introduction.mdx b/i18n/de/docusaurus-plugin-content-docs/current/introduction.mdx deleted file mode 100644 index 3262c632..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/introduction.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Introduction -description: Pycord Guide is a complete guide for Pycord. Learn how to create Discord Bots today! -sidebar_position: 1 ---- - -Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord, written in Python. Pycord is a maintained fork of [discord.py](https://github.com/Rapptz/discord.py). - -## Before you begin - -Pycord is an advanced and complex Python library. To take advantage of the full capabilities of Pycord, you will need to have a good understanding of Python. You should know the basics of Python and have an understanding of the following concepts: - -- Variables -- Data Types -- Functions -- Packages -- Conditionals -- Loops -- Classes -- Object-Oriented Programming -- Inheritance -- Exception Handling -- Iterators -- Coroutines -- Async/Await - -This list is not exhaustive, but it should give you a good idea of what you need to know to get started. - -When you see an ellipsis - that's the three dots - in this guide, it is a placeholder for code that you need to fill in. Sometimes, it may be code for a command, while other times it could be something simple like a Guild ID. Make sure to replace them before running your bot! - -## Learning Resources - -Here are some good resources to get started or to freshen up your Python knowledge: - -- [Official Beginner's Guide](https://wiki.python.org/moin/BeginnersGuide) -- [Official Tutorial](https://docs.python.org/3/tutorial/) -- [Automate the Boring Stuff, a free online book for complete beginners to programming](https://automatetheboringstuff.com/) -- [Learn Python in y Minutes, complete cheat sheet for people who know programming already](https://learnxinyminutes.com/docs/python3/) -- [Swaroopch's free Python book](http://python.swaroopch.com/) -- [Codeabbey, exercises for beginners](http://www.codeabbey.com/) - -## Credits - -First of all, we would like to thank [Rapptz](https://github.com/Rapptz) for the original [discord.py](https://pypi.org/project/discord.py) library. Pycord is a maintained fork of this library. - -We would also like to thank the [discord.js guide](https://discordjs.guide), which inspired this guide style-wise, and the [original Pycord Guide](https://namantech.me/pycord), which inspired some content in this guide. - -We created this guide using [Docusaurus v2](https://docusaurus.io), a modern static site generator for React. We would also like to thank Danktuary for his [`@discord-message-components/react`](https://www.npmjs.com/package/@discord-message-components/react) package, from which we took the Discord message components. - -And finally, we would like to thank the amazing and loving community of Pycord users, contributors and developers. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/more/_category_.json b/i18n/de/docusaurus-plugin-content-docs/current/more/_category_.json deleted file mode 100644 index 2cbe2c56..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/more/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 8, - "label": "More", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/more/community-resources.mdx b/i18n/de/docusaurus-plugin-content-docs/current/more/community-resources.mdx deleted file mode 100644 index ed3075bd..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/more/community-resources.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Community Resources ---- - -This page showcases the amazing things created by the Pycord community, including bots, Plugins, and more. - -## Plugins - -| Name | Type | GitHub | -| --------------- | ------------ | --------------------------------------------------------------- | -| Music Cord | Music | [NixonXC/cord-music](https://github.com/NixonXC/cord-music) | -| pycord-i18n | Localization | [Dorukyum-pycord-i18n](https://github.com/Dorukyum/pycord-i18n) | -| pycord-multicog | Cogs | [pycord-multicog](https://github.com/Dorukyum/pycord-multicog) | -| EzCord | Utilities | [EzCord](https://github.com/tibue99/ezcord) | - -## Bots - -| Name | Type | Link | -| ------------------------ | ------------ | ----------------------------------------------------------------------------------- | -| Discord-Multipurpose-Bot | Multipurpose | [github](https://github.com/pogrammar/Discord-multipurpose-bot/tree/master/Python) | -| inconnu | Fun & QOL | [github](https://github.com/tiltowait/inconnu) | -| Mai | Multipurpose | [github](https://github.com/TeamMai/Mai) & [website](https://xfghoul.github.io/Mai) | -| Toolkit | Multipurpose | [github](https://github.com/Dorukyum/Toolkit) | diff --git a/i18n/de/docusaurus-plugin-content-docs/current/more/contributing.mdx b/i18n/de/docusaurus-plugin-content-docs/current/more/contributing.mdx deleted file mode 100644 index 8fdf31af..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/more/contributing.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: Contributing to the Guide -description: Learn how to contribute to the Pycord Guide. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -This page outlines some of the basic syntax you need to know to contribute to the guide. We recommend you also check out: - -- [Docusaurus's Docs](https://docusaurus.io/docs/) -- [Contributing Rules](https://github.com/Pycord-Development/guide/blob/master/.github/CONTRIBUTING.md) - -## Info - -We use [Docusaurus v2](https://docusaurus.io/) to generate our guide. All the guide pages are generated -from `mdx` files in the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory. -MDX allows you to use JSX in your markdown content. - -## Structure - -Let's visit the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory and check its file structure. - -We can see various folders and a few files in it. Let's talk a bit about the `introduction.mdx` file. At the top, you can see something like: - -```md ---- -title: Introduction -description: ... -sidebar_position: 1 ---- -``` - -Most pages have this at the top. The `title` defaults to the file name. Since the titles need to be Capitalized according to need while the file names are lowercased (sometimes, the file names are shorter than the title!), we set a title ourselves. - -The `description` field is also important. This is the text shown in an embed when the page's link is shared on Discord, Twitter or other websites that support embedded links. Make sure to give a nice an interesting description! - -The `sidebar_position` field is pretty self-explanatory. It sets the position of the page in the sidebar. Most files in categories do not need this since they are sorted alphabetically. - -## Markdown Syntax - -This page quickly outlines some of the syntax that is used in markdown. - -````mdx -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - - ```python - print("We can use code blocks like this.") - ``` - -You can add [links to other websites](https://pycord.dev). You can add images like this: ![alternate text that describes the image](https://pycord.dev/image.png). - -- You can create -- unordered lists like this - -1. Or ordered lists -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` -4. Like this - -# Headers - -## Go - -### Like - -#### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet -```` - -
-Preview -
- -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - -```python -print("We can use code blocks like this.") -``` - -You can add [links to other websites](https://pycord.dev). You can add images by adding ![alt text](@site/static/img/favicon.ico). - -- You can create -- unordered lists like this - -1. Or ordered lists - -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` - -4. Like this - - # Headers - - ## Go - - ### Like - - #### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet - -
-
- -## Admonitions - -We can add warnings, notes, etc. with the following syntax: - -```md -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: -``` - -
-Preview -
- -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: - -
- -
- -## Discord Message Components - -As most files already have the imports for these, it's not that hard to add them. - -First, import the necessary components: - -```tsx -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; -``` - -The div starts like so: - -```tsx - - - - -
-``` - -This is where you list a `DiscordMessage`. - -```tsx - - - Hello! - - - -
-``` - - - - Hello! - - - -
- -It has a pretty straightforward syntax. - -:::tip - -Add a `
` to the end of a component to make the content below it look better. - -::: - -### Slash Commands - -To make a message authored by a slash command, do the following: - -```tsx - - -
- - update - -
- Updated dependencies to the latest version! -
-
-``` - - - -
- - update - -
- Updated dependencies to the latest version! -
-
- -### Buttons - -To make a message with buttons, do the following: - -```tsx - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
-``` - - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
- -## Page Format - -There are a few things you need to take care of: - -1. Make sure that the spelling and grammar is perfect. We have a GitHub action configured that will warn you about spelling errors when you start a pull request. Make sure to commit your changes accordingly. - - As for the grammar, you should try reading the changes you have done and wait for reviews from others. - -2. A common mistake people make is incorrect header style. People often think that the less the important the topic is, the lower it's heading style should be. - - ```md - [PAGE STARTS] - # Topic - ## Less Important Topic - ## Subtopic - ``` - - ```md - [PAGE STARTS] - # About - [Introduction] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - That's VERY wrong. Here's the correct example: - - ```md - [PAGE STARTS] - [Introduction] - ## Topic - ## Less Important Topic - ### Subtopic - ``` - - ```md - [PAGE STARTS] - [Introduction] - - ## About - [More Information] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - Note that the `---`s at the beginning have been skipped here. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/more/git.mdx b/i18n/de/docusaurus-plugin-content-docs/current/more/git.mdx deleted file mode 100644 index 0f929d6d..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/more/git.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Installing Git -description: Learn how you can install Git on your system. ---- - -Git is software for tracking changes in any set of files (also known as a "version control" software), usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems). - -Let's see how to install Git on different platforms. - -## Windows - -On Windows, Git can be installed via: - -- [Git for Windows](https://gitforwindows.org) -- [Git Scm](https://git-scm.com/download/windows) - -## Linux - -On Linux, Git is probably already installed in your distribution's repository. If not, you can install it via [Git for Linux](https://git-scm.com/download/linux). You can also install it via the built-in package manager on your Linux distro. - -## Mac - -You can install Git for your macOS computer via [Git for Mac](https://git-scm.com/download/mac). Alternatively, it can be also be installed from the Xcode Command Line Tools by installing Xcode from the App Store, or by running this: - -``` -xcode-select --install -``` - -## Using Package Managers - -You can also install Git using package managers. - -### Chocolatey - -If you use the Chocolatey package manager, you can install Git using: - -``` -choco install git -``` - -### Scoop - -If you use Scoop, you can install Git using: - -``` -scoop install git -``` - -### Brew - -If you're on macOS or Linux, you can install Git using: - -``` -brew install git -``` diff --git a/i18n/de/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx b/i18n/de/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx deleted file mode 100644 index b0b8c7ea..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Virtual Environments -description: Learn how to set up a virtual environment for Pycord. ---- - -## Setup - -Sometimes you want to keep libraries from polluting system installs or use a different version of libraries than the ones installed on the system. You might also not have permissions to install libraries system-wide. For this purpose, the standard library as of Python 3.3 comes with a concept called “Virtual Environment”s to help maintain these separate versions. - -A more in-depth tutorial is found on [Virtual Environments and Packages](https://docs.python.org/3/tutorial/venv.html). - -However, for the quick and dirty: - -Go to your project’s working directory: - -```bash -$ cd your-bot-source -$ python3 -m venv venv -``` - -Activate the virtual environment: - -```bash -$ source venv/bin/activate -``` - -On Windows you activate it with: - -```batch -$ venv\Scripts\activate.bat -``` - -Use pip like usual: - -```bash -$ pip install -U py-cord -``` - -Congratulations. You now have a virtual environment all set up. - -## Additional info - -It can be useful to set up a requirements.txt, so you can just put all of your dependencies in there and have pip install it. -For instance, if you wanted to have the latest 2.0 version of pycord and [pytz](https://github.com/stub42/pytz/blob/master/src/README.rst), just create a file named requirements.txt with the following contents: - -``` -py-cord>=2.0.0 -pytz -``` - -And then (in your virtual environment) you can just execute - -```bash -pip install -r requirements.txt -``` - -To keep from committing your virtual environment to git, you can set up a .gitignore file with the following line -(assuming you named your virtual environment venv like the above example): - -``` -venv/ -``` diff --git a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/_category_.json b/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/_category_.json deleted file mode 100644 index c38ea014..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 7, - "label": "Popular Topics", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx b/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx deleted file mode 100644 index 5377a6c3..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Cogs ---- - -Cogs, often known as modules or extensions, are used to organize commands into groups. This is useful -for grouping commands that have the same general idea (such as moderation commands). This also helps -to avoid making your bot's files messy and cluttered. - -## Getting Started - -First, you'll need to create a folder to store your cogs, e.g. `cogs/`. - -Then, create a file inside the folder, e.g. `cogs/greetings.py`. By convention, the file name should -be the same as the name of the cog or module. - -We can then create the cog. - -```python title="./cogs/greetings.py" -import discord -from discord.ext import commands - -class Greetings(commands.Cog): # create a class for our cog that inherits from commands.Cog - # this class is used to create a cog, which is a module that can be added to the bot - - def __init__(self, bot): # this is a special method that is called when the cog is loaded - self.bot = bot - - @commands.command() # creates a prefixed command - async def hello(self, ctx): # all methods now must have both self and ctx parameters - await ctx.send('Hello!') - - @discord.slash_command() # we can also add application commands - async def goodbye(self, ctx): - await ctx.respond('Goodbye!') - - @discord.user_command() - async def greet(self, ctx, member: discord.Member): - await ctx.respond(f'{ctx.author.mention} says hello to {member.mention}!') - - math = discord.SlashCommandGroup("math", "Spooky math stuff") # create a Slash Command Group called "math" - advanced_math = math.create_subgroup( - "advanced", - "super hard math commands!" - ) - - @math.command() - async def add(self, a: int, b: int): - c = a + b - await ctx.respond(f"{a} + {b} is {c}.") - - @advanced_math.command() - async def midpoint(self, x1: float, y1: float, x2: float, y2: float): - mid_x = (x1 + x2)/2 - mid_y = (y1 + y2)/2 - await ctx.respond(f"The midpoint between those coordinates is ({mid_x}, {mid_y}).") - - @commands.Cog.listener() # we can add event listeners to our cog - async def on_member_join(self, member): # this is called when a member joins the server - # you must enable the proper intents - # to access this event. - # See the Popular-Topics/Intents page for more info - await member.send('Welcome to the server!') - -def setup(bot): # this is called by Pycord to setup the cog - bot.add_cog(Greetings(bot)) # add the cog to the bot -``` - -You can add any number of commands to your cog, as well as event listeners. However, this code will -not work on its own. In your main bot file, you must add the following code: - -```python -bot.load_extension('cogs.greetings') -``` - -This loads the file `cogs/greetings.py` and adds it to the bot. -The argument of `load_extension` should be your cog's path (e.g. cogs/greetings.py) without the file -extension and with the `/` replaced with `.` - -If you have multiple cogs, you can add them all at once by adding the following code: - -```python -cogs_list = [ - 'greetings', - 'moderation', - 'fun', - 'owner' -] - -for cog in cogs_list: - bot.load_extension(f'cogs.{cog}') -``` - -## Cog Rules - -When using a cog instead of the main file, there are some changes you have to make to your code. This -is because cogs work slightly different from a regular file. - -### The `self` variable - -The self variable is a variable that represents a class. In the case of cogs, `self` represents -the cog. In the `__init__` function, you can see that we have `self.bot = bot`. `bot` represents your -`discord.Bot` or `discord.ext.commands.Bot` instance, which is used for some functions. - -This means that instead of using functions that would usually be accessed via `bot`, you now need -to access them via `self.bot` - -Because we're in a class, all of our commands are methods of that class. Because of this, all of our -functions need to have `self` as the first parameter, where `self` is the cog. Without this, we -wouldn't be able to access our bot instance. - -### Creating Commands - -When creating prefixed commands, your decorator would usually be something like `@bot.command()`. If you're using -cogs, this isn't the case. In a cog, you can't access the bot instance outside of functions, so to -register a function as a command, you must instead use `@commands.command()`. - -Similar to prefixed commands, you'll have to use either the `@discord.slash_command()`, `@discord.user_command()`, -or `@discord.message_command()` decorators for Application Commands. - -Also, when creating a command, make sure that it is indented. If we want a command to be actually -inside a cog, it has to be inside your cog's class. If the command is not inside the cog, -your command becomes useless. - -### Events - -When creating events, you can no longer use `@bot.event` as a decorator. This is because we cannot -access the `bot` variable outside a function. To make an event, you have to use the `ext.commands` -method, `@commands.Cog.listener()`. Events also need `self` as their first parameter. - -And that's it! Cogs are a simple and easy way of organizing your code. Now you can check out how to -create a help command [here](../extensions/commands/help-command). - -:::info Related Topics - -- [Creating a Help Command](../extensions/commands/help-command) -- [Rules and Common Practices](../getting-started/rules-and-common-practices) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Application Commands](../interactions#application-commands) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx b/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx deleted file mode 100644 index 3599cc82..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx +++ /dev/null @@ -1,383 +0,0 @@ ---- -title: Error Handling -description: All about handling errors. ---- - -import { - DiscordEmbed, - DiscordInteraction, - DiscordMessage, -} from "@pycord/discord-message-components-react"; -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -## About - -When using the library, errors are frequently raised due to various reasons. These reasons range from the Discord API -failing your bot's request due to missing permissions or an invalid syntax error. - -Before going into error handling, it's best that you learn the basic ways of handling errors. A good resource is: - -- [W3Schools' Guide to Python Try-Except Statements](https://www.w3schools.com/python/python_try_except.asp) - -## Basic Handling - -The most basic way to handle errors is to tackle it at the source. This can be done like so: - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -import asyncio - -import discord - -intents = discord.Intents.default() -intents.message_content = True - -bot = discord.Bot(intents=intents) - - -@bot.slash_command(description="Gets some feedback.") -@discord.option("name", description="Enter your name.") -async def feedback(ctx: discord.ApplicationContext, name: str): - try: - await ctx.respond(f"Hey, {name}! Send your feedback within the next 30 seconds please!") - - def is_author(m: discord.Message): - return m.author.id == ctx.author.id - - feedback_message = await bot.wait_for("message", check=is_author, timeout=30.0) - await ctx.send(f"Thanks for the feedback!\nReceived feedback: `{feedback_message.content}`") - except asyncio.TimeoutError: - await ctx.send("Timed out, please try again!") - - -bot.run("TOKEN") -``` - -If you respond within 30 seconds, the interaction will look like so: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Great bot! - - - Thanks for the feedback! -
- Received feedback: Great bot! -
-
-
- -Otherwise, if you don't respond in time, the interaction will go as follows: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Timed out, please try again! - -
-
- -This basic method of error handling can be extended to handle -many other errors including ones raised directly by py-cord. - -## Per-Command Handling - -This type of error handling allows you to handle errors per each command you have on your bot. -Each and every command can have it's own error handler made to handle specific errors that each command may raise! - -An example of per-command error handling is as follows: - -:::note Bridge Commands - -For these types of commands, it is recommended to utilize global error handling -until [the feature](https://github.com/Pycord-Development/pycord/issues/1388) is added. -::: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot(owner_id=...) # Your Discord user ID goes in owner_id - - -@bot.slash_command(description="A private command...") -@commands.is_owner() # This decorator will raise commands.NotOwner if the invoking user doesn't have the owner_id -async def secret(ctx: discord.ApplicationContext): - await ctx.respond(f"Hey {ctx.author.name}! This is a secret command!") - - -@secret.error -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.NotOwner): - await ctx.respond("Sorry, only the bot owner can use this command!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If your ID is registered as the owner ID, you'll get the following: - - - -
- - secret - -
- Hey Dorukyum! This is a secret command! -
-
-
- -Any other user whose ID doesn't match the bot owner's will get the following: - - - -
- - secret - -
- Sorry, only the bot owner can use this command! -
-
-
- -This local (per-command) error handler can also be used to handle the same types of errors that standard try-except -statements can handle. This is done by using the same method as above with the `isinstance` built-in function. - -## Per-Cog Handling - -Adding error handlers per-command can be quite the task in terms of work if you have a lot. If you have happened to -group your commands in cogs, then you're in luck! You can create an error handler that is specific to a cog and -handles all errors raised by commands inside that cog. - -Here's an example of a bot with a cog that implements its own error handling: - -```python title="./cogs/dm.py" -# This cog is for DM only commands! Sadly, we only have 1 command here right now... - -import discord -from discord.ext import commands - - -class DM(commands.Cog): - def __init__(self, bot: commands.Bot): - self.bot = bot - - @commands.command() - @commands.dm_only() # This decorator will raise commands.PrivateMessageOnly if invoked in a guild context. - async def avatar(self, ctx: commands.Context): - embed = discord.Embed( - title="Avatar", - description=f"Here's your enlarged avatar, {ctx.author.name}!", - color=ctx.author.top_role.color - ) - embed.set_image(url=ctx.author.display_avatar.url) - await ctx.send(embed=embed, reference=ctx.message) - - async def cog_command_error(self, ctx: commands.Context, error: commands.CommandError): - if isinstance(error, commands.PrivateMessageOnly): - await ctx.send("Sorry, you can only use this in private messages!", reference=ctx.message) - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -def setup(bot: commands.Bot): - bot.add_cog(DM(bot)) -``` - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -# This is the main file where we load the DM cog and run the bot. - -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix=commands.when_mentioned_or("!")) -bot.load_extension("cogs.dm") -bot.run("TOKEN") -``` - -If you use this command in a DM context, you'll get the following: - - - - !avatar - - -
- - !avatar - -
- - Here's your enlarged avatar, BobDotCom! - -
-
-
- -Otherwise, if used in a guild context: - - - - !avatar - - -
- - !avatar - -
- Sorry, you can only use this in private messages! -
-
-
- -Per-cog error handling comes in very handy as you can relegate all of your error handling to a single function instead -of spreading it out across several per-command error handlers or inside the commands themselves. - -## Global Handling - -If separating your error handling is not how you would like to handle errors, then global error handling is the way to -go. This method of handling allows you to relegate all handling to a single function that resides within your bot -instance. - -A non-subclassed bot would implement this like so: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot() - - -@bot.slash_command(description="Get the bot's current latency!") -@commands.cooldown(1, 30, commands.BucketType.user) -# ^ This decorator allows one usage of the command every 30 seconds and raises commands.CommandOnCooldown if exceeded -async def ping(ctx: discord.ApplicationContext): - await ctx.respond(f"Pong! `{int(bot.latency*1000)} ms`.") - - -@bot.event -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.CommandOnCooldown): - await ctx.respond("This command is currently on cooldown!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If you've subclassed your bot, the `on_application_command_error` event will be placed inside the subclass without a -`bot.event` decorator and `bot.slash_command` will be replaced with `discord.slash_command`. - -The error handling used above will yield this interaction if the command is used again too quickly: - - - -
- - ping - -
- Pong! 49 ms. -
- -
- - ping - -
- This command is currently on cooldown! -
-
-
- -The only issue regarding global error handling is that, if you have a large amount of commands, the global handler may -start to get crammed with a lot of code. This is where all the previously mentioned handlers can take their place! - -## FAQ - -#### Why does the example in per-cog handling have self at the start of its function signatures? - -This is a feature of classes and allows you to reference the cog object as `self` and get access to the bot object -passed at initialization through `self.bot`. - -If this is new to you, we recommend checking out these helpful resources to learn more about classes and cogs: - -- [W3Schools' Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [Our Cogs Guide Page](./cogs) - -#### How many errors can I handle in a single error handler? - -While all the examples in this guide page only handle one specific error and re-raise all others, all of these -error handlers can be extended to catch many errors. - -In [basic handling](#basic) (i.e. try/except statements) you can do one of two things: - -- Explicitly handle the errors you know might get raised and then have a broad `except Exception as exc:` statement - as a catch-all. -- Catch any and all errors via the catch-all statement mentioned above. - -In [per-command](#percommand), [per-cog](#percog), and [global handling](#global), you can use elif clauses with the -built-in isinstance function to catch specific errors. Atop of this, an else clause can be used to catch any other -errors you either don't want to handle or want to relegate to a different error handler. - -#### Can I use more than one type of error handler at once? - -Thankfully, all of these different ways of error handling can be mixed together, so you don't have to pick just one! -For commands that raise specific errors that no other commands will raise, you can use [per-command](#percommand). -For cogs that raise specific errors that no other cogs will raise, use [per-cog](#percog)! Lastly, for errors that -occur frequently across all commands and cogs, use [global handling](#global)! - -However, one important note to remember is that you should always raise the error again in an error handler if it -isn't handled there! If you don't do this, the error will go ignored and your other handlers won't have a chance to -do their work! - -#### What's the difference between slash and prefixed command error handling? - -Although most examples shown here use slash commands, the [per-cog handling](#percog) section presents a prefixed -command. The main difference you may notice is the change in command signature. - -To make the distinguishing features apparent: - -- Slash commands use `on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException)` - as presented in the [per-command](#percommand) and [global handling](#global) examples. -- Prefixed commands use `on_command_error(ctx: commands.Context, error: commands.CommandError)` as presented in the - [per-cog handling](#percog) example. - -This distinction is made as both types of commands need their own system for handling errors that are specific to -themselves. - -:::info Related Topics - -- [Slash Commands](../interactions/application-commands/slash-commands) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Cogs](./cogs) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx b/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx deleted file mode 100644 index 9f4210af..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Intents -description: All about intents in Discord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## What are Intents? - -Intents allow bot developers to "subscribe" to specific events in Discord. This is useful for bots that need to respond to specific events, such as when a user joins a server or sends a message. You could choose to enable all intents or to enable only specific intents that your bot requires. - -## How do I enable intents? - -:::important - -Remember that [Privileged Intents](#what-are-privileged-intents) require you to enable them in the Discord Developer Portal. Verified Discord Bots that don't already have access to them will need to request Discord to allow access. - -::: - - - - -```python -import discord - -bot = discord.Bot(intents=discord.Intents.all()) -``` - - - - - -You can view a list of intents and the events they subscribe to [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```python title="Enabling Intents" -import discord - -bot = discord.Bot(intents=discord.intents.members(bans=True, guilds=True)) -``` - - - - -## What are Privileged Intents? - -Discord defines some intents as "privileged" because of the sensitive information they contain. Currently, there are three privileged intents: `members`, `presences`, and `message_content`. These intents must be enabled in your bot's Developer Portal. Once your bot reaches 100 servers, you will need to verify your bot for these intents to keep working and for your bot to be able to be invited to more guilds. - -:::tip - -Only enable these intents if you need them. These intents give your bot access to quite sensitive information about the users in your guild. These intents are privileged to respect the privacy of users, and you should do that as well. - -Not enabling these intents doesn't mean you won't be able to ban users, but you will be unable to detect when a new user joins a guild, or what game they are playing. The majority of bots won't need all intents. - -::: - -:::info Related Topics - -- [Sharding Bots](sharding) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx b/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx deleted file mode 100644 index c3d17197..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Sharding -description: All about Sharding Discord Bots. ---- - -# Sharding - -## What is Sharding? - -Sharding is the process of breaking up your bot into smaller pieces so that it has a better time handling -events. As [Discord's Documentation](https://discord.com/developers/docs/topics/gateway#sharding) puts -it, sharding is "a method of user-controlled guild sharding which allows for splitting events across -several gateway connections." - -Sharding is used only for large bots and takes up additional resources for managing the new processes. -Pycord automatically shards your bot, so the only thing you need to do is use an `AutoShardedClient` -or `AutoShardedBot` class instead of a plain `Client` or `Bot` class. Pretty cool, right? - -Just because you _can_ shard your bot doesn't mean you _should_. While Pycord makes it easy to shard -your bot, it isn't necessary to shard unless your bot is large. Sharding a small bot isn't -just useless, but _harmful_, as it uses extra resources and may slow down your bot. Discord -themselves will let you know when your bot needs sharding, so you won't need to worry about this until they contact you. - -## How Do I Shard in Pycord? - -Sharding in Pycord is straightforward. - -Just replace your `discord.Client`, `discord.Bot`, `commands.Bot` objects -with `discord.AutoShardedClient`, `discord.AutoShardedBot`, `commands.AutoShardedBot` respectively. - -These new objects have been inherited from the original objects, so all the functions from those other types should be present. - -If you want to specify the number of shards your bot uses, -just add the `shards` parameter, along with the number of shards you want. - -## Why Should I Shard my Bot? - -Sharding is very necessary for big bots. While your bot grows, it gets harder for your bot to control -how many guilds it is in and what parts of your code should do what. This is exactly what sharding -handles, it makes all of this easier for your bot. Remember, though, only shard your bot once it's -big enough, and that's at _least_ 1,000 guilds. - -:::info Related Topics - -- [Hosting your Bot](../Getting-Started/hosting-your-bot) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx b/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx deleted file mode 100644 index bd2969c1..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Subclassing Bots -description: Subclassing is a popular way of creating Discord Bots. Explore how you can create a Discord bot by subclassing. ---- - -## About - -Subclassing is another popular way of creating Discord Bots. Here, you create a bot by extending a bot class. To some advanced users, this is preferable to creating a bot instance with `bot = discord.Bot()`. - -Subclassing is an intermediate python concept, so we recommend you learn about it before continuing. Some good resources are: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -## Why Subclassing? - -Many developers prefer to subclass their bots for many reasons, some of them being: - -#### Skeletal Frameworks for Bots - -Developers often share their bots code on open-source platforms, mostly GitHub, and allow users to self-host the bot (running their own instance of the bot with the code provided by the developer. Permissions vary in accordance to licences). Here, users find it easier and more convenient to have a small file that imports the custom bot class and runs it, rather than having to go through the code of the bot and find out which file to run. This makes it easier for people not familiar with programming to run and customize the bot, since it often brings down the code to: - -```python title="./main.py" -from src import Bot - -bot = Bot() - -bot.run("TOKEN") -``` - -Here, all the commands are inside the `/src` folder that the user need not bother with. - -#### Running Multiple Instances - -Some developers may need to run multiple instances of their bot (perhaps on different bot accounts). For example, a developer might have a second bot for testing alpha features. This system makes it simpler for the developer, and allows them to maintain multiple versions of the bot in the same directory: - -```python title="./alpha_bot.py" -from src import Bot - -class AlphaBot(Bot): # subclasses Bot - ... # insert any custom configuration - -bot = AlphaBot() - -@bot.slash_command() # adds a new slash command to this subclassed bot -async def alpha_feature(ctx): - await ctx.respond("Alpha Feature!") - -bot.run("TOKEN") -``` - -There are many more reasons to subclass! It's not required, and won't affect the speed of the bot, but it may affect your development process, for the good or for the worse. You don't miss out on any features when you subclass, either. Some developers want the OOP feel, while some just prefer that method and find it easier. - -## Basic Example - -```python -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override the on_ready event - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') - -bot = MyBot() - -@bot.slash_command() # create a slash command -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run('token') -``` - -As you can see, instead of creating a bot object with `bot = discord.Bot()`, we subclass [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). We then create an instance of our new bot class and run it. Notice how we don't need to use the `@event` decorator. - -Here's another example: - -```python title="./src/bot.py" -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override on_ready - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') -``` - -```python title="./src/\_\_init\_\_.py" -from .bot import MyBot # import the MyBot class from the bot.py file -``` - -```python title="./main.py" -from src import MyBot # import MyBot from /src - -bot = MyBot() # create an instance of MyBot - -@bot.slash_command() -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run("TOKEN") # run the bot -``` - -These are just two ways you could do it. There are ton of other structures you can implement. It's up to you. - -So, should you subclass? There are no limitations you face if you decide to subclass your bot, but, once again, it's up to you. - -:::info Related Topics - -- [Making a Help Command](../Extensions/Commands/help-command) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx b/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx deleted file mode 100644 index 23220b0e..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Threads -description: Threads with Pycord ---- - -In programming, threads are a way to run multiple processes at the same time. In Discord, threads are -a way to keep multiple conversations going at the same time. Let's take a brief look at how to use threads in Pycord. - -:::tip - -Not all the methods and attributes will be covered in this guide, but you can find them in our documentation! -[Check it out!](https://docs.pycord.dev/en/stable/api/models.html#discord.Thread) - -::: - -## Creating a thread - -With a few simple lines of code, we can create threads in Pycord. - -:::important - -All public threads need a starting message. This message will start the thread. However, private threads -(which are unlocked with having your server boosted to Level 2), do not require a starting message. - -::: - -### Creating thread from a message - -```python title="Creating a Thread from a Message" -message = await ctx.send("My Starting Message") -await message.create_thread(name="thread name", auto_archive_duration=60) -``` - -You may also use other ways to create the thread, for example, by using `on_message` events or by commands. - -### Creating thread in a channel - -```python title="Creating a Thread from a Channel" -channel = bot.get_channel(...) # define this! -await channel.create_thread(name="Thread Name", message=None, auto_archive_duration=60, type=None, reason=None) -``` - -A thread type could be `news_thread`, `public_thread`, `private_thread`. You may use it by passing `type=discord.ChannelType.news_thread`. - -## Deleting Threads - -Deleting Threads is simple. You need to get a thread and then use the `delete` method. - -```python title="Deleting a Thread" -thread = bot.get_channel(thread_id) # you could use other ways to get a thread -await thread.delete() -``` - -## Editing Threads - -**Parameters** - -- `name` (str) – The new name of the thread - -- `archived` (bool) – Whether to archive the thread or not. - -- `locked` (bool) – Whether to lock the thread or not. - -- `invitable` (bool) – Whether non-moderators can add other non-moderators to this thread. Only available for private threads. - -- `auto_archive_duration` (int) – The new duration in minutes before a thread gets automatically archived for inactivity. Must be one of 60, 1440, 4320, or 10080. - -- `slowmode_delay` (int) – Specifies the slow-mode rate limit for users in the thread, in seconds. A value of 0 disables slow-mode. The maximum value possible is 21600. - -```python title="Editing a Thread" -thread = bot.get_channel(id) -await thread.edit( - name="New Name", - archived=True, - locked=True, - slowmode_delay=10, - auto_archive_duration=60, -) -``` - -As you can see, threads are very simple. Once you learn how to use them, it's easy to create whatever you want. - -## FAQ - -### Why am I getting a `Forbidden` error when I try to create a thread? - -A `Forbidden` error occurs when the bot does not have the correct permissions to create threads. - -### Why am I getting an Unknown Message error when I try to create a thread? - -Getting an error looking something like `discord.ext.commands.errors.CommandInvokeError: Command -raised an exception: HTTPException: 400 Bad Request (error code: 10008): Unknown Message`? - -There could be multiple reasons, some of them being: - -- The message does not exist -- The message already has a thread -- The message is in channel x, you are trying to start a thread in channel y. -- The message was deleted. - -:::info Related Topics - -<>{/* I can't think of any related topics for this at the moment. */} - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/voice/_category_.json b/i18n/de/docusaurus-plugin-content-docs/current/voice/_category_.json deleted file mode 100644 index 8baf3da8..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/voice/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 6, - "label": "Voice" -} \ No newline at end of file diff --git a/i18n/de/docusaurus-plugin-content-docs/current/voice/index.mdx b/i18n/de/docusaurus-plugin-content-docs/current/voice/index.mdx deleted file mode 100644 index 835838c6..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/voice/index.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Voice ---- - -Welcome to the guide for voice features in Pycord. - -:::caution -This guide requires previous experience with Pycord and Python. -::: - -## Requirements - -The only requirement which is required for voice features is [`PyNaCl`](https://pypi.org/project/PyNaCl/). -The following features are optional: - -:::tip -Opus is also a required library, but this comes with Pycord. -Some hosts may not come with it, though, so remember to always check if required dependencies are installed. -::: - -- [`FFmpeg`](https://ffmpeg.org) - used for sending/receiving files other than `.pcm` and `.wav` -- [`Pycord.Wavelink`](https://github.com/Pycord-Development/Pycord.Wavelink), - [`Lavalink.py`](https://github.com/Devoxin/Lavalink.py), - [`Wavelink`](https://github.com/PythonistaGuild/Wavelink) or any other Python LavaLink library for music playback. diff --git a/i18n/de/docusaurus-plugin-content-docs/current/voice/playing.mdx b/i18n/de/docusaurus-plugin-content-docs/current/voice/playing.mdx deleted file mode 100644 index 7a58baee..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/voice/playing.mdx +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Wavelink Audio Player ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { - defaultOptions, -} from "@site/src/components/DiscordComponent"; - -# About - -Pycord and Wavelink try to keep the playing of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio playing feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/). - -## Starting out - -First you need to run a [Lavalink Server](https://github.com/freyacodes/Lavalink) to connect with. -There a multiple documentations to do this, so we are not covering that here. - -You also need to install the [wavelink](https://github.com/PythonistaGuild/Wavelink) library. - -```py title="Installing wavelink" -python3 -m pip install wavelink -``` - -You will now want to connect to your server via a node. - -```py title="Connect Node with Lavalink" -import discord -import wavelink - -bot = discord.Bot() - -async def connect_nodes(): - """Connect to our Lavalink nodes.""" - await bot.wait_until_ready() # wait until the bot is ready - - nodes = [ - wavelink.Node( - identifier="Node1", # This identifier must be unique for all the nodes you are going to use - uri="http://0.0.0.0:443", # Protocol (http/s) is required, port must be 443 as it is the one lavalink uses - password="youshallnotpass" - ) - ] - - await wavelink.Pool.connect(nodes=nodes, client=bot) # Connect our nodes -``` - -
- -Now you are finished making your node! Next, you will want to: - -1. Making a play command -2. Adding connect events - -### Making a play command - -To make a play command, you will need to make a function to connect and play audio in a voice channel. - -```py title="Play Command Example" -import typing - -@bot.slash_command(name="play") -async def play(ctx, search: str): - # First we may define our voice client, - # for this, we are going to use typing.cast() - # function just for the type checker know that - # `ctx.voice_client` is going to be from type - # `wavelink.Player` - vc = typing.cast(wavelink.Player, ctx.voice_client) - - if not vc: # We firstly check if there is a voice client - vc = await ctx.author.voice.channel.connect(cls=wavelink.Player) # If there isn't, we connect it to the channel - - # Now we are going to check if the invoker of the command - # is in the same voice channel than the voice client, when defined. - # If not, we return an error message. - if ctx.author.voice.channel.id != vc.channel.id: - return await ctx.respond("You must be in the same voice channel as the bot.") - - # Now we search for the song. You can optionally - # pass the "source" keyword, of type "wavelink.TrackSource" - song = await wavelink.Playable.search(search) - - if not song: # In case the song is not found - return await ctx.respond("No song found.") # we return an error message - - await vc.play(song) # Else, we play it - await ctx.respond(f"Now playing: `{song.title}`") # and return a success message -``` - - - -
- - play - -
- Now playing: Never Gonna Give You Up -
-
- -
- -Now that you've done this, the only thing left to do is make your connect events. - -### Adding connect events - -The final step to this guide is connecting the node to your server when the bot goes online. - -To make it, you will want to do the following: - -```py title="Adding connect events" -@bot.event -async def on_ready(): - await connect_nodes() # connect to the server - -@bot.event -async def on_wavelink_node_ready(payload: wavelink.NodeReadyEventPayload): - # Everytime a node is successfully connected, we - # will print a message letting it know. - print(f"Node with ID {payload.session_id} has connected") - print(f"Resumed session: {payload.resumed}") - -bot.run("token") -``` - -Congratulations! You have now implemented voice playing into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/de/docusaurus-plugin-content-docs/current/voice/receiving.mdx b/i18n/de/docusaurus-plugin-content-docs/current/voice/receiving.mdx deleted file mode 100644 index 70f91507..00000000 --- a/i18n/de/docusaurus-plugin-content-docs/current/voice/receiving.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Receiving Voice Samples ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -# About - -Pycord tries to keep the recording of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio recording feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/audio_recording.py). - -## Starting out - -The first thing you want to do is make a cache of your voice connections. This is fairly easy; as -it's just putting a variable with an empty dictionary in our code, such as `connections = {}`. - -You will now want to create your command for recording. - -```py title="Record Command Example" -import discord - -bot = discord.Bot() -connections = {} - -@bot.command() -async def record(ctx): # If you're using commands.Bot, this will also work. - voice = ctx.author.voice - - if not voice: - await ctx.respond("You aren't in a voice channel!") - - vc = await voice.channel.connect() # Connect to the voice channel the author is in. - connections.update({ctx.guild.id: vc}) # Updating the cache with the guild and channel. - - vc.start_recording( - discord.sinks.WaveSink(), # The sink type to use. - once_done, # What to do once done. - ctx.channel # The channel to disconnect from. - ) - await ctx.respond("Started recording!") -``` - - - -
- - record - -
- Started recording! -
-
- -
- -Now you are finished making your command for voice receiving! Next, you will want to: - -1. Make your finished callback -2. Make a stop command - -### Making a Callback - -To make a callback, you will want to define the currently undefined `once_done` function inside -our command, like so: - -```py title="Recorder Callback" -async def once_done(sink: discord.sinks, channel: discord.TextChannel, *args): # Our voice client already passes these in. - recorded_users = [ # A list of recorded users - f"<@{user_id}>" - for user_id, audio in sink.audio_data.items() - ] - await sink.vc.disconnect() # Disconnect from the voice channel. - files = [discord.File(audio.file, f"{user_id}.{sink.encoding}") for user_id, audio in sink.audio_data.items()] # List down the files. - await channel.send(f"finished recording audio for: {', '.join(recorded_users)}.", files=files) # Send a message with the accumulated files. -``` - - - - finished recording audio for:{" "} - {defaultOptions.profiles.bob.author} - - - -
- -Now that you've done this, the only thing left to do is make your stop command. - -### Making a Stop Command - -The final step to this guide is stopping the audio recording. This is the easiest step by far. - -To make it, you will want to do the following: - -```py title="Stop Recording Command" -@bot.command() -async def stop_recording(ctx): - if ctx.guild.id in connections: # Check if the guild is in the cache. - vc = connections[ctx.guild.id] - vc.stop_recording() # Stop recording, and call the callback (once_done). - del connections[ctx.guild.id] # Remove the guild from the cache. - await ctx.delete() # And delete. - else: - await ctx.respond("I am currently not recording here.") # Respond with this if we aren't recording. - -bot.run("token") -``` - -Congratulations! You have now implemented voice recording into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/de/docusaurus-plugin-content-pagesindex.tsx b/i18n/de/docusaurus-plugin-content-pagesindex.tsx deleted file mode 100644 index 6ca77bb2..00000000 --- a/i18n/de/docusaurus-plugin-content-pagesindex.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import DefaultLayout from "@site/src/layouts/DefaultLayout"; -import PYCHero from "@site/src/components/PYCHero"; -import PYCButton from "@site/src/components/PYCButton"; - -export default function Home(): JSX.Element { - return ( - - -
- Imagine a place where you can learn how to create an awesome Discord - bot, equip it with Pycord, and have it running in less than a minute. - Imagine a place where you can learn everything about Pycord. Imagine a - guide. A Pycord Guide! -

- Whether you are a newbie or an experienced developer, you will find - everything you need to know about Pycord here. This guide will teach - you: -
    -
  • How to get a brand new bot running from scratch;
  • -
  • How to create Interactions, Context Menus and Commands;
  • -
  • In-depth concepts such as Embeds, Reactions, Help Commands, Paginators, etc;
  • -
  • Popular Topics such as working with Databases, Sharding, etc;
  • -
  • Ways to handle and manage common errors and best practices for bots;
  • -
  • And Much More!
  • -
-
-
- ); -} diff --git a/i18n/de/docusaurus-theme-classic/footer.json b/i18n/de/docusaurus-theme-classic/footer.json deleted file mode 100644 index 82aab2e0..00000000 --- a/i18n/de/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "copyright": { - "message": "Copyright © 2022-2026 Pycord Development, All rights reserved.", - "description": "The footer copyright" - } -} diff --git a/i18n/de/docusaurus-theme-classic/navbar.json b/i18n/de/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 473b847e..00000000 --- a/i18n/de/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "title": { - "message": "Pycord Guide", - "description": "The title in the navbar" - }, - "item.label.Home": { - "message": "Home", - "description": "Navbar item with label Home" - }, - "item.label.Docs": { - "message": "Docs", - "description": "Navbar item with label Docs" - }, - "item.label.GitHub": { - "message": "GitHub", - "description": "Navbar item with label GitHub" - }, - "item.label.Source": { - "message": "Source", - "description": "Navbar item with label Source" - } -} diff --git a/i18n/en/code.json b/i18n/en/code.json deleted file mode 100644 index 9cce6148..00000000 --- a/i18n/en/code.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "theme.ErrorPageContent.title": { - "message": "This page crashed.", - "description": "The title of the fallback page when the page crashed" - }, - "theme.NotFound.title": { - "message": "Page Not Found", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "We could not find what you were looking for.", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.admonition.note": { - "message": "note", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "tip", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.danger": { - "message": "danger", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "info", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.caution": { - "message": "caution", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "Scroll back to top", - "description": "The ARIA label for the back to top button" - }, - "theme.blog.archive.title": { - "message": "Archive", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "Archive", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "Blog list page navigation", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "Newer Entries", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "Older Entries", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "Blog post page navigation", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "Newer Post", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "Older Post", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.blog.post.plurals": { - "message": "One post|{count} posts", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} tagged with \"{tagName}\"", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "View All Tags", - "description": "The label of the link targeting the tag list page" - }, - "theme.colorToggle.ariaLabel": { - "message": "Switch between dark and light mode (currently {mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "dark mode", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "light mode", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "Breadcrumbs", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription": { - "message": "{count} items", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "Docs pages", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "Previous", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "Next", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "One doc tagged|{count} docs tagged", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "{nDocsTagged} with \"{tagName}\"", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versionBadge.label": { - "message": "Version: {versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "latest version", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "Edit this page", - "description": "The link label to edit the current page" - }, - "theme.common.headingLinkTitle": { - "message": "Direct link to {heading}", - "description": "Title for link to heading" - }, - "theme.lastUpdated.atDate": { - "message": " on {date}", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": " by {user}", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "Last updated{atDate}{byUser}", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "Versions", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "Tags:", - "description": "The label alongside a tag list" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "Close", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "Blog recent posts navigation", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.copied": { - "message": "Copied", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "Copy code to clipboard", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "Copy", - "description": "The copy button label on code blocks" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "Toggle word wrap", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "Toggle the collapsible sidebar category '{label}'", - "description": "The ARIA label to toggle the collapsible sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "Main", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "Languages", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "On this page", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "Read More", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "Read more about {title}", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.blog.post.readingTime.plurals": { - "message": "One min read|{readingTime} min read", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.breadcrumbs.home": { - "message": "Home page", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "Docs sidebar", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "Close navigation bar", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← Back to main menu", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "Toggle navigation bar", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.SearchBar.seeAll": { - "message": "See all {count} results" - }, - "theme.SearchPage.documentsFound.plurals": { - "message": "One document found|{count} documents found", - "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.SearchPage.existingResultsTitle": { - "message": "Search results for \"{query}\"", - "description": "The search page title for non-empty query" - }, - "theme.SearchPage.emptyResultsTitle": { - "message": "Search the documentation", - "description": "The search page title for empty query" - }, - "theme.SearchPage.inputPlaceholder": { - "message": "Type your search here", - "description": "The placeholder for search page input" - }, - "theme.SearchPage.inputLabel": { - "message": "Search", - "description": "The ARIA label for search page input" - }, - "theme.SearchPage.algoliaLabel": { - "message": "Search by Algolia", - "description": "The ARIA label for Algolia mention" - }, - "theme.SearchPage.noResultsText": { - "message": "No results were found", - "description": "The paragraph for empty search result" - }, - "theme.SearchPage.fetchingNewResults": { - "message": "Fetching new results...", - "description": "The paragraph for fetching new search results" - }, - "theme.SearchBar.label": { - "message": "Search", - "description": "The ARIA label and placeholder for search button" - }, - "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "Clear the query", - "description": "The label and ARIA label for search box reset button" - }, - "theme.SearchModal.searchBox.cancelButtonText": { - "message": "Cancel", - "description": "The label and ARIA label for search box cancel button" - }, - "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "Recent", - "description": "The title for recent searches" - }, - "theme.SearchModal.startScreen.noRecentSearchesText": { - "message": "No recent searches", - "description": "The text when no recent searches" - }, - "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { - "message": "Save this search", - "description": "The label for save recent search button" - }, - "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "Remove this search from history", - "description": "The label for remove recent search button" - }, - "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "Favorite", - "description": "The title for favorite searches" - }, - "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "Remove this search from favorites", - "description": "The label for remove favorite search button" - }, - "theme.SearchModal.errorScreen.titleText": { - "message": "Unable to fetch results", - "description": "The title for error screen of search modal" - }, - "theme.SearchModal.errorScreen.helpText": { - "message": "You might want to check your network connection.", - "description": "The help text for error screen of search modal" - }, - "theme.SearchModal.footer.selectText": { - "message": "to select", - "description": "The explanatory text of the action for the enter key" - }, - "theme.SearchModal.footer.selectKeyAriaLabel": { - "message": "Enter key", - "description": "The ARIA label for the Enter key button that makes the selection" - }, - "theme.SearchModal.footer.navigateText": { - "message": "to navigate", - "description": "The explanatory text of the action for the Arrow up and Arrow down key" - }, - "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "Arrow up", - "description": "The ARIA label for the Arrow up key button that makes the navigation" - }, - "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "Arrow down", - "description": "The ARIA label for the Arrow down key button that makes the navigation" - }, - "theme.SearchModal.footer.closeText": { - "message": "to close", - "description": "The explanatory text of the action for Escape key" - }, - "theme.SearchModal.footer.closeKeyAriaLabel": { - "message": "Escape key", - "description": "The ARIA label for the Escape key button that close the modal" - }, - "theme.SearchModal.footer.searchByText": { - "message": "Search by", - "description": "The text explain that the search is making by Algolia" - }, - "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "No results for", - "description": "The text explains that there are no results for the following search" - }, - "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "Try searching for", - "description": "The text for the suggested query when no results are found for the following search" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "Believe this query should return results?", - "description": "The text for the question where the user thinks there are missing results" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "Let us know.", - "description": "The text for the link to report missing results" - }, - "theme.SearchModal.placeholder": { - "message": "Search docs", - "description": "The placeholder of the input of the DocSearch pop-up modal" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "Try again", - "description": "The label of the button to try again rendering when the React error boundary captures an error" - }, - "theme.common.skipToMainContent": { - "message": "Skip to main content", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "Tags", - "description": "The title of the tag list page" - } -} diff --git a/i18n/en/docusaurus-plugin-content-blog/options.json b/i18n/en/docusaurus-plugin-content-blog/options.json deleted file mode 100644 index 9239ff70..00000000 --- a/i18n/en/docusaurus-plugin-content-blog/options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": { - "message": "Blog", - "description": "The title for the blog used in SEO" - }, - "description": { - "message": "Blog", - "description": "The description for the blog used in SEO" - }, - "sidebar.title": { - "message": "Recent posts", - "description": "The label for the left sidebar" - } -} diff --git a/i18n/en/docusaurus-plugin-content-docs/current.json b/i18n/en/docusaurus-plugin-content-docs/current.json deleted file mode 100644 index 36b4849a..00000000 --- a/i18n/en/docusaurus-plugin-content-docs/current.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.defaultSidebar.category.Getting Started": { - "message": "Getting Started", - "description": "The label for category Getting Started in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Interactions": { - "message": "Interactions", - "description": "The label for category Interactions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Application Commands": { - "message": "Application Commands", - "description": "The label for category Application Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.UI Components": { - "message": "UI Components", - "description": "The label for category UI Components in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Extensions": { - "message": "Extensions", - "description": "The label for category Extensions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Commands": { - "message": "Commands", - "description": "The label for category Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Pages": { - "message": "Pages", - "description": "The label for category Pages in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Voice": { - "message": "Voice", - "description": "The label for category Voice in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Popular Topics": { - "message": "Popular Topics", - "description": "The label for category Popular Topics in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar defaultSidebar" - } -} diff --git a/i18n/en/docusaurus-theme-classic/footer.json b/i18n/en/docusaurus-theme-classic/footer.json deleted file mode 100644 index 82aab2e0..00000000 --- a/i18n/en/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "copyright": { - "message": "Copyright © 2022-2026 Pycord Development, All rights reserved.", - "description": "The footer copyright" - } -} diff --git a/i18n/en/docusaurus-theme-classic/navbar.json b/i18n/en/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 473b847e..00000000 --- a/i18n/en/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "title": { - "message": "Pycord Guide", - "description": "The title in the navbar" - }, - "item.label.Home": { - "message": "Home", - "description": "Navbar item with label Home" - }, - "item.label.Docs": { - "message": "Docs", - "description": "Navbar item with label Docs" - }, - "item.label.GitHub": { - "message": "GitHub", - "description": "Navbar item with label GitHub" - }, - "item.label.Source": { - "message": "Source", - "description": "Navbar item with label Source" - } -} diff --git a/i18n/es/code.json b/i18n/es/code.json deleted file mode 100644 index 9cce6148..00000000 --- a/i18n/es/code.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "theme.ErrorPageContent.title": { - "message": "This page crashed.", - "description": "The title of the fallback page when the page crashed" - }, - "theme.NotFound.title": { - "message": "Page Not Found", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "We could not find what you were looking for.", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.admonition.note": { - "message": "note", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "tip", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.danger": { - "message": "danger", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "info", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.caution": { - "message": "caution", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "Scroll back to top", - "description": "The ARIA label for the back to top button" - }, - "theme.blog.archive.title": { - "message": "Archive", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "Archive", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "Blog list page navigation", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "Newer Entries", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "Older Entries", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "Blog post page navigation", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "Newer Post", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "Older Post", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.blog.post.plurals": { - "message": "One post|{count} posts", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} tagged with \"{tagName}\"", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "View All Tags", - "description": "The label of the link targeting the tag list page" - }, - "theme.colorToggle.ariaLabel": { - "message": "Switch between dark and light mode (currently {mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "dark mode", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "light mode", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "Breadcrumbs", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription": { - "message": "{count} items", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "Docs pages", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "Previous", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "Next", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "One doc tagged|{count} docs tagged", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "{nDocsTagged} with \"{tagName}\"", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versionBadge.label": { - "message": "Version: {versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "latest version", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "Edit this page", - "description": "The link label to edit the current page" - }, - "theme.common.headingLinkTitle": { - "message": "Direct link to {heading}", - "description": "Title for link to heading" - }, - "theme.lastUpdated.atDate": { - "message": " on {date}", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": " by {user}", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "Last updated{atDate}{byUser}", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "Versions", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "Tags:", - "description": "The label alongside a tag list" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "Close", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "Blog recent posts navigation", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.copied": { - "message": "Copied", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "Copy code to clipboard", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "Copy", - "description": "The copy button label on code blocks" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "Toggle word wrap", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "Toggle the collapsible sidebar category '{label}'", - "description": "The ARIA label to toggle the collapsible sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "Main", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "Languages", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "On this page", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "Read More", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "Read more about {title}", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.blog.post.readingTime.plurals": { - "message": "One min read|{readingTime} min read", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.breadcrumbs.home": { - "message": "Home page", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "Docs sidebar", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "Close navigation bar", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← Back to main menu", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "Toggle navigation bar", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.SearchBar.seeAll": { - "message": "See all {count} results" - }, - "theme.SearchPage.documentsFound.plurals": { - "message": "One document found|{count} documents found", - "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.SearchPage.existingResultsTitle": { - "message": "Search results for \"{query}\"", - "description": "The search page title for non-empty query" - }, - "theme.SearchPage.emptyResultsTitle": { - "message": "Search the documentation", - "description": "The search page title for empty query" - }, - "theme.SearchPage.inputPlaceholder": { - "message": "Type your search here", - "description": "The placeholder for search page input" - }, - "theme.SearchPage.inputLabel": { - "message": "Search", - "description": "The ARIA label for search page input" - }, - "theme.SearchPage.algoliaLabel": { - "message": "Search by Algolia", - "description": "The ARIA label for Algolia mention" - }, - "theme.SearchPage.noResultsText": { - "message": "No results were found", - "description": "The paragraph for empty search result" - }, - "theme.SearchPage.fetchingNewResults": { - "message": "Fetching new results...", - "description": "The paragraph for fetching new search results" - }, - "theme.SearchBar.label": { - "message": "Search", - "description": "The ARIA label and placeholder for search button" - }, - "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "Clear the query", - "description": "The label and ARIA label for search box reset button" - }, - "theme.SearchModal.searchBox.cancelButtonText": { - "message": "Cancel", - "description": "The label and ARIA label for search box cancel button" - }, - "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "Recent", - "description": "The title for recent searches" - }, - "theme.SearchModal.startScreen.noRecentSearchesText": { - "message": "No recent searches", - "description": "The text when no recent searches" - }, - "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { - "message": "Save this search", - "description": "The label for save recent search button" - }, - "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "Remove this search from history", - "description": "The label for remove recent search button" - }, - "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "Favorite", - "description": "The title for favorite searches" - }, - "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "Remove this search from favorites", - "description": "The label for remove favorite search button" - }, - "theme.SearchModal.errorScreen.titleText": { - "message": "Unable to fetch results", - "description": "The title for error screen of search modal" - }, - "theme.SearchModal.errorScreen.helpText": { - "message": "You might want to check your network connection.", - "description": "The help text for error screen of search modal" - }, - "theme.SearchModal.footer.selectText": { - "message": "to select", - "description": "The explanatory text of the action for the enter key" - }, - "theme.SearchModal.footer.selectKeyAriaLabel": { - "message": "Enter key", - "description": "The ARIA label for the Enter key button that makes the selection" - }, - "theme.SearchModal.footer.navigateText": { - "message": "to navigate", - "description": "The explanatory text of the action for the Arrow up and Arrow down key" - }, - "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "Arrow up", - "description": "The ARIA label for the Arrow up key button that makes the navigation" - }, - "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "Arrow down", - "description": "The ARIA label for the Arrow down key button that makes the navigation" - }, - "theme.SearchModal.footer.closeText": { - "message": "to close", - "description": "The explanatory text of the action for Escape key" - }, - "theme.SearchModal.footer.closeKeyAriaLabel": { - "message": "Escape key", - "description": "The ARIA label for the Escape key button that close the modal" - }, - "theme.SearchModal.footer.searchByText": { - "message": "Search by", - "description": "The text explain that the search is making by Algolia" - }, - "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "No results for", - "description": "The text explains that there are no results for the following search" - }, - "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "Try searching for", - "description": "The text for the suggested query when no results are found for the following search" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "Believe this query should return results?", - "description": "The text for the question where the user thinks there are missing results" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "Let us know.", - "description": "The text for the link to report missing results" - }, - "theme.SearchModal.placeholder": { - "message": "Search docs", - "description": "The placeholder of the input of the DocSearch pop-up modal" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "Try again", - "description": "The label of the button to try again rendering when the React error boundary captures an error" - }, - "theme.common.skipToMainContent": { - "message": "Skip to main content", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "Tags", - "description": "The title of the tag list page" - } -} diff --git a/i18n/es/docusaurus-plugin-content-blog/options.json b/i18n/es/docusaurus-plugin-content-blog/options.json deleted file mode 100644 index 9239ff70..00000000 --- a/i18n/es/docusaurus-plugin-content-blog/options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": { - "message": "Blog", - "description": "The title for the blog used in SEO" - }, - "description": { - "message": "Blog", - "description": "The description for the blog used in SEO" - }, - "sidebar.title": { - "message": "Recent posts", - "description": "The label for the left sidebar" - } -} diff --git a/i18n/es/docusaurus-plugin-content-docs/current.json b/i18n/es/docusaurus-plugin-content-docs/current.json deleted file mode 100644 index 36b4849a..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.defaultSidebar.category.Getting Started": { - "message": "Getting Started", - "description": "The label for category Getting Started in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Interactions": { - "message": "Interactions", - "description": "The label for category Interactions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Application Commands": { - "message": "Application Commands", - "description": "The label for category Application Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.UI Components": { - "message": "UI Components", - "description": "The label for category UI Components in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Extensions": { - "message": "Extensions", - "description": "The label for category Extensions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Commands": { - "message": "Commands", - "description": "The label for category Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Pages": { - "message": "Pages", - "description": "The label for category Pages in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Voice": { - "message": "Voice", - "description": "The label for category Voice in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Popular Topics": { - "message": "Popular Topics", - "description": "The label for category Popular Topics in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar defaultSidebar" - } -} diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png deleted file mode 100644 index 7480e1da90a413f8dfe8e13b66a9a2a8c5dc2bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40520 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 CfS#QI diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg b/i18n/es/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg deleted file mode 100644 index ce6b5110ab3b4285f55402fb88c1b8a8f6ba9900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78518 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 diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png deleted file mode 100644 index 32a47d0424f1ab420ca363682a12460aff040c91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39618 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 aeS&BlM7jQ%=K2BnBlKRJKmVP^m;VLX8_o0p diff --git a/i18n/es/docusaurus-plugin-content-docs/current/extensions/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/extensions/_category_.json deleted file mode 100644 index 309b494a..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/extensions/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 5, - "label": "Extensions", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json deleted file mode 100644 index 652aa4ee..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Bridge" -} \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx b/i18n/es/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx deleted file mode 100644 index 451775d3..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Bridge ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -## Concept - -Let's say that you want to make a command that is both a Slash Command and a Prefixed Command. Now, you could just copy and paste the code from the first command callback to the other and make some adjustments, but that's not very efficient. - -This is where the `ext.bridge` module comes in. It allows you to use one callback to make both a Slash Command and a Prefixed Command. - -### Example Usage - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def hello(ctx): - await ctx.respond("Hello!") - -bot.run("TOKEN") -``` - - - -

- - hello - -
- Hello! - - - - !hello - - - -
- - !hello - -
- Hello! -
- - -## Syntax - -First, instead of using `discord.Bot` or `commands.Bot`, we use `bridge.Bot`. `bridge.Bot` does inherit from `commands.Bot`, so you can do anything with `bridge.Bot` that `commands.Bot` can do. -Then, we define a command with `@bot.bridge_command()`. This makes a Bridge Command, which has both a Prefixed Command counterpart and a Slash Command counterpart. -Next, the callback has access to a `ctx` object, which is the context of the command. This context is either of `BridgeApplicationContext` type or `BridgeExtContext`. Because of that, it makes detecting how the function was called easier. - -### Using Bridge Commands in a Cog - -Like Slash Commands and Prefixed Commands, you can use Bridge Commands in a Cog. You can do this by using the `bridge_command` decorator. Here's an example: - -```python -import discord -from discord.ext import bridge, commands - -class Greetings(commands.Cog): - def __init__(self, bot): - self.bot = bot - - @bridge.bridge_command() - async def hello(self, ctx): - await ctx.respond("Hello!") - - @bridge.bridge_command() - async def bye(self, ctx): - await ctx.respond("Bye!") - -def setup(bot): - bot.add_cog(Greetings(bot)) -``` - -The cog will automatically split the Bridge Command into their Slash Command and Prefixed Command counterparts. - - - -
- - hello - -
- Hello! -
- - - !hello - - - -
- - !hello - -
- Hello! -
- - -
- - bye - -
- Bye! -
- - - !bye - - - -
- - !bye - -
- Bye! -
-
- -### Deferring - -You can defer if you want to communicate to the user that your bot is busy processing the command. This is done by using `ctx.defer()`. For the Slash Command implementation, `ctx.defer()` calls the function that gives out a "Bot is thinking" message. For the Prefixed Command implementation, `ctx.defer()` enables the typing indicator. - - - -### Options - -Options are pretty straightforward. You just specify them like you do with prefixed commands, and you're all set! - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def sum(ctx, a: int, b: int): - await ctx.respond(a + b) - -bot.run("TOKEN") -``` - - - -
- - sum - -
- 4 -
- - - !sum 2 2 - - - -
- - !sum 2 2 - -
- 4 -
-
diff --git a/i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json deleted file mode 100644 index 63f8e08e..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx b/i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx deleted file mode 100644 index bf345c07..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Command Groups ---- - -Command groups are a way to create subcommands for your commands. For example, `!afk set` or `!afk -remove`. - -## Syntax - -Creating a command group is very simple. - -```python title="Command Groups Example" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!') - -@bot.group() -async def afk(): - pass - -@afk.command() -async def set(): - ... - -@afk.command() -async def remove(): - ... - -# Another command group - -@bot.group(invoke_without_command=True) # Indicates if the group callback should begin parsing and invocation only if no subcommand was found. -async def math(ctx): - await ctx.send('Subcommand not found') - -@math.command() -async def add(ctx, a: int, b: int): - ... - -@math.command() -async def subtract(ctx, a: int, b: int): - ... -``` - -To create a command group, the command's decorator must be `@bot.group`. Once you have a command with -that decorator, you can use `@function.command()`, such as `@math.command()`. Now, you have subcommand -groups! - - - -:::info Related Topics - -- [Prefixed Commands](./prefixed-commands.mdx) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx b/i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx deleted file mode 100644 index e84fd42d..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx +++ /dev/null @@ -1,481 +0,0 @@ ---- -title: Help Command ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Pycord's `commands` extension comes with a built-in help command. In this guide, we will take a look at them as well as learn how to create your own. Let's dive in! - -:::note - -This guide demonstrates using object-oriented programming and subclassing to make a help command for your -Pycord bot. It is important to understand these two concepts before continuing. - -**Learning Resources**: - -- [W3Schools - Python Subclassing](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools - Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -::: - -## The Wrong Way - -A popular way to create a help command is to disable the built-in help command and create your own. This is not recommended as it will lead to a lot of confusion. - -```python title="The Wrong Way" -bot = commands.Bot(command_prefix='!', help_command=None) -# OR -bot.help_command = None -# OR -bot.remove_command("help") - -@bot.command() -async def help(ctx, *, argument=None): - ... -``` - -While it's possible to create a help command this way, doing so does not utilize the full capabilities -of making one with Pycord. Making a help command with subclassing and OOP will save time and effort. - -## Types of Help Commands - -There are two types of built-in help commands: - -- [`DefaultHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.DefaultHelpCommand) -- [`MinimalHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.MinimalHelpCommand) - -`DefaultHelpCommand` is the command enabled by default. It isn't the best looking, but `MinimalHelpCommand` can help make it look a bit better. - - - - -```python title="Default Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.DefaultHelpCommand()) # help_command is DefaultHelpCommand by default so it isn't necessary to enable it like this -# We enable it here for the sake of understanding - -... - -bot.run("token") -``` - - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- - -```python title="Minimal Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.MinimalHelpCommand()) - -... - -bot.run("token") -``` - - - - !help - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
- -
- -
- -## Updating Built-in Help Commands - -Let's try to make the `MinimalHelpCommand` look better. We can do this by putting its content in an -embed. - -```python title="Minimal Help Command Example" -bot = commands.Bot(command_prefix='!') - - -class MyNewHelp(commands.MinimalHelpCommand): - async def send_pages(self): - destination = self.get_destination() - for page in self.paginator.pages: - emby = discord.Embed(description=page) - await destination.send(embed=emby) - -bot.help_command = MyNewHelp() -``` - -Let's go through the code. - -First, we create a new class called `MyNewHelp`. This class is a subclass of `MinimalHelpCommand`. - -Next, we override the `send_pages` method. This method is responsible for sending the help command to -the user. We override this method because we don't want to change the content of the pages, just how -they are sent. - -We use the `get_destination` method to get the destination of the message. This is the channel or use that the help -command is to be sent to. - -We use the `paginator.pages` property to get the different pages of the help command. We put the page -in an embed, and then send the embed to the destination channel. - -Finally, we set this as our new help command using `bot.help_command = MyNewHelp()`. - - - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a - category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
-
- -## Creating Your Help Command - -Not satisfied with the built-in help commands? You can create your own! - -For this, we will subclass the `HelpCommand` class. - -There are 4 methods that we need to override: - -- `HelpCommand.send_bot_help(mapping)` that gets called with `help` -- `HelpCommand.send_command_help(command)` that gets called with `help ` -- `HelpCommand.send_group_help(group)` that gets called with `help ` -- `HelpCommand.send_cog_help(cog)` that gets called with `help ` - -### Bot Help - -```python title="Bot Help Example" -class MyHelp(commands.HelpCommand): - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help") - for cog, commands in mapping.items(): - command_signatures = [self.get_command_signature(c) for c in commands] - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's go through the code. - -- First, we create a new class called `MyHelp`. This class is a subclass of `HelpCommand`. - -- Next, we override the `send_bot_help` method. This method is responsible for sending the main help - command to the user. - -- We create an embed with the title "Help". - -- We iterate through `mapping.items()`, which returns a list of tuples, the first element being the - cog and the second element being a list of commands. - -- By using `self.get_command_signature(c)` we get the signature of the command, also known as the - `parameters` or `arguments`. - -- There is a chance that the cog is empty, so we use `if command_signatures:`. - -- We get the name of the cog using `getattr(cog, "qualified_name", "No Category")`. This calls the - cog's attribute `qualified_name` which returns "No Category" if the cog has no name. - -- We add a field to the embed with the name of the cog and the value of the command signatures. - -- Finally, we send the embed to the channel. - -Let's improve the code a little. - -```python title="Improved Bot Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - command_signatures = [self.get_command_signature(c) for c in filtered] - - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Now the help command won't show commands that the user can't use, as well as aliases for commands. -Let's get the help command to show command aliases. - -### Command Help - -This function is called when the user uses `help `. - -```python title="Command Help Example" -class MyHelp(commands.HelpCommand): - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command), color=discord.Color.random()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's quickly go through the code we haven't discussed yet. - -- In line 3, we create an embed with a title the signature of the command (so that the title of the - embed looks like ` [parameter]`), and a random color. - -- In lines 4 and 5, we get the command's `help` description and add it to the embed. The help description - of a command can be specified in the docstrings of a command function. For example: - - ```` - ```python - @bot.command() - async def ping(ctx): - """Returns the latency of the bot.""" - await ctx.send(f"Pong! {round(bot.latency * 1000)}ms") - ``` - ```` - -- Line 6 is shorthand for - - ```python - alias = command.aliases - if alias: - ... - - # is the same as - - if alias := command.aliases: - ... - ``` - - A very helpful (but not well-known) Python shorthand! - -- In line 7, we get the aliases of the command and add them to the embed. - -### Cog Help - -This is pretty easy! - -```python title="Custom Cog Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_cog_help(self, cog): - embed = discord.Embed(title=cog.qualified_name or "No Category", description=cog.description, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(cog.get_commands()): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Once again, we create an embed, get the commands that the user can use, and add them to the embed. - -### Group Help - -Similar to the cog help, this is pretty easy! - -```python title = "Custom Group Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_group_help(self, group): - embed = discord.Embed(title=self.get_command_signature(group), description=group.help, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(group.commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Add all of these methods together, and you have a fully functioning help command! - -
-Click to see the final code for this section -
- -:::note - -The following code has been slightly edited from the tutorial version. - -::: - -```python title="Custom Help Command Example" -class SupremeHelpCommand(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - if command_signatures := [ - self.get_command_signature(c) for c in filtered - ]: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command) , color=discord.Color.blurple()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_help_embed(self, title, description, commands): # a helper function to add commands to an embed - embed = discord.Embed(title=title, description=description or "No help found...") - - if filtered_commands := await self.filter_commands(commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No help found...") - - await self.get_destination().send(embed=embed) - - async def send_group_help(self, group): - title = self.get_command_signature(group) - await self.send_help_embed(title, group.help, group.commands) - - async def send_cog_help(self, cog): - title = cog.qualified_name or "No" - await self.send_help_embed(f'{title} Category', cog.description, cog.get_commands()) - -bot.help_command = SupremeHelpCommand() -``` - -
-
- -## Command Attributes - -How can you add cooldowns, set aliases, and change the name of help commands? Command attributes can -help you do all of that, and more! - -```python title="Help Command Attributes" -attributes = { - 'name': "help", - 'aliases': ["helpme"], - 'cooldown': commands.CooldownMapping.from_cooldown(3, 5, commands.BucketType.user), -} - -# You need to use CooldownMapping.from_cooldown(rate, per, type) - -bot.help_command = MyHelp(command_attrs=attributes) -``` - -## Error Handling - -When a user attempts to use a command that does not exist, we need to inform the user. -We can do this by overriding the `send_error_message` function. - -```python title="Custom Help Error Example" -class MyHelp(commands.HelpCommand): - async def send_error_message(self, error): - embed = discord.Embed(title="Error", description=error, color=discord.Color.red()) - channel = self.get_destination() - - await channel.send(embed=embed) -``` - - - - !help update_pycord - - - - Command 'update_pycord' not found. - - - - -## Credits - -Most of the content from this guide is from -[InterStella0's walkthrough guide on subclassing HelpCommand](https://gist.github.com/InterStella0/b78488fb28cadf279dfd3164b9f0cf96). -Thanks to InterStella0 for making this guide amazing. - -:::info Related Topics - -- [Subclassing Bots](../../Popular-Topics/subclassing-bots) -- [Prefixed Commands](./prefixed-commands) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx b/i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx deleted file mode 100644 index 87bef7ac..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx +++ /dev/null @@ -1,324 +0,0 @@ ---- -title: Prefixed Commands -description: Learn how to use the commands extension for Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Before Discord added slash commands, all bots had prefixed commands. A user would type the bot's prefix -followed by a word or phrase to invoke a command, such as `?help` or `!help`. -However, this prefixed commands system isn't native to Discord! Developers made use of an `on_message` -event to check if the message began with a certain character, then invoke the command. Every time a -message was sent, the bot would see the message and check for its "prefix" - -The syntax becomes a little more complicated when you want to have multiple commands. There are several -disadvantages to this system. This is where the commands extension comes in. `ext.commands` has -various advantages, such as: - -- Simpler syntax -- Easier to use -- Easier to parse user input -- Comes with built-in help commands -- Comes with a built-in system for categorizing commands - - - - -```python title="Prefixed Commands with Events" -import discord - -client = discord.Client() - -@client.event -async def on_message(message): - if message.content.startswith("!ping"): - await message.channel.send("Pong!") - - elif message.content.startswith("!announce"): - if len(message.content.split(" ")) < 3: - await message.channel.send("You need to specify a title and a message. Correct usage: `!announce Hello Hello everyone!`") - return - - msg = message.content.split(" ", 2) - title = msg[1] - content = msg[2] - - await message.channel.send("**{}**\n{}".format(title, content)) - - elif message.content.startswith("!"): - await message.channel.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !help - - - Unknown Command. - -
- -
- - -```python title="The Commands Extension" -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix="!", intents=intents) - -@bot.command() -async def ping(ctx): - await ctx.send("Pong!") - -@bot.command() -async def announce(ctx, title, *, message): - await ctx.send("**{}**\n{}".format(title, message)) - -@bot.event -async def on_command_error(ctx, error): - if isinstance(error, commands.CommandNotFound): - await ctx.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !pycord - - - Unknown command. - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
- !announce -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The commands extension has many more uses. This example only showcases the basic features mentioned -in the previous example. Other things you can do with the commands extension include using a different -built-in help command and creating your own. The following tutorials showcase these. - -::: - -
-
- -## Syntax - -Before we check out the syntax, let's take a look at the bot classes. - -> `discord.Client` - Contains only events. -> -> `discord.Bot` - Subclasses `discord.Client`, adds commands. -> -> `discord.ext.commands.Bot` - Subclasses `discord.Bot`, adds prefixed commands, cogs, and more. - -This means that `discord.ext.commands.Bot` has both slash commands and prefixed commands, as well as -events, cogs and more. - -Now let's look at the syntax. - -```python title="A Simple Prefixed Bot" -import discord -from discord.ext import commands # Import the commands extension -# discord.ext.commands are not the same as discord.commands! - -intents = discord.Intents.default() #Defining intents -intents.message_content = True # Adding the message_content intent so that the bot can read user messages - -bot = commands.Bot(command_prefix="!", intents=intents) # You can change the command prefix to whatever you want. - -@bot.command() # This is the decorator we use to create a prefixed command. -async def ping(ctx): # This is the function we will use to create the command. - await ctx.send("Pong!") # This is the response the bot will send. - - -bot.run("token") # Run the bot with your token. -``` - - - - !ping - - - Pong! - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The help command is a built-in command and is enabled by default. You will learn more about it in the -following guides. - -::: - -## Parameters - -Prefixed commands can take parameters, just like slash commands. You can specify the parameters in -the function itself. - -```python title="Parameters Example 1" -@bot.command() -async def echo(ctx, *, message): - await ctx.send(message) -``` - -`ctx` is the context of the message. `*` means that the parameter can be any number of words. `message` -is the parameter. If you had not passed `*`, `message` would only have been one word. - -For example, if a user had used `!echo hello world`, `message` would have been `hello`. Since we -passed `*`, `message` is `hello world`, or the rest of the message. - -We can pass multiple parameters too! - -```python title="Parameters Example 2" -@bot.command() -async def echo(ctx, channel:discord.TextChannel, title, *, message): - await channel.send("**{}**\n{}".format(title, message)) -``` - -In the example above, `channel` is a parameter that is of type `discord.TextChannel`. When you -specify the type of the parameter, Pycord will automatically try to convert the parameter to that type. -That is why you can use `channel.send` directly without needing to convert it first. - -We also have a new parameter, `title`. This does not have a type, so it will be a string. `*` means -that the rest of the message belongs to the next parameter, in this case, `message`. - -When a user types `!echo #general Greetings! Hello World!`, `channel` will be the text channel -`#general`, `title` will be `Greetings!` and `message` will be `Hello World!`. - -Let's take an example where the user passes `!echo #general Holiday Greetings! Greetings to you all!`. -Here, the user wants the title to be "Holiday Greetings!" and the message to be "Greetings to you all!". -However, since Pycord parses the message at whitespaces, the title will end up being "Holiday" and the -message "Greetings! Greetings to you all!". The user can prevent this by typing `!echo "Holiday -Greetings!" Greetings to you all!`. - - - - - - !echo #general Holiday Greetings! Greetings to you all! - - - Holiday -
- Greetings! Greetings to you all! -
- - !echo #general "Holiday Greetings!" Greetings to you all! - - - Holiday Greetings! -
- Greetings to you all! -
-
- -Let's check out another example for parameters and parameter types. - -```python title="Parameters Example 3" -import random - -@bot.command() -async def gtn(ctx, guess:int): - number = random.randint(1, 10) - if guess == number: - await ctx.send("You guessed it!") - else: - await ctx.send("Nope! Better luck next time :)") -``` - -If you had not specified the type of the parameter, it would have been a string. And since `"5"` is not -the same as `5` in python, the bot would have responded with "Nope! Better luck next time :)". -Even if you do not specify the type of the parameter, you can still convert it later on, in this case, -with `int(guess)`. - -:::info Related Topics - -- [Command Groups](groups) -- [Rules and Common Practices](../../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json deleted file mode 100644 index baeba701..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Pages", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx b/i18n/es/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx deleted file mode 100644 index be90b035..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Paginator Basics ---- - -# Paginator Basics - -## [Page](https://docs.pycord.dev/en/stable/ext/pages/index.html#page) - -This class contains two attributes: `content` and `embeds`, which correspond to the attributes of the same name on the -`discord.Message` class. -To create a new Page, use the following syntax: - -```py -import discord -page = Page(content="My Page Content", embeds=[discord.Embed(title="My First Embed Title")]) -``` - -## [PageGroup](https://docs.pycord.dev/en/stable/ext/pages/index.html#pagegroup) - -This class represents a group of pages. It uses most of the same parameters as `Paginator`, which allows each -`PageGroup` to effectively have its own settings and behaviours. - -## [Paginator](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator) - -This is the main class for `ext.pages`, and is used to control most of the functionality of the extension. - -In its most basic form, with no arguments provided (default values listed below), a paginator can be created like so: - -```py title="Paginator Example" -import discord -from discord.ext.pages import Paginator, Page - -my_pages = [ - Page( - content="This is my first page. It has a list of embeds and message content.", - embeds=[ - discord.Embed(title="My First Embed Title"), - discord.Embed(title="My Second Embed Title"), - ], - ), - Page( - content="This is my second page. It only has message content.", - ), - Page( - embeds=[ - discord.Embed( - title="This is my third page.", - description="It has no message content, and one embed.", - ) - ], - ), -] -paginator = Paginator(pages=my_pages) -``` - -The only required parameter for `Paginator` is the `pages` parameter, which is usually a list of `Page` objects. - -You can also pass in a list of `PageGroup` objects, a list of strings, a list of embeds, or a list of lists of embeds. - -Once the `Paginator` instance is created, you can call either -[`Paginator.send()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.send) -or [`Paginator.respond()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.respond) -to send a message or response with the paginator's contents. - -#### Depending on what's being passed to the `pages` parameter, the behaviour of the paginator may differ: - -- Passing a list of `PageGroup` objects will essentially treat each `PageGroup` as its own Paginator, with most - `Paginator` attributes able to be set independently for each `PageGroup`. - \- Each `PageGroup` accepts its own `pages` parameter, which inherits the same behaviour as the `pages` parameter - of `Paginator`, except it cannot contain other `PageGroup` objects. -- If a page is a `Page` object, this will allow you to specify both the `discord.Message.content` and - `discord.Message.embeds` attributes for a page. - \- **This is the preferred method of defining a page.** -- If a page is a string, this will be used for the `discord.Message.content` attribute. This type of page cannot have - any embeds. -- If a page is a list of embeds, this will be used for the `discord.Message.embeds` attribute. This type of page - cannot have any message content. -- If a page is a list of lists of embeds, each parent list item will create a page containing all embeds from its - child list. This type of page cannot have any message content. - -#### Parameters for the `Paginator` class which have default values: - -- `show_disabled` **:** `True` - - Show buttons that are disabled (i.e. can't be clicked) -- `author_check` **:** `True` - - Only the author can interact with the paginator. -- `timeout` **:** `180` _(seconds)_ - - The paginator will time out and become inactive after this many seconds. -- `disable_on_timeout` **:** `True` - - If the paginator times out, it will be automatically disabled and all buttons will be unusable. -- `use_default_buttons` **:** `True` - - Use the default set of 4 buttons and a page indicator. -- `show_indicator` **:** `True` - - When using the default buttons, shows a middle 5th button with the current/total page numbers. - -**For other parameters that can be set on initialization, please check the -[API Reference](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator)** - -## [PaginatorButton](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatorbutton) - -This class represents a button used to navigate between the pages of a paginator. It's also used to create the page -indicator. - -When creating your own custom buttons, you can either use this class directly or subclass it to add any additional -functionality you may need. - -To add custom buttons to the paginator instead of the default navigation buttons, you have two options to do so: - -1. **Using the `custom_buttons` parameter of `Paginator`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - buttons = [ - PaginatorButton("first", label="<<-", style=discord.ButtonStyle.green), - PaginatorButton("prev", label="<-", style=discord.ButtonStyle.green), - PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True), - PaginatorButton("next", label="->", style=discord.ButtonStyle.green), - PaginatorButton("last", label="->>", style=discord.ButtonStyle.green), - ] - paginator = Paginator( - pages=["Page 1", "Page 2", "Page 3"], - show_indicator=True, - use_default_buttons=False, - custom_buttons=buttons, - ) - ``` -2. **Using `Paginator.add_button()`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"], use_default_buttons=False) - paginator.add_button(PaginatorButton("prev", label="<", style=discord.ButtonStyle.green)) - paginator.add_button(PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True)) - paginator.add_button(PaginatorButton("next", label=">", style=discord.ButtonStyle.green)) - ``` - -If you want to use the default navigation buttons, but not all of them, you can also use `Paginator.remove_button()` to -selectively remove them: - -```py -from discord.ext.pages import Paginator - -paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"]) -paginator.remove_button("first") -paginator.remove_button("last") -``` - -## [PaginatorMenu](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatormenu) - -This class represents the `discord.Select` menu used to navigate between `PageGroup` instances. In most situations, you -will not need to interact with this class directly. - -If you do subclass it, you'll likely want to call `super()` in your `__init__` method to ensure that the `PageGroup` -navigation functionality is retained. - -## Usage Examples - -For a comprehensive list of examples showing all `Paginator` functionality, please see the -[example in cog form](https://github.com/Pycord-Development/pycord/blob/master/examples/views/paginator.py) in the repo. - -## Support and Feedback - -If you have any questions, suggestions, or feedback for `ext.pages`, please join the -[Discord server](https://discord.gg/pycord). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx b/i18n/es/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx deleted file mode 100644 index b8d68925..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Paginator FAQ ---- - -# Paginator FAQ - -- **What's the difference between `Paginator.send()` and `Paginator.respond()`?** - - `Paginator.send()` is used to send a channel message (DMChannel or TextChannel) with the paginator. - - `Paginator.respond()` is used to send an interaction response (or followup) message with the paginator. - -- **How can the bot send a paginator to a different destination than where it was invoked?** - - Use the `target` parameter in `Paginator.send()` or `Paginator.respond()`. - - You can also set the `target_message` parameter to control what's shown as a response where the paginator was originally invoked. - - For `Paginator.respond()`, this parameter is required if `target` is set, as an interaction requires being responded to. - -- **How can I change the paginator's behavior without re-creating and re-sending it?** - - Use the `Paginator.update()` method. - -- **How can I make the bot actually do something with the contents of a page?** - - Use the (upcoming) `Paginator.page_action()` method. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json deleted file mode 100644 index 36dfb009..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Tasks" -} \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx b/i18n/es/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx deleted file mode 100644 index 848f6066..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Tasks ---- - -## Concept - -So you want to run a background task running at some specified interval? Thankfully, that's a common thing to do, whether you're working with some API or handling some background logic don't worry, the Pycord tasks extension is here to make life easier for you! - -With the tasks extension, you can make background tasks without worrying about the asyncio hell and mind bogglers like "what if my internet dies" and "how do I handle reconnecting" with the added benefit of a lot of useful additions that are one line of code away! - -### Example Usage - -```py -import discord -from discord.ext import tasks - -bot = discord.Bot() - -@bot.event -async def on_ready(): - very_useful_task.start() - -@tasks.loop(seconds=5) -async def very_useful_task(): - print('doing very useful stuff.') - -bot.run("TOKEN") -``` - -If you do run this code in your terminal you should see something like this after about 15 seconds: - -``` -doing very useful stuff. -doing very useful stuff. -doing very useful stuff. -``` - -For a more useful example here's a task in a cog context ripped straight from the [docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#recipes): - -```py -from discord.ext import tasks, commands - -class MyCog(commands.Cog): - def __init__(self): - self.index = 0 - self.printer.start() - - def cog_unload(self): - self.printer.cancel() - - @tasks.loop(seconds=5) - async def printer(self): - print(self.index) - self.index += 1 -``` - -As you'd expect this will increment a number and print it out every 5 seconds like so: - -```sh -0 -# 5 seconds later -1 -# 5 more seconds later -2 -# ... -``` - -## [Tasks](https://docs.pycord.dev/en/stable/ext/tasks/index.html) - -Now let's get into the nitty-gritty of tasks. - -As you've seen tasks can work in both outer scope and class contexts and the handle is roughly the same, you define a task using the `tasks.loop` decorator and use the `start` method to start it, the difference is you add the `self` argument when in a class context so since most people have all their bot's code in Cogs all the following code blocks will be in a Cog context to make it easy to copy it then apply whatever modifications you might need! - -### [Creating a task](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop) - -A look at `discord.ext.tasks.loop`'s definition in the documentation reveals that: - -1. As you've seen before it expects the time between each execution, that however doesn't have to be in seconds as - there are `seconds`, `minutes` and `hours` parameters to make it easier for us, they can also be floats in case you want - ultra-precision. -2. You can also pass in a `datetime.time` object or a sequence of them in the `time` parameter which will make it run - at the specified time(s). -3. You can pass in how many times a loop runs before it stops by passing in the `count` parameter, you can use `None` - to make it run forever which is also the default. -4. The loop function **_must_** be a coroutine. - -These are all really useful, and they aren't the only parameters so if you want to know more about them check out the -[docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop)! - -### Attributes - -A task has the following attributes: - -- `current_loop`: The current loop the task is on. -- `hours`, `minutes`, `seconds`: attributes that represent the time between each execution. -- `time`: A list of datetime.time objects that represent the times the task will run, returns `None` if no datetime - objects were passed. -- `next_iteration`: A `datetime.datetime` object that represents the next time the next iteration of the task will - run, can return `None` if the task stopped running. - -These attributes serve as a really powerful asset to get info about your loop. - -### Example - -Now let's create a cog that handles a leaderboard we have in our bot using Tasks then explain what we did after that and -also provide a refresher of how slash commands groups work in cogs. - -For the sake of this example let's pretend that we have a leaderboard module that does all the leaderboard handling for -us and that computing the leaderboard is very expensive computationally wise, so we want to store one version of it that -gets regularly updated instead of generating it every time someone calls the `/leaderboard view` command. - -```py -from discord.ext import tasks, commands -from discord.commands import SlashCommandGroup, CommandPermissions - -from leaderboard import * # Mock leaderboard module. - -class LeaderboardCog(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.update_leaderboard.start() - self.leaderboard_embed = generate_leaderboard_embed() - - leaderboard = SlashCommandGroup(name='leaderboard', description='Leaderboard commands.') - - @tasks.loop(minutes=10) - async def update_leaderboard(self): - print('Updating leaderboard...') - await update_leaderboard() - self.leaderboard_embed = generate_leaderboard_embed() - - @update_leaderboard.before_loop - async def before_update_leaderboard(self): - await self.bot.wait_until_ready() - print("About to start updating leaderboard.") - - @update_leaderboard.after_loop - async def after_update_leaderboard(self): - leaderboard_cleanup() - print("Stopped updating leaderboard.") - - @update_leaderboard.error - async def update_leaderboard_error(self, error): - print(f"Oh no, an error occurred while updating the leaderboard. Error: {error}") - - @leaderboard.command() - async def view(self, ctx): - await ctx.respond(embed=self.leaderboard_embed) - - @leaderboard.command() - async def update_info(self, ctx): - await ctx.respond(f"""***Leaderboard Info***\n - Last update: {(600 - self.update_leaderboard.next_iteration.timestamp())//60} minutes ago.\n - Next update: in {self.update_leaderboard.next_iteration.timestamp() // 60} minutes.\n - Time between loops: {self.update_leaderboard.minutes} minutes.\n - Times updated this session: {self.update_leaderboard.current_loop}. - Running? {self.update_leaderboard.is_running()} - Failed? {self.update_leaderboard.failed()}""", ephemeral=True) - - # Now for the owner only commands: - - leaderboard_config = SlashCommandGroup(name="leaderboard_config", description="Leaderboard configuration commands", permission=[CommandPermissions("owner", 2, True)]) - - @leaderboard_config.command() - async def set_time_between_updates(self, ctx, minutes: int): - self.update_leaderboard.change_interval(minutes=minutes) - await ctx.respond(f"Set time between updates to {minutes} minutes.") - - @leaderboard_config.command() - async def stop(self, ctx): - self.update_leaderboard.stop() - await ctx.respond("Stopped the leaderboard update.") - - @leaderboard_config.command() - async def restart(self, ctx): - self.update_leaderboard.restart() - await ctx.respond("Restarted the leaderboard update.") - -def setup(bot): - bot.add_cog(LeaderboardCog(bot)) -``` - -Phew, that was quite a bit of code. - -Now to explain what's going on: - -First things first we create a cog and in its `__init__` function we start the `update_leaderboard` task and generate -the first instance of our leaderboard's embed. - -After that, we define the `update_leaderboard` task using the `loop` decorator, and we make it run every ten minutes by -passing 10 to the `minutes` parameter. - -Then that we define the `before_update_leaderboard` task using the `before_loop` decorator, and we make it wait until the -bot is ready before starting the task. - -Next up we define the `after_update_leaderboard` task using the `after_loop` decorator, and we make it clean up the -leaderboard when the loop finally stops running. - -Then we define the `update_leaderboard_error` task using the `error` decorator, and we make it print any errors that may -occur while we update our leaderboard to the console. - -Then we get into the fun stuff, we create a slash command group using the `SlashCommandGroup` class and name it -`leaderboard`, we then create the `view` sub-command which sends the embed generated when the leaderboard is updated and -`update_info` which shows a lot of data about the task using some attributes and functions available to us. - -We also create a slash command group called `leaderboard_config` which is only available to the owner of the bot. - -Then we create the `set_time_between_updates` sub-command which takes in the time in minutes and changes the time -between updates of the leaderboard using the `change_interval` method, the `stop` sub-command which stops the task using -the `stop` method and `restart` which restarts the task using the `restart` method. - -Finally, we add the `LeaderboardCog` cog to the bot, and we're done! - -I'd highly recommend you check the tasks extension -[documentation](https://docs.pycord.dev/en/stable/ext/tasks/index.html) for more info on how to use them and what other -functions they have. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/getting-started/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/getting-started/_category_.json deleted file mode 100644 index 9d6255f5..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/getting-started/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 3, - "label": "Getting Started", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx b/i18n/es/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx deleted file mode 100644 index 7fbabf77..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: Creating Your First Bot ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -Excited to create your first bot? Once you [install Pycord](../installation.mdx), you can start right -away! - -## Creating the Bot Application - -Just like how you need to sign up to use Discord, your bot also has to be signed up. To do this, -you should: - -1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click - on . -2. Give your bot a name, and click . -3. Now, you should see a page like this. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdW3OQnwUhacopqSWw%2F-Mjd_-mxrJCrzmaXrAg8%2Fimage.png?alt=media&token=b8e2ae6c-2290-4d37-ad7c-eb412f3fb00e) -4. Click on the tab on the left side of the screen. -5. Click on . -6. You can give it a name, change the Avatar, etc. - -## Inviting the bot - -Now, lets get the bot added to some servers. Go to the tab -in the left pane and select `bot` and `applications.commands` as scopes. - -You may want your bot to have application commands, which is what the `application.commands` scope -allows your bot to make. - -Next, you want to choose what permissions the bot will have and select them. For now, you can just -give your bot the `administrator` permission, which gives your bot every permission. Once you select -your bot's permissions, click on to get the bot invite link. - -:::tip - -When your bot is all ready to go, make sure that administrator permissions aren't selected unless -your bot truly needs them. Try selecting only permissions the bot will need. For testing, -Administrator permissions are fine. - -::: - -![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-Mk6tNY3LfDkjd6pqdpL%2F-Mk6tkdpddEWoa2jczZk%2Fimage.png?alt=media&token=52c8a29f-a798-48f8-a8c7-4ecca2681f79) - -You can use this link to invite the bot. - -## Tokens - -Now that you have an account for your bot, you need to log in. To log in, we need the bot's -password. All users and bots have a "token." You may think of this token as a password, as this allows -us to log our bot into Discord. - -Tokens are "snowflakes." Not actual snowflakes, though. Just like how no two snowflakes in real life have the same -pattern, snowflakes in computers are unique things - no two bots have the same token - so a token is -considered a snowflake. A Discord user ID is also a snowflake. - -Now, lets get your bot's token. To do this, you want to: - -1. Go back to the tab. -2. Click on the button in the "Token" section. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdbU12JISJorAZxrKH%2F-MjdbpUsapzb5n15Po5P%2Fimage.png?alt=media&token=118e259f-940a-4f6c-b3a3-c29f3a54100d) - -Now, you have your bot's token copied to your clipboard. - -:::danger - -Do not, under any circumstances, give your token to anyone. Even if you are contacted by someone -claiming to be Discord staff, do not give them your bot's token. They are lying to you to try and -gain access to your bot. If an unauthorized user gains access to your bot's token, they can access -your bot and use it in malicious ways. - -Never push your token to GitHub or include it in your code. One way to prevent your token from -getting leaked is to store it in `.env` files. - -::: - -### Protecting Tokens - -#### Using dotenv - -You can store your tokens in `.env` files. This is a simple way to store sensitive information. - -1. Create a file with the name `.env` (only the extension, with a dot/period at the start and without a name before it). -2. Define the token in the `.env` file (replace the example value with your token). - ```env title=".env" - TOKEN = NzkyNzE1NDU0MTk2MDg4ODQy.X-hvzA.Ovy4MCQywSkoMRRclStW4xAYK7I - ``` -3. Install [`python-dotenv`](https://pypi.org/project/python-dotenv/). - ```bash - python -m pip install python-dotenv - ``` -4. Load the token from the `.env` file. - ```python - import dotenv - dotenv.load_dotenv() - token = str(os.getenv("TOKEN")) - ``` -5. Pass your token as parameter when running the bot. - ```python - client.run(token) - ``` - -:::tip - -If you are using Git to track your bot's changes, you should create a file called `.gitignore` and add -`.env` to it. This stops your `.env` file from getting tracked along with the rest of your code, and -will not be pushed to a remote Git repository. As a consequence, it will stay secure on your local machine. - -::: - -## Coding the Basics - -Here's an example of code you'll write with Pycord: - -```py -import discord -import os # default module -from dotenv import load_dotenv - -load_dotenv() # load all the variables from the env file -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") - -bot.run(os.getenv('TOKEN')) # run the bot with the token -``` - - - -
- - hello - -
- Hey! -
-
-
- -Let's go through the code. First, the imports. - -```py -import discord -import os -from dotenv import load_dotenv -``` - -In the first line, `import discord`, we import Pycord. Although you install Pycord with `pip install py-cord`, you -import it with `import discord`. This is so it's as easy as possible when switching from Discord.py to Pycord. - -We then import `os` and `dotenv`. `os` is a default module that we will use to get the token from the env file. `dotenv` -is a module that we will use to load the env file. You installed this with `pip install python-dotenv`. - -Next, we load the env file with `load_dotenv()`. - -```py -bot = discord.Bot() -``` - -In this line, we create a new instance of [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). -In this object, we can pass various parameters for configuration purposes, such as `owner_ids` -and [`intents`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```py -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") -``` - -We use the [`event`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) decorator to override -the [`on_ready`](https://docs.pycord.dev/en/stable/api/events.html#discord.on_ready) function to define an -event that is automatically called when the bot is ready to use. - -```py -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") -``` - -Here, we use the [`slash_command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.slash_command) -decorator to define a slash command. We specify the `name` and `description` arguments. If not -specified, the name of the slash command would be the function name and the command description would -be empty. - -Optional: We type-hint the context parameter (`ctx`) as [`discord.ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext). In modern IDEs, type-hinting allows access to autocompletion and docstrings. You can read more about type-hinting [here](https://docs.python.org/3/library/typing.html). - -Finally, you want to run the bot using the token specified in the `.env` file. - -Now you have finished creating your first Pycord bot! What we have shown you is just the basic structure -of a bot. You can do a lot more with Python and Pycord knowledge, as well as your imagination! Pycord -will not limit your bot's abilities. - -:::note - -The part where we load the token from the environmental variables is not required. You may use another way to keep your token secure, or, although not recommended, simply specify the token normally as a string, as shown below. - -
-A Basic Bot without securing the token -
- -```py -import discord - -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.send("Hey!") - -bot.run("TOKEN") -``` - -
-
- -::: - -## FAQ - -### How do I make prefixed commands? - -Prefixed commands are an older method of creating bot commands that listen for messages and replies -if the message starts with a certain character. You can read [this page](../extensions/commands/prefixed-commands.mdx) -to learn more about prefixed commands. - -### How do I setup modules/cogs? - -[Cogs](../popular-topics/cogs) are a great way to organize your commands by putting them into -groups called cogs. Cogs are separate files that your bot loads to get the commands inside. -You can read more about cogs, as well as learn how to use them and their benefits, -[here](../popular-topics/cogs). - -### How do I add components, such as buttons and dropdown menus, to my bot? - -Pycord makes it very easy to use Message Commands with your bot by using the `discord.ui` module. -To learn more, read about Message Commands in our [interactions directory](../interactions). - -:::info Related Topics - -- [Prefixed Commands](../extensions/commands/prefixed-commands) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx b/i18n/es/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx deleted file mode 100644 index 2a68677b..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Hosting Your Pycord Bot ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Hosting Your Pycord Bot - -If you're completely new to this, you might have thought something along the lines of "Yay! I got my -bot working," after following our [Creating your First Bot](creating-your-first-bot) guide, only -to close your IDE or shut down your computer to find your bot offline. - -The reason for this is that programs have to be hosted somewhere, meaning some machine somewhere has -to constantly run your bot. There are tons of hosting services that can help you host your bot for -little to no cost. - -## Can I get a Clear Explanation? - -Sure thing. When you run your bot, it first makes a connection to Discord's API. Once that's done, -Pycord sends "heartbeats" to Discord. "heartbeats" are small packets sent at a set interval telling -Discord that your bot is indeed still alive. If Discord doesn't receive a heartbeat after a certain -amount of time, your bot is pronounced dead and buried in the graveyard (not really). It is, though, -taken offline and its connection with Discord is terminated. - -Once you close the terminal that you've run your program on, the program is no longer running, and -the bot stops sending heartbeats and can no longer process commands. This is why you have to constantly -keep the process running. - -This goes for all programs, in a different nature. If the code isn't compiled/built/assembled/interpreted, -it can't be running. - -## What is a Host? - -A host is a server or container for running code offered by a **hosting provider.** There are a lot -of hosting providers, such as bigger ones like Amazon Web Services (AWS) and Google Cloud, and smaller -ones like GalaxyGate and DigitalOcean. - -There are three types of hosts. - - - - Shared hosting is a type of hosting where multiple people share one VPS. Getting a spot on - a shared host is usually cheap, sometimes even free. Shared hosts do not give you a lot of - resources, from less than a gigabyte of RAM (usually 512MB on free hosts) and half of a CPU - with very little storage. Shared hosting is usually used for website hosting and is not - recommended for hosting a Discord bot. - - - A virtual private server (VPS) is a virtual computer (virtual machine) that is rented out to - customers. Most people use a VPS for hosting their projects such as Discord bots. You can get - anywhere from less than a gigabyte of RAM and a less powerful CPU to just under one hundred - gigabytes of RAM, a (or multiple) powerful CPU(s), and a fair amount of storage. A VPS is the - best choice for most users and can be fairly cheap. - - - A dedicated host is a physical computer. You can buy these yourself or rent one from a hosting - provider. Dedicated hosts are often very expensive, but are also very powerful, having a - few hundred gigabytes of RAM and a few very powerful CPUs, along with a good amount of storage. - Dedicated hosts are usually used for very large projects and are overkill for something like - a Discord bot. - - -
- -:::danger - -Make sure you choose a hosting provider you trust. Also make -sure the hosting provider you're looking at has good reviews on public forums. Googling along the -lines of "[host] review" should do the trick. A provider you don't trust can compromise your token. - -::: - -Most hosting providers rent their services to you for a monthly or yearly fee. These can be anywhere -from a few dollars to hundreds or thousands of dollars. - -## How to Host Your Bot - -Once you rent or buy a VPS, you can get to work. Most hosting providers allow you to choose from a -wide range of operating systems, most allow you to choose one but some allow you to choose -multiple. Once that's ready, you have to SSH into the system. We won't get into SSH here, but you can -read [this article from DigitalOcean](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys). -You can also use VNC, which is remote desktop software. If you are using an OS that does not have a -GUI, and is only a command line (a "server" OS), such as Ubuntu Server or most Linux Server Operating Servers, you will most -likely use SSH. If you are using an OS that has a GUI, such as Windows Server, you will most likely use VNC. - -Once you've decided on your operating system, you'll want to set it up and install Python. Once that's -done, you can copy your bot's files to your remote system, install the required packages, and run -the bot. - -:::warning - -If you are using SSH to run the file, your bot will not stay running. This is because the file is -only told to run during your session. You can use a command like [nohup](https://en.wikipedia.org/wiki/Nohup) -to make sure your file stays running after you disconnect. - -::: - -Now your bot is hosted, but that doesn't mean it can't go offline. If your bot encounters an error, -it can often go offline or stop its process. For this, make sure you have proper error handling. -Also be sure to pay attention to your hosting provider's updates or news, as they usually notify -users of when they plan on doing maintenance to their servers, making their services unavailable for -a short time. - -:::info Related Topics - -- [Creating Your First Bot](creating-your-first-bot) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx b/i18n/es/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx deleted file mode 100644 index 32eeb744..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx +++ /dev/null @@ -1,379 +0,0 @@ ---- -title: More Features -description: More features to make your bot cool and snazzy. ---- - -import { - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, - DiscordEmbedField, - DiscordEmbedFields, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -So, you just created your first Pycord bot! Now, let's add some more features to it. This will include adding event handlers, waiting for user response, styling the messages, and more. - -## Events - -### Event Handlers - -Events in Discord are a way to listen for certain actions. For example, if you want to know when a user joins your server, so you could send a welcome message, you can use the `on_member_join` event. - -First, you need to ask Discord to send you events. This is done via "Intents". Read up the [Intents](../Popular-Topics/intents) page for more information. - -Once you understand what intents are, you can enable the events you need, or just use the default ones with `discord.Intents.all()`. - -Now that that's done, let's add an event handler for when a user joins the server. We will use the [`on_member_join` event](https://docs.pycord.dev/en/stable/api/events.html#discord.on_member_join). We will send a private message to the user welcoming them to the server. - -```python -@bot.event -async def on_member_join(member): - await member.send( - f'Welcome to the server, {member.mention}! Enjoy your stay here.' - ) -``` - -We use the [`discord.Bot.event` decorator](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) to add the event handler. - -The `on_member_join` event is called when a user joins the server. The `member` parameter is the user that joined. Different events have different names and parameters. You can find all of them [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -So, that's how you add event handlers! - -### Waiting for User Response - -Let's say you want to create a Guess-the-Number game (where the user has to guess a number between 1-10). You need to send a message to a user and wait for them to respond. You can do this with the [`wait_for`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.wait_for) method. - -```python -@bot.command() -async def gtn(ctx): - """A Slash Command to play a Guess-the-Number game.""" - - await ctx.respond('Guess a number between 1 and 10.') - guess = await bot.wait_for('message', check=lambda message: message.author == ctx.author) - - if int(guess.content) == 5: - await ctx.send('You guessed it!') - else: - await ctx.send('Nope, try again.') -``` - -`wait_for` takes one argument, which is the event type. The event type is the name of the event you want to wait for. In this case, it's `message`. It could also be `reaction` to wait for a reaction to be added. - -We pass a keyword argument to `wait_for` called `check`. The function may look complicated if you're a beginner. We pass a `lambda` function, which simplifies the code a bit. - -The lambda function takes one parameter, `message`. When Pycord receives a message, it passes it to the `check` function. If the function returns `True`, the message is returned. If the function returns `False`, the message is ignored and the bot waits for another message. - -Here, we check if the message is from the user that sent the command. We simply use `message.author == ctx.author`. This will check if the author of the message was the person who invoked the command. - -## Styling Messages - -### Embeds - -Embeds are a Discord feature that allows applications to format their messages in cool embedded format, -enabling your bot to lay out messages with a lot of text into neat fields. - - - - - The Pycord Guide is a detailed guide that explains how to use Pycord and all of its features. - - - The Getting Started section explains how you can get a brand new bot created and running from scratch. - - - Interactions with Pycord - - - Pycord's various Extensions - - - Other Popular Topics - - - We have so much more! Just explore, and you will find everything you need. If you want another page added, open an issue on the GitHub. - - - Created with 💖 by the Pycord Team & Contributors - - - - -
- -Creating embeds is simple! Just create an instance of [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) and edit it to your liking. Once you're done, send it! - -```python -import discord - -bot = discord.Bot() - -@bot.command() -async def hello(ctx): - embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from - ) - embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") - - embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) - embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) - embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) - - embed.set_footer(text="Footer! No markdown here.") # footers can have icons too - embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") - embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") - embed.set_image(url="https://example.com/link-to-my-banner.png") - - await ctx.respond("Hello! Here's a cool embed.", embed=embed) # Send the embed with some text - -bot.run("TOKEN") -``` - - - -
- hello -
- Hello! Here's a cool embed. - - Embeds are super easy, barely an inconvenience. - - - A really nice field with some information. The description as well as the fields support markdown! - - Inline Field 1 - Inline Field 2 - Inline Field 3 - - Footer! No markdown here. - -
-
- -
- -This simple command sends replies to a [slash command](../interactions/application-commands/slash-commands) with an embed. -Let's break it down: - -```py -embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), - ) -``` - -This command creates an embed. We use the [`Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) -class to create an embed object with the title "My Amazing Embed", the description "Embeds are super easy, barely an inconvenience.", and the color `blurple`, Discord's main theme color. - -[discord.Colour](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Colour) is a class full of [classmethods](https://docs.python.org/3/library/functions.html#classmethod) -that return color values. While the official, documented name of this is `discord.Colour`, `discord.Color` -works as well. - -```py -embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") -embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) -embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) -embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) -``` - -This small section shows off embed fields. You can add fields to embeds with the [`add_field` method](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.add_field) -of the [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) class. These consist of three -keyword arguments: `title`, `value`, and `inline`. `title` and `value` are both required arguments, which inline defaults to `False` if it's not defined. The `inline` argument specifies whether space will be divided among the inline fields. There could be a mix of fields where inline has different values too. - -```py -embed.set_footer(text="Footer! No markdown here.") # footers can have icons too -embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") -embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") -embed.set_image(url="https://example.com/link-to-my-banner.png") -``` - -In this section, we're adding unique items to the embed. These items are: - -- Footer - With the [`set_footer()`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_footer) - method, you can set a small footer that holds a message. This has `text` and `icon_url` kwargs. -- Author - With the [`set_author`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_author) - method, you can set an author for the embed. This is a small text field at the top of the embed. This - includes `name`, `url` and `icon_url` kwargs. -- Thumbnail - With the [`set_thumbnail`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_thumbnail) - method, you can set a small image to reside at the top-right of the embed. This has a single `url` kwarg. -- Image - With the [`set_image`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_image) - method, you can set an image to sit at the bottom of an embed. This has a single `url` kwarg. - -There are a lot more methods and attributes you can use to configure embeds. Here, we just covered the basics. Also, remember that all of these values are not necessary in an embed. An embed may only contain a few of these. For example, only a description, a title and a description, and so on. - -### Markdown - -Markdown is a type of markup language that's limited in terms of formatting yet simple. Discord allows -for a watered-down version of markdown to be in their messages. - -#### Text Markdown - -Text formatting can be used in messages and in most embed parts, -as explained in the dedicated section below. - - - - - - - - - - - - - - - - - - - - -
*italics*__*underlined italics*__
**bold**__**underlined bold**__
***bold italics***__***underlined bold italics***__
__underlined__~~strikethrough~~
- -#### Code Markdown - -To create a single-line code block without syntax highlight, wrap the text between single backticks. -This code block will only add a dark background to the text. - -``` -`print("Hello world!")` -``` - -To create a multi-line code block without syntax highlight, wrap the text between triple backticks -on first and last line. This type of code block will encase the code inside a box. - -```` -``` -message = "Hello world!" -print(message) -``` -```` - -To create a multi-line block with syntax highlight, add the name of the language you are using right after -the triple backticks on the first line. For example, for Python you can write either "python" or "py". - -```` -```python -message = "Hello world!" -print(message) -``` -```` - -If you want to use syntax highlight for a single line of code, you still have to format it -like a multi-line block but the code must be on a separate line than the triple backticks. - -#### Quote Markdown - -To create a single-line quote block, start the line with `>` followed by a space. - -``` -> This is a single-line quote. -``` - -To create a multi-line quote block, write `>>>` followed by a space. All text -from that point onwards will be included in that quote block. - -``` ->>> This is a -multi-line quote. -``` - -#### Spoiler Markdown - -To hide a spoiler, encase the text between double pipes. The users -will have to click on it before being able to see the text contained in it. - -``` -||spoiler|| -``` - -#### Link Markdown - -Link formatting only works in embeds and messages sent through webhooks, -by using the following syntax: - -``` -[Pycord](https://pycord.dev/) -``` - -Inside the supported elements that have just been mentioned, -the example above will look like this: [`Pycord`](https://pycord.dev/) - -Outside them, the link will still be clickable but the formatting will be ignored, -therefore the example above will look similarly to this: `[Pycord](https://pycord.dev/)` - -#### Embed Markdown - -Adding markdown to your embeds or messages will give your bot the sparkle it needs, -however, markdown is limited inside embeds. Use the following table as a reference -and keep in mind that embed title and filed names will always show in **bold**. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PartTextLink
Embed AuthorNoNo
Embed TitleYesNo
Embed DescriptionYesYes
Field NameYesNo
Field ValueYesYes
Embed FooterNoNo
diff --git a/i18n/es/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx b/i18n/es/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx deleted file mode 100644 index e44b7c49..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Rules and Common Practices -description: All about the rules and common practices for coding a Discord bot ---- - -# Rules and Common Practices of Creating a Bot - -When creating almost anything, there's always a certain set of rules to follow or common practices, -such as [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python. This applies to creating bots -with Pycord as well. - -:::note - -Most of these rules and common practices are only applicable for -[verified bots](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting), -but it's good to follow them nonetheless. - -::: - -## Rules - -There are rules for creating bots, and most of these are required by Discord themselves, not us at -Pycord. Not following these rules may get your bot denied for verification. - -### Terms of Service and Privacy Policy - -Starting at some point in time, Discord has made providing a privacy policy with your bot a requirement. -This is so that Discord knows exactly what you are doing with its users' data. - -:::tip -You don't need a lawyer or anyone special to write out a privacy policy for you, nor do you need -it approved by some official entity. Simply writing out how you are going to use Discord user -information neatly is all you need to do. -::: - -Providing a Terms of Service for your bot is optional, though usually a best practice. It tells users -what they can and cannot do with your service, and makes it easier to settle disputes if someone -disagrees with you. - -Read more in Discord's official [Legal Docs](https://discord.com/developers/docs/legal). - -### Developer Policy - -We could list almost every rule about using Discord's API here. _Or_ we could simply link Discord's -Developer Policy to make it easier on us. You can find Discord's Developer Policy -[here](https://discord.com/developers/docs/policy). This outlines what you can and cannot do with -Discord's Developer API. And, don't worry, it's completely readable and understandable. - -## Best Practices - -Now, here's something we _can't_ simply link an article for. We're going to discuss the best practices -of creating a Discord bot with Pycord. - -### Bot Sharding - -To any new or maybe even experienced bot developer, sharding a bot sounds beneficial once you hear -about it. I'm here to tell you that it isn't a good idea to shard your bot. - -_Wait a minute, why would it be an option if it wasn't a good idea?_ It's simple. I lied. Sort of. -I'm not going to go into the details of sharding a bot, so you can read about it on -[this page](../Popular-Topics/sharding). Sharding is the process of taking your bot -and breaking it up into small pieces, so it's easier to perform tasks. This is very useful for large -bots, as it makes them faster and more reliable. Sharding is not a good practice for small bots. - -:::note -Discord will notify you once it is time to shard your bot, and will eventually force you to do so. -::: - -At the very least, wait for one thousand servers to shard your bot. If you shard your bot while it's -small, you'll just be wasting resources and possibly making your bot slower. - -### [Verification](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting) - -Verifying your Discord bot is something every developer would like to achieve. It shows that your bot -is in more than 75 servers. It's generally a good idea to try to get your bot verified as soon as -possible. We're talking at 76 servers soon. This is because Discord can be somewhat slow in terms of -bot verification, so verifying as soon as possible gives them enough time to verify before your bot -reaches the 100 server cap. If a bot is not verified, it cannot grow beyond 100 servers. - -It's also a good idea to only apply for the privileged intents that you need. Applying for intents -your bot doesn't use wastes both your time and Discord's time, as your privileged intent request -will be denied simply because you applied for an intent you didn't need. - -### Subclassing - -While it may take some time, subclassing a bot is very worth it. Once again, this was explained -elsewhere, so I won't go into the details, but I felt it fit here, so I put it here. - -Subclassing a bot makes it more flexible and allows it to do a lot more. Read more about subclassing -bots [here](../Popular-Topics/subclassing-bots) - -### Your Bot's Token - -Your bot is only able to be run for one reason: its token. If you followed the -[guide for creating your first bot](creating-your-first-bot), you should already know a bit about -keeping that token safe. That's exactly what you want to do. - -Sharing your token is never good. If someone evil gets a hold of your token, they can do terrible things, -such as making your bot leave all of its servers, spamming all the members the bot has contact with, -and even manipulating the servers the bot is in, if given the permissions. That's why it's very important -to keep your token safe. To learn how to do so, read [this part](creating-your-first-bot#tokens) of -the Creating Your First Bot guide. - -### Backups - -You always want to back up your bot's data. This includes both its code _and_ its databases. This way, -if something tragic happens, such as your host failing a data migration or you breaking your Raspberry -Pi's SD card that held your bot, you'll still have its precious user data. I have a small program for -my bot that uploads its databases to a remote GitHub repository periodically to not lose any data. -It may be smarter to find a bit more of a reliable way to do so, though. - -Public or private, having a local Git repository connected to a remote one is a good idea for making -almost any application. For a lot of developers, it's like saving your work. If you do this, all of -your bot's code won't be lost if your computer spontaneously combusts, or you smash it to bits from -anger. You can simply grab the backup computer that everyone has lying around, and you're back -in business. - -### Organization and Cleanliness - -It is _extremely_ important to have organized code. This includes commands, objects, functions, -and classes. If you don't have organized code, it will get progressively harder for you to recognize -it, and others won't be able to decipher it. - -Make sure you utilize indents and spaces, as these are very important in making your code readable. - -```py title="Bad Spacing" -class MyClass: - async def add(self,num1,num2): - return num1+num2 - async def sub(self,num1,num2): - return num1-num2 -``` - -```py title="Good Spacing" -class MyClass: - async def add(self, num1, num2): - return num1 + num2 - - async def sub(self, num1, num2): - return num1 - num2 -``` - -See the difference? Now, which one looks more readable? Hopefully, you answered the second example. -Python's [PEP8](https://www.python.org/dev/peps/pep-0008/) is a PEP (**Python Enhancement Proposal**) -style guide for Python. It is the style guide that is used by most Python developers and programmers, -providing a universal way to write and read code. - -### Databases - -As your bot grows, you'll inevitably have to store data for your bot. Now, most people would probably just load up some -JSON file on boot into a `dict`, modify it in memory then write to the file. However, JSON files aren't the solution. -When you write to a JSON file, it rewrites the entire file instead of just rewriting the section that changed. It's also -a configuration file format, not a storage file format. - -Instead of using a JSON file or some other related format, you should instead use a database. There are many databases -out there, like MongoDB, SQLite, and PostgreSQL to name a few. - -All of these databases I named do the job well, and which one you use depends on what features you want out of a database. - -<>{/* Maybe clarify these/add more options */} - -#### MongoDB - -MongoDB is a JSON-like format and if you already use JSON files, it shouldn't be too hard to migrate over to. - -#### SQLite - -SQLite is based on SQL, a common relational data model. It's a lightweight, easy-to-use, portable database solution that -works entirely on files. However, if for some reason you cannot read/write to and from a file, and you need to manage -lots of data, SQLite might not be for you. - -While SQLite is a part of the Python Standard Library as the `sqlite3` package, we recommend not using it as it is -synchronous and blocking. You should use an asynchronous alternative, such as [`aiosqlite`](https://pypi.org/project/aiosqlite/). - -#### PostgreSQL - -PostgreSQL is also based on SQL, but it also has more features than SQLite. It's compliant with the SQL standard, -open-source, and extensible. However, it's not that fast or simple compared to SQLite. - -#### MariaDB - -MariaDB is also based on SQL and is a fork of the MySQL project. It's compliant with the SQL standard, it's also open -source and is a complete drop-in replacement for any code with MySQL. You don't even need to change what package you're -using! diff --git a/i18n/es/docusaurus-plugin-content-docs/current/installation.mdx b/i18n/es/docusaurus-plugin-content-docs/current/installation.mdx deleted file mode 100644 index 521c69cd..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/installation.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Installation -sidebar_position: 2 ---- - -Before you can start using Pycord, you need to install the library. - -:::note -Python **3.8 or above** is required to use Pycord. -::: - -:::tip -Before you start installing python packages globally, it's recommended you set up a virtual environment. -You can find instructions for that [here](More/virtual-environments). -::: - -## Fresh Installation - -To install Pycord, you can use the following command in your terminal: - -``` -pip install py-cord -``` - -:::tip -Remember that you need to install `py-cord`, not `pycord`. -Also, the `pip` command varies depending on your installation. For example, it might be `python3 -m pip` on macOS/Linux or `py3 -m pip` on some versions of Windows. -::: - -If you need voice support for your bot, you should run: - -``` -pip install "py-cord[voice]" -``` - -## Migration - -### Updating Pycord - -If you are upgrading from a previous version of Pycord, you can use the following command in your terminal to upgrade to the latest version: - -``` -pip install -U py-cord -``` - -### Migrating from other libraries - -If you are migrating from another library, say, `discord.py`, first of all, you need to uninstall it. - -``` -pip uninstall discord.py -``` - -Then, you can install Pycord, it's as simple as that!: - -``` -pip install py-cord -``` - -:::caution -Uninstalling `discord.py` _after_ installing `py-cord` can cause issues. Make sure to uninstall it first! -::: - -## Installing Other Builds - -### Development Build - -:::caution -The development build comes with cutting edge features and new functionality, but as it isn't a stable build you may encounter bugs. -::: - -To install the development build, you can use the following command in your terminal: - -``` -pip install -U git+https://github.com/Pycord-Development/pycord -``` - -:::important -Git is required to install this build. [Learn how you can install Git](./more/git). -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/interactions/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/interactions/_category_.json deleted file mode 100644 index ea28be60..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/interactions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 4, - "label": "Interactions" -} \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json deleted file mode 100644 index 6dcafe83..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Application Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx b/i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx deleted file mode 100644 index 8fdca991..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Context Menus -description: Learn all about Context Menus (User Commands & Message Commands) and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -When you right-click a message, you may see an option called "Apps". Hover over it, and you can see -commands a bot can run with that message. These are called message commands. - -When you right-click a user in the user list, you can once again see an option called "Apps". -Hover over it, and you can see commands a bot can run with that message. These are called user commands. - -Together, these two are called Context Menus or Context Menu Commands. These commands work very much like normal commands, except they take a member or message. - -:::note - -A bot can have up to 5 global Context Menus of each type. - -::: - -## User Commands - -Creating a user command is very simple. - -```python -@bot.user_command(name="Account Creation Date", guild_ids=[...]) # create a user command for the supplied guilds -async def account_creation_date(ctx, member: discord.Member): # user commands return the member - await ctx.respond(f"{member.name}'s account was created on {member.created_at}") -``` - - - -
- - Account Creation Date - -
- {defaultOptions.profiles.bob.author}'s account was created on 2020-01-01 -
-
- -## Message Commands - -```python -@bot.message_command(name="Get Message ID") # creates a global message command. use guild_ids=[] to create guild-specific commands. -async def get_message_id(ctx, message: discord.Message): # message commands return the message - await ctx.respond(f"Message ID: `{message.id}`") -``` - - - - Do. Or do not. There is no try. - - -
- - Get Message ID - -
- Message ID: 930650407917748286 -
-
- -
- -:::info Related Topics - -- [Slash Commands](./slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx b/i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx deleted file mode 100644 index edac55b3..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Localizations -description: Localizations are a way to make your bot more accessible to your users. Learn all about localizations now! ---- - -Localizations are a way to make your bot more accessible to your users. You can localize the command -name, the names of any arguments, and any text that is displayed to the user. - -## Syntax - -```python -@bot.slash_command( - name="ping", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - }, - options=[ - Option( - name="Example", - name_localizations={ - "en-GB": "British Example" - }, - description="Example option that does nothing", - description_localizations={ - "en-GB": "British example option that does nothing" - } - ) - ] -) -async def ping(ctx, example): - responses = {"en-US": "Pong!", - "en-GB": "British Pong!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -@bot.slash_command( - name="ping2", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - } -) -async def ping2(ctx, example: Option(str, "example", name_localizations={"en-GB": "British Example"}, description="Example option that does nothing", description_localizations={"en-GB": "British example option that does nothing"})): - responses = {"en-US": "Pong2!", - "en-GB": "British Pong2!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -``` - -- [`Locales`](https://discord.com/developers/docs/reference#locales) - List of valid locales recognized by Discord diff --git a/i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx b/i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx deleted file mode 100644 index f4a760b6..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx +++ /dev/null @@ -1,292 +0,0 @@ ---- -title: Slash Commands -description: Learn all about Slash Commands and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On March 24, 2021, Discord added Slash Commands to Discord as an easier, more efficient, and better way of using bot commands. Pycord has implemented Slash Commands into the library, so it's simple, efficient, and familiar. - -:::important - -Remember that Slash Commands require your bot to be invited with the `application.commands` scope or Slash Commands will not show up. Bots already in the guild can simply be invited again with the scope; there is no need to kick the bot. - -::: - -## Syntax - -Let's create a simple Slash Command. - -```py -import discord - -bot = discord.Bot() - -# we need to limit the guilds for testing purposes -# so other users wouldn't see the command that we're testing - -@bot.command(description="Sends the bot's latency.") # this decorator makes a slash command -async def ping(ctx): # a slash command will be created with the name "ping" - await ctx.respond(f"Pong! Latency is {bot.latency}") - -bot.run("TOKEN") -``` - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -Let's go through the code. - -First, we import Pycord's `discord` package. - -Next, we create a [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot) object and assign it to a variable `bot`. - -We then go ahead and use the [`@bot.command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.command) decorator, which registers a new Slash Command. We pass a `description` parameter to give a description to the Slash Command. We can also pass a `name` parameter to change the Slash Command's name. By default, the name of the Slash Command will be the name of the function, in this case, `/ping`. - -We create an async function called `ping` with parameters `ctx`, which, when called, sends the bot's ping/latency using [`ctx.respond`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext.respond). - -## Subcommand Groups - -You might want to group certain commands together to make them more organised. A command group is exactly what it sounds like, a group of individual Slash Commands together. - -In order to make a Slash Command group, you can use the `bot.create_group` function. - -```python -import discord - -bot = discord.Bot() - -# create Slash Command group with bot.create_group -greetings = bot.create_group("greetings", "Greet people") - -@greetings.command() -async def hello(ctx): - await ctx.respond(f"Hello, {ctx.author}!") - -@greetings.command() -async def bye(ctx): - await ctx.respond(f"Bye, {ctx.author}!") - -bot.run("TOKEN") -``` - -Or, you can instead manually make a `SlashCommandGroup` class like so: - -```python -import discord - -math = discord.SlashCommandGroup("math", "Math related commands") - -@math.command() -async def add(ctx, num1: int, num2: int): - sum = num1 + num2 - await ctx.respond(f"{num1} plus {num2} is {sum}.") - -@math.command() -async def subtract(ctx, num1: int, num2: int): - sum = num1 - num2 - await ctx.respond(f"{num1} minus {num2} is {sum}.") - -# you'll have to manually add the manually created Slash Command group -bot.add_application_command(math) -``` - -Here's what the registered subcommands will look like in the Slash Command Menu: - -![Picture of the subcommands in the Slash Command Menu](../../assets/interactions/groups-and-subcommands.jpg) - -You'll notice that there's the name of the Slash Command Group and then the name of the subcommand separated by a space. - -::: - -:::info Cogs - -If you are looking to add Slash Command Groups to cogs, please look at our [Cogs page](../../popular-topics/cogs)! - -::: - -## Sub-groups - -We've made a subcommand group, but did you know that you could create a group inside another? - -```python -from discord import SlashCommandGroup -from math import sqrt - -math = SlashCommandGroup("math", "Math related commands") -advanced = math.create_subgroup("advanced", "Advanced math commands") - -@advanced.command() -async def square_root(ctx, x: int): - await ctx.respond(sqrt(x)) - -bot.add_application_command(math) -``` - -The command created above can be invoked by typing `/math advanced square_root`. - -## Options & Option Types - -Whenever you're using Slash Commands, you might notice that you can specify parameters that the user has to set or can optionally set. These are called Options. - -Options can also include a description to provide more information. [You can learn more about Options in our documentation!](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.Option) - -Since you want different inputs from Options, you'll have to specify the type for that Option; there are a few ways of doing this. - - - - -You could use Type Annotations and let Pycord figure out the option type or explicitly specified using the [`SlashCommandOptionType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.SlashCommandOptionType) enum. - -```python -import discord - -bot = discord.Bot() - -@bot.command() -# pycord will figure out the types for you -async def add(ctx, first: discord.Option(int), second: discord.Option(int)): - # you can use them as they were actual integers - sum = first + second - await ctx.respond(f"The sum of {first} and {second} is {sum}.") - -@bot.command() -# this explicitly tells pycord what types the options are instead -async def join( - ctx, - first: discord.Option(discord.SlashCommandOptionType.string), - second: discord.Option(discord.SlashCommandOptionType.string) -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - add - -
- The sum of 1 and 1 is 2. -
- -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
- - -Instead of Type Annotations, you can also use the option decorator. This is usually done to have type-hinting. - -```python title="Slash Command Type" -import discord - -bot = discord.Bot() - -@bot.command() -@discord.option("first", type=discord.SlashCommandOptionType.string) # type = str also works -@discord.option("second", type=discord.SlashCommandOptionType.string) # type = str also works -async def join( - ctx, - first: str, - second: str, -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
-
- -## Autocomplete - -Discord's autocomplete allows developers to determine option choices that are used in a slash command option. You can do this by defining a function: - -```py -async def get_animal_types(ctx: discord.AutocompleteContext): - """ - Here we will check if 'ctx.options['animal_type']' is a marine or land animal and return respective option choices - """ - animal_type = ctx.options['animal_type'] - if animal_type == 'Marine': - return ['Whale', 'Shark', 'Fish', 'Octopus', 'Turtle'] - else: # is land animal - return ['Snake', 'Wolf', 'Lizard', 'Lion', 'Bird'] - -@bot.slash_command(name="animal") -async def animal_command( - ctx: discord.ApplicationContext, - animal_type: discord.Option(str, choices=['Marine', 'Land']), - animal: discord.Option(str, autocomplete=discord.utils.basic_autocomplete(get_animal_types)) -): - await ctx.respond(f'You picked an animal type of `{animal_type}` that led you to pick `{animal}`!') -``` - - - -
- - animal - -
- You picked an animal type of Marine that led you to pick Shark! -
-
- -:::warning - -Autocomplete can **only** be used with slash commands. - -::: - -:::info Related Topics - -- [Interactions Index](../../interactions) -- [Rules and Common Practices](../../getting-started/rules-and-common-practices) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/interactions/index.mdx b/i18n/es/docusaurus-plugin-content-docs/current/interactions/index.mdx deleted file mode 100644 index 3f695606..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/interactions/index.mdx +++ /dev/null @@ -1,242 +0,0 @@ ---- -title: Discord Interactions ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -In December 2020, Discord released their first Interaction: the -[Slash Command](https://discord.com/developers/docs/interactions/application-commands#slash-commands). -Since then, Discord has added many types of Interactions, including: - -[**Application Commands**](https://discord.com/developers/docs/interactions/application-commands) - -- [**Slash Commands**](https://discord.com/developers/docs/interactions/application-commands#slash-commands): - Commands that can be used with the `/` prefix. -- **Context Menu Commands**: Commands that can be used from the right-click menu. - - [**User Commands**](https://discord.com/developers/docs/interactions/application-commands#user-commands): - Commands that can be used on a user by alt-clicking/selecting them. - - [**Message Commands**](https://discord.com/developers/docs/interactions/application-commands#message-commands): - Commands that can be used on a message by alt-clicking/selecting it. - -[**UI Components**](https://discord.com/developers/docs/interactions/message-components) - -- [**Buttons**](https://discord.com/developers/docs/interactions/message-components#buttons): - Buttons are attached to a message and can be clicked on to perform an action. -- [**Select Menus**](https://discord.com/developers/docs/interactions/message-components#select-menus): - Drop-down menus are used to select a number of options from a list. -- [**Modals**](https://discord.com/developers/docs/interactions/message-components#text-inputs): - Form-like modals can be used to ask for input from a user. - -## Application Commands - -Application Commands are another set of new features that are intended to avoid compromising users' safety and privacy. -They're relatively easy to add to your bot, and give people a simpler and safer way to use commands. - -### [Slash Commands](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.SlashCommand) - -Slash Commands were the first Interaction added to Discord. They're easy to use and create, and -is the only prefix commands alternative that does not need Message Content intent. - -:::note - -Preferring prefix commands over Application Commands is **not** a valid reason to apply for the -Message Content intent. Using that as a reason will get your application denied. - -::: - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -This is what a Slash Command looks like. Not too different from a prefix command, -apart from the note telling you who invoked it. A Slash Command's fields can accept any of the following: - -- Members -- Roles -- Channels -- Attachments -- Text - -Just about as good as it gets. - -### [Message](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.MessageCommand) and [User](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.UserCommand) Commands - -Message Commands and User Commands were both introduced at around the same time, and are very similar to each other, so we'll be -introducing them together. These commands can be found in the `Apps` tab when alt-clicking. The only difference between the two is that -Message Commands only appear in the `Apps` tab of a message, while User Commands are found in the `Apps` tab of a user. Message Commands -can be used to quickly report a message, warn a user for a message, and other functions. Likewise, User Commands can be used to add a -user to a ticket, warn a user, and more. - -Here's an example of a Message Command: - - - - Hello World! - - -
- - Reverse Message - -
- Message 930650407917748286 reversed is "!dlroW olleH" -
-
- -
- -And here's an example of a User Command: - - - - {defaultOptions.profiles.dorukyum.author} has been on Discord for a long time - - -
- - User Age - -
- {defaultOptions.profiles.dorukyum.author} is 1 week old. -
- -
- - User Age - -
- {defaultOptions.profiles.bob.author} is 40 years old. -
- - 🤔 - -
- -
- -Pretty cool, right? To learn more about these two, please read the [Context Menus guide](./application-commands/context-menus.mdx). - -## [Application Commands](#application-commands) vs. [Prefix Commands](../extensions/commands/prefixed-commands) - -Ever since Discord was created, apps on it have used prefix commands. Using prefixes meant that you would have to put a -certain character (or string of characters) in front of your command, such as the exclamation mark in `!ping`. The way this -worked was that your bot would listen for messages, pick out the ones that had their specific prefix, and then respond to the command. -Now, Discord is encouraging developers to switch their bots over to Application Commands, which is a new system meant to preserve the -privacy and safety of their users. But why exactly is Discord making us switch? What's the better option, Application Commands or prefix -commands? Below, we'll discuss everything you need to know. - -### Discord's Decision - -Application Commands were conceptualized partly due to privacy concerns. When Discord first began, they weren't entirely concerned about bots -having access to the content of every message that was being sent. However, as Discord grew, this became more of a problem. Hypothetically, bots -could simply log every message they're able to receive via the Discord API and hand their contents over to a company or other third party. This is -a problem, since that data is meant to be used only by Discord. As such, they locked down Message Content, and introduced Application Commands for -bot developers to use instead. - -Prefix commands work by reading messages, as described before. Application Commands, however, don't -work this way; instead, they work by having your bot get information from Discord about when a command was used. This way, Discord can limit -Message Content only to bots that _absolutely_ depend on it, such as auto-moderation bots. - -### Who has to Use Application Commands - -Any verified bot that does not have the Message Content intent must use Application Commands. Discord is allowing developers to submit -applications for the ability to use the intent; however, since they don't want to keep supporting prefix commands due to privacy concerns, -they will automatically decline any application that includes only that as a reason. So, if your bot doesn't have an auto-moderation feature -(or any other functionality that requires Message Content), you're out of luck. - -Unverified bots, however, don't have to use Application Commands. This is because the Message Content intent is a `Privileged Intent`, meaning that -it must be applied for only if your bot is verified or about to be verified. Unverified bots don't have to apply for Privileged Intents, so they can -use them freely. - -So, if your bot is made only for a couple of servers, you can choose between prefix commands and Application Commands. However, if you plan on expanding -your bot's reach, it'll have to use Application Commands. - -### What's the Better Option - -Choosing which is the better option is up to you, if you're starting small. If -you plan on growing your bot, however, you will have to use Application Commands. Since prefix commands are slowly being phased out by Discord, -there isn't much of a choice for developers of larger bots. - -## Message Components - -Message Components are fairly new features in Discord, allowing developers to give their bots a fast -and understandable user interface. Message Components are easy to use and make your bot look modern, -sleek, and downright awesome. - -### [Views](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View) - -Views are not an Application Command nor are they a Message Component. Views are the invisible placeholders, or grid, -that Message Components lie in. Views can have up to 5 [`Action Rows`](https://docs.pycord.dev/en/stable/api/models.html#discord.ActionRow), -and Action Rows can have a maximum of 5 slots. Below, you can find a table showing how many slots a Message Interaction takes up. - -| Component | Slots | -| ------------ | ----------------------------------------------- | -| Buttons | 1 Slot | -| Select Menus | 5 Slots | -| Text Modals | 1 Slot (opened via a Button) | - -So, based on this, you could have a maximum of 25 Buttons in a View with no Select Menus, and 5 Select -Menus in a View with no Buttons. This doesn't mean you can't have them both in a View, however. You can have -a combination of them, such as 20 Buttons and a Select Menu or 10 Buttons and 3 Select Menus. - -### [Buttons](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button) - -Buttons are the first of the Message Components. They allow for quick responses to prompts, such as for canceling or continuing an action. -Of course, these aren't their only uses; people have created awesome things with Buttons, such as calculators, games, and more! - - - - Discord Buttons are awesome! -
- - Click me! - -
-
-
- -
- -This is what a Button looks like, very simple and modern. To learn more about Buttons, refer to our -[Buttons page](./ui-components/buttons.mdx). - -### [Select Menus](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Select) - -Select Menus are the second of Discord's Message Components. They allow users to select from a list of choices, which your bot can then use. -Select Menus are good for things such as choosing features, pages of a help menu, and more. - -![Select Menu Example Image](../assets/interactions/select-menus-example.png) - -This is what a Select Menu looks like. While not looking as good as Buttons, they still look great -and have even greater possibilities. To learn more about Select Menus, please refer to our [Select -Menus page](./ui-components/dropdowns.mdx). - -### [Modal Dialogs](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal) - -Text Modals are the most recently added Message Component in Discord. They're useful for text input and filling out forms, such as a -sign-up for your bot's service. These are meant to replace long bot setup processes by allowing users to fill out multiple text fields, -which avoids having the user send multiple messages for the bot. Modals can be accessed by either invoking an Application Command or by -interacting with another UI Component. - -![Text Modal Example Image](../assets/interactions/modal-example.png) - -This is what a Text Modal looks like, easy to use and one of the most useful Message Components yet. To learn more about Text Modals, -please visit our [Modal Dialogs page](./ui-components/modal-dialogs.mdx). diff --git a/i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json deleted file mode 100644 index 7b0a72fe..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "UI Components", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx b/i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx deleted file mode 100644 index 10557c94..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx +++ /dev/null @@ -1,314 +0,0 @@ ---- -title: Buttons -description: Learn all about implementing buttons in your Discord Bot using Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On May 26, 2021, Discord added a new interaction called buttons. Instead of reactions, bots could now -send buttons and users could use them to interact with bots. This opened up a whole new world of -possibilities for bots. Soon after, developers made calculators, polls, and games like blackjack, UNO, -and even Minecraft! Buttons provided a clear and easy to use interface for interacting with bots. - -So, let's learn how you can add buttons to your bot! - -## Concept - -Buttons weren't the only update to the interactions system in Discord. Discord also added [Select Menus](./dropdowns) and [Modal Dialogs](./modal-dialogs), both of which work very similarly to buttons. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive button. - -```python -import discord - -bot = discord.Bot() # Create a bot object - -class MyView(discord.ui.View): # Create a class called MyView that subclasses discord.ui.View - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.primary, emoji="😎") # Create a button with the label "😎 Click me!" with color Blurple - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") # Send a message when the button is clicked - -@bot.slash_command() # Create a slash command -async def button(ctx): - await ctx.respond("This is a button!", view=MyView()) # Send a message with our View class that contains the button - -bot.run("TOKEN") # Run the bot -``` - -Using this command should return the following message: - - - -
- - button - -
- This is a button! -
- - Click me! - -
-
-
- -
- -As you can see, we create a class called `MyView` that [subclasses](#oop) -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `button_callback` to the `MyView` class with the decorator -[`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button). -This decorator adds a button to a component. This function takes two arguments: the button that was -clicked and the interaction. These arguments are passed to the function when the button is clicked -by the module. We use the [`interaction.response.send_message`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse.send_message) -function to send a message to the channel where the interaction was sent. - -Finally, we create a global slash command called `button` that sends the message, along with the view -that contains a button. - -This is the basic syntax of creating a button. What you create with it is up to you. You can worry -about making your button do amazing things, while Pycord handles the rest! - -## Button Styles - - - -| Name | Usage | Color | -| --------- | ----------------------------------------------------------------------------------------- | ------- | -| Primary | `discord.ButtonStyle.primary` / `discord.ButtonStyle.blurple` | Blurple | -| Secondary | `discord.ButtonStyle.secondary` / `discord.ButtonStyle.grey` / `discord.ButtonStyle.gray` | Grey | -| Success | `discord.ButtonStyle.success` / `discord.ButtonStyle.green` | Green | -| Danger | `discord.ButtonStyle.danger` / `discord.ButtonStyle.red` | Red | -| Link | `discord.ButtonStyle.link` / `discord.ButtonStyle.url` | Grey | - -Check out the [`discord.ButtonStyle`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ButtonStyle) class for more information. - -![Different Button Styles](../../assets/interactions/button-styles.png) - -You can set a button's style by adding the `style` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) decorator. - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.success) - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots, and each button takes up 1 slot. -So, how do we move the buttons to another row? - -This can be done by specifying the `row` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) -decorator. - -:::info The `row` argument - -The row argument specifies the relative row this button belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=1, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") -``` - -## Disabling Buttons - -### Pre-Disabled Buttons - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary, disabled=True) # pass `disabled=True` to make the button pre-disabled - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView()) -``` - -### Disabling Buttons on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - button.disabled = True # set button.disabled to True to disable the button - button.label = "No more pressing!" # change the button's label to something else - await interaction.response.edit_message(view=self) # edit the message's view -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(emoji="😀", label="Button 1", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) - - @discord.ui.button(label="Button 2", style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -Sometimes, you want to have a button that is disabled after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView(timeout=30)) -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a button that is disabled after a certain amount of time, you want to have a -button that is always working. - -Normally, when the bot goes offline, all of its buttons stop working. You will be able to see the -buttons, but nothing will happen when you press them. This is a problem -if you are trying to create a self-role system with buttons, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons will stop working. When the bot comes back online, however, the buttons will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view must have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.button(label="A button", custom_id="button-1", style=discord.ButtonStyle.primary, emoji="😎") # the button has a custom_id set - async def button_callback(self, button, interaction): - await interaction.response.send_message("Button was pressed", ephemeral=True) - -@bot.command() -async def button(ctx): - await ctx.send(f"Press the button! View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many buttons can I have in a message? - -Each message can have a maximum of 25 buttons. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do buttons need any special permissions? - -No new permissions are needed for either the bot or the server to allow bots to use buttons. - -#### Should I replace reactions with buttons for my bot? - -That is up to you. Buttons do provide a cleaner interface for your bot and are easier to use. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx b/i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx deleted file mode 100644 index 8320f25d..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx +++ /dev/null @@ -1,339 +0,0 @@ ---- -title: Select Menus -description: Learn all about implementing Select Menus or Dropdowns in your Discord Bot with Pycord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Shortly after the buttons were added, Discord added their second message component: Select Menus. Select Menus allow users to choose from a list of items sent by a bot. These are a great substitute for having a user send a number that corresponds to an option. You can even allow users to select multiple options from the Select Menus. This guide will show you the easy and painless ways of using them with Pycord. - -## Concept - -Select Menus aren't the only message component in Discord. There's also [Buttons](./buttons) and [Modal Dialogs](./modal-dialogs). Select Menus make it easy for users to pick one or multiple options from a list provided by a bot. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive select menu. - -```python -import discord - -bot = discord.Bot() - -class MyView(discord.ui.View): - @discord.ui.select( # the decorator that lets you specify the properties of the select menu - placeholder = "Choose a Flavor!", # the placeholder text that will be displayed if nothing is selected - min_values = 1, # the minimum number of values that must be selected by the users - max_values = 1, # the maximum number of values that can be selected by the users - options = [ # the list of options from which users can choose, a required field - discord.SelectOption( - label="Vanilla", - description="Pick this if you like vanilla!" - ), - discord.SelectOption( - label="Chocolate", - description="Pick this if you like chocolate!" - ), - discord.SelectOption( - label="Strawberry", - description="Pick this if you like strawberry!" - ) - ] - ) - async def select_callback(self, select, interaction): # the function called when the user is done selecting options - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") - -@bot.command() -async def flavor(ctx): - await ctx.respond("Choose a flavor!", view=MyView()) - -bot.run("TOKEN") -``` - -There's a lot going on over here! Don't worry, we will go over the code and explain it. - -As you can see, we create a class called `MyView` that subclasses -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `select_callback` to the `View` class with the decorator -[`discord.ui.select`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.select). -This decorator adds a select menu to the view. This decorator takes a few arguments to customize your select menu. Read them in the [Customization section](#customization). - -That was the decorator. Now, the function itself is pretty simple. It takes two parameters, not including `self`. The parameters are `select`: The select menu, and `interaction`: a [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object. Both of these are passed by Pycord, so you just need to specify them in the function! - - - -In the callback, you could do anything you want. You get the two parameters `select` and `interaction` to play around with. Here, we send a message using `await interaction.response.send_message` (where interaction is [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse)) with content `select.values[0]`, which sends the label of the first/only option the user selected. Obviously, this is only an example, and you could do just about anything you want. - -Finally, we create a global slash command called `flavour` that sends a message "Choose a flavor!" along with the view -that contains our select menu. - -This is the basic syntax of creating a select menu. What you create with it is up to you. You can worry -about making your code do amazing things, while Pycord handles the rest! - -## Customization - -#### Select Menu Properties - -- `select_type`: The type of select to create. This must be a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. -- `channel_types`: A list of channel types that can be selected in the menu. This is only valid for selects of `select_type` [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType). -- `options`: A list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. These are the options that can be selected in this menu. -- `placeholder` is the placeholder text shown in the select menu if no option is selected. -- `custom_id`: The ID of the select menu that gets received during an interaction. It is recommended not to set this to anything unless you are trying to create a persistent view. -- `row`: The relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). -- `min_values`: The minimum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `max_values`: The maximum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `disabled`: Whether the select is disabled or not. Defaults to False. - -#### Select Option Properties - -In the `options` parameter, you pass a list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. This class also has a few parameters: - -- `default` (whether the option is selected by default) -- `description` (an additional description, if any) -- `emoji` (a string or an emoji object, if any) -- `label` (the name displayed to users, can be up to 100 characters) -- `value` (a special value of the option, defaults to the label). - -## Select Types - -In addition to regular string selects, you can also have your select menu contain users, roles, mentionables, and channels as its options. You can use these alternative select types by passing a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value for the `select_type` parameter when creating the Select. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.user_select - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -Additionally, you can use shortcut decorators to create a [`discord.ui.Select`](https://docs.pycord.dev/en/master/api/ui_kit.html#discord.ui.select) with a predetermined [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. Using a shortcut decorator, the above code can be rewritten like this: - -```python -class MyView(discord.ui.View): - @discord.ui.user_select() - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -### Specifying Channel Types - -When using a [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType.channel_select) type select menu, you can pass in a list of [`discord.ChannelType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ChannelType) values to limit which types of channels users can choose when interacting with the select menu. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.channel_select, - channel_types=[discord.ChannelType.text, discord.ChannelType.voice] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"You selected {select.values[0].mention}") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots. A button takes a single slot, while a select menu takes up all 5 of them. This means a view can have a maximum of 5 select menus, or any possible combination of select menus and buttons. - -The arrangement of buttons and select menus is generally adjusted by Pycord. However, it is possible to move them to specific relative rows. This is done by specifying the `row` argument. - -:::info The `row` argument - -The row argument specifies the relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero-indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=0, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.select( - row = 1, - options = [...] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") -``` - -## Disabling Select Menus - -### Pre-Disabled Menus - -```python -class MyView(discord.ui.View): - @discord.ui.select( - disabled = True, # pass disabled=True to set the menu as disabled - options = [...] - ) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send("Select and option from the menu!", view=MyView()) -``` - -### Disabling Menus on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - select.disabled = True # set the status of the select as disabled - await interaction.response.edit_message(view=self) # edit the message to show the changes -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def first_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) # edit the message to show the changes - - @discord.ui.select(options = [...]) - async def second_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -You may want a select menu to automatically stop working after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select(ctx): - await ctx.send(view=MyView(timeout=30)) # specify the timeout here -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a select menu that is disabled after a certain amount of time, you want to have a -select menu that is always working. - -Normally, when the bot goes offline, all of its views stop working, even if they don't have a timeout. You will be able to see the -views, but nothing will happen when you try to interact with them. This is a problem -if you are trying to create a self-role system, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons and select menus will stop working. However, when the bot comes back online, the buttons and select menus will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view much have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.select(custom_id="select-1", options = [...]) # a custom_id must be set - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send(f"View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many select menus can I have in a message? - -Each message can have a maximum of 5 select menus. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do select menus need any special permissions? - -No new permissions are needed in the bot or in the server. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx b/i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx deleted file mode 100644 index 6ee4682f..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Modal Dialogs -description: Learn how you can implement Modals in your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Modal Dialogs, also known as "modals", provide a form-like structure for bots to receive input from users. No extra permissions are needed for bots to send modal dialogs, so it becomes a convenient workaround for bots to receive longer input without needing the Message Content [intent](../../popular-topics/intents). - -## Concept - -Modal Dialogs consist of a title, custom ID, and up to 5 [`discord.ui.InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) components. While creating modals, we generally subclass [`discord.ui.Modal`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal), as we'll see later. - -Unlike other UI Components, Modals cannot be sent with messages. They must be invoked by an Application Command or another UI Component. - -## Usage Syntax - -```py -class MyModal(discord.ui.Modal): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - self.add_item(discord.ui.InputText(label="Short Input")) - self.add_item(discord.ui.InputText(label="Long Input", style=discord.InputTextStyle.long)) - - async def callback(self, interaction: discord.Interaction): - embed = discord.Embed(title="Modal Results") - embed.add_field(name="Short Input", value=self.children[0].value) - embed.add_field(name="Long Input", value=self.children[1].value) - await interaction.response.send_message(embeds=[embed]) -``` - - - - -The `ctx` parameter we define in Application Commands receives an [`ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext) object. Using its `send_modal()` coroutine, you can send a Modal dialog to the user invoking the Application Command. - -```py -@bot.slash_command() -async def modal_slash(ctx: discord.ApplicationContext): - """Shows an example of a modal dialog being invoked from a slash command.""" - modal = MyModal(title="Modal via Slash Command") - await ctx.send_modal(modal) -``` - - - - -The `interaction` parameter we define in UI Components receives an [`Interaction`](https://docs.pycord.dev/en/stable/api/models.html#discord.Interaction) object. The `response` attribute of the object contains an [`InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object, with various coroutines such as `send_message()` and `send_modal()`, which we utilize. - -```py -class MyView(discord.ui.View): - @discord.ui.button(label="Send Modal") - async def button_callback(self, button, interaction): - await interaction.response.send_modal(MyModal(title="Modal via Button")) - -@bot.slash_command() -async def send_modal(ctx): - await ctx.respond(view=MyView()) -``` - - - - -The above example uses an embed to display the results of the modal submission, but you can do anything you want with the text provided by the user. -Each input field can be accessed in the order it was added to the modal dialog, via `Modal.children`. - -## Customization - -A Modal can have up to 5 [`InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) fields. These fields offer some customization. - -Each field has a label which is shown to the user. This is defined with `label`. - -The `style` parameter is used to determine whether it should be a short (single-line) or long (multi-line) input field. - -There are a number of aliases that can be used: - -```x title="Single-line InputTextStyle values:" -short -singleline -``` - -```x title="Multi-line InputTextStyle values:" -paragraph = 2 -multiline = 2 -long = 2 -``` - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Buttons](./buttons) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/introduction.mdx b/i18n/es/docusaurus-plugin-content-docs/current/introduction.mdx deleted file mode 100644 index 3262c632..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/introduction.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Introduction -description: Pycord Guide is a complete guide for Pycord. Learn how to create Discord Bots today! -sidebar_position: 1 ---- - -Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord, written in Python. Pycord is a maintained fork of [discord.py](https://github.com/Rapptz/discord.py). - -## Before you begin - -Pycord is an advanced and complex Python library. To take advantage of the full capabilities of Pycord, you will need to have a good understanding of Python. You should know the basics of Python and have an understanding of the following concepts: - -- Variables -- Data Types -- Functions -- Packages -- Conditionals -- Loops -- Classes -- Object-Oriented Programming -- Inheritance -- Exception Handling -- Iterators -- Coroutines -- Async/Await - -This list is not exhaustive, but it should give you a good idea of what you need to know to get started. - -When you see an ellipsis - that's the three dots - in this guide, it is a placeholder for code that you need to fill in. Sometimes, it may be code for a command, while other times it could be something simple like a Guild ID. Make sure to replace them before running your bot! - -## Learning Resources - -Here are some good resources to get started or to freshen up your Python knowledge: - -- [Official Beginner's Guide](https://wiki.python.org/moin/BeginnersGuide) -- [Official Tutorial](https://docs.python.org/3/tutorial/) -- [Automate the Boring Stuff, a free online book for complete beginners to programming](https://automatetheboringstuff.com/) -- [Learn Python in y Minutes, complete cheat sheet for people who know programming already](https://learnxinyminutes.com/docs/python3/) -- [Swaroopch's free Python book](http://python.swaroopch.com/) -- [Codeabbey, exercises for beginners](http://www.codeabbey.com/) - -## Credits - -First of all, we would like to thank [Rapptz](https://github.com/Rapptz) for the original [discord.py](https://pypi.org/project/discord.py) library. Pycord is a maintained fork of this library. - -We would also like to thank the [discord.js guide](https://discordjs.guide), which inspired this guide style-wise, and the [original Pycord Guide](https://namantech.me/pycord), which inspired some content in this guide. - -We created this guide using [Docusaurus v2](https://docusaurus.io), a modern static site generator for React. We would also like to thank Danktuary for his [`@discord-message-components/react`](https://www.npmjs.com/package/@discord-message-components/react) package, from which we took the Discord message components. - -And finally, we would like to thank the amazing and loving community of Pycord users, contributors and developers. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/more/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/more/_category_.json deleted file mode 100644 index 2cbe2c56..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/more/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 8, - "label": "More", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/more/community-resources.mdx b/i18n/es/docusaurus-plugin-content-docs/current/more/community-resources.mdx deleted file mode 100644 index ed3075bd..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/more/community-resources.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Community Resources ---- - -This page showcases the amazing things created by the Pycord community, including bots, Plugins, and more. - -## Plugins - -| Name | Type | GitHub | -| --------------- | ------------ | --------------------------------------------------------------- | -| Music Cord | Music | [NixonXC/cord-music](https://github.com/NixonXC/cord-music) | -| pycord-i18n | Localization | [Dorukyum-pycord-i18n](https://github.com/Dorukyum/pycord-i18n) | -| pycord-multicog | Cogs | [pycord-multicog](https://github.com/Dorukyum/pycord-multicog) | -| EzCord | Utilities | [EzCord](https://github.com/tibue99/ezcord) | - -## Bots - -| Name | Type | Link | -| ------------------------ | ------------ | ----------------------------------------------------------------------------------- | -| Discord-Multipurpose-Bot | Multipurpose | [github](https://github.com/pogrammar/Discord-multipurpose-bot/tree/master/Python) | -| inconnu | Fun & QOL | [github](https://github.com/tiltowait/inconnu) | -| Mai | Multipurpose | [github](https://github.com/TeamMai/Mai) & [website](https://xfghoul.github.io/Mai) | -| Toolkit | Multipurpose | [github](https://github.com/Dorukyum/Toolkit) | diff --git a/i18n/es/docusaurus-plugin-content-docs/current/more/contributing.mdx b/i18n/es/docusaurus-plugin-content-docs/current/more/contributing.mdx deleted file mode 100644 index 8fdf31af..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/more/contributing.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: Contributing to the Guide -description: Learn how to contribute to the Pycord Guide. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -This page outlines some of the basic syntax you need to know to contribute to the guide. We recommend you also check out: - -- [Docusaurus's Docs](https://docusaurus.io/docs/) -- [Contributing Rules](https://github.com/Pycord-Development/guide/blob/master/.github/CONTRIBUTING.md) - -## Info - -We use [Docusaurus v2](https://docusaurus.io/) to generate our guide. All the guide pages are generated -from `mdx` files in the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory. -MDX allows you to use JSX in your markdown content. - -## Structure - -Let's visit the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory and check its file structure. - -We can see various folders and a few files in it. Let's talk a bit about the `introduction.mdx` file. At the top, you can see something like: - -```md ---- -title: Introduction -description: ... -sidebar_position: 1 ---- -``` - -Most pages have this at the top. The `title` defaults to the file name. Since the titles need to be Capitalized according to need while the file names are lowercased (sometimes, the file names are shorter than the title!), we set a title ourselves. - -The `description` field is also important. This is the text shown in an embed when the page's link is shared on Discord, Twitter or other websites that support embedded links. Make sure to give a nice an interesting description! - -The `sidebar_position` field is pretty self-explanatory. It sets the position of the page in the sidebar. Most files in categories do not need this since they are sorted alphabetically. - -## Markdown Syntax - -This page quickly outlines some of the syntax that is used in markdown. - -````mdx -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - - ```python - print("We can use code blocks like this.") - ``` - -You can add [links to other websites](https://pycord.dev). You can add images like this: ![alternate text that describes the image](https://pycord.dev/image.png). - -- You can create -- unordered lists like this - -1. Or ordered lists -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` -4. Like this - -# Headers - -## Go - -### Like - -#### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet -```` - -
-Preview -
- -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - -```python -print("We can use code blocks like this.") -``` - -You can add [links to other websites](https://pycord.dev). You can add images by adding ![alt text](@site/static/img/favicon.ico). - -- You can create -- unordered lists like this - -1. Or ordered lists - -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` - -4. Like this - - # Headers - - ## Go - - ### Like - - #### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet - -
-
- -## Admonitions - -We can add warnings, notes, etc. with the following syntax: - -```md -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: -``` - -
-Preview -
- -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: - -
- -
- -## Discord Message Components - -As most files already have the imports for these, it's not that hard to add them. - -First, import the necessary components: - -```tsx -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; -``` - -The div starts like so: - -```tsx - - - - -
-``` - -This is where you list a `DiscordMessage`. - -```tsx - - - Hello! - - - -
-``` - - - - Hello! - - - -
- -It has a pretty straightforward syntax. - -:::tip - -Add a `
` to the end of a component to make the content below it look better. - -::: - -### Slash Commands - -To make a message authored by a slash command, do the following: - -```tsx - - -
- - update - -
- Updated dependencies to the latest version! -
-
-``` - - - -
- - update - -
- Updated dependencies to the latest version! -
-
- -### Buttons - -To make a message with buttons, do the following: - -```tsx - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
-``` - - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
- -## Page Format - -There are a few things you need to take care of: - -1. Make sure that the spelling and grammar is perfect. We have a GitHub action configured that will warn you about spelling errors when you start a pull request. Make sure to commit your changes accordingly. - - As for the grammar, you should try reading the changes you have done and wait for reviews from others. - -2. A common mistake people make is incorrect header style. People often think that the less the important the topic is, the lower it's heading style should be. - - ```md - [PAGE STARTS] - # Topic - ## Less Important Topic - ## Subtopic - ``` - - ```md - [PAGE STARTS] - # About - [Introduction] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - That's VERY wrong. Here's the correct example: - - ```md - [PAGE STARTS] - [Introduction] - ## Topic - ## Less Important Topic - ### Subtopic - ``` - - ```md - [PAGE STARTS] - [Introduction] - - ## About - [More Information] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - Note that the `---`s at the beginning have been skipped here. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/more/git.mdx b/i18n/es/docusaurus-plugin-content-docs/current/more/git.mdx deleted file mode 100644 index 0f929d6d..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/more/git.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Installing Git -description: Learn how you can install Git on your system. ---- - -Git is software for tracking changes in any set of files (also known as a "version control" software), usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems). - -Let's see how to install Git on different platforms. - -## Windows - -On Windows, Git can be installed via: - -- [Git for Windows](https://gitforwindows.org) -- [Git Scm](https://git-scm.com/download/windows) - -## Linux - -On Linux, Git is probably already installed in your distribution's repository. If not, you can install it via [Git for Linux](https://git-scm.com/download/linux). You can also install it via the built-in package manager on your Linux distro. - -## Mac - -You can install Git for your macOS computer via [Git for Mac](https://git-scm.com/download/mac). Alternatively, it can be also be installed from the Xcode Command Line Tools by installing Xcode from the App Store, or by running this: - -``` -xcode-select --install -``` - -## Using Package Managers - -You can also install Git using package managers. - -### Chocolatey - -If you use the Chocolatey package manager, you can install Git using: - -``` -choco install git -``` - -### Scoop - -If you use Scoop, you can install Git using: - -``` -scoop install git -``` - -### Brew - -If you're on macOS or Linux, you can install Git using: - -``` -brew install git -``` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx b/i18n/es/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx deleted file mode 100644 index b0b8c7ea..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Virtual Environments -description: Learn how to set up a virtual environment for Pycord. ---- - -## Setup - -Sometimes you want to keep libraries from polluting system installs or use a different version of libraries than the ones installed on the system. You might also not have permissions to install libraries system-wide. For this purpose, the standard library as of Python 3.3 comes with a concept called “Virtual Environment”s to help maintain these separate versions. - -A more in-depth tutorial is found on [Virtual Environments and Packages](https://docs.python.org/3/tutorial/venv.html). - -However, for the quick and dirty: - -Go to your project’s working directory: - -```bash -$ cd your-bot-source -$ python3 -m venv venv -``` - -Activate the virtual environment: - -```bash -$ source venv/bin/activate -``` - -On Windows you activate it with: - -```batch -$ venv\Scripts\activate.bat -``` - -Use pip like usual: - -```bash -$ pip install -U py-cord -``` - -Congratulations. You now have a virtual environment all set up. - -## Additional info - -It can be useful to set up a requirements.txt, so you can just put all of your dependencies in there and have pip install it. -For instance, if you wanted to have the latest 2.0 version of pycord and [pytz](https://github.com/stub42/pytz/blob/master/src/README.rst), just create a file named requirements.txt with the following contents: - -``` -py-cord>=2.0.0 -pytz -``` - -And then (in your virtual environment) you can just execute - -```bash -pip install -r requirements.txt -``` - -To keep from committing your virtual environment to git, you can set up a .gitignore file with the following line -(assuming you named your virtual environment venv like the above example): - -``` -venv/ -``` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/_category_.json deleted file mode 100644 index c38ea014..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 7, - "label": "Popular Topics", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx b/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx deleted file mode 100644 index 5377a6c3..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Cogs ---- - -Cogs, often known as modules or extensions, are used to organize commands into groups. This is useful -for grouping commands that have the same general idea (such as moderation commands). This also helps -to avoid making your bot's files messy and cluttered. - -## Getting Started - -First, you'll need to create a folder to store your cogs, e.g. `cogs/`. - -Then, create a file inside the folder, e.g. `cogs/greetings.py`. By convention, the file name should -be the same as the name of the cog or module. - -We can then create the cog. - -```python title="./cogs/greetings.py" -import discord -from discord.ext import commands - -class Greetings(commands.Cog): # create a class for our cog that inherits from commands.Cog - # this class is used to create a cog, which is a module that can be added to the bot - - def __init__(self, bot): # this is a special method that is called when the cog is loaded - self.bot = bot - - @commands.command() # creates a prefixed command - async def hello(self, ctx): # all methods now must have both self and ctx parameters - await ctx.send('Hello!') - - @discord.slash_command() # we can also add application commands - async def goodbye(self, ctx): - await ctx.respond('Goodbye!') - - @discord.user_command() - async def greet(self, ctx, member: discord.Member): - await ctx.respond(f'{ctx.author.mention} says hello to {member.mention}!') - - math = discord.SlashCommandGroup("math", "Spooky math stuff") # create a Slash Command Group called "math" - advanced_math = math.create_subgroup( - "advanced", - "super hard math commands!" - ) - - @math.command() - async def add(self, a: int, b: int): - c = a + b - await ctx.respond(f"{a} + {b} is {c}.") - - @advanced_math.command() - async def midpoint(self, x1: float, y1: float, x2: float, y2: float): - mid_x = (x1 + x2)/2 - mid_y = (y1 + y2)/2 - await ctx.respond(f"The midpoint between those coordinates is ({mid_x}, {mid_y}).") - - @commands.Cog.listener() # we can add event listeners to our cog - async def on_member_join(self, member): # this is called when a member joins the server - # you must enable the proper intents - # to access this event. - # See the Popular-Topics/Intents page for more info - await member.send('Welcome to the server!') - -def setup(bot): # this is called by Pycord to setup the cog - bot.add_cog(Greetings(bot)) # add the cog to the bot -``` - -You can add any number of commands to your cog, as well as event listeners. However, this code will -not work on its own. In your main bot file, you must add the following code: - -```python -bot.load_extension('cogs.greetings') -``` - -This loads the file `cogs/greetings.py` and adds it to the bot. -The argument of `load_extension` should be your cog's path (e.g. cogs/greetings.py) without the file -extension and with the `/` replaced with `.` - -If you have multiple cogs, you can add them all at once by adding the following code: - -```python -cogs_list = [ - 'greetings', - 'moderation', - 'fun', - 'owner' -] - -for cog in cogs_list: - bot.load_extension(f'cogs.{cog}') -``` - -## Cog Rules - -When using a cog instead of the main file, there are some changes you have to make to your code. This -is because cogs work slightly different from a regular file. - -### The `self` variable - -The self variable is a variable that represents a class. In the case of cogs, `self` represents -the cog. In the `__init__` function, you can see that we have `self.bot = bot`. `bot` represents your -`discord.Bot` or `discord.ext.commands.Bot` instance, which is used for some functions. - -This means that instead of using functions that would usually be accessed via `bot`, you now need -to access them via `self.bot` - -Because we're in a class, all of our commands are methods of that class. Because of this, all of our -functions need to have `self` as the first parameter, where `self` is the cog. Without this, we -wouldn't be able to access our bot instance. - -### Creating Commands - -When creating prefixed commands, your decorator would usually be something like `@bot.command()`. If you're using -cogs, this isn't the case. In a cog, you can't access the bot instance outside of functions, so to -register a function as a command, you must instead use `@commands.command()`. - -Similar to prefixed commands, you'll have to use either the `@discord.slash_command()`, `@discord.user_command()`, -or `@discord.message_command()` decorators for Application Commands. - -Also, when creating a command, make sure that it is indented. If we want a command to be actually -inside a cog, it has to be inside your cog's class. If the command is not inside the cog, -your command becomes useless. - -### Events - -When creating events, you can no longer use `@bot.event` as a decorator. This is because we cannot -access the `bot` variable outside a function. To make an event, you have to use the `ext.commands` -method, `@commands.Cog.listener()`. Events also need `self` as their first parameter. - -And that's it! Cogs are a simple and easy way of organizing your code. Now you can check out how to -create a help command [here](../extensions/commands/help-command). - -:::info Related Topics - -- [Creating a Help Command](../extensions/commands/help-command) -- [Rules and Common Practices](../getting-started/rules-and-common-practices) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Application Commands](../interactions#application-commands) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx b/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx deleted file mode 100644 index 3599cc82..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx +++ /dev/null @@ -1,383 +0,0 @@ ---- -title: Error Handling -description: All about handling errors. ---- - -import { - DiscordEmbed, - DiscordInteraction, - DiscordMessage, -} from "@pycord/discord-message-components-react"; -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -## About - -When using the library, errors are frequently raised due to various reasons. These reasons range from the Discord API -failing your bot's request due to missing permissions or an invalid syntax error. - -Before going into error handling, it's best that you learn the basic ways of handling errors. A good resource is: - -- [W3Schools' Guide to Python Try-Except Statements](https://www.w3schools.com/python/python_try_except.asp) - -## Basic Handling - -The most basic way to handle errors is to tackle it at the source. This can be done like so: - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -import asyncio - -import discord - -intents = discord.Intents.default() -intents.message_content = True - -bot = discord.Bot(intents=intents) - - -@bot.slash_command(description="Gets some feedback.") -@discord.option("name", description="Enter your name.") -async def feedback(ctx: discord.ApplicationContext, name: str): - try: - await ctx.respond(f"Hey, {name}! Send your feedback within the next 30 seconds please!") - - def is_author(m: discord.Message): - return m.author.id == ctx.author.id - - feedback_message = await bot.wait_for("message", check=is_author, timeout=30.0) - await ctx.send(f"Thanks for the feedback!\nReceived feedback: `{feedback_message.content}`") - except asyncio.TimeoutError: - await ctx.send("Timed out, please try again!") - - -bot.run("TOKEN") -``` - -If you respond within 30 seconds, the interaction will look like so: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Great bot! - - - Thanks for the feedback! -
- Received feedback: Great bot! -
-
-
- -Otherwise, if you don't respond in time, the interaction will go as follows: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Timed out, please try again! - -
-
- -This basic method of error handling can be extended to handle -many other errors including ones raised directly by py-cord. - -## Per-Command Handling - -This type of error handling allows you to handle errors per each command you have on your bot. -Each and every command can have it's own error handler made to handle specific errors that each command may raise! - -An example of per-command error handling is as follows: - -:::note Bridge Commands - -For these types of commands, it is recommended to utilize global error handling -until [the feature](https://github.com/Pycord-Development/pycord/issues/1388) is added. -::: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot(owner_id=...) # Your Discord user ID goes in owner_id - - -@bot.slash_command(description="A private command...") -@commands.is_owner() # This decorator will raise commands.NotOwner if the invoking user doesn't have the owner_id -async def secret(ctx: discord.ApplicationContext): - await ctx.respond(f"Hey {ctx.author.name}! This is a secret command!") - - -@secret.error -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.NotOwner): - await ctx.respond("Sorry, only the bot owner can use this command!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If your ID is registered as the owner ID, you'll get the following: - - - -
- - secret - -
- Hey Dorukyum! This is a secret command! -
-
-
- -Any other user whose ID doesn't match the bot owner's will get the following: - - - -
- - secret - -
- Sorry, only the bot owner can use this command! -
-
-
- -This local (per-command) error handler can also be used to handle the same types of errors that standard try-except -statements can handle. This is done by using the same method as above with the `isinstance` built-in function. - -## Per-Cog Handling - -Adding error handlers per-command can be quite the task in terms of work if you have a lot. If you have happened to -group your commands in cogs, then you're in luck! You can create an error handler that is specific to a cog and -handles all errors raised by commands inside that cog. - -Here's an example of a bot with a cog that implements its own error handling: - -```python title="./cogs/dm.py" -# This cog is for DM only commands! Sadly, we only have 1 command here right now... - -import discord -from discord.ext import commands - - -class DM(commands.Cog): - def __init__(self, bot: commands.Bot): - self.bot = bot - - @commands.command() - @commands.dm_only() # This decorator will raise commands.PrivateMessageOnly if invoked in a guild context. - async def avatar(self, ctx: commands.Context): - embed = discord.Embed( - title="Avatar", - description=f"Here's your enlarged avatar, {ctx.author.name}!", - color=ctx.author.top_role.color - ) - embed.set_image(url=ctx.author.display_avatar.url) - await ctx.send(embed=embed, reference=ctx.message) - - async def cog_command_error(self, ctx: commands.Context, error: commands.CommandError): - if isinstance(error, commands.PrivateMessageOnly): - await ctx.send("Sorry, you can only use this in private messages!", reference=ctx.message) - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -def setup(bot: commands.Bot): - bot.add_cog(DM(bot)) -``` - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -# This is the main file where we load the DM cog and run the bot. - -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix=commands.when_mentioned_or("!")) -bot.load_extension("cogs.dm") -bot.run("TOKEN") -``` - -If you use this command in a DM context, you'll get the following: - - - - !avatar - - -
- - !avatar - -
- - Here's your enlarged avatar, BobDotCom! - -
-
-
- -Otherwise, if used in a guild context: - - - - !avatar - - -
- - !avatar - -
- Sorry, you can only use this in private messages! -
-
-
- -Per-cog error handling comes in very handy as you can relegate all of your error handling to a single function instead -of spreading it out across several per-command error handlers or inside the commands themselves. - -## Global Handling - -If separating your error handling is not how you would like to handle errors, then global error handling is the way to -go. This method of handling allows you to relegate all handling to a single function that resides within your bot -instance. - -A non-subclassed bot would implement this like so: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot() - - -@bot.slash_command(description="Get the bot's current latency!") -@commands.cooldown(1, 30, commands.BucketType.user) -# ^ This decorator allows one usage of the command every 30 seconds and raises commands.CommandOnCooldown if exceeded -async def ping(ctx: discord.ApplicationContext): - await ctx.respond(f"Pong! `{int(bot.latency*1000)} ms`.") - - -@bot.event -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.CommandOnCooldown): - await ctx.respond("This command is currently on cooldown!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If you've subclassed your bot, the `on_application_command_error` event will be placed inside the subclass without a -`bot.event` decorator and `bot.slash_command` will be replaced with `discord.slash_command`. - -The error handling used above will yield this interaction if the command is used again too quickly: - - - -
- - ping - -
- Pong! 49 ms. -
- -
- - ping - -
- This command is currently on cooldown! -
-
-
- -The only issue regarding global error handling is that, if you have a large amount of commands, the global handler may -start to get crammed with a lot of code. This is where all the previously mentioned handlers can take their place! - -## FAQ - -#### Why does the example in per-cog handling have self at the start of its function signatures? - -This is a feature of classes and allows you to reference the cog object as `self` and get access to the bot object -passed at initialization through `self.bot`. - -If this is new to you, we recommend checking out these helpful resources to learn more about classes and cogs: - -- [W3Schools' Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [Our Cogs Guide Page](./cogs) - -#### How many errors can I handle in a single error handler? - -While all the examples in this guide page only handle one specific error and re-raise all others, all of these -error handlers can be extended to catch many errors. - -In [basic handling](#basic) (i.e. try/except statements) you can do one of two things: - -- Explicitly handle the errors you know might get raised and then have a broad `except Exception as exc:` statement - as a catch-all. -- Catch any and all errors via the catch-all statement mentioned above. - -In [per-command](#percommand), [per-cog](#percog), and [global handling](#global), you can use elif clauses with the -built-in isinstance function to catch specific errors. Atop of this, an else clause can be used to catch any other -errors you either don't want to handle or want to relegate to a different error handler. - -#### Can I use more than one type of error handler at once? - -Thankfully, all of these different ways of error handling can be mixed together, so you don't have to pick just one! -For commands that raise specific errors that no other commands will raise, you can use [per-command](#percommand). -For cogs that raise specific errors that no other cogs will raise, use [per-cog](#percog)! Lastly, for errors that -occur frequently across all commands and cogs, use [global handling](#global)! - -However, one important note to remember is that you should always raise the error again in an error handler if it -isn't handled there! If you don't do this, the error will go ignored and your other handlers won't have a chance to -do their work! - -#### What's the difference between slash and prefixed command error handling? - -Although most examples shown here use slash commands, the [per-cog handling](#percog) section presents a prefixed -command. The main difference you may notice is the change in command signature. - -To make the distinguishing features apparent: - -- Slash commands use `on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException)` - as presented in the [per-command](#percommand) and [global handling](#global) examples. -- Prefixed commands use `on_command_error(ctx: commands.Context, error: commands.CommandError)` as presented in the - [per-cog handling](#percog) example. - -This distinction is made as both types of commands need their own system for handling errors that are specific to -themselves. - -:::info Related Topics - -- [Slash Commands](../interactions/application-commands/slash-commands) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Cogs](./cogs) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx b/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx deleted file mode 100644 index 9f4210af..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Intents -description: All about intents in Discord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## What are Intents? - -Intents allow bot developers to "subscribe" to specific events in Discord. This is useful for bots that need to respond to specific events, such as when a user joins a server or sends a message. You could choose to enable all intents or to enable only specific intents that your bot requires. - -## How do I enable intents? - -:::important - -Remember that [Privileged Intents](#what-are-privileged-intents) require you to enable them in the Discord Developer Portal. Verified Discord Bots that don't already have access to them will need to request Discord to allow access. - -::: - - - - -```python -import discord - -bot = discord.Bot(intents=discord.Intents.all()) -``` - - - - - -You can view a list of intents and the events they subscribe to [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```python title="Enabling Intents" -import discord - -bot = discord.Bot(intents=discord.intents.members(bans=True, guilds=True)) -``` - - - - -## What are Privileged Intents? - -Discord defines some intents as "privileged" because of the sensitive information they contain. Currently, there are three privileged intents: `members`, `presences`, and `message_content`. These intents must be enabled in your bot's Developer Portal. Once your bot reaches 100 servers, you will need to verify your bot for these intents to keep working and for your bot to be able to be invited to more guilds. - -:::tip - -Only enable these intents if you need them. These intents give your bot access to quite sensitive information about the users in your guild. These intents are privileged to respect the privacy of users, and you should do that as well. - -Not enabling these intents doesn't mean you won't be able to ban users, but you will be unable to detect when a new user joins a guild, or what game they are playing. The majority of bots won't need all intents. - -::: - -:::info Related Topics - -- [Sharding Bots](sharding) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx b/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx deleted file mode 100644 index c3d17197..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Sharding -description: All about Sharding Discord Bots. ---- - -# Sharding - -## What is Sharding? - -Sharding is the process of breaking up your bot into smaller pieces so that it has a better time handling -events. As [Discord's Documentation](https://discord.com/developers/docs/topics/gateway#sharding) puts -it, sharding is "a method of user-controlled guild sharding which allows for splitting events across -several gateway connections." - -Sharding is used only for large bots and takes up additional resources for managing the new processes. -Pycord automatically shards your bot, so the only thing you need to do is use an `AutoShardedClient` -or `AutoShardedBot` class instead of a plain `Client` or `Bot` class. Pretty cool, right? - -Just because you _can_ shard your bot doesn't mean you _should_. While Pycord makes it easy to shard -your bot, it isn't necessary to shard unless your bot is large. Sharding a small bot isn't -just useless, but _harmful_, as it uses extra resources and may slow down your bot. Discord -themselves will let you know when your bot needs sharding, so you won't need to worry about this until they contact you. - -## How Do I Shard in Pycord? - -Sharding in Pycord is straightforward. - -Just replace your `discord.Client`, `discord.Bot`, `commands.Bot` objects -with `discord.AutoShardedClient`, `discord.AutoShardedBot`, `commands.AutoShardedBot` respectively. - -These new objects have been inherited from the original objects, so all the functions from those other types should be present. - -If you want to specify the number of shards your bot uses, -just add the `shards` parameter, along with the number of shards you want. - -## Why Should I Shard my Bot? - -Sharding is very necessary for big bots. While your bot grows, it gets harder for your bot to control -how many guilds it is in and what parts of your code should do what. This is exactly what sharding -handles, it makes all of this easier for your bot. Remember, though, only shard your bot once it's -big enough, and that's at _least_ 1,000 guilds. - -:::info Related Topics - -- [Hosting your Bot](../Getting-Started/hosting-your-bot) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx b/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx deleted file mode 100644 index bd2969c1..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Subclassing Bots -description: Subclassing is a popular way of creating Discord Bots. Explore how you can create a Discord bot by subclassing. ---- - -## About - -Subclassing is another popular way of creating Discord Bots. Here, you create a bot by extending a bot class. To some advanced users, this is preferable to creating a bot instance with `bot = discord.Bot()`. - -Subclassing is an intermediate python concept, so we recommend you learn about it before continuing. Some good resources are: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -## Why Subclassing? - -Many developers prefer to subclass their bots for many reasons, some of them being: - -#### Skeletal Frameworks for Bots - -Developers often share their bots code on open-source platforms, mostly GitHub, and allow users to self-host the bot (running their own instance of the bot with the code provided by the developer. Permissions vary in accordance to licences). Here, users find it easier and more convenient to have a small file that imports the custom bot class and runs it, rather than having to go through the code of the bot and find out which file to run. This makes it easier for people not familiar with programming to run and customize the bot, since it often brings down the code to: - -```python title="./main.py" -from src import Bot - -bot = Bot() - -bot.run("TOKEN") -``` - -Here, all the commands are inside the `/src` folder that the user need not bother with. - -#### Running Multiple Instances - -Some developers may need to run multiple instances of their bot (perhaps on different bot accounts). For example, a developer might have a second bot for testing alpha features. This system makes it simpler for the developer, and allows them to maintain multiple versions of the bot in the same directory: - -```python title="./alpha_bot.py" -from src import Bot - -class AlphaBot(Bot): # subclasses Bot - ... # insert any custom configuration - -bot = AlphaBot() - -@bot.slash_command() # adds a new slash command to this subclassed bot -async def alpha_feature(ctx): - await ctx.respond("Alpha Feature!") - -bot.run("TOKEN") -``` - -There are many more reasons to subclass! It's not required, and won't affect the speed of the bot, but it may affect your development process, for the good or for the worse. You don't miss out on any features when you subclass, either. Some developers want the OOP feel, while some just prefer that method and find it easier. - -## Basic Example - -```python -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override the on_ready event - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') - -bot = MyBot() - -@bot.slash_command() # create a slash command -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run('token') -``` - -As you can see, instead of creating a bot object with `bot = discord.Bot()`, we subclass [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). We then create an instance of our new bot class and run it. Notice how we don't need to use the `@event` decorator. - -Here's another example: - -```python title="./src/bot.py" -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override on_ready - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') -``` - -```python title="./src/\_\_init\_\_.py" -from .bot import MyBot # import the MyBot class from the bot.py file -``` - -```python title="./main.py" -from src import MyBot # import MyBot from /src - -bot = MyBot() # create an instance of MyBot - -@bot.slash_command() -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run("TOKEN") # run the bot -``` - -These are just two ways you could do it. There are ton of other structures you can implement. It's up to you. - -So, should you subclass? There are no limitations you face if you decide to subclass your bot, but, once again, it's up to you. - -:::info Related Topics - -- [Making a Help Command](../Extensions/Commands/help-command) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx b/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx deleted file mode 100644 index 23220b0e..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Threads -description: Threads with Pycord ---- - -In programming, threads are a way to run multiple processes at the same time. In Discord, threads are -a way to keep multiple conversations going at the same time. Let's take a brief look at how to use threads in Pycord. - -:::tip - -Not all the methods and attributes will be covered in this guide, but you can find them in our documentation! -[Check it out!](https://docs.pycord.dev/en/stable/api/models.html#discord.Thread) - -::: - -## Creating a thread - -With a few simple lines of code, we can create threads in Pycord. - -:::important - -All public threads need a starting message. This message will start the thread. However, private threads -(which are unlocked with having your server boosted to Level 2), do not require a starting message. - -::: - -### Creating thread from a message - -```python title="Creating a Thread from a Message" -message = await ctx.send("My Starting Message") -await message.create_thread(name="thread name", auto_archive_duration=60) -``` - -You may also use other ways to create the thread, for example, by using `on_message` events or by commands. - -### Creating thread in a channel - -```python title="Creating a Thread from a Channel" -channel = bot.get_channel(...) # define this! -await channel.create_thread(name="Thread Name", message=None, auto_archive_duration=60, type=None, reason=None) -``` - -A thread type could be `news_thread`, `public_thread`, `private_thread`. You may use it by passing `type=discord.ChannelType.news_thread`. - -## Deleting Threads - -Deleting Threads is simple. You need to get a thread and then use the `delete` method. - -```python title="Deleting a Thread" -thread = bot.get_channel(thread_id) # you could use other ways to get a thread -await thread.delete() -``` - -## Editing Threads - -**Parameters** - -- `name` (str) – The new name of the thread - -- `archived` (bool) – Whether to archive the thread or not. - -- `locked` (bool) – Whether to lock the thread or not. - -- `invitable` (bool) – Whether non-moderators can add other non-moderators to this thread. Only available for private threads. - -- `auto_archive_duration` (int) – The new duration in minutes before a thread gets automatically archived for inactivity. Must be one of 60, 1440, 4320, or 10080. - -- `slowmode_delay` (int) – Specifies the slow-mode rate limit for users in the thread, in seconds. A value of 0 disables slow-mode. The maximum value possible is 21600. - -```python title="Editing a Thread" -thread = bot.get_channel(id) -await thread.edit( - name="New Name", - archived=True, - locked=True, - slowmode_delay=10, - auto_archive_duration=60, -) -``` - -As you can see, threads are very simple. Once you learn how to use them, it's easy to create whatever you want. - -## FAQ - -### Why am I getting a `Forbidden` error when I try to create a thread? - -A `Forbidden` error occurs when the bot does not have the correct permissions to create threads. - -### Why am I getting an Unknown Message error when I try to create a thread? - -Getting an error looking something like `discord.ext.commands.errors.CommandInvokeError: Command -raised an exception: HTTPException: 400 Bad Request (error code: 10008): Unknown Message`? - -There could be multiple reasons, some of them being: - -- The message does not exist -- The message already has a thread -- The message is in channel x, you are trying to start a thread in channel y. -- The message was deleted. - -:::info Related Topics - -<>{/* I can't think of any related topics for this at the moment. */} - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/voice/_category_.json b/i18n/es/docusaurus-plugin-content-docs/current/voice/_category_.json deleted file mode 100644 index 8baf3da8..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/voice/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 6, - "label": "Voice" -} \ No newline at end of file diff --git a/i18n/es/docusaurus-plugin-content-docs/current/voice/index.mdx b/i18n/es/docusaurus-plugin-content-docs/current/voice/index.mdx deleted file mode 100644 index 835838c6..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/voice/index.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Voice ---- - -Welcome to the guide for voice features in Pycord. - -:::caution -This guide requires previous experience with Pycord and Python. -::: - -## Requirements - -The only requirement which is required for voice features is [`PyNaCl`](https://pypi.org/project/PyNaCl/). -The following features are optional: - -:::tip -Opus is also a required library, but this comes with Pycord. -Some hosts may not come with it, though, so remember to always check if required dependencies are installed. -::: - -- [`FFmpeg`](https://ffmpeg.org) - used for sending/receiving files other than `.pcm` and `.wav` -- [`Pycord.Wavelink`](https://github.com/Pycord-Development/Pycord.Wavelink), - [`Lavalink.py`](https://github.com/Devoxin/Lavalink.py), - [`Wavelink`](https://github.com/PythonistaGuild/Wavelink) or any other Python LavaLink library for music playback. diff --git a/i18n/es/docusaurus-plugin-content-docs/current/voice/playing.mdx b/i18n/es/docusaurus-plugin-content-docs/current/voice/playing.mdx deleted file mode 100644 index 7a58baee..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/voice/playing.mdx +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Wavelink Audio Player ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { - defaultOptions, -} from "@site/src/components/DiscordComponent"; - -# About - -Pycord and Wavelink try to keep the playing of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio playing feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/). - -## Starting out - -First you need to run a [Lavalink Server](https://github.com/freyacodes/Lavalink) to connect with. -There a multiple documentations to do this, so we are not covering that here. - -You also need to install the [wavelink](https://github.com/PythonistaGuild/Wavelink) library. - -```py title="Installing wavelink" -python3 -m pip install wavelink -``` - -You will now want to connect to your server via a node. - -```py title="Connect Node with Lavalink" -import discord -import wavelink - -bot = discord.Bot() - -async def connect_nodes(): - """Connect to our Lavalink nodes.""" - await bot.wait_until_ready() # wait until the bot is ready - - nodes = [ - wavelink.Node( - identifier="Node1", # This identifier must be unique for all the nodes you are going to use - uri="http://0.0.0.0:443", # Protocol (http/s) is required, port must be 443 as it is the one lavalink uses - password="youshallnotpass" - ) - ] - - await wavelink.Pool.connect(nodes=nodes, client=bot) # Connect our nodes -``` - -
- -Now you are finished making your node! Next, you will want to: - -1. Making a play command -2. Adding connect events - -### Making a play command - -To make a play command, you will need to make a function to connect and play audio in a voice channel. - -```py title="Play Command Example" -import typing - -@bot.slash_command(name="play") -async def play(ctx, search: str): - # First we may define our voice client, - # for this, we are going to use typing.cast() - # function just for the type checker know that - # `ctx.voice_client` is going to be from type - # `wavelink.Player` - vc = typing.cast(wavelink.Player, ctx.voice_client) - - if not vc: # We firstly check if there is a voice client - vc = await ctx.author.voice.channel.connect(cls=wavelink.Player) # If there isn't, we connect it to the channel - - # Now we are going to check if the invoker of the command - # is in the same voice channel than the voice client, when defined. - # If not, we return an error message. - if ctx.author.voice.channel.id != vc.channel.id: - return await ctx.respond("You must be in the same voice channel as the bot.") - - # Now we search for the song. You can optionally - # pass the "source" keyword, of type "wavelink.TrackSource" - song = await wavelink.Playable.search(search) - - if not song: # In case the song is not found - return await ctx.respond("No song found.") # we return an error message - - await vc.play(song) # Else, we play it - await ctx.respond(f"Now playing: `{song.title}`") # and return a success message -``` - - - -
- - play - -
- Now playing: Never Gonna Give You Up -
-
- -
- -Now that you've done this, the only thing left to do is make your connect events. - -### Adding connect events - -The final step to this guide is connecting the node to your server when the bot goes online. - -To make it, you will want to do the following: - -```py title="Adding connect events" -@bot.event -async def on_ready(): - await connect_nodes() # connect to the server - -@bot.event -async def on_wavelink_node_ready(payload: wavelink.NodeReadyEventPayload): - # Everytime a node is successfully connected, we - # will print a message letting it know. - print(f"Node with ID {payload.session_id} has connected") - print(f"Resumed session: {payload.resumed}") - -bot.run("token") -``` - -Congratulations! You have now implemented voice playing into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/es/docusaurus-plugin-content-docs/current/voice/receiving.mdx b/i18n/es/docusaurus-plugin-content-docs/current/voice/receiving.mdx deleted file mode 100644 index 70f91507..00000000 --- a/i18n/es/docusaurus-plugin-content-docs/current/voice/receiving.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Receiving Voice Samples ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -# About - -Pycord tries to keep the recording of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio recording feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/audio_recording.py). - -## Starting out - -The first thing you want to do is make a cache of your voice connections. This is fairly easy; as -it's just putting a variable with an empty dictionary in our code, such as `connections = {}`. - -You will now want to create your command for recording. - -```py title="Record Command Example" -import discord - -bot = discord.Bot() -connections = {} - -@bot.command() -async def record(ctx): # If you're using commands.Bot, this will also work. - voice = ctx.author.voice - - if not voice: - await ctx.respond("You aren't in a voice channel!") - - vc = await voice.channel.connect() # Connect to the voice channel the author is in. - connections.update({ctx.guild.id: vc}) # Updating the cache with the guild and channel. - - vc.start_recording( - discord.sinks.WaveSink(), # The sink type to use. - once_done, # What to do once done. - ctx.channel # The channel to disconnect from. - ) - await ctx.respond("Started recording!") -``` - - - -
- - record - -
- Started recording! -
-
- -
- -Now you are finished making your command for voice receiving! Next, you will want to: - -1. Make your finished callback -2. Make a stop command - -### Making a Callback - -To make a callback, you will want to define the currently undefined `once_done` function inside -our command, like so: - -```py title="Recorder Callback" -async def once_done(sink: discord.sinks, channel: discord.TextChannel, *args): # Our voice client already passes these in. - recorded_users = [ # A list of recorded users - f"<@{user_id}>" - for user_id, audio in sink.audio_data.items() - ] - await sink.vc.disconnect() # Disconnect from the voice channel. - files = [discord.File(audio.file, f"{user_id}.{sink.encoding}") for user_id, audio in sink.audio_data.items()] # List down the files. - await channel.send(f"finished recording audio for: {', '.join(recorded_users)}.", files=files) # Send a message with the accumulated files. -``` - - - - finished recording audio for:{" "} - {defaultOptions.profiles.bob.author} - - - -
- -Now that you've done this, the only thing left to do is make your stop command. - -### Making a Stop Command - -The final step to this guide is stopping the audio recording. This is the easiest step by far. - -To make it, you will want to do the following: - -```py title="Stop Recording Command" -@bot.command() -async def stop_recording(ctx): - if ctx.guild.id in connections: # Check if the guild is in the cache. - vc = connections[ctx.guild.id] - vc.stop_recording() # Stop recording, and call the callback (once_done). - del connections[ctx.guild.id] # Remove the guild from the cache. - await ctx.delete() # And delete. - else: - await ctx.respond("I am currently not recording here.") # Respond with this if we aren't recording. - -bot.run("token") -``` - -Congratulations! You have now implemented voice recording into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/es/docusaurus-plugin-content-pagesindex.tsx b/i18n/es/docusaurus-plugin-content-pagesindex.tsx deleted file mode 100644 index 6ca77bb2..00000000 --- a/i18n/es/docusaurus-plugin-content-pagesindex.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import DefaultLayout from "@site/src/layouts/DefaultLayout"; -import PYCHero from "@site/src/components/PYCHero"; -import PYCButton from "@site/src/components/PYCButton"; - -export default function Home(): JSX.Element { - return ( - - -
- Imagine a place where you can learn how to create an awesome Discord - bot, equip it with Pycord, and have it running in less than a minute. - Imagine a place where you can learn everything about Pycord. Imagine a - guide. A Pycord Guide! -

- Whether you are a newbie or an experienced developer, you will find - everything you need to know about Pycord here. This guide will teach - you: -
    -
  • How to get a brand new bot running from scratch;
  • -
  • How to create Interactions, Context Menus and Commands;
  • -
  • In-depth concepts such as Embeds, Reactions, Help Commands, Paginators, etc;
  • -
  • Popular Topics such as working with Databases, Sharding, etc;
  • -
  • Ways to handle and manage common errors and best practices for bots;
  • -
  • And Much More!
  • -
-
-
- ); -} diff --git a/i18n/es/docusaurus-theme-classic/footer.json b/i18n/es/docusaurus-theme-classic/footer.json deleted file mode 100644 index 82aab2e0..00000000 --- a/i18n/es/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "copyright": { - "message": "Copyright © 2022-2026 Pycord Development, All rights reserved.", - "description": "The footer copyright" - } -} diff --git a/i18n/es/docusaurus-theme-classic/navbar.json b/i18n/es/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 473b847e..00000000 --- a/i18n/es/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "title": { - "message": "Pycord Guide", - "description": "The title in the navbar" - }, - "item.label.Home": { - "message": "Home", - "description": "Navbar item with label Home" - }, - "item.label.Docs": { - "message": "Docs", - "description": "Navbar item with label Docs" - }, - "item.label.GitHub": { - "message": "GitHub", - "description": "Navbar item with label GitHub" - }, - "item.label.Source": { - "message": "Source", - "description": "Navbar item with label Source" - } -} diff --git a/i18n/fr/code.json b/i18n/fr/code.json deleted file mode 100644 index 9cce6148..00000000 --- a/i18n/fr/code.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "theme.ErrorPageContent.title": { - "message": "This page crashed.", - "description": "The title of the fallback page when the page crashed" - }, - "theme.NotFound.title": { - "message": "Page Not Found", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "We could not find what you were looking for.", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.admonition.note": { - "message": "note", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "tip", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.danger": { - "message": "danger", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "info", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.caution": { - "message": "caution", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "Scroll back to top", - "description": "The ARIA label for the back to top button" - }, - "theme.blog.archive.title": { - "message": "Archive", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "Archive", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "Blog list page navigation", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "Newer Entries", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "Older Entries", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "Blog post page navigation", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "Newer Post", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "Older Post", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.blog.post.plurals": { - "message": "One post|{count} posts", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} tagged with \"{tagName}\"", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "View All Tags", - "description": "The label of the link targeting the tag list page" - }, - "theme.colorToggle.ariaLabel": { - "message": "Switch between dark and light mode (currently {mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "dark mode", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "light mode", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "Breadcrumbs", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription": { - "message": "{count} items", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "Docs pages", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "Previous", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "Next", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "One doc tagged|{count} docs tagged", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "{nDocsTagged} with \"{tagName}\"", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versionBadge.label": { - "message": "Version: {versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "latest version", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "Edit this page", - "description": "The link label to edit the current page" - }, - "theme.common.headingLinkTitle": { - "message": "Direct link to {heading}", - "description": "Title for link to heading" - }, - "theme.lastUpdated.atDate": { - "message": " on {date}", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": " by {user}", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "Last updated{atDate}{byUser}", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "Versions", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "Tags:", - "description": "The label alongside a tag list" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "Close", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "Blog recent posts navigation", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.copied": { - "message": "Copied", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "Copy code to clipboard", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "Copy", - "description": "The copy button label on code blocks" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "Toggle word wrap", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "Toggle the collapsible sidebar category '{label}'", - "description": "The ARIA label to toggle the collapsible sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "Main", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "Languages", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "On this page", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "Read More", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "Read more about {title}", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.blog.post.readingTime.plurals": { - "message": "One min read|{readingTime} min read", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.breadcrumbs.home": { - "message": "Home page", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "Docs sidebar", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "Close navigation bar", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← Back to main menu", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "Toggle navigation bar", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.SearchBar.seeAll": { - "message": "See all {count} results" - }, - "theme.SearchPage.documentsFound.plurals": { - "message": "One document found|{count} documents found", - "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.SearchPage.existingResultsTitle": { - "message": "Search results for \"{query}\"", - "description": "The search page title for non-empty query" - }, - "theme.SearchPage.emptyResultsTitle": { - "message": "Search the documentation", - "description": "The search page title for empty query" - }, - "theme.SearchPage.inputPlaceholder": { - "message": "Type your search here", - "description": "The placeholder for search page input" - }, - "theme.SearchPage.inputLabel": { - "message": "Search", - "description": "The ARIA label for search page input" - }, - "theme.SearchPage.algoliaLabel": { - "message": "Search by Algolia", - "description": "The ARIA label for Algolia mention" - }, - "theme.SearchPage.noResultsText": { - "message": "No results were found", - "description": "The paragraph for empty search result" - }, - "theme.SearchPage.fetchingNewResults": { - "message": "Fetching new results...", - "description": "The paragraph for fetching new search results" - }, - "theme.SearchBar.label": { - "message": "Search", - "description": "The ARIA label and placeholder for search button" - }, - "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "Clear the query", - "description": "The label and ARIA label for search box reset button" - }, - "theme.SearchModal.searchBox.cancelButtonText": { - "message": "Cancel", - "description": "The label and ARIA label for search box cancel button" - }, - "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "Recent", - "description": "The title for recent searches" - }, - "theme.SearchModal.startScreen.noRecentSearchesText": { - "message": "No recent searches", - "description": "The text when no recent searches" - }, - "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { - "message": "Save this search", - "description": "The label for save recent search button" - }, - "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "Remove this search from history", - "description": "The label for remove recent search button" - }, - "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "Favorite", - "description": "The title for favorite searches" - }, - "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "Remove this search from favorites", - "description": "The label for remove favorite search button" - }, - "theme.SearchModal.errorScreen.titleText": { - "message": "Unable to fetch results", - "description": "The title for error screen of search modal" - }, - "theme.SearchModal.errorScreen.helpText": { - "message": "You might want to check your network connection.", - "description": "The help text for error screen of search modal" - }, - "theme.SearchModal.footer.selectText": { - "message": "to select", - "description": "The explanatory text of the action for the enter key" - }, - "theme.SearchModal.footer.selectKeyAriaLabel": { - "message": "Enter key", - "description": "The ARIA label for the Enter key button that makes the selection" - }, - "theme.SearchModal.footer.navigateText": { - "message": "to navigate", - "description": "The explanatory text of the action for the Arrow up and Arrow down key" - }, - "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "Arrow up", - "description": "The ARIA label for the Arrow up key button that makes the navigation" - }, - "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "Arrow down", - "description": "The ARIA label for the Arrow down key button that makes the navigation" - }, - "theme.SearchModal.footer.closeText": { - "message": "to close", - "description": "The explanatory text of the action for Escape key" - }, - "theme.SearchModal.footer.closeKeyAriaLabel": { - "message": "Escape key", - "description": "The ARIA label for the Escape key button that close the modal" - }, - "theme.SearchModal.footer.searchByText": { - "message": "Search by", - "description": "The text explain that the search is making by Algolia" - }, - "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "No results for", - "description": "The text explains that there are no results for the following search" - }, - "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "Try searching for", - "description": "The text for the suggested query when no results are found for the following search" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "Believe this query should return results?", - "description": "The text for the question where the user thinks there are missing results" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "Let us know.", - "description": "The text for the link to report missing results" - }, - "theme.SearchModal.placeholder": { - "message": "Search docs", - "description": "The placeholder of the input of the DocSearch pop-up modal" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "Try again", - "description": "The label of the button to try again rendering when the React error boundary captures an error" - }, - "theme.common.skipToMainContent": { - "message": "Skip to main content", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "Tags", - "description": "The title of the tag list page" - } -} diff --git a/i18n/fr/docusaurus-plugin-content-blog/options.json b/i18n/fr/docusaurus-plugin-content-blog/options.json deleted file mode 100644 index 9239ff70..00000000 --- a/i18n/fr/docusaurus-plugin-content-blog/options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": { - "message": "Blog", - "description": "The title for the blog used in SEO" - }, - "description": { - "message": "Blog", - "description": "The description for the blog used in SEO" - }, - "sidebar.title": { - "message": "Recent posts", - "description": "The label for the left sidebar" - } -} diff --git a/i18n/fr/docusaurus-plugin-content-docs/current.json b/i18n/fr/docusaurus-plugin-content-docs/current.json deleted file mode 100644 index 36b4849a..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.defaultSidebar.category.Getting Started": { - "message": "Getting Started", - "description": "The label for category Getting Started in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Interactions": { - "message": "Interactions", - "description": "The label for category Interactions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Application Commands": { - "message": "Application Commands", - "description": "The label for category Application Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.UI Components": { - "message": "UI Components", - "description": "The label for category UI Components in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Extensions": { - "message": "Extensions", - "description": "The label for category Extensions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Commands": { - "message": "Commands", - "description": "The label for category Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Pages": { - "message": "Pages", - "description": "The label for category Pages in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Voice": { - "message": "Voice", - "description": "The label for category Voice in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Popular Topics": { - "message": "Popular Topics", - "description": "The label for category Popular Topics in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar defaultSidebar" - } -} diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png deleted file mode 100644 index 7480e1da90a413f8dfe8e13b66a9a2a8c5dc2bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40520 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 CfS#QI diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg b/i18n/fr/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg deleted file mode 100644 index ce6b5110ab3b4285f55402fb88c1b8a8f6ba9900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78518 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 diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png deleted file mode 100644 index 32a47d0424f1ab420ca363682a12460aff040c91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39618 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 aeS&BlM7jQ%=K2BnBlKRJKmVP^m;VLX8_o0p diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/_category_.json b/i18n/fr/docusaurus-plugin-content-docs/current/extensions/_category_.json deleted file mode 100644 index 309b494a..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 5, - "label": "Extensions", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json b/i18n/fr/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json deleted file mode 100644 index 652aa4ee..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Bridge" -} \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx deleted file mode 100644 index 451775d3..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Bridge ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -## Concept - -Let's say that you want to make a command that is both a Slash Command and a Prefixed Command. Now, you could just copy and paste the code from the first command callback to the other and make some adjustments, but that's not very efficient. - -This is where the `ext.bridge` module comes in. It allows you to use one callback to make both a Slash Command and a Prefixed Command. - -### Example Usage - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def hello(ctx): - await ctx.respond("Hello!") - -bot.run("TOKEN") -``` - - - -

- - hello - -
- Hello! - - - - !hello - - - -
- - !hello - -
- Hello! -
- - -## Syntax - -First, instead of using `discord.Bot` or `commands.Bot`, we use `bridge.Bot`. `bridge.Bot` does inherit from `commands.Bot`, so you can do anything with `bridge.Bot` that `commands.Bot` can do. -Then, we define a command with `@bot.bridge_command()`. This makes a Bridge Command, which has both a Prefixed Command counterpart and a Slash Command counterpart. -Next, the callback has access to a `ctx` object, which is the context of the command. This context is either of `BridgeApplicationContext` type or `BridgeExtContext`. Because of that, it makes detecting how the function was called easier. - -### Using Bridge Commands in a Cog - -Like Slash Commands and Prefixed Commands, you can use Bridge Commands in a Cog. You can do this by using the `bridge_command` decorator. Here's an example: - -```python -import discord -from discord.ext import bridge, commands - -class Greetings(commands.Cog): - def __init__(self, bot): - self.bot = bot - - @bridge.bridge_command() - async def hello(self, ctx): - await ctx.respond("Hello!") - - @bridge.bridge_command() - async def bye(self, ctx): - await ctx.respond("Bye!") - -def setup(bot): - bot.add_cog(Greetings(bot)) -``` - -The cog will automatically split the Bridge Command into their Slash Command and Prefixed Command counterparts. - - - -
- - hello - -
- Hello! -
- - - !hello - - - -
- - !hello - -
- Hello! -
- - -
- - bye - -
- Bye! -
- - - !bye - - - -
- - !bye - -
- Bye! -
-
- -### Deferring - -You can defer if you want to communicate to the user that your bot is busy processing the command. This is done by using `ctx.defer()`. For the Slash Command implementation, `ctx.defer()` calls the function that gives out a "Bot is thinking" message. For the Prefixed Command implementation, `ctx.defer()` enables the typing indicator. - - - -### Options - -Options are pretty straightforward. You just specify them like you do with prefixed commands, and you're all set! - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def sum(ctx, a: int, b: int): - await ctx.respond(a + b) - -bot.run("TOKEN") -``` - - - -
- - sum - -
- 4 -
- - - !sum 2 2 - - - -
- - !sum 2 2 - -
- 4 -
-
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json b/i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json deleted file mode 100644 index 63f8e08e..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx deleted file mode 100644 index bf345c07..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Command Groups ---- - -Command groups are a way to create subcommands for your commands. For example, `!afk set` or `!afk -remove`. - -## Syntax - -Creating a command group is very simple. - -```python title="Command Groups Example" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!') - -@bot.group() -async def afk(): - pass - -@afk.command() -async def set(): - ... - -@afk.command() -async def remove(): - ... - -# Another command group - -@bot.group(invoke_without_command=True) # Indicates if the group callback should begin parsing and invocation only if no subcommand was found. -async def math(ctx): - await ctx.send('Subcommand not found') - -@math.command() -async def add(ctx, a: int, b: int): - ... - -@math.command() -async def subtract(ctx, a: int, b: int): - ... -``` - -To create a command group, the command's decorator must be `@bot.group`. Once you have a command with -that decorator, you can use `@function.command()`, such as `@math.command()`. Now, you have subcommand -groups! - - - -:::info Related Topics - -- [Prefixed Commands](./prefixed-commands.mdx) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx deleted file mode 100644 index e84fd42d..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx +++ /dev/null @@ -1,481 +0,0 @@ ---- -title: Help Command ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Pycord's `commands` extension comes with a built-in help command. In this guide, we will take a look at them as well as learn how to create your own. Let's dive in! - -:::note - -This guide demonstrates using object-oriented programming and subclassing to make a help command for your -Pycord bot. It is important to understand these two concepts before continuing. - -**Learning Resources**: - -- [W3Schools - Python Subclassing](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools - Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -::: - -## The Wrong Way - -A popular way to create a help command is to disable the built-in help command and create your own. This is not recommended as it will lead to a lot of confusion. - -```python title="The Wrong Way" -bot = commands.Bot(command_prefix='!', help_command=None) -# OR -bot.help_command = None -# OR -bot.remove_command("help") - -@bot.command() -async def help(ctx, *, argument=None): - ... -``` - -While it's possible to create a help command this way, doing so does not utilize the full capabilities -of making one with Pycord. Making a help command with subclassing and OOP will save time and effort. - -## Types of Help Commands - -There are two types of built-in help commands: - -- [`DefaultHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.DefaultHelpCommand) -- [`MinimalHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.MinimalHelpCommand) - -`DefaultHelpCommand` is the command enabled by default. It isn't the best looking, but `MinimalHelpCommand` can help make it look a bit better. - - - - -```python title="Default Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.DefaultHelpCommand()) # help_command is DefaultHelpCommand by default so it isn't necessary to enable it like this -# We enable it here for the sake of understanding - -... - -bot.run("token") -``` - - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- - -```python title="Minimal Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.MinimalHelpCommand()) - -... - -bot.run("token") -``` - - - - !help - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
- -
- -
- -## Updating Built-in Help Commands - -Let's try to make the `MinimalHelpCommand` look better. We can do this by putting its content in an -embed. - -```python title="Minimal Help Command Example" -bot = commands.Bot(command_prefix='!') - - -class MyNewHelp(commands.MinimalHelpCommand): - async def send_pages(self): - destination = self.get_destination() - for page in self.paginator.pages: - emby = discord.Embed(description=page) - await destination.send(embed=emby) - -bot.help_command = MyNewHelp() -``` - -Let's go through the code. - -First, we create a new class called `MyNewHelp`. This class is a subclass of `MinimalHelpCommand`. - -Next, we override the `send_pages` method. This method is responsible for sending the help command to -the user. We override this method because we don't want to change the content of the pages, just how -they are sent. - -We use the `get_destination` method to get the destination of the message. This is the channel or use that the help -command is to be sent to. - -We use the `paginator.pages` property to get the different pages of the help command. We put the page -in an embed, and then send the embed to the destination channel. - -Finally, we set this as our new help command using `bot.help_command = MyNewHelp()`. - - - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a - category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
-
- -## Creating Your Help Command - -Not satisfied with the built-in help commands? You can create your own! - -For this, we will subclass the `HelpCommand` class. - -There are 4 methods that we need to override: - -- `HelpCommand.send_bot_help(mapping)` that gets called with `help` -- `HelpCommand.send_command_help(command)` that gets called with `help ` -- `HelpCommand.send_group_help(group)` that gets called with `help ` -- `HelpCommand.send_cog_help(cog)` that gets called with `help ` - -### Bot Help - -```python title="Bot Help Example" -class MyHelp(commands.HelpCommand): - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help") - for cog, commands in mapping.items(): - command_signatures = [self.get_command_signature(c) for c in commands] - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's go through the code. - -- First, we create a new class called `MyHelp`. This class is a subclass of `HelpCommand`. - -- Next, we override the `send_bot_help` method. This method is responsible for sending the main help - command to the user. - -- We create an embed with the title "Help". - -- We iterate through `mapping.items()`, which returns a list of tuples, the first element being the - cog and the second element being a list of commands. - -- By using `self.get_command_signature(c)` we get the signature of the command, also known as the - `parameters` or `arguments`. - -- There is a chance that the cog is empty, so we use `if command_signatures:`. - -- We get the name of the cog using `getattr(cog, "qualified_name", "No Category")`. This calls the - cog's attribute `qualified_name` which returns "No Category" if the cog has no name. - -- We add a field to the embed with the name of the cog and the value of the command signatures. - -- Finally, we send the embed to the channel. - -Let's improve the code a little. - -```python title="Improved Bot Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - command_signatures = [self.get_command_signature(c) for c in filtered] - - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Now the help command won't show commands that the user can't use, as well as aliases for commands. -Let's get the help command to show command aliases. - -### Command Help - -This function is called when the user uses `help `. - -```python title="Command Help Example" -class MyHelp(commands.HelpCommand): - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command), color=discord.Color.random()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's quickly go through the code we haven't discussed yet. - -- In line 3, we create an embed with a title the signature of the command (so that the title of the - embed looks like ` [parameter]`), and a random color. - -- In lines 4 and 5, we get the command's `help` description and add it to the embed. The help description - of a command can be specified in the docstrings of a command function. For example: - - ```` - ```python - @bot.command() - async def ping(ctx): - """Returns the latency of the bot.""" - await ctx.send(f"Pong! {round(bot.latency * 1000)}ms") - ``` - ```` - -- Line 6 is shorthand for - - ```python - alias = command.aliases - if alias: - ... - - # is the same as - - if alias := command.aliases: - ... - ``` - - A very helpful (but not well-known) Python shorthand! - -- In line 7, we get the aliases of the command and add them to the embed. - -### Cog Help - -This is pretty easy! - -```python title="Custom Cog Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_cog_help(self, cog): - embed = discord.Embed(title=cog.qualified_name or "No Category", description=cog.description, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(cog.get_commands()): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Once again, we create an embed, get the commands that the user can use, and add them to the embed. - -### Group Help - -Similar to the cog help, this is pretty easy! - -```python title = "Custom Group Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_group_help(self, group): - embed = discord.Embed(title=self.get_command_signature(group), description=group.help, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(group.commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Add all of these methods together, and you have a fully functioning help command! - -
-Click to see the final code for this section -
- -:::note - -The following code has been slightly edited from the tutorial version. - -::: - -```python title="Custom Help Command Example" -class SupremeHelpCommand(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - if command_signatures := [ - self.get_command_signature(c) for c in filtered - ]: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command) , color=discord.Color.blurple()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_help_embed(self, title, description, commands): # a helper function to add commands to an embed - embed = discord.Embed(title=title, description=description or "No help found...") - - if filtered_commands := await self.filter_commands(commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No help found...") - - await self.get_destination().send(embed=embed) - - async def send_group_help(self, group): - title = self.get_command_signature(group) - await self.send_help_embed(title, group.help, group.commands) - - async def send_cog_help(self, cog): - title = cog.qualified_name or "No" - await self.send_help_embed(f'{title} Category', cog.description, cog.get_commands()) - -bot.help_command = SupremeHelpCommand() -``` - -
-
- -## Command Attributes - -How can you add cooldowns, set aliases, and change the name of help commands? Command attributes can -help you do all of that, and more! - -```python title="Help Command Attributes" -attributes = { - 'name': "help", - 'aliases': ["helpme"], - 'cooldown': commands.CooldownMapping.from_cooldown(3, 5, commands.BucketType.user), -} - -# You need to use CooldownMapping.from_cooldown(rate, per, type) - -bot.help_command = MyHelp(command_attrs=attributes) -``` - -## Error Handling - -When a user attempts to use a command that does not exist, we need to inform the user. -We can do this by overriding the `send_error_message` function. - -```python title="Custom Help Error Example" -class MyHelp(commands.HelpCommand): - async def send_error_message(self, error): - embed = discord.Embed(title="Error", description=error, color=discord.Color.red()) - channel = self.get_destination() - - await channel.send(embed=embed) -``` - - - - !help update_pycord - - - - Command 'update_pycord' not found. - - - - -## Credits - -Most of the content from this guide is from -[InterStella0's walkthrough guide on subclassing HelpCommand](https://gist.github.com/InterStella0/b78488fb28cadf279dfd3164b9f0cf96). -Thanks to InterStella0 for making this guide amazing. - -:::info Related Topics - -- [Subclassing Bots](../../Popular-Topics/subclassing-bots) -- [Prefixed Commands](./prefixed-commands) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx deleted file mode 100644 index 87bef7ac..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx +++ /dev/null @@ -1,324 +0,0 @@ ---- -title: Prefixed Commands -description: Learn how to use the commands extension for Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Before Discord added slash commands, all bots had prefixed commands. A user would type the bot's prefix -followed by a word or phrase to invoke a command, such as `?help` or `!help`. -However, this prefixed commands system isn't native to Discord! Developers made use of an `on_message` -event to check if the message began with a certain character, then invoke the command. Every time a -message was sent, the bot would see the message and check for its "prefix" - -The syntax becomes a little more complicated when you want to have multiple commands. There are several -disadvantages to this system. This is where the commands extension comes in. `ext.commands` has -various advantages, such as: - -- Simpler syntax -- Easier to use -- Easier to parse user input -- Comes with built-in help commands -- Comes with a built-in system for categorizing commands - - - - -```python title="Prefixed Commands with Events" -import discord - -client = discord.Client() - -@client.event -async def on_message(message): - if message.content.startswith("!ping"): - await message.channel.send("Pong!") - - elif message.content.startswith("!announce"): - if len(message.content.split(" ")) < 3: - await message.channel.send("You need to specify a title and a message. Correct usage: `!announce Hello Hello everyone!`") - return - - msg = message.content.split(" ", 2) - title = msg[1] - content = msg[2] - - await message.channel.send("**{}**\n{}".format(title, content)) - - elif message.content.startswith("!"): - await message.channel.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !help - - - Unknown Command. - -
- -
- - -```python title="The Commands Extension" -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix="!", intents=intents) - -@bot.command() -async def ping(ctx): - await ctx.send("Pong!") - -@bot.command() -async def announce(ctx, title, *, message): - await ctx.send("**{}**\n{}".format(title, message)) - -@bot.event -async def on_command_error(ctx, error): - if isinstance(error, commands.CommandNotFound): - await ctx.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !pycord - - - Unknown command. - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
- !announce -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The commands extension has many more uses. This example only showcases the basic features mentioned -in the previous example. Other things you can do with the commands extension include using a different -built-in help command and creating your own. The following tutorials showcase these. - -::: - -
-
- -## Syntax - -Before we check out the syntax, let's take a look at the bot classes. - -> `discord.Client` - Contains only events. -> -> `discord.Bot` - Subclasses `discord.Client`, adds commands. -> -> `discord.ext.commands.Bot` - Subclasses `discord.Bot`, adds prefixed commands, cogs, and more. - -This means that `discord.ext.commands.Bot` has both slash commands and prefixed commands, as well as -events, cogs and more. - -Now let's look at the syntax. - -```python title="A Simple Prefixed Bot" -import discord -from discord.ext import commands # Import the commands extension -# discord.ext.commands are not the same as discord.commands! - -intents = discord.Intents.default() #Defining intents -intents.message_content = True # Adding the message_content intent so that the bot can read user messages - -bot = commands.Bot(command_prefix="!", intents=intents) # You can change the command prefix to whatever you want. - -@bot.command() # This is the decorator we use to create a prefixed command. -async def ping(ctx): # This is the function we will use to create the command. - await ctx.send("Pong!") # This is the response the bot will send. - - -bot.run("token") # Run the bot with your token. -``` - - - - !ping - - - Pong! - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The help command is a built-in command and is enabled by default. You will learn more about it in the -following guides. - -::: - -## Parameters - -Prefixed commands can take parameters, just like slash commands. You can specify the parameters in -the function itself. - -```python title="Parameters Example 1" -@bot.command() -async def echo(ctx, *, message): - await ctx.send(message) -``` - -`ctx` is the context of the message. `*` means that the parameter can be any number of words. `message` -is the parameter. If you had not passed `*`, `message` would only have been one word. - -For example, if a user had used `!echo hello world`, `message` would have been `hello`. Since we -passed `*`, `message` is `hello world`, or the rest of the message. - -We can pass multiple parameters too! - -```python title="Parameters Example 2" -@bot.command() -async def echo(ctx, channel:discord.TextChannel, title, *, message): - await channel.send("**{}**\n{}".format(title, message)) -``` - -In the example above, `channel` is a parameter that is of type `discord.TextChannel`. When you -specify the type of the parameter, Pycord will automatically try to convert the parameter to that type. -That is why you can use `channel.send` directly without needing to convert it first. - -We also have a new parameter, `title`. This does not have a type, so it will be a string. `*` means -that the rest of the message belongs to the next parameter, in this case, `message`. - -When a user types `!echo #general Greetings! Hello World!`, `channel` will be the text channel -`#general`, `title` will be `Greetings!` and `message` will be `Hello World!`. - -Let's take an example where the user passes `!echo #general Holiday Greetings! Greetings to you all!`. -Here, the user wants the title to be "Holiday Greetings!" and the message to be "Greetings to you all!". -However, since Pycord parses the message at whitespaces, the title will end up being "Holiday" and the -message "Greetings! Greetings to you all!". The user can prevent this by typing `!echo "Holiday -Greetings!" Greetings to you all!`. - - - - - - !echo #general Holiday Greetings! Greetings to you all! - - - Holiday -
- Greetings! Greetings to you all! -
- - !echo #general "Holiday Greetings!" Greetings to you all! - - - Holiday Greetings! -
- Greetings to you all! -
-
- -Let's check out another example for parameters and parameter types. - -```python title="Parameters Example 3" -import random - -@bot.command() -async def gtn(ctx, guess:int): - number = random.randint(1, 10) - if guess == number: - await ctx.send("You guessed it!") - else: - await ctx.send("Nope! Better luck next time :)") -``` - -If you had not specified the type of the parameter, it would have been a string. And since `"5"` is not -the same as `5` in python, the bot would have responded with "Nope! Better luck next time :)". -Even if you do not specify the type of the parameter, you can still convert it later on, in this case, -with `int(guess)`. - -:::info Related Topics - -- [Command Groups](groups) -- [Rules and Common Practices](../../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json b/i18n/fr/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json deleted file mode 100644 index baeba701..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Pages", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx deleted file mode 100644 index be90b035..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Paginator Basics ---- - -# Paginator Basics - -## [Page](https://docs.pycord.dev/en/stable/ext/pages/index.html#page) - -This class contains two attributes: `content` and `embeds`, which correspond to the attributes of the same name on the -`discord.Message` class. -To create a new Page, use the following syntax: - -```py -import discord -page = Page(content="My Page Content", embeds=[discord.Embed(title="My First Embed Title")]) -``` - -## [PageGroup](https://docs.pycord.dev/en/stable/ext/pages/index.html#pagegroup) - -This class represents a group of pages. It uses most of the same parameters as `Paginator`, which allows each -`PageGroup` to effectively have its own settings and behaviours. - -## [Paginator](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator) - -This is the main class for `ext.pages`, and is used to control most of the functionality of the extension. - -In its most basic form, with no arguments provided (default values listed below), a paginator can be created like so: - -```py title="Paginator Example" -import discord -from discord.ext.pages import Paginator, Page - -my_pages = [ - Page( - content="This is my first page. It has a list of embeds and message content.", - embeds=[ - discord.Embed(title="My First Embed Title"), - discord.Embed(title="My Second Embed Title"), - ], - ), - Page( - content="This is my second page. It only has message content.", - ), - Page( - embeds=[ - discord.Embed( - title="This is my third page.", - description="It has no message content, and one embed.", - ) - ], - ), -] -paginator = Paginator(pages=my_pages) -``` - -The only required parameter for `Paginator` is the `pages` parameter, which is usually a list of `Page` objects. - -You can also pass in a list of `PageGroup` objects, a list of strings, a list of embeds, or a list of lists of embeds. - -Once the `Paginator` instance is created, you can call either -[`Paginator.send()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.send) -or [`Paginator.respond()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.respond) -to send a message or response with the paginator's contents. - -#### Depending on what's being passed to the `pages` parameter, the behaviour of the paginator may differ: - -- Passing a list of `PageGroup` objects will essentially treat each `PageGroup` as its own Paginator, with most - `Paginator` attributes able to be set independently for each `PageGroup`. - \- Each `PageGroup` accepts its own `pages` parameter, which inherits the same behaviour as the `pages` parameter - of `Paginator`, except it cannot contain other `PageGroup` objects. -- If a page is a `Page` object, this will allow you to specify both the `discord.Message.content` and - `discord.Message.embeds` attributes for a page. - \- **This is the preferred method of defining a page.** -- If a page is a string, this will be used for the `discord.Message.content` attribute. This type of page cannot have - any embeds. -- If a page is a list of embeds, this will be used for the `discord.Message.embeds` attribute. This type of page - cannot have any message content. -- If a page is a list of lists of embeds, each parent list item will create a page containing all embeds from its - child list. This type of page cannot have any message content. - -#### Parameters for the `Paginator` class which have default values: - -- `show_disabled` **:** `True` - - Show buttons that are disabled (i.e. can't be clicked) -- `author_check` **:** `True` - - Only the author can interact with the paginator. -- `timeout` **:** `180` _(seconds)_ - - The paginator will time out and become inactive after this many seconds. -- `disable_on_timeout` **:** `True` - - If the paginator times out, it will be automatically disabled and all buttons will be unusable. -- `use_default_buttons` **:** `True` - - Use the default set of 4 buttons and a page indicator. -- `show_indicator` **:** `True` - - When using the default buttons, shows a middle 5th button with the current/total page numbers. - -**For other parameters that can be set on initialization, please check the -[API Reference](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator)** - -## [PaginatorButton](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatorbutton) - -This class represents a button used to navigate between the pages of a paginator. It's also used to create the page -indicator. - -When creating your own custom buttons, you can either use this class directly or subclass it to add any additional -functionality you may need. - -To add custom buttons to the paginator instead of the default navigation buttons, you have two options to do so: - -1. **Using the `custom_buttons` parameter of `Paginator`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - buttons = [ - PaginatorButton("first", label="<<-", style=discord.ButtonStyle.green), - PaginatorButton("prev", label="<-", style=discord.ButtonStyle.green), - PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True), - PaginatorButton("next", label="->", style=discord.ButtonStyle.green), - PaginatorButton("last", label="->>", style=discord.ButtonStyle.green), - ] - paginator = Paginator( - pages=["Page 1", "Page 2", "Page 3"], - show_indicator=True, - use_default_buttons=False, - custom_buttons=buttons, - ) - ``` -2. **Using `Paginator.add_button()`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"], use_default_buttons=False) - paginator.add_button(PaginatorButton("prev", label="<", style=discord.ButtonStyle.green)) - paginator.add_button(PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True)) - paginator.add_button(PaginatorButton("next", label=">", style=discord.ButtonStyle.green)) - ``` - -If you want to use the default navigation buttons, but not all of them, you can also use `Paginator.remove_button()` to -selectively remove them: - -```py -from discord.ext.pages import Paginator - -paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"]) -paginator.remove_button("first") -paginator.remove_button("last") -``` - -## [PaginatorMenu](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatormenu) - -This class represents the `discord.Select` menu used to navigate between `PageGroup` instances. In most situations, you -will not need to interact with this class directly. - -If you do subclass it, you'll likely want to call `super()` in your `__init__` method to ensure that the `PageGroup` -navigation functionality is retained. - -## Usage Examples - -For a comprehensive list of examples showing all `Paginator` functionality, please see the -[example in cog form](https://github.com/Pycord-Development/pycord/blob/master/examples/views/paginator.py) in the repo. - -## Support and Feedback - -If you have any questions, suggestions, or feedback for `ext.pages`, please join the -[Discord server](https://discord.gg/pycord). diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx deleted file mode 100644 index b8d68925..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Paginator FAQ ---- - -# Paginator FAQ - -- **What's the difference between `Paginator.send()` and `Paginator.respond()`?** - - `Paginator.send()` is used to send a channel message (DMChannel or TextChannel) with the paginator. - - `Paginator.respond()` is used to send an interaction response (or followup) message with the paginator. - -- **How can the bot send a paginator to a different destination than where it was invoked?** - - Use the `target` parameter in `Paginator.send()` or `Paginator.respond()`. - - You can also set the `target_message` parameter to control what's shown as a response where the paginator was originally invoked. - - For `Paginator.respond()`, this parameter is required if `target` is set, as an interaction requires being responded to. - -- **How can I change the paginator's behavior without re-creating and re-sending it?** - - Use the `Paginator.update()` method. - -- **How can I make the bot actually do something with the contents of a page?** - - Use the (upcoming) `Paginator.page_action()` method. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json b/i18n/fr/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json deleted file mode 100644 index 36dfb009..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Tasks" -} \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx deleted file mode 100644 index 848f6066..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Tasks ---- - -## Concept - -So you want to run a background task running at some specified interval? Thankfully, that's a common thing to do, whether you're working with some API or handling some background logic don't worry, the Pycord tasks extension is here to make life easier for you! - -With the tasks extension, you can make background tasks without worrying about the asyncio hell and mind bogglers like "what if my internet dies" and "how do I handle reconnecting" with the added benefit of a lot of useful additions that are one line of code away! - -### Example Usage - -```py -import discord -from discord.ext import tasks - -bot = discord.Bot() - -@bot.event -async def on_ready(): - very_useful_task.start() - -@tasks.loop(seconds=5) -async def very_useful_task(): - print('doing very useful stuff.') - -bot.run("TOKEN") -``` - -If you do run this code in your terminal you should see something like this after about 15 seconds: - -``` -doing very useful stuff. -doing very useful stuff. -doing very useful stuff. -``` - -For a more useful example here's a task in a cog context ripped straight from the [docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#recipes): - -```py -from discord.ext import tasks, commands - -class MyCog(commands.Cog): - def __init__(self): - self.index = 0 - self.printer.start() - - def cog_unload(self): - self.printer.cancel() - - @tasks.loop(seconds=5) - async def printer(self): - print(self.index) - self.index += 1 -``` - -As you'd expect this will increment a number and print it out every 5 seconds like so: - -```sh -0 -# 5 seconds later -1 -# 5 more seconds later -2 -# ... -``` - -## [Tasks](https://docs.pycord.dev/en/stable/ext/tasks/index.html) - -Now let's get into the nitty-gritty of tasks. - -As you've seen tasks can work in both outer scope and class contexts and the handle is roughly the same, you define a task using the `tasks.loop` decorator and use the `start` method to start it, the difference is you add the `self` argument when in a class context so since most people have all their bot's code in Cogs all the following code blocks will be in a Cog context to make it easy to copy it then apply whatever modifications you might need! - -### [Creating a task](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop) - -A look at `discord.ext.tasks.loop`'s definition in the documentation reveals that: - -1. As you've seen before it expects the time between each execution, that however doesn't have to be in seconds as - there are `seconds`, `minutes` and `hours` parameters to make it easier for us, they can also be floats in case you want - ultra-precision. -2. You can also pass in a `datetime.time` object or a sequence of them in the `time` parameter which will make it run - at the specified time(s). -3. You can pass in how many times a loop runs before it stops by passing in the `count` parameter, you can use `None` - to make it run forever which is also the default. -4. The loop function **_must_** be a coroutine. - -These are all really useful, and they aren't the only parameters so if you want to know more about them check out the -[docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop)! - -### Attributes - -A task has the following attributes: - -- `current_loop`: The current loop the task is on. -- `hours`, `minutes`, `seconds`: attributes that represent the time between each execution. -- `time`: A list of datetime.time objects that represent the times the task will run, returns `None` if no datetime - objects were passed. -- `next_iteration`: A `datetime.datetime` object that represents the next time the next iteration of the task will - run, can return `None` if the task stopped running. - -These attributes serve as a really powerful asset to get info about your loop. - -### Example - -Now let's create a cog that handles a leaderboard we have in our bot using Tasks then explain what we did after that and -also provide a refresher of how slash commands groups work in cogs. - -For the sake of this example let's pretend that we have a leaderboard module that does all the leaderboard handling for -us and that computing the leaderboard is very expensive computationally wise, so we want to store one version of it that -gets regularly updated instead of generating it every time someone calls the `/leaderboard view` command. - -```py -from discord.ext import tasks, commands -from discord.commands import SlashCommandGroup, CommandPermissions - -from leaderboard import * # Mock leaderboard module. - -class LeaderboardCog(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.update_leaderboard.start() - self.leaderboard_embed = generate_leaderboard_embed() - - leaderboard = SlashCommandGroup(name='leaderboard', description='Leaderboard commands.') - - @tasks.loop(minutes=10) - async def update_leaderboard(self): - print('Updating leaderboard...') - await update_leaderboard() - self.leaderboard_embed = generate_leaderboard_embed() - - @update_leaderboard.before_loop - async def before_update_leaderboard(self): - await self.bot.wait_until_ready() - print("About to start updating leaderboard.") - - @update_leaderboard.after_loop - async def after_update_leaderboard(self): - leaderboard_cleanup() - print("Stopped updating leaderboard.") - - @update_leaderboard.error - async def update_leaderboard_error(self, error): - print(f"Oh no, an error occurred while updating the leaderboard. Error: {error}") - - @leaderboard.command() - async def view(self, ctx): - await ctx.respond(embed=self.leaderboard_embed) - - @leaderboard.command() - async def update_info(self, ctx): - await ctx.respond(f"""***Leaderboard Info***\n - Last update: {(600 - self.update_leaderboard.next_iteration.timestamp())//60} minutes ago.\n - Next update: in {self.update_leaderboard.next_iteration.timestamp() // 60} minutes.\n - Time between loops: {self.update_leaderboard.minutes} minutes.\n - Times updated this session: {self.update_leaderboard.current_loop}. - Running? {self.update_leaderboard.is_running()} - Failed? {self.update_leaderboard.failed()}""", ephemeral=True) - - # Now for the owner only commands: - - leaderboard_config = SlashCommandGroup(name="leaderboard_config", description="Leaderboard configuration commands", permission=[CommandPermissions("owner", 2, True)]) - - @leaderboard_config.command() - async def set_time_between_updates(self, ctx, minutes: int): - self.update_leaderboard.change_interval(minutes=minutes) - await ctx.respond(f"Set time between updates to {minutes} minutes.") - - @leaderboard_config.command() - async def stop(self, ctx): - self.update_leaderboard.stop() - await ctx.respond("Stopped the leaderboard update.") - - @leaderboard_config.command() - async def restart(self, ctx): - self.update_leaderboard.restart() - await ctx.respond("Restarted the leaderboard update.") - -def setup(bot): - bot.add_cog(LeaderboardCog(bot)) -``` - -Phew, that was quite a bit of code. - -Now to explain what's going on: - -First things first we create a cog and in its `__init__` function we start the `update_leaderboard` task and generate -the first instance of our leaderboard's embed. - -After that, we define the `update_leaderboard` task using the `loop` decorator, and we make it run every ten minutes by -passing 10 to the `minutes` parameter. - -Then that we define the `before_update_leaderboard` task using the `before_loop` decorator, and we make it wait until the -bot is ready before starting the task. - -Next up we define the `after_update_leaderboard` task using the `after_loop` decorator, and we make it clean up the -leaderboard when the loop finally stops running. - -Then we define the `update_leaderboard_error` task using the `error` decorator, and we make it print any errors that may -occur while we update our leaderboard to the console. - -Then we get into the fun stuff, we create a slash command group using the `SlashCommandGroup` class and name it -`leaderboard`, we then create the `view` sub-command which sends the embed generated when the leaderboard is updated and -`update_info` which shows a lot of data about the task using some attributes and functions available to us. - -We also create a slash command group called `leaderboard_config` which is only available to the owner of the bot. - -Then we create the `set_time_between_updates` sub-command which takes in the time in minutes and changes the time -between updates of the leaderboard using the `change_interval` method, the `stop` sub-command which stops the task using -the `stop` method and `restart` which restarts the task using the `restart` method. - -Finally, we add the `LeaderboardCog` cog to the bot, and we're done! - -I'd highly recommend you check the tasks extension -[documentation](https://docs.pycord.dev/en/stable/ext/tasks/index.html) for more info on how to use them and what other -functions they have. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/_category_.json b/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/_category_.json deleted file mode 100644 index 9d6255f5..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 3, - "label": "Getting Started", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx deleted file mode 100644 index 7fbabf77..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: Creating Your First Bot ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -Excited to create your first bot? Once you [install Pycord](../installation.mdx), you can start right -away! - -## Creating the Bot Application - -Just like how you need to sign up to use Discord, your bot also has to be signed up. To do this, -you should: - -1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click - on . -2. Give your bot a name, and click . -3. Now, you should see a page like this. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdW3OQnwUhacopqSWw%2F-Mjd_-mxrJCrzmaXrAg8%2Fimage.png?alt=media&token=b8e2ae6c-2290-4d37-ad7c-eb412f3fb00e) -4. Click on the tab on the left side of the screen. -5. Click on . -6. You can give it a name, change the Avatar, etc. - -## Inviting the bot - -Now, lets get the bot added to some servers. Go to the tab -in the left pane and select `bot` and `applications.commands` as scopes. - -You may want your bot to have application commands, which is what the `application.commands` scope -allows your bot to make. - -Next, you want to choose what permissions the bot will have and select them. For now, you can just -give your bot the `administrator` permission, which gives your bot every permission. Once you select -your bot's permissions, click on to get the bot invite link. - -:::tip - -When your bot is all ready to go, make sure that administrator permissions aren't selected unless -your bot truly needs them. Try selecting only permissions the bot will need. For testing, -Administrator permissions are fine. - -::: - -![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-Mk6tNY3LfDkjd6pqdpL%2F-Mk6tkdpddEWoa2jczZk%2Fimage.png?alt=media&token=52c8a29f-a798-48f8-a8c7-4ecca2681f79) - -You can use this link to invite the bot. - -## Tokens - -Now that you have an account for your bot, you need to log in. To log in, we need the bot's -password. All users and bots have a "token." You may think of this token as a password, as this allows -us to log our bot into Discord. - -Tokens are "snowflakes." Not actual snowflakes, though. Just like how no two snowflakes in real life have the same -pattern, snowflakes in computers are unique things - no two bots have the same token - so a token is -considered a snowflake. A Discord user ID is also a snowflake. - -Now, lets get your bot's token. To do this, you want to: - -1. Go back to the tab. -2. Click on the button in the "Token" section. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdbU12JISJorAZxrKH%2F-MjdbpUsapzb5n15Po5P%2Fimage.png?alt=media&token=118e259f-940a-4f6c-b3a3-c29f3a54100d) - -Now, you have your bot's token copied to your clipboard. - -:::danger - -Do not, under any circumstances, give your token to anyone. Even if you are contacted by someone -claiming to be Discord staff, do not give them your bot's token. They are lying to you to try and -gain access to your bot. If an unauthorized user gains access to your bot's token, they can access -your bot and use it in malicious ways. - -Never push your token to GitHub or include it in your code. One way to prevent your token from -getting leaked is to store it in `.env` files. - -::: - -### Protecting Tokens - -#### Using dotenv - -You can store your tokens in `.env` files. This is a simple way to store sensitive information. - -1. Create a file with the name `.env` (only the extension, with a dot/period at the start and without a name before it). -2. Define the token in the `.env` file (replace the example value with your token). - ```env title=".env" - TOKEN = NzkyNzE1NDU0MTk2MDg4ODQy.X-hvzA.Ovy4MCQywSkoMRRclStW4xAYK7I - ``` -3. Install [`python-dotenv`](https://pypi.org/project/python-dotenv/). - ```bash - python -m pip install python-dotenv - ``` -4. Load the token from the `.env` file. - ```python - import dotenv - dotenv.load_dotenv() - token = str(os.getenv("TOKEN")) - ``` -5. Pass your token as parameter when running the bot. - ```python - client.run(token) - ``` - -:::tip - -If you are using Git to track your bot's changes, you should create a file called `.gitignore` and add -`.env` to it. This stops your `.env` file from getting tracked along with the rest of your code, and -will not be pushed to a remote Git repository. As a consequence, it will stay secure on your local machine. - -::: - -## Coding the Basics - -Here's an example of code you'll write with Pycord: - -```py -import discord -import os # default module -from dotenv import load_dotenv - -load_dotenv() # load all the variables from the env file -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") - -bot.run(os.getenv('TOKEN')) # run the bot with the token -``` - - - -
- - hello - -
- Hey! -
-
-
- -Let's go through the code. First, the imports. - -```py -import discord -import os -from dotenv import load_dotenv -``` - -In the first line, `import discord`, we import Pycord. Although you install Pycord with `pip install py-cord`, you -import it with `import discord`. This is so it's as easy as possible when switching from Discord.py to Pycord. - -We then import `os` and `dotenv`. `os` is a default module that we will use to get the token from the env file. `dotenv` -is a module that we will use to load the env file. You installed this with `pip install python-dotenv`. - -Next, we load the env file with `load_dotenv()`. - -```py -bot = discord.Bot() -``` - -In this line, we create a new instance of [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). -In this object, we can pass various parameters for configuration purposes, such as `owner_ids` -and [`intents`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```py -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") -``` - -We use the [`event`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) decorator to override -the [`on_ready`](https://docs.pycord.dev/en/stable/api/events.html#discord.on_ready) function to define an -event that is automatically called when the bot is ready to use. - -```py -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") -``` - -Here, we use the [`slash_command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.slash_command) -decorator to define a slash command. We specify the `name` and `description` arguments. If not -specified, the name of the slash command would be the function name and the command description would -be empty. - -Optional: We type-hint the context parameter (`ctx`) as [`discord.ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext). In modern IDEs, type-hinting allows access to autocompletion and docstrings. You can read more about type-hinting [here](https://docs.python.org/3/library/typing.html). - -Finally, you want to run the bot using the token specified in the `.env` file. - -Now you have finished creating your first Pycord bot! What we have shown you is just the basic structure -of a bot. You can do a lot more with Python and Pycord knowledge, as well as your imagination! Pycord -will not limit your bot's abilities. - -:::note - -The part where we load the token from the environmental variables is not required. You may use another way to keep your token secure, or, although not recommended, simply specify the token normally as a string, as shown below. - -
-A Basic Bot without securing the token -
- -```py -import discord - -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.send("Hey!") - -bot.run("TOKEN") -``` - -
-
- -::: - -## FAQ - -### How do I make prefixed commands? - -Prefixed commands are an older method of creating bot commands that listen for messages and replies -if the message starts with a certain character. You can read [this page](../extensions/commands/prefixed-commands.mdx) -to learn more about prefixed commands. - -### How do I setup modules/cogs? - -[Cogs](../popular-topics/cogs) are a great way to organize your commands by putting them into -groups called cogs. Cogs are separate files that your bot loads to get the commands inside. -You can read more about cogs, as well as learn how to use them and their benefits, -[here](../popular-topics/cogs). - -### How do I add components, such as buttons and dropdown menus, to my bot? - -Pycord makes it very easy to use Message Commands with your bot by using the `discord.ui` module. -To learn more, read about Message Commands in our [interactions directory](../interactions). - -:::info Related Topics - -- [Prefixed Commands](../extensions/commands/prefixed-commands) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx deleted file mode 100644 index 2a68677b..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Hosting Your Pycord Bot ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Hosting Your Pycord Bot - -If you're completely new to this, you might have thought something along the lines of "Yay! I got my -bot working," after following our [Creating your First Bot](creating-your-first-bot) guide, only -to close your IDE or shut down your computer to find your bot offline. - -The reason for this is that programs have to be hosted somewhere, meaning some machine somewhere has -to constantly run your bot. There are tons of hosting services that can help you host your bot for -little to no cost. - -## Can I get a Clear Explanation? - -Sure thing. When you run your bot, it first makes a connection to Discord's API. Once that's done, -Pycord sends "heartbeats" to Discord. "heartbeats" are small packets sent at a set interval telling -Discord that your bot is indeed still alive. If Discord doesn't receive a heartbeat after a certain -amount of time, your bot is pronounced dead and buried in the graveyard (not really). It is, though, -taken offline and its connection with Discord is terminated. - -Once you close the terminal that you've run your program on, the program is no longer running, and -the bot stops sending heartbeats and can no longer process commands. This is why you have to constantly -keep the process running. - -This goes for all programs, in a different nature. If the code isn't compiled/built/assembled/interpreted, -it can't be running. - -## What is a Host? - -A host is a server or container for running code offered by a **hosting provider.** There are a lot -of hosting providers, such as bigger ones like Amazon Web Services (AWS) and Google Cloud, and smaller -ones like GalaxyGate and DigitalOcean. - -There are three types of hosts. - - - - Shared hosting is a type of hosting where multiple people share one VPS. Getting a spot on - a shared host is usually cheap, sometimes even free. Shared hosts do not give you a lot of - resources, from less than a gigabyte of RAM (usually 512MB on free hosts) and half of a CPU - with very little storage. Shared hosting is usually used for website hosting and is not - recommended for hosting a Discord bot. - - - A virtual private server (VPS) is a virtual computer (virtual machine) that is rented out to - customers. Most people use a VPS for hosting their projects such as Discord bots. You can get - anywhere from less than a gigabyte of RAM and a less powerful CPU to just under one hundred - gigabytes of RAM, a (or multiple) powerful CPU(s), and a fair amount of storage. A VPS is the - best choice for most users and can be fairly cheap. - - - A dedicated host is a physical computer. You can buy these yourself or rent one from a hosting - provider. Dedicated hosts are often very expensive, but are also very powerful, having a - few hundred gigabytes of RAM and a few very powerful CPUs, along with a good amount of storage. - Dedicated hosts are usually used for very large projects and are overkill for something like - a Discord bot. - - -
- -:::danger - -Make sure you choose a hosting provider you trust. Also make -sure the hosting provider you're looking at has good reviews on public forums. Googling along the -lines of "[host] review" should do the trick. A provider you don't trust can compromise your token. - -::: - -Most hosting providers rent their services to you for a monthly or yearly fee. These can be anywhere -from a few dollars to hundreds or thousands of dollars. - -## How to Host Your Bot - -Once you rent or buy a VPS, you can get to work. Most hosting providers allow you to choose from a -wide range of operating systems, most allow you to choose one but some allow you to choose -multiple. Once that's ready, you have to SSH into the system. We won't get into SSH here, but you can -read [this article from DigitalOcean](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys). -You can also use VNC, which is remote desktop software. If you are using an OS that does not have a -GUI, and is only a command line (a "server" OS), such as Ubuntu Server or most Linux Server Operating Servers, you will most -likely use SSH. If you are using an OS that has a GUI, such as Windows Server, you will most likely use VNC. - -Once you've decided on your operating system, you'll want to set it up and install Python. Once that's -done, you can copy your bot's files to your remote system, install the required packages, and run -the bot. - -:::warning - -If you are using SSH to run the file, your bot will not stay running. This is because the file is -only told to run during your session. You can use a command like [nohup](https://en.wikipedia.org/wiki/Nohup) -to make sure your file stays running after you disconnect. - -::: - -Now your bot is hosted, but that doesn't mean it can't go offline. If your bot encounters an error, -it can often go offline or stop its process. For this, make sure you have proper error handling. -Also be sure to pay attention to your hosting provider's updates or news, as they usually notify -users of when they plan on doing maintenance to their servers, making their services unavailable for -a short time. - -:::info Related Topics - -- [Creating Your First Bot](creating-your-first-bot) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx deleted file mode 100644 index 32eeb744..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx +++ /dev/null @@ -1,379 +0,0 @@ ---- -title: More Features -description: More features to make your bot cool and snazzy. ---- - -import { - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, - DiscordEmbedField, - DiscordEmbedFields, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -So, you just created your first Pycord bot! Now, let's add some more features to it. This will include adding event handlers, waiting for user response, styling the messages, and more. - -## Events - -### Event Handlers - -Events in Discord are a way to listen for certain actions. For example, if you want to know when a user joins your server, so you could send a welcome message, you can use the `on_member_join` event. - -First, you need to ask Discord to send you events. This is done via "Intents". Read up the [Intents](../Popular-Topics/intents) page for more information. - -Once you understand what intents are, you can enable the events you need, or just use the default ones with `discord.Intents.all()`. - -Now that that's done, let's add an event handler for when a user joins the server. We will use the [`on_member_join` event](https://docs.pycord.dev/en/stable/api/events.html#discord.on_member_join). We will send a private message to the user welcoming them to the server. - -```python -@bot.event -async def on_member_join(member): - await member.send( - f'Welcome to the server, {member.mention}! Enjoy your stay here.' - ) -``` - -We use the [`discord.Bot.event` decorator](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) to add the event handler. - -The `on_member_join` event is called when a user joins the server. The `member` parameter is the user that joined. Different events have different names and parameters. You can find all of them [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -So, that's how you add event handlers! - -### Waiting for User Response - -Let's say you want to create a Guess-the-Number game (where the user has to guess a number between 1-10). You need to send a message to a user and wait for them to respond. You can do this with the [`wait_for`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.wait_for) method. - -```python -@bot.command() -async def gtn(ctx): - """A Slash Command to play a Guess-the-Number game.""" - - await ctx.respond('Guess a number between 1 and 10.') - guess = await bot.wait_for('message', check=lambda message: message.author == ctx.author) - - if int(guess.content) == 5: - await ctx.send('You guessed it!') - else: - await ctx.send('Nope, try again.') -``` - -`wait_for` takes one argument, which is the event type. The event type is the name of the event you want to wait for. In this case, it's `message`. It could also be `reaction` to wait for a reaction to be added. - -We pass a keyword argument to `wait_for` called `check`. The function may look complicated if you're a beginner. We pass a `lambda` function, which simplifies the code a bit. - -The lambda function takes one parameter, `message`. When Pycord receives a message, it passes it to the `check` function. If the function returns `True`, the message is returned. If the function returns `False`, the message is ignored and the bot waits for another message. - -Here, we check if the message is from the user that sent the command. We simply use `message.author == ctx.author`. This will check if the author of the message was the person who invoked the command. - -## Styling Messages - -### Embeds - -Embeds are a Discord feature that allows applications to format their messages in cool embedded format, -enabling your bot to lay out messages with a lot of text into neat fields. - - - - - The Pycord Guide is a detailed guide that explains how to use Pycord and all of its features. - - - The Getting Started section explains how you can get a brand new bot created and running from scratch. - - - Interactions with Pycord - - - Pycord's various Extensions - - - Other Popular Topics - - - We have so much more! Just explore, and you will find everything you need. If you want another page added, open an issue on the GitHub. - - - Created with 💖 by the Pycord Team & Contributors - - - - -
- -Creating embeds is simple! Just create an instance of [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) and edit it to your liking. Once you're done, send it! - -```python -import discord - -bot = discord.Bot() - -@bot.command() -async def hello(ctx): - embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from - ) - embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") - - embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) - embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) - embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) - - embed.set_footer(text="Footer! No markdown here.") # footers can have icons too - embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") - embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") - embed.set_image(url="https://example.com/link-to-my-banner.png") - - await ctx.respond("Hello! Here's a cool embed.", embed=embed) # Send the embed with some text - -bot.run("TOKEN") -``` - - - -
- hello -
- Hello! Here's a cool embed. - - Embeds are super easy, barely an inconvenience. - - - A really nice field with some information. The description as well as the fields support markdown! - - Inline Field 1 - Inline Field 2 - Inline Field 3 - - Footer! No markdown here. - -
-
- -
- -This simple command sends replies to a [slash command](../interactions/application-commands/slash-commands) with an embed. -Let's break it down: - -```py -embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), - ) -``` - -This command creates an embed. We use the [`Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) -class to create an embed object with the title "My Amazing Embed", the description "Embeds are super easy, barely an inconvenience.", and the color `blurple`, Discord's main theme color. - -[discord.Colour](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Colour) is a class full of [classmethods](https://docs.python.org/3/library/functions.html#classmethod) -that return color values. While the official, documented name of this is `discord.Colour`, `discord.Color` -works as well. - -```py -embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") -embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) -embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) -embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) -``` - -This small section shows off embed fields. You can add fields to embeds with the [`add_field` method](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.add_field) -of the [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) class. These consist of three -keyword arguments: `title`, `value`, and `inline`. `title` and `value` are both required arguments, which inline defaults to `False` if it's not defined. The `inline` argument specifies whether space will be divided among the inline fields. There could be a mix of fields where inline has different values too. - -```py -embed.set_footer(text="Footer! No markdown here.") # footers can have icons too -embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") -embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") -embed.set_image(url="https://example.com/link-to-my-banner.png") -``` - -In this section, we're adding unique items to the embed. These items are: - -- Footer - With the [`set_footer()`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_footer) - method, you can set a small footer that holds a message. This has `text` and `icon_url` kwargs. -- Author - With the [`set_author`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_author) - method, you can set an author for the embed. This is a small text field at the top of the embed. This - includes `name`, `url` and `icon_url` kwargs. -- Thumbnail - With the [`set_thumbnail`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_thumbnail) - method, you can set a small image to reside at the top-right of the embed. This has a single `url` kwarg. -- Image - With the [`set_image`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_image) - method, you can set an image to sit at the bottom of an embed. This has a single `url` kwarg. - -There are a lot more methods and attributes you can use to configure embeds. Here, we just covered the basics. Also, remember that all of these values are not necessary in an embed. An embed may only contain a few of these. For example, only a description, a title and a description, and so on. - -### Markdown - -Markdown is a type of markup language that's limited in terms of formatting yet simple. Discord allows -for a watered-down version of markdown to be in their messages. - -#### Text Markdown - -Text formatting can be used in messages and in most embed parts, -as explained in the dedicated section below. - - - - - - - - - - - - - - - - - - - - -
*italics*__*underlined italics*__
**bold**__**underlined bold**__
***bold italics***__***underlined bold italics***__
__underlined__~~strikethrough~~
- -#### Code Markdown - -To create a single-line code block without syntax highlight, wrap the text between single backticks. -This code block will only add a dark background to the text. - -``` -`print("Hello world!")` -``` - -To create a multi-line code block without syntax highlight, wrap the text between triple backticks -on first and last line. This type of code block will encase the code inside a box. - -```` -``` -message = "Hello world!" -print(message) -``` -```` - -To create a multi-line block with syntax highlight, add the name of the language you are using right after -the triple backticks on the first line. For example, for Python you can write either "python" or "py". - -```` -```python -message = "Hello world!" -print(message) -``` -```` - -If you want to use syntax highlight for a single line of code, you still have to format it -like a multi-line block but the code must be on a separate line than the triple backticks. - -#### Quote Markdown - -To create a single-line quote block, start the line with `>` followed by a space. - -``` -> This is a single-line quote. -``` - -To create a multi-line quote block, write `>>>` followed by a space. All text -from that point onwards will be included in that quote block. - -``` ->>> This is a -multi-line quote. -``` - -#### Spoiler Markdown - -To hide a spoiler, encase the text between double pipes. The users -will have to click on it before being able to see the text contained in it. - -``` -||spoiler|| -``` - -#### Link Markdown - -Link formatting only works in embeds and messages sent through webhooks, -by using the following syntax: - -``` -[Pycord](https://pycord.dev/) -``` - -Inside the supported elements that have just been mentioned, -the example above will look like this: [`Pycord`](https://pycord.dev/) - -Outside them, the link will still be clickable but the formatting will be ignored, -therefore the example above will look similarly to this: `[Pycord](https://pycord.dev/)` - -#### Embed Markdown - -Adding markdown to your embeds or messages will give your bot the sparkle it needs, -however, markdown is limited inside embeds. Use the following table as a reference -and keep in mind that embed title and filed names will always show in **bold**. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PartTextLink
Embed AuthorNoNo
Embed TitleYesNo
Embed DescriptionYesYes
Field NameYesNo
Field ValueYesYes
Embed FooterNoNo
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx deleted file mode 100644 index e44b7c49..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Rules and Common Practices -description: All about the rules and common practices for coding a Discord bot ---- - -# Rules and Common Practices of Creating a Bot - -When creating almost anything, there's always a certain set of rules to follow or common practices, -such as [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python. This applies to creating bots -with Pycord as well. - -:::note - -Most of these rules and common practices are only applicable for -[verified bots](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting), -but it's good to follow them nonetheless. - -::: - -## Rules - -There are rules for creating bots, and most of these are required by Discord themselves, not us at -Pycord. Not following these rules may get your bot denied for verification. - -### Terms of Service and Privacy Policy - -Starting at some point in time, Discord has made providing a privacy policy with your bot a requirement. -This is so that Discord knows exactly what you are doing with its users' data. - -:::tip -You don't need a lawyer or anyone special to write out a privacy policy for you, nor do you need -it approved by some official entity. Simply writing out how you are going to use Discord user -information neatly is all you need to do. -::: - -Providing a Terms of Service for your bot is optional, though usually a best practice. It tells users -what they can and cannot do with your service, and makes it easier to settle disputes if someone -disagrees with you. - -Read more in Discord's official [Legal Docs](https://discord.com/developers/docs/legal). - -### Developer Policy - -We could list almost every rule about using Discord's API here. _Or_ we could simply link Discord's -Developer Policy to make it easier on us. You can find Discord's Developer Policy -[here](https://discord.com/developers/docs/policy). This outlines what you can and cannot do with -Discord's Developer API. And, don't worry, it's completely readable and understandable. - -## Best Practices - -Now, here's something we _can't_ simply link an article for. We're going to discuss the best practices -of creating a Discord bot with Pycord. - -### Bot Sharding - -To any new or maybe even experienced bot developer, sharding a bot sounds beneficial once you hear -about it. I'm here to tell you that it isn't a good idea to shard your bot. - -_Wait a minute, why would it be an option if it wasn't a good idea?_ It's simple. I lied. Sort of. -I'm not going to go into the details of sharding a bot, so you can read about it on -[this page](../Popular-Topics/sharding). Sharding is the process of taking your bot -and breaking it up into small pieces, so it's easier to perform tasks. This is very useful for large -bots, as it makes them faster and more reliable. Sharding is not a good practice for small bots. - -:::note -Discord will notify you once it is time to shard your bot, and will eventually force you to do so. -::: - -At the very least, wait for one thousand servers to shard your bot. If you shard your bot while it's -small, you'll just be wasting resources and possibly making your bot slower. - -### [Verification](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting) - -Verifying your Discord bot is something every developer would like to achieve. It shows that your bot -is in more than 75 servers. It's generally a good idea to try to get your bot verified as soon as -possible. We're talking at 76 servers soon. This is because Discord can be somewhat slow in terms of -bot verification, so verifying as soon as possible gives them enough time to verify before your bot -reaches the 100 server cap. If a bot is not verified, it cannot grow beyond 100 servers. - -It's also a good idea to only apply for the privileged intents that you need. Applying for intents -your bot doesn't use wastes both your time and Discord's time, as your privileged intent request -will be denied simply because you applied for an intent you didn't need. - -### Subclassing - -While it may take some time, subclassing a bot is very worth it. Once again, this was explained -elsewhere, so I won't go into the details, but I felt it fit here, so I put it here. - -Subclassing a bot makes it more flexible and allows it to do a lot more. Read more about subclassing -bots [here](../Popular-Topics/subclassing-bots) - -### Your Bot's Token - -Your bot is only able to be run for one reason: its token. If you followed the -[guide for creating your first bot](creating-your-first-bot), you should already know a bit about -keeping that token safe. That's exactly what you want to do. - -Sharing your token is never good. If someone evil gets a hold of your token, they can do terrible things, -such as making your bot leave all of its servers, spamming all the members the bot has contact with, -and even manipulating the servers the bot is in, if given the permissions. That's why it's very important -to keep your token safe. To learn how to do so, read [this part](creating-your-first-bot#tokens) of -the Creating Your First Bot guide. - -### Backups - -You always want to back up your bot's data. This includes both its code _and_ its databases. This way, -if something tragic happens, such as your host failing a data migration or you breaking your Raspberry -Pi's SD card that held your bot, you'll still have its precious user data. I have a small program for -my bot that uploads its databases to a remote GitHub repository periodically to not lose any data. -It may be smarter to find a bit more of a reliable way to do so, though. - -Public or private, having a local Git repository connected to a remote one is a good idea for making -almost any application. For a lot of developers, it's like saving your work. If you do this, all of -your bot's code won't be lost if your computer spontaneously combusts, or you smash it to bits from -anger. You can simply grab the backup computer that everyone has lying around, and you're back -in business. - -### Organization and Cleanliness - -It is _extremely_ important to have organized code. This includes commands, objects, functions, -and classes. If you don't have organized code, it will get progressively harder for you to recognize -it, and others won't be able to decipher it. - -Make sure you utilize indents and spaces, as these are very important in making your code readable. - -```py title="Bad Spacing" -class MyClass: - async def add(self,num1,num2): - return num1+num2 - async def sub(self,num1,num2): - return num1-num2 -``` - -```py title="Good Spacing" -class MyClass: - async def add(self, num1, num2): - return num1 + num2 - - async def sub(self, num1, num2): - return num1 - num2 -``` - -See the difference? Now, which one looks more readable? Hopefully, you answered the second example. -Python's [PEP8](https://www.python.org/dev/peps/pep-0008/) is a PEP (**Python Enhancement Proposal**) -style guide for Python. It is the style guide that is used by most Python developers and programmers, -providing a universal way to write and read code. - -### Databases - -As your bot grows, you'll inevitably have to store data for your bot. Now, most people would probably just load up some -JSON file on boot into a `dict`, modify it in memory then write to the file. However, JSON files aren't the solution. -When you write to a JSON file, it rewrites the entire file instead of just rewriting the section that changed. It's also -a configuration file format, not a storage file format. - -Instead of using a JSON file or some other related format, you should instead use a database. There are many databases -out there, like MongoDB, SQLite, and PostgreSQL to name a few. - -All of these databases I named do the job well, and which one you use depends on what features you want out of a database. - -<>{/* Maybe clarify these/add more options */} - -#### MongoDB - -MongoDB is a JSON-like format and if you already use JSON files, it shouldn't be too hard to migrate over to. - -#### SQLite - -SQLite is based on SQL, a common relational data model. It's a lightweight, easy-to-use, portable database solution that -works entirely on files. However, if for some reason you cannot read/write to and from a file, and you need to manage -lots of data, SQLite might not be for you. - -While SQLite is a part of the Python Standard Library as the `sqlite3` package, we recommend not using it as it is -synchronous and blocking. You should use an asynchronous alternative, such as [`aiosqlite`](https://pypi.org/project/aiosqlite/). - -#### PostgreSQL - -PostgreSQL is also based on SQL, but it also has more features than SQLite. It's compliant with the SQL standard, -open-source, and extensible. However, it's not that fast or simple compared to SQLite. - -#### MariaDB - -MariaDB is also based on SQL and is a fork of the MySQL project. It's compliant with the SQL standard, it's also open -source and is a complete drop-in replacement for any code with MySQL. You don't even need to change what package you're -using! diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/installation.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/installation.mdx deleted file mode 100644 index 521c69cd..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/installation.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Installation -sidebar_position: 2 ---- - -Before you can start using Pycord, you need to install the library. - -:::note -Python **3.8 or above** is required to use Pycord. -::: - -:::tip -Before you start installing python packages globally, it's recommended you set up a virtual environment. -You can find instructions for that [here](More/virtual-environments). -::: - -## Fresh Installation - -To install Pycord, you can use the following command in your terminal: - -``` -pip install py-cord -``` - -:::tip -Remember that you need to install `py-cord`, not `pycord`. -Also, the `pip` command varies depending on your installation. For example, it might be `python3 -m pip` on macOS/Linux or `py3 -m pip` on some versions of Windows. -::: - -If you need voice support for your bot, you should run: - -``` -pip install "py-cord[voice]" -``` - -## Migration - -### Updating Pycord - -If you are upgrading from a previous version of Pycord, you can use the following command in your terminal to upgrade to the latest version: - -``` -pip install -U py-cord -``` - -### Migrating from other libraries - -If you are migrating from another library, say, `discord.py`, first of all, you need to uninstall it. - -``` -pip uninstall discord.py -``` - -Then, you can install Pycord, it's as simple as that!: - -``` -pip install py-cord -``` - -:::caution -Uninstalling `discord.py` _after_ installing `py-cord` can cause issues. Make sure to uninstall it first! -::: - -## Installing Other Builds - -### Development Build - -:::caution -The development build comes with cutting edge features and new functionality, but as it isn't a stable build you may encounter bugs. -::: - -To install the development build, you can use the following command in your terminal: - -``` -pip install -U git+https://github.com/Pycord-Development/pycord -``` - -:::important -Git is required to install this build. [Learn how you can install Git](./more/git). -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/_category_.json b/i18n/fr/docusaurus-plugin-content-docs/current/interactions/_category_.json deleted file mode 100644 index ea28be60..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 4, - "label": "Interactions" -} \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json b/i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json deleted file mode 100644 index 6dcafe83..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Application Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx deleted file mode 100644 index 8fdca991..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Context Menus -description: Learn all about Context Menus (User Commands & Message Commands) and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -When you right-click a message, you may see an option called "Apps". Hover over it, and you can see -commands a bot can run with that message. These are called message commands. - -When you right-click a user in the user list, you can once again see an option called "Apps". -Hover over it, and you can see commands a bot can run with that message. These are called user commands. - -Together, these two are called Context Menus or Context Menu Commands. These commands work very much like normal commands, except they take a member or message. - -:::note - -A bot can have up to 5 global Context Menus of each type. - -::: - -## User Commands - -Creating a user command is very simple. - -```python -@bot.user_command(name="Account Creation Date", guild_ids=[...]) # create a user command for the supplied guilds -async def account_creation_date(ctx, member: discord.Member): # user commands return the member - await ctx.respond(f"{member.name}'s account was created on {member.created_at}") -``` - - - -
- - Account Creation Date - -
- {defaultOptions.profiles.bob.author}'s account was created on 2020-01-01 -
-
- -## Message Commands - -```python -@bot.message_command(name="Get Message ID") # creates a global message command. use guild_ids=[] to create guild-specific commands. -async def get_message_id(ctx, message: discord.Message): # message commands return the message - await ctx.respond(f"Message ID: `{message.id}`") -``` - - - - Do. Or do not. There is no try. - - -
- - Get Message ID - -
- Message ID: 930650407917748286 -
-
- -
- -:::info Related Topics - -- [Slash Commands](./slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx deleted file mode 100644 index edac55b3..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Localizations -description: Localizations are a way to make your bot more accessible to your users. Learn all about localizations now! ---- - -Localizations are a way to make your bot more accessible to your users. You can localize the command -name, the names of any arguments, and any text that is displayed to the user. - -## Syntax - -```python -@bot.slash_command( - name="ping", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - }, - options=[ - Option( - name="Example", - name_localizations={ - "en-GB": "British Example" - }, - description="Example option that does nothing", - description_localizations={ - "en-GB": "British example option that does nothing" - } - ) - ] -) -async def ping(ctx, example): - responses = {"en-US": "Pong!", - "en-GB": "British Pong!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -@bot.slash_command( - name="ping2", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - } -) -async def ping2(ctx, example: Option(str, "example", name_localizations={"en-GB": "British Example"}, description="Example option that does nothing", description_localizations={"en-GB": "British example option that does nothing"})): - responses = {"en-US": "Pong2!", - "en-GB": "British Pong2!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -``` - -- [`Locales`](https://discord.com/developers/docs/reference#locales) - List of valid locales recognized by Discord diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx deleted file mode 100644 index f4a760b6..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx +++ /dev/null @@ -1,292 +0,0 @@ ---- -title: Slash Commands -description: Learn all about Slash Commands and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On March 24, 2021, Discord added Slash Commands to Discord as an easier, more efficient, and better way of using bot commands. Pycord has implemented Slash Commands into the library, so it's simple, efficient, and familiar. - -:::important - -Remember that Slash Commands require your bot to be invited with the `application.commands` scope or Slash Commands will not show up. Bots already in the guild can simply be invited again with the scope; there is no need to kick the bot. - -::: - -## Syntax - -Let's create a simple Slash Command. - -```py -import discord - -bot = discord.Bot() - -# we need to limit the guilds for testing purposes -# so other users wouldn't see the command that we're testing - -@bot.command(description="Sends the bot's latency.") # this decorator makes a slash command -async def ping(ctx): # a slash command will be created with the name "ping" - await ctx.respond(f"Pong! Latency is {bot.latency}") - -bot.run("TOKEN") -``` - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -Let's go through the code. - -First, we import Pycord's `discord` package. - -Next, we create a [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot) object and assign it to a variable `bot`. - -We then go ahead and use the [`@bot.command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.command) decorator, which registers a new Slash Command. We pass a `description` parameter to give a description to the Slash Command. We can also pass a `name` parameter to change the Slash Command's name. By default, the name of the Slash Command will be the name of the function, in this case, `/ping`. - -We create an async function called `ping` with parameters `ctx`, which, when called, sends the bot's ping/latency using [`ctx.respond`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext.respond). - -## Subcommand Groups - -You might want to group certain commands together to make them more organised. A command group is exactly what it sounds like, a group of individual Slash Commands together. - -In order to make a Slash Command group, you can use the `bot.create_group` function. - -```python -import discord - -bot = discord.Bot() - -# create Slash Command group with bot.create_group -greetings = bot.create_group("greetings", "Greet people") - -@greetings.command() -async def hello(ctx): - await ctx.respond(f"Hello, {ctx.author}!") - -@greetings.command() -async def bye(ctx): - await ctx.respond(f"Bye, {ctx.author}!") - -bot.run("TOKEN") -``` - -Or, you can instead manually make a `SlashCommandGroup` class like so: - -```python -import discord - -math = discord.SlashCommandGroup("math", "Math related commands") - -@math.command() -async def add(ctx, num1: int, num2: int): - sum = num1 + num2 - await ctx.respond(f"{num1} plus {num2} is {sum}.") - -@math.command() -async def subtract(ctx, num1: int, num2: int): - sum = num1 - num2 - await ctx.respond(f"{num1} minus {num2} is {sum}.") - -# you'll have to manually add the manually created Slash Command group -bot.add_application_command(math) -``` - -Here's what the registered subcommands will look like in the Slash Command Menu: - -![Picture of the subcommands in the Slash Command Menu](../../assets/interactions/groups-and-subcommands.jpg) - -You'll notice that there's the name of the Slash Command Group and then the name of the subcommand separated by a space. - -::: - -:::info Cogs - -If you are looking to add Slash Command Groups to cogs, please look at our [Cogs page](../../popular-topics/cogs)! - -::: - -## Sub-groups - -We've made a subcommand group, but did you know that you could create a group inside another? - -```python -from discord import SlashCommandGroup -from math import sqrt - -math = SlashCommandGroup("math", "Math related commands") -advanced = math.create_subgroup("advanced", "Advanced math commands") - -@advanced.command() -async def square_root(ctx, x: int): - await ctx.respond(sqrt(x)) - -bot.add_application_command(math) -``` - -The command created above can be invoked by typing `/math advanced square_root`. - -## Options & Option Types - -Whenever you're using Slash Commands, you might notice that you can specify parameters that the user has to set or can optionally set. These are called Options. - -Options can also include a description to provide more information. [You can learn more about Options in our documentation!](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.Option) - -Since you want different inputs from Options, you'll have to specify the type for that Option; there are a few ways of doing this. - - - - -You could use Type Annotations and let Pycord figure out the option type or explicitly specified using the [`SlashCommandOptionType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.SlashCommandOptionType) enum. - -```python -import discord - -bot = discord.Bot() - -@bot.command() -# pycord will figure out the types for you -async def add(ctx, first: discord.Option(int), second: discord.Option(int)): - # you can use them as they were actual integers - sum = first + second - await ctx.respond(f"The sum of {first} and {second} is {sum}.") - -@bot.command() -# this explicitly tells pycord what types the options are instead -async def join( - ctx, - first: discord.Option(discord.SlashCommandOptionType.string), - second: discord.Option(discord.SlashCommandOptionType.string) -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - add - -
- The sum of 1 and 1 is 2. -
- -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
- - -Instead of Type Annotations, you can also use the option decorator. This is usually done to have type-hinting. - -```python title="Slash Command Type" -import discord - -bot = discord.Bot() - -@bot.command() -@discord.option("first", type=discord.SlashCommandOptionType.string) # type = str also works -@discord.option("second", type=discord.SlashCommandOptionType.string) # type = str also works -async def join( - ctx, - first: str, - second: str, -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
-
- -## Autocomplete - -Discord's autocomplete allows developers to determine option choices that are used in a slash command option. You can do this by defining a function: - -```py -async def get_animal_types(ctx: discord.AutocompleteContext): - """ - Here we will check if 'ctx.options['animal_type']' is a marine or land animal and return respective option choices - """ - animal_type = ctx.options['animal_type'] - if animal_type == 'Marine': - return ['Whale', 'Shark', 'Fish', 'Octopus', 'Turtle'] - else: # is land animal - return ['Snake', 'Wolf', 'Lizard', 'Lion', 'Bird'] - -@bot.slash_command(name="animal") -async def animal_command( - ctx: discord.ApplicationContext, - animal_type: discord.Option(str, choices=['Marine', 'Land']), - animal: discord.Option(str, autocomplete=discord.utils.basic_autocomplete(get_animal_types)) -): - await ctx.respond(f'You picked an animal type of `{animal_type}` that led you to pick `{animal}`!') -``` - - - -
- - animal - -
- You picked an animal type of Marine that led you to pick Shark! -
-
- -:::warning - -Autocomplete can **only** be used with slash commands. - -::: - -:::info Related Topics - -- [Interactions Index](../../interactions) -- [Rules and Common Practices](../../getting-started/rules-and-common-practices) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/index.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/interactions/index.mdx deleted file mode 100644 index 3f695606..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/index.mdx +++ /dev/null @@ -1,242 +0,0 @@ ---- -title: Discord Interactions ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -In December 2020, Discord released their first Interaction: the -[Slash Command](https://discord.com/developers/docs/interactions/application-commands#slash-commands). -Since then, Discord has added many types of Interactions, including: - -[**Application Commands**](https://discord.com/developers/docs/interactions/application-commands) - -- [**Slash Commands**](https://discord.com/developers/docs/interactions/application-commands#slash-commands): - Commands that can be used with the `/` prefix. -- **Context Menu Commands**: Commands that can be used from the right-click menu. - - [**User Commands**](https://discord.com/developers/docs/interactions/application-commands#user-commands): - Commands that can be used on a user by alt-clicking/selecting them. - - [**Message Commands**](https://discord.com/developers/docs/interactions/application-commands#message-commands): - Commands that can be used on a message by alt-clicking/selecting it. - -[**UI Components**](https://discord.com/developers/docs/interactions/message-components) - -- [**Buttons**](https://discord.com/developers/docs/interactions/message-components#buttons): - Buttons are attached to a message and can be clicked on to perform an action. -- [**Select Menus**](https://discord.com/developers/docs/interactions/message-components#select-menus): - Drop-down menus are used to select a number of options from a list. -- [**Modals**](https://discord.com/developers/docs/interactions/message-components#text-inputs): - Form-like modals can be used to ask for input from a user. - -## Application Commands - -Application Commands are another set of new features that are intended to avoid compromising users' safety and privacy. -They're relatively easy to add to your bot, and give people a simpler and safer way to use commands. - -### [Slash Commands](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.SlashCommand) - -Slash Commands were the first Interaction added to Discord. They're easy to use and create, and -is the only prefix commands alternative that does not need Message Content intent. - -:::note - -Preferring prefix commands over Application Commands is **not** a valid reason to apply for the -Message Content intent. Using that as a reason will get your application denied. - -::: - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -This is what a Slash Command looks like. Not too different from a prefix command, -apart from the note telling you who invoked it. A Slash Command's fields can accept any of the following: - -- Members -- Roles -- Channels -- Attachments -- Text - -Just about as good as it gets. - -### [Message](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.MessageCommand) and [User](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.UserCommand) Commands - -Message Commands and User Commands were both introduced at around the same time, and are very similar to each other, so we'll be -introducing them together. These commands can be found in the `Apps` tab when alt-clicking. The only difference between the two is that -Message Commands only appear in the `Apps` tab of a message, while User Commands are found in the `Apps` tab of a user. Message Commands -can be used to quickly report a message, warn a user for a message, and other functions. Likewise, User Commands can be used to add a -user to a ticket, warn a user, and more. - -Here's an example of a Message Command: - - - - Hello World! - - -
- - Reverse Message - -
- Message 930650407917748286 reversed is "!dlroW olleH" -
-
- -
- -And here's an example of a User Command: - - - - {defaultOptions.profiles.dorukyum.author} has been on Discord for a long time - - -
- - User Age - -
- {defaultOptions.profiles.dorukyum.author} is 1 week old. -
- -
- - User Age - -
- {defaultOptions.profiles.bob.author} is 40 years old. -
- - 🤔 - -
- -
- -Pretty cool, right? To learn more about these two, please read the [Context Menus guide](./application-commands/context-menus.mdx). - -## [Application Commands](#application-commands) vs. [Prefix Commands](../extensions/commands/prefixed-commands) - -Ever since Discord was created, apps on it have used prefix commands. Using prefixes meant that you would have to put a -certain character (or string of characters) in front of your command, such as the exclamation mark in `!ping`. The way this -worked was that your bot would listen for messages, pick out the ones that had their specific prefix, and then respond to the command. -Now, Discord is encouraging developers to switch their bots over to Application Commands, which is a new system meant to preserve the -privacy and safety of their users. But why exactly is Discord making us switch? What's the better option, Application Commands or prefix -commands? Below, we'll discuss everything you need to know. - -### Discord's Decision - -Application Commands were conceptualized partly due to privacy concerns. When Discord first began, they weren't entirely concerned about bots -having access to the content of every message that was being sent. However, as Discord grew, this became more of a problem. Hypothetically, bots -could simply log every message they're able to receive via the Discord API and hand their contents over to a company or other third party. This is -a problem, since that data is meant to be used only by Discord. As such, they locked down Message Content, and introduced Application Commands for -bot developers to use instead. - -Prefix commands work by reading messages, as described before. Application Commands, however, don't -work this way; instead, they work by having your bot get information from Discord about when a command was used. This way, Discord can limit -Message Content only to bots that _absolutely_ depend on it, such as auto-moderation bots. - -### Who has to Use Application Commands - -Any verified bot that does not have the Message Content intent must use Application Commands. Discord is allowing developers to submit -applications for the ability to use the intent; however, since they don't want to keep supporting prefix commands due to privacy concerns, -they will automatically decline any application that includes only that as a reason. So, if your bot doesn't have an auto-moderation feature -(or any other functionality that requires Message Content), you're out of luck. - -Unverified bots, however, don't have to use Application Commands. This is because the Message Content intent is a `Privileged Intent`, meaning that -it must be applied for only if your bot is verified or about to be verified. Unverified bots don't have to apply for Privileged Intents, so they can -use them freely. - -So, if your bot is made only for a couple of servers, you can choose between prefix commands and Application Commands. However, if you plan on expanding -your bot's reach, it'll have to use Application Commands. - -### What's the Better Option - -Choosing which is the better option is up to you, if you're starting small. If -you plan on growing your bot, however, you will have to use Application Commands. Since prefix commands are slowly being phased out by Discord, -there isn't much of a choice for developers of larger bots. - -## Message Components - -Message Components are fairly new features in Discord, allowing developers to give their bots a fast -and understandable user interface. Message Components are easy to use and make your bot look modern, -sleek, and downright awesome. - -### [Views](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View) - -Views are not an Application Command nor are they a Message Component. Views are the invisible placeholders, or grid, -that Message Components lie in. Views can have up to 5 [`Action Rows`](https://docs.pycord.dev/en/stable/api/models.html#discord.ActionRow), -and Action Rows can have a maximum of 5 slots. Below, you can find a table showing how many slots a Message Interaction takes up. - -| Component | Slots | -| ------------ | ----------------------------------------------- | -| Buttons | 1 Slot | -| Select Menus | 5 Slots | -| Text Modals | 1 Slot (opened via a Button) | - -So, based on this, you could have a maximum of 25 Buttons in a View with no Select Menus, and 5 Select -Menus in a View with no Buttons. This doesn't mean you can't have them both in a View, however. You can have -a combination of them, such as 20 Buttons and a Select Menu or 10 Buttons and 3 Select Menus. - -### [Buttons](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button) - -Buttons are the first of the Message Components. They allow for quick responses to prompts, such as for canceling or continuing an action. -Of course, these aren't their only uses; people have created awesome things with Buttons, such as calculators, games, and more! - - - - Discord Buttons are awesome! -
- - Click me! - -
-
-
- -
- -This is what a Button looks like, very simple and modern. To learn more about Buttons, refer to our -[Buttons page](./ui-components/buttons.mdx). - -### [Select Menus](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Select) - -Select Menus are the second of Discord's Message Components. They allow users to select from a list of choices, which your bot can then use. -Select Menus are good for things such as choosing features, pages of a help menu, and more. - -![Select Menu Example Image](../assets/interactions/select-menus-example.png) - -This is what a Select Menu looks like. While not looking as good as Buttons, they still look great -and have even greater possibilities. To learn more about Select Menus, please refer to our [Select -Menus page](./ui-components/dropdowns.mdx). - -### [Modal Dialogs](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal) - -Text Modals are the most recently added Message Component in Discord. They're useful for text input and filling out forms, such as a -sign-up for your bot's service. These are meant to replace long bot setup processes by allowing users to fill out multiple text fields, -which avoids having the user send multiple messages for the bot. Modals can be accessed by either invoking an Application Command or by -interacting with another UI Component. - -![Text Modal Example Image](../assets/interactions/modal-example.png) - -This is what a Text Modal looks like, easy to use and one of the most useful Message Components yet. To learn more about Text Modals, -please visit our [Modal Dialogs page](./ui-components/modal-dialogs.mdx). diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json b/i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json deleted file mode 100644 index 7b0a72fe..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "UI Components", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx deleted file mode 100644 index 10557c94..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx +++ /dev/null @@ -1,314 +0,0 @@ ---- -title: Buttons -description: Learn all about implementing buttons in your Discord Bot using Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On May 26, 2021, Discord added a new interaction called buttons. Instead of reactions, bots could now -send buttons and users could use them to interact with bots. This opened up a whole new world of -possibilities for bots. Soon after, developers made calculators, polls, and games like blackjack, UNO, -and even Minecraft! Buttons provided a clear and easy to use interface for interacting with bots. - -So, let's learn how you can add buttons to your bot! - -## Concept - -Buttons weren't the only update to the interactions system in Discord. Discord also added [Select Menus](./dropdowns) and [Modal Dialogs](./modal-dialogs), both of which work very similarly to buttons. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive button. - -```python -import discord - -bot = discord.Bot() # Create a bot object - -class MyView(discord.ui.View): # Create a class called MyView that subclasses discord.ui.View - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.primary, emoji="😎") # Create a button with the label "😎 Click me!" with color Blurple - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") # Send a message when the button is clicked - -@bot.slash_command() # Create a slash command -async def button(ctx): - await ctx.respond("This is a button!", view=MyView()) # Send a message with our View class that contains the button - -bot.run("TOKEN") # Run the bot -``` - -Using this command should return the following message: - - - -
- - button - -
- This is a button! -
- - Click me! - -
-
-
- -
- -As you can see, we create a class called `MyView` that [subclasses](#oop) -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `button_callback` to the `MyView` class with the decorator -[`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button). -This decorator adds a button to a component. This function takes two arguments: the button that was -clicked and the interaction. These arguments are passed to the function when the button is clicked -by the module. We use the [`interaction.response.send_message`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse.send_message) -function to send a message to the channel where the interaction was sent. - -Finally, we create a global slash command called `button` that sends the message, along with the view -that contains a button. - -This is the basic syntax of creating a button. What you create with it is up to you. You can worry -about making your button do amazing things, while Pycord handles the rest! - -## Button Styles - - - -| Name | Usage | Color | -| --------- | ----------------------------------------------------------------------------------------- | ------- | -| Primary | `discord.ButtonStyle.primary` / `discord.ButtonStyle.blurple` | Blurple | -| Secondary | `discord.ButtonStyle.secondary` / `discord.ButtonStyle.grey` / `discord.ButtonStyle.gray` | Grey | -| Success | `discord.ButtonStyle.success` / `discord.ButtonStyle.green` | Green | -| Danger | `discord.ButtonStyle.danger` / `discord.ButtonStyle.red` | Red | -| Link | `discord.ButtonStyle.link` / `discord.ButtonStyle.url` | Grey | - -Check out the [`discord.ButtonStyle`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ButtonStyle) class for more information. - -![Different Button Styles](../../assets/interactions/button-styles.png) - -You can set a button's style by adding the `style` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) decorator. - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.success) - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots, and each button takes up 1 slot. -So, how do we move the buttons to another row? - -This can be done by specifying the `row` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) -decorator. - -:::info The `row` argument - -The row argument specifies the relative row this button belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=1, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") -``` - -## Disabling Buttons - -### Pre-Disabled Buttons - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary, disabled=True) # pass `disabled=True` to make the button pre-disabled - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView()) -``` - -### Disabling Buttons on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - button.disabled = True # set button.disabled to True to disable the button - button.label = "No more pressing!" # change the button's label to something else - await interaction.response.edit_message(view=self) # edit the message's view -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(emoji="😀", label="Button 1", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) - - @discord.ui.button(label="Button 2", style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -Sometimes, you want to have a button that is disabled after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView(timeout=30)) -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a button that is disabled after a certain amount of time, you want to have a -button that is always working. - -Normally, when the bot goes offline, all of its buttons stop working. You will be able to see the -buttons, but nothing will happen when you press them. This is a problem -if you are trying to create a self-role system with buttons, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons will stop working. When the bot comes back online, however, the buttons will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view must have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.button(label="A button", custom_id="button-1", style=discord.ButtonStyle.primary, emoji="😎") # the button has a custom_id set - async def button_callback(self, button, interaction): - await interaction.response.send_message("Button was pressed", ephemeral=True) - -@bot.command() -async def button(ctx): - await ctx.send(f"Press the button! View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many buttons can I have in a message? - -Each message can have a maximum of 25 buttons. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do buttons need any special permissions? - -No new permissions are needed for either the bot or the server to allow bots to use buttons. - -#### Should I replace reactions with buttons for my bot? - -That is up to you. Buttons do provide a cleaner interface for your bot and are easier to use. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx deleted file mode 100644 index 8320f25d..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx +++ /dev/null @@ -1,339 +0,0 @@ ---- -title: Select Menus -description: Learn all about implementing Select Menus or Dropdowns in your Discord Bot with Pycord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Shortly after the buttons were added, Discord added their second message component: Select Menus. Select Menus allow users to choose from a list of items sent by a bot. These are a great substitute for having a user send a number that corresponds to an option. You can even allow users to select multiple options from the Select Menus. This guide will show you the easy and painless ways of using them with Pycord. - -## Concept - -Select Menus aren't the only message component in Discord. There's also [Buttons](./buttons) and [Modal Dialogs](./modal-dialogs). Select Menus make it easy for users to pick one or multiple options from a list provided by a bot. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive select menu. - -```python -import discord - -bot = discord.Bot() - -class MyView(discord.ui.View): - @discord.ui.select( # the decorator that lets you specify the properties of the select menu - placeholder = "Choose a Flavor!", # the placeholder text that will be displayed if nothing is selected - min_values = 1, # the minimum number of values that must be selected by the users - max_values = 1, # the maximum number of values that can be selected by the users - options = [ # the list of options from which users can choose, a required field - discord.SelectOption( - label="Vanilla", - description="Pick this if you like vanilla!" - ), - discord.SelectOption( - label="Chocolate", - description="Pick this if you like chocolate!" - ), - discord.SelectOption( - label="Strawberry", - description="Pick this if you like strawberry!" - ) - ] - ) - async def select_callback(self, select, interaction): # the function called when the user is done selecting options - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") - -@bot.command() -async def flavor(ctx): - await ctx.respond("Choose a flavor!", view=MyView()) - -bot.run("TOKEN") -``` - -There's a lot going on over here! Don't worry, we will go over the code and explain it. - -As you can see, we create a class called `MyView` that subclasses -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `select_callback` to the `View` class with the decorator -[`discord.ui.select`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.select). -This decorator adds a select menu to the view. This decorator takes a few arguments to customize your select menu. Read them in the [Customization section](#customization). - -That was the decorator. Now, the function itself is pretty simple. It takes two parameters, not including `self`. The parameters are `select`: The select menu, and `interaction`: a [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object. Both of these are passed by Pycord, so you just need to specify them in the function! - - - -In the callback, you could do anything you want. You get the two parameters `select` and `interaction` to play around with. Here, we send a message using `await interaction.response.send_message` (where interaction is [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse)) with content `select.values[0]`, which sends the label of the first/only option the user selected. Obviously, this is only an example, and you could do just about anything you want. - -Finally, we create a global slash command called `flavour` that sends a message "Choose a flavor!" along with the view -that contains our select menu. - -This is the basic syntax of creating a select menu. What you create with it is up to you. You can worry -about making your code do amazing things, while Pycord handles the rest! - -## Customization - -#### Select Menu Properties - -- `select_type`: The type of select to create. This must be a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. -- `channel_types`: A list of channel types that can be selected in the menu. This is only valid for selects of `select_type` [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType). -- `options`: A list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. These are the options that can be selected in this menu. -- `placeholder` is the placeholder text shown in the select menu if no option is selected. -- `custom_id`: The ID of the select menu that gets received during an interaction. It is recommended not to set this to anything unless you are trying to create a persistent view. -- `row`: The relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). -- `min_values`: The minimum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `max_values`: The maximum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `disabled`: Whether the select is disabled or not. Defaults to False. - -#### Select Option Properties - -In the `options` parameter, you pass a list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. This class also has a few parameters: - -- `default` (whether the option is selected by default) -- `description` (an additional description, if any) -- `emoji` (a string or an emoji object, if any) -- `label` (the name displayed to users, can be up to 100 characters) -- `value` (a special value of the option, defaults to the label). - -## Select Types - -In addition to regular string selects, you can also have your select menu contain users, roles, mentionables, and channels as its options. You can use these alternative select types by passing a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value for the `select_type` parameter when creating the Select. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.user_select - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -Additionally, you can use shortcut decorators to create a [`discord.ui.Select`](https://docs.pycord.dev/en/master/api/ui_kit.html#discord.ui.select) with a predetermined [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. Using a shortcut decorator, the above code can be rewritten like this: - -```python -class MyView(discord.ui.View): - @discord.ui.user_select() - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -### Specifying Channel Types - -When using a [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType.channel_select) type select menu, you can pass in a list of [`discord.ChannelType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ChannelType) values to limit which types of channels users can choose when interacting with the select menu. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.channel_select, - channel_types=[discord.ChannelType.text, discord.ChannelType.voice] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"You selected {select.values[0].mention}") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots. A button takes a single slot, while a select menu takes up all 5 of them. This means a view can have a maximum of 5 select menus, or any possible combination of select menus and buttons. - -The arrangement of buttons and select menus is generally adjusted by Pycord. However, it is possible to move them to specific relative rows. This is done by specifying the `row` argument. - -:::info The `row` argument - -The row argument specifies the relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero-indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=0, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.select( - row = 1, - options = [...] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") -``` - -## Disabling Select Menus - -### Pre-Disabled Menus - -```python -class MyView(discord.ui.View): - @discord.ui.select( - disabled = True, # pass disabled=True to set the menu as disabled - options = [...] - ) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send("Select and option from the menu!", view=MyView()) -``` - -### Disabling Menus on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - select.disabled = True # set the status of the select as disabled - await interaction.response.edit_message(view=self) # edit the message to show the changes -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def first_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) # edit the message to show the changes - - @discord.ui.select(options = [...]) - async def second_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -You may want a select menu to automatically stop working after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select(ctx): - await ctx.send(view=MyView(timeout=30)) # specify the timeout here -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a select menu that is disabled after a certain amount of time, you want to have a -select menu that is always working. - -Normally, when the bot goes offline, all of its views stop working, even if they don't have a timeout. You will be able to see the -views, but nothing will happen when you try to interact with them. This is a problem -if you are trying to create a self-role system, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons and select menus will stop working. However, when the bot comes back online, the buttons and select menus will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view much have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.select(custom_id="select-1", options = [...]) # a custom_id must be set - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send(f"View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many select menus can I have in a message? - -Each message can have a maximum of 5 select menus. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do select menus need any special permissions? - -No new permissions are needed in the bot or in the server. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx deleted file mode 100644 index 6ee4682f..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Modal Dialogs -description: Learn how you can implement Modals in your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Modal Dialogs, also known as "modals", provide a form-like structure for bots to receive input from users. No extra permissions are needed for bots to send modal dialogs, so it becomes a convenient workaround for bots to receive longer input without needing the Message Content [intent](../../popular-topics/intents). - -## Concept - -Modal Dialogs consist of a title, custom ID, and up to 5 [`discord.ui.InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) components. While creating modals, we generally subclass [`discord.ui.Modal`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal), as we'll see later. - -Unlike other UI Components, Modals cannot be sent with messages. They must be invoked by an Application Command or another UI Component. - -## Usage Syntax - -```py -class MyModal(discord.ui.Modal): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - self.add_item(discord.ui.InputText(label="Short Input")) - self.add_item(discord.ui.InputText(label="Long Input", style=discord.InputTextStyle.long)) - - async def callback(self, interaction: discord.Interaction): - embed = discord.Embed(title="Modal Results") - embed.add_field(name="Short Input", value=self.children[0].value) - embed.add_field(name="Long Input", value=self.children[1].value) - await interaction.response.send_message(embeds=[embed]) -``` - - - - -The `ctx` parameter we define in Application Commands receives an [`ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext) object. Using its `send_modal()` coroutine, you can send a Modal dialog to the user invoking the Application Command. - -```py -@bot.slash_command() -async def modal_slash(ctx: discord.ApplicationContext): - """Shows an example of a modal dialog being invoked from a slash command.""" - modal = MyModal(title="Modal via Slash Command") - await ctx.send_modal(modal) -``` - - - - -The `interaction` parameter we define in UI Components receives an [`Interaction`](https://docs.pycord.dev/en/stable/api/models.html#discord.Interaction) object. The `response` attribute of the object contains an [`InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object, with various coroutines such as `send_message()` and `send_modal()`, which we utilize. - -```py -class MyView(discord.ui.View): - @discord.ui.button(label="Send Modal") - async def button_callback(self, button, interaction): - await interaction.response.send_modal(MyModal(title="Modal via Button")) - -@bot.slash_command() -async def send_modal(ctx): - await ctx.respond(view=MyView()) -``` - - - - -The above example uses an embed to display the results of the modal submission, but you can do anything you want with the text provided by the user. -Each input field can be accessed in the order it was added to the modal dialog, via `Modal.children`. - -## Customization - -A Modal can have up to 5 [`InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) fields. These fields offer some customization. - -Each field has a label which is shown to the user. This is defined with `label`. - -The `style` parameter is used to determine whether it should be a short (single-line) or long (multi-line) input field. - -There are a number of aliases that can be used: - -```x title="Single-line InputTextStyle values:" -short -singleline -``` - -```x title="Multi-line InputTextStyle values:" -paragraph = 2 -multiline = 2 -long = 2 -``` - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Buttons](./buttons) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/introduction.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/introduction.mdx deleted file mode 100644 index 3262c632..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/introduction.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Introduction -description: Pycord Guide is a complete guide for Pycord. Learn how to create Discord Bots today! -sidebar_position: 1 ---- - -Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord, written in Python. Pycord is a maintained fork of [discord.py](https://github.com/Rapptz/discord.py). - -## Before you begin - -Pycord is an advanced and complex Python library. To take advantage of the full capabilities of Pycord, you will need to have a good understanding of Python. You should know the basics of Python and have an understanding of the following concepts: - -- Variables -- Data Types -- Functions -- Packages -- Conditionals -- Loops -- Classes -- Object-Oriented Programming -- Inheritance -- Exception Handling -- Iterators -- Coroutines -- Async/Await - -This list is not exhaustive, but it should give you a good idea of what you need to know to get started. - -When you see an ellipsis - that's the three dots - in this guide, it is a placeholder for code that you need to fill in. Sometimes, it may be code for a command, while other times it could be something simple like a Guild ID. Make sure to replace them before running your bot! - -## Learning Resources - -Here are some good resources to get started or to freshen up your Python knowledge: - -- [Official Beginner's Guide](https://wiki.python.org/moin/BeginnersGuide) -- [Official Tutorial](https://docs.python.org/3/tutorial/) -- [Automate the Boring Stuff, a free online book for complete beginners to programming](https://automatetheboringstuff.com/) -- [Learn Python in y Minutes, complete cheat sheet for people who know programming already](https://learnxinyminutes.com/docs/python3/) -- [Swaroopch's free Python book](http://python.swaroopch.com/) -- [Codeabbey, exercises for beginners](http://www.codeabbey.com/) - -## Credits - -First of all, we would like to thank [Rapptz](https://github.com/Rapptz) for the original [discord.py](https://pypi.org/project/discord.py) library. Pycord is a maintained fork of this library. - -We would also like to thank the [discord.js guide](https://discordjs.guide), which inspired this guide style-wise, and the [original Pycord Guide](https://namantech.me/pycord), which inspired some content in this guide. - -We created this guide using [Docusaurus v2](https://docusaurus.io), a modern static site generator for React. We would also like to thank Danktuary for his [`@discord-message-components/react`](https://www.npmjs.com/package/@discord-message-components/react) package, from which we took the Discord message components. - -And finally, we would like to thank the amazing and loving community of Pycord users, contributors and developers. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/more/_category_.json b/i18n/fr/docusaurus-plugin-content-docs/current/more/_category_.json deleted file mode 100644 index 2cbe2c56..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/more/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 8, - "label": "More", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/more/community-resources.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/more/community-resources.mdx deleted file mode 100644 index ed3075bd..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/more/community-resources.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Community Resources ---- - -This page showcases the amazing things created by the Pycord community, including bots, Plugins, and more. - -## Plugins - -| Name | Type | GitHub | -| --------------- | ------------ | --------------------------------------------------------------- | -| Music Cord | Music | [NixonXC/cord-music](https://github.com/NixonXC/cord-music) | -| pycord-i18n | Localization | [Dorukyum-pycord-i18n](https://github.com/Dorukyum/pycord-i18n) | -| pycord-multicog | Cogs | [pycord-multicog](https://github.com/Dorukyum/pycord-multicog) | -| EzCord | Utilities | [EzCord](https://github.com/tibue99/ezcord) | - -## Bots - -| Name | Type | Link | -| ------------------------ | ------------ | ----------------------------------------------------------------------------------- | -| Discord-Multipurpose-Bot | Multipurpose | [github](https://github.com/pogrammar/Discord-multipurpose-bot/tree/master/Python) | -| inconnu | Fun & QOL | [github](https://github.com/tiltowait/inconnu) | -| Mai | Multipurpose | [github](https://github.com/TeamMai/Mai) & [website](https://xfghoul.github.io/Mai) | -| Toolkit | Multipurpose | [github](https://github.com/Dorukyum/Toolkit) | diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/more/contributing.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/more/contributing.mdx deleted file mode 100644 index 8fdf31af..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/more/contributing.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: Contributing to the Guide -description: Learn how to contribute to the Pycord Guide. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -This page outlines some of the basic syntax you need to know to contribute to the guide. We recommend you also check out: - -- [Docusaurus's Docs](https://docusaurus.io/docs/) -- [Contributing Rules](https://github.com/Pycord-Development/guide/blob/master/.github/CONTRIBUTING.md) - -## Info - -We use [Docusaurus v2](https://docusaurus.io/) to generate our guide. All the guide pages are generated -from `mdx` files in the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory. -MDX allows you to use JSX in your markdown content. - -## Structure - -Let's visit the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory and check its file structure. - -We can see various folders and a few files in it. Let's talk a bit about the `introduction.mdx` file. At the top, you can see something like: - -```md ---- -title: Introduction -description: ... -sidebar_position: 1 ---- -``` - -Most pages have this at the top. The `title` defaults to the file name. Since the titles need to be Capitalized according to need while the file names are lowercased (sometimes, the file names are shorter than the title!), we set a title ourselves. - -The `description` field is also important. This is the text shown in an embed when the page's link is shared on Discord, Twitter or other websites that support embedded links. Make sure to give a nice an interesting description! - -The `sidebar_position` field is pretty self-explanatory. It sets the position of the page in the sidebar. Most files in categories do not need this since they are sorted alphabetically. - -## Markdown Syntax - -This page quickly outlines some of the syntax that is used in markdown. - -````mdx -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - - ```python - print("We can use code blocks like this.") - ``` - -You can add [links to other websites](https://pycord.dev). You can add images like this: ![alternate text that describes the image](https://pycord.dev/image.png). - -- You can create -- unordered lists like this - -1. Or ordered lists -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` -4. Like this - -# Headers - -## Go - -### Like - -#### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet -```` - -
-Preview -
- -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - -```python -print("We can use code blocks like this.") -``` - -You can add [links to other websites](https://pycord.dev). You can add images by adding ![alt text](@site/static/img/favicon.ico). - -- You can create -- unordered lists like this - -1. Or ordered lists - -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` - -4. Like this - - # Headers - - ## Go - - ### Like - - #### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet - -
-
- -## Admonitions - -We can add warnings, notes, etc. with the following syntax: - -```md -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: -``` - -
-Preview -
- -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: - -
- -
- -## Discord Message Components - -As most files already have the imports for these, it's not that hard to add them. - -First, import the necessary components: - -```tsx -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; -``` - -The div starts like so: - -```tsx - - - - -
-``` - -This is where you list a `DiscordMessage`. - -```tsx - - - Hello! - - - -
-``` - - - - Hello! - - - -
- -It has a pretty straightforward syntax. - -:::tip - -Add a `
` to the end of a component to make the content below it look better. - -::: - -### Slash Commands - -To make a message authored by a slash command, do the following: - -```tsx - - -
- - update - -
- Updated dependencies to the latest version! -
-
-``` - - - -
- - update - -
- Updated dependencies to the latest version! -
-
- -### Buttons - -To make a message with buttons, do the following: - -```tsx - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
-``` - - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
- -## Page Format - -There are a few things you need to take care of: - -1. Make sure that the spelling and grammar is perfect. We have a GitHub action configured that will warn you about spelling errors when you start a pull request. Make sure to commit your changes accordingly. - - As for the grammar, you should try reading the changes you have done and wait for reviews from others. - -2. A common mistake people make is incorrect header style. People often think that the less the important the topic is, the lower it's heading style should be. - - ```md - [PAGE STARTS] - # Topic - ## Less Important Topic - ## Subtopic - ``` - - ```md - [PAGE STARTS] - # About - [Introduction] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - That's VERY wrong. Here's the correct example: - - ```md - [PAGE STARTS] - [Introduction] - ## Topic - ## Less Important Topic - ### Subtopic - ``` - - ```md - [PAGE STARTS] - [Introduction] - - ## About - [More Information] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - Note that the `---`s at the beginning have been skipped here. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/more/git.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/more/git.mdx deleted file mode 100644 index 0f929d6d..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/more/git.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Installing Git -description: Learn how you can install Git on your system. ---- - -Git is software for tracking changes in any set of files (also known as a "version control" software), usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems). - -Let's see how to install Git on different platforms. - -## Windows - -On Windows, Git can be installed via: - -- [Git for Windows](https://gitforwindows.org) -- [Git Scm](https://git-scm.com/download/windows) - -## Linux - -On Linux, Git is probably already installed in your distribution's repository. If not, you can install it via [Git for Linux](https://git-scm.com/download/linux). You can also install it via the built-in package manager on your Linux distro. - -## Mac - -You can install Git for your macOS computer via [Git for Mac](https://git-scm.com/download/mac). Alternatively, it can be also be installed from the Xcode Command Line Tools by installing Xcode from the App Store, or by running this: - -``` -xcode-select --install -``` - -## Using Package Managers - -You can also install Git using package managers. - -### Chocolatey - -If you use the Chocolatey package manager, you can install Git using: - -``` -choco install git -``` - -### Scoop - -If you use Scoop, you can install Git using: - -``` -scoop install git -``` - -### Brew - -If you're on macOS or Linux, you can install Git using: - -``` -brew install git -``` diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx deleted file mode 100644 index b0b8c7ea..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Virtual Environments -description: Learn how to set up a virtual environment for Pycord. ---- - -## Setup - -Sometimes you want to keep libraries from polluting system installs or use a different version of libraries than the ones installed on the system. You might also not have permissions to install libraries system-wide. For this purpose, the standard library as of Python 3.3 comes with a concept called “Virtual Environment”s to help maintain these separate versions. - -A more in-depth tutorial is found on [Virtual Environments and Packages](https://docs.python.org/3/tutorial/venv.html). - -However, for the quick and dirty: - -Go to your project’s working directory: - -```bash -$ cd your-bot-source -$ python3 -m venv venv -``` - -Activate the virtual environment: - -```bash -$ source venv/bin/activate -``` - -On Windows you activate it with: - -```batch -$ venv\Scripts\activate.bat -``` - -Use pip like usual: - -```bash -$ pip install -U py-cord -``` - -Congratulations. You now have a virtual environment all set up. - -## Additional info - -It can be useful to set up a requirements.txt, so you can just put all of your dependencies in there and have pip install it. -For instance, if you wanted to have the latest 2.0 version of pycord and [pytz](https://github.com/stub42/pytz/blob/master/src/README.rst), just create a file named requirements.txt with the following contents: - -``` -py-cord>=2.0.0 -pytz -``` - -And then (in your virtual environment) you can just execute - -```bash -pip install -r requirements.txt -``` - -To keep from committing your virtual environment to git, you can set up a .gitignore file with the following line -(assuming you named your virtual environment venv like the above example): - -``` -venv/ -``` diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/_category_.json b/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/_category_.json deleted file mode 100644 index c38ea014..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 7, - "label": "Popular Topics", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx deleted file mode 100644 index 5377a6c3..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Cogs ---- - -Cogs, often known as modules or extensions, are used to organize commands into groups. This is useful -for grouping commands that have the same general idea (such as moderation commands). This also helps -to avoid making your bot's files messy and cluttered. - -## Getting Started - -First, you'll need to create a folder to store your cogs, e.g. `cogs/`. - -Then, create a file inside the folder, e.g. `cogs/greetings.py`. By convention, the file name should -be the same as the name of the cog or module. - -We can then create the cog. - -```python title="./cogs/greetings.py" -import discord -from discord.ext import commands - -class Greetings(commands.Cog): # create a class for our cog that inherits from commands.Cog - # this class is used to create a cog, which is a module that can be added to the bot - - def __init__(self, bot): # this is a special method that is called when the cog is loaded - self.bot = bot - - @commands.command() # creates a prefixed command - async def hello(self, ctx): # all methods now must have both self and ctx parameters - await ctx.send('Hello!') - - @discord.slash_command() # we can also add application commands - async def goodbye(self, ctx): - await ctx.respond('Goodbye!') - - @discord.user_command() - async def greet(self, ctx, member: discord.Member): - await ctx.respond(f'{ctx.author.mention} says hello to {member.mention}!') - - math = discord.SlashCommandGroup("math", "Spooky math stuff") # create a Slash Command Group called "math" - advanced_math = math.create_subgroup( - "advanced", - "super hard math commands!" - ) - - @math.command() - async def add(self, a: int, b: int): - c = a + b - await ctx.respond(f"{a} + {b} is {c}.") - - @advanced_math.command() - async def midpoint(self, x1: float, y1: float, x2: float, y2: float): - mid_x = (x1 + x2)/2 - mid_y = (y1 + y2)/2 - await ctx.respond(f"The midpoint between those coordinates is ({mid_x}, {mid_y}).") - - @commands.Cog.listener() # we can add event listeners to our cog - async def on_member_join(self, member): # this is called when a member joins the server - # you must enable the proper intents - # to access this event. - # See the Popular-Topics/Intents page for more info - await member.send('Welcome to the server!') - -def setup(bot): # this is called by Pycord to setup the cog - bot.add_cog(Greetings(bot)) # add the cog to the bot -``` - -You can add any number of commands to your cog, as well as event listeners. However, this code will -not work on its own. In your main bot file, you must add the following code: - -```python -bot.load_extension('cogs.greetings') -``` - -This loads the file `cogs/greetings.py` and adds it to the bot. -The argument of `load_extension` should be your cog's path (e.g. cogs/greetings.py) without the file -extension and with the `/` replaced with `.` - -If you have multiple cogs, you can add them all at once by adding the following code: - -```python -cogs_list = [ - 'greetings', - 'moderation', - 'fun', - 'owner' -] - -for cog in cogs_list: - bot.load_extension(f'cogs.{cog}') -``` - -## Cog Rules - -When using a cog instead of the main file, there are some changes you have to make to your code. This -is because cogs work slightly different from a regular file. - -### The `self` variable - -The self variable is a variable that represents a class. In the case of cogs, `self` represents -the cog. In the `__init__` function, you can see that we have `self.bot = bot`. `bot` represents your -`discord.Bot` or `discord.ext.commands.Bot` instance, which is used for some functions. - -This means that instead of using functions that would usually be accessed via `bot`, you now need -to access them via `self.bot` - -Because we're in a class, all of our commands are methods of that class. Because of this, all of our -functions need to have `self` as the first parameter, where `self` is the cog. Without this, we -wouldn't be able to access our bot instance. - -### Creating Commands - -When creating prefixed commands, your decorator would usually be something like `@bot.command()`. If you're using -cogs, this isn't the case. In a cog, you can't access the bot instance outside of functions, so to -register a function as a command, you must instead use `@commands.command()`. - -Similar to prefixed commands, you'll have to use either the `@discord.slash_command()`, `@discord.user_command()`, -or `@discord.message_command()` decorators for Application Commands. - -Also, when creating a command, make sure that it is indented. If we want a command to be actually -inside a cog, it has to be inside your cog's class. If the command is not inside the cog, -your command becomes useless. - -### Events - -When creating events, you can no longer use `@bot.event` as a decorator. This is because we cannot -access the `bot` variable outside a function. To make an event, you have to use the `ext.commands` -method, `@commands.Cog.listener()`. Events also need `self` as their first parameter. - -And that's it! Cogs are a simple and easy way of organizing your code. Now you can check out how to -create a help command [here](../extensions/commands/help-command). - -:::info Related Topics - -- [Creating a Help Command](../extensions/commands/help-command) -- [Rules and Common Practices](../getting-started/rules-and-common-practices) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Application Commands](../interactions#application-commands) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx deleted file mode 100644 index 3599cc82..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx +++ /dev/null @@ -1,383 +0,0 @@ ---- -title: Error Handling -description: All about handling errors. ---- - -import { - DiscordEmbed, - DiscordInteraction, - DiscordMessage, -} from "@pycord/discord-message-components-react"; -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -## About - -When using the library, errors are frequently raised due to various reasons. These reasons range from the Discord API -failing your bot's request due to missing permissions or an invalid syntax error. - -Before going into error handling, it's best that you learn the basic ways of handling errors. A good resource is: - -- [W3Schools' Guide to Python Try-Except Statements](https://www.w3schools.com/python/python_try_except.asp) - -## Basic Handling - -The most basic way to handle errors is to tackle it at the source. This can be done like so: - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -import asyncio - -import discord - -intents = discord.Intents.default() -intents.message_content = True - -bot = discord.Bot(intents=intents) - - -@bot.slash_command(description="Gets some feedback.") -@discord.option("name", description="Enter your name.") -async def feedback(ctx: discord.ApplicationContext, name: str): - try: - await ctx.respond(f"Hey, {name}! Send your feedback within the next 30 seconds please!") - - def is_author(m: discord.Message): - return m.author.id == ctx.author.id - - feedback_message = await bot.wait_for("message", check=is_author, timeout=30.0) - await ctx.send(f"Thanks for the feedback!\nReceived feedback: `{feedback_message.content}`") - except asyncio.TimeoutError: - await ctx.send("Timed out, please try again!") - - -bot.run("TOKEN") -``` - -If you respond within 30 seconds, the interaction will look like so: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Great bot! - - - Thanks for the feedback! -
- Received feedback: Great bot! -
-
-
- -Otherwise, if you don't respond in time, the interaction will go as follows: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Timed out, please try again! - -
-
- -This basic method of error handling can be extended to handle -many other errors including ones raised directly by py-cord. - -## Per-Command Handling - -This type of error handling allows you to handle errors per each command you have on your bot. -Each and every command can have it's own error handler made to handle specific errors that each command may raise! - -An example of per-command error handling is as follows: - -:::note Bridge Commands - -For these types of commands, it is recommended to utilize global error handling -until [the feature](https://github.com/Pycord-Development/pycord/issues/1388) is added. -::: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot(owner_id=...) # Your Discord user ID goes in owner_id - - -@bot.slash_command(description="A private command...") -@commands.is_owner() # This decorator will raise commands.NotOwner if the invoking user doesn't have the owner_id -async def secret(ctx: discord.ApplicationContext): - await ctx.respond(f"Hey {ctx.author.name}! This is a secret command!") - - -@secret.error -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.NotOwner): - await ctx.respond("Sorry, only the bot owner can use this command!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If your ID is registered as the owner ID, you'll get the following: - - - -
- - secret - -
- Hey Dorukyum! This is a secret command! -
-
-
- -Any other user whose ID doesn't match the bot owner's will get the following: - - - -
- - secret - -
- Sorry, only the bot owner can use this command! -
-
-
- -This local (per-command) error handler can also be used to handle the same types of errors that standard try-except -statements can handle. This is done by using the same method as above with the `isinstance` built-in function. - -## Per-Cog Handling - -Adding error handlers per-command can be quite the task in terms of work if you have a lot. If you have happened to -group your commands in cogs, then you're in luck! You can create an error handler that is specific to a cog and -handles all errors raised by commands inside that cog. - -Here's an example of a bot with a cog that implements its own error handling: - -```python title="./cogs/dm.py" -# This cog is for DM only commands! Sadly, we only have 1 command here right now... - -import discord -from discord.ext import commands - - -class DM(commands.Cog): - def __init__(self, bot: commands.Bot): - self.bot = bot - - @commands.command() - @commands.dm_only() # This decorator will raise commands.PrivateMessageOnly if invoked in a guild context. - async def avatar(self, ctx: commands.Context): - embed = discord.Embed( - title="Avatar", - description=f"Here's your enlarged avatar, {ctx.author.name}!", - color=ctx.author.top_role.color - ) - embed.set_image(url=ctx.author.display_avatar.url) - await ctx.send(embed=embed, reference=ctx.message) - - async def cog_command_error(self, ctx: commands.Context, error: commands.CommandError): - if isinstance(error, commands.PrivateMessageOnly): - await ctx.send("Sorry, you can only use this in private messages!", reference=ctx.message) - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -def setup(bot: commands.Bot): - bot.add_cog(DM(bot)) -``` - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -# This is the main file where we load the DM cog and run the bot. - -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix=commands.when_mentioned_or("!")) -bot.load_extension("cogs.dm") -bot.run("TOKEN") -``` - -If you use this command in a DM context, you'll get the following: - - - - !avatar - - -
- - !avatar - -
- - Here's your enlarged avatar, BobDotCom! - -
-
-
- -Otherwise, if used in a guild context: - - - - !avatar - - -
- - !avatar - -
- Sorry, you can only use this in private messages! -
-
-
- -Per-cog error handling comes in very handy as you can relegate all of your error handling to a single function instead -of spreading it out across several per-command error handlers or inside the commands themselves. - -## Global Handling - -If separating your error handling is not how you would like to handle errors, then global error handling is the way to -go. This method of handling allows you to relegate all handling to a single function that resides within your bot -instance. - -A non-subclassed bot would implement this like so: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot() - - -@bot.slash_command(description="Get the bot's current latency!") -@commands.cooldown(1, 30, commands.BucketType.user) -# ^ This decorator allows one usage of the command every 30 seconds and raises commands.CommandOnCooldown if exceeded -async def ping(ctx: discord.ApplicationContext): - await ctx.respond(f"Pong! `{int(bot.latency*1000)} ms`.") - - -@bot.event -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.CommandOnCooldown): - await ctx.respond("This command is currently on cooldown!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If you've subclassed your bot, the `on_application_command_error` event will be placed inside the subclass without a -`bot.event` decorator and `bot.slash_command` will be replaced with `discord.slash_command`. - -The error handling used above will yield this interaction if the command is used again too quickly: - - - -
- - ping - -
- Pong! 49 ms. -
- -
- - ping - -
- This command is currently on cooldown! -
-
-
- -The only issue regarding global error handling is that, if you have a large amount of commands, the global handler may -start to get crammed with a lot of code. This is where all the previously mentioned handlers can take their place! - -## FAQ - -#### Why does the example in per-cog handling have self at the start of its function signatures? - -This is a feature of classes and allows you to reference the cog object as `self` and get access to the bot object -passed at initialization through `self.bot`. - -If this is new to you, we recommend checking out these helpful resources to learn more about classes and cogs: - -- [W3Schools' Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [Our Cogs Guide Page](./cogs) - -#### How many errors can I handle in a single error handler? - -While all the examples in this guide page only handle one specific error and re-raise all others, all of these -error handlers can be extended to catch many errors. - -In [basic handling](#basic) (i.e. try/except statements) you can do one of two things: - -- Explicitly handle the errors you know might get raised and then have a broad `except Exception as exc:` statement - as a catch-all. -- Catch any and all errors via the catch-all statement mentioned above. - -In [per-command](#percommand), [per-cog](#percog), and [global handling](#global), you can use elif clauses with the -built-in isinstance function to catch specific errors. Atop of this, an else clause can be used to catch any other -errors you either don't want to handle or want to relegate to a different error handler. - -#### Can I use more than one type of error handler at once? - -Thankfully, all of these different ways of error handling can be mixed together, so you don't have to pick just one! -For commands that raise specific errors that no other commands will raise, you can use [per-command](#percommand). -For cogs that raise specific errors that no other cogs will raise, use [per-cog](#percog)! Lastly, for errors that -occur frequently across all commands and cogs, use [global handling](#global)! - -However, one important note to remember is that you should always raise the error again in an error handler if it -isn't handled there! If you don't do this, the error will go ignored and your other handlers won't have a chance to -do their work! - -#### What's the difference between slash and prefixed command error handling? - -Although most examples shown here use slash commands, the [per-cog handling](#percog) section presents a prefixed -command. The main difference you may notice is the change in command signature. - -To make the distinguishing features apparent: - -- Slash commands use `on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException)` - as presented in the [per-command](#percommand) and [global handling](#global) examples. -- Prefixed commands use `on_command_error(ctx: commands.Context, error: commands.CommandError)` as presented in the - [per-cog handling](#percog) example. - -This distinction is made as both types of commands need their own system for handling errors that are specific to -themselves. - -:::info Related Topics - -- [Slash Commands](../interactions/application-commands/slash-commands) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Cogs](./cogs) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx deleted file mode 100644 index 9f4210af..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Intents -description: All about intents in Discord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## What are Intents? - -Intents allow bot developers to "subscribe" to specific events in Discord. This is useful for bots that need to respond to specific events, such as when a user joins a server or sends a message. You could choose to enable all intents or to enable only specific intents that your bot requires. - -## How do I enable intents? - -:::important - -Remember that [Privileged Intents](#what-are-privileged-intents) require you to enable them in the Discord Developer Portal. Verified Discord Bots that don't already have access to them will need to request Discord to allow access. - -::: - - - - -```python -import discord - -bot = discord.Bot(intents=discord.Intents.all()) -``` - - - - - -You can view a list of intents and the events they subscribe to [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```python title="Enabling Intents" -import discord - -bot = discord.Bot(intents=discord.intents.members(bans=True, guilds=True)) -``` - - - - -## What are Privileged Intents? - -Discord defines some intents as "privileged" because of the sensitive information they contain. Currently, there are three privileged intents: `members`, `presences`, and `message_content`. These intents must be enabled in your bot's Developer Portal. Once your bot reaches 100 servers, you will need to verify your bot for these intents to keep working and for your bot to be able to be invited to more guilds. - -:::tip - -Only enable these intents if you need them. These intents give your bot access to quite sensitive information about the users in your guild. These intents are privileged to respect the privacy of users, and you should do that as well. - -Not enabling these intents doesn't mean you won't be able to ban users, but you will be unable to detect when a new user joins a guild, or what game they are playing. The majority of bots won't need all intents. - -::: - -:::info Related Topics - -- [Sharding Bots](sharding) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx deleted file mode 100644 index c3d17197..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Sharding -description: All about Sharding Discord Bots. ---- - -# Sharding - -## What is Sharding? - -Sharding is the process of breaking up your bot into smaller pieces so that it has a better time handling -events. As [Discord's Documentation](https://discord.com/developers/docs/topics/gateway#sharding) puts -it, sharding is "a method of user-controlled guild sharding which allows for splitting events across -several gateway connections." - -Sharding is used only for large bots and takes up additional resources for managing the new processes. -Pycord automatically shards your bot, so the only thing you need to do is use an `AutoShardedClient` -or `AutoShardedBot` class instead of a plain `Client` or `Bot` class. Pretty cool, right? - -Just because you _can_ shard your bot doesn't mean you _should_. While Pycord makes it easy to shard -your bot, it isn't necessary to shard unless your bot is large. Sharding a small bot isn't -just useless, but _harmful_, as it uses extra resources and may slow down your bot. Discord -themselves will let you know when your bot needs sharding, so you won't need to worry about this until they contact you. - -## How Do I Shard in Pycord? - -Sharding in Pycord is straightforward. - -Just replace your `discord.Client`, `discord.Bot`, `commands.Bot` objects -with `discord.AutoShardedClient`, `discord.AutoShardedBot`, `commands.AutoShardedBot` respectively. - -These new objects have been inherited from the original objects, so all the functions from those other types should be present. - -If you want to specify the number of shards your bot uses, -just add the `shards` parameter, along with the number of shards you want. - -## Why Should I Shard my Bot? - -Sharding is very necessary for big bots. While your bot grows, it gets harder for your bot to control -how many guilds it is in and what parts of your code should do what. This is exactly what sharding -handles, it makes all of this easier for your bot. Remember, though, only shard your bot once it's -big enough, and that's at _least_ 1,000 guilds. - -:::info Related Topics - -- [Hosting your Bot](../Getting-Started/hosting-your-bot) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx deleted file mode 100644 index bd2969c1..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Subclassing Bots -description: Subclassing is a popular way of creating Discord Bots. Explore how you can create a Discord bot by subclassing. ---- - -## About - -Subclassing is another popular way of creating Discord Bots. Here, you create a bot by extending a bot class. To some advanced users, this is preferable to creating a bot instance with `bot = discord.Bot()`. - -Subclassing is an intermediate python concept, so we recommend you learn about it before continuing. Some good resources are: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -## Why Subclassing? - -Many developers prefer to subclass their bots for many reasons, some of them being: - -#### Skeletal Frameworks for Bots - -Developers often share their bots code on open-source platforms, mostly GitHub, and allow users to self-host the bot (running their own instance of the bot with the code provided by the developer. Permissions vary in accordance to licences). Here, users find it easier and more convenient to have a small file that imports the custom bot class and runs it, rather than having to go through the code of the bot and find out which file to run. This makes it easier for people not familiar with programming to run and customize the bot, since it often brings down the code to: - -```python title="./main.py" -from src import Bot - -bot = Bot() - -bot.run("TOKEN") -``` - -Here, all the commands are inside the `/src` folder that the user need not bother with. - -#### Running Multiple Instances - -Some developers may need to run multiple instances of their bot (perhaps on different bot accounts). For example, a developer might have a second bot for testing alpha features. This system makes it simpler for the developer, and allows them to maintain multiple versions of the bot in the same directory: - -```python title="./alpha_bot.py" -from src import Bot - -class AlphaBot(Bot): # subclasses Bot - ... # insert any custom configuration - -bot = AlphaBot() - -@bot.slash_command() # adds a new slash command to this subclassed bot -async def alpha_feature(ctx): - await ctx.respond("Alpha Feature!") - -bot.run("TOKEN") -``` - -There are many more reasons to subclass! It's not required, and won't affect the speed of the bot, but it may affect your development process, for the good or for the worse. You don't miss out on any features when you subclass, either. Some developers want the OOP feel, while some just prefer that method and find it easier. - -## Basic Example - -```python -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override the on_ready event - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') - -bot = MyBot() - -@bot.slash_command() # create a slash command -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run('token') -``` - -As you can see, instead of creating a bot object with `bot = discord.Bot()`, we subclass [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). We then create an instance of our new bot class and run it. Notice how we don't need to use the `@event` decorator. - -Here's another example: - -```python title="./src/bot.py" -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override on_ready - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') -``` - -```python title="./src/\_\_init\_\_.py" -from .bot import MyBot # import the MyBot class from the bot.py file -``` - -```python title="./main.py" -from src import MyBot # import MyBot from /src - -bot = MyBot() # create an instance of MyBot - -@bot.slash_command() -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run("TOKEN") # run the bot -``` - -These are just two ways you could do it. There are ton of other structures you can implement. It's up to you. - -So, should you subclass? There are no limitations you face if you decide to subclass your bot, but, once again, it's up to you. - -:::info Related Topics - -- [Making a Help Command](../Extensions/Commands/help-command) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx deleted file mode 100644 index 23220b0e..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Threads -description: Threads with Pycord ---- - -In programming, threads are a way to run multiple processes at the same time. In Discord, threads are -a way to keep multiple conversations going at the same time. Let's take a brief look at how to use threads in Pycord. - -:::tip - -Not all the methods and attributes will be covered in this guide, but you can find them in our documentation! -[Check it out!](https://docs.pycord.dev/en/stable/api/models.html#discord.Thread) - -::: - -## Creating a thread - -With a few simple lines of code, we can create threads in Pycord. - -:::important - -All public threads need a starting message. This message will start the thread. However, private threads -(which are unlocked with having your server boosted to Level 2), do not require a starting message. - -::: - -### Creating thread from a message - -```python title="Creating a Thread from a Message" -message = await ctx.send("My Starting Message") -await message.create_thread(name="thread name", auto_archive_duration=60) -``` - -You may also use other ways to create the thread, for example, by using `on_message` events or by commands. - -### Creating thread in a channel - -```python title="Creating a Thread from a Channel" -channel = bot.get_channel(...) # define this! -await channel.create_thread(name="Thread Name", message=None, auto_archive_duration=60, type=None, reason=None) -``` - -A thread type could be `news_thread`, `public_thread`, `private_thread`. You may use it by passing `type=discord.ChannelType.news_thread`. - -## Deleting Threads - -Deleting Threads is simple. You need to get a thread and then use the `delete` method. - -```python title="Deleting a Thread" -thread = bot.get_channel(thread_id) # you could use other ways to get a thread -await thread.delete() -``` - -## Editing Threads - -**Parameters** - -- `name` (str) – The new name of the thread - -- `archived` (bool) – Whether to archive the thread or not. - -- `locked` (bool) – Whether to lock the thread or not. - -- `invitable` (bool) – Whether non-moderators can add other non-moderators to this thread. Only available for private threads. - -- `auto_archive_duration` (int) – The new duration in minutes before a thread gets automatically archived for inactivity. Must be one of 60, 1440, 4320, or 10080. - -- `slowmode_delay` (int) – Specifies the slow-mode rate limit for users in the thread, in seconds. A value of 0 disables slow-mode. The maximum value possible is 21600. - -```python title="Editing a Thread" -thread = bot.get_channel(id) -await thread.edit( - name="New Name", - archived=True, - locked=True, - slowmode_delay=10, - auto_archive_duration=60, -) -``` - -As you can see, threads are very simple. Once you learn how to use them, it's easy to create whatever you want. - -## FAQ - -### Why am I getting a `Forbidden` error when I try to create a thread? - -A `Forbidden` error occurs when the bot does not have the correct permissions to create threads. - -### Why am I getting an Unknown Message error when I try to create a thread? - -Getting an error looking something like `discord.ext.commands.errors.CommandInvokeError: Command -raised an exception: HTTPException: 400 Bad Request (error code: 10008): Unknown Message`? - -There could be multiple reasons, some of them being: - -- The message does not exist -- The message already has a thread -- The message is in channel x, you are trying to start a thread in channel y. -- The message was deleted. - -:::info Related Topics - -<>{/* I can't think of any related topics for this at the moment. */} - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/voice/_category_.json b/i18n/fr/docusaurus-plugin-content-docs/current/voice/_category_.json deleted file mode 100644 index 8baf3da8..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/voice/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 6, - "label": "Voice" -} \ No newline at end of file diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/voice/index.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/voice/index.mdx deleted file mode 100644 index 835838c6..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/voice/index.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Voice ---- - -Welcome to the guide for voice features in Pycord. - -:::caution -This guide requires previous experience with Pycord and Python. -::: - -## Requirements - -The only requirement which is required for voice features is [`PyNaCl`](https://pypi.org/project/PyNaCl/). -The following features are optional: - -:::tip -Opus is also a required library, but this comes with Pycord. -Some hosts may not come with it, though, so remember to always check if required dependencies are installed. -::: - -- [`FFmpeg`](https://ffmpeg.org) - used for sending/receiving files other than `.pcm` and `.wav` -- [`Pycord.Wavelink`](https://github.com/Pycord-Development/Pycord.Wavelink), - [`Lavalink.py`](https://github.com/Devoxin/Lavalink.py), - [`Wavelink`](https://github.com/PythonistaGuild/Wavelink) or any other Python LavaLink library for music playback. diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/voice/playing.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/voice/playing.mdx deleted file mode 100644 index 7a58baee..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/voice/playing.mdx +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Wavelink Audio Player ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { - defaultOptions, -} from "@site/src/components/DiscordComponent"; - -# About - -Pycord and Wavelink try to keep the playing of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio playing feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/). - -## Starting out - -First you need to run a [Lavalink Server](https://github.com/freyacodes/Lavalink) to connect with. -There a multiple documentations to do this, so we are not covering that here. - -You also need to install the [wavelink](https://github.com/PythonistaGuild/Wavelink) library. - -```py title="Installing wavelink" -python3 -m pip install wavelink -``` - -You will now want to connect to your server via a node. - -```py title="Connect Node with Lavalink" -import discord -import wavelink - -bot = discord.Bot() - -async def connect_nodes(): - """Connect to our Lavalink nodes.""" - await bot.wait_until_ready() # wait until the bot is ready - - nodes = [ - wavelink.Node( - identifier="Node1", # This identifier must be unique for all the nodes you are going to use - uri="http://0.0.0.0:443", # Protocol (http/s) is required, port must be 443 as it is the one lavalink uses - password="youshallnotpass" - ) - ] - - await wavelink.Pool.connect(nodes=nodes, client=bot) # Connect our nodes -``` - -
- -Now you are finished making your node! Next, you will want to: - -1. Making a play command -2. Adding connect events - -### Making a play command - -To make a play command, you will need to make a function to connect and play audio in a voice channel. - -```py title="Play Command Example" -import typing - -@bot.slash_command(name="play") -async def play(ctx, search: str): - # First we may define our voice client, - # for this, we are going to use typing.cast() - # function just for the type checker know that - # `ctx.voice_client` is going to be from type - # `wavelink.Player` - vc = typing.cast(wavelink.Player, ctx.voice_client) - - if not vc: # We firstly check if there is a voice client - vc = await ctx.author.voice.channel.connect(cls=wavelink.Player) # If there isn't, we connect it to the channel - - # Now we are going to check if the invoker of the command - # is in the same voice channel than the voice client, when defined. - # If not, we return an error message. - if ctx.author.voice.channel.id != vc.channel.id: - return await ctx.respond("You must be in the same voice channel as the bot.") - - # Now we search for the song. You can optionally - # pass the "source" keyword, of type "wavelink.TrackSource" - song = await wavelink.Playable.search(search) - - if not song: # In case the song is not found - return await ctx.respond("No song found.") # we return an error message - - await vc.play(song) # Else, we play it - await ctx.respond(f"Now playing: `{song.title}`") # and return a success message -``` - - - -
- - play - -
- Now playing: Never Gonna Give You Up -
-
- -
- -Now that you've done this, the only thing left to do is make your connect events. - -### Adding connect events - -The final step to this guide is connecting the node to your server when the bot goes online. - -To make it, you will want to do the following: - -```py title="Adding connect events" -@bot.event -async def on_ready(): - await connect_nodes() # connect to the server - -@bot.event -async def on_wavelink_node_ready(payload: wavelink.NodeReadyEventPayload): - # Everytime a node is successfully connected, we - # will print a message letting it know. - print(f"Node with ID {payload.session_id} has connected") - print(f"Resumed session: {payload.resumed}") - -bot.run("token") -``` - -Congratulations! You have now implemented voice playing into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/voice/receiving.mdx b/i18n/fr/docusaurus-plugin-content-docs/current/voice/receiving.mdx deleted file mode 100644 index 70f91507..00000000 --- a/i18n/fr/docusaurus-plugin-content-docs/current/voice/receiving.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Receiving Voice Samples ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -# About - -Pycord tries to keep the recording of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio recording feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/audio_recording.py). - -## Starting out - -The first thing you want to do is make a cache of your voice connections. This is fairly easy; as -it's just putting a variable with an empty dictionary in our code, such as `connections = {}`. - -You will now want to create your command for recording. - -```py title="Record Command Example" -import discord - -bot = discord.Bot() -connections = {} - -@bot.command() -async def record(ctx): # If you're using commands.Bot, this will also work. - voice = ctx.author.voice - - if not voice: - await ctx.respond("You aren't in a voice channel!") - - vc = await voice.channel.connect() # Connect to the voice channel the author is in. - connections.update({ctx.guild.id: vc}) # Updating the cache with the guild and channel. - - vc.start_recording( - discord.sinks.WaveSink(), # The sink type to use. - once_done, # What to do once done. - ctx.channel # The channel to disconnect from. - ) - await ctx.respond("Started recording!") -``` - - - -
- - record - -
- Started recording! -
-
- -
- -Now you are finished making your command for voice receiving! Next, you will want to: - -1. Make your finished callback -2. Make a stop command - -### Making a Callback - -To make a callback, you will want to define the currently undefined `once_done` function inside -our command, like so: - -```py title="Recorder Callback" -async def once_done(sink: discord.sinks, channel: discord.TextChannel, *args): # Our voice client already passes these in. - recorded_users = [ # A list of recorded users - f"<@{user_id}>" - for user_id, audio in sink.audio_data.items() - ] - await sink.vc.disconnect() # Disconnect from the voice channel. - files = [discord.File(audio.file, f"{user_id}.{sink.encoding}") for user_id, audio in sink.audio_data.items()] # List down the files. - await channel.send(f"finished recording audio for: {', '.join(recorded_users)}.", files=files) # Send a message with the accumulated files. -``` - - - - finished recording audio for:{" "} - {defaultOptions.profiles.bob.author} - - - -
- -Now that you've done this, the only thing left to do is make your stop command. - -### Making a Stop Command - -The final step to this guide is stopping the audio recording. This is the easiest step by far. - -To make it, you will want to do the following: - -```py title="Stop Recording Command" -@bot.command() -async def stop_recording(ctx): - if ctx.guild.id in connections: # Check if the guild is in the cache. - vc = connections[ctx.guild.id] - vc.stop_recording() # Stop recording, and call the callback (once_done). - del connections[ctx.guild.id] # Remove the guild from the cache. - await ctx.delete() # And delete. - else: - await ctx.respond("I am currently not recording here.") # Respond with this if we aren't recording. - -bot.run("token") -``` - -Congratulations! You have now implemented voice recording into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/fr/docusaurus-plugin-content-pagesindex.tsx b/i18n/fr/docusaurus-plugin-content-pagesindex.tsx deleted file mode 100644 index 6ca77bb2..00000000 --- a/i18n/fr/docusaurus-plugin-content-pagesindex.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import DefaultLayout from "@site/src/layouts/DefaultLayout"; -import PYCHero from "@site/src/components/PYCHero"; -import PYCButton from "@site/src/components/PYCButton"; - -export default function Home(): JSX.Element { - return ( - - -
- Imagine a place where you can learn how to create an awesome Discord - bot, equip it with Pycord, and have it running in less than a minute. - Imagine a place where you can learn everything about Pycord. Imagine a - guide. A Pycord Guide! -

- Whether you are a newbie or an experienced developer, you will find - everything you need to know about Pycord here. This guide will teach - you: -
    -
  • How to get a brand new bot running from scratch;
  • -
  • How to create Interactions, Context Menus and Commands;
  • -
  • In-depth concepts such as Embeds, Reactions, Help Commands, Paginators, etc;
  • -
  • Popular Topics such as working with Databases, Sharding, etc;
  • -
  • Ways to handle and manage common errors and best practices for bots;
  • -
  • And Much More!
  • -
-
-
- ); -} diff --git a/i18n/fr/docusaurus-theme-classic/footer.json b/i18n/fr/docusaurus-theme-classic/footer.json deleted file mode 100644 index 82aab2e0..00000000 --- a/i18n/fr/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "copyright": { - "message": "Copyright © 2022-2026 Pycord Development, All rights reserved.", - "description": "The footer copyright" - } -} diff --git a/i18n/fr/docusaurus-theme-classic/navbar.json b/i18n/fr/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 473b847e..00000000 --- a/i18n/fr/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "title": { - "message": "Pycord Guide", - "description": "The title in the navbar" - }, - "item.label.Home": { - "message": "Home", - "description": "Navbar item with label Home" - }, - "item.label.Docs": { - "message": "Docs", - "description": "Navbar item with label Docs" - }, - "item.label.GitHub": { - "message": "GitHub", - "description": "Navbar item with label GitHub" - }, - "item.label.Source": { - "message": "Source", - "description": "Navbar item with label Source" - } -} diff --git a/i18n/hi/code.json b/i18n/hi/code.json deleted file mode 100644 index 9cce6148..00000000 --- a/i18n/hi/code.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "theme.ErrorPageContent.title": { - "message": "This page crashed.", - "description": "The title of the fallback page when the page crashed" - }, - "theme.NotFound.title": { - "message": "Page Not Found", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "We could not find what you were looking for.", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.admonition.note": { - "message": "note", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "tip", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.danger": { - "message": "danger", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "info", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.caution": { - "message": "caution", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "Scroll back to top", - "description": "The ARIA label for the back to top button" - }, - "theme.blog.archive.title": { - "message": "Archive", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "Archive", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "Blog list page navigation", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "Newer Entries", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "Older Entries", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "Blog post page navigation", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "Newer Post", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "Older Post", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.blog.post.plurals": { - "message": "One post|{count} posts", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} tagged with \"{tagName}\"", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "View All Tags", - "description": "The label of the link targeting the tag list page" - }, - "theme.colorToggle.ariaLabel": { - "message": "Switch between dark and light mode (currently {mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "dark mode", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "light mode", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "Breadcrumbs", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription": { - "message": "{count} items", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "Docs pages", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "Previous", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "Next", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "One doc tagged|{count} docs tagged", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "{nDocsTagged} with \"{tagName}\"", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versionBadge.label": { - "message": "Version: {versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "latest version", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "Edit this page", - "description": "The link label to edit the current page" - }, - "theme.common.headingLinkTitle": { - "message": "Direct link to {heading}", - "description": "Title for link to heading" - }, - "theme.lastUpdated.atDate": { - "message": " on {date}", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": " by {user}", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "Last updated{atDate}{byUser}", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "Versions", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "Tags:", - "description": "The label alongside a tag list" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "Close", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "Blog recent posts navigation", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.copied": { - "message": "Copied", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "Copy code to clipboard", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "Copy", - "description": "The copy button label on code blocks" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "Toggle word wrap", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "Toggle the collapsible sidebar category '{label}'", - "description": "The ARIA label to toggle the collapsible sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "Main", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "Languages", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "On this page", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "Read More", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "Read more about {title}", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.blog.post.readingTime.plurals": { - "message": "One min read|{readingTime} min read", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.breadcrumbs.home": { - "message": "Home page", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "Docs sidebar", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "Close navigation bar", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← Back to main menu", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "Toggle navigation bar", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.SearchBar.seeAll": { - "message": "See all {count} results" - }, - "theme.SearchPage.documentsFound.plurals": { - "message": "One document found|{count} documents found", - "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.SearchPage.existingResultsTitle": { - "message": "Search results for \"{query}\"", - "description": "The search page title for non-empty query" - }, - "theme.SearchPage.emptyResultsTitle": { - "message": "Search the documentation", - "description": "The search page title for empty query" - }, - "theme.SearchPage.inputPlaceholder": { - "message": "Type your search here", - "description": "The placeholder for search page input" - }, - "theme.SearchPage.inputLabel": { - "message": "Search", - "description": "The ARIA label for search page input" - }, - "theme.SearchPage.algoliaLabel": { - "message": "Search by Algolia", - "description": "The ARIA label for Algolia mention" - }, - "theme.SearchPage.noResultsText": { - "message": "No results were found", - "description": "The paragraph for empty search result" - }, - "theme.SearchPage.fetchingNewResults": { - "message": "Fetching new results...", - "description": "The paragraph for fetching new search results" - }, - "theme.SearchBar.label": { - "message": "Search", - "description": "The ARIA label and placeholder for search button" - }, - "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "Clear the query", - "description": "The label and ARIA label for search box reset button" - }, - "theme.SearchModal.searchBox.cancelButtonText": { - "message": "Cancel", - "description": "The label and ARIA label for search box cancel button" - }, - "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "Recent", - "description": "The title for recent searches" - }, - "theme.SearchModal.startScreen.noRecentSearchesText": { - "message": "No recent searches", - "description": "The text when no recent searches" - }, - "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { - "message": "Save this search", - "description": "The label for save recent search button" - }, - "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "Remove this search from history", - "description": "The label for remove recent search button" - }, - "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "Favorite", - "description": "The title for favorite searches" - }, - "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "Remove this search from favorites", - "description": "The label for remove favorite search button" - }, - "theme.SearchModal.errorScreen.titleText": { - "message": "Unable to fetch results", - "description": "The title for error screen of search modal" - }, - "theme.SearchModal.errorScreen.helpText": { - "message": "You might want to check your network connection.", - "description": "The help text for error screen of search modal" - }, - "theme.SearchModal.footer.selectText": { - "message": "to select", - "description": "The explanatory text of the action for the enter key" - }, - "theme.SearchModal.footer.selectKeyAriaLabel": { - "message": "Enter key", - "description": "The ARIA label for the Enter key button that makes the selection" - }, - "theme.SearchModal.footer.navigateText": { - "message": "to navigate", - "description": "The explanatory text of the action for the Arrow up and Arrow down key" - }, - "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "Arrow up", - "description": "The ARIA label for the Arrow up key button that makes the navigation" - }, - "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "Arrow down", - "description": "The ARIA label for the Arrow down key button that makes the navigation" - }, - "theme.SearchModal.footer.closeText": { - "message": "to close", - "description": "The explanatory text of the action for Escape key" - }, - "theme.SearchModal.footer.closeKeyAriaLabel": { - "message": "Escape key", - "description": "The ARIA label for the Escape key button that close the modal" - }, - "theme.SearchModal.footer.searchByText": { - "message": "Search by", - "description": "The text explain that the search is making by Algolia" - }, - "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "No results for", - "description": "The text explains that there are no results for the following search" - }, - "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "Try searching for", - "description": "The text for the suggested query when no results are found for the following search" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "Believe this query should return results?", - "description": "The text for the question where the user thinks there are missing results" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "Let us know.", - "description": "The text for the link to report missing results" - }, - "theme.SearchModal.placeholder": { - "message": "Search docs", - "description": "The placeholder of the input of the DocSearch pop-up modal" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "Try again", - "description": "The label of the button to try again rendering when the React error boundary captures an error" - }, - "theme.common.skipToMainContent": { - "message": "Skip to main content", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "Tags", - "description": "The title of the tag list page" - } -} diff --git a/i18n/hi/docusaurus-plugin-content-blog/options.json b/i18n/hi/docusaurus-plugin-content-blog/options.json deleted file mode 100644 index 9239ff70..00000000 --- a/i18n/hi/docusaurus-plugin-content-blog/options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": { - "message": "Blog", - "description": "The title for the blog used in SEO" - }, - "description": { - "message": "Blog", - "description": "The description for the blog used in SEO" - }, - "sidebar.title": { - "message": "Recent posts", - "description": "The label for the left sidebar" - } -} diff --git a/i18n/hi/docusaurus-plugin-content-docs/current.json b/i18n/hi/docusaurus-plugin-content-docs/current.json deleted file mode 100644 index 36b4849a..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.defaultSidebar.category.Getting Started": { - "message": "Getting Started", - "description": "The label for category Getting Started in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Interactions": { - "message": "Interactions", - "description": "The label for category Interactions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Application Commands": { - "message": "Application Commands", - "description": "The label for category Application Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.UI Components": { - "message": "UI Components", - "description": "The label for category UI Components in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Extensions": { - "message": "Extensions", - "description": "The label for category Extensions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Commands": { - "message": "Commands", - "description": "The label for category Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Pages": { - "message": "Pages", - "description": "The label for category Pages in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Voice": { - "message": "Voice", - "description": "The label for category Voice in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Popular Topics": { - "message": "Popular Topics", - "description": "The label for category Popular Topics in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar defaultSidebar" - } -} diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png b/i18n/hi/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png deleted file mode 100644 index 7480e1da90a413f8dfe8e13b66a9a2a8c5dc2bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40520 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 CfS#QI diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg b/i18n/hi/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg deleted file mode 100644 index ce6b5110ab3b4285f55402fb88c1b8a8f6ba9900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78518 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 diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png b/i18n/hi/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png deleted file mode 100644 index 32a47d0424f1ab420ca363682a12460aff040c91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39618 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 aeS&BlM7jQ%=K2BnBlKRJKmVP^m;VLX8_o0p diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/_category_.json b/i18n/hi/docusaurus-plugin-content-docs/current/extensions/_category_.json deleted file mode 100644 index 309b494a..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 5, - "label": "Extensions", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json b/i18n/hi/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json deleted file mode 100644 index 652aa4ee..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Bridge" -} \ No newline at end of file diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx deleted file mode 100644 index 451775d3..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Bridge ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -## Concept - -Let's say that you want to make a command that is both a Slash Command and a Prefixed Command. Now, you could just copy and paste the code from the first command callback to the other and make some adjustments, but that's not very efficient. - -This is where the `ext.bridge` module comes in. It allows you to use one callback to make both a Slash Command and a Prefixed Command. - -### Example Usage - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def hello(ctx): - await ctx.respond("Hello!") - -bot.run("TOKEN") -``` - - - -

- - hello - -
- Hello! - - - - !hello - - - -
- - !hello - -
- Hello! -
- - -## Syntax - -First, instead of using `discord.Bot` or `commands.Bot`, we use `bridge.Bot`. `bridge.Bot` does inherit from `commands.Bot`, so you can do anything with `bridge.Bot` that `commands.Bot` can do. -Then, we define a command with `@bot.bridge_command()`. This makes a Bridge Command, which has both a Prefixed Command counterpart and a Slash Command counterpart. -Next, the callback has access to a `ctx` object, which is the context of the command. This context is either of `BridgeApplicationContext` type or `BridgeExtContext`. Because of that, it makes detecting how the function was called easier. - -### Using Bridge Commands in a Cog - -Like Slash Commands and Prefixed Commands, you can use Bridge Commands in a Cog. You can do this by using the `bridge_command` decorator. Here's an example: - -```python -import discord -from discord.ext import bridge, commands - -class Greetings(commands.Cog): - def __init__(self, bot): - self.bot = bot - - @bridge.bridge_command() - async def hello(self, ctx): - await ctx.respond("Hello!") - - @bridge.bridge_command() - async def bye(self, ctx): - await ctx.respond("Bye!") - -def setup(bot): - bot.add_cog(Greetings(bot)) -``` - -The cog will automatically split the Bridge Command into their Slash Command and Prefixed Command counterparts. - - - -
- - hello - -
- Hello! -
- - - !hello - - - -
- - !hello - -
- Hello! -
- - -
- - bye - -
- Bye! -
- - - !bye - - - -
- - !bye - -
- Bye! -
-
- -### Deferring - -You can defer if you want to communicate to the user that your bot is busy processing the command. This is done by using `ctx.defer()`. For the Slash Command implementation, `ctx.defer()` calls the function that gives out a "Bot is thinking" message. For the Prefixed Command implementation, `ctx.defer()` enables the typing indicator. - - - -### Options - -Options are pretty straightforward. You just specify them like you do with prefixed commands, and you're all set! - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def sum(ctx, a: int, b: int): - await ctx.respond(a + b) - -bot.run("TOKEN") -``` - - - -
- - sum - -
- 4 -
- - - !sum 2 2 - - - -
- - !sum 2 2 - -
- 4 -
-
diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json b/i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json deleted file mode 100644 index 63f8e08e..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx deleted file mode 100644 index bf345c07..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Command Groups ---- - -Command groups are a way to create subcommands for your commands. For example, `!afk set` or `!afk -remove`. - -## Syntax - -Creating a command group is very simple. - -```python title="Command Groups Example" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!') - -@bot.group() -async def afk(): - pass - -@afk.command() -async def set(): - ... - -@afk.command() -async def remove(): - ... - -# Another command group - -@bot.group(invoke_without_command=True) # Indicates if the group callback should begin parsing and invocation only if no subcommand was found. -async def math(ctx): - await ctx.send('Subcommand not found') - -@math.command() -async def add(ctx, a: int, b: int): - ... - -@math.command() -async def subtract(ctx, a: int, b: int): - ... -``` - -To create a command group, the command's decorator must be `@bot.group`. Once you have a command with -that decorator, you can use `@function.command()`, such as `@math.command()`. Now, you have subcommand -groups! - - - -:::info Related Topics - -- [Prefixed Commands](./prefixed-commands.mdx) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx deleted file mode 100644 index e84fd42d..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx +++ /dev/null @@ -1,481 +0,0 @@ ---- -title: Help Command ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Pycord's `commands` extension comes with a built-in help command. In this guide, we will take a look at them as well as learn how to create your own. Let's dive in! - -:::note - -This guide demonstrates using object-oriented programming and subclassing to make a help command for your -Pycord bot. It is important to understand these two concepts before continuing. - -**Learning Resources**: - -- [W3Schools - Python Subclassing](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools - Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -::: - -## The Wrong Way - -A popular way to create a help command is to disable the built-in help command and create your own. This is not recommended as it will lead to a lot of confusion. - -```python title="The Wrong Way" -bot = commands.Bot(command_prefix='!', help_command=None) -# OR -bot.help_command = None -# OR -bot.remove_command("help") - -@bot.command() -async def help(ctx, *, argument=None): - ... -``` - -While it's possible to create a help command this way, doing so does not utilize the full capabilities -of making one with Pycord. Making a help command with subclassing and OOP will save time and effort. - -## Types of Help Commands - -There are two types of built-in help commands: - -- [`DefaultHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.DefaultHelpCommand) -- [`MinimalHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.MinimalHelpCommand) - -`DefaultHelpCommand` is the command enabled by default. It isn't the best looking, but `MinimalHelpCommand` can help make it look a bit better. - - - - -```python title="Default Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.DefaultHelpCommand()) # help_command is DefaultHelpCommand by default so it isn't necessary to enable it like this -# We enable it here for the sake of understanding - -... - -bot.run("token") -``` - - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- - -```python title="Minimal Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.MinimalHelpCommand()) - -... - -bot.run("token") -``` - - - - !help - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
- -
- -
- -## Updating Built-in Help Commands - -Let's try to make the `MinimalHelpCommand` look better. We can do this by putting its content in an -embed. - -```python title="Minimal Help Command Example" -bot = commands.Bot(command_prefix='!') - - -class MyNewHelp(commands.MinimalHelpCommand): - async def send_pages(self): - destination = self.get_destination() - for page in self.paginator.pages: - emby = discord.Embed(description=page) - await destination.send(embed=emby) - -bot.help_command = MyNewHelp() -``` - -Let's go through the code. - -First, we create a new class called `MyNewHelp`. This class is a subclass of `MinimalHelpCommand`. - -Next, we override the `send_pages` method. This method is responsible for sending the help command to -the user. We override this method because we don't want to change the content of the pages, just how -they are sent. - -We use the `get_destination` method to get the destination of the message. This is the channel or use that the help -command is to be sent to. - -We use the `paginator.pages` property to get the different pages of the help command. We put the page -in an embed, and then send the embed to the destination channel. - -Finally, we set this as our new help command using `bot.help_command = MyNewHelp()`. - - - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a - category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
-
- -## Creating Your Help Command - -Not satisfied with the built-in help commands? You can create your own! - -For this, we will subclass the `HelpCommand` class. - -There are 4 methods that we need to override: - -- `HelpCommand.send_bot_help(mapping)` that gets called with `help` -- `HelpCommand.send_command_help(command)` that gets called with `help ` -- `HelpCommand.send_group_help(group)` that gets called with `help ` -- `HelpCommand.send_cog_help(cog)` that gets called with `help ` - -### Bot Help - -```python title="Bot Help Example" -class MyHelp(commands.HelpCommand): - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help") - for cog, commands in mapping.items(): - command_signatures = [self.get_command_signature(c) for c in commands] - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's go through the code. - -- First, we create a new class called `MyHelp`. This class is a subclass of `HelpCommand`. - -- Next, we override the `send_bot_help` method. This method is responsible for sending the main help - command to the user. - -- We create an embed with the title "Help". - -- We iterate through `mapping.items()`, which returns a list of tuples, the first element being the - cog and the second element being a list of commands. - -- By using `self.get_command_signature(c)` we get the signature of the command, also known as the - `parameters` or `arguments`. - -- There is a chance that the cog is empty, so we use `if command_signatures:`. - -- We get the name of the cog using `getattr(cog, "qualified_name", "No Category")`. This calls the - cog's attribute `qualified_name` which returns "No Category" if the cog has no name. - -- We add a field to the embed with the name of the cog and the value of the command signatures. - -- Finally, we send the embed to the channel. - -Let's improve the code a little. - -```python title="Improved Bot Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - command_signatures = [self.get_command_signature(c) for c in filtered] - - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Now the help command won't show commands that the user can't use, as well as aliases for commands. -Let's get the help command to show command aliases. - -### Command Help - -This function is called when the user uses `help `. - -```python title="Command Help Example" -class MyHelp(commands.HelpCommand): - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command), color=discord.Color.random()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's quickly go through the code we haven't discussed yet. - -- In line 3, we create an embed with a title the signature of the command (so that the title of the - embed looks like ` [parameter]`), and a random color. - -- In lines 4 and 5, we get the command's `help` description and add it to the embed. The help description - of a command can be specified in the docstrings of a command function. For example: - - ```` - ```python - @bot.command() - async def ping(ctx): - """Returns the latency of the bot.""" - await ctx.send(f"Pong! {round(bot.latency * 1000)}ms") - ``` - ```` - -- Line 6 is shorthand for - - ```python - alias = command.aliases - if alias: - ... - - # is the same as - - if alias := command.aliases: - ... - ``` - - A very helpful (but not well-known) Python shorthand! - -- In line 7, we get the aliases of the command and add them to the embed. - -### Cog Help - -This is pretty easy! - -```python title="Custom Cog Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_cog_help(self, cog): - embed = discord.Embed(title=cog.qualified_name or "No Category", description=cog.description, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(cog.get_commands()): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Once again, we create an embed, get the commands that the user can use, and add them to the embed. - -### Group Help - -Similar to the cog help, this is pretty easy! - -```python title = "Custom Group Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_group_help(self, group): - embed = discord.Embed(title=self.get_command_signature(group), description=group.help, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(group.commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Add all of these methods together, and you have a fully functioning help command! - -
-Click to see the final code for this section -
- -:::note - -The following code has been slightly edited from the tutorial version. - -::: - -```python title="Custom Help Command Example" -class SupremeHelpCommand(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - if command_signatures := [ - self.get_command_signature(c) for c in filtered - ]: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command) , color=discord.Color.blurple()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_help_embed(self, title, description, commands): # a helper function to add commands to an embed - embed = discord.Embed(title=title, description=description or "No help found...") - - if filtered_commands := await self.filter_commands(commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No help found...") - - await self.get_destination().send(embed=embed) - - async def send_group_help(self, group): - title = self.get_command_signature(group) - await self.send_help_embed(title, group.help, group.commands) - - async def send_cog_help(self, cog): - title = cog.qualified_name or "No" - await self.send_help_embed(f'{title} Category', cog.description, cog.get_commands()) - -bot.help_command = SupremeHelpCommand() -``` - -
-
- -## Command Attributes - -How can you add cooldowns, set aliases, and change the name of help commands? Command attributes can -help you do all of that, and more! - -```python title="Help Command Attributes" -attributes = { - 'name': "help", - 'aliases': ["helpme"], - 'cooldown': commands.CooldownMapping.from_cooldown(3, 5, commands.BucketType.user), -} - -# You need to use CooldownMapping.from_cooldown(rate, per, type) - -bot.help_command = MyHelp(command_attrs=attributes) -``` - -## Error Handling - -When a user attempts to use a command that does not exist, we need to inform the user. -We can do this by overriding the `send_error_message` function. - -```python title="Custom Help Error Example" -class MyHelp(commands.HelpCommand): - async def send_error_message(self, error): - embed = discord.Embed(title="Error", description=error, color=discord.Color.red()) - channel = self.get_destination() - - await channel.send(embed=embed) -``` - - - - !help update_pycord - - - - Command 'update_pycord' not found. - - - - -## Credits - -Most of the content from this guide is from -[InterStella0's walkthrough guide on subclassing HelpCommand](https://gist.github.com/InterStella0/b78488fb28cadf279dfd3164b9f0cf96). -Thanks to InterStella0 for making this guide amazing. - -:::info Related Topics - -- [Subclassing Bots](../../Popular-Topics/subclassing-bots) -- [Prefixed Commands](./prefixed-commands) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx deleted file mode 100644 index 87bef7ac..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx +++ /dev/null @@ -1,324 +0,0 @@ ---- -title: Prefixed Commands -description: Learn how to use the commands extension for Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Before Discord added slash commands, all bots had prefixed commands. A user would type the bot's prefix -followed by a word or phrase to invoke a command, such as `?help` or `!help`. -However, this prefixed commands system isn't native to Discord! Developers made use of an `on_message` -event to check if the message began with a certain character, then invoke the command. Every time a -message was sent, the bot would see the message and check for its "prefix" - -The syntax becomes a little more complicated when you want to have multiple commands. There are several -disadvantages to this system. This is where the commands extension comes in. `ext.commands` has -various advantages, such as: - -- Simpler syntax -- Easier to use -- Easier to parse user input -- Comes with built-in help commands -- Comes with a built-in system for categorizing commands - - - - -```python title="Prefixed Commands with Events" -import discord - -client = discord.Client() - -@client.event -async def on_message(message): - if message.content.startswith("!ping"): - await message.channel.send("Pong!") - - elif message.content.startswith("!announce"): - if len(message.content.split(" ")) < 3: - await message.channel.send("You need to specify a title and a message. Correct usage: `!announce Hello Hello everyone!`") - return - - msg = message.content.split(" ", 2) - title = msg[1] - content = msg[2] - - await message.channel.send("**{}**\n{}".format(title, content)) - - elif message.content.startswith("!"): - await message.channel.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !help - - - Unknown Command. - -
- -
- - -```python title="The Commands Extension" -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix="!", intents=intents) - -@bot.command() -async def ping(ctx): - await ctx.send("Pong!") - -@bot.command() -async def announce(ctx, title, *, message): - await ctx.send("**{}**\n{}".format(title, message)) - -@bot.event -async def on_command_error(ctx, error): - if isinstance(error, commands.CommandNotFound): - await ctx.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !pycord - - - Unknown command. - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
- !announce -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The commands extension has many more uses. This example only showcases the basic features mentioned -in the previous example. Other things you can do with the commands extension include using a different -built-in help command and creating your own. The following tutorials showcase these. - -::: - -
-
- -## Syntax - -Before we check out the syntax, let's take a look at the bot classes. - -> `discord.Client` - Contains only events. -> -> `discord.Bot` - Subclasses `discord.Client`, adds commands. -> -> `discord.ext.commands.Bot` - Subclasses `discord.Bot`, adds prefixed commands, cogs, and more. - -This means that `discord.ext.commands.Bot` has both slash commands and prefixed commands, as well as -events, cogs and more. - -Now let's look at the syntax. - -```python title="A Simple Prefixed Bot" -import discord -from discord.ext import commands # Import the commands extension -# discord.ext.commands are not the same as discord.commands! - -intents = discord.Intents.default() #Defining intents -intents.message_content = True # Adding the message_content intent so that the bot can read user messages - -bot = commands.Bot(command_prefix="!", intents=intents) # You can change the command prefix to whatever you want. - -@bot.command() # This is the decorator we use to create a prefixed command. -async def ping(ctx): # This is the function we will use to create the command. - await ctx.send("Pong!") # This is the response the bot will send. - - -bot.run("token") # Run the bot with your token. -``` - - - - !ping - - - Pong! - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The help command is a built-in command and is enabled by default. You will learn more about it in the -following guides. - -::: - -## Parameters - -Prefixed commands can take parameters, just like slash commands. You can specify the parameters in -the function itself. - -```python title="Parameters Example 1" -@bot.command() -async def echo(ctx, *, message): - await ctx.send(message) -``` - -`ctx` is the context of the message. `*` means that the parameter can be any number of words. `message` -is the parameter. If you had not passed `*`, `message` would only have been one word. - -For example, if a user had used `!echo hello world`, `message` would have been `hello`. Since we -passed `*`, `message` is `hello world`, or the rest of the message. - -We can pass multiple parameters too! - -```python title="Parameters Example 2" -@bot.command() -async def echo(ctx, channel:discord.TextChannel, title, *, message): - await channel.send("**{}**\n{}".format(title, message)) -``` - -In the example above, `channel` is a parameter that is of type `discord.TextChannel`. When you -specify the type of the parameter, Pycord will automatically try to convert the parameter to that type. -That is why you can use `channel.send` directly without needing to convert it first. - -We also have a new parameter, `title`. This does not have a type, so it will be a string. `*` means -that the rest of the message belongs to the next parameter, in this case, `message`. - -When a user types `!echo #general Greetings! Hello World!`, `channel` will be the text channel -`#general`, `title` will be `Greetings!` and `message` will be `Hello World!`. - -Let's take an example where the user passes `!echo #general Holiday Greetings! Greetings to you all!`. -Here, the user wants the title to be "Holiday Greetings!" and the message to be "Greetings to you all!". -However, since Pycord parses the message at whitespaces, the title will end up being "Holiday" and the -message "Greetings! Greetings to you all!". The user can prevent this by typing `!echo "Holiday -Greetings!" Greetings to you all!`. - - - - - - !echo #general Holiday Greetings! Greetings to you all! - - - Holiday -
- Greetings! Greetings to you all! -
- - !echo #general "Holiday Greetings!" Greetings to you all! - - - Holiday Greetings! -
- Greetings to you all! -
-
- -Let's check out another example for parameters and parameter types. - -```python title="Parameters Example 3" -import random - -@bot.command() -async def gtn(ctx, guess:int): - number = random.randint(1, 10) - if guess == number: - await ctx.send("You guessed it!") - else: - await ctx.send("Nope! Better luck next time :)") -``` - -If you had not specified the type of the parameter, it would have been a string. And since `"5"` is not -the same as `5` in python, the bot would have responded with "Nope! Better luck next time :)". -Even if you do not specify the type of the parameter, you can still convert it later on, in this case, -with `int(guess)`. - -:::info Related Topics - -- [Command Groups](groups) -- [Rules and Common Practices](../../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json b/i18n/hi/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json deleted file mode 100644 index baeba701..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Pages", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx deleted file mode 100644 index be90b035..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Paginator Basics ---- - -# Paginator Basics - -## [Page](https://docs.pycord.dev/en/stable/ext/pages/index.html#page) - -This class contains two attributes: `content` and `embeds`, which correspond to the attributes of the same name on the -`discord.Message` class. -To create a new Page, use the following syntax: - -```py -import discord -page = Page(content="My Page Content", embeds=[discord.Embed(title="My First Embed Title")]) -``` - -## [PageGroup](https://docs.pycord.dev/en/stable/ext/pages/index.html#pagegroup) - -This class represents a group of pages. It uses most of the same parameters as `Paginator`, which allows each -`PageGroup` to effectively have its own settings and behaviours. - -## [Paginator](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator) - -This is the main class for `ext.pages`, and is used to control most of the functionality of the extension. - -In its most basic form, with no arguments provided (default values listed below), a paginator can be created like so: - -```py title="Paginator Example" -import discord -from discord.ext.pages import Paginator, Page - -my_pages = [ - Page( - content="This is my first page. It has a list of embeds and message content.", - embeds=[ - discord.Embed(title="My First Embed Title"), - discord.Embed(title="My Second Embed Title"), - ], - ), - Page( - content="This is my second page. It only has message content.", - ), - Page( - embeds=[ - discord.Embed( - title="This is my third page.", - description="It has no message content, and one embed.", - ) - ], - ), -] -paginator = Paginator(pages=my_pages) -``` - -The only required parameter for `Paginator` is the `pages` parameter, which is usually a list of `Page` objects. - -You can also pass in a list of `PageGroup` objects, a list of strings, a list of embeds, or a list of lists of embeds. - -Once the `Paginator` instance is created, you can call either -[`Paginator.send()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.send) -or [`Paginator.respond()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.respond) -to send a message or response with the paginator's contents. - -#### Depending on what's being passed to the `pages` parameter, the behaviour of the paginator may differ: - -- Passing a list of `PageGroup` objects will essentially treat each `PageGroup` as its own Paginator, with most - `Paginator` attributes able to be set independently for each `PageGroup`. - \- Each `PageGroup` accepts its own `pages` parameter, which inherits the same behaviour as the `pages` parameter - of `Paginator`, except it cannot contain other `PageGroup` objects. -- If a page is a `Page` object, this will allow you to specify both the `discord.Message.content` and - `discord.Message.embeds` attributes for a page. - \- **This is the preferred method of defining a page.** -- If a page is a string, this will be used for the `discord.Message.content` attribute. This type of page cannot have - any embeds. -- If a page is a list of embeds, this will be used for the `discord.Message.embeds` attribute. This type of page - cannot have any message content. -- If a page is a list of lists of embeds, each parent list item will create a page containing all embeds from its - child list. This type of page cannot have any message content. - -#### Parameters for the `Paginator` class which have default values: - -- `show_disabled` **:** `True` - - Show buttons that are disabled (i.e. can't be clicked) -- `author_check` **:** `True` - - Only the author can interact with the paginator. -- `timeout` **:** `180` _(seconds)_ - - The paginator will time out and become inactive after this many seconds. -- `disable_on_timeout` **:** `True` - - If the paginator times out, it will be automatically disabled and all buttons will be unusable. -- `use_default_buttons` **:** `True` - - Use the default set of 4 buttons and a page indicator. -- `show_indicator` **:** `True` - - When using the default buttons, shows a middle 5th button with the current/total page numbers. - -**For other parameters that can be set on initialization, please check the -[API Reference](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator)** - -## [PaginatorButton](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatorbutton) - -This class represents a button used to navigate between the pages of a paginator. It's also used to create the page -indicator. - -When creating your own custom buttons, you can either use this class directly or subclass it to add any additional -functionality you may need. - -To add custom buttons to the paginator instead of the default navigation buttons, you have two options to do so: - -1. **Using the `custom_buttons` parameter of `Paginator`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - buttons = [ - PaginatorButton("first", label="<<-", style=discord.ButtonStyle.green), - PaginatorButton("prev", label="<-", style=discord.ButtonStyle.green), - PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True), - PaginatorButton("next", label="->", style=discord.ButtonStyle.green), - PaginatorButton("last", label="->>", style=discord.ButtonStyle.green), - ] - paginator = Paginator( - pages=["Page 1", "Page 2", "Page 3"], - show_indicator=True, - use_default_buttons=False, - custom_buttons=buttons, - ) - ``` -2. **Using `Paginator.add_button()`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"], use_default_buttons=False) - paginator.add_button(PaginatorButton("prev", label="<", style=discord.ButtonStyle.green)) - paginator.add_button(PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True)) - paginator.add_button(PaginatorButton("next", label=">", style=discord.ButtonStyle.green)) - ``` - -If you want to use the default navigation buttons, but not all of them, you can also use `Paginator.remove_button()` to -selectively remove them: - -```py -from discord.ext.pages import Paginator - -paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"]) -paginator.remove_button("first") -paginator.remove_button("last") -``` - -## [PaginatorMenu](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatormenu) - -This class represents the `discord.Select` menu used to navigate between `PageGroup` instances. In most situations, you -will not need to interact with this class directly. - -If you do subclass it, you'll likely want to call `super()` in your `__init__` method to ensure that the `PageGroup` -navigation functionality is retained. - -## Usage Examples - -For a comprehensive list of examples showing all `Paginator` functionality, please see the -[example in cog form](https://github.com/Pycord-Development/pycord/blob/master/examples/views/paginator.py) in the repo. - -## Support and Feedback - -If you have any questions, suggestions, or feedback for `ext.pages`, please join the -[Discord server](https://discord.gg/pycord). diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx deleted file mode 100644 index b8d68925..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Paginator FAQ ---- - -# Paginator FAQ - -- **What's the difference between `Paginator.send()` and `Paginator.respond()`?** - - `Paginator.send()` is used to send a channel message (DMChannel or TextChannel) with the paginator. - - `Paginator.respond()` is used to send an interaction response (or followup) message with the paginator. - -- **How can the bot send a paginator to a different destination than where it was invoked?** - - Use the `target` parameter in `Paginator.send()` or `Paginator.respond()`. - - You can also set the `target_message` parameter to control what's shown as a response where the paginator was originally invoked. - - For `Paginator.respond()`, this parameter is required if `target` is set, as an interaction requires being responded to. - -- **How can I change the paginator's behavior without re-creating and re-sending it?** - - Use the `Paginator.update()` method. - -- **How can I make the bot actually do something with the contents of a page?** - - Use the (upcoming) `Paginator.page_action()` method. diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json b/i18n/hi/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json deleted file mode 100644 index 36dfb009..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Tasks" -} \ No newline at end of file diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx deleted file mode 100644 index 848f6066..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Tasks ---- - -## Concept - -So you want to run a background task running at some specified interval? Thankfully, that's a common thing to do, whether you're working with some API or handling some background logic don't worry, the Pycord tasks extension is here to make life easier for you! - -With the tasks extension, you can make background tasks without worrying about the asyncio hell and mind bogglers like "what if my internet dies" and "how do I handle reconnecting" with the added benefit of a lot of useful additions that are one line of code away! - -### Example Usage - -```py -import discord -from discord.ext import tasks - -bot = discord.Bot() - -@bot.event -async def on_ready(): - very_useful_task.start() - -@tasks.loop(seconds=5) -async def very_useful_task(): - print('doing very useful stuff.') - -bot.run("TOKEN") -``` - -If you do run this code in your terminal you should see something like this after about 15 seconds: - -``` -doing very useful stuff. -doing very useful stuff. -doing very useful stuff. -``` - -For a more useful example here's a task in a cog context ripped straight from the [docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#recipes): - -```py -from discord.ext import tasks, commands - -class MyCog(commands.Cog): - def __init__(self): - self.index = 0 - self.printer.start() - - def cog_unload(self): - self.printer.cancel() - - @tasks.loop(seconds=5) - async def printer(self): - print(self.index) - self.index += 1 -``` - -As you'd expect this will increment a number and print it out every 5 seconds like so: - -```sh -0 -# 5 seconds later -1 -# 5 more seconds later -2 -# ... -``` - -## [Tasks](https://docs.pycord.dev/en/stable/ext/tasks/index.html) - -Now let's get into the nitty-gritty of tasks. - -As you've seen tasks can work in both outer scope and class contexts and the handle is roughly the same, you define a task using the `tasks.loop` decorator and use the `start` method to start it, the difference is you add the `self` argument when in a class context so since most people have all their bot's code in Cogs all the following code blocks will be in a Cog context to make it easy to copy it then apply whatever modifications you might need! - -### [Creating a task](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop) - -A look at `discord.ext.tasks.loop`'s definition in the documentation reveals that: - -1. As you've seen before it expects the time between each execution, that however doesn't have to be in seconds as - there are `seconds`, `minutes` and `hours` parameters to make it easier for us, they can also be floats in case you want - ultra-precision. -2. You can also pass in a `datetime.time` object or a sequence of them in the `time` parameter which will make it run - at the specified time(s). -3. You can pass in how many times a loop runs before it stops by passing in the `count` parameter, you can use `None` - to make it run forever which is also the default. -4. The loop function **_must_** be a coroutine. - -These are all really useful, and they aren't the only parameters so if you want to know more about them check out the -[docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop)! - -### Attributes - -A task has the following attributes: - -- `current_loop`: The current loop the task is on. -- `hours`, `minutes`, `seconds`: attributes that represent the time between each execution. -- `time`: A list of datetime.time objects that represent the times the task will run, returns `None` if no datetime - objects were passed. -- `next_iteration`: A `datetime.datetime` object that represents the next time the next iteration of the task will - run, can return `None` if the task stopped running. - -These attributes serve as a really powerful asset to get info about your loop. - -### Example - -Now let's create a cog that handles a leaderboard we have in our bot using Tasks then explain what we did after that and -also provide a refresher of how slash commands groups work in cogs. - -For the sake of this example let's pretend that we have a leaderboard module that does all the leaderboard handling for -us and that computing the leaderboard is very expensive computationally wise, so we want to store one version of it that -gets regularly updated instead of generating it every time someone calls the `/leaderboard view` command. - -```py -from discord.ext import tasks, commands -from discord.commands import SlashCommandGroup, CommandPermissions - -from leaderboard import * # Mock leaderboard module. - -class LeaderboardCog(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.update_leaderboard.start() - self.leaderboard_embed = generate_leaderboard_embed() - - leaderboard = SlashCommandGroup(name='leaderboard', description='Leaderboard commands.') - - @tasks.loop(minutes=10) - async def update_leaderboard(self): - print('Updating leaderboard...') - await update_leaderboard() - self.leaderboard_embed = generate_leaderboard_embed() - - @update_leaderboard.before_loop - async def before_update_leaderboard(self): - await self.bot.wait_until_ready() - print("About to start updating leaderboard.") - - @update_leaderboard.after_loop - async def after_update_leaderboard(self): - leaderboard_cleanup() - print("Stopped updating leaderboard.") - - @update_leaderboard.error - async def update_leaderboard_error(self, error): - print(f"Oh no, an error occurred while updating the leaderboard. Error: {error}") - - @leaderboard.command() - async def view(self, ctx): - await ctx.respond(embed=self.leaderboard_embed) - - @leaderboard.command() - async def update_info(self, ctx): - await ctx.respond(f"""***Leaderboard Info***\n - Last update: {(600 - self.update_leaderboard.next_iteration.timestamp())//60} minutes ago.\n - Next update: in {self.update_leaderboard.next_iteration.timestamp() // 60} minutes.\n - Time between loops: {self.update_leaderboard.minutes} minutes.\n - Times updated this session: {self.update_leaderboard.current_loop}. - Running? {self.update_leaderboard.is_running()} - Failed? {self.update_leaderboard.failed()}""", ephemeral=True) - - # Now for the owner only commands: - - leaderboard_config = SlashCommandGroup(name="leaderboard_config", description="Leaderboard configuration commands", permission=[CommandPermissions("owner", 2, True)]) - - @leaderboard_config.command() - async def set_time_between_updates(self, ctx, minutes: int): - self.update_leaderboard.change_interval(minutes=minutes) - await ctx.respond(f"Set time between updates to {minutes} minutes.") - - @leaderboard_config.command() - async def stop(self, ctx): - self.update_leaderboard.stop() - await ctx.respond("Stopped the leaderboard update.") - - @leaderboard_config.command() - async def restart(self, ctx): - self.update_leaderboard.restart() - await ctx.respond("Restarted the leaderboard update.") - -def setup(bot): - bot.add_cog(LeaderboardCog(bot)) -``` - -Phew, that was quite a bit of code. - -Now to explain what's going on: - -First things first we create a cog and in its `__init__` function we start the `update_leaderboard` task and generate -the first instance of our leaderboard's embed. - -After that, we define the `update_leaderboard` task using the `loop` decorator, and we make it run every ten minutes by -passing 10 to the `minutes` parameter. - -Then that we define the `before_update_leaderboard` task using the `before_loop` decorator, and we make it wait until the -bot is ready before starting the task. - -Next up we define the `after_update_leaderboard` task using the `after_loop` decorator, and we make it clean up the -leaderboard when the loop finally stops running. - -Then we define the `update_leaderboard_error` task using the `error` decorator, and we make it print any errors that may -occur while we update our leaderboard to the console. - -Then we get into the fun stuff, we create a slash command group using the `SlashCommandGroup` class and name it -`leaderboard`, we then create the `view` sub-command which sends the embed generated when the leaderboard is updated and -`update_info` which shows a lot of data about the task using some attributes and functions available to us. - -We also create a slash command group called `leaderboard_config` which is only available to the owner of the bot. - -Then we create the `set_time_between_updates` sub-command which takes in the time in minutes and changes the time -between updates of the leaderboard using the `change_interval` method, the `stop` sub-command which stops the task using -the `stop` method and `restart` which restarts the task using the `restart` method. - -Finally, we add the `LeaderboardCog` cog to the bot, and we're done! - -I'd highly recommend you check the tasks extension -[documentation](https://docs.pycord.dev/en/stable/ext/tasks/index.html) for more info on how to use them and what other -functions they have. diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/_category_.json b/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/_category_.json deleted file mode 100644 index 9d6255f5..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 3, - "label": "Getting Started", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx deleted file mode 100644 index 7fbabf77..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: Creating Your First Bot ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -Excited to create your first bot? Once you [install Pycord](../installation.mdx), you can start right -away! - -## Creating the Bot Application - -Just like how you need to sign up to use Discord, your bot also has to be signed up. To do this, -you should: - -1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click - on . -2. Give your bot a name, and click . -3. Now, you should see a page like this. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdW3OQnwUhacopqSWw%2F-Mjd_-mxrJCrzmaXrAg8%2Fimage.png?alt=media&token=b8e2ae6c-2290-4d37-ad7c-eb412f3fb00e) -4. Click on the tab on the left side of the screen. -5. Click on . -6. You can give it a name, change the Avatar, etc. - -## Inviting the bot - -Now, lets get the bot added to some servers. Go to the tab -in the left pane and select `bot` and `applications.commands` as scopes. - -You may want your bot to have application commands, which is what the `application.commands` scope -allows your bot to make. - -Next, you want to choose what permissions the bot will have and select them. For now, you can just -give your bot the `administrator` permission, which gives your bot every permission. Once you select -your bot's permissions, click on to get the bot invite link. - -:::tip - -When your bot is all ready to go, make sure that administrator permissions aren't selected unless -your bot truly needs them. Try selecting only permissions the bot will need. For testing, -Administrator permissions are fine. - -::: - -![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-Mk6tNY3LfDkjd6pqdpL%2F-Mk6tkdpddEWoa2jczZk%2Fimage.png?alt=media&token=52c8a29f-a798-48f8-a8c7-4ecca2681f79) - -You can use this link to invite the bot. - -## Tokens - -Now that you have an account for your bot, you need to log in. To log in, we need the bot's -password. All users and bots have a "token." You may think of this token as a password, as this allows -us to log our bot into Discord. - -Tokens are "snowflakes." Not actual snowflakes, though. Just like how no two snowflakes in real life have the same -pattern, snowflakes in computers are unique things - no two bots have the same token - so a token is -considered a snowflake. A Discord user ID is also a snowflake. - -Now, lets get your bot's token. To do this, you want to: - -1. Go back to the tab. -2. Click on the button in the "Token" section. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdbU12JISJorAZxrKH%2F-MjdbpUsapzb5n15Po5P%2Fimage.png?alt=media&token=118e259f-940a-4f6c-b3a3-c29f3a54100d) - -Now, you have your bot's token copied to your clipboard. - -:::danger - -Do not, under any circumstances, give your token to anyone. Even if you are contacted by someone -claiming to be Discord staff, do not give them your bot's token. They are lying to you to try and -gain access to your bot. If an unauthorized user gains access to your bot's token, they can access -your bot and use it in malicious ways. - -Never push your token to GitHub or include it in your code. One way to prevent your token from -getting leaked is to store it in `.env` files. - -::: - -### Protecting Tokens - -#### Using dotenv - -You can store your tokens in `.env` files. This is a simple way to store sensitive information. - -1. Create a file with the name `.env` (only the extension, with a dot/period at the start and without a name before it). -2. Define the token in the `.env` file (replace the example value with your token). - ```env title=".env" - TOKEN = NzkyNzE1NDU0MTk2MDg4ODQy.X-hvzA.Ovy4MCQywSkoMRRclStW4xAYK7I - ``` -3. Install [`python-dotenv`](https://pypi.org/project/python-dotenv/). - ```bash - python -m pip install python-dotenv - ``` -4. Load the token from the `.env` file. - ```python - import dotenv - dotenv.load_dotenv() - token = str(os.getenv("TOKEN")) - ``` -5. Pass your token as parameter when running the bot. - ```python - client.run(token) - ``` - -:::tip - -If you are using Git to track your bot's changes, you should create a file called `.gitignore` and add -`.env` to it. This stops your `.env` file from getting tracked along with the rest of your code, and -will not be pushed to a remote Git repository. As a consequence, it will stay secure on your local machine. - -::: - -## Coding the Basics - -Here's an example of code you'll write with Pycord: - -```py -import discord -import os # default module -from dotenv import load_dotenv - -load_dotenv() # load all the variables from the env file -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") - -bot.run(os.getenv('TOKEN')) # run the bot with the token -``` - - - -
- - hello - -
- Hey! -
-
-
- -Let's go through the code. First, the imports. - -```py -import discord -import os -from dotenv import load_dotenv -``` - -In the first line, `import discord`, we import Pycord. Although you install Pycord with `pip install py-cord`, you -import it with `import discord`. This is so it's as easy as possible when switching from Discord.py to Pycord. - -We then import `os` and `dotenv`. `os` is a default module that we will use to get the token from the env file. `dotenv` -is a module that we will use to load the env file. You installed this with `pip install python-dotenv`. - -Next, we load the env file with `load_dotenv()`. - -```py -bot = discord.Bot() -``` - -In this line, we create a new instance of [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). -In this object, we can pass various parameters for configuration purposes, such as `owner_ids` -and [`intents`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```py -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") -``` - -We use the [`event`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) decorator to override -the [`on_ready`](https://docs.pycord.dev/en/stable/api/events.html#discord.on_ready) function to define an -event that is automatically called when the bot is ready to use. - -```py -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") -``` - -Here, we use the [`slash_command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.slash_command) -decorator to define a slash command. We specify the `name` and `description` arguments. If not -specified, the name of the slash command would be the function name and the command description would -be empty. - -Optional: We type-hint the context parameter (`ctx`) as [`discord.ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext). In modern IDEs, type-hinting allows access to autocompletion and docstrings. You can read more about type-hinting [here](https://docs.python.org/3/library/typing.html). - -Finally, you want to run the bot using the token specified in the `.env` file. - -Now you have finished creating your first Pycord bot! What we have shown you is just the basic structure -of a bot. You can do a lot more with Python and Pycord knowledge, as well as your imagination! Pycord -will not limit your bot's abilities. - -:::note - -The part where we load the token from the environmental variables is not required. You may use another way to keep your token secure, or, although not recommended, simply specify the token normally as a string, as shown below. - -
-A Basic Bot without securing the token -
- -```py -import discord - -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.send("Hey!") - -bot.run("TOKEN") -``` - -
-
- -::: - -## FAQ - -### How do I make prefixed commands? - -Prefixed commands are an older method of creating bot commands that listen for messages and replies -if the message starts with a certain character. You can read [this page](../extensions/commands/prefixed-commands.mdx) -to learn more about prefixed commands. - -### How do I setup modules/cogs? - -[Cogs](../popular-topics/cogs) are a great way to organize your commands by putting them into -groups called cogs. Cogs are separate files that your bot loads to get the commands inside. -You can read more about cogs, as well as learn how to use them and their benefits, -[here](../popular-topics/cogs). - -### How do I add components, such as buttons and dropdown menus, to my bot? - -Pycord makes it very easy to use Message Commands with your bot by using the `discord.ui` module. -To learn more, read about Message Commands in our [interactions directory](../interactions). - -:::info Related Topics - -- [Prefixed Commands](../extensions/commands/prefixed-commands) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx deleted file mode 100644 index 2a68677b..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Hosting Your Pycord Bot ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Hosting Your Pycord Bot - -If you're completely new to this, you might have thought something along the lines of "Yay! I got my -bot working," after following our [Creating your First Bot](creating-your-first-bot) guide, only -to close your IDE or shut down your computer to find your bot offline. - -The reason for this is that programs have to be hosted somewhere, meaning some machine somewhere has -to constantly run your bot. There are tons of hosting services that can help you host your bot for -little to no cost. - -## Can I get a Clear Explanation? - -Sure thing. When you run your bot, it first makes a connection to Discord's API. Once that's done, -Pycord sends "heartbeats" to Discord. "heartbeats" are small packets sent at a set interval telling -Discord that your bot is indeed still alive. If Discord doesn't receive a heartbeat after a certain -amount of time, your bot is pronounced dead and buried in the graveyard (not really). It is, though, -taken offline and its connection with Discord is terminated. - -Once you close the terminal that you've run your program on, the program is no longer running, and -the bot stops sending heartbeats and can no longer process commands. This is why you have to constantly -keep the process running. - -This goes for all programs, in a different nature. If the code isn't compiled/built/assembled/interpreted, -it can't be running. - -## What is a Host? - -A host is a server or container for running code offered by a **hosting provider.** There are a lot -of hosting providers, such as bigger ones like Amazon Web Services (AWS) and Google Cloud, and smaller -ones like GalaxyGate and DigitalOcean. - -There are three types of hosts. - - - - Shared hosting is a type of hosting where multiple people share one VPS. Getting a spot on - a shared host is usually cheap, sometimes even free. Shared hosts do not give you a lot of - resources, from less than a gigabyte of RAM (usually 512MB on free hosts) and half of a CPU - with very little storage. Shared hosting is usually used for website hosting and is not - recommended for hosting a Discord bot. - - - A virtual private server (VPS) is a virtual computer (virtual machine) that is rented out to - customers. Most people use a VPS for hosting their projects such as Discord bots. You can get - anywhere from less than a gigabyte of RAM and a less powerful CPU to just under one hundred - gigabytes of RAM, a (or multiple) powerful CPU(s), and a fair amount of storage. A VPS is the - best choice for most users and can be fairly cheap. - - - A dedicated host is a physical computer. You can buy these yourself or rent one from a hosting - provider. Dedicated hosts are often very expensive, but are also very powerful, having a - few hundred gigabytes of RAM and a few very powerful CPUs, along with a good amount of storage. - Dedicated hosts are usually used for very large projects and are overkill for something like - a Discord bot. - - -
- -:::danger - -Make sure you choose a hosting provider you trust. Also make -sure the hosting provider you're looking at has good reviews on public forums. Googling along the -lines of "[host] review" should do the trick. A provider you don't trust can compromise your token. - -::: - -Most hosting providers rent their services to you for a monthly or yearly fee. These can be anywhere -from a few dollars to hundreds or thousands of dollars. - -## How to Host Your Bot - -Once you rent or buy a VPS, you can get to work. Most hosting providers allow you to choose from a -wide range of operating systems, most allow you to choose one but some allow you to choose -multiple. Once that's ready, you have to SSH into the system. We won't get into SSH here, but you can -read [this article from DigitalOcean](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys). -You can also use VNC, which is remote desktop software. If you are using an OS that does not have a -GUI, and is only a command line (a "server" OS), such as Ubuntu Server or most Linux Server Operating Servers, you will most -likely use SSH. If you are using an OS that has a GUI, such as Windows Server, you will most likely use VNC. - -Once you've decided on your operating system, you'll want to set it up and install Python. Once that's -done, you can copy your bot's files to your remote system, install the required packages, and run -the bot. - -:::warning - -If you are using SSH to run the file, your bot will not stay running. This is because the file is -only told to run during your session. You can use a command like [nohup](https://en.wikipedia.org/wiki/Nohup) -to make sure your file stays running after you disconnect. - -::: - -Now your bot is hosted, but that doesn't mean it can't go offline. If your bot encounters an error, -it can often go offline or stop its process. For this, make sure you have proper error handling. -Also be sure to pay attention to your hosting provider's updates or news, as they usually notify -users of when they plan on doing maintenance to their servers, making their services unavailable for -a short time. - -:::info Related Topics - -- [Creating Your First Bot](creating-your-first-bot) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx deleted file mode 100644 index 32eeb744..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx +++ /dev/null @@ -1,379 +0,0 @@ ---- -title: More Features -description: More features to make your bot cool and snazzy. ---- - -import { - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, - DiscordEmbedField, - DiscordEmbedFields, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -So, you just created your first Pycord bot! Now, let's add some more features to it. This will include adding event handlers, waiting for user response, styling the messages, and more. - -## Events - -### Event Handlers - -Events in Discord are a way to listen for certain actions. For example, if you want to know when a user joins your server, so you could send a welcome message, you can use the `on_member_join` event. - -First, you need to ask Discord to send you events. This is done via "Intents". Read up the [Intents](../Popular-Topics/intents) page for more information. - -Once you understand what intents are, you can enable the events you need, or just use the default ones with `discord.Intents.all()`. - -Now that that's done, let's add an event handler for when a user joins the server. We will use the [`on_member_join` event](https://docs.pycord.dev/en/stable/api/events.html#discord.on_member_join). We will send a private message to the user welcoming them to the server. - -```python -@bot.event -async def on_member_join(member): - await member.send( - f'Welcome to the server, {member.mention}! Enjoy your stay here.' - ) -``` - -We use the [`discord.Bot.event` decorator](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) to add the event handler. - -The `on_member_join` event is called when a user joins the server. The `member` parameter is the user that joined. Different events have different names and parameters. You can find all of them [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -So, that's how you add event handlers! - -### Waiting for User Response - -Let's say you want to create a Guess-the-Number game (where the user has to guess a number between 1-10). You need to send a message to a user and wait for them to respond. You can do this with the [`wait_for`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.wait_for) method. - -```python -@bot.command() -async def gtn(ctx): - """A Slash Command to play a Guess-the-Number game.""" - - await ctx.respond('Guess a number between 1 and 10.') - guess = await bot.wait_for('message', check=lambda message: message.author == ctx.author) - - if int(guess.content) == 5: - await ctx.send('You guessed it!') - else: - await ctx.send('Nope, try again.') -``` - -`wait_for` takes one argument, which is the event type. The event type is the name of the event you want to wait for. In this case, it's `message`. It could also be `reaction` to wait for a reaction to be added. - -We pass a keyword argument to `wait_for` called `check`. The function may look complicated if you're a beginner. We pass a `lambda` function, which simplifies the code a bit. - -The lambda function takes one parameter, `message`. When Pycord receives a message, it passes it to the `check` function. If the function returns `True`, the message is returned. If the function returns `False`, the message is ignored and the bot waits for another message. - -Here, we check if the message is from the user that sent the command. We simply use `message.author == ctx.author`. This will check if the author of the message was the person who invoked the command. - -## Styling Messages - -### Embeds - -Embeds are a Discord feature that allows applications to format their messages in cool embedded format, -enabling your bot to lay out messages with a lot of text into neat fields. - - - - - The Pycord Guide is a detailed guide that explains how to use Pycord and all of its features. - - - The Getting Started section explains how you can get a brand new bot created and running from scratch. - - - Interactions with Pycord - - - Pycord's various Extensions - - - Other Popular Topics - - - We have so much more! Just explore, and you will find everything you need. If you want another page added, open an issue on the GitHub. - - - Created with 💖 by the Pycord Team & Contributors - - - - -
- -Creating embeds is simple! Just create an instance of [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) and edit it to your liking. Once you're done, send it! - -```python -import discord - -bot = discord.Bot() - -@bot.command() -async def hello(ctx): - embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from - ) - embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") - - embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) - embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) - embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) - - embed.set_footer(text="Footer! No markdown here.") # footers can have icons too - embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") - embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") - embed.set_image(url="https://example.com/link-to-my-banner.png") - - await ctx.respond("Hello! Here's a cool embed.", embed=embed) # Send the embed with some text - -bot.run("TOKEN") -``` - - - -
- hello -
- Hello! Here's a cool embed. - - Embeds are super easy, barely an inconvenience. - - - A really nice field with some information. The description as well as the fields support markdown! - - Inline Field 1 - Inline Field 2 - Inline Field 3 - - Footer! No markdown here. - -
-
- -
- -This simple command sends replies to a [slash command](../interactions/application-commands/slash-commands) with an embed. -Let's break it down: - -```py -embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), - ) -``` - -This command creates an embed. We use the [`Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) -class to create an embed object with the title "My Amazing Embed", the description "Embeds are super easy, barely an inconvenience.", and the color `blurple`, Discord's main theme color. - -[discord.Colour](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Colour) is a class full of [classmethods](https://docs.python.org/3/library/functions.html#classmethod) -that return color values. While the official, documented name of this is `discord.Colour`, `discord.Color` -works as well. - -```py -embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") -embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) -embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) -embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) -``` - -This small section shows off embed fields. You can add fields to embeds with the [`add_field` method](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.add_field) -of the [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) class. These consist of three -keyword arguments: `title`, `value`, and `inline`. `title` and `value` are both required arguments, which inline defaults to `False` if it's not defined. The `inline` argument specifies whether space will be divided among the inline fields. There could be a mix of fields where inline has different values too. - -```py -embed.set_footer(text="Footer! No markdown here.") # footers can have icons too -embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") -embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") -embed.set_image(url="https://example.com/link-to-my-banner.png") -``` - -In this section, we're adding unique items to the embed. These items are: - -- Footer - With the [`set_footer()`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_footer) - method, you can set a small footer that holds a message. This has `text` and `icon_url` kwargs. -- Author - With the [`set_author`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_author) - method, you can set an author for the embed. This is a small text field at the top of the embed. This - includes `name`, `url` and `icon_url` kwargs. -- Thumbnail - With the [`set_thumbnail`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_thumbnail) - method, you can set a small image to reside at the top-right of the embed. This has a single `url` kwarg. -- Image - With the [`set_image`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_image) - method, you can set an image to sit at the bottom of an embed. This has a single `url` kwarg. - -There are a lot more methods and attributes you can use to configure embeds. Here, we just covered the basics. Also, remember that all of these values are not necessary in an embed. An embed may only contain a few of these. For example, only a description, a title and a description, and so on. - -### Markdown - -Markdown is a type of markup language that's limited in terms of formatting yet simple. Discord allows -for a watered-down version of markdown to be in their messages. - -#### Text Markdown - -Text formatting can be used in messages and in most embed parts, -as explained in the dedicated section below. - - - - - - - - - - - - - - - - - - - - -
*italics*__*underlined italics*__
**bold**__**underlined bold**__
***bold italics***__***underlined bold italics***__
__underlined__~~strikethrough~~
- -#### Code Markdown - -To create a single-line code block without syntax highlight, wrap the text between single backticks. -This code block will only add a dark background to the text. - -``` -`print("Hello world!")` -``` - -To create a multi-line code block without syntax highlight, wrap the text between triple backticks -on first and last line. This type of code block will encase the code inside a box. - -```` -``` -message = "Hello world!" -print(message) -``` -```` - -To create a multi-line block with syntax highlight, add the name of the language you are using right after -the triple backticks on the first line. For example, for Python you can write either "python" or "py". - -```` -```python -message = "Hello world!" -print(message) -``` -```` - -If you want to use syntax highlight for a single line of code, you still have to format it -like a multi-line block but the code must be on a separate line than the triple backticks. - -#### Quote Markdown - -To create a single-line quote block, start the line with `>` followed by a space. - -``` -> This is a single-line quote. -``` - -To create a multi-line quote block, write `>>>` followed by a space. All text -from that point onwards will be included in that quote block. - -``` ->>> This is a -multi-line quote. -``` - -#### Spoiler Markdown - -To hide a spoiler, encase the text between double pipes. The users -will have to click on it before being able to see the text contained in it. - -``` -||spoiler|| -``` - -#### Link Markdown - -Link formatting only works in embeds and messages sent through webhooks, -by using the following syntax: - -``` -[Pycord](https://pycord.dev/) -``` - -Inside the supported elements that have just been mentioned, -the example above will look like this: [`Pycord`](https://pycord.dev/) - -Outside them, the link will still be clickable but the formatting will be ignored, -therefore the example above will look similarly to this: `[Pycord](https://pycord.dev/)` - -#### Embed Markdown - -Adding markdown to your embeds or messages will give your bot the sparkle it needs, -however, markdown is limited inside embeds. Use the following table as a reference -and keep in mind that embed title and filed names will always show in **bold**. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PartTextLink
Embed AuthorNoNo
Embed TitleYesNo
Embed DescriptionYesYes
Field NameYesNo
Field ValueYesYes
Embed FooterNoNo
diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx deleted file mode 100644 index e44b7c49..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Rules and Common Practices -description: All about the rules and common practices for coding a Discord bot ---- - -# Rules and Common Practices of Creating a Bot - -When creating almost anything, there's always a certain set of rules to follow or common practices, -such as [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python. This applies to creating bots -with Pycord as well. - -:::note - -Most of these rules and common practices are only applicable for -[verified bots](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting), -but it's good to follow them nonetheless. - -::: - -## Rules - -There are rules for creating bots, and most of these are required by Discord themselves, not us at -Pycord. Not following these rules may get your bot denied for verification. - -### Terms of Service and Privacy Policy - -Starting at some point in time, Discord has made providing a privacy policy with your bot a requirement. -This is so that Discord knows exactly what you are doing with its users' data. - -:::tip -You don't need a lawyer or anyone special to write out a privacy policy for you, nor do you need -it approved by some official entity. Simply writing out how you are going to use Discord user -information neatly is all you need to do. -::: - -Providing a Terms of Service for your bot is optional, though usually a best practice. It tells users -what they can and cannot do with your service, and makes it easier to settle disputes if someone -disagrees with you. - -Read more in Discord's official [Legal Docs](https://discord.com/developers/docs/legal). - -### Developer Policy - -We could list almost every rule about using Discord's API here. _Or_ we could simply link Discord's -Developer Policy to make it easier on us. You can find Discord's Developer Policy -[here](https://discord.com/developers/docs/policy). This outlines what you can and cannot do with -Discord's Developer API. And, don't worry, it's completely readable and understandable. - -## Best Practices - -Now, here's something we _can't_ simply link an article for. We're going to discuss the best practices -of creating a Discord bot with Pycord. - -### Bot Sharding - -To any new or maybe even experienced bot developer, sharding a bot sounds beneficial once you hear -about it. I'm here to tell you that it isn't a good idea to shard your bot. - -_Wait a minute, why would it be an option if it wasn't a good idea?_ It's simple. I lied. Sort of. -I'm not going to go into the details of sharding a bot, so you can read about it on -[this page](../Popular-Topics/sharding). Sharding is the process of taking your bot -and breaking it up into small pieces, so it's easier to perform tasks. This is very useful for large -bots, as it makes them faster and more reliable. Sharding is not a good practice for small bots. - -:::note -Discord will notify you once it is time to shard your bot, and will eventually force you to do so. -::: - -At the very least, wait for one thousand servers to shard your bot. If you shard your bot while it's -small, you'll just be wasting resources and possibly making your bot slower. - -### [Verification](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting) - -Verifying your Discord bot is something every developer would like to achieve. It shows that your bot -is in more than 75 servers. It's generally a good idea to try to get your bot verified as soon as -possible. We're talking at 76 servers soon. This is because Discord can be somewhat slow in terms of -bot verification, so verifying as soon as possible gives them enough time to verify before your bot -reaches the 100 server cap. If a bot is not verified, it cannot grow beyond 100 servers. - -It's also a good idea to only apply for the privileged intents that you need. Applying for intents -your bot doesn't use wastes both your time and Discord's time, as your privileged intent request -will be denied simply because you applied for an intent you didn't need. - -### Subclassing - -While it may take some time, subclassing a bot is very worth it. Once again, this was explained -elsewhere, so I won't go into the details, but I felt it fit here, so I put it here. - -Subclassing a bot makes it more flexible and allows it to do a lot more. Read more about subclassing -bots [here](../Popular-Topics/subclassing-bots) - -### Your Bot's Token - -Your bot is only able to be run for one reason: its token. If you followed the -[guide for creating your first bot](creating-your-first-bot), you should already know a bit about -keeping that token safe. That's exactly what you want to do. - -Sharing your token is never good. If someone evil gets a hold of your token, they can do terrible things, -such as making your bot leave all of its servers, spamming all the members the bot has contact with, -and even manipulating the servers the bot is in, if given the permissions. That's why it's very important -to keep your token safe. To learn how to do so, read [this part](creating-your-first-bot#tokens) of -the Creating Your First Bot guide. - -### Backups - -You always want to back up your bot's data. This includes both its code _and_ its databases. This way, -if something tragic happens, such as your host failing a data migration or you breaking your Raspberry -Pi's SD card that held your bot, you'll still have its precious user data. I have a small program for -my bot that uploads its databases to a remote GitHub repository periodically to not lose any data. -It may be smarter to find a bit more of a reliable way to do so, though. - -Public or private, having a local Git repository connected to a remote one is a good idea for making -almost any application. For a lot of developers, it's like saving your work. If you do this, all of -your bot's code won't be lost if your computer spontaneously combusts, or you smash it to bits from -anger. You can simply grab the backup computer that everyone has lying around, and you're back -in business. - -### Organization and Cleanliness - -It is _extremely_ important to have organized code. This includes commands, objects, functions, -and classes. If you don't have organized code, it will get progressively harder for you to recognize -it, and others won't be able to decipher it. - -Make sure you utilize indents and spaces, as these are very important in making your code readable. - -```py title="Bad Spacing" -class MyClass: - async def add(self,num1,num2): - return num1+num2 - async def sub(self,num1,num2): - return num1-num2 -``` - -```py title="Good Spacing" -class MyClass: - async def add(self, num1, num2): - return num1 + num2 - - async def sub(self, num1, num2): - return num1 - num2 -``` - -See the difference? Now, which one looks more readable? Hopefully, you answered the second example. -Python's [PEP8](https://www.python.org/dev/peps/pep-0008/) is a PEP (**Python Enhancement Proposal**) -style guide for Python. It is the style guide that is used by most Python developers and programmers, -providing a universal way to write and read code. - -### Databases - -As your bot grows, you'll inevitably have to store data for your bot. Now, most people would probably just load up some -JSON file on boot into a `dict`, modify it in memory then write to the file. However, JSON files aren't the solution. -When you write to a JSON file, it rewrites the entire file instead of just rewriting the section that changed. It's also -a configuration file format, not a storage file format. - -Instead of using a JSON file or some other related format, you should instead use a database. There are many databases -out there, like MongoDB, SQLite, and PostgreSQL to name a few. - -All of these databases I named do the job well, and which one you use depends on what features you want out of a database. - -<>{/* Maybe clarify these/add more options */} - -#### MongoDB - -MongoDB is a JSON-like format and if you already use JSON files, it shouldn't be too hard to migrate over to. - -#### SQLite - -SQLite is based on SQL, a common relational data model. It's a lightweight, easy-to-use, portable database solution that -works entirely on files. However, if for some reason you cannot read/write to and from a file, and you need to manage -lots of data, SQLite might not be for you. - -While SQLite is a part of the Python Standard Library as the `sqlite3` package, we recommend not using it as it is -synchronous and blocking. You should use an asynchronous alternative, such as [`aiosqlite`](https://pypi.org/project/aiosqlite/). - -#### PostgreSQL - -PostgreSQL is also based on SQL, but it also has more features than SQLite. It's compliant with the SQL standard, -open-source, and extensible. However, it's not that fast or simple compared to SQLite. - -#### MariaDB - -MariaDB is also based on SQL and is a fork of the MySQL project. It's compliant with the SQL standard, it's also open -source and is a complete drop-in replacement for any code with MySQL. You don't even need to change what package you're -using! diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/installation.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/installation.mdx deleted file mode 100644 index 521c69cd..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/installation.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Installation -sidebar_position: 2 ---- - -Before you can start using Pycord, you need to install the library. - -:::note -Python **3.8 or above** is required to use Pycord. -::: - -:::tip -Before you start installing python packages globally, it's recommended you set up a virtual environment. -You can find instructions for that [here](More/virtual-environments). -::: - -## Fresh Installation - -To install Pycord, you can use the following command in your terminal: - -``` -pip install py-cord -``` - -:::tip -Remember that you need to install `py-cord`, not `pycord`. -Also, the `pip` command varies depending on your installation. For example, it might be `python3 -m pip` on macOS/Linux or `py3 -m pip` on some versions of Windows. -::: - -If you need voice support for your bot, you should run: - -``` -pip install "py-cord[voice]" -``` - -## Migration - -### Updating Pycord - -If you are upgrading from a previous version of Pycord, you can use the following command in your terminal to upgrade to the latest version: - -``` -pip install -U py-cord -``` - -### Migrating from other libraries - -If you are migrating from another library, say, `discord.py`, first of all, you need to uninstall it. - -``` -pip uninstall discord.py -``` - -Then, you can install Pycord, it's as simple as that!: - -``` -pip install py-cord -``` - -:::caution -Uninstalling `discord.py` _after_ installing `py-cord` can cause issues. Make sure to uninstall it first! -::: - -## Installing Other Builds - -### Development Build - -:::caution -The development build comes with cutting edge features and new functionality, but as it isn't a stable build you may encounter bugs. -::: - -To install the development build, you can use the following command in your terminal: - -``` -pip install -U git+https://github.com/Pycord-Development/pycord -``` - -:::important -Git is required to install this build. [Learn how you can install Git](./more/git). -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/_category_.json b/i18n/hi/docusaurus-plugin-content-docs/current/interactions/_category_.json deleted file mode 100644 index ea28be60..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 4, - "label": "Interactions" -} \ No newline at end of file diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json b/i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json deleted file mode 100644 index 6dcafe83..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Application Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx deleted file mode 100644 index 8fdca991..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Context Menus -description: Learn all about Context Menus (User Commands & Message Commands) and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -When you right-click a message, you may see an option called "Apps". Hover over it, and you can see -commands a bot can run with that message. These are called message commands. - -When you right-click a user in the user list, you can once again see an option called "Apps". -Hover over it, and you can see commands a bot can run with that message. These are called user commands. - -Together, these two are called Context Menus or Context Menu Commands. These commands work very much like normal commands, except they take a member or message. - -:::note - -A bot can have up to 5 global Context Menus of each type. - -::: - -## User Commands - -Creating a user command is very simple. - -```python -@bot.user_command(name="Account Creation Date", guild_ids=[...]) # create a user command for the supplied guilds -async def account_creation_date(ctx, member: discord.Member): # user commands return the member - await ctx.respond(f"{member.name}'s account was created on {member.created_at}") -``` - - - -
- - Account Creation Date - -
- {defaultOptions.profiles.bob.author}'s account was created on 2020-01-01 -
-
- -## Message Commands - -```python -@bot.message_command(name="Get Message ID") # creates a global message command. use guild_ids=[] to create guild-specific commands. -async def get_message_id(ctx, message: discord.Message): # message commands return the message - await ctx.respond(f"Message ID: `{message.id}`") -``` - - - - Do. Or do not. There is no try. - - -
- - Get Message ID - -
- Message ID: 930650407917748286 -
-
- -
- -:::info Related Topics - -- [Slash Commands](./slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx deleted file mode 100644 index edac55b3..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Localizations -description: Localizations are a way to make your bot more accessible to your users. Learn all about localizations now! ---- - -Localizations are a way to make your bot more accessible to your users. You can localize the command -name, the names of any arguments, and any text that is displayed to the user. - -## Syntax - -```python -@bot.slash_command( - name="ping", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - }, - options=[ - Option( - name="Example", - name_localizations={ - "en-GB": "British Example" - }, - description="Example option that does nothing", - description_localizations={ - "en-GB": "British example option that does nothing" - } - ) - ] -) -async def ping(ctx, example): - responses = {"en-US": "Pong!", - "en-GB": "British Pong!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -@bot.slash_command( - name="ping2", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - } -) -async def ping2(ctx, example: Option(str, "example", name_localizations={"en-GB": "British Example"}, description="Example option that does nothing", description_localizations={"en-GB": "British example option that does nothing"})): - responses = {"en-US": "Pong2!", - "en-GB": "British Pong2!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -``` - -- [`Locales`](https://discord.com/developers/docs/reference#locales) - List of valid locales recognized by Discord diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx deleted file mode 100644 index f4a760b6..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx +++ /dev/null @@ -1,292 +0,0 @@ ---- -title: Slash Commands -description: Learn all about Slash Commands and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On March 24, 2021, Discord added Slash Commands to Discord as an easier, more efficient, and better way of using bot commands. Pycord has implemented Slash Commands into the library, so it's simple, efficient, and familiar. - -:::important - -Remember that Slash Commands require your bot to be invited with the `application.commands` scope or Slash Commands will not show up. Bots already in the guild can simply be invited again with the scope; there is no need to kick the bot. - -::: - -## Syntax - -Let's create a simple Slash Command. - -```py -import discord - -bot = discord.Bot() - -# we need to limit the guilds for testing purposes -# so other users wouldn't see the command that we're testing - -@bot.command(description="Sends the bot's latency.") # this decorator makes a slash command -async def ping(ctx): # a slash command will be created with the name "ping" - await ctx.respond(f"Pong! Latency is {bot.latency}") - -bot.run("TOKEN") -``` - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -Let's go through the code. - -First, we import Pycord's `discord` package. - -Next, we create a [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot) object and assign it to a variable `bot`. - -We then go ahead and use the [`@bot.command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.command) decorator, which registers a new Slash Command. We pass a `description` parameter to give a description to the Slash Command. We can also pass a `name` parameter to change the Slash Command's name. By default, the name of the Slash Command will be the name of the function, in this case, `/ping`. - -We create an async function called `ping` with parameters `ctx`, which, when called, sends the bot's ping/latency using [`ctx.respond`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext.respond). - -## Subcommand Groups - -You might want to group certain commands together to make them more organised. A command group is exactly what it sounds like, a group of individual Slash Commands together. - -In order to make a Slash Command group, you can use the `bot.create_group` function. - -```python -import discord - -bot = discord.Bot() - -# create Slash Command group with bot.create_group -greetings = bot.create_group("greetings", "Greet people") - -@greetings.command() -async def hello(ctx): - await ctx.respond(f"Hello, {ctx.author}!") - -@greetings.command() -async def bye(ctx): - await ctx.respond(f"Bye, {ctx.author}!") - -bot.run("TOKEN") -``` - -Or, you can instead manually make a `SlashCommandGroup` class like so: - -```python -import discord - -math = discord.SlashCommandGroup("math", "Math related commands") - -@math.command() -async def add(ctx, num1: int, num2: int): - sum = num1 + num2 - await ctx.respond(f"{num1} plus {num2} is {sum}.") - -@math.command() -async def subtract(ctx, num1: int, num2: int): - sum = num1 - num2 - await ctx.respond(f"{num1} minus {num2} is {sum}.") - -# you'll have to manually add the manually created Slash Command group -bot.add_application_command(math) -``` - -Here's what the registered subcommands will look like in the Slash Command Menu: - -![Picture of the subcommands in the Slash Command Menu](../../assets/interactions/groups-and-subcommands.jpg) - -You'll notice that there's the name of the Slash Command Group and then the name of the subcommand separated by a space. - -::: - -:::info Cogs - -If you are looking to add Slash Command Groups to cogs, please look at our [Cogs page](../../popular-topics/cogs)! - -::: - -## Sub-groups - -We've made a subcommand group, but did you know that you could create a group inside another? - -```python -from discord import SlashCommandGroup -from math import sqrt - -math = SlashCommandGroup("math", "Math related commands") -advanced = math.create_subgroup("advanced", "Advanced math commands") - -@advanced.command() -async def square_root(ctx, x: int): - await ctx.respond(sqrt(x)) - -bot.add_application_command(math) -``` - -The command created above can be invoked by typing `/math advanced square_root`. - -## Options & Option Types - -Whenever you're using Slash Commands, you might notice that you can specify parameters that the user has to set or can optionally set. These are called Options. - -Options can also include a description to provide more information. [You can learn more about Options in our documentation!](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.Option) - -Since you want different inputs from Options, you'll have to specify the type for that Option; there are a few ways of doing this. - - - - -You could use Type Annotations and let Pycord figure out the option type or explicitly specified using the [`SlashCommandOptionType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.SlashCommandOptionType) enum. - -```python -import discord - -bot = discord.Bot() - -@bot.command() -# pycord will figure out the types for you -async def add(ctx, first: discord.Option(int), second: discord.Option(int)): - # you can use them as they were actual integers - sum = first + second - await ctx.respond(f"The sum of {first} and {second} is {sum}.") - -@bot.command() -# this explicitly tells pycord what types the options are instead -async def join( - ctx, - first: discord.Option(discord.SlashCommandOptionType.string), - second: discord.Option(discord.SlashCommandOptionType.string) -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - add - -
- The sum of 1 and 1 is 2. -
- -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
- - -Instead of Type Annotations, you can also use the option decorator. This is usually done to have type-hinting. - -```python title="Slash Command Type" -import discord - -bot = discord.Bot() - -@bot.command() -@discord.option("first", type=discord.SlashCommandOptionType.string) # type = str also works -@discord.option("second", type=discord.SlashCommandOptionType.string) # type = str also works -async def join( - ctx, - first: str, - second: str, -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
-
- -## Autocomplete - -Discord's autocomplete allows developers to determine option choices that are used in a slash command option. You can do this by defining a function: - -```py -async def get_animal_types(ctx: discord.AutocompleteContext): - """ - Here we will check if 'ctx.options['animal_type']' is a marine or land animal and return respective option choices - """ - animal_type = ctx.options['animal_type'] - if animal_type == 'Marine': - return ['Whale', 'Shark', 'Fish', 'Octopus', 'Turtle'] - else: # is land animal - return ['Snake', 'Wolf', 'Lizard', 'Lion', 'Bird'] - -@bot.slash_command(name="animal") -async def animal_command( - ctx: discord.ApplicationContext, - animal_type: discord.Option(str, choices=['Marine', 'Land']), - animal: discord.Option(str, autocomplete=discord.utils.basic_autocomplete(get_animal_types)) -): - await ctx.respond(f'You picked an animal type of `{animal_type}` that led you to pick `{animal}`!') -``` - - - -
- - animal - -
- You picked an animal type of Marine that led you to pick Shark! -
-
- -:::warning - -Autocomplete can **only** be used with slash commands. - -::: - -:::info Related Topics - -- [Interactions Index](../../interactions) -- [Rules and Common Practices](../../getting-started/rules-and-common-practices) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/index.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/interactions/index.mdx deleted file mode 100644 index 3f695606..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/index.mdx +++ /dev/null @@ -1,242 +0,0 @@ ---- -title: Discord Interactions ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -In December 2020, Discord released their first Interaction: the -[Slash Command](https://discord.com/developers/docs/interactions/application-commands#slash-commands). -Since then, Discord has added many types of Interactions, including: - -[**Application Commands**](https://discord.com/developers/docs/interactions/application-commands) - -- [**Slash Commands**](https://discord.com/developers/docs/interactions/application-commands#slash-commands): - Commands that can be used with the `/` prefix. -- **Context Menu Commands**: Commands that can be used from the right-click menu. - - [**User Commands**](https://discord.com/developers/docs/interactions/application-commands#user-commands): - Commands that can be used on a user by alt-clicking/selecting them. - - [**Message Commands**](https://discord.com/developers/docs/interactions/application-commands#message-commands): - Commands that can be used on a message by alt-clicking/selecting it. - -[**UI Components**](https://discord.com/developers/docs/interactions/message-components) - -- [**Buttons**](https://discord.com/developers/docs/interactions/message-components#buttons): - Buttons are attached to a message and can be clicked on to perform an action. -- [**Select Menus**](https://discord.com/developers/docs/interactions/message-components#select-menus): - Drop-down menus are used to select a number of options from a list. -- [**Modals**](https://discord.com/developers/docs/interactions/message-components#text-inputs): - Form-like modals can be used to ask for input from a user. - -## Application Commands - -Application Commands are another set of new features that are intended to avoid compromising users' safety and privacy. -They're relatively easy to add to your bot, and give people a simpler and safer way to use commands. - -### [Slash Commands](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.SlashCommand) - -Slash Commands were the first Interaction added to Discord. They're easy to use and create, and -is the only prefix commands alternative that does not need Message Content intent. - -:::note - -Preferring prefix commands over Application Commands is **not** a valid reason to apply for the -Message Content intent. Using that as a reason will get your application denied. - -::: - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -This is what a Slash Command looks like. Not too different from a prefix command, -apart from the note telling you who invoked it. A Slash Command's fields can accept any of the following: - -- Members -- Roles -- Channels -- Attachments -- Text - -Just about as good as it gets. - -### [Message](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.MessageCommand) and [User](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.UserCommand) Commands - -Message Commands and User Commands were both introduced at around the same time, and are very similar to each other, so we'll be -introducing them together. These commands can be found in the `Apps` tab when alt-clicking. The only difference between the two is that -Message Commands only appear in the `Apps` tab of a message, while User Commands are found in the `Apps` tab of a user. Message Commands -can be used to quickly report a message, warn a user for a message, and other functions. Likewise, User Commands can be used to add a -user to a ticket, warn a user, and more. - -Here's an example of a Message Command: - - - - Hello World! - - -
- - Reverse Message - -
- Message 930650407917748286 reversed is "!dlroW olleH" -
-
- -
- -And here's an example of a User Command: - - - - {defaultOptions.profiles.dorukyum.author} has been on Discord for a long time - - -
- - User Age - -
- {defaultOptions.profiles.dorukyum.author} is 1 week old. -
- -
- - User Age - -
- {defaultOptions.profiles.bob.author} is 40 years old. -
- - 🤔 - -
- -
- -Pretty cool, right? To learn more about these two, please read the [Context Menus guide](./application-commands/context-menus.mdx). - -## [Application Commands](#application-commands) vs. [Prefix Commands](../extensions/commands/prefixed-commands) - -Ever since Discord was created, apps on it have used prefix commands. Using prefixes meant that you would have to put a -certain character (or string of characters) in front of your command, such as the exclamation mark in `!ping`. The way this -worked was that your bot would listen for messages, pick out the ones that had their specific prefix, and then respond to the command. -Now, Discord is encouraging developers to switch their bots over to Application Commands, which is a new system meant to preserve the -privacy and safety of their users. But why exactly is Discord making us switch? What's the better option, Application Commands or prefix -commands? Below, we'll discuss everything you need to know. - -### Discord's Decision - -Application Commands were conceptualized partly due to privacy concerns. When Discord first began, they weren't entirely concerned about bots -having access to the content of every message that was being sent. However, as Discord grew, this became more of a problem. Hypothetically, bots -could simply log every message they're able to receive via the Discord API and hand their contents over to a company or other third party. This is -a problem, since that data is meant to be used only by Discord. As such, they locked down Message Content, and introduced Application Commands for -bot developers to use instead. - -Prefix commands work by reading messages, as described before. Application Commands, however, don't -work this way; instead, they work by having your bot get information from Discord about when a command was used. This way, Discord can limit -Message Content only to bots that _absolutely_ depend on it, such as auto-moderation bots. - -### Who has to Use Application Commands - -Any verified bot that does not have the Message Content intent must use Application Commands. Discord is allowing developers to submit -applications for the ability to use the intent; however, since they don't want to keep supporting prefix commands due to privacy concerns, -they will automatically decline any application that includes only that as a reason. So, if your bot doesn't have an auto-moderation feature -(or any other functionality that requires Message Content), you're out of luck. - -Unverified bots, however, don't have to use Application Commands. This is because the Message Content intent is a `Privileged Intent`, meaning that -it must be applied for only if your bot is verified or about to be verified. Unverified bots don't have to apply for Privileged Intents, so they can -use them freely. - -So, if your bot is made only for a couple of servers, you can choose between prefix commands and Application Commands. However, if you plan on expanding -your bot's reach, it'll have to use Application Commands. - -### What's the Better Option - -Choosing which is the better option is up to you, if you're starting small. If -you plan on growing your bot, however, you will have to use Application Commands. Since prefix commands are slowly being phased out by Discord, -there isn't much of a choice for developers of larger bots. - -## Message Components - -Message Components are fairly new features in Discord, allowing developers to give their bots a fast -and understandable user interface. Message Components are easy to use and make your bot look modern, -sleek, and downright awesome. - -### [Views](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View) - -Views are not an Application Command nor are they a Message Component. Views are the invisible placeholders, or grid, -that Message Components lie in. Views can have up to 5 [`Action Rows`](https://docs.pycord.dev/en/stable/api/models.html#discord.ActionRow), -and Action Rows can have a maximum of 5 slots. Below, you can find a table showing how many slots a Message Interaction takes up. - -| Component | Slots | -| ------------ | ----------------------------------------------- | -| Buttons | 1 Slot | -| Select Menus | 5 Slots | -| Text Modals | 1 Slot (opened via a Button) | - -So, based on this, you could have a maximum of 25 Buttons in a View with no Select Menus, and 5 Select -Menus in a View with no Buttons. This doesn't mean you can't have them both in a View, however. You can have -a combination of them, such as 20 Buttons and a Select Menu or 10 Buttons and 3 Select Menus. - -### [Buttons](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button) - -Buttons are the first of the Message Components. They allow for quick responses to prompts, such as for canceling or continuing an action. -Of course, these aren't their only uses; people have created awesome things with Buttons, such as calculators, games, and more! - - - - Discord Buttons are awesome! -
- - Click me! - -
-
-
- -
- -This is what a Button looks like, very simple and modern. To learn more about Buttons, refer to our -[Buttons page](./ui-components/buttons.mdx). - -### [Select Menus](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Select) - -Select Menus are the second of Discord's Message Components. They allow users to select from a list of choices, which your bot can then use. -Select Menus are good for things such as choosing features, pages of a help menu, and more. - -![Select Menu Example Image](../assets/interactions/select-menus-example.png) - -This is what a Select Menu looks like. While not looking as good as Buttons, they still look great -and have even greater possibilities. To learn more about Select Menus, please refer to our [Select -Menus page](./ui-components/dropdowns.mdx). - -### [Modal Dialogs](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal) - -Text Modals are the most recently added Message Component in Discord. They're useful for text input and filling out forms, such as a -sign-up for your bot's service. These are meant to replace long bot setup processes by allowing users to fill out multiple text fields, -which avoids having the user send multiple messages for the bot. Modals can be accessed by either invoking an Application Command or by -interacting with another UI Component. - -![Text Modal Example Image](../assets/interactions/modal-example.png) - -This is what a Text Modal looks like, easy to use and one of the most useful Message Components yet. To learn more about Text Modals, -please visit our [Modal Dialogs page](./ui-components/modal-dialogs.mdx). diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json b/i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json deleted file mode 100644 index 7b0a72fe..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "UI Components", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx deleted file mode 100644 index 10557c94..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx +++ /dev/null @@ -1,314 +0,0 @@ ---- -title: Buttons -description: Learn all about implementing buttons in your Discord Bot using Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On May 26, 2021, Discord added a new interaction called buttons. Instead of reactions, bots could now -send buttons and users could use them to interact with bots. This opened up a whole new world of -possibilities for bots. Soon after, developers made calculators, polls, and games like blackjack, UNO, -and even Minecraft! Buttons provided a clear and easy to use interface for interacting with bots. - -So, let's learn how you can add buttons to your bot! - -## Concept - -Buttons weren't the only update to the interactions system in Discord. Discord also added [Select Menus](./dropdowns) and [Modal Dialogs](./modal-dialogs), both of which work very similarly to buttons. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive button. - -```python -import discord - -bot = discord.Bot() # Create a bot object - -class MyView(discord.ui.View): # Create a class called MyView that subclasses discord.ui.View - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.primary, emoji="😎") # Create a button with the label "😎 Click me!" with color Blurple - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") # Send a message when the button is clicked - -@bot.slash_command() # Create a slash command -async def button(ctx): - await ctx.respond("This is a button!", view=MyView()) # Send a message with our View class that contains the button - -bot.run("TOKEN") # Run the bot -``` - -Using this command should return the following message: - - - -
- - button - -
- This is a button! -
- - Click me! - -
-
-
- -
- -As you can see, we create a class called `MyView` that [subclasses](#oop) -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `button_callback` to the `MyView` class with the decorator -[`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button). -This decorator adds a button to a component. This function takes two arguments: the button that was -clicked and the interaction. These arguments are passed to the function when the button is clicked -by the module. We use the [`interaction.response.send_message`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse.send_message) -function to send a message to the channel where the interaction was sent. - -Finally, we create a global slash command called `button` that sends the message, along with the view -that contains a button. - -This is the basic syntax of creating a button. What you create with it is up to you. You can worry -about making your button do amazing things, while Pycord handles the rest! - -## Button Styles - - - -| Name | Usage | Color | -| --------- | ----------------------------------------------------------------------------------------- | ------- | -| Primary | `discord.ButtonStyle.primary` / `discord.ButtonStyle.blurple` | Blurple | -| Secondary | `discord.ButtonStyle.secondary` / `discord.ButtonStyle.grey` / `discord.ButtonStyle.gray` | Grey | -| Success | `discord.ButtonStyle.success` / `discord.ButtonStyle.green` | Green | -| Danger | `discord.ButtonStyle.danger` / `discord.ButtonStyle.red` | Red | -| Link | `discord.ButtonStyle.link` / `discord.ButtonStyle.url` | Grey | - -Check out the [`discord.ButtonStyle`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ButtonStyle) class for more information. - -![Different Button Styles](../../assets/interactions/button-styles.png) - -You can set a button's style by adding the `style` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) decorator. - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.success) - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots, and each button takes up 1 slot. -So, how do we move the buttons to another row? - -This can be done by specifying the `row` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) -decorator. - -:::info The `row` argument - -The row argument specifies the relative row this button belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=1, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") -``` - -## Disabling Buttons - -### Pre-Disabled Buttons - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary, disabled=True) # pass `disabled=True` to make the button pre-disabled - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView()) -``` - -### Disabling Buttons on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - button.disabled = True # set button.disabled to True to disable the button - button.label = "No more pressing!" # change the button's label to something else - await interaction.response.edit_message(view=self) # edit the message's view -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(emoji="😀", label="Button 1", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) - - @discord.ui.button(label="Button 2", style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -Sometimes, you want to have a button that is disabled after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView(timeout=30)) -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a button that is disabled after a certain amount of time, you want to have a -button that is always working. - -Normally, when the bot goes offline, all of its buttons stop working. You will be able to see the -buttons, but nothing will happen when you press them. This is a problem -if you are trying to create a self-role system with buttons, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons will stop working. When the bot comes back online, however, the buttons will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view must have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.button(label="A button", custom_id="button-1", style=discord.ButtonStyle.primary, emoji="😎") # the button has a custom_id set - async def button_callback(self, button, interaction): - await interaction.response.send_message("Button was pressed", ephemeral=True) - -@bot.command() -async def button(ctx): - await ctx.send(f"Press the button! View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many buttons can I have in a message? - -Each message can have a maximum of 25 buttons. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do buttons need any special permissions? - -No new permissions are needed for either the bot or the server to allow bots to use buttons. - -#### Should I replace reactions with buttons for my bot? - -That is up to you. Buttons do provide a cleaner interface for your bot and are easier to use. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx deleted file mode 100644 index 8320f25d..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx +++ /dev/null @@ -1,339 +0,0 @@ ---- -title: Select Menus -description: Learn all about implementing Select Menus or Dropdowns in your Discord Bot with Pycord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Shortly after the buttons were added, Discord added their second message component: Select Menus. Select Menus allow users to choose from a list of items sent by a bot. These are a great substitute for having a user send a number that corresponds to an option. You can even allow users to select multiple options from the Select Menus. This guide will show you the easy and painless ways of using them with Pycord. - -## Concept - -Select Menus aren't the only message component in Discord. There's also [Buttons](./buttons) and [Modal Dialogs](./modal-dialogs). Select Menus make it easy for users to pick one or multiple options from a list provided by a bot. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive select menu. - -```python -import discord - -bot = discord.Bot() - -class MyView(discord.ui.View): - @discord.ui.select( # the decorator that lets you specify the properties of the select menu - placeholder = "Choose a Flavor!", # the placeholder text that will be displayed if nothing is selected - min_values = 1, # the minimum number of values that must be selected by the users - max_values = 1, # the maximum number of values that can be selected by the users - options = [ # the list of options from which users can choose, a required field - discord.SelectOption( - label="Vanilla", - description="Pick this if you like vanilla!" - ), - discord.SelectOption( - label="Chocolate", - description="Pick this if you like chocolate!" - ), - discord.SelectOption( - label="Strawberry", - description="Pick this if you like strawberry!" - ) - ] - ) - async def select_callback(self, select, interaction): # the function called when the user is done selecting options - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") - -@bot.command() -async def flavor(ctx): - await ctx.respond("Choose a flavor!", view=MyView()) - -bot.run("TOKEN") -``` - -There's a lot going on over here! Don't worry, we will go over the code and explain it. - -As you can see, we create a class called `MyView` that subclasses -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `select_callback` to the `View` class with the decorator -[`discord.ui.select`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.select). -This decorator adds a select menu to the view. This decorator takes a few arguments to customize your select menu. Read them in the [Customization section](#customization). - -That was the decorator. Now, the function itself is pretty simple. It takes two parameters, not including `self`. The parameters are `select`: The select menu, and `interaction`: a [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object. Both of these are passed by Pycord, so you just need to specify them in the function! - - - -In the callback, you could do anything you want. You get the two parameters `select` and `interaction` to play around with. Here, we send a message using `await interaction.response.send_message` (where interaction is [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse)) with content `select.values[0]`, which sends the label of the first/only option the user selected. Obviously, this is only an example, and you could do just about anything you want. - -Finally, we create a global slash command called `flavour` that sends a message "Choose a flavor!" along with the view -that contains our select menu. - -This is the basic syntax of creating a select menu. What you create with it is up to you. You can worry -about making your code do amazing things, while Pycord handles the rest! - -## Customization - -#### Select Menu Properties - -- `select_type`: The type of select to create. This must be a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. -- `channel_types`: A list of channel types that can be selected in the menu. This is only valid for selects of `select_type` [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType). -- `options`: A list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. These are the options that can be selected in this menu. -- `placeholder` is the placeholder text shown in the select menu if no option is selected. -- `custom_id`: The ID of the select menu that gets received during an interaction. It is recommended not to set this to anything unless you are trying to create a persistent view. -- `row`: The relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). -- `min_values`: The minimum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `max_values`: The maximum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `disabled`: Whether the select is disabled or not. Defaults to False. - -#### Select Option Properties - -In the `options` parameter, you pass a list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. This class also has a few parameters: - -- `default` (whether the option is selected by default) -- `description` (an additional description, if any) -- `emoji` (a string or an emoji object, if any) -- `label` (the name displayed to users, can be up to 100 characters) -- `value` (a special value of the option, defaults to the label). - -## Select Types - -In addition to regular string selects, you can also have your select menu contain users, roles, mentionables, and channels as its options. You can use these alternative select types by passing a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value for the `select_type` parameter when creating the Select. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.user_select - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -Additionally, you can use shortcut decorators to create a [`discord.ui.Select`](https://docs.pycord.dev/en/master/api/ui_kit.html#discord.ui.select) with a predetermined [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. Using a shortcut decorator, the above code can be rewritten like this: - -```python -class MyView(discord.ui.View): - @discord.ui.user_select() - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -### Specifying Channel Types - -When using a [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType.channel_select) type select menu, you can pass in a list of [`discord.ChannelType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ChannelType) values to limit which types of channels users can choose when interacting with the select menu. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.channel_select, - channel_types=[discord.ChannelType.text, discord.ChannelType.voice] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"You selected {select.values[0].mention}") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots. A button takes a single slot, while a select menu takes up all 5 of them. This means a view can have a maximum of 5 select menus, or any possible combination of select menus and buttons. - -The arrangement of buttons and select menus is generally adjusted by Pycord. However, it is possible to move them to specific relative rows. This is done by specifying the `row` argument. - -:::info The `row` argument - -The row argument specifies the relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero-indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=0, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.select( - row = 1, - options = [...] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") -``` - -## Disabling Select Menus - -### Pre-Disabled Menus - -```python -class MyView(discord.ui.View): - @discord.ui.select( - disabled = True, # pass disabled=True to set the menu as disabled - options = [...] - ) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send("Select and option from the menu!", view=MyView()) -``` - -### Disabling Menus on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - select.disabled = True # set the status of the select as disabled - await interaction.response.edit_message(view=self) # edit the message to show the changes -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def first_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) # edit the message to show the changes - - @discord.ui.select(options = [...]) - async def second_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -You may want a select menu to automatically stop working after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select(ctx): - await ctx.send(view=MyView(timeout=30)) # specify the timeout here -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a select menu that is disabled after a certain amount of time, you want to have a -select menu that is always working. - -Normally, when the bot goes offline, all of its views stop working, even if they don't have a timeout. You will be able to see the -views, but nothing will happen when you try to interact with them. This is a problem -if you are trying to create a self-role system, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons and select menus will stop working. However, when the bot comes back online, the buttons and select menus will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view much have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.select(custom_id="select-1", options = [...]) # a custom_id must be set - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send(f"View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many select menus can I have in a message? - -Each message can have a maximum of 5 select menus. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do select menus need any special permissions? - -No new permissions are needed in the bot or in the server. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx deleted file mode 100644 index 6ee4682f..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Modal Dialogs -description: Learn how you can implement Modals in your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Modal Dialogs, also known as "modals", provide a form-like structure for bots to receive input from users. No extra permissions are needed for bots to send modal dialogs, so it becomes a convenient workaround for bots to receive longer input without needing the Message Content [intent](../../popular-topics/intents). - -## Concept - -Modal Dialogs consist of a title, custom ID, and up to 5 [`discord.ui.InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) components. While creating modals, we generally subclass [`discord.ui.Modal`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal), as we'll see later. - -Unlike other UI Components, Modals cannot be sent with messages. They must be invoked by an Application Command or another UI Component. - -## Usage Syntax - -```py -class MyModal(discord.ui.Modal): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - self.add_item(discord.ui.InputText(label="Short Input")) - self.add_item(discord.ui.InputText(label="Long Input", style=discord.InputTextStyle.long)) - - async def callback(self, interaction: discord.Interaction): - embed = discord.Embed(title="Modal Results") - embed.add_field(name="Short Input", value=self.children[0].value) - embed.add_field(name="Long Input", value=self.children[1].value) - await interaction.response.send_message(embeds=[embed]) -``` - - - - -The `ctx` parameter we define in Application Commands receives an [`ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext) object. Using its `send_modal()` coroutine, you can send a Modal dialog to the user invoking the Application Command. - -```py -@bot.slash_command() -async def modal_slash(ctx: discord.ApplicationContext): - """Shows an example of a modal dialog being invoked from a slash command.""" - modal = MyModal(title="Modal via Slash Command") - await ctx.send_modal(modal) -``` - - - - -The `interaction` parameter we define in UI Components receives an [`Interaction`](https://docs.pycord.dev/en/stable/api/models.html#discord.Interaction) object. The `response` attribute of the object contains an [`InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object, with various coroutines such as `send_message()` and `send_modal()`, which we utilize. - -```py -class MyView(discord.ui.View): - @discord.ui.button(label="Send Modal") - async def button_callback(self, button, interaction): - await interaction.response.send_modal(MyModal(title="Modal via Button")) - -@bot.slash_command() -async def send_modal(ctx): - await ctx.respond(view=MyView()) -``` - - - - -The above example uses an embed to display the results of the modal submission, but you can do anything you want with the text provided by the user. -Each input field can be accessed in the order it was added to the modal dialog, via `Modal.children`. - -## Customization - -A Modal can have up to 5 [`InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) fields. These fields offer some customization. - -Each field has a label which is shown to the user. This is defined with `label`. - -The `style` parameter is used to determine whether it should be a short (single-line) or long (multi-line) input field. - -There are a number of aliases that can be used: - -```x title="Single-line InputTextStyle values:" -short -singleline -``` - -```x title="Multi-line InputTextStyle values:" -paragraph = 2 -multiline = 2 -long = 2 -``` - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Buttons](./buttons) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/introduction.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/introduction.mdx deleted file mode 100644 index 3262c632..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/introduction.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Introduction -description: Pycord Guide is a complete guide for Pycord. Learn how to create Discord Bots today! -sidebar_position: 1 ---- - -Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord, written in Python. Pycord is a maintained fork of [discord.py](https://github.com/Rapptz/discord.py). - -## Before you begin - -Pycord is an advanced and complex Python library. To take advantage of the full capabilities of Pycord, you will need to have a good understanding of Python. You should know the basics of Python and have an understanding of the following concepts: - -- Variables -- Data Types -- Functions -- Packages -- Conditionals -- Loops -- Classes -- Object-Oriented Programming -- Inheritance -- Exception Handling -- Iterators -- Coroutines -- Async/Await - -This list is not exhaustive, but it should give you a good idea of what you need to know to get started. - -When you see an ellipsis - that's the three dots - in this guide, it is a placeholder for code that you need to fill in. Sometimes, it may be code for a command, while other times it could be something simple like a Guild ID. Make sure to replace them before running your bot! - -## Learning Resources - -Here are some good resources to get started or to freshen up your Python knowledge: - -- [Official Beginner's Guide](https://wiki.python.org/moin/BeginnersGuide) -- [Official Tutorial](https://docs.python.org/3/tutorial/) -- [Automate the Boring Stuff, a free online book for complete beginners to programming](https://automatetheboringstuff.com/) -- [Learn Python in y Minutes, complete cheat sheet for people who know programming already](https://learnxinyminutes.com/docs/python3/) -- [Swaroopch's free Python book](http://python.swaroopch.com/) -- [Codeabbey, exercises for beginners](http://www.codeabbey.com/) - -## Credits - -First of all, we would like to thank [Rapptz](https://github.com/Rapptz) for the original [discord.py](https://pypi.org/project/discord.py) library. Pycord is a maintained fork of this library. - -We would also like to thank the [discord.js guide](https://discordjs.guide), which inspired this guide style-wise, and the [original Pycord Guide](https://namantech.me/pycord), which inspired some content in this guide. - -We created this guide using [Docusaurus v2](https://docusaurus.io), a modern static site generator for React. We would also like to thank Danktuary for his [`@discord-message-components/react`](https://www.npmjs.com/package/@discord-message-components/react) package, from which we took the Discord message components. - -And finally, we would like to thank the amazing and loving community of Pycord users, contributors and developers. diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/more/_category_.json b/i18n/hi/docusaurus-plugin-content-docs/current/more/_category_.json deleted file mode 100644 index 2cbe2c56..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/more/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 8, - "label": "More", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/more/community-resources.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/more/community-resources.mdx deleted file mode 100644 index ed3075bd..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/more/community-resources.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Community Resources ---- - -This page showcases the amazing things created by the Pycord community, including bots, Plugins, and more. - -## Plugins - -| Name | Type | GitHub | -| --------------- | ------------ | --------------------------------------------------------------- | -| Music Cord | Music | [NixonXC/cord-music](https://github.com/NixonXC/cord-music) | -| pycord-i18n | Localization | [Dorukyum-pycord-i18n](https://github.com/Dorukyum/pycord-i18n) | -| pycord-multicog | Cogs | [pycord-multicog](https://github.com/Dorukyum/pycord-multicog) | -| EzCord | Utilities | [EzCord](https://github.com/tibue99/ezcord) | - -## Bots - -| Name | Type | Link | -| ------------------------ | ------------ | ----------------------------------------------------------------------------------- | -| Discord-Multipurpose-Bot | Multipurpose | [github](https://github.com/pogrammar/Discord-multipurpose-bot/tree/master/Python) | -| inconnu | Fun & QOL | [github](https://github.com/tiltowait/inconnu) | -| Mai | Multipurpose | [github](https://github.com/TeamMai/Mai) & [website](https://xfghoul.github.io/Mai) | -| Toolkit | Multipurpose | [github](https://github.com/Dorukyum/Toolkit) | diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/more/contributing.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/more/contributing.mdx deleted file mode 100644 index 8fdf31af..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/more/contributing.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: Contributing to the Guide -description: Learn how to contribute to the Pycord Guide. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -This page outlines some of the basic syntax you need to know to contribute to the guide. We recommend you also check out: - -- [Docusaurus's Docs](https://docusaurus.io/docs/) -- [Contributing Rules](https://github.com/Pycord-Development/guide/blob/master/.github/CONTRIBUTING.md) - -## Info - -We use [Docusaurus v2](https://docusaurus.io/) to generate our guide. All the guide pages are generated -from `mdx` files in the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory. -MDX allows you to use JSX in your markdown content. - -## Structure - -Let's visit the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory and check its file structure. - -We can see various folders and a few files in it. Let's talk a bit about the `introduction.mdx` file. At the top, you can see something like: - -```md ---- -title: Introduction -description: ... -sidebar_position: 1 ---- -``` - -Most pages have this at the top. The `title` defaults to the file name. Since the titles need to be Capitalized according to need while the file names are lowercased (sometimes, the file names are shorter than the title!), we set a title ourselves. - -The `description` field is also important. This is the text shown in an embed when the page's link is shared on Discord, Twitter or other websites that support embedded links. Make sure to give a nice an interesting description! - -The `sidebar_position` field is pretty self-explanatory. It sets the position of the page in the sidebar. Most files in categories do not need this since they are sorted alphabetically. - -## Markdown Syntax - -This page quickly outlines some of the syntax that is used in markdown. - -````mdx -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - - ```python - print("We can use code blocks like this.") - ``` - -You can add [links to other websites](https://pycord.dev). You can add images like this: ![alternate text that describes the image](https://pycord.dev/image.png). - -- You can create -- unordered lists like this - -1. Or ordered lists -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` -4. Like this - -# Headers - -## Go - -### Like - -#### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet -```` - -
-Preview -
- -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - -```python -print("We can use code blocks like this.") -``` - -You can add [links to other websites](https://pycord.dev). You can add images by adding ![alt text](@site/static/img/favicon.ico). - -- You can create -- unordered lists like this - -1. Or ordered lists - -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` - -4. Like this - - # Headers - - ## Go - - ### Like - - #### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet - -
-
- -## Admonitions - -We can add warnings, notes, etc. with the following syntax: - -```md -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: -``` - -
-Preview -
- -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: - -
- -
- -## Discord Message Components - -As most files already have the imports for these, it's not that hard to add them. - -First, import the necessary components: - -```tsx -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; -``` - -The div starts like so: - -```tsx - - - - -
-``` - -This is where you list a `DiscordMessage`. - -```tsx - - - Hello! - - - -
-``` - - - - Hello! - - - -
- -It has a pretty straightforward syntax. - -:::tip - -Add a `
` to the end of a component to make the content below it look better. - -::: - -### Slash Commands - -To make a message authored by a slash command, do the following: - -```tsx - - -
- - update - -
- Updated dependencies to the latest version! -
-
-``` - - - -
- - update - -
- Updated dependencies to the latest version! -
-
- -### Buttons - -To make a message with buttons, do the following: - -```tsx - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
-``` - - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
- -## Page Format - -There are a few things you need to take care of: - -1. Make sure that the spelling and grammar is perfect. We have a GitHub action configured that will warn you about spelling errors when you start a pull request. Make sure to commit your changes accordingly. - - As for the grammar, you should try reading the changes you have done and wait for reviews from others. - -2. A common mistake people make is incorrect header style. People often think that the less the important the topic is, the lower it's heading style should be. - - ```md - [PAGE STARTS] - # Topic - ## Less Important Topic - ## Subtopic - ``` - - ```md - [PAGE STARTS] - # About - [Introduction] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - That's VERY wrong. Here's the correct example: - - ```md - [PAGE STARTS] - [Introduction] - ## Topic - ## Less Important Topic - ### Subtopic - ``` - - ```md - [PAGE STARTS] - [Introduction] - - ## About - [More Information] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - Note that the `---`s at the beginning have been skipped here. diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/more/git.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/more/git.mdx deleted file mode 100644 index 0f929d6d..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/more/git.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Installing Git -description: Learn how you can install Git on your system. ---- - -Git is software for tracking changes in any set of files (also known as a "version control" software), usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems). - -Let's see how to install Git on different platforms. - -## Windows - -On Windows, Git can be installed via: - -- [Git for Windows](https://gitforwindows.org) -- [Git Scm](https://git-scm.com/download/windows) - -## Linux - -On Linux, Git is probably already installed in your distribution's repository. If not, you can install it via [Git for Linux](https://git-scm.com/download/linux). You can also install it via the built-in package manager on your Linux distro. - -## Mac - -You can install Git for your macOS computer via [Git for Mac](https://git-scm.com/download/mac). Alternatively, it can be also be installed from the Xcode Command Line Tools by installing Xcode from the App Store, or by running this: - -``` -xcode-select --install -``` - -## Using Package Managers - -You can also install Git using package managers. - -### Chocolatey - -If you use the Chocolatey package manager, you can install Git using: - -``` -choco install git -``` - -### Scoop - -If you use Scoop, you can install Git using: - -``` -scoop install git -``` - -### Brew - -If you're on macOS or Linux, you can install Git using: - -``` -brew install git -``` diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx deleted file mode 100644 index b0b8c7ea..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Virtual Environments -description: Learn how to set up a virtual environment for Pycord. ---- - -## Setup - -Sometimes you want to keep libraries from polluting system installs or use a different version of libraries than the ones installed on the system. You might also not have permissions to install libraries system-wide. For this purpose, the standard library as of Python 3.3 comes with a concept called “Virtual Environment”s to help maintain these separate versions. - -A more in-depth tutorial is found on [Virtual Environments and Packages](https://docs.python.org/3/tutorial/venv.html). - -However, for the quick and dirty: - -Go to your project’s working directory: - -```bash -$ cd your-bot-source -$ python3 -m venv venv -``` - -Activate the virtual environment: - -```bash -$ source venv/bin/activate -``` - -On Windows you activate it with: - -```batch -$ venv\Scripts\activate.bat -``` - -Use pip like usual: - -```bash -$ pip install -U py-cord -``` - -Congratulations. You now have a virtual environment all set up. - -## Additional info - -It can be useful to set up a requirements.txt, so you can just put all of your dependencies in there and have pip install it. -For instance, if you wanted to have the latest 2.0 version of pycord and [pytz](https://github.com/stub42/pytz/blob/master/src/README.rst), just create a file named requirements.txt with the following contents: - -``` -py-cord>=2.0.0 -pytz -``` - -And then (in your virtual environment) you can just execute - -```bash -pip install -r requirements.txt -``` - -To keep from committing your virtual environment to git, you can set up a .gitignore file with the following line -(assuming you named your virtual environment venv like the above example): - -``` -venv/ -``` diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/_category_.json b/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/_category_.json deleted file mode 100644 index c38ea014..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 7, - "label": "Popular Topics", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx deleted file mode 100644 index 5377a6c3..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Cogs ---- - -Cogs, often known as modules or extensions, are used to organize commands into groups. This is useful -for grouping commands that have the same general idea (such as moderation commands). This also helps -to avoid making your bot's files messy and cluttered. - -## Getting Started - -First, you'll need to create a folder to store your cogs, e.g. `cogs/`. - -Then, create a file inside the folder, e.g. `cogs/greetings.py`. By convention, the file name should -be the same as the name of the cog or module. - -We can then create the cog. - -```python title="./cogs/greetings.py" -import discord -from discord.ext import commands - -class Greetings(commands.Cog): # create a class for our cog that inherits from commands.Cog - # this class is used to create a cog, which is a module that can be added to the bot - - def __init__(self, bot): # this is a special method that is called when the cog is loaded - self.bot = bot - - @commands.command() # creates a prefixed command - async def hello(self, ctx): # all methods now must have both self and ctx parameters - await ctx.send('Hello!') - - @discord.slash_command() # we can also add application commands - async def goodbye(self, ctx): - await ctx.respond('Goodbye!') - - @discord.user_command() - async def greet(self, ctx, member: discord.Member): - await ctx.respond(f'{ctx.author.mention} says hello to {member.mention}!') - - math = discord.SlashCommandGroup("math", "Spooky math stuff") # create a Slash Command Group called "math" - advanced_math = math.create_subgroup( - "advanced", - "super hard math commands!" - ) - - @math.command() - async def add(self, a: int, b: int): - c = a + b - await ctx.respond(f"{a} + {b} is {c}.") - - @advanced_math.command() - async def midpoint(self, x1: float, y1: float, x2: float, y2: float): - mid_x = (x1 + x2)/2 - mid_y = (y1 + y2)/2 - await ctx.respond(f"The midpoint between those coordinates is ({mid_x}, {mid_y}).") - - @commands.Cog.listener() # we can add event listeners to our cog - async def on_member_join(self, member): # this is called when a member joins the server - # you must enable the proper intents - # to access this event. - # See the Popular-Topics/Intents page for more info - await member.send('Welcome to the server!') - -def setup(bot): # this is called by Pycord to setup the cog - bot.add_cog(Greetings(bot)) # add the cog to the bot -``` - -You can add any number of commands to your cog, as well as event listeners. However, this code will -not work on its own. In your main bot file, you must add the following code: - -```python -bot.load_extension('cogs.greetings') -``` - -This loads the file `cogs/greetings.py` and adds it to the bot. -The argument of `load_extension` should be your cog's path (e.g. cogs/greetings.py) without the file -extension and with the `/` replaced with `.` - -If you have multiple cogs, you can add them all at once by adding the following code: - -```python -cogs_list = [ - 'greetings', - 'moderation', - 'fun', - 'owner' -] - -for cog in cogs_list: - bot.load_extension(f'cogs.{cog}') -``` - -## Cog Rules - -When using a cog instead of the main file, there are some changes you have to make to your code. This -is because cogs work slightly different from a regular file. - -### The `self` variable - -The self variable is a variable that represents a class. In the case of cogs, `self` represents -the cog. In the `__init__` function, you can see that we have `self.bot = bot`. `bot` represents your -`discord.Bot` or `discord.ext.commands.Bot` instance, which is used for some functions. - -This means that instead of using functions that would usually be accessed via `bot`, you now need -to access them via `self.bot` - -Because we're in a class, all of our commands are methods of that class. Because of this, all of our -functions need to have `self` as the first parameter, where `self` is the cog. Without this, we -wouldn't be able to access our bot instance. - -### Creating Commands - -When creating prefixed commands, your decorator would usually be something like `@bot.command()`. If you're using -cogs, this isn't the case. In a cog, you can't access the bot instance outside of functions, so to -register a function as a command, you must instead use `@commands.command()`. - -Similar to prefixed commands, you'll have to use either the `@discord.slash_command()`, `@discord.user_command()`, -or `@discord.message_command()` decorators for Application Commands. - -Also, when creating a command, make sure that it is indented. If we want a command to be actually -inside a cog, it has to be inside your cog's class. If the command is not inside the cog, -your command becomes useless. - -### Events - -When creating events, you can no longer use `@bot.event` as a decorator. This is because we cannot -access the `bot` variable outside a function. To make an event, you have to use the `ext.commands` -method, `@commands.Cog.listener()`. Events also need `self` as their first parameter. - -And that's it! Cogs are a simple and easy way of organizing your code. Now you can check out how to -create a help command [here](../extensions/commands/help-command). - -:::info Related Topics - -- [Creating a Help Command](../extensions/commands/help-command) -- [Rules and Common Practices](../getting-started/rules-and-common-practices) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Application Commands](../interactions#application-commands) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx deleted file mode 100644 index 3599cc82..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx +++ /dev/null @@ -1,383 +0,0 @@ ---- -title: Error Handling -description: All about handling errors. ---- - -import { - DiscordEmbed, - DiscordInteraction, - DiscordMessage, -} from "@pycord/discord-message-components-react"; -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -## About - -When using the library, errors are frequently raised due to various reasons. These reasons range from the Discord API -failing your bot's request due to missing permissions or an invalid syntax error. - -Before going into error handling, it's best that you learn the basic ways of handling errors. A good resource is: - -- [W3Schools' Guide to Python Try-Except Statements](https://www.w3schools.com/python/python_try_except.asp) - -## Basic Handling - -The most basic way to handle errors is to tackle it at the source. This can be done like so: - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -import asyncio - -import discord - -intents = discord.Intents.default() -intents.message_content = True - -bot = discord.Bot(intents=intents) - - -@bot.slash_command(description="Gets some feedback.") -@discord.option("name", description="Enter your name.") -async def feedback(ctx: discord.ApplicationContext, name: str): - try: - await ctx.respond(f"Hey, {name}! Send your feedback within the next 30 seconds please!") - - def is_author(m: discord.Message): - return m.author.id == ctx.author.id - - feedback_message = await bot.wait_for("message", check=is_author, timeout=30.0) - await ctx.send(f"Thanks for the feedback!\nReceived feedback: `{feedback_message.content}`") - except asyncio.TimeoutError: - await ctx.send("Timed out, please try again!") - - -bot.run("TOKEN") -``` - -If you respond within 30 seconds, the interaction will look like so: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Great bot! - - - Thanks for the feedback! -
- Received feedback: Great bot! -
-
-
- -Otherwise, if you don't respond in time, the interaction will go as follows: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Timed out, please try again! - -
-
- -This basic method of error handling can be extended to handle -many other errors including ones raised directly by py-cord. - -## Per-Command Handling - -This type of error handling allows you to handle errors per each command you have on your bot. -Each and every command can have it's own error handler made to handle specific errors that each command may raise! - -An example of per-command error handling is as follows: - -:::note Bridge Commands - -For these types of commands, it is recommended to utilize global error handling -until [the feature](https://github.com/Pycord-Development/pycord/issues/1388) is added. -::: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot(owner_id=...) # Your Discord user ID goes in owner_id - - -@bot.slash_command(description="A private command...") -@commands.is_owner() # This decorator will raise commands.NotOwner if the invoking user doesn't have the owner_id -async def secret(ctx: discord.ApplicationContext): - await ctx.respond(f"Hey {ctx.author.name}! This is a secret command!") - - -@secret.error -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.NotOwner): - await ctx.respond("Sorry, only the bot owner can use this command!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If your ID is registered as the owner ID, you'll get the following: - - - -
- - secret - -
- Hey Dorukyum! This is a secret command! -
-
-
- -Any other user whose ID doesn't match the bot owner's will get the following: - - - -
- - secret - -
- Sorry, only the bot owner can use this command! -
-
-
- -This local (per-command) error handler can also be used to handle the same types of errors that standard try-except -statements can handle. This is done by using the same method as above with the `isinstance` built-in function. - -## Per-Cog Handling - -Adding error handlers per-command can be quite the task in terms of work if you have a lot. If you have happened to -group your commands in cogs, then you're in luck! You can create an error handler that is specific to a cog and -handles all errors raised by commands inside that cog. - -Here's an example of a bot with a cog that implements its own error handling: - -```python title="./cogs/dm.py" -# This cog is for DM only commands! Sadly, we only have 1 command here right now... - -import discord -from discord.ext import commands - - -class DM(commands.Cog): - def __init__(self, bot: commands.Bot): - self.bot = bot - - @commands.command() - @commands.dm_only() # This decorator will raise commands.PrivateMessageOnly if invoked in a guild context. - async def avatar(self, ctx: commands.Context): - embed = discord.Embed( - title="Avatar", - description=f"Here's your enlarged avatar, {ctx.author.name}!", - color=ctx.author.top_role.color - ) - embed.set_image(url=ctx.author.display_avatar.url) - await ctx.send(embed=embed, reference=ctx.message) - - async def cog_command_error(self, ctx: commands.Context, error: commands.CommandError): - if isinstance(error, commands.PrivateMessageOnly): - await ctx.send("Sorry, you can only use this in private messages!", reference=ctx.message) - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -def setup(bot: commands.Bot): - bot.add_cog(DM(bot)) -``` - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -# This is the main file where we load the DM cog and run the bot. - -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix=commands.when_mentioned_or("!")) -bot.load_extension("cogs.dm") -bot.run("TOKEN") -``` - -If you use this command in a DM context, you'll get the following: - - - - !avatar - - -
- - !avatar - -
- - Here's your enlarged avatar, BobDotCom! - -
-
-
- -Otherwise, if used in a guild context: - - - - !avatar - - -
- - !avatar - -
- Sorry, you can only use this in private messages! -
-
-
- -Per-cog error handling comes in very handy as you can relegate all of your error handling to a single function instead -of spreading it out across several per-command error handlers or inside the commands themselves. - -## Global Handling - -If separating your error handling is not how you would like to handle errors, then global error handling is the way to -go. This method of handling allows you to relegate all handling to a single function that resides within your bot -instance. - -A non-subclassed bot would implement this like so: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot() - - -@bot.slash_command(description="Get the bot's current latency!") -@commands.cooldown(1, 30, commands.BucketType.user) -# ^ This decorator allows one usage of the command every 30 seconds and raises commands.CommandOnCooldown if exceeded -async def ping(ctx: discord.ApplicationContext): - await ctx.respond(f"Pong! `{int(bot.latency*1000)} ms`.") - - -@bot.event -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.CommandOnCooldown): - await ctx.respond("This command is currently on cooldown!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If you've subclassed your bot, the `on_application_command_error` event will be placed inside the subclass without a -`bot.event` decorator and `bot.slash_command` will be replaced with `discord.slash_command`. - -The error handling used above will yield this interaction if the command is used again too quickly: - - - -
- - ping - -
- Pong! 49 ms. -
- -
- - ping - -
- This command is currently on cooldown! -
-
-
- -The only issue regarding global error handling is that, if you have a large amount of commands, the global handler may -start to get crammed with a lot of code. This is where all the previously mentioned handlers can take their place! - -## FAQ - -#### Why does the example in per-cog handling have self at the start of its function signatures? - -This is a feature of classes and allows you to reference the cog object as `self` and get access to the bot object -passed at initialization through `self.bot`. - -If this is new to you, we recommend checking out these helpful resources to learn more about classes and cogs: - -- [W3Schools' Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [Our Cogs Guide Page](./cogs) - -#### How many errors can I handle in a single error handler? - -While all the examples in this guide page only handle one specific error and re-raise all others, all of these -error handlers can be extended to catch many errors. - -In [basic handling](#basic) (i.e. try/except statements) you can do one of two things: - -- Explicitly handle the errors you know might get raised and then have a broad `except Exception as exc:` statement - as a catch-all. -- Catch any and all errors via the catch-all statement mentioned above. - -In [per-command](#percommand), [per-cog](#percog), and [global handling](#global), you can use elif clauses with the -built-in isinstance function to catch specific errors. Atop of this, an else clause can be used to catch any other -errors you either don't want to handle or want to relegate to a different error handler. - -#### Can I use more than one type of error handler at once? - -Thankfully, all of these different ways of error handling can be mixed together, so you don't have to pick just one! -For commands that raise specific errors that no other commands will raise, you can use [per-command](#percommand). -For cogs that raise specific errors that no other cogs will raise, use [per-cog](#percog)! Lastly, for errors that -occur frequently across all commands and cogs, use [global handling](#global)! - -However, one important note to remember is that you should always raise the error again in an error handler if it -isn't handled there! If you don't do this, the error will go ignored and your other handlers won't have a chance to -do their work! - -#### What's the difference between slash and prefixed command error handling? - -Although most examples shown here use slash commands, the [per-cog handling](#percog) section presents a prefixed -command. The main difference you may notice is the change in command signature. - -To make the distinguishing features apparent: - -- Slash commands use `on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException)` - as presented in the [per-command](#percommand) and [global handling](#global) examples. -- Prefixed commands use `on_command_error(ctx: commands.Context, error: commands.CommandError)` as presented in the - [per-cog handling](#percog) example. - -This distinction is made as both types of commands need their own system for handling errors that are specific to -themselves. - -:::info Related Topics - -- [Slash Commands](../interactions/application-commands/slash-commands) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Cogs](./cogs) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx deleted file mode 100644 index 9f4210af..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Intents -description: All about intents in Discord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## What are Intents? - -Intents allow bot developers to "subscribe" to specific events in Discord. This is useful for bots that need to respond to specific events, such as when a user joins a server or sends a message. You could choose to enable all intents or to enable only specific intents that your bot requires. - -## How do I enable intents? - -:::important - -Remember that [Privileged Intents](#what-are-privileged-intents) require you to enable them in the Discord Developer Portal. Verified Discord Bots that don't already have access to them will need to request Discord to allow access. - -::: - - - - -```python -import discord - -bot = discord.Bot(intents=discord.Intents.all()) -``` - - - - - -You can view a list of intents and the events they subscribe to [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```python title="Enabling Intents" -import discord - -bot = discord.Bot(intents=discord.intents.members(bans=True, guilds=True)) -``` - - - - -## What are Privileged Intents? - -Discord defines some intents as "privileged" because of the sensitive information they contain. Currently, there are three privileged intents: `members`, `presences`, and `message_content`. These intents must be enabled in your bot's Developer Portal. Once your bot reaches 100 servers, you will need to verify your bot for these intents to keep working and for your bot to be able to be invited to more guilds. - -:::tip - -Only enable these intents if you need them. These intents give your bot access to quite sensitive information about the users in your guild. These intents are privileged to respect the privacy of users, and you should do that as well. - -Not enabling these intents doesn't mean you won't be able to ban users, but you will be unable to detect when a new user joins a guild, or what game they are playing. The majority of bots won't need all intents. - -::: - -:::info Related Topics - -- [Sharding Bots](sharding) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx deleted file mode 100644 index c3d17197..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Sharding -description: All about Sharding Discord Bots. ---- - -# Sharding - -## What is Sharding? - -Sharding is the process of breaking up your bot into smaller pieces so that it has a better time handling -events. As [Discord's Documentation](https://discord.com/developers/docs/topics/gateway#sharding) puts -it, sharding is "a method of user-controlled guild sharding which allows for splitting events across -several gateway connections." - -Sharding is used only for large bots and takes up additional resources for managing the new processes. -Pycord automatically shards your bot, so the only thing you need to do is use an `AutoShardedClient` -or `AutoShardedBot` class instead of a plain `Client` or `Bot` class. Pretty cool, right? - -Just because you _can_ shard your bot doesn't mean you _should_. While Pycord makes it easy to shard -your bot, it isn't necessary to shard unless your bot is large. Sharding a small bot isn't -just useless, but _harmful_, as it uses extra resources and may slow down your bot. Discord -themselves will let you know when your bot needs sharding, so you won't need to worry about this until they contact you. - -## How Do I Shard in Pycord? - -Sharding in Pycord is straightforward. - -Just replace your `discord.Client`, `discord.Bot`, `commands.Bot` objects -with `discord.AutoShardedClient`, `discord.AutoShardedBot`, `commands.AutoShardedBot` respectively. - -These new objects have been inherited from the original objects, so all the functions from those other types should be present. - -If you want to specify the number of shards your bot uses, -just add the `shards` parameter, along with the number of shards you want. - -## Why Should I Shard my Bot? - -Sharding is very necessary for big bots. While your bot grows, it gets harder for your bot to control -how many guilds it is in and what parts of your code should do what. This is exactly what sharding -handles, it makes all of this easier for your bot. Remember, though, only shard your bot once it's -big enough, and that's at _least_ 1,000 guilds. - -:::info Related Topics - -- [Hosting your Bot](../Getting-Started/hosting-your-bot) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx deleted file mode 100644 index bd2969c1..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Subclassing Bots -description: Subclassing is a popular way of creating Discord Bots. Explore how you can create a Discord bot by subclassing. ---- - -## About - -Subclassing is another popular way of creating Discord Bots. Here, you create a bot by extending a bot class. To some advanced users, this is preferable to creating a bot instance with `bot = discord.Bot()`. - -Subclassing is an intermediate python concept, so we recommend you learn about it before continuing. Some good resources are: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -## Why Subclassing? - -Many developers prefer to subclass their bots for many reasons, some of them being: - -#### Skeletal Frameworks for Bots - -Developers often share their bots code on open-source platforms, mostly GitHub, and allow users to self-host the bot (running their own instance of the bot with the code provided by the developer. Permissions vary in accordance to licences). Here, users find it easier and more convenient to have a small file that imports the custom bot class and runs it, rather than having to go through the code of the bot and find out which file to run. This makes it easier for people not familiar with programming to run and customize the bot, since it often brings down the code to: - -```python title="./main.py" -from src import Bot - -bot = Bot() - -bot.run("TOKEN") -``` - -Here, all the commands are inside the `/src` folder that the user need not bother with. - -#### Running Multiple Instances - -Some developers may need to run multiple instances of their bot (perhaps on different bot accounts). For example, a developer might have a second bot for testing alpha features. This system makes it simpler for the developer, and allows them to maintain multiple versions of the bot in the same directory: - -```python title="./alpha_bot.py" -from src import Bot - -class AlphaBot(Bot): # subclasses Bot - ... # insert any custom configuration - -bot = AlphaBot() - -@bot.slash_command() # adds a new slash command to this subclassed bot -async def alpha_feature(ctx): - await ctx.respond("Alpha Feature!") - -bot.run("TOKEN") -``` - -There are many more reasons to subclass! It's not required, and won't affect the speed of the bot, but it may affect your development process, for the good or for the worse. You don't miss out on any features when you subclass, either. Some developers want the OOP feel, while some just prefer that method and find it easier. - -## Basic Example - -```python -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override the on_ready event - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') - -bot = MyBot() - -@bot.slash_command() # create a slash command -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run('token') -``` - -As you can see, instead of creating a bot object with `bot = discord.Bot()`, we subclass [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). We then create an instance of our new bot class and run it. Notice how we don't need to use the `@event` decorator. - -Here's another example: - -```python title="./src/bot.py" -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override on_ready - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') -``` - -```python title="./src/\_\_init\_\_.py" -from .bot import MyBot # import the MyBot class from the bot.py file -``` - -```python title="./main.py" -from src import MyBot # import MyBot from /src - -bot = MyBot() # create an instance of MyBot - -@bot.slash_command() -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run("TOKEN") # run the bot -``` - -These are just two ways you could do it. There are ton of other structures you can implement. It's up to you. - -So, should you subclass? There are no limitations you face if you decide to subclass your bot, but, once again, it's up to you. - -:::info Related Topics - -- [Making a Help Command](../Extensions/Commands/help-command) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx deleted file mode 100644 index 23220b0e..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Threads -description: Threads with Pycord ---- - -In programming, threads are a way to run multiple processes at the same time. In Discord, threads are -a way to keep multiple conversations going at the same time. Let's take a brief look at how to use threads in Pycord. - -:::tip - -Not all the methods and attributes will be covered in this guide, but you can find them in our documentation! -[Check it out!](https://docs.pycord.dev/en/stable/api/models.html#discord.Thread) - -::: - -## Creating a thread - -With a few simple lines of code, we can create threads in Pycord. - -:::important - -All public threads need a starting message. This message will start the thread. However, private threads -(which are unlocked with having your server boosted to Level 2), do not require a starting message. - -::: - -### Creating thread from a message - -```python title="Creating a Thread from a Message" -message = await ctx.send("My Starting Message") -await message.create_thread(name="thread name", auto_archive_duration=60) -``` - -You may also use other ways to create the thread, for example, by using `on_message` events or by commands. - -### Creating thread in a channel - -```python title="Creating a Thread from a Channel" -channel = bot.get_channel(...) # define this! -await channel.create_thread(name="Thread Name", message=None, auto_archive_duration=60, type=None, reason=None) -``` - -A thread type could be `news_thread`, `public_thread`, `private_thread`. You may use it by passing `type=discord.ChannelType.news_thread`. - -## Deleting Threads - -Deleting Threads is simple. You need to get a thread and then use the `delete` method. - -```python title="Deleting a Thread" -thread = bot.get_channel(thread_id) # you could use other ways to get a thread -await thread.delete() -``` - -## Editing Threads - -**Parameters** - -- `name` (str) – The new name of the thread - -- `archived` (bool) – Whether to archive the thread or not. - -- `locked` (bool) – Whether to lock the thread or not. - -- `invitable` (bool) – Whether non-moderators can add other non-moderators to this thread. Only available for private threads. - -- `auto_archive_duration` (int) – The new duration in minutes before a thread gets automatically archived for inactivity. Must be one of 60, 1440, 4320, or 10080. - -- `slowmode_delay` (int) – Specifies the slow-mode rate limit for users in the thread, in seconds. A value of 0 disables slow-mode. The maximum value possible is 21600. - -```python title="Editing a Thread" -thread = bot.get_channel(id) -await thread.edit( - name="New Name", - archived=True, - locked=True, - slowmode_delay=10, - auto_archive_duration=60, -) -``` - -As you can see, threads are very simple. Once you learn how to use them, it's easy to create whatever you want. - -## FAQ - -### Why am I getting a `Forbidden` error when I try to create a thread? - -A `Forbidden` error occurs when the bot does not have the correct permissions to create threads. - -### Why am I getting an Unknown Message error when I try to create a thread? - -Getting an error looking something like `discord.ext.commands.errors.CommandInvokeError: Command -raised an exception: HTTPException: 400 Bad Request (error code: 10008): Unknown Message`? - -There could be multiple reasons, some of them being: - -- The message does not exist -- The message already has a thread -- The message is in channel x, you are trying to start a thread in channel y. -- The message was deleted. - -:::info Related Topics - -<>{/* I can't think of any related topics for this at the moment. */} - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/voice/_category_.json b/i18n/hi/docusaurus-plugin-content-docs/current/voice/_category_.json deleted file mode 100644 index 8baf3da8..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/voice/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 6, - "label": "Voice" -} \ No newline at end of file diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/voice/index.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/voice/index.mdx deleted file mode 100644 index 835838c6..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/voice/index.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Voice ---- - -Welcome to the guide for voice features in Pycord. - -:::caution -This guide requires previous experience with Pycord and Python. -::: - -## Requirements - -The only requirement which is required for voice features is [`PyNaCl`](https://pypi.org/project/PyNaCl/). -The following features are optional: - -:::tip -Opus is also a required library, but this comes with Pycord. -Some hosts may not come with it, though, so remember to always check if required dependencies are installed. -::: - -- [`FFmpeg`](https://ffmpeg.org) - used for sending/receiving files other than `.pcm` and `.wav` -- [`Pycord.Wavelink`](https://github.com/Pycord-Development/Pycord.Wavelink), - [`Lavalink.py`](https://github.com/Devoxin/Lavalink.py), - [`Wavelink`](https://github.com/PythonistaGuild/Wavelink) or any other Python LavaLink library for music playback. diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/voice/playing.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/voice/playing.mdx deleted file mode 100644 index 7a58baee..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/voice/playing.mdx +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Wavelink Audio Player ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { - defaultOptions, -} from "@site/src/components/DiscordComponent"; - -# About - -Pycord and Wavelink try to keep the playing of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio playing feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/). - -## Starting out - -First you need to run a [Lavalink Server](https://github.com/freyacodes/Lavalink) to connect with. -There a multiple documentations to do this, so we are not covering that here. - -You also need to install the [wavelink](https://github.com/PythonistaGuild/Wavelink) library. - -```py title="Installing wavelink" -python3 -m pip install wavelink -``` - -You will now want to connect to your server via a node. - -```py title="Connect Node with Lavalink" -import discord -import wavelink - -bot = discord.Bot() - -async def connect_nodes(): - """Connect to our Lavalink nodes.""" - await bot.wait_until_ready() # wait until the bot is ready - - nodes = [ - wavelink.Node( - identifier="Node1", # This identifier must be unique for all the nodes you are going to use - uri="http://0.0.0.0:443", # Protocol (http/s) is required, port must be 443 as it is the one lavalink uses - password="youshallnotpass" - ) - ] - - await wavelink.Pool.connect(nodes=nodes, client=bot) # Connect our nodes -``` - -
- -Now you are finished making your node! Next, you will want to: - -1. Making a play command -2. Adding connect events - -### Making a play command - -To make a play command, you will need to make a function to connect and play audio in a voice channel. - -```py title="Play Command Example" -import typing - -@bot.slash_command(name="play") -async def play(ctx, search: str): - # First we may define our voice client, - # for this, we are going to use typing.cast() - # function just for the type checker know that - # `ctx.voice_client` is going to be from type - # `wavelink.Player` - vc = typing.cast(wavelink.Player, ctx.voice_client) - - if not vc: # We firstly check if there is a voice client - vc = await ctx.author.voice.channel.connect(cls=wavelink.Player) # If there isn't, we connect it to the channel - - # Now we are going to check if the invoker of the command - # is in the same voice channel than the voice client, when defined. - # If not, we return an error message. - if ctx.author.voice.channel.id != vc.channel.id: - return await ctx.respond("You must be in the same voice channel as the bot.") - - # Now we search for the song. You can optionally - # pass the "source" keyword, of type "wavelink.TrackSource" - song = await wavelink.Playable.search(search) - - if not song: # In case the song is not found - return await ctx.respond("No song found.") # we return an error message - - await vc.play(song) # Else, we play it - await ctx.respond(f"Now playing: `{song.title}`") # and return a success message -``` - - - -
- - play - -
- Now playing: Never Gonna Give You Up -
-
- -
- -Now that you've done this, the only thing left to do is make your connect events. - -### Adding connect events - -The final step to this guide is connecting the node to your server when the bot goes online. - -To make it, you will want to do the following: - -```py title="Adding connect events" -@bot.event -async def on_ready(): - await connect_nodes() # connect to the server - -@bot.event -async def on_wavelink_node_ready(payload: wavelink.NodeReadyEventPayload): - # Everytime a node is successfully connected, we - # will print a message letting it know. - print(f"Node with ID {payload.session_id} has connected") - print(f"Resumed session: {payload.resumed}") - -bot.run("token") -``` - -Congratulations! You have now implemented voice playing into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-docs/current/voice/receiving.mdx b/i18n/hi/docusaurus-plugin-content-docs/current/voice/receiving.mdx deleted file mode 100644 index 70f91507..00000000 --- a/i18n/hi/docusaurus-plugin-content-docs/current/voice/receiving.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Receiving Voice Samples ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -# About - -Pycord tries to keep the recording of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio recording feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/audio_recording.py). - -## Starting out - -The first thing you want to do is make a cache of your voice connections. This is fairly easy; as -it's just putting a variable with an empty dictionary in our code, such as `connections = {}`. - -You will now want to create your command for recording. - -```py title="Record Command Example" -import discord - -bot = discord.Bot() -connections = {} - -@bot.command() -async def record(ctx): # If you're using commands.Bot, this will also work. - voice = ctx.author.voice - - if not voice: - await ctx.respond("You aren't in a voice channel!") - - vc = await voice.channel.connect() # Connect to the voice channel the author is in. - connections.update({ctx.guild.id: vc}) # Updating the cache with the guild and channel. - - vc.start_recording( - discord.sinks.WaveSink(), # The sink type to use. - once_done, # What to do once done. - ctx.channel # The channel to disconnect from. - ) - await ctx.respond("Started recording!") -``` - - - -
- - record - -
- Started recording! -
-
- -
- -Now you are finished making your command for voice receiving! Next, you will want to: - -1. Make your finished callback -2. Make a stop command - -### Making a Callback - -To make a callback, you will want to define the currently undefined `once_done` function inside -our command, like so: - -```py title="Recorder Callback" -async def once_done(sink: discord.sinks, channel: discord.TextChannel, *args): # Our voice client already passes these in. - recorded_users = [ # A list of recorded users - f"<@{user_id}>" - for user_id, audio in sink.audio_data.items() - ] - await sink.vc.disconnect() # Disconnect from the voice channel. - files = [discord.File(audio.file, f"{user_id}.{sink.encoding}") for user_id, audio in sink.audio_data.items()] # List down the files. - await channel.send(f"finished recording audio for: {', '.join(recorded_users)}.", files=files) # Send a message with the accumulated files. -``` - - - - finished recording audio for:{" "} - {defaultOptions.profiles.bob.author} - - - -
- -Now that you've done this, the only thing left to do is make your stop command. - -### Making a Stop Command - -The final step to this guide is stopping the audio recording. This is the easiest step by far. - -To make it, you will want to do the following: - -```py title="Stop Recording Command" -@bot.command() -async def stop_recording(ctx): - if ctx.guild.id in connections: # Check if the guild is in the cache. - vc = connections[ctx.guild.id] - vc.stop_recording() # Stop recording, and call the callback (once_done). - del connections[ctx.guild.id] # Remove the guild from the cache. - await ctx.delete() # And delete. - else: - await ctx.respond("I am currently not recording here.") # Respond with this if we aren't recording. - -bot.run("token") -``` - -Congratulations! You have now implemented voice recording into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/hi/docusaurus-plugin-content-pagesindex.tsx b/i18n/hi/docusaurus-plugin-content-pagesindex.tsx deleted file mode 100644 index 6ca77bb2..00000000 --- a/i18n/hi/docusaurus-plugin-content-pagesindex.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import DefaultLayout from "@site/src/layouts/DefaultLayout"; -import PYCHero from "@site/src/components/PYCHero"; -import PYCButton from "@site/src/components/PYCButton"; - -export default function Home(): JSX.Element { - return ( - - -
- Imagine a place where you can learn how to create an awesome Discord - bot, equip it with Pycord, and have it running in less than a minute. - Imagine a place where you can learn everything about Pycord. Imagine a - guide. A Pycord Guide! -

- Whether you are a newbie or an experienced developer, you will find - everything you need to know about Pycord here. This guide will teach - you: -
    -
  • How to get a brand new bot running from scratch;
  • -
  • How to create Interactions, Context Menus and Commands;
  • -
  • In-depth concepts such as Embeds, Reactions, Help Commands, Paginators, etc;
  • -
  • Popular Topics such as working with Databases, Sharding, etc;
  • -
  • Ways to handle and manage common errors and best practices for bots;
  • -
  • And Much More!
  • -
-
-
- ); -} diff --git a/i18n/hi/docusaurus-theme-classic/footer.json b/i18n/hi/docusaurus-theme-classic/footer.json deleted file mode 100644 index 82aab2e0..00000000 --- a/i18n/hi/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "copyright": { - "message": "Copyright © 2022-2026 Pycord Development, All rights reserved.", - "description": "The footer copyright" - } -} diff --git a/i18n/hi/docusaurus-theme-classic/navbar.json b/i18n/hi/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 473b847e..00000000 --- a/i18n/hi/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "title": { - "message": "Pycord Guide", - "description": "The title in the navbar" - }, - "item.label.Home": { - "message": "Home", - "description": "Navbar item with label Home" - }, - "item.label.Docs": { - "message": "Docs", - "description": "Navbar item with label Docs" - }, - "item.label.GitHub": { - "message": "GitHub", - "description": "Navbar item with label GitHub" - }, - "item.label.Source": { - "message": "Source", - "description": "Navbar item with label Source" - } -} diff --git a/i18n/it/code.json b/i18n/it/code.json deleted file mode 100644 index 9cce6148..00000000 --- a/i18n/it/code.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "theme.ErrorPageContent.title": { - "message": "This page crashed.", - "description": "The title of the fallback page when the page crashed" - }, - "theme.NotFound.title": { - "message": "Page Not Found", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "We could not find what you were looking for.", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.admonition.note": { - "message": "note", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "tip", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.danger": { - "message": "danger", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "info", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.caution": { - "message": "caution", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "Scroll back to top", - "description": "The ARIA label for the back to top button" - }, - "theme.blog.archive.title": { - "message": "Archive", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "Archive", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "Blog list page navigation", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "Newer Entries", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "Older Entries", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "Blog post page navigation", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "Newer Post", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "Older Post", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.blog.post.plurals": { - "message": "One post|{count} posts", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} tagged with \"{tagName}\"", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "View All Tags", - "description": "The label of the link targeting the tag list page" - }, - "theme.colorToggle.ariaLabel": { - "message": "Switch between dark and light mode (currently {mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "dark mode", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "light mode", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "Breadcrumbs", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription": { - "message": "{count} items", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "Docs pages", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "Previous", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "Next", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "One doc tagged|{count} docs tagged", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "{nDocsTagged} with \"{tagName}\"", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versionBadge.label": { - "message": "Version: {versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "latest version", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "Edit this page", - "description": "The link label to edit the current page" - }, - "theme.common.headingLinkTitle": { - "message": "Direct link to {heading}", - "description": "Title for link to heading" - }, - "theme.lastUpdated.atDate": { - "message": " on {date}", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": " by {user}", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "Last updated{atDate}{byUser}", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "Versions", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "Tags:", - "description": "The label alongside a tag list" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "Close", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "Blog recent posts navigation", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.copied": { - "message": "Copied", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "Copy code to clipboard", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "Copy", - "description": "The copy button label on code blocks" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "Toggle word wrap", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "Toggle the collapsible sidebar category '{label}'", - "description": "The ARIA label to toggle the collapsible sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "Main", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "Languages", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "On this page", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "Read More", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "Read more about {title}", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.blog.post.readingTime.plurals": { - "message": "One min read|{readingTime} min read", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.breadcrumbs.home": { - "message": "Home page", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "Docs sidebar", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "Close navigation bar", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← Back to main menu", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "Toggle navigation bar", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.SearchBar.seeAll": { - "message": "See all {count} results" - }, - "theme.SearchPage.documentsFound.plurals": { - "message": "One document found|{count} documents found", - "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.SearchPage.existingResultsTitle": { - "message": "Search results for \"{query}\"", - "description": "The search page title for non-empty query" - }, - "theme.SearchPage.emptyResultsTitle": { - "message": "Search the documentation", - "description": "The search page title for empty query" - }, - "theme.SearchPage.inputPlaceholder": { - "message": "Type your search here", - "description": "The placeholder for search page input" - }, - "theme.SearchPage.inputLabel": { - "message": "Search", - "description": "The ARIA label for search page input" - }, - "theme.SearchPage.algoliaLabel": { - "message": "Search by Algolia", - "description": "The ARIA label for Algolia mention" - }, - "theme.SearchPage.noResultsText": { - "message": "No results were found", - "description": "The paragraph for empty search result" - }, - "theme.SearchPage.fetchingNewResults": { - "message": "Fetching new results...", - "description": "The paragraph for fetching new search results" - }, - "theme.SearchBar.label": { - "message": "Search", - "description": "The ARIA label and placeholder for search button" - }, - "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "Clear the query", - "description": "The label and ARIA label for search box reset button" - }, - "theme.SearchModal.searchBox.cancelButtonText": { - "message": "Cancel", - "description": "The label and ARIA label for search box cancel button" - }, - "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "Recent", - "description": "The title for recent searches" - }, - "theme.SearchModal.startScreen.noRecentSearchesText": { - "message": "No recent searches", - "description": "The text when no recent searches" - }, - "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { - "message": "Save this search", - "description": "The label for save recent search button" - }, - "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "Remove this search from history", - "description": "The label for remove recent search button" - }, - "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "Favorite", - "description": "The title for favorite searches" - }, - "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "Remove this search from favorites", - "description": "The label for remove favorite search button" - }, - "theme.SearchModal.errorScreen.titleText": { - "message": "Unable to fetch results", - "description": "The title for error screen of search modal" - }, - "theme.SearchModal.errorScreen.helpText": { - "message": "You might want to check your network connection.", - "description": "The help text for error screen of search modal" - }, - "theme.SearchModal.footer.selectText": { - "message": "to select", - "description": "The explanatory text of the action for the enter key" - }, - "theme.SearchModal.footer.selectKeyAriaLabel": { - "message": "Enter key", - "description": "The ARIA label for the Enter key button that makes the selection" - }, - "theme.SearchModal.footer.navigateText": { - "message": "to navigate", - "description": "The explanatory text of the action for the Arrow up and Arrow down key" - }, - "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "Arrow up", - "description": "The ARIA label for the Arrow up key button that makes the navigation" - }, - "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "Arrow down", - "description": "The ARIA label for the Arrow down key button that makes the navigation" - }, - "theme.SearchModal.footer.closeText": { - "message": "to close", - "description": "The explanatory text of the action for Escape key" - }, - "theme.SearchModal.footer.closeKeyAriaLabel": { - "message": "Escape key", - "description": "The ARIA label for the Escape key button that close the modal" - }, - "theme.SearchModal.footer.searchByText": { - "message": "Search by", - "description": "The text explain that the search is making by Algolia" - }, - "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "No results for", - "description": "The text explains that there are no results for the following search" - }, - "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "Try searching for", - "description": "The text for the suggested query when no results are found for the following search" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "Believe this query should return results?", - "description": "The text for the question where the user thinks there are missing results" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "Let us know.", - "description": "The text for the link to report missing results" - }, - "theme.SearchModal.placeholder": { - "message": "Search docs", - "description": "The placeholder of the input of the DocSearch pop-up modal" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "Try again", - "description": "The label of the button to try again rendering when the React error boundary captures an error" - }, - "theme.common.skipToMainContent": { - "message": "Skip to main content", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "Tags", - "description": "The title of the tag list page" - } -} diff --git a/i18n/it/docusaurus-plugin-content-blog/options.json b/i18n/it/docusaurus-plugin-content-blog/options.json deleted file mode 100644 index 9239ff70..00000000 --- a/i18n/it/docusaurus-plugin-content-blog/options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": { - "message": "Blog", - "description": "The title for the blog used in SEO" - }, - "description": { - "message": "Blog", - "description": "The description for the blog used in SEO" - }, - "sidebar.title": { - "message": "Recent posts", - "description": "The label for the left sidebar" - } -} diff --git a/i18n/it/docusaurus-plugin-content-docs/current.json b/i18n/it/docusaurus-plugin-content-docs/current.json deleted file mode 100644 index 36b4849a..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.defaultSidebar.category.Getting Started": { - "message": "Getting Started", - "description": "The label for category Getting Started in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Interactions": { - "message": "Interactions", - "description": "The label for category Interactions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Application Commands": { - "message": "Application Commands", - "description": "The label for category Application Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.UI Components": { - "message": "UI Components", - "description": "The label for category UI Components in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Extensions": { - "message": "Extensions", - "description": "The label for category Extensions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Commands": { - "message": "Commands", - "description": "The label for category Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Pages": { - "message": "Pages", - "description": "The label for category Pages in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Voice": { - "message": "Voice", - "description": "The label for category Voice in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Popular Topics": { - "message": "Popular Topics", - "description": "The label for category Popular Topics in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar defaultSidebar" - } -} diff --git a/i18n/it/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png b/i18n/it/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png deleted file mode 100644 index 7480e1da90a413f8dfe8e13b66a9a2a8c5dc2bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40520 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 CfS#QI diff --git a/i18n/it/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg b/i18n/it/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg deleted file mode 100644 index ce6b5110ab3b4285f55402fb88c1b8a8f6ba9900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78518 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 diff --git a/i18n/it/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png b/i18n/it/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png deleted file mode 100644 index 32a47d0424f1ab420ca363682a12460aff040c91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39618 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 aeS&BlM7jQ%=K2BnBlKRJKmVP^m;VLX8_o0p diff --git a/i18n/it/docusaurus-plugin-content-docs/current/extensions/_category_.json b/i18n/it/docusaurus-plugin-content-docs/current/extensions/_category_.json deleted file mode 100644 index 309b494a..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/extensions/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 5, - "label": "Extensions", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json b/i18n/it/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json deleted file mode 100644 index 652aa4ee..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Bridge" -} \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx b/i18n/it/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx deleted file mode 100644 index 451775d3..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Bridge ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -## Concept - -Let's say that you want to make a command that is both a Slash Command and a Prefixed Command. Now, you could just copy and paste the code from the first command callback to the other and make some adjustments, but that's not very efficient. - -This is where the `ext.bridge` module comes in. It allows you to use one callback to make both a Slash Command and a Prefixed Command. - -### Example Usage - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def hello(ctx): - await ctx.respond("Hello!") - -bot.run("TOKEN") -``` - - - -

- - hello - -
- Hello! - - - - !hello - - - -
- - !hello - -
- Hello! -
- - -## Syntax - -First, instead of using `discord.Bot` or `commands.Bot`, we use `bridge.Bot`. `bridge.Bot` does inherit from `commands.Bot`, so you can do anything with `bridge.Bot` that `commands.Bot` can do. -Then, we define a command with `@bot.bridge_command()`. This makes a Bridge Command, which has both a Prefixed Command counterpart and a Slash Command counterpart. -Next, the callback has access to a `ctx` object, which is the context of the command. This context is either of `BridgeApplicationContext` type or `BridgeExtContext`. Because of that, it makes detecting how the function was called easier. - -### Using Bridge Commands in a Cog - -Like Slash Commands and Prefixed Commands, you can use Bridge Commands in a Cog. You can do this by using the `bridge_command` decorator. Here's an example: - -```python -import discord -from discord.ext import bridge, commands - -class Greetings(commands.Cog): - def __init__(self, bot): - self.bot = bot - - @bridge.bridge_command() - async def hello(self, ctx): - await ctx.respond("Hello!") - - @bridge.bridge_command() - async def bye(self, ctx): - await ctx.respond("Bye!") - -def setup(bot): - bot.add_cog(Greetings(bot)) -``` - -The cog will automatically split the Bridge Command into their Slash Command and Prefixed Command counterparts. - - - -
- - hello - -
- Hello! -
- - - !hello - - - -
- - !hello - -
- Hello! -
- - -
- - bye - -
- Bye! -
- - - !bye - - - -
- - !bye - -
- Bye! -
-
- -### Deferring - -You can defer if you want to communicate to the user that your bot is busy processing the command. This is done by using `ctx.defer()`. For the Slash Command implementation, `ctx.defer()` calls the function that gives out a "Bot is thinking" message. For the Prefixed Command implementation, `ctx.defer()` enables the typing indicator. - - - -### Options - -Options are pretty straightforward. You just specify them like you do with prefixed commands, and you're all set! - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def sum(ctx, a: int, b: int): - await ctx.respond(a + b) - -bot.run("TOKEN") -``` - - - -
- - sum - -
- 4 -
- - - !sum 2 2 - - - -
- - !sum 2 2 - -
- 4 -
-
diff --git a/i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json b/i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json deleted file mode 100644 index 63f8e08e..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx b/i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx deleted file mode 100644 index bf345c07..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Command Groups ---- - -Command groups are a way to create subcommands for your commands. For example, `!afk set` or `!afk -remove`. - -## Syntax - -Creating a command group is very simple. - -```python title="Command Groups Example" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!') - -@bot.group() -async def afk(): - pass - -@afk.command() -async def set(): - ... - -@afk.command() -async def remove(): - ... - -# Another command group - -@bot.group(invoke_without_command=True) # Indicates if the group callback should begin parsing and invocation only if no subcommand was found. -async def math(ctx): - await ctx.send('Subcommand not found') - -@math.command() -async def add(ctx, a: int, b: int): - ... - -@math.command() -async def subtract(ctx, a: int, b: int): - ... -``` - -To create a command group, the command's decorator must be `@bot.group`. Once you have a command with -that decorator, you can use `@function.command()`, such as `@math.command()`. Now, you have subcommand -groups! - - - -:::info Related Topics - -- [Prefixed Commands](./prefixed-commands.mdx) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx b/i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx deleted file mode 100644 index e84fd42d..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx +++ /dev/null @@ -1,481 +0,0 @@ ---- -title: Help Command ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Pycord's `commands` extension comes with a built-in help command. In this guide, we will take a look at them as well as learn how to create your own. Let's dive in! - -:::note - -This guide demonstrates using object-oriented programming and subclassing to make a help command for your -Pycord bot. It is important to understand these two concepts before continuing. - -**Learning Resources**: - -- [W3Schools - Python Subclassing](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools - Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -::: - -## The Wrong Way - -A popular way to create a help command is to disable the built-in help command and create your own. This is not recommended as it will lead to a lot of confusion. - -```python title="The Wrong Way" -bot = commands.Bot(command_prefix='!', help_command=None) -# OR -bot.help_command = None -# OR -bot.remove_command("help") - -@bot.command() -async def help(ctx, *, argument=None): - ... -``` - -While it's possible to create a help command this way, doing so does not utilize the full capabilities -of making one with Pycord. Making a help command with subclassing and OOP will save time and effort. - -## Types of Help Commands - -There are two types of built-in help commands: - -- [`DefaultHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.DefaultHelpCommand) -- [`MinimalHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.MinimalHelpCommand) - -`DefaultHelpCommand` is the command enabled by default. It isn't the best looking, but `MinimalHelpCommand` can help make it look a bit better. - - - - -```python title="Default Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.DefaultHelpCommand()) # help_command is DefaultHelpCommand by default so it isn't necessary to enable it like this -# We enable it here for the sake of understanding - -... - -bot.run("token") -``` - - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- - -```python title="Minimal Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.MinimalHelpCommand()) - -... - -bot.run("token") -``` - - - - !help - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
- -
- -
- -## Updating Built-in Help Commands - -Let's try to make the `MinimalHelpCommand` look better. We can do this by putting its content in an -embed. - -```python title="Minimal Help Command Example" -bot = commands.Bot(command_prefix='!') - - -class MyNewHelp(commands.MinimalHelpCommand): - async def send_pages(self): - destination = self.get_destination() - for page in self.paginator.pages: - emby = discord.Embed(description=page) - await destination.send(embed=emby) - -bot.help_command = MyNewHelp() -``` - -Let's go through the code. - -First, we create a new class called `MyNewHelp`. This class is a subclass of `MinimalHelpCommand`. - -Next, we override the `send_pages` method. This method is responsible for sending the help command to -the user. We override this method because we don't want to change the content of the pages, just how -they are sent. - -We use the `get_destination` method to get the destination of the message. This is the channel or use that the help -command is to be sent to. - -We use the `paginator.pages` property to get the different pages of the help command. We put the page -in an embed, and then send the embed to the destination channel. - -Finally, we set this as our new help command using `bot.help_command = MyNewHelp()`. - - - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a - category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
-
- -## Creating Your Help Command - -Not satisfied with the built-in help commands? You can create your own! - -For this, we will subclass the `HelpCommand` class. - -There are 4 methods that we need to override: - -- `HelpCommand.send_bot_help(mapping)` that gets called with `help` -- `HelpCommand.send_command_help(command)` that gets called with `help ` -- `HelpCommand.send_group_help(group)` that gets called with `help ` -- `HelpCommand.send_cog_help(cog)` that gets called with `help ` - -### Bot Help - -```python title="Bot Help Example" -class MyHelp(commands.HelpCommand): - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help") - for cog, commands in mapping.items(): - command_signatures = [self.get_command_signature(c) for c in commands] - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's go through the code. - -- First, we create a new class called `MyHelp`. This class is a subclass of `HelpCommand`. - -- Next, we override the `send_bot_help` method. This method is responsible for sending the main help - command to the user. - -- We create an embed with the title "Help". - -- We iterate through `mapping.items()`, which returns a list of tuples, the first element being the - cog and the second element being a list of commands. - -- By using `self.get_command_signature(c)` we get the signature of the command, also known as the - `parameters` or `arguments`. - -- There is a chance that the cog is empty, so we use `if command_signatures:`. - -- We get the name of the cog using `getattr(cog, "qualified_name", "No Category")`. This calls the - cog's attribute `qualified_name` which returns "No Category" if the cog has no name. - -- We add a field to the embed with the name of the cog and the value of the command signatures. - -- Finally, we send the embed to the channel. - -Let's improve the code a little. - -```python title="Improved Bot Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - command_signatures = [self.get_command_signature(c) for c in filtered] - - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Now the help command won't show commands that the user can't use, as well as aliases for commands. -Let's get the help command to show command aliases. - -### Command Help - -This function is called when the user uses `help `. - -```python title="Command Help Example" -class MyHelp(commands.HelpCommand): - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command), color=discord.Color.random()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's quickly go through the code we haven't discussed yet. - -- In line 3, we create an embed with a title the signature of the command (so that the title of the - embed looks like ` [parameter]`), and a random color. - -- In lines 4 and 5, we get the command's `help` description and add it to the embed. The help description - of a command can be specified in the docstrings of a command function. For example: - - ```` - ```python - @bot.command() - async def ping(ctx): - """Returns the latency of the bot.""" - await ctx.send(f"Pong! {round(bot.latency * 1000)}ms") - ``` - ```` - -- Line 6 is shorthand for - - ```python - alias = command.aliases - if alias: - ... - - # is the same as - - if alias := command.aliases: - ... - ``` - - A very helpful (but not well-known) Python shorthand! - -- In line 7, we get the aliases of the command and add them to the embed. - -### Cog Help - -This is pretty easy! - -```python title="Custom Cog Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_cog_help(self, cog): - embed = discord.Embed(title=cog.qualified_name or "No Category", description=cog.description, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(cog.get_commands()): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Once again, we create an embed, get the commands that the user can use, and add them to the embed. - -### Group Help - -Similar to the cog help, this is pretty easy! - -```python title = "Custom Group Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_group_help(self, group): - embed = discord.Embed(title=self.get_command_signature(group), description=group.help, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(group.commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Add all of these methods together, and you have a fully functioning help command! - -
-Click to see the final code for this section -
- -:::note - -The following code has been slightly edited from the tutorial version. - -::: - -```python title="Custom Help Command Example" -class SupremeHelpCommand(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - if command_signatures := [ - self.get_command_signature(c) for c in filtered - ]: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command) , color=discord.Color.blurple()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_help_embed(self, title, description, commands): # a helper function to add commands to an embed - embed = discord.Embed(title=title, description=description or "No help found...") - - if filtered_commands := await self.filter_commands(commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No help found...") - - await self.get_destination().send(embed=embed) - - async def send_group_help(self, group): - title = self.get_command_signature(group) - await self.send_help_embed(title, group.help, group.commands) - - async def send_cog_help(self, cog): - title = cog.qualified_name or "No" - await self.send_help_embed(f'{title} Category', cog.description, cog.get_commands()) - -bot.help_command = SupremeHelpCommand() -``` - -
-
- -## Command Attributes - -How can you add cooldowns, set aliases, and change the name of help commands? Command attributes can -help you do all of that, and more! - -```python title="Help Command Attributes" -attributes = { - 'name': "help", - 'aliases': ["helpme"], - 'cooldown': commands.CooldownMapping.from_cooldown(3, 5, commands.BucketType.user), -} - -# You need to use CooldownMapping.from_cooldown(rate, per, type) - -bot.help_command = MyHelp(command_attrs=attributes) -``` - -## Error Handling - -When a user attempts to use a command that does not exist, we need to inform the user. -We can do this by overriding the `send_error_message` function. - -```python title="Custom Help Error Example" -class MyHelp(commands.HelpCommand): - async def send_error_message(self, error): - embed = discord.Embed(title="Error", description=error, color=discord.Color.red()) - channel = self.get_destination() - - await channel.send(embed=embed) -``` - - - - !help update_pycord - - - - Command 'update_pycord' not found. - - - - -## Credits - -Most of the content from this guide is from -[InterStella0's walkthrough guide on subclassing HelpCommand](https://gist.github.com/InterStella0/b78488fb28cadf279dfd3164b9f0cf96). -Thanks to InterStella0 for making this guide amazing. - -:::info Related Topics - -- [Subclassing Bots](../../Popular-Topics/subclassing-bots) -- [Prefixed Commands](./prefixed-commands) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx b/i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx deleted file mode 100644 index 87bef7ac..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx +++ /dev/null @@ -1,324 +0,0 @@ ---- -title: Prefixed Commands -description: Learn how to use the commands extension for Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Before Discord added slash commands, all bots had prefixed commands. A user would type the bot's prefix -followed by a word or phrase to invoke a command, such as `?help` or `!help`. -However, this prefixed commands system isn't native to Discord! Developers made use of an `on_message` -event to check if the message began with a certain character, then invoke the command. Every time a -message was sent, the bot would see the message and check for its "prefix" - -The syntax becomes a little more complicated when you want to have multiple commands. There are several -disadvantages to this system. This is where the commands extension comes in. `ext.commands` has -various advantages, such as: - -- Simpler syntax -- Easier to use -- Easier to parse user input -- Comes with built-in help commands -- Comes with a built-in system for categorizing commands - - - - -```python title="Prefixed Commands with Events" -import discord - -client = discord.Client() - -@client.event -async def on_message(message): - if message.content.startswith("!ping"): - await message.channel.send("Pong!") - - elif message.content.startswith("!announce"): - if len(message.content.split(" ")) < 3: - await message.channel.send("You need to specify a title and a message. Correct usage: `!announce Hello Hello everyone!`") - return - - msg = message.content.split(" ", 2) - title = msg[1] - content = msg[2] - - await message.channel.send("**{}**\n{}".format(title, content)) - - elif message.content.startswith("!"): - await message.channel.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !help - - - Unknown Command. - -
- -
- - -```python title="The Commands Extension" -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix="!", intents=intents) - -@bot.command() -async def ping(ctx): - await ctx.send("Pong!") - -@bot.command() -async def announce(ctx, title, *, message): - await ctx.send("**{}**\n{}".format(title, message)) - -@bot.event -async def on_command_error(ctx, error): - if isinstance(error, commands.CommandNotFound): - await ctx.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !pycord - - - Unknown command. - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
- !announce -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The commands extension has many more uses. This example only showcases the basic features mentioned -in the previous example. Other things you can do with the commands extension include using a different -built-in help command and creating your own. The following tutorials showcase these. - -::: - -
-
- -## Syntax - -Before we check out the syntax, let's take a look at the bot classes. - -> `discord.Client` - Contains only events. -> -> `discord.Bot` - Subclasses `discord.Client`, adds commands. -> -> `discord.ext.commands.Bot` - Subclasses `discord.Bot`, adds prefixed commands, cogs, and more. - -This means that `discord.ext.commands.Bot` has both slash commands and prefixed commands, as well as -events, cogs and more. - -Now let's look at the syntax. - -```python title="A Simple Prefixed Bot" -import discord -from discord.ext import commands # Import the commands extension -# discord.ext.commands are not the same as discord.commands! - -intents = discord.Intents.default() #Defining intents -intents.message_content = True # Adding the message_content intent so that the bot can read user messages - -bot = commands.Bot(command_prefix="!", intents=intents) # You can change the command prefix to whatever you want. - -@bot.command() # This is the decorator we use to create a prefixed command. -async def ping(ctx): # This is the function we will use to create the command. - await ctx.send("Pong!") # This is the response the bot will send. - - -bot.run("token") # Run the bot with your token. -``` - - - - !ping - - - Pong! - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The help command is a built-in command and is enabled by default. You will learn more about it in the -following guides. - -::: - -## Parameters - -Prefixed commands can take parameters, just like slash commands. You can specify the parameters in -the function itself. - -```python title="Parameters Example 1" -@bot.command() -async def echo(ctx, *, message): - await ctx.send(message) -``` - -`ctx` is the context of the message. `*` means that the parameter can be any number of words. `message` -is the parameter. If you had not passed `*`, `message` would only have been one word. - -For example, if a user had used `!echo hello world`, `message` would have been `hello`. Since we -passed `*`, `message` is `hello world`, or the rest of the message. - -We can pass multiple parameters too! - -```python title="Parameters Example 2" -@bot.command() -async def echo(ctx, channel:discord.TextChannel, title, *, message): - await channel.send("**{}**\n{}".format(title, message)) -``` - -In the example above, `channel` is a parameter that is of type `discord.TextChannel`. When you -specify the type of the parameter, Pycord will automatically try to convert the parameter to that type. -That is why you can use `channel.send` directly without needing to convert it first. - -We also have a new parameter, `title`. This does not have a type, so it will be a string. `*` means -that the rest of the message belongs to the next parameter, in this case, `message`. - -When a user types `!echo #general Greetings! Hello World!`, `channel` will be the text channel -`#general`, `title` will be `Greetings!` and `message` will be `Hello World!`. - -Let's take an example where the user passes `!echo #general Holiday Greetings! Greetings to you all!`. -Here, the user wants the title to be "Holiday Greetings!" and the message to be "Greetings to you all!". -However, since Pycord parses the message at whitespaces, the title will end up being "Holiday" and the -message "Greetings! Greetings to you all!". The user can prevent this by typing `!echo "Holiday -Greetings!" Greetings to you all!`. - - - - - - !echo #general Holiday Greetings! Greetings to you all! - - - Holiday -
- Greetings! Greetings to you all! -
- - !echo #general "Holiday Greetings!" Greetings to you all! - - - Holiday Greetings! -
- Greetings to you all! -
-
- -Let's check out another example for parameters and parameter types. - -```python title="Parameters Example 3" -import random - -@bot.command() -async def gtn(ctx, guess:int): - number = random.randint(1, 10) - if guess == number: - await ctx.send("You guessed it!") - else: - await ctx.send("Nope! Better luck next time :)") -``` - -If you had not specified the type of the parameter, it would have been a string. And since `"5"` is not -the same as `5` in python, the bot would have responded with "Nope! Better luck next time :)". -Even if you do not specify the type of the parameter, you can still convert it later on, in this case, -with `int(guess)`. - -:::info Related Topics - -- [Command Groups](groups) -- [Rules and Common Practices](../../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json b/i18n/it/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json deleted file mode 100644 index baeba701..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Pages", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx b/i18n/it/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx deleted file mode 100644 index be90b035..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Paginator Basics ---- - -# Paginator Basics - -## [Page](https://docs.pycord.dev/en/stable/ext/pages/index.html#page) - -This class contains two attributes: `content` and `embeds`, which correspond to the attributes of the same name on the -`discord.Message` class. -To create a new Page, use the following syntax: - -```py -import discord -page = Page(content="My Page Content", embeds=[discord.Embed(title="My First Embed Title")]) -``` - -## [PageGroup](https://docs.pycord.dev/en/stable/ext/pages/index.html#pagegroup) - -This class represents a group of pages. It uses most of the same parameters as `Paginator`, which allows each -`PageGroup` to effectively have its own settings and behaviours. - -## [Paginator](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator) - -This is the main class for `ext.pages`, and is used to control most of the functionality of the extension. - -In its most basic form, with no arguments provided (default values listed below), a paginator can be created like so: - -```py title="Paginator Example" -import discord -from discord.ext.pages import Paginator, Page - -my_pages = [ - Page( - content="This is my first page. It has a list of embeds and message content.", - embeds=[ - discord.Embed(title="My First Embed Title"), - discord.Embed(title="My Second Embed Title"), - ], - ), - Page( - content="This is my second page. It only has message content.", - ), - Page( - embeds=[ - discord.Embed( - title="This is my third page.", - description="It has no message content, and one embed.", - ) - ], - ), -] -paginator = Paginator(pages=my_pages) -``` - -The only required parameter for `Paginator` is the `pages` parameter, which is usually a list of `Page` objects. - -You can also pass in a list of `PageGroup` objects, a list of strings, a list of embeds, or a list of lists of embeds. - -Once the `Paginator` instance is created, you can call either -[`Paginator.send()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.send) -or [`Paginator.respond()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.respond) -to send a message or response with the paginator's contents. - -#### Depending on what's being passed to the `pages` parameter, the behaviour of the paginator may differ: - -- Passing a list of `PageGroup` objects will essentially treat each `PageGroup` as its own Paginator, with most - `Paginator` attributes able to be set independently for each `PageGroup`. - \- Each `PageGroup` accepts its own `pages` parameter, which inherits the same behaviour as the `pages` parameter - of `Paginator`, except it cannot contain other `PageGroup` objects. -- If a page is a `Page` object, this will allow you to specify both the `discord.Message.content` and - `discord.Message.embeds` attributes for a page. - \- **This is the preferred method of defining a page.** -- If a page is a string, this will be used for the `discord.Message.content` attribute. This type of page cannot have - any embeds. -- If a page is a list of embeds, this will be used for the `discord.Message.embeds` attribute. This type of page - cannot have any message content. -- If a page is a list of lists of embeds, each parent list item will create a page containing all embeds from its - child list. This type of page cannot have any message content. - -#### Parameters for the `Paginator` class which have default values: - -- `show_disabled` **:** `True` - - Show buttons that are disabled (i.e. can't be clicked) -- `author_check` **:** `True` - - Only the author can interact with the paginator. -- `timeout` **:** `180` _(seconds)_ - - The paginator will time out and become inactive after this many seconds. -- `disable_on_timeout` **:** `True` - - If the paginator times out, it will be automatically disabled and all buttons will be unusable. -- `use_default_buttons` **:** `True` - - Use the default set of 4 buttons and a page indicator. -- `show_indicator` **:** `True` - - When using the default buttons, shows a middle 5th button with the current/total page numbers. - -**For other parameters that can be set on initialization, please check the -[API Reference](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator)** - -## [PaginatorButton](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatorbutton) - -This class represents a button used to navigate between the pages of a paginator. It's also used to create the page -indicator. - -When creating your own custom buttons, you can either use this class directly or subclass it to add any additional -functionality you may need. - -To add custom buttons to the paginator instead of the default navigation buttons, you have two options to do so: - -1. **Using the `custom_buttons` parameter of `Paginator`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - buttons = [ - PaginatorButton("first", label="<<-", style=discord.ButtonStyle.green), - PaginatorButton("prev", label="<-", style=discord.ButtonStyle.green), - PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True), - PaginatorButton("next", label="->", style=discord.ButtonStyle.green), - PaginatorButton("last", label="->>", style=discord.ButtonStyle.green), - ] - paginator = Paginator( - pages=["Page 1", "Page 2", "Page 3"], - show_indicator=True, - use_default_buttons=False, - custom_buttons=buttons, - ) - ``` -2. **Using `Paginator.add_button()`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"], use_default_buttons=False) - paginator.add_button(PaginatorButton("prev", label="<", style=discord.ButtonStyle.green)) - paginator.add_button(PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True)) - paginator.add_button(PaginatorButton("next", label=">", style=discord.ButtonStyle.green)) - ``` - -If you want to use the default navigation buttons, but not all of them, you can also use `Paginator.remove_button()` to -selectively remove them: - -```py -from discord.ext.pages import Paginator - -paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"]) -paginator.remove_button("first") -paginator.remove_button("last") -``` - -## [PaginatorMenu](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatormenu) - -This class represents the `discord.Select` menu used to navigate between `PageGroup` instances. In most situations, you -will not need to interact with this class directly. - -If you do subclass it, you'll likely want to call `super()` in your `__init__` method to ensure that the `PageGroup` -navigation functionality is retained. - -## Usage Examples - -For a comprehensive list of examples showing all `Paginator` functionality, please see the -[example in cog form](https://github.com/Pycord-Development/pycord/blob/master/examples/views/paginator.py) in the repo. - -## Support and Feedback - -If you have any questions, suggestions, or feedback for `ext.pages`, please join the -[Discord server](https://discord.gg/pycord). diff --git a/i18n/it/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx b/i18n/it/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx deleted file mode 100644 index b8d68925..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Paginator FAQ ---- - -# Paginator FAQ - -- **What's the difference between `Paginator.send()` and `Paginator.respond()`?** - - `Paginator.send()` is used to send a channel message (DMChannel or TextChannel) with the paginator. - - `Paginator.respond()` is used to send an interaction response (or followup) message with the paginator. - -- **How can the bot send a paginator to a different destination than where it was invoked?** - - Use the `target` parameter in `Paginator.send()` or `Paginator.respond()`. - - You can also set the `target_message` parameter to control what's shown as a response where the paginator was originally invoked. - - For `Paginator.respond()`, this parameter is required if `target` is set, as an interaction requires being responded to. - -- **How can I change the paginator's behavior without re-creating and re-sending it?** - - Use the `Paginator.update()` method. - -- **How can I make the bot actually do something with the contents of a page?** - - Use the (upcoming) `Paginator.page_action()` method. diff --git a/i18n/it/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json b/i18n/it/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json deleted file mode 100644 index 36dfb009..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Tasks" -} \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx b/i18n/it/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx deleted file mode 100644 index 848f6066..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Tasks ---- - -## Concept - -So you want to run a background task running at some specified interval? Thankfully, that's a common thing to do, whether you're working with some API or handling some background logic don't worry, the Pycord tasks extension is here to make life easier for you! - -With the tasks extension, you can make background tasks without worrying about the asyncio hell and mind bogglers like "what if my internet dies" and "how do I handle reconnecting" with the added benefit of a lot of useful additions that are one line of code away! - -### Example Usage - -```py -import discord -from discord.ext import tasks - -bot = discord.Bot() - -@bot.event -async def on_ready(): - very_useful_task.start() - -@tasks.loop(seconds=5) -async def very_useful_task(): - print('doing very useful stuff.') - -bot.run("TOKEN") -``` - -If you do run this code in your terminal you should see something like this after about 15 seconds: - -``` -doing very useful stuff. -doing very useful stuff. -doing very useful stuff. -``` - -For a more useful example here's a task in a cog context ripped straight from the [docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#recipes): - -```py -from discord.ext import tasks, commands - -class MyCog(commands.Cog): - def __init__(self): - self.index = 0 - self.printer.start() - - def cog_unload(self): - self.printer.cancel() - - @tasks.loop(seconds=5) - async def printer(self): - print(self.index) - self.index += 1 -``` - -As you'd expect this will increment a number and print it out every 5 seconds like so: - -```sh -0 -# 5 seconds later -1 -# 5 more seconds later -2 -# ... -``` - -## [Tasks](https://docs.pycord.dev/en/stable/ext/tasks/index.html) - -Now let's get into the nitty-gritty of tasks. - -As you've seen tasks can work in both outer scope and class contexts and the handle is roughly the same, you define a task using the `tasks.loop` decorator and use the `start` method to start it, the difference is you add the `self` argument when in a class context so since most people have all their bot's code in Cogs all the following code blocks will be in a Cog context to make it easy to copy it then apply whatever modifications you might need! - -### [Creating a task](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop) - -A look at `discord.ext.tasks.loop`'s definition in the documentation reveals that: - -1. As you've seen before it expects the time between each execution, that however doesn't have to be in seconds as - there are `seconds`, `minutes` and `hours` parameters to make it easier for us, they can also be floats in case you want - ultra-precision. -2. You can also pass in a `datetime.time` object or a sequence of them in the `time` parameter which will make it run - at the specified time(s). -3. You can pass in how many times a loop runs before it stops by passing in the `count` parameter, you can use `None` - to make it run forever which is also the default. -4. The loop function **_must_** be a coroutine. - -These are all really useful, and they aren't the only parameters so if you want to know more about them check out the -[docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop)! - -### Attributes - -A task has the following attributes: - -- `current_loop`: The current loop the task is on. -- `hours`, `minutes`, `seconds`: attributes that represent the time between each execution. -- `time`: A list of datetime.time objects that represent the times the task will run, returns `None` if no datetime - objects were passed. -- `next_iteration`: A `datetime.datetime` object that represents the next time the next iteration of the task will - run, can return `None` if the task stopped running. - -These attributes serve as a really powerful asset to get info about your loop. - -### Example - -Now let's create a cog that handles a leaderboard we have in our bot using Tasks then explain what we did after that and -also provide a refresher of how slash commands groups work in cogs. - -For the sake of this example let's pretend that we have a leaderboard module that does all the leaderboard handling for -us and that computing the leaderboard is very expensive computationally wise, so we want to store one version of it that -gets regularly updated instead of generating it every time someone calls the `/leaderboard view` command. - -```py -from discord.ext import tasks, commands -from discord.commands import SlashCommandGroup, CommandPermissions - -from leaderboard import * # Mock leaderboard module. - -class LeaderboardCog(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.update_leaderboard.start() - self.leaderboard_embed = generate_leaderboard_embed() - - leaderboard = SlashCommandGroup(name='leaderboard', description='Leaderboard commands.') - - @tasks.loop(minutes=10) - async def update_leaderboard(self): - print('Updating leaderboard...') - await update_leaderboard() - self.leaderboard_embed = generate_leaderboard_embed() - - @update_leaderboard.before_loop - async def before_update_leaderboard(self): - await self.bot.wait_until_ready() - print("About to start updating leaderboard.") - - @update_leaderboard.after_loop - async def after_update_leaderboard(self): - leaderboard_cleanup() - print("Stopped updating leaderboard.") - - @update_leaderboard.error - async def update_leaderboard_error(self, error): - print(f"Oh no, an error occurred while updating the leaderboard. Error: {error}") - - @leaderboard.command() - async def view(self, ctx): - await ctx.respond(embed=self.leaderboard_embed) - - @leaderboard.command() - async def update_info(self, ctx): - await ctx.respond(f"""***Leaderboard Info***\n - Last update: {(600 - self.update_leaderboard.next_iteration.timestamp())//60} minutes ago.\n - Next update: in {self.update_leaderboard.next_iteration.timestamp() // 60} minutes.\n - Time between loops: {self.update_leaderboard.minutes} minutes.\n - Times updated this session: {self.update_leaderboard.current_loop}. - Running? {self.update_leaderboard.is_running()} - Failed? {self.update_leaderboard.failed()}""", ephemeral=True) - - # Now for the owner only commands: - - leaderboard_config = SlashCommandGroup(name="leaderboard_config", description="Leaderboard configuration commands", permission=[CommandPermissions("owner", 2, True)]) - - @leaderboard_config.command() - async def set_time_between_updates(self, ctx, minutes: int): - self.update_leaderboard.change_interval(minutes=minutes) - await ctx.respond(f"Set time between updates to {minutes} minutes.") - - @leaderboard_config.command() - async def stop(self, ctx): - self.update_leaderboard.stop() - await ctx.respond("Stopped the leaderboard update.") - - @leaderboard_config.command() - async def restart(self, ctx): - self.update_leaderboard.restart() - await ctx.respond("Restarted the leaderboard update.") - -def setup(bot): - bot.add_cog(LeaderboardCog(bot)) -``` - -Phew, that was quite a bit of code. - -Now to explain what's going on: - -First things first we create a cog and in its `__init__` function we start the `update_leaderboard` task and generate -the first instance of our leaderboard's embed. - -After that, we define the `update_leaderboard` task using the `loop` decorator, and we make it run every ten minutes by -passing 10 to the `minutes` parameter. - -Then that we define the `before_update_leaderboard` task using the `before_loop` decorator, and we make it wait until the -bot is ready before starting the task. - -Next up we define the `after_update_leaderboard` task using the `after_loop` decorator, and we make it clean up the -leaderboard when the loop finally stops running. - -Then we define the `update_leaderboard_error` task using the `error` decorator, and we make it print any errors that may -occur while we update our leaderboard to the console. - -Then we get into the fun stuff, we create a slash command group using the `SlashCommandGroup` class and name it -`leaderboard`, we then create the `view` sub-command which sends the embed generated when the leaderboard is updated and -`update_info` which shows a lot of data about the task using some attributes and functions available to us. - -We also create a slash command group called `leaderboard_config` which is only available to the owner of the bot. - -Then we create the `set_time_between_updates` sub-command which takes in the time in minutes and changes the time -between updates of the leaderboard using the `change_interval` method, the `stop` sub-command which stops the task using -the `stop` method and `restart` which restarts the task using the `restart` method. - -Finally, we add the `LeaderboardCog` cog to the bot, and we're done! - -I'd highly recommend you check the tasks extension -[documentation](https://docs.pycord.dev/en/stable/ext/tasks/index.html) for more info on how to use them and what other -functions they have. diff --git a/i18n/it/docusaurus-plugin-content-docs/current/getting-started/_category_.json b/i18n/it/docusaurus-plugin-content-docs/current/getting-started/_category_.json deleted file mode 100644 index 9d6255f5..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/getting-started/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 3, - "label": "Getting Started", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx b/i18n/it/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx deleted file mode 100644 index 7fbabf77..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: Creating Your First Bot ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -Excited to create your first bot? Once you [install Pycord](../installation.mdx), you can start right -away! - -## Creating the Bot Application - -Just like how you need to sign up to use Discord, your bot also has to be signed up. To do this, -you should: - -1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click - on . -2. Give your bot a name, and click . -3. Now, you should see a page like this. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdW3OQnwUhacopqSWw%2F-Mjd_-mxrJCrzmaXrAg8%2Fimage.png?alt=media&token=b8e2ae6c-2290-4d37-ad7c-eb412f3fb00e) -4. Click on the tab on the left side of the screen. -5. Click on . -6. You can give it a name, change the Avatar, etc. - -## Inviting the bot - -Now, lets get the bot added to some servers. Go to the tab -in the left pane and select `bot` and `applications.commands` as scopes. - -You may want your bot to have application commands, which is what the `application.commands` scope -allows your bot to make. - -Next, you want to choose what permissions the bot will have and select them. For now, you can just -give your bot the `administrator` permission, which gives your bot every permission. Once you select -your bot's permissions, click on to get the bot invite link. - -:::tip - -When your bot is all ready to go, make sure that administrator permissions aren't selected unless -your bot truly needs them. Try selecting only permissions the bot will need. For testing, -Administrator permissions are fine. - -::: - -![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-Mk6tNY3LfDkjd6pqdpL%2F-Mk6tkdpddEWoa2jczZk%2Fimage.png?alt=media&token=52c8a29f-a798-48f8-a8c7-4ecca2681f79) - -You can use this link to invite the bot. - -## Tokens - -Now that you have an account for your bot, you need to log in. To log in, we need the bot's -password. All users and bots have a "token." You may think of this token as a password, as this allows -us to log our bot into Discord. - -Tokens are "snowflakes." Not actual snowflakes, though. Just like how no two snowflakes in real life have the same -pattern, snowflakes in computers are unique things - no two bots have the same token - so a token is -considered a snowflake. A Discord user ID is also a snowflake. - -Now, lets get your bot's token. To do this, you want to: - -1. Go back to the tab. -2. Click on the button in the "Token" section. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdbU12JISJorAZxrKH%2F-MjdbpUsapzb5n15Po5P%2Fimage.png?alt=media&token=118e259f-940a-4f6c-b3a3-c29f3a54100d) - -Now, you have your bot's token copied to your clipboard. - -:::danger - -Do not, under any circumstances, give your token to anyone. Even if you are contacted by someone -claiming to be Discord staff, do not give them your bot's token. They are lying to you to try and -gain access to your bot. If an unauthorized user gains access to your bot's token, they can access -your bot and use it in malicious ways. - -Never push your token to GitHub or include it in your code. One way to prevent your token from -getting leaked is to store it in `.env` files. - -::: - -### Protecting Tokens - -#### Using dotenv - -You can store your tokens in `.env` files. This is a simple way to store sensitive information. - -1. Create a file with the name `.env` (only the extension, with a dot/period at the start and without a name before it). -2. Define the token in the `.env` file (replace the example value with your token). - ```env title=".env" - TOKEN = NzkyNzE1NDU0MTk2MDg4ODQy.X-hvzA.Ovy4MCQywSkoMRRclStW4xAYK7I - ``` -3. Install [`python-dotenv`](https://pypi.org/project/python-dotenv/). - ```bash - python -m pip install python-dotenv - ``` -4. Load the token from the `.env` file. - ```python - import dotenv - dotenv.load_dotenv() - token = str(os.getenv("TOKEN")) - ``` -5. Pass your token as parameter when running the bot. - ```python - client.run(token) - ``` - -:::tip - -If you are using Git to track your bot's changes, you should create a file called `.gitignore` and add -`.env` to it. This stops your `.env` file from getting tracked along with the rest of your code, and -will not be pushed to a remote Git repository. As a consequence, it will stay secure on your local machine. - -::: - -## Coding the Basics - -Here's an example of code you'll write with Pycord: - -```py -import discord -import os # default module -from dotenv import load_dotenv - -load_dotenv() # load all the variables from the env file -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") - -bot.run(os.getenv('TOKEN')) # run the bot with the token -``` - - - -
- - hello - -
- Hey! -
-
-
- -Let's go through the code. First, the imports. - -```py -import discord -import os -from dotenv import load_dotenv -``` - -In the first line, `import discord`, we import Pycord. Although you install Pycord with `pip install py-cord`, you -import it with `import discord`. This is so it's as easy as possible when switching from Discord.py to Pycord. - -We then import `os` and `dotenv`. `os` is a default module that we will use to get the token from the env file. `dotenv` -is a module that we will use to load the env file. You installed this with `pip install python-dotenv`. - -Next, we load the env file with `load_dotenv()`. - -```py -bot = discord.Bot() -``` - -In this line, we create a new instance of [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). -In this object, we can pass various parameters for configuration purposes, such as `owner_ids` -and [`intents`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```py -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") -``` - -We use the [`event`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) decorator to override -the [`on_ready`](https://docs.pycord.dev/en/stable/api/events.html#discord.on_ready) function to define an -event that is automatically called when the bot is ready to use. - -```py -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") -``` - -Here, we use the [`slash_command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.slash_command) -decorator to define a slash command. We specify the `name` and `description` arguments. If not -specified, the name of the slash command would be the function name and the command description would -be empty. - -Optional: We type-hint the context parameter (`ctx`) as [`discord.ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext). In modern IDEs, type-hinting allows access to autocompletion and docstrings. You can read more about type-hinting [here](https://docs.python.org/3/library/typing.html). - -Finally, you want to run the bot using the token specified in the `.env` file. - -Now you have finished creating your first Pycord bot! What we have shown you is just the basic structure -of a bot. You can do a lot more with Python and Pycord knowledge, as well as your imagination! Pycord -will not limit your bot's abilities. - -:::note - -The part where we load the token from the environmental variables is not required. You may use another way to keep your token secure, or, although not recommended, simply specify the token normally as a string, as shown below. - -
-A Basic Bot without securing the token -
- -```py -import discord - -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.send("Hey!") - -bot.run("TOKEN") -``` - -
-
- -::: - -## FAQ - -### How do I make prefixed commands? - -Prefixed commands are an older method of creating bot commands that listen for messages and replies -if the message starts with a certain character. You can read [this page](../extensions/commands/prefixed-commands.mdx) -to learn more about prefixed commands. - -### How do I setup modules/cogs? - -[Cogs](../popular-topics/cogs) are a great way to organize your commands by putting them into -groups called cogs. Cogs are separate files that your bot loads to get the commands inside. -You can read more about cogs, as well as learn how to use them and their benefits, -[here](../popular-topics/cogs). - -### How do I add components, such as buttons and dropdown menus, to my bot? - -Pycord makes it very easy to use Message Commands with your bot by using the `discord.ui` module. -To learn more, read about Message Commands in our [interactions directory](../interactions). - -:::info Related Topics - -- [Prefixed Commands](../extensions/commands/prefixed-commands) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx b/i18n/it/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx deleted file mode 100644 index 2a68677b..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Hosting Your Pycord Bot ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Hosting Your Pycord Bot - -If you're completely new to this, you might have thought something along the lines of "Yay! I got my -bot working," after following our [Creating your First Bot](creating-your-first-bot) guide, only -to close your IDE or shut down your computer to find your bot offline. - -The reason for this is that programs have to be hosted somewhere, meaning some machine somewhere has -to constantly run your bot. There are tons of hosting services that can help you host your bot for -little to no cost. - -## Can I get a Clear Explanation? - -Sure thing. When you run your bot, it first makes a connection to Discord's API. Once that's done, -Pycord sends "heartbeats" to Discord. "heartbeats" are small packets sent at a set interval telling -Discord that your bot is indeed still alive. If Discord doesn't receive a heartbeat after a certain -amount of time, your bot is pronounced dead and buried in the graveyard (not really). It is, though, -taken offline and its connection with Discord is terminated. - -Once you close the terminal that you've run your program on, the program is no longer running, and -the bot stops sending heartbeats and can no longer process commands. This is why you have to constantly -keep the process running. - -This goes for all programs, in a different nature. If the code isn't compiled/built/assembled/interpreted, -it can't be running. - -## What is a Host? - -A host is a server or container for running code offered by a **hosting provider.** There are a lot -of hosting providers, such as bigger ones like Amazon Web Services (AWS) and Google Cloud, and smaller -ones like GalaxyGate and DigitalOcean. - -There are three types of hosts. - - - - Shared hosting is a type of hosting where multiple people share one VPS. Getting a spot on - a shared host is usually cheap, sometimes even free. Shared hosts do not give you a lot of - resources, from less than a gigabyte of RAM (usually 512MB on free hosts) and half of a CPU - with very little storage. Shared hosting is usually used for website hosting and is not - recommended for hosting a Discord bot. - - - A virtual private server (VPS) is a virtual computer (virtual machine) that is rented out to - customers. Most people use a VPS for hosting their projects such as Discord bots. You can get - anywhere from less than a gigabyte of RAM and a less powerful CPU to just under one hundred - gigabytes of RAM, a (or multiple) powerful CPU(s), and a fair amount of storage. A VPS is the - best choice for most users and can be fairly cheap. - - - A dedicated host is a physical computer. You can buy these yourself or rent one from a hosting - provider. Dedicated hosts are often very expensive, but are also very powerful, having a - few hundred gigabytes of RAM and a few very powerful CPUs, along with a good amount of storage. - Dedicated hosts are usually used for very large projects and are overkill for something like - a Discord bot. - - -
- -:::danger - -Make sure you choose a hosting provider you trust. Also make -sure the hosting provider you're looking at has good reviews on public forums. Googling along the -lines of "[host] review" should do the trick. A provider you don't trust can compromise your token. - -::: - -Most hosting providers rent their services to you for a monthly or yearly fee. These can be anywhere -from a few dollars to hundreds or thousands of dollars. - -## How to Host Your Bot - -Once you rent or buy a VPS, you can get to work. Most hosting providers allow you to choose from a -wide range of operating systems, most allow you to choose one but some allow you to choose -multiple. Once that's ready, you have to SSH into the system. We won't get into SSH here, but you can -read [this article from DigitalOcean](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys). -You can also use VNC, which is remote desktop software. If you are using an OS that does not have a -GUI, and is only a command line (a "server" OS), such as Ubuntu Server or most Linux Server Operating Servers, you will most -likely use SSH. If you are using an OS that has a GUI, such as Windows Server, you will most likely use VNC. - -Once you've decided on your operating system, you'll want to set it up and install Python. Once that's -done, you can copy your bot's files to your remote system, install the required packages, and run -the bot. - -:::warning - -If you are using SSH to run the file, your bot will not stay running. This is because the file is -only told to run during your session. You can use a command like [nohup](https://en.wikipedia.org/wiki/Nohup) -to make sure your file stays running after you disconnect. - -::: - -Now your bot is hosted, but that doesn't mean it can't go offline. If your bot encounters an error, -it can often go offline or stop its process. For this, make sure you have proper error handling. -Also be sure to pay attention to your hosting provider's updates or news, as they usually notify -users of when they plan on doing maintenance to their servers, making their services unavailable for -a short time. - -:::info Related Topics - -- [Creating Your First Bot](creating-your-first-bot) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx b/i18n/it/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx deleted file mode 100644 index 32eeb744..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx +++ /dev/null @@ -1,379 +0,0 @@ ---- -title: More Features -description: More features to make your bot cool and snazzy. ---- - -import { - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, - DiscordEmbedField, - DiscordEmbedFields, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -So, you just created your first Pycord bot! Now, let's add some more features to it. This will include adding event handlers, waiting for user response, styling the messages, and more. - -## Events - -### Event Handlers - -Events in Discord are a way to listen for certain actions. For example, if you want to know when a user joins your server, so you could send a welcome message, you can use the `on_member_join` event. - -First, you need to ask Discord to send you events. This is done via "Intents". Read up the [Intents](../Popular-Topics/intents) page for more information. - -Once you understand what intents are, you can enable the events you need, or just use the default ones with `discord.Intents.all()`. - -Now that that's done, let's add an event handler for when a user joins the server. We will use the [`on_member_join` event](https://docs.pycord.dev/en/stable/api/events.html#discord.on_member_join). We will send a private message to the user welcoming them to the server. - -```python -@bot.event -async def on_member_join(member): - await member.send( - f'Welcome to the server, {member.mention}! Enjoy your stay here.' - ) -``` - -We use the [`discord.Bot.event` decorator](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) to add the event handler. - -The `on_member_join` event is called when a user joins the server. The `member` parameter is the user that joined. Different events have different names and parameters. You can find all of them [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -So, that's how you add event handlers! - -### Waiting for User Response - -Let's say you want to create a Guess-the-Number game (where the user has to guess a number between 1-10). You need to send a message to a user and wait for them to respond. You can do this with the [`wait_for`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.wait_for) method. - -```python -@bot.command() -async def gtn(ctx): - """A Slash Command to play a Guess-the-Number game.""" - - await ctx.respond('Guess a number between 1 and 10.') - guess = await bot.wait_for('message', check=lambda message: message.author == ctx.author) - - if int(guess.content) == 5: - await ctx.send('You guessed it!') - else: - await ctx.send('Nope, try again.') -``` - -`wait_for` takes one argument, which is the event type. The event type is the name of the event you want to wait for. In this case, it's `message`. It could also be `reaction` to wait for a reaction to be added. - -We pass a keyword argument to `wait_for` called `check`. The function may look complicated if you're a beginner. We pass a `lambda` function, which simplifies the code a bit. - -The lambda function takes one parameter, `message`. When Pycord receives a message, it passes it to the `check` function. If the function returns `True`, the message is returned. If the function returns `False`, the message is ignored and the bot waits for another message. - -Here, we check if the message is from the user that sent the command. We simply use `message.author == ctx.author`. This will check if the author of the message was the person who invoked the command. - -## Styling Messages - -### Embeds - -Embeds are a Discord feature that allows applications to format their messages in cool embedded format, -enabling your bot to lay out messages with a lot of text into neat fields. - - - - - The Pycord Guide is a detailed guide that explains how to use Pycord and all of its features. - - - The Getting Started section explains how you can get a brand new bot created and running from scratch. - - - Interactions with Pycord - - - Pycord's various Extensions - - - Other Popular Topics - - - We have so much more! Just explore, and you will find everything you need. If you want another page added, open an issue on the GitHub. - - - Created with 💖 by the Pycord Team & Contributors - - - - -
- -Creating embeds is simple! Just create an instance of [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) and edit it to your liking. Once you're done, send it! - -```python -import discord - -bot = discord.Bot() - -@bot.command() -async def hello(ctx): - embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from - ) - embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") - - embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) - embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) - embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) - - embed.set_footer(text="Footer! No markdown here.") # footers can have icons too - embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") - embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") - embed.set_image(url="https://example.com/link-to-my-banner.png") - - await ctx.respond("Hello! Here's a cool embed.", embed=embed) # Send the embed with some text - -bot.run("TOKEN") -``` - - - -
- hello -
- Hello! Here's a cool embed. - - Embeds are super easy, barely an inconvenience. - - - A really nice field with some information. The description as well as the fields support markdown! - - Inline Field 1 - Inline Field 2 - Inline Field 3 - - Footer! No markdown here. - -
-
- -
- -This simple command sends replies to a [slash command](../interactions/application-commands/slash-commands) with an embed. -Let's break it down: - -```py -embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), - ) -``` - -This command creates an embed. We use the [`Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) -class to create an embed object with the title "My Amazing Embed", the description "Embeds are super easy, barely an inconvenience.", and the color `blurple`, Discord's main theme color. - -[discord.Colour](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Colour) is a class full of [classmethods](https://docs.python.org/3/library/functions.html#classmethod) -that return color values. While the official, documented name of this is `discord.Colour`, `discord.Color` -works as well. - -```py -embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") -embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) -embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) -embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) -``` - -This small section shows off embed fields. You can add fields to embeds with the [`add_field` method](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.add_field) -of the [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) class. These consist of three -keyword arguments: `title`, `value`, and `inline`. `title` and `value` are both required arguments, which inline defaults to `False` if it's not defined. The `inline` argument specifies whether space will be divided among the inline fields. There could be a mix of fields where inline has different values too. - -```py -embed.set_footer(text="Footer! No markdown here.") # footers can have icons too -embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") -embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") -embed.set_image(url="https://example.com/link-to-my-banner.png") -``` - -In this section, we're adding unique items to the embed. These items are: - -- Footer - With the [`set_footer()`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_footer) - method, you can set a small footer that holds a message. This has `text` and `icon_url` kwargs. -- Author - With the [`set_author`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_author) - method, you can set an author for the embed. This is a small text field at the top of the embed. This - includes `name`, `url` and `icon_url` kwargs. -- Thumbnail - With the [`set_thumbnail`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_thumbnail) - method, you can set a small image to reside at the top-right of the embed. This has a single `url` kwarg. -- Image - With the [`set_image`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_image) - method, you can set an image to sit at the bottom of an embed. This has a single `url` kwarg. - -There are a lot more methods and attributes you can use to configure embeds. Here, we just covered the basics. Also, remember that all of these values are not necessary in an embed. An embed may only contain a few of these. For example, only a description, a title and a description, and so on. - -### Markdown - -Markdown is a type of markup language that's limited in terms of formatting yet simple. Discord allows -for a watered-down version of markdown to be in their messages. - -#### Text Markdown - -Text formatting can be used in messages and in most embed parts, -as explained in the dedicated section below. - - - - - - - - - - - - - - - - - - - - -
*italics*__*underlined italics*__
**bold**__**underlined bold**__
***bold italics***__***underlined bold italics***__
__underlined__~~strikethrough~~
- -#### Code Markdown - -To create a single-line code block without syntax highlight, wrap the text between single backticks. -This code block will only add a dark background to the text. - -``` -`print("Hello world!")` -``` - -To create a multi-line code block without syntax highlight, wrap the text between triple backticks -on first and last line. This type of code block will encase the code inside a box. - -```` -``` -message = "Hello world!" -print(message) -``` -```` - -To create a multi-line block with syntax highlight, add the name of the language you are using right after -the triple backticks on the first line. For example, for Python you can write either "python" or "py". - -```` -```python -message = "Hello world!" -print(message) -``` -```` - -If you want to use syntax highlight for a single line of code, you still have to format it -like a multi-line block but the code must be on a separate line than the triple backticks. - -#### Quote Markdown - -To create a single-line quote block, start the line with `>` followed by a space. - -``` -> This is a single-line quote. -``` - -To create a multi-line quote block, write `>>>` followed by a space. All text -from that point onwards will be included in that quote block. - -``` ->>> This is a -multi-line quote. -``` - -#### Spoiler Markdown - -To hide a spoiler, encase the text between double pipes. The users -will have to click on it before being able to see the text contained in it. - -``` -||spoiler|| -``` - -#### Link Markdown - -Link formatting only works in embeds and messages sent through webhooks, -by using the following syntax: - -``` -[Pycord](https://pycord.dev/) -``` - -Inside the supported elements that have just been mentioned, -the example above will look like this: [`Pycord`](https://pycord.dev/) - -Outside them, the link will still be clickable but the formatting will be ignored, -therefore the example above will look similarly to this: `[Pycord](https://pycord.dev/)` - -#### Embed Markdown - -Adding markdown to your embeds or messages will give your bot the sparkle it needs, -however, markdown is limited inside embeds. Use the following table as a reference -and keep in mind that embed title and filed names will always show in **bold**. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PartTextLink
Embed AuthorNoNo
Embed TitleYesNo
Embed DescriptionYesYes
Field NameYesNo
Field ValueYesYes
Embed FooterNoNo
diff --git a/i18n/it/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx b/i18n/it/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx deleted file mode 100644 index e44b7c49..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Rules and Common Practices -description: All about the rules and common practices for coding a Discord bot ---- - -# Rules and Common Practices of Creating a Bot - -When creating almost anything, there's always a certain set of rules to follow or common practices, -such as [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python. This applies to creating bots -with Pycord as well. - -:::note - -Most of these rules and common practices are only applicable for -[verified bots](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting), -but it's good to follow them nonetheless. - -::: - -## Rules - -There are rules for creating bots, and most of these are required by Discord themselves, not us at -Pycord. Not following these rules may get your bot denied for verification. - -### Terms of Service and Privacy Policy - -Starting at some point in time, Discord has made providing a privacy policy with your bot a requirement. -This is so that Discord knows exactly what you are doing with its users' data. - -:::tip -You don't need a lawyer or anyone special to write out a privacy policy for you, nor do you need -it approved by some official entity. Simply writing out how you are going to use Discord user -information neatly is all you need to do. -::: - -Providing a Terms of Service for your bot is optional, though usually a best practice. It tells users -what they can and cannot do with your service, and makes it easier to settle disputes if someone -disagrees with you. - -Read more in Discord's official [Legal Docs](https://discord.com/developers/docs/legal). - -### Developer Policy - -We could list almost every rule about using Discord's API here. _Or_ we could simply link Discord's -Developer Policy to make it easier on us. You can find Discord's Developer Policy -[here](https://discord.com/developers/docs/policy). This outlines what you can and cannot do with -Discord's Developer API. And, don't worry, it's completely readable and understandable. - -## Best Practices - -Now, here's something we _can't_ simply link an article for. We're going to discuss the best practices -of creating a Discord bot with Pycord. - -### Bot Sharding - -To any new or maybe even experienced bot developer, sharding a bot sounds beneficial once you hear -about it. I'm here to tell you that it isn't a good idea to shard your bot. - -_Wait a minute, why would it be an option if it wasn't a good idea?_ It's simple. I lied. Sort of. -I'm not going to go into the details of sharding a bot, so you can read about it on -[this page](../Popular-Topics/sharding). Sharding is the process of taking your bot -and breaking it up into small pieces, so it's easier to perform tasks. This is very useful for large -bots, as it makes them faster and more reliable. Sharding is not a good practice for small bots. - -:::note -Discord will notify you once it is time to shard your bot, and will eventually force you to do so. -::: - -At the very least, wait for one thousand servers to shard your bot. If you shard your bot while it's -small, you'll just be wasting resources and possibly making your bot slower. - -### [Verification](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting) - -Verifying your Discord bot is something every developer would like to achieve. It shows that your bot -is in more than 75 servers. It's generally a good idea to try to get your bot verified as soon as -possible. We're talking at 76 servers soon. This is because Discord can be somewhat slow in terms of -bot verification, so verifying as soon as possible gives them enough time to verify before your bot -reaches the 100 server cap. If a bot is not verified, it cannot grow beyond 100 servers. - -It's also a good idea to only apply for the privileged intents that you need. Applying for intents -your bot doesn't use wastes both your time and Discord's time, as your privileged intent request -will be denied simply because you applied for an intent you didn't need. - -### Subclassing - -While it may take some time, subclassing a bot is very worth it. Once again, this was explained -elsewhere, so I won't go into the details, but I felt it fit here, so I put it here. - -Subclassing a bot makes it more flexible and allows it to do a lot more. Read more about subclassing -bots [here](../Popular-Topics/subclassing-bots) - -### Your Bot's Token - -Your bot is only able to be run for one reason: its token. If you followed the -[guide for creating your first bot](creating-your-first-bot), you should already know a bit about -keeping that token safe. That's exactly what you want to do. - -Sharing your token is never good. If someone evil gets a hold of your token, they can do terrible things, -such as making your bot leave all of its servers, spamming all the members the bot has contact with, -and even manipulating the servers the bot is in, if given the permissions. That's why it's very important -to keep your token safe. To learn how to do so, read [this part](creating-your-first-bot#tokens) of -the Creating Your First Bot guide. - -### Backups - -You always want to back up your bot's data. This includes both its code _and_ its databases. This way, -if something tragic happens, such as your host failing a data migration or you breaking your Raspberry -Pi's SD card that held your bot, you'll still have its precious user data. I have a small program for -my bot that uploads its databases to a remote GitHub repository periodically to not lose any data. -It may be smarter to find a bit more of a reliable way to do so, though. - -Public or private, having a local Git repository connected to a remote one is a good idea for making -almost any application. For a lot of developers, it's like saving your work. If you do this, all of -your bot's code won't be lost if your computer spontaneously combusts, or you smash it to bits from -anger. You can simply grab the backup computer that everyone has lying around, and you're back -in business. - -### Organization and Cleanliness - -It is _extremely_ important to have organized code. This includes commands, objects, functions, -and classes. If you don't have organized code, it will get progressively harder for you to recognize -it, and others won't be able to decipher it. - -Make sure you utilize indents and spaces, as these are very important in making your code readable. - -```py title="Bad Spacing" -class MyClass: - async def add(self,num1,num2): - return num1+num2 - async def sub(self,num1,num2): - return num1-num2 -``` - -```py title="Good Spacing" -class MyClass: - async def add(self, num1, num2): - return num1 + num2 - - async def sub(self, num1, num2): - return num1 - num2 -``` - -See the difference? Now, which one looks more readable? Hopefully, you answered the second example. -Python's [PEP8](https://www.python.org/dev/peps/pep-0008/) is a PEP (**Python Enhancement Proposal**) -style guide for Python. It is the style guide that is used by most Python developers and programmers, -providing a universal way to write and read code. - -### Databases - -As your bot grows, you'll inevitably have to store data for your bot. Now, most people would probably just load up some -JSON file on boot into a `dict`, modify it in memory then write to the file. However, JSON files aren't the solution. -When you write to a JSON file, it rewrites the entire file instead of just rewriting the section that changed. It's also -a configuration file format, not a storage file format. - -Instead of using a JSON file or some other related format, you should instead use a database. There are many databases -out there, like MongoDB, SQLite, and PostgreSQL to name a few. - -All of these databases I named do the job well, and which one you use depends on what features you want out of a database. - -<>{/* Maybe clarify these/add more options */} - -#### MongoDB - -MongoDB is a JSON-like format and if you already use JSON files, it shouldn't be too hard to migrate over to. - -#### SQLite - -SQLite is based on SQL, a common relational data model. It's a lightweight, easy-to-use, portable database solution that -works entirely on files. However, if for some reason you cannot read/write to and from a file, and you need to manage -lots of data, SQLite might not be for you. - -While SQLite is a part of the Python Standard Library as the `sqlite3` package, we recommend not using it as it is -synchronous and blocking. You should use an asynchronous alternative, such as [`aiosqlite`](https://pypi.org/project/aiosqlite/). - -#### PostgreSQL - -PostgreSQL is also based on SQL, but it also has more features than SQLite. It's compliant with the SQL standard, -open-source, and extensible. However, it's not that fast or simple compared to SQLite. - -#### MariaDB - -MariaDB is also based on SQL and is a fork of the MySQL project. It's compliant with the SQL standard, it's also open -source and is a complete drop-in replacement for any code with MySQL. You don't even need to change what package you're -using! diff --git a/i18n/it/docusaurus-plugin-content-docs/current/installation.mdx b/i18n/it/docusaurus-plugin-content-docs/current/installation.mdx deleted file mode 100644 index 521c69cd..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/installation.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Installation -sidebar_position: 2 ---- - -Before you can start using Pycord, you need to install the library. - -:::note -Python **3.8 or above** is required to use Pycord. -::: - -:::tip -Before you start installing python packages globally, it's recommended you set up a virtual environment. -You can find instructions for that [here](More/virtual-environments). -::: - -## Fresh Installation - -To install Pycord, you can use the following command in your terminal: - -``` -pip install py-cord -``` - -:::tip -Remember that you need to install `py-cord`, not `pycord`. -Also, the `pip` command varies depending on your installation. For example, it might be `python3 -m pip` on macOS/Linux or `py3 -m pip` on some versions of Windows. -::: - -If you need voice support for your bot, you should run: - -``` -pip install "py-cord[voice]" -``` - -## Migration - -### Updating Pycord - -If you are upgrading from a previous version of Pycord, you can use the following command in your terminal to upgrade to the latest version: - -``` -pip install -U py-cord -``` - -### Migrating from other libraries - -If you are migrating from another library, say, `discord.py`, first of all, you need to uninstall it. - -``` -pip uninstall discord.py -``` - -Then, you can install Pycord, it's as simple as that!: - -``` -pip install py-cord -``` - -:::caution -Uninstalling `discord.py` _after_ installing `py-cord` can cause issues. Make sure to uninstall it first! -::: - -## Installing Other Builds - -### Development Build - -:::caution -The development build comes with cutting edge features and new functionality, but as it isn't a stable build you may encounter bugs. -::: - -To install the development build, you can use the following command in your terminal: - -``` -pip install -U git+https://github.com/Pycord-Development/pycord -``` - -:::important -Git is required to install this build. [Learn how you can install Git](./more/git). -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/interactions/_category_.json b/i18n/it/docusaurus-plugin-content-docs/current/interactions/_category_.json deleted file mode 100644 index ea28be60..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/interactions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 4, - "label": "Interactions" -} \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json b/i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json deleted file mode 100644 index 6dcafe83..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Application Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx b/i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx deleted file mode 100644 index 8fdca991..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Context Menus -description: Learn all about Context Menus (User Commands & Message Commands) and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -When you right-click a message, you may see an option called "Apps". Hover over it, and you can see -commands a bot can run with that message. These are called message commands. - -When you right-click a user in the user list, you can once again see an option called "Apps". -Hover over it, and you can see commands a bot can run with that message. These are called user commands. - -Together, these two are called Context Menus or Context Menu Commands. These commands work very much like normal commands, except they take a member or message. - -:::note - -A bot can have up to 5 global Context Menus of each type. - -::: - -## User Commands - -Creating a user command is very simple. - -```python -@bot.user_command(name="Account Creation Date", guild_ids=[...]) # create a user command for the supplied guilds -async def account_creation_date(ctx, member: discord.Member): # user commands return the member - await ctx.respond(f"{member.name}'s account was created on {member.created_at}") -``` - - - -
- - Account Creation Date - -
- {defaultOptions.profiles.bob.author}'s account was created on 2020-01-01 -
-
- -## Message Commands - -```python -@bot.message_command(name="Get Message ID") # creates a global message command. use guild_ids=[] to create guild-specific commands. -async def get_message_id(ctx, message: discord.Message): # message commands return the message - await ctx.respond(f"Message ID: `{message.id}`") -``` - - - - Do. Or do not. There is no try. - - -
- - Get Message ID - -
- Message ID: 930650407917748286 -
-
- -
- -:::info Related Topics - -- [Slash Commands](./slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx b/i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx deleted file mode 100644 index edac55b3..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Localizations -description: Localizations are a way to make your bot more accessible to your users. Learn all about localizations now! ---- - -Localizations are a way to make your bot more accessible to your users. You can localize the command -name, the names of any arguments, and any text that is displayed to the user. - -## Syntax - -```python -@bot.slash_command( - name="ping", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - }, - options=[ - Option( - name="Example", - name_localizations={ - "en-GB": "British Example" - }, - description="Example option that does nothing", - description_localizations={ - "en-GB": "British example option that does nothing" - } - ) - ] -) -async def ping(ctx, example): - responses = {"en-US": "Pong!", - "en-GB": "British Pong!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -@bot.slash_command( - name="ping2", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - } -) -async def ping2(ctx, example: Option(str, "example", name_localizations={"en-GB": "British Example"}, description="Example option that does nothing", description_localizations={"en-GB": "British example option that does nothing"})): - responses = {"en-US": "Pong2!", - "en-GB": "British Pong2!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -``` - -- [`Locales`](https://discord.com/developers/docs/reference#locales) - List of valid locales recognized by Discord diff --git a/i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx b/i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx deleted file mode 100644 index f4a760b6..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx +++ /dev/null @@ -1,292 +0,0 @@ ---- -title: Slash Commands -description: Learn all about Slash Commands and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On March 24, 2021, Discord added Slash Commands to Discord as an easier, more efficient, and better way of using bot commands. Pycord has implemented Slash Commands into the library, so it's simple, efficient, and familiar. - -:::important - -Remember that Slash Commands require your bot to be invited with the `application.commands` scope or Slash Commands will not show up. Bots already in the guild can simply be invited again with the scope; there is no need to kick the bot. - -::: - -## Syntax - -Let's create a simple Slash Command. - -```py -import discord - -bot = discord.Bot() - -# we need to limit the guilds for testing purposes -# so other users wouldn't see the command that we're testing - -@bot.command(description="Sends the bot's latency.") # this decorator makes a slash command -async def ping(ctx): # a slash command will be created with the name "ping" - await ctx.respond(f"Pong! Latency is {bot.latency}") - -bot.run("TOKEN") -``` - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -Let's go through the code. - -First, we import Pycord's `discord` package. - -Next, we create a [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot) object and assign it to a variable `bot`. - -We then go ahead and use the [`@bot.command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.command) decorator, which registers a new Slash Command. We pass a `description` parameter to give a description to the Slash Command. We can also pass a `name` parameter to change the Slash Command's name. By default, the name of the Slash Command will be the name of the function, in this case, `/ping`. - -We create an async function called `ping` with parameters `ctx`, which, when called, sends the bot's ping/latency using [`ctx.respond`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext.respond). - -## Subcommand Groups - -You might want to group certain commands together to make them more organised. A command group is exactly what it sounds like, a group of individual Slash Commands together. - -In order to make a Slash Command group, you can use the `bot.create_group` function. - -```python -import discord - -bot = discord.Bot() - -# create Slash Command group with bot.create_group -greetings = bot.create_group("greetings", "Greet people") - -@greetings.command() -async def hello(ctx): - await ctx.respond(f"Hello, {ctx.author}!") - -@greetings.command() -async def bye(ctx): - await ctx.respond(f"Bye, {ctx.author}!") - -bot.run("TOKEN") -``` - -Or, you can instead manually make a `SlashCommandGroup` class like so: - -```python -import discord - -math = discord.SlashCommandGroup("math", "Math related commands") - -@math.command() -async def add(ctx, num1: int, num2: int): - sum = num1 + num2 - await ctx.respond(f"{num1} plus {num2} is {sum}.") - -@math.command() -async def subtract(ctx, num1: int, num2: int): - sum = num1 - num2 - await ctx.respond(f"{num1} minus {num2} is {sum}.") - -# you'll have to manually add the manually created Slash Command group -bot.add_application_command(math) -``` - -Here's what the registered subcommands will look like in the Slash Command Menu: - -![Picture of the subcommands in the Slash Command Menu](../../assets/interactions/groups-and-subcommands.jpg) - -You'll notice that there's the name of the Slash Command Group and then the name of the subcommand separated by a space. - -::: - -:::info Cogs - -If you are looking to add Slash Command Groups to cogs, please look at our [Cogs page](../../popular-topics/cogs)! - -::: - -## Sub-groups - -We've made a subcommand group, but did you know that you could create a group inside another? - -```python -from discord import SlashCommandGroup -from math import sqrt - -math = SlashCommandGroup("math", "Math related commands") -advanced = math.create_subgroup("advanced", "Advanced math commands") - -@advanced.command() -async def square_root(ctx, x: int): - await ctx.respond(sqrt(x)) - -bot.add_application_command(math) -``` - -The command created above can be invoked by typing `/math advanced square_root`. - -## Options & Option Types - -Whenever you're using Slash Commands, you might notice that you can specify parameters that the user has to set or can optionally set. These are called Options. - -Options can also include a description to provide more information. [You can learn more about Options in our documentation!](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.Option) - -Since you want different inputs from Options, you'll have to specify the type for that Option; there are a few ways of doing this. - - - - -You could use Type Annotations and let Pycord figure out the option type or explicitly specified using the [`SlashCommandOptionType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.SlashCommandOptionType) enum. - -```python -import discord - -bot = discord.Bot() - -@bot.command() -# pycord will figure out the types for you -async def add(ctx, first: discord.Option(int), second: discord.Option(int)): - # you can use them as they were actual integers - sum = first + second - await ctx.respond(f"The sum of {first} and {second} is {sum}.") - -@bot.command() -# this explicitly tells pycord what types the options are instead -async def join( - ctx, - first: discord.Option(discord.SlashCommandOptionType.string), - second: discord.Option(discord.SlashCommandOptionType.string) -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - add - -
- The sum of 1 and 1 is 2. -
- -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
- - -Instead of Type Annotations, you can also use the option decorator. This is usually done to have type-hinting. - -```python title="Slash Command Type" -import discord - -bot = discord.Bot() - -@bot.command() -@discord.option("first", type=discord.SlashCommandOptionType.string) # type = str also works -@discord.option("second", type=discord.SlashCommandOptionType.string) # type = str also works -async def join( - ctx, - first: str, - second: str, -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
-
- -## Autocomplete - -Discord's autocomplete allows developers to determine option choices that are used in a slash command option. You can do this by defining a function: - -```py -async def get_animal_types(ctx: discord.AutocompleteContext): - """ - Here we will check if 'ctx.options['animal_type']' is a marine or land animal and return respective option choices - """ - animal_type = ctx.options['animal_type'] - if animal_type == 'Marine': - return ['Whale', 'Shark', 'Fish', 'Octopus', 'Turtle'] - else: # is land animal - return ['Snake', 'Wolf', 'Lizard', 'Lion', 'Bird'] - -@bot.slash_command(name="animal") -async def animal_command( - ctx: discord.ApplicationContext, - animal_type: discord.Option(str, choices=['Marine', 'Land']), - animal: discord.Option(str, autocomplete=discord.utils.basic_autocomplete(get_animal_types)) -): - await ctx.respond(f'You picked an animal type of `{animal_type}` that led you to pick `{animal}`!') -``` - - - -
- - animal - -
- You picked an animal type of Marine that led you to pick Shark! -
-
- -:::warning - -Autocomplete can **only** be used with slash commands. - -::: - -:::info Related Topics - -- [Interactions Index](../../interactions) -- [Rules and Common Practices](../../getting-started/rules-and-common-practices) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/interactions/index.mdx b/i18n/it/docusaurus-plugin-content-docs/current/interactions/index.mdx deleted file mode 100644 index 3f695606..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/interactions/index.mdx +++ /dev/null @@ -1,242 +0,0 @@ ---- -title: Discord Interactions ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -In December 2020, Discord released their first Interaction: the -[Slash Command](https://discord.com/developers/docs/interactions/application-commands#slash-commands). -Since then, Discord has added many types of Interactions, including: - -[**Application Commands**](https://discord.com/developers/docs/interactions/application-commands) - -- [**Slash Commands**](https://discord.com/developers/docs/interactions/application-commands#slash-commands): - Commands that can be used with the `/` prefix. -- **Context Menu Commands**: Commands that can be used from the right-click menu. - - [**User Commands**](https://discord.com/developers/docs/interactions/application-commands#user-commands): - Commands that can be used on a user by alt-clicking/selecting them. - - [**Message Commands**](https://discord.com/developers/docs/interactions/application-commands#message-commands): - Commands that can be used on a message by alt-clicking/selecting it. - -[**UI Components**](https://discord.com/developers/docs/interactions/message-components) - -- [**Buttons**](https://discord.com/developers/docs/interactions/message-components#buttons): - Buttons are attached to a message and can be clicked on to perform an action. -- [**Select Menus**](https://discord.com/developers/docs/interactions/message-components#select-menus): - Drop-down menus are used to select a number of options from a list. -- [**Modals**](https://discord.com/developers/docs/interactions/message-components#text-inputs): - Form-like modals can be used to ask for input from a user. - -## Application Commands - -Application Commands are another set of new features that are intended to avoid compromising users' safety and privacy. -They're relatively easy to add to your bot, and give people a simpler and safer way to use commands. - -### [Slash Commands](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.SlashCommand) - -Slash Commands were the first Interaction added to Discord. They're easy to use and create, and -is the only prefix commands alternative that does not need Message Content intent. - -:::note - -Preferring prefix commands over Application Commands is **not** a valid reason to apply for the -Message Content intent. Using that as a reason will get your application denied. - -::: - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -This is what a Slash Command looks like. Not too different from a prefix command, -apart from the note telling you who invoked it. A Slash Command's fields can accept any of the following: - -- Members -- Roles -- Channels -- Attachments -- Text - -Just about as good as it gets. - -### [Message](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.MessageCommand) and [User](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.UserCommand) Commands - -Message Commands and User Commands were both introduced at around the same time, and are very similar to each other, so we'll be -introducing them together. These commands can be found in the `Apps` tab when alt-clicking. The only difference between the two is that -Message Commands only appear in the `Apps` tab of a message, while User Commands are found in the `Apps` tab of a user. Message Commands -can be used to quickly report a message, warn a user for a message, and other functions. Likewise, User Commands can be used to add a -user to a ticket, warn a user, and more. - -Here's an example of a Message Command: - - - - Hello World! - - -
- - Reverse Message - -
- Message 930650407917748286 reversed is "!dlroW olleH" -
-
- -
- -And here's an example of a User Command: - - - - {defaultOptions.profiles.dorukyum.author} has been on Discord for a long time - - -
- - User Age - -
- {defaultOptions.profiles.dorukyum.author} is 1 week old. -
- -
- - User Age - -
- {defaultOptions.profiles.bob.author} is 40 years old. -
- - 🤔 - -
- -
- -Pretty cool, right? To learn more about these two, please read the [Context Menus guide](./application-commands/context-menus.mdx). - -## [Application Commands](#application-commands) vs. [Prefix Commands](../extensions/commands/prefixed-commands) - -Ever since Discord was created, apps on it have used prefix commands. Using prefixes meant that you would have to put a -certain character (or string of characters) in front of your command, such as the exclamation mark in `!ping`. The way this -worked was that your bot would listen for messages, pick out the ones that had their specific prefix, and then respond to the command. -Now, Discord is encouraging developers to switch their bots over to Application Commands, which is a new system meant to preserve the -privacy and safety of their users. But why exactly is Discord making us switch? What's the better option, Application Commands or prefix -commands? Below, we'll discuss everything you need to know. - -### Discord's Decision - -Application Commands were conceptualized partly due to privacy concerns. When Discord first began, they weren't entirely concerned about bots -having access to the content of every message that was being sent. However, as Discord grew, this became more of a problem. Hypothetically, bots -could simply log every message they're able to receive via the Discord API and hand their contents over to a company or other third party. This is -a problem, since that data is meant to be used only by Discord. As such, they locked down Message Content, and introduced Application Commands for -bot developers to use instead. - -Prefix commands work by reading messages, as described before. Application Commands, however, don't -work this way; instead, they work by having your bot get information from Discord about when a command was used. This way, Discord can limit -Message Content only to bots that _absolutely_ depend on it, such as auto-moderation bots. - -### Who has to Use Application Commands - -Any verified bot that does not have the Message Content intent must use Application Commands. Discord is allowing developers to submit -applications for the ability to use the intent; however, since they don't want to keep supporting prefix commands due to privacy concerns, -they will automatically decline any application that includes only that as a reason. So, if your bot doesn't have an auto-moderation feature -(or any other functionality that requires Message Content), you're out of luck. - -Unverified bots, however, don't have to use Application Commands. This is because the Message Content intent is a `Privileged Intent`, meaning that -it must be applied for only if your bot is verified or about to be verified. Unverified bots don't have to apply for Privileged Intents, so they can -use them freely. - -So, if your bot is made only for a couple of servers, you can choose between prefix commands and Application Commands. However, if you plan on expanding -your bot's reach, it'll have to use Application Commands. - -### What's the Better Option - -Choosing which is the better option is up to you, if you're starting small. If -you plan on growing your bot, however, you will have to use Application Commands. Since prefix commands are slowly being phased out by Discord, -there isn't much of a choice for developers of larger bots. - -## Message Components - -Message Components are fairly new features in Discord, allowing developers to give their bots a fast -and understandable user interface. Message Components are easy to use and make your bot look modern, -sleek, and downright awesome. - -### [Views](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View) - -Views are not an Application Command nor are they a Message Component. Views are the invisible placeholders, or grid, -that Message Components lie in. Views can have up to 5 [`Action Rows`](https://docs.pycord.dev/en/stable/api/models.html#discord.ActionRow), -and Action Rows can have a maximum of 5 slots. Below, you can find a table showing how many slots a Message Interaction takes up. - -| Component | Slots | -| ------------ | ----------------------------------------------- | -| Buttons | 1 Slot | -| Select Menus | 5 Slots | -| Text Modals | 1 Slot (opened via a Button) | - -So, based on this, you could have a maximum of 25 Buttons in a View with no Select Menus, and 5 Select -Menus in a View with no Buttons. This doesn't mean you can't have them both in a View, however. You can have -a combination of them, such as 20 Buttons and a Select Menu or 10 Buttons and 3 Select Menus. - -### [Buttons](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button) - -Buttons are the first of the Message Components. They allow for quick responses to prompts, such as for canceling or continuing an action. -Of course, these aren't their only uses; people have created awesome things with Buttons, such as calculators, games, and more! - - - - Discord Buttons are awesome! -
- - Click me! - -
-
-
- -
- -This is what a Button looks like, very simple and modern. To learn more about Buttons, refer to our -[Buttons page](./ui-components/buttons.mdx). - -### [Select Menus](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Select) - -Select Menus are the second of Discord's Message Components. They allow users to select from a list of choices, which your bot can then use. -Select Menus are good for things such as choosing features, pages of a help menu, and more. - -![Select Menu Example Image](../assets/interactions/select-menus-example.png) - -This is what a Select Menu looks like. While not looking as good as Buttons, they still look great -and have even greater possibilities. To learn more about Select Menus, please refer to our [Select -Menus page](./ui-components/dropdowns.mdx). - -### [Modal Dialogs](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal) - -Text Modals are the most recently added Message Component in Discord. They're useful for text input and filling out forms, such as a -sign-up for your bot's service. These are meant to replace long bot setup processes by allowing users to fill out multiple text fields, -which avoids having the user send multiple messages for the bot. Modals can be accessed by either invoking an Application Command or by -interacting with another UI Component. - -![Text Modal Example Image](../assets/interactions/modal-example.png) - -This is what a Text Modal looks like, easy to use and one of the most useful Message Components yet. To learn more about Text Modals, -please visit our [Modal Dialogs page](./ui-components/modal-dialogs.mdx). diff --git a/i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json b/i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json deleted file mode 100644 index 7b0a72fe..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "UI Components", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx b/i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx deleted file mode 100644 index 10557c94..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx +++ /dev/null @@ -1,314 +0,0 @@ ---- -title: Buttons -description: Learn all about implementing buttons in your Discord Bot using Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On May 26, 2021, Discord added a new interaction called buttons. Instead of reactions, bots could now -send buttons and users could use them to interact with bots. This opened up a whole new world of -possibilities for bots. Soon after, developers made calculators, polls, and games like blackjack, UNO, -and even Minecraft! Buttons provided a clear and easy to use interface for interacting with bots. - -So, let's learn how you can add buttons to your bot! - -## Concept - -Buttons weren't the only update to the interactions system in Discord. Discord also added [Select Menus](./dropdowns) and [Modal Dialogs](./modal-dialogs), both of which work very similarly to buttons. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive button. - -```python -import discord - -bot = discord.Bot() # Create a bot object - -class MyView(discord.ui.View): # Create a class called MyView that subclasses discord.ui.View - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.primary, emoji="😎") # Create a button with the label "😎 Click me!" with color Blurple - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") # Send a message when the button is clicked - -@bot.slash_command() # Create a slash command -async def button(ctx): - await ctx.respond("This is a button!", view=MyView()) # Send a message with our View class that contains the button - -bot.run("TOKEN") # Run the bot -``` - -Using this command should return the following message: - - - -
- - button - -
- This is a button! -
- - Click me! - -
-
-
- -
- -As you can see, we create a class called `MyView` that [subclasses](#oop) -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `button_callback` to the `MyView` class with the decorator -[`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button). -This decorator adds a button to a component. This function takes two arguments: the button that was -clicked and the interaction. These arguments are passed to the function when the button is clicked -by the module. We use the [`interaction.response.send_message`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse.send_message) -function to send a message to the channel where the interaction was sent. - -Finally, we create a global slash command called `button` that sends the message, along with the view -that contains a button. - -This is the basic syntax of creating a button. What you create with it is up to you. You can worry -about making your button do amazing things, while Pycord handles the rest! - -## Button Styles - - - -| Name | Usage | Color | -| --------- | ----------------------------------------------------------------------------------------- | ------- | -| Primary | `discord.ButtonStyle.primary` / `discord.ButtonStyle.blurple` | Blurple | -| Secondary | `discord.ButtonStyle.secondary` / `discord.ButtonStyle.grey` / `discord.ButtonStyle.gray` | Grey | -| Success | `discord.ButtonStyle.success` / `discord.ButtonStyle.green` | Green | -| Danger | `discord.ButtonStyle.danger` / `discord.ButtonStyle.red` | Red | -| Link | `discord.ButtonStyle.link` / `discord.ButtonStyle.url` | Grey | - -Check out the [`discord.ButtonStyle`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ButtonStyle) class for more information. - -![Different Button Styles](../../assets/interactions/button-styles.png) - -You can set a button's style by adding the `style` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) decorator. - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.success) - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots, and each button takes up 1 slot. -So, how do we move the buttons to another row? - -This can be done by specifying the `row` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) -decorator. - -:::info The `row` argument - -The row argument specifies the relative row this button belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=1, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") -``` - -## Disabling Buttons - -### Pre-Disabled Buttons - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary, disabled=True) # pass `disabled=True` to make the button pre-disabled - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView()) -``` - -### Disabling Buttons on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - button.disabled = True # set button.disabled to True to disable the button - button.label = "No more pressing!" # change the button's label to something else - await interaction.response.edit_message(view=self) # edit the message's view -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(emoji="😀", label="Button 1", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) - - @discord.ui.button(label="Button 2", style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -Sometimes, you want to have a button that is disabled after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView(timeout=30)) -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a button that is disabled after a certain amount of time, you want to have a -button that is always working. - -Normally, when the bot goes offline, all of its buttons stop working. You will be able to see the -buttons, but nothing will happen when you press them. This is a problem -if you are trying to create a self-role system with buttons, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons will stop working. When the bot comes back online, however, the buttons will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view must have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.button(label="A button", custom_id="button-1", style=discord.ButtonStyle.primary, emoji="😎") # the button has a custom_id set - async def button_callback(self, button, interaction): - await interaction.response.send_message("Button was pressed", ephemeral=True) - -@bot.command() -async def button(ctx): - await ctx.send(f"Press the button! View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many buttons can I have in a message? - -Each message can have a maximum of 25 buttons. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do buttons need any special permissions? - -No new permissions are needed for either the bot or the server to allow bots to use buttons. - -#### Should I replace reactions with buttons for my bot? - -That is up to you. Buttons do provide a cleaner interface for your bot and are easier to use. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx b/i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx deleted file mode 100644 index 8320f25d..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx +++ /dev/null @@ -1,339 +0,0 @@ ---- -title: Select Menus -description: Learn all about implementing Select Menus or Dropdowns in your Discord Bot with Pycord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Shortly after the buttons were added, Discord added their second message component: Select Menus. Select Menus allow users to choose from a list of items sent by a bot. These are a great substitute for having a user send a number that corresponds to an option. You can even allow users to select multiple options from the Select Menus. This guide will show you the easy and painless ways of using them with Pycord. - -## Concept - -Select Menus aren't the only message component in Discord. There's also [Buttons](./buttons) and [Modal Dialogs](./modal-dialogs). Select Menus make it easy for users to pick one or multiple options from a list provided by a bot. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive select menu. - -```python -import discord - -bot = discord.Bot() - -class MyView(discord.ui.View): - @discord.ui.select( # the decorator that lets you specify the properties of the select menu - placeholder = "Choose a Flavor!", # the placeholder text that will be displayed if nothing is selected - min_values = 1, # the minimum number of values that must be selected by the users - max_values = 1, # the maximum number of values that can be selected by the users - options = [ # the list of options from which users can choose, a required field - discord.SelectOption( - label="Vanilla", - description="Pick this if you like vanilla!" - ), - discord.SelectOption( - label="Chocolate", - description="Pick this if you like chocolate!" - ), - discord.SelectOption( - label="Strawberry", - description="Pick this if you like strawberry!" - ) - ] - ) - async def select_callback(self, select, interaction): # the function called when the user is done selecting options - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") - -@bot.command() -async def flavor(ctx): - await ctx.respond("Choose a flavor!", view=MyView()) - -bot.run("TOKEN") -``` - -There's a lot going on over here! Don't worry, we will go over the code and explain it. - -As you can see, we create a class called `MyView` that subclasses -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `select_callback` to the `View` class with the decorator -[`discord.ui.select`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.select). -This decorator adds a select menu to the view. This decorator takes a few arguments to customize your select menu. Read them in the [Customization section](#customization). - -That was the decorator. Now, the function itself is pretty simple. It takes two parameters, not including `self`. The parameters are `select`: The select menu, and `interaction`: a [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object. Both of these are passed by Pycord, so you just need to specify them in the function! - - - -In the callback, you could do anything you want. You get the two parameters `select` and `interaction` to play around with. Here, we send a message using `await interaction.response.send_message` (where interaction is [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse)) with content `select.values[0]`, which sends the label of the first/only option the user selected. Obviously, this is only an example, and you could do just about anything you want. - -Finally, we create a global slash command called `flavour` that sends a message "Choose a flavor!" along with the view -that contains our select menu. - -This is the basic syntax of creating a select menu. What you create with it is up to you. You can worry -about making your code do amazing things, while Pycord handles the rest! - -## Customization - -#### Select Menu Properties - -- `select_type`: The type of select to create. This must be a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. -- `channel_types`: A list of channel types that can be selected in the menu. This is only valid for selects of `select_type` [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType). -- `options`: A list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. These are the options that can be selected in this menu. -- `placeholder` is the placeholder text shown in the select menu if no option is selected. -- `custom_id`: The ID of the select menu that gets received during an interaction. It is recommended not to set this to anything unless you are trying to create a persistent view. -- `row`: The relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). -- `min_values`: The minimum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `max_values`: The maximum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `disabled`: Whether the select is disabled or not. Defaults to False. - -#### Select Option Properties - -In the `options` parameter, you pass a list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. This class also has a few parameters: - -- `default` (whether the option is selected by default) -- `description` (an additional description, if any) -- `emoji` (a string or an emoji object, if any) -- `label` (the name displayed to users, can be up to 100 characters) -- `value` (a special value of the option, defaults to the label). - -## Select Types - -In addition to regular string selects, you can also have your select menu contain users, roles, mentionables, and channels as its options. You can use these alternative select types by passing a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value for the `select_type` parameter when creating the Select. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.user_select - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -Additionally, you can use shortcut decorators to create a [`discord.ui.Select`](https://docs.pycord.dev/en/master/api/ui_kit.html#discord.ui.select) with a predetermined [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. Using a shortcut decorator, the above code can be rewritten like this: - -```python -class MyView(discord.ui.View): - @discord.ui.user_select() - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -### Specifying Channel Types - -When using a [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType.channel_select) type select menu, you can pass in a list of [`discord.ChannelType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ChannelType) values to limit which types of channels users can choose when interacting with the select menu. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.channel_select, - channel_types=[discord.ChannelType.text, discord.ChannelType.voice] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"You selected {select.values[0].mention}") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots. A button takes a single slot, while a select menu takes up all 5 of them. This means a view can have a maximum of 5 select menus, or any possible combination of select menus and buttons. - -The arrangement of buttons and select menus is generally adjusted by Pycord. However, it is possible to move them to specific relative rows. This is done by specifying the `row` argument. - -:::info The `row` argument - -The row argument specifies the relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero-indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=0, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.select( - row = 1, - options = [...] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") -``` - -## Disabling Select Menus - -### Pre-Disabled Menus - -```python -class MyView(discord.ui.View): - @discord.ui.select( - disabled = True, # pass disabled=True to set the menu as disabled - options = [...] - ) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send("Select and option from the menu!", view=MyView()) -``` - -### Disabling Menus on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - select.disabled = True # set the status of the select as disabled - await interaction.response.edit_message(view=self) # edit the message to show the changes -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def first_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) # edit the message to show the changes - - @discord.ui.select(options = [...]) - async def second_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -You may want a select menu to automatically stop working after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select(ctx): - await ctx.send(view=MyView(timeout=30)) # specify the timeout here -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a select menu that is disabled after a certain amount of time, you want to have a -select menu that is always working. - -Normally, when the bot goes offline, all of its views stop working, even if they don't have a timeout. You will be able to see the -views, but nothing will happen when you try to interact with them. This is a problem -if you are trying to create a self-role system, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons and select menus will stop working. However, when the bot comes back online, the buttons and select menus will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view much have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.select(custom_id="select-1", options = [...]) # a custom_id must be set - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send(f"View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many select menus can I have in a message? - -Each message can have a maximum of 5 select menus. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do select menus need any special permissions? - -No new permissions are needed in the bot or in the server. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx b/i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx deleted file mode 100644 index 6ee4682f..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Modal Dialogs -description: Learn how you can implement Modals in your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Modal Dialogs, also known as "modals", provide a form-like structure for bots to receive input from users. No extra permissions are needed for bots to send modal dialogs, so it becomes a convenient workaround for bots to receive longer input without needing the Message Content [intent](../../popular-topics/intents). - -## Concept - -Modal Dialogs consist of a title, custom ID, and up to 5 [`discord.ui.InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) components. While creating modals, we generally subclass [`discord.ui.Modal`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal), as we'll see later. - -Unlike other UI Components, Modals cannot be sent with messages. They must be invoked by an Application Command or another UI Component. - -## Usage Syntax - -```py -class MyModal(discord.ui.Modal): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - self.add_item(discord.ui.InputText(label="Short Input")) - self.add_item(discord.ui.InputText(label="Long Input", style=discord.InputTextStyle.long)) - - async def callback(self, interaction: discord.Interaction): - embed = discord.Embed(title="Modal Results") - embed.add_field(name="Short Input", value=self.children[0].value) - embed.add_field(name="Long Input", value=self.children[1].value) - await interaction.response.send_message(embeds=[embed]) -``` - - - - -The `ctx` parameter we define in Application Commands receives an [`ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext) object. Using its `send_modal()` coroutine, you can send a Modal dialog to the user invoking the Application Command. - -```py -@bot.slash_command() -async def modal_slash(ctx: discord.ApplicationContext): - """Shows an example of a modal dialog being invoked from a slash command.""" - modal = MyModal(title="Modal via Slash Command") - await ctx.send_modal(modal) -``` - - - - -The `interaction` parameter we define in UI Components receives an [`Interaction`](https://docs.pycord.dev/en/stable/api/models.html#discord.Interaction) object. The `response` attribute of the object contains an [`InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object, with various coroutines such as `send_message()` and `send_modal()`, which we utilize. - -```py -class MyView(discord.ui.View): - @discord.ui.button(label="Send Modal") - async def button_callback(self, button, interaction): - await interaction.response.send_modal(MyModal(title="Modal via Button")) - -@bot.slash_command() -async def send_modal(ctx): - await ctx.respond(view=MyView()) -``` - - - - -The above example uses an embed to display the results of the modal submission, but you can do anything you want with the text provided by the user. -Each input field can be accessed in the order it was added to the modal dialog, via `Modal.children`. - -## Customization - -A Modal can have up to 5 [`InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) fields. These fields offer some customization. - -Each field has a label which is shown to the user. This is defined with `label`. - -The `style` parameter is used to determine whether it should be a short (single-line) or long (multi-line) input field. - -There are a number of aliases that can be used: - -```x title="Single-line InputTextStyle values:" -short -singleline -``` - -```x title="Multi-line InputTextStyle values:" -paragraph = 2 -multiline = 2 -long = 2 -``` - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Buttons](./buttons) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/introduction.mdx b/i18n/it/docusaurus-plugin-content-docs/current/introduction.mdx deleted file mode 100644 index 3262c632..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/introduction.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Introduction -description: Pycord Guide is a complete guide for Pycord. Learn how to create Discord Bots today! -sidebar_position: 1 ---- - -Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord, written in Python. Pycord is a maintained fork of [discord.py](https://github.com/Rapptz/discord.py). - -## Before you begin - -Pycord is an advanced and complex Python library. To take advantage of the full capabilities of Pycord, you will need to have a good understanding of Python. You should know the basics of Python and have an understanding of the following concepts: - -- Variables -- Data Types -- Functions -- Packages -- Conditionals -- Loops -- Classes -- Object-Oriented Programming -- Inheritance -- Exception Handling -- Iterators -- Coroutines -- Async/Await - -This list is not exhaustive, but it should give you a good idea of what you need to know to get started. - -When you see an ellipsis - that's the three dots - in this guide, it is a placeholder for code that you need to fill in. Sometimes, it may be code for a command, while other times it could be something simple like a Guild ID. Make sure to replace them before running your bot! - -## Learning Resources - -Here are some good resources to get started or to freshen up your Python knowledge: - -- [Official Beginner's Guide](https://wiki.python.org/moin/BeginnersGuide) -- [Official Tutorial](https://docs.python.org/3/tutorial/) -- [Automate the Boring Stuff, a free online book for complete beginners to programming](https://automatetheboringstuff.com/) -- [Learn Python in y Minutes, complete cheat sheet for people who know programming already](https://learnxinyminutes.com/docs/python3/) -- [Swaroopch's free Python book](http://python.swaroopch.com/) -- [Codeabbey, exercises for beginners](http://www.codeabbey.com/) - -## Credits - -First of all, we would like to thank [Rapptz](https://github.com/Rapptz) for the original [discord.py](https://pypi.org/project/discord.py) library. Pycord is a maintained fork of this library. - -We would also like to thank the [discord.js guide](https://discordjs.guide), which inspired this guide style-wise, and the [original Pycord Guide](https://namantech.me/pycord), which inspired some content in this guide. - -We created this guide using [Docusaurus v2](https://docusaurus.io), a modern static site generator for React. We would also like to thank Danktuary for his [`@discord-message-components/react`](https://www.npmjs.com/package/@discord-message-components/react) package, from which we took the Discord message components. - -And finally, we would like to thank the amazing and loving community of Pycord users, contributors and developers. diff --git a/i18n/it/docusaurus-plugin-content-docs/current/more/_category_.json b/i18n/it/docusaurus-plugin-content-docs/current/more/_category_.json deleted file mode 100644 index 2cbe2c56..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/more/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 8, - "label": "More", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/more/community-resources.mdx b/i18n/it/docusaurus-plugin-content-docs/current/more/community-resources.mdx deleted file mode 100644 index ed3075bd..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/more/community-resources.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Community Resources ---- - -This page showcases the amazing things created by the Pycord community, including bots, Plugins, and more. - -## Plugins - -| Name | Type | GitHub | -| --------------- | ------------ | --------------------------------------------------------------- | -| Music Cord | Music | [NixonXC/cord-music](https://github.com/NixonXC/cord-music) | -| pycord-i18n | Localization | [Dorukyum-pycord-i18n](https://github.com/Dorukyum/pycord-i18n) | -| pycord-multicog | Cogs | [pycord-multicog](https://github.com/Dorukyum/pycord-multicog) | -| EzCord | Utilities | [EzCord](https://github.com/tibue99/ezcord) | - -## Bots - -| Name | Type | Link | -| ------------------------ | ------------ | ----------------------------------------------------------------------------------- | -| Discord-Multipurpose-Bot | Multipurpose | [github](https://github.com/pogrammar/Discord-multipurpose-bot/tree/master/Python) | -| inconnu | Fun & QOL | [github](https://github.com/tiltowait/inconnu) | -| Mai | Multipurpose | [github](https://github.com/TeamMai/Mai) & [website](https://xfghoul.github.io/Mai) | -| Toolkit | Multipurpose | [github](https://github.com/Dorukyum/Toolkit) | diff --git a/i18n/it/docusaurus-plugin-content-docs/current/more/contributing.mdx b/i18n/it/docusaurus-plugin-content-docs/current/more/contributing.mdx deleted file mode 100644 index 8fdf31af..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/more/contributing.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: Contributing to the Guide -description: Learn how to contribute to the Pycord Guide. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -This page outlines some of the basic syntax you need to know to contribute to the guide. We recommend you also check out: - -- [Docusaurus's Docs](https://docusaurus.io/docs/) -- [Contributing Rules](https://github.com/Pycord-Development/guide/blob/master/.github/CONTRIBUTING.md) - -## Info - -We use [Docusaurus v2](https://docusaurus.io/) to generate our guide. All the guide pages are generated -from `mdx` files in the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory. -MDX allows you to use JSX in your markdown content. - -## Structure - -Let's visit the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory and check its file structure. - -We can see various folders and a few files in it. Let's talk a bit about the `introduction.mdx` file. At the top, you can see something like: - -```md ---- -title: Introduction -description: ... -sidebar_position: 1 ---- -``` - -Most pages have this at the top. The `title` defaults to the file name. Since the titles need to be Capitalized according to need while the file names are lowercased (sometimes, the file names are shorter than the title!), we set a title ourselves. - -The `description` field is also important. This is the text shown in an embed when the page's link is shared on Discord, Twitter or other websites that support embedded links. Make sure to give a nice an interesting description! - -The `sidebar_position` field is pretty self-explanatory. It sets the position of the page in the sidebar. Most files in categories do not need this since they are sorted alphabetically. - -## Markdown Syntax - -This page quickly outlines some of the syntax that is used in markdown. - -````mdx -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - - ```python - print("We can use code blocks like this.") - ``` - -You can add [links to other websites](https://pycord.dev). You can add images like this: ![alternate text that describes the image](https://pycord.dev/image.png). - -- You can create -- unordered lists like this - -1. Or ordered lists -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` -4. Like this - -# Headers - -## Go - -### Like - -#### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet -```` - -
-Preview -
- -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - -```python -print("We can use code blocks like this.") -``` - -You can add [links to other websites](https://pycord.dev). You can add images by adding ![alt text](@site/static/img/favicon.ico). - -- You can create -- unordered lists like this - -1. Or ordered lists - -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` - -4. Like this - - # Headers - - ## Go - - ### Like - - #### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet - -
-
- -## Admonitions - -We can add warnings, notes, etc. with the following syntax: - -```md -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: -``` - -
-Preview -
- -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: - -
- -
- -## Discord Message Components - -As most files already have the imports for these, it's not that hard to add them. - -First, import the necessary components: - -```tsx -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; -``` - -The div starts like so: - -```tsx - - - - -
-``` - -This is where you list a `DiscordMessage`. - -```tsx - - - Hello! - - - -
-``` - - - - Hello! - - - -
- -It has a pretty straightforward syntax. - -:::tip - -Add a `
` to the end of a component to make the content below it look better. - -::: - -### Slash Commands - -To make a message authored by a slash command, do the following: - -```tsx - - -
- - update - -
- Updated dependencies to the latest version! -
-
-``` - - - -
- - update - -
- Updated dependencies to the latest version! -
-
- -### Buttons - -To make a message with buttons, do the following: - -```tsx - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
-``` - - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
- -## Page Format - -There are a few things you need to take care of: - -1. Make sure that the spelling and grammar is perfect. We have a GitHub action configured that will warn you about spelling errors when you start a pull request. Make sure to commit your changes accordingly. - - As for the grammar, you should try reading the changes you have done and wait for reviews from others. - -2. A common mistake people make is incorrect header style. People often think that the less the important the topic is, the lower it's heading style should be. - - ```md - [PAGE STARTS] - # Topic - ## Less Important Topic - ## Subtopic - ``` - - ```md - [PAGE STARTS] - # About - [Introduction] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - That's VERY wrong. Here's the correct example: - - ```md - [PAGE STARTS] - [Introduction] - ## Topic - ## Less Important Topic - ### Subtopic - ``` - - ```md - [PAGE STARTS] - [Introduction] - - ## About - [More Information] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - Note that the `---`s at the beginning have been skipped here. diff --git a/i18n/it/docusaurus-plugin-content-docs/current/more/git.mdx b/i18n/it/docusaurus-plugin-content-docs/current/more/git.mdx deleted file mode 100644 index 0f929d6d..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/more/git.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Installing Git -description: Learn how you can install Git on your system. ---- - -Git is software for tracking changes in any set of files (also known as a "version control" software), usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems). - -Let's see how to install Git on different platforms. - -## Windows - -On Windows, Git can be installed via: - -- [Git for Windows](https://gitforwindows.org) -- [Git Scm](https://git-scm.com/download/windows) - -## Linux - -On Linux, Git is probably already installed in your distribution's repository. If not, you can install it via [Git for Linux](https://git-scm.com/download/linux). You can also install it via the built-in package manager on your Linux distro. - -## Mac - -You can install Git for your macOS computer via [Git for Mac](https://git-scm.com/download/mac). Alternatively, it can be also be installed from the Xcode Command Line Tools by installing Xcode from the App Store, or by running this: - -``` -xcode-select --install -``` - -## Using Package Managers - -You can also install Git using package managers. - -### Chocolatey - -If you use the Chocolatey package manager, you can install Git using: - -``` -choco install git -``` - -### Scoop - -If you use Scoop, you can install Git using: - -``` -scoop install git -``` - -### Brew - -If you're on macOS or Linux, you can install Git using: - -``` -brew install git -``` diff --git a/i18n/it/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx b/i18n/it/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx deleted file mode 100644 index b0b8c7ea..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Virtual Environments -description: Learn how to set up a virtual environment for Pycord. ---- - -## Setup - -Sometimes you want to keep libraries from polluting system installs or use a different version of libraries than the ones installed on the system. You might also not have permissions to install libraries system-wide. For this purpose, the standard library as of Python 3.3 comes with a concept called “Virtual Environment”s to help maintain these separate versions. - -A more in-depth tutorial is found on [Virtual Environments and Packages](https://docs.python.org/3/tutorial/venv.html). - -However, for the quick and dirty: - -Go to your project’s working directory: - -```bash -$ cd your-bot-source -$ python3 -m venv venv -``` - -Activate the virtual environment: - -```bash -$ source venv/bin/activate -``` - -On Windows you activate it with: - -```batch -$ venv\Scripts\activate.bat -``` - -Use pip like usual: - -```bash -$ pip install -U py-cord -``` - -Congratulations. You now have a virtual environment all set up. - -## Additional info - -It can be useful to set up a requirements.txt, so you can just put all of your dependencies in there and have pip install it. -For instance, if you wanted to have the latest 2.0 version of pycord and [pytz](https://github.com/stub42/pytz/blob/master/src/README.rst), just create a file named requirements.txt with the following contents: - -``` -py-cord>=2.0.0 -pytz -``` - -And then (in your virtual environment) you can just execute - -```bash -pip install -r requirements.txt -``` - -To keep from committing your virtual environment to git, you can set up a .gitignore file with the following line -(assuming you named your virtual environment venv like the above example): - -``` -venv/ -``` diff --git a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/_category_.json b/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/_category_.json deleted file mode 100644 index c38ea014..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 7, - "label": "Popular Topics", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx b/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx deleted file mode 100644 index 5377a6c3..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Cogs ---- - -Cogs, often known as modules or extensions, are used to organize commands into groups. This is useful -for grouping commands that have the same general idea (such as moderation commands). This also helps -to avoid making your bot's files messy and cluttered. - -## Getting Started - -First, you'll need to create a folder to store your cogs, e.g. `cogs/`. - -Then, create a file inside the folder, e.g. `cogs/greetings.py`. By convention, the file name should -be the same as the name of the cog or module. - -We can then create the cog. - -```python title="./cogs/greetings.py" -import discord -from discord.ext import commands - -class Greetings(commands.Cog): # create a class for our cog that inherits from commands.Cog - # this class is used to create a cog, which is a module that can be added to the bot - - def __init__(self, bot): # this is a special method that is called when the cog is loaded - self.bot = bot - - @commands.command() # creates a prefixed command - async def hello(self, ctx): # all methods now must have both self and ctx parameters - await ctx.send('Hello!') - - @discord.slash_command() # we can also add application commands - async def goodbye(self, ctx): - await ctx.respond('Goodbye!') - - @discord.user_command() - async def greet(self, ctx, member: discord.Member): - await ctx.respond(f'{ctx.author.mention} says hello to {member.mention}!') - - math = discord.SlashCommandGroup("math", "Spooky math stuff") # create a Slash Command Group called "math" - advanced_math = math.create_subgroup( - "advanced", - "super hard math commands!" - ) - - @math.command() - async def add(self, a: int, b: int): - c = a + b - await ctx.respond(f"{a} + {b} is {c}.") - - @advanced_math.command() - async def midpoint(self, x1: float, y1: float, x2: float, y2: float): - mid_x = (x1 + x2)/2 - mid_y = (y1 + y2)/2 - await ctx.respond(f"The midpoint between those coordinates is ({mid_x}, {mid_y}).") - - @commands.Cog.listener() # we can add event listeners to our cog - async def on_member_join(self, member): # this is called when a member joins the server - # you must enable the proper intents - # to access this event. - # See the Popular-Topics/Intents page for more info - await member.send('Welcome to the server!') - -def setup(bot): # this is called by Pycord to setup the cog - bot.add_cog(Greetings(bot)) # add the cog to the bot -``` - -You can add any number of commands to your cog, as well as event listeners. However, this code will -not work on its own. In your main bot file, you must add the following code: - -```python -bot.load_extension('cogs.greetings') -``` - -This loads the file `cogs/greetings.py` and adds it to the bot. -The argument of `load_extension` should be your cog's path (e.g. cogs/greetings.py) without the file -extension and with the `/` replaced with `.` - -If you have multiple cogs, you can add them all at once by adding the following code: - -```python -cogs_list = [ - 'greetings', - 'moderation', - 'fun', - 'owner' -] - -for cog in cogs_list: - bot.load_extension(f'cogs.{cog}') -``` - -## Cog Rules - -When using a cog instead of the main file, there are some changes you have to make to your code. This -is because cogs work slightly different from a regular file. - -### The `self` variable - -The self variable is a variable that represents a class. In the case of cogs, `self` represents -the cog. In the `__init__` function, you can see that we have `self.bot = bot`. `bot` represents your -`discord.Bot` or `discord.ext.commands.Bot` instance, which is used for some functions. - -This means that instead of using functions that would usually be accessed via `bot`, you now need -to access them via `self.bot` - -Because we're in a class, all of our commands are methods of that class. Because of this, all of our -functions need to have `self` as the first parameter, where `self` is the cog. Without this, we -wouldn't be able to access our bot instance. - -### Creating Commands - -When creating prefixed commands, your decorator would usually be something like `@bot.command()`. If you're using -cogs, this isn't the case. In a cog, you can't access the bot instance outside of functions, so to -register a function as a command, you must instead use `@commands.command()`. - -Similar to prefixed commands, you'll have to use either the `@discord.slash_command()`, `@discord.user_command()`, -or `@discord.message_command()` decorators for Application Commands. - -Also, when creating a command, make sure that it is indented. If we want a command to be actually -inside a cog, it has to be inside your cog's class. If the command is not inside the cog, -your command becomes useless. - -### Events - -When creating events, you can no longer use `@bot.event` as a decorator. This is because we cannot -access the `bot` variable outside a function. To make an event, you have to use the `ext.commands` -method, `@commands.Cog.listener()`. Events also need `self` as their first parameter. - -And that's it! Cogs are a simple and easy way of organizing your code. Now you can check out how to -create a help command [here](../extensions/commands/help-command). - -:::info Related Topics - -- [Creating a Help Command](../extensions/commands/help-command) -- [Rules and Common Practices](../getting-started/rules-and-common-practices) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Application Commands](../interactions#application-commands) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx b/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx deleted file mode 100644 index 3599cc82..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx +++ /dev/null @@ -1,383 +0,0 @@ ---- -title: Error Handling -description: All about handling errors. ---- - -import { - DiscordEmbed, - DiscordInteraction, - DiscordMessage, -} from "@pycord/discord-message-components-react"; -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -## About - -When using the library, errors are frequently raised due to various reasons. These reasons range from the Discord API -failing your bot's request due to missing permissions or an invalid syntax error. - -Before going into error handling, it's best that you learn the basic ways of handling errors. A good resource is: - -- [W3Schools' Guide to Python Try-Except Statements](https://www.w3schools.com/python/python_try_except.asp) - -## Basic Handling - -The most basic way to handle errors is to tackle it at the source. This can be done like so: - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -import asyncio - -import discord - -intents = discord.Intents.default() -intents.message_content = True - -bot = discord.Bot(intents=intents) - - -@bot.slash_command(description="Gets some feedback.") -@discord.option("name", description="Enter your name.") -async def feedback(ctx: discord.ApplicationContext, name: str): - try: - await ctx.respond(f"Hey, {name}! Send your feedback within the next 30 seconds please!") - - def is_author(m: discord.Message): - return m.author.id == ctx.author.id - - feedback_message = await bot.wait_for("message", check=is_author, timeout=30.0) - await ctx.send(f"Thanks for the feedback!\nReceived feedback: `{feedback_message.content}`") - except asyncio.TimeoutError: - await ctx.send("Timed out, please try again!") - - -bot.run("TOKEN") -``` - -If you respond within 30 seconds, the interaction will look like so: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Great bot! - - - Thanks for the feedback! -
- Received feedback: Great bot! -
-
-
- -Otherwise, if you don't respond in time, the interaction will go as follows: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Timed out, please try again! - -
-
- -This basic method of error handling can be extended to handle -many other errors including ones raised directly by py-cord. - -## Per-Command Handling - -This type of error handling allows you to handle errors per each command you have on your bot. -Each and every command can have it's own error handler made to handle specific errors that each command may raise! - -An example of per-command error handling is as follows: - -:::note Bridge Commands - -For these types of commands, it is recommended to utilize global error handling -until [the feature](https://github.com/Pycord-Development/pycord/issues/1388) is added. -::: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot(owner_id=...) # Your Discord user ID goes in owner_id - - -@bot.slash_command(description="A private command...") -@commands.is_owner() # This decorator will raise commands.NotOwner if the invoking user doesn't have the owner_id -async def secret(ctx: discord.ApplicationContext): - await ctx.respond(f"Hey {ctx.author.name}! This is a secret command!") - - -@secret.error -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.NotOwner): - await ctx.respond("Sorry, only the bot owner can use this command!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If your ID is registered as the owner ID, you'll get the following: - - - -
- - secret - -
- Hey Dorukyum! This is a secret command! -
-
-
- -Any other user whose ID doesn't match the bot owner's will get the following: - - - -
- - secret - -
- Sorry, only the bot owner can use this command! -
-
-
- -This local (per-command) error handler can also be used to handle the same types of errors that standard try-except -statements can handle. This is done by using the same method as above with the `isinstance` built-in function. - -## Per-Cog Handling - -Adding error handlers per-command can be quite the task in terms of work if you have a lot. If you have happened to -group your commands in cogs, then you're in luck! You can create an error handler that is specific to a cog and -handles all errors raised by commands inside that cog. - -Here's an example of a bot with a cog that implements its own error handling: - -```python title="./cogs/dm.py" -# This cog is for DM only commands! Sadly, we only have 1 command here right now... - -import discord -from discord.ext import commands - - -class DM(commands.Cog): - def __init__(self, bot: commands.Bot): - self.bot = bot - - @commands.command() - @commands.dm_only() # This decorator will raise commands.PrivateMessageOnly if invoked in a guild context. - async def avatar(self, ctx: commands.Context): - embed = discord.Embed( - title="Avatar", - description=f"Here's your enlarged avatar, {ctx.author.name}!", - color=ctx.author.top_role.color - ) - embed.set_image(url=ctx.author.display_avatar.url) - await ctx.send(embed=embed, reference=ctx.message) - - async def cog_command_error(self, ctx: commands.Context, error: commands.CommandError): - if isinstance(error, commands.PrivateMessageOnly): - await ctx.send("Sorry, you can only use this in private messages!", reference=ctx.message) - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -def setup(bot: commands.Bot): - bot.add_cog(DM(bot)) -``` - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -# This is the main file where we load the DM cog and run the bot. - -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix=commands.when_mentioned_or("!")) -bot.load_extension("cogs.dm") -bot.run("TOKEN") -``` - -If you use this command in a DM context, you'll get the following: - - - - !avatar - - -
- - !avatar - -
- - Here's your enlarged avatar, BobDotCom! - -
-
-
- -Otherwise, if used in a guild context: - - - - !avatar - - -
- - !avatar - -
- Sorry, you can only use this in private messages! -
-
-
- -Per-cog error handling comes in very handy as you can relegate all of your error handling to a single function instead -of spreading it out across several per-command error handlers or inside the commands themselves. - -## Global Handling - -If separating your error handling is not how you would like to handle errors, then global error handling is the way to -go. This method of handling allows you to relegate all handling to a single function that resides within your bot -instance. - -A non-subclassed bot would implement this like so: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot() - - -@bot.slash_command(description="Get the bot's current latency!") -@commands.cooldown(1, 30, commands.BucketType.user) -# ^ This decorator allows one usage of the command every 30 seconds and raises commands.CommandOnCooldown if exceeded -async def ping(ctx: discord.ApplicationContext): - await ctx.respond(f"Pong! `{int(bot.latency*1000)} ms`.") - - -@bot.event -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.CommandOnCooldown): - await ctx.respond("This command is currently on cooldown!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If you've subclassed your bot, the `on_application_command_error` event will be placed inside the subclass without a -`bot.event` decorator and `bot.slash_command` will be replaced with `discord.slash_command`. - -The error handling used above will yield this interaction if the command is used again too quickly: - - - -
- - ping - -
- Pong! 49 ms. -
- -
- - ping - -
- This command is currently on cooldown! -
-
-
- -The only issue regarding global error handling is that, if you have a large amount of commands, the global handler may -start to get crammed with a lot of code. This is where all the previously mentioned handlers can take their place! - -## FAQ - -#### Why does the example in per-cog handling have self at the start of its function signatures? - -This is a feature of classes and allows you to reference the cog object as `self` and get access to the bot object -passed at initialization through `self.bot`. - -If this is new to you, we recommend checking out these helpful resources to learn more about classes and cogs: - -- [W3Schools' Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [Our Cogs Guide Page](./cogs) - -#### How many errors can I handle in a single error handler? - -While all the examples in this guide page only handle one specific error and re-raise all others, all of these -error handlers can be extended to catch many errors. - -In [basic handling](#basic) (i.e. try/except statements) you can do one of two things: - -- Explicitly handle the errors you know might get raised and then have a broad `except Exception as exc:` statement - as a catch-all. -- Catch any and all errors via the catch-all statement mentioned above. - -In [per-command](#percommand), [per-cog](#percog), and [global handling](#global), you can use elif clauses with the -built-in isinstance function to catch specific errors. Atop of this, an else clause can be used to catch any other -errors you either don't want to handle or want to relegate to a different error handler. - -#### Can I use more than one type of error handler at once? - -Thankfully, all of these different ways of error handling can be mixed together, so you don't have to pick just one! -For commands that raise specific errors that no other commands will raise, you can use [per-command](#percommand). -For cogs that raise specific errors that no other cogs will raise, use [per-cog](#percog)! Lastly, for errors that -occur frequently across all commands and cogs, use [global handling](#global)! - -However, one important note to remember is that you should always raise the error again in an error handler if it -isn't handled there! If you don't do this, the error will go ignored and your other handlers won't have a chance to -do their work! - -#### What's the difference between slash and prefixed command error handling? - -Although most examples shown here use slash commands, the [per-cog handling](#percog) section presents a prefixed -command. The main difference you may notice is the change in command signature. - -To make the distinguishing features apparent: - -- Slash commands use `on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException)` - as presented in the [per-command](#percommand) and [global handling](#global) examples. -- Prefixed commands use `on_command_error(ctx: commands.Context, error: commands.CommandError)` as presented in the - [per-cog handling](#percog) example. - -This distinction is made as both types of commands need their own system for handling errors that are specific to -themselves. - -:::info Related Topics - -- [Slash Commands](../interactions/application-commands/slash-commands) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Cogs](./cogs) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx b/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx deleted file mode 100644 index 9f4210af..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Intents -description: All about intents in Discord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## What are Intents? - -Intents allow bot developers to "subscribe" to specific events in Discord. This is useful for bots that need to respond to specific events, such as when a user joins a server or sends a message. You could choose to enable all intents or to enable only specific intents that your bot requires. - -## How do I enable intents? - -:::important - -Remember that [Privileged Intents](#what-are-privileged-intents) require you to enable them in the Discord Developer Portal. Verified Discord Bots that don't already have access to them will need to request Discord to allow access. - -::: - - - - -```python -import discord - -bot = discord.Bot(intents=discord.Intents.all()) -``` - - - - - -You can view a list of intents and the events they subscribe to [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```python title="Enabling Intents" -import discord - -bot = discord.Bot(intents=discord.intents.members(bans=True, guilds=True)) -``` - - - - -## What are Privileged Intents? - -Discord defines some intents as "privileged" because of the sensitive information they contain. Currently, there are three privileged intents: `members`, `presences`, and `message_content`. These intents must be enabled in your bot's Developer Portal. Once your bot reaches 100 servers, you will need to verify your bot for these intents to keep working and for your bot to be able to be invited to more guilds. - -:::tip - -Only enable these intents if you need them. These intents give your bot access to quite sensitive information about the users in your guild. These intents are privileged to respect the privacy of users, and you should do that as well. - -Not enabling these intents doesn't mean you won't be able to ban users, but you will be unable to detect when a new user joins a guild, or what game they are playing. The majority of bots won't need all intents. - -::: - -:::info Related Topics - -- [Sharding Bots](sharding) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx b/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx deleted file mode 100644 index c3d17197..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Sharding -description: All about Sharding Discord Bots. ---- - -# Sharding - -## What is Sharding? - -Sharding is the process of breaking up your bot into smaller pieces so that it has a better time handling -events. As [Discord's Documentation](https://discord.com/developers/docs/topics/gateway#sharding) puts -it, sharding is "a method of user-controlled guild sharding which allows for splitting events across -several gateway connections." - -Sharding is used only for large bots and takes up additional resources for managing the new processes. -Pycord automatically shards your bot, so the only thing you need to do is use an `AutoShardedClient` -or `AutoShardedBot` class instead of a plain `Client` or `Bot` class. Pretty cool, right? - -Just because you _can_ shard your bot doesn't mean you _should_. While Pycord makes it easy to shard -your bot, it isn't necessary to shard unless your bot is large. Sharding a small bot isn't -just useless, but _harmful_, as it uses extra resources and may slow down your bot. Discord -themselves will let you know when your bot needs sharding, so you won't need to worry about this until they contact you. - -## How Do I Shard in Pycord? - -Sharding in Pycord is straightforward. - -Just replace your `discord.Client`, `discord.Bot`, `commands.Bot` objects -with `discord.AutoShardedClient`, `discord.AutoShardedBot`, `commands.AutoShardedBot` respectively. - -These new objects have been inherited from the original objects, so all the functions from those other types should be present. - -If you want to specify the number of shards your bot uses, -just add the `shards` parameter, along with the number of shards you want. - -## Why Should I Shard my Bot? - -Sharding is very necessary for big bots. While your bot grows, it gets harder for your bot to control -how many guilds it is in and what parts of your code should do what. This is exactly what sharding -handles, it makes all of this easier for your bot. Remember, though, only shard your bot once it's -big enough, and that's at _least_ 1,000 guilds. - -:::info Related Topics - -- [Hosting your Bot](../Getting-Started/hosting-your-bot) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx b/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx deleted file mode 100644 index bd2969c1..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Subclassing Bots -description: Subclassing is a popular way of creating Discord Bots. Explore how you can create a Discord bot by subclassing. ---- - -## About - -Subclassing is another popular way of creating Discord Bots. Here, you create a bot by extending a bot class. To some advanced users, this is preferable to creating a bot instance with `bot = discord.Bot()`. - -Subclassing is an intermediate python concept, so we recommend you learn about it before continuing. Some good resources are: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -## Why Subclassing? - -Many developers prefer to subclass their bots for many reasons, some of them being: - -#### Skeletal Frameworks for Bots - -Developers often share their bots code on open-source platforms, mostly GitHub, and allow users to self-host the bot (running their own instance of the bot with the code provided by the developer. Permissions vary in accordance to licences). Here, users find it easier and more convenient to have a small file that imports the custom bot class and runs it, rather than having to go through the code of the bot and find out which file to run. This makes it easier for people not familiar with programming to run and customize the bot, since it often brings down the code to: - -```python title="./main.py" -from src import Bot - -bot = Bot() - -bot.run("TOKEN") -``` - -Here, all the commands are inside the `/src` folder that the user need not bother with. - -#### Running Multiple Instances - -Some developers may need to run multiple instances of their bot (perhaps on different bot accounts). For example, a developer might have a second bot for testing alpha features. This system makes it simpler for the developer, and allows them to maintain multiple versions of the bot in the same directory: - -```python title="./alpha_bot.py" -from src import Bot - -class AlphaBot(Bot): # subclasses Bot - ... # insert any custom configuration - -bot = AlphaBot() - -@bot.slash_command() # adds a new slash command to this subclassed bot -async def alpha_feature(ctx): - await ctx.respond("Alpha Feature!") - -bot.run("TOKEN") -``` - -There are many more reasons to subclass! It's not required, and won't affect the speed of the bot, but it may affect your development process, for the good or for the worse. You don't miss out on any features when you subclass, either. Some developers want the OOP feel, while some just prefer that method and find it easier. - -## Basic Example - -```python -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override the on_ready event - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') - -bot = MyBot() - -@bot.slash_command() # create a slash command -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run('token') -``` - -As you can see, instead of creating a bot object with `bot = discord.Bot()`, we subclass [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). We then create an instance of our new bot class and run it. Notice how we don't need to use the `@event` decorator. - -Here's another example: - -```python title="./src/bot.py" -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override on_ready - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') -``` - -```python title="./src/\_\_init\_\_.py" -from .bot import MyBot # import the MyBot class from the bot.py file -``` - -```python title="./main.py" -from src import MyBot # import MyBot from /src - -bot = MyBot() # create an instance of MyBot - -@bot.slash_command() -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run("TOKEN") # run the bot -``` - -These are just two ways you could do it. There are ton of other structures you can implement. It's up to you. - -So, should you subclass? There are no limitations you face if you decide to subclass your bot, but, once again, it's up to you. - -:::info Related Topics - -- [Making a Help Command](../Extensions/Commands/help-command) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx b/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx deleted file mode 100644 index 23220b0e..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Threads -description: Threads with Pycord ---- - -In programming, threads are a way to run multiple processes at the same time. In Discord, threads are -a way to keep multiple conversations going at the same time. Let's take a brief look at how to use threads in Pycord. - -:::tip - -Not all the methods and attributes will be covered in this guide, but you can find them in our documentation! -[Check it out!](https://docs.pycord.dev/en/stable/api/models.html#discord.Thread) - -::: - -## Creating a thread - -With a few simple lines of code, we can create threads in Pycord. - -:::important - -All public threads need a starting message. This message will start the thread. However, private threads -(which are unlocked with having your server boosted to Level 2), do not require a starting message. - -::: - -### Creating thread from a message - -```python title="Creating a Thread from a Message" -message = await ctx.send("My Starting Message") -await message.create_thread(name="thread name", auto_archive_duration=60) -``` - -You may also use other ways to create the thread, for example, by using `on_message` events or by commands. - -### Creating thread in a channel - -```python title="Creating a Thread from a Channel" -channel = bot.get_channel(...) # define this! -await channel.create_thread(name="Thread Name", message=None, auto_archive_duration=60, type=None, reason=None) -``` - -A thread type could be `news_thread`, `public_thread`, `private_thread`. You may use it by passing `type=discord.ChannelType.news_thread`. - -## Deleting Threads - -Deleting Threads is simple. You need to get a thread and then use the `delete` method. - -```python title="Deleting a Thread" -thread = bot.get_channel(thread_id) # you could use other ways to get a thread -await thread.delete() -``` - -## Editing Threads - -**Parameters** - -- `name` (str) – The new name of the thread - -- `archived` (bool) – Whether to archive the thread or not. - -- `locked` (bool) – Whether to lock the thread or not. - -- `invitable` (bool) – Whether non-moderators can add other non-moderators to this thread. Only available for private threads. - -- `auto_archive_duration` (int) – The new duration in minutes before a thread gets automatically archived for inactivity. Must be one of 60, 1440, 4320, or 10080. - -- `slowmode_delay` (int) – Specifies the slow-mode rate limit for users in the thread, in seconds. A value of 0 disables slow-mode. The maximum value possible is 21600. - -```python title="Editing a Thread" -thread = bot.get_channel(id) -await thread.edit( - name="New Name", - archived=True, - locked=True, - slowmode_delay=10, - auto_archive_duration=60, -) -``` - -As you can see, threads are very simple. Once you learn how to use them, it's easy to create whatever you want. - -## FAQ - -### Why am I getting a `Forbidden` error when I try to create a thread? - -A `Forbidden` error occurs when the bot does not have the correct permissions to create threads. - -### Why am I getting an Unknown Message error when I try to create a thread? - -Getting an error looking something like `discord.ext.commands.errors.CommandInvokeError: Command -raised an exception: HTTPException: 400 Bad Request (error code: 10008): Unknown Message`? - -There could be multiple reasons, some of them being: - -- The message does not exist -- The message already has a thread -- The message is in channel x, you are trying to start a thread in channel y. -- The message was deleted. - -:::info Related Topics - -<>{/* I can't think of any related topics for this at the moment. */} - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/voice/_category_.json b/i18n/it/docusaurus-plugin-content-docs/current/voice/_category_.json deleted file mode 100644 index 8baf3da8..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/voice/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 6, - "label": "Voice" -} \ No newline at end of file diff --git a/i18n/it/docusaurus-plugin-content-docs/current/voice/index.mdx b/i18n/it/docusaurus-plugin-content-docs/current/voice/index.mdx deleted file mode 100644 index 835838c6..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/voice/index.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Voice ---- - -Welcome to the guide for voice features in Pycord. - -:::caution -This guide requires previous experience with Pycord and Python. -::: - -## Requirements - -The only requirement which is required for voice features is [`PyNaCl`](https://pypi.org/project/PyNaCl/). -The following features are optional: - -:::tip -Opus is also a required library, but this comes with Pycord. -Some hosts may not come with it, though, so remember to always check if required dependencies are installed. -::: - -- [`FFmpeg`](https://ffmpeg.org) - used for sending/receiving files other than `.pcm` and `.wav` -- [`Pycord.Wavelink`](https://github.com/Pycord-Development/Pycord.Wavelink), - [`Lavalink.py`](https://github.com/Devoxin/Lavalink.py), - [`Wavelink`](https://github.com/PythonistaGuild/Wavelink) or any other Python LavaLink library for music playback. diff --git a/i18n/it/docusaurus-plugin-content-docs/current/voice/playing.mdx b/i18n/it/docusaurus-plugin-content-docs/current/voice/playing.mdx deleted file mode 100644 index 7a58baee..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/voice/playing.mdx +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Wavelink Audio Player ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { - defaultOptions, -} from "@site/src/components/DiscordComponent"; - -# About - -Pycord and Wavelink try to keep the playing of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio playing feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/). - -## Starting out - -First you need to run a [Lavalink Server](https://github.com/freyacodes/Lavalink) to connect with. -There a multiple documentations to do this, so we are not covering that here. - -You also need to install the [wavelink](https://github.com/PythonistaGuild/Wavelink) library. - -```py title="Installing wavelink" -python3 -m pip install wavelink -``` - -You will now want to connect to your server via a node. - -```py title="Connect Node with Lavalink" -import discord -import wavelink - -bot = discord.Bot() - -async def connect_nodes(): - """Connect to our Lavalink nodes.""" - await bot.wait_until_ready() # wait until the bot is ready - - nodes = [ - wavelink.Node( - identifier="Node1", # This identifier must be unique for all the nodes you are going to use - uri="http://0.0.0.0:443", # Protocol (http/s) is required, port must be 443 as it is the one lavalink uses - password="youshallnotpass" - ) - ] - - await wavelink.Pool.connect(nodes=nodes, client=bot) # Connect our nodes -``` - -
- -Now you are finished making your node! Next, you will want to: - -1. Making a play command -2. Adding connect events - -### Making a play command - -To make a play command, you will need to make a function to connect and play audio in a voice channel. - -```py title="Play Command Example" -import typing - -@bot.slash_command(name="play") -async def play(ctx, search: str): - # First we may define our voice client, - # for this, we are going to use typing.cast() - # function just for the type checker know that - # `ctx.voice_client` is going to be from type - # `wavelink.Player` - vc = typing.cast(wavelink.Player, ctx.voice_client) - - if not vc: # We firstly check if there is a voice client - vc = await ctx.author.voice.channel.connect(cls=wavelink.Player) # If there isn't, we connect it to the channel - - # Now we are going to check if the invoker of the command - # is in the same voice channel than the voice client, when defined. - # If not, we return an error message. - if ctx.author.voice.channel.id != vc.channel.id: - return await ctx.respond("You must be in the same voice channel as the bot.") - - # Now we search for the song. You can optionally - # pass the "source" keyword, of type "wavelink.TrackSource" - song = await wavelink.Playable.search(search) - - if not song: # In case the song is not found - return await ctx.respond("No song found.") # we return an error message - - await vc.play(song) # Else, we play it - await ctx.respond(f"Now playing: `{song.title}`") # and return a success message -``` - - - -
- - play - -
- Now playing: Never Gonna Give You Up -
-
- -
- -Now that you've done this, the only thing left to do is make your connect events. - -### Adding connect events - -The final step to this guide is connecting the node to your server when the bot goes online. - -To make it, you will want to do the following: - -```py title="Adding connect events" -@bot.event -async def on_ready(): - await connect_nodes() # connect to the server - -@bot.event -async def on_wavelink_node_ready(payload: wavelink.NodeReadyEventPayload): - # Everytime a node is successfully connected, we - # will print a message letting it know. - print(f"Node with ID {payload.session_id} has connected") - print(f"Resumed session: {payload.resumed}") - -bot.run("token") -``` - -Congratulations! You have now implemented voice playing into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/it/docusaurus-plugin-content-docs/current/voice/receiving.mdx b/i18n/it/docusaurus-plugin-content-docs/current/voice/receiving.mdx deleted file mode 100644 index 70f91507..00000000 --- a/i18n/it/docusaurus-plugin-content-docs/current/voice/receiving.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Receiving Voice Samples ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -# About - -Pycord tries to keep the recording of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio recording feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/audio_recording.py). - -## Starting out - -The first thing you want to do is make a cache of your voice connections. This is fairly easy; as -it's just putting a variable with an empty dictionary in our code, such as `connections = {}`. - -You will now want to create your command for recording. - -```py title="Record Command Example" -import discord - -bot = discord.Bot() -connections = {} - -@bot.command() -async def record(ctx): # If you're using commands.Bot, this will also work. - voice = ctx.author.voice - - if not voice: - await ctx.respond("You aren't in a voice channel!") - - vc = await voice.channel.connect() # Connect to the voice channel the author is in. - connections.update({ctx.guild.id: vc}) # Updating the cache with the guild and channel. - - vc.start_recording( - discord.sinks.WaveSink(), # The sink type to use. - once_done, # What to do once done. - ctx.channel # The channel to disconnect from. - ) - await ctx.respond("Started recording!") -``` - - - -
- - record - -
- Started recording! -
-
- -
- -Now you are finished making your command for voice receiving! Next, you will want to: - -1. Make your finished callback -2. Make a stop command - -### Making a Callback - -To make a callback, you will want to define the currently undefined `once_done` function inside -our command, like so: - -```py title="Recorder Callback" -async def once_done(sink: discord.sinks, channel: discord.TextChannel, *args): # Our voice client already passes these in. - recorded_users = [ # A list of recorded users - f"<@{user_id}>" - for user_id, audio in sink.audio_data.items() - ] - await sink.vc.disconnect() # Disconnect from the voice channel. - files = [discord.File(audio.file, f"{user_id}.{sink.encoding}") for user_id, audio in sink.audio_data.items()] # List down the files. - await channel.send(f"finished recording audio for: {', '.join(recorded_users)}.", files=files) # Send a message with the accumulated files. -``` - - - - finished recording audio for:{" "} - {defaultOptions.profiles.bob.author} - - - -
- -Now that you've done this, the only thing left to do is make your stop command. - -### Making a Stop Command - -The final step to this guide is stopping the audio recording. This is the easiest step by far. - -To make it, you will want to do the following: - -```py title="Stop Recording Command" -@bot.command() -async def stop_recording(ctx): - if ctx.guild.id in connections: # Check if the guild is in the cache. - vc = connections[ctx.guild.id] - vc.stop_recording() # Stop recording, and call the callback (once_done). - del connections[ctx.guild.id] # Remove the guild from the cache. - await ctx.delete() # And delete. - else: - await ctx.respond("I am currently not recording here.") # Respond with this if we aren't recording. - -bot.run("token") -``` - -Congratulations! You have now implemented voice recording into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/it/docusaurus-plugin-content-pagesindex.tsx b/i18n/it/docusaurus-plugin-content-pagesindex.tsx deleted file mode 100644 index 6ca77bb2..00000000 --- a/i18n/it/docusaurus-plugin-content-pagesindex.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import DefaultLayout from "@site/src/layouts/DefaultLayout"; -import PYCHero from "@site/src/components/PYCHero"; -import PYCButton from "@site/src/components/PYCButton"; - -export default function Home(): JSX.Element { - return ( - - -
- Imagine a place where you can learn how to create an awesome Discord - bot, equip it with Pycord, and have it running in less than a minute. - Imagine a place where you can learn everything about Pycord. Imagine a - guide. A Pycord Guide! -

- Whether you are a newbie or an experienced developer, you will find - everything you need to know about Pycord here. This guide will teach - you: -
    -
  • How to get a brand new bot running from scratch;
  • -
  • How to create Interactions, Context Menus and Commands;
  • -
  • In-depth concepts such as Embeds, Reactions, Help Commands, Paginators, etc;
  • -
  • Popular Topics such as working with Databases, Sharding, etc;
  • -
  • Ways to handle and manage common errors and best practices for bots;
  • -
  • And Much More!
  • -
-
-
- ); -} diff --git a/i18n/it/docusaurus-theme-classic/footer.json b/i18n/it/docusaurus-theme-classic/footer.json deleted file mode 100644 index 82aab2e0..00000000 --- a/i18n/it/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "copyright": { - "message": "Copyright © 2022-2026 Pycord Development, All rights reserved.", - "description": "The footer copyright" - } -} diff --git a/i18n/it/docusaurus-theme-classic/navbar.json b/i18n/it/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 473b847e..00000000 --- a/i18n/it/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "title": { - "message": "Pycord Guide", - "description": "The title in the navbar" - }, - "item.label.Home": { - "message": "Home", - "description": "Navbar item with label Home" - }, - "item.label.Docs": { - "message": "Docs", - "description": "Navbar item with label Docs" - }, - "item.label.GitHub": { - "message": "GitHub", - "description": "Navbar item with label GitHub" - }, - "item.label.Source": { - "message": "Source", - "description": "Navbar item with label Source" - } -} diff --git a/i18n/ja/code.json b/i18n/ja/code.json deleted file mode 100644 index 9cce6148..00000000 --- a/i18n/ja/code.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "theme.ErrorPageContent.title": { - "message": "This page crashed.", - "description": "The title of the fallback page when the page crashed" - }, - "theme.NotFound.title": { - "message": "Page Not Found", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "We could not find what you were looking for.", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.admonition.note": { - "message": "note", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "tip", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.danger": { - "message": "danger", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "info", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.caution": { - "message": "caution", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "Scroll back to top", - "description": "The ARIA label for the back to top button" - }, - "theme.blog.archive.title": { - "message": "Archive", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "Archive", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "Blog list page navigation", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "Newer Entries", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "Older Entries", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "Blog post page navigation", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "Newer Post", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "Older Post", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.blog.post.plurals": { - "message": "One post|{count} posts", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} tagged with \"{tagName}\"", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "View All Tags", - "description": "The label of the link targeting the tag list page" - }, - "theme.colorToggle.ariaLabel": { - "message": "Switch between dark and light mode (currently {mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "dark mode", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "light mode", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "Breadcrumbs", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription": { - "message": "{count} items", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "Docs pages", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "Previous", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "Next", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "One doc tagged|{count} docs tagged", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "{nDocsTagged} with \"{tagName}\"", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versionBadge.label": { - "message": "Version: {versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "latest version", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "Edit this page", - "description": "The link label to edit the current page" - }, - "theme.common.headingLinkTitle": { - "message": "Direct link to {heading}", - "description": "Title for link to heading" - }, - "theme.lastUpdated.atDate": { - "message": " on {date}", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": " by {user}", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "Last updated{atDate}{byUser}", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "Versions", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "Tags:", - "description": "The label alongside a tag list" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "Close", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "Blog recent posts navigation", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.copied": { - "message": "Copied", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "Copy code to clipboard", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "Copy", - "description": "The copy button label on code blocks" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "Toggle word wrap", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "Toggle the collapsible sidebar category '{label}'", - "description": "The ARIA label to toggle the collapsible sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "Main", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "Languages", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "On this page", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "Read More", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "Read more about {title}", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.blog.post.readingTime.plurals": { - "message": "One min read|{readingTime} min read", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.breadcrumbs.home": { - "message": "Home page", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "Docs sidebar", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "Close navigation bar", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← Back to main menu", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "Toggle navigation bar", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.SearchBar.seeAll": { - "message": "See all {count} results" - }, - "theme.SearchPage.documentsFound.plurals": { - "message": "One document found|{count} documents found", - "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.SearchPage.existingResultsTitle": { - "message": "Search results for \"{query}\"", - "description": "The search page title for non-empty query" - }, - "theme.SearchPage.emptyResultsTitle": { - "message": "Search the documentation", - "description": "The search page title for empty query" - }, - "theme.SearchPage.inputPlaceholder": { - "message": "Type your search here", - "description": "The placeholder for search page input" - }, - "theme.SearchPage.inputLabel": { - "message": "Search", - "description": "The ARIA label for search page input" - }, - "theme.SearchPage.algoliaLabel": { - "message": "Search by Algolia", - "description": "The ARIA label for Algolia mention" - }, - "theme.SearchPage.noResultsText": { - "message": "No results were found", - "description": "The paragraph for empty search result" - }, - "theme.SearchPage.fetchingNewResults": { - "message": "Fetching new results...", - "description": "The paragraph for fetching new search results" - }, - "theme.SearchBar.label": { - "message": "Search", - "description": "The ARIA label and placeholder for search button" - }, - "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "Clear the query", - "description": "The label and ARIA label for search box reset button" - }, - "theme.SearchModal.searchBox.cancelButtonText": { - "message": "Cancel", - "description": "The label and ARIA label for search box cancel button" - }, - "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "Recent", - "description": "The title for recent searches" - }, - "theme.SearchModal.startScreen.noRecentSearchesText": { - "message": "No recent searches", - "description": "The text when no recent searches" - }, - "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { - "message": "Save this search", - "description": "The label for save recent search button" - }, - "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "Remove this search from history", - "description": "The label for remove recent search button" - }, - "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "Favorite", - "description": "The title for favorite searches" - }, - "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "Remove this search from favorites", - "description": "The label for remove favorite search button" - }, - "theme.SearchModal.errorScreen.titleText": { - "message": "Unable to fetch results", - "description": "The title for error screen of search modal" - }, - "theme.SearchModal.errorScreen.helpText": { - "message": "You might want to check your network connection.", - "description": "The help text for error screen of search modal" - }, - "theme.SearchModal.footer.selectText": { - "message": "to select", - "description": "The explanatory text of the action for the enter key" - }, - "theme.SearchModal.footer.selectKeyAriaLabel": { - "message": "Enter key", - "description": "The ARIA label for the Enter key button that makes the selection" - }, - "theme.SearchModal.footer.navigateText": { - "message": "to navigate", - "description": "The explanatory text of the action for the Arrow up and Arrow down key" - }, - "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "Arrow up", - "description": "The ARIA label for the Arrow up key button that makes the navigation" - }, - "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "Arrow down", - "description": "The ARIA label for the Arrow down key button that makes the navigation" - }, - "theme.SearchModal.footer.closeText": { - "message": "to close", - "description": "The explanatory text of the action for Escape key" - }, - "theme.SearchModal.footer.closeKeyAriaLabel": { - "message": "Escape key", - "description": "The ARIA label for the Escape key button that close the modal" - }, - "theme.SearchModal.footer.searchByText": { - "message": "Search by", - "description": "The text explain that the search is making by Algolia" - }, - "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "No results for", - "description": "The text explains that there are no results for the following search" - }, - "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "Try searching for", - "description": "The text for the suggested query when no results are found for the following search" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "Believe this query should return results?", - "description": "The text for the question where the user thinks there are missing results" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "Let us know.", - "description": "The text for the link to report missing results" - }, - "theme.SearchModal.placeholder": { - "message": "Search docs", - "description": "The placeholder of the input of the DocSearch pop-up modal" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "Try again", - "description": "The label of the button to try again rendering when the React error boundary captures an error" - }, - "theme.common.skipToMainContent": { - "message": "Skip to main content", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "Tags", - "description": "The title of the tag list page" - } -} diff --git a/i18n/ja/docusaurus-plugin-content-blog/options.json b/i18n/ja/docusaurus-plugin-content-blog/options.json deleted file mode 100644 index 9239ff70..00000000 --- a/i18n/ja/docusaurus-plugin-content-blog/options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": { - "message": "Blog", - "description": "The title for the blog used in SEO" - }, - "description": { - "message": "Blog", - "description": "The description for the blog used in SEO" - }, - "sidebar.title": { - "message": "Recent posts", - "description": "The label for the left sidebar" - } -} diff --git a/i18n/ja/docusaurus-plugin-content-docs/current.json b/i18n/ja/docusaurus-plugin-content-docs/current.json deleted file mode 100644 index 36b4849a..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.defaultSidebar.category.Getting Started": { - "message": "Getting Started", - "description": "The label for category Getting Started in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Interactions": { - "message": "Interactions", - "description": "The label for category Interactions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Application Commands": { - "message": "Application Commands", - "description": "The label for category Application Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.UI Components": { - "message": "UI Components", - "description": "The label for category UI Components in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Extensions": { - "message": "Extensions", - "description": "The label for category Extensions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Commands": { - "message": "Commands", - "description": "The label for category Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Pages": { - "message": "Pages", - "description": "The label for category Pages in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Voice": { - "message": "Voice", - "description": "The label for category Voice in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Popular Topics": { - "message": "Popular Topics", - "description": "The label for category Popular Topics in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar defaultSidebar" - } -} diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png deleted file mode 100644 index 7480e1da90a413f8dfe8e13b66a9a2a8c5dc2bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40520 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 CfS#QI diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg b/i18n/ja/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg deleted file mode 100644 index ce6b5110ab3b4285f55402fb88c1b8a8f6ba9900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78518 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 diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png deleted file mode 100644 index 32a47d0424f1ab420ca363682a12460aff040c91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39618 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 aeS&BlM7jQ%=K2BnBlKRJKmVP^m;VLX8_o0p diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/_category_.json b/i18n/ja/docusaurus-plugin-content-docs/current/extensions/_category_.json deleted file mode 100644 index 309b494a..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 5, - "label": "Extensions", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json b/i18n/ja/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json deleted file mode 100644 index 652aa4ee..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Bridge" -} \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx deleted file mode 100644 index 451775d3..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Bridge ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -## Concept - -Let's say that you want to make a command that is both a Slash Command and a Prefixed Command. Now, you could just copy and paste the code from the first command callback to the other and make some adjustments, but that's not very efficient. - -This is where the `ext.bridge` module comes in. It allows you to use one callback to make both a Slash Command and a Prefixed Command. - -### Example Usage - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def hello(ctx): - await ctx.respond("Hello!") - -bot.run("TOKEN") -``` - - - -

- - hello - -
- Hello! - - - - !hello - - - -
- - !hello - -
- Hello! -
- - -## Syntax - -First, instead of using `discord.Bot` or `commands.Bot`, we use `bridge.Bot`. `bridge.Bot` does inherit from `commands.Bot`, so you can do anything with `bridge.Bot` that `commands.Bot` can do. -Then, we define a command with `@bot.bridge_command()`. This makes a Bridge Command, which has both a Prefixed Command counterpart and a Slash Command counterpart. -Next, the callback has access to a `ctx` object, which is the context of the command. This context is either of `BridgeApplicationContext` type or `BridgeExtContext`. Because of that, it makes detecting how the function was called easier. - -### Using Bridge Commands in a Cog - -Like Slash Commands and Prefixed Commands, you can use Bridge Commands in a Cog. You can do this by using the `bridge_command` decorator. Here's an example: - -```python -import discord -from discord.ext import bridge, commands - -class Greetings(commands.Cog): - def __init__(self, bot): - self.bot = bot - - @bridge.bridge_command() - async def hello(self, ctx): - await ctx.respond("Hello!") - - @bridge.bridge_command() - async def bye(self, ctx): - await ctx.respond("Bye!") - -def setup(bot): - bot.add_cog(Greetings(bot)) -``` - -The cog will automatically split the Bridge Command into their Slash Command and Prefixed Command counterparts. - - - -
- - hello - -
- Hello! -
- - - !hello - - - -
- - !hello - -
- Hello! -
- - -
- - bye - -
- Bye! -
- - - !bye - - - -
- - !bye - -
- Bye! -
-
- -### Deferring - -You can defer if you want to communicate to the user that your bot is busy processing the command. This is done by using `ctx.defer()`. For the Slash Command implementation, `ctx.defer()` calls the function that gives out a "Bot is thinking" message. For the Prefixed Command implementation, `ctx.defer()` enables the typing indicator. - - - -### Options - -Options are pretty straightforward. You just specify them like you do with prefixed commands, and you're all set! - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def sum(ctx, a: int, b: int): - await ctx.respond(a + b) - -bot.run("TOKEN") -``` - - - -
- - sum - -
- 4 -
- - - !sum 2 2 - - - -
- - !sum 2 2 - -
- 4 -
-
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json b/i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json deleted file mode 100644 index 63f8e08e..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx deleted file mode 100644 index bf345c07..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Command Groups ---- - -Command groups are a way to create subcommands for your commands. For example, `!afk set` or `!afk -remove`. - -## Syntax - -Creating a command group is very simple. - -```python title="Command Groups Example" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!') - -@bot.group() -async def afk(): - pass - -@afk.command() -async def set(): - ... - -@afk.command() -async def remove(): - ... - -# Another command group - -@bot.group(invoke_without_command=True) # Indicates if the group callback should begin parsing and invocation only if no subcommand was found. -async def math(ctx): - await ctx.send('Subcommand not found') - -@math.command() -async def add(ctx, a: int, b: int): - ... - -@math.command() -async def subtract(ctx, a: int, b: int): - ... -``` - -To create a command group, the command's decorator must be `@bot.group`. Once you have a command with -that decorator, you can use `@function.command()`, such as `@math.command()`. Now, you have subcommand -groups! - - - -:::info Related Topics - -- [Prefixed Commands](./prefixed-commands.mdx) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx deleted file mode 100644 index e84fd42d..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx +++ /dev/null @@ -1,481 +0,0 @@ ---- -title: Help Command ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Pycord's `commands` extension comes with a built-in help command. In this guide, we will take a look at them as well as learn how to create your own. Let's dive in! - -:::note - -This guide demonstrates using object-oriented programming and subclassing to make a help command for your -Pycord bot. It is important to understand these two concepts before continuing. - -**Learning Resources**: - -- [W3Schools - Python Subclassing](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools - Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -::: - -## The Wrong Way - -A popular way to create a help command is to disable the built-in help command and create your own. This is not recommended as it will lead to a lot of confusion. - -```python title="The Wrong Way" -bot = commands.Bot(command_prefix='!', help_command=None) -# OR -bot.help_command = None -# OR -bot.remove_command("help") - -@bot.command() -async def help(ctx, *, argument=None): - ... -``` - -While it's possible to create a help command this way, doing so does not utilize the full capabilities -of making one with Pycord. Making a help command with subclassing and OOP will save time and effort. - -## Types of Help Commands - -There are two types of built-in help commands: - -- [`DefaultHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.DefaultHelpCommand) -- [`MinimalHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.MinimalHelpCommand) - -`DefaultHelpCommand` is the command enabled by default. It isn't the best looking, but `MinimalHelpCommand` can help make it look a bit better. - - - - -```python title="Default Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.DefaultHelpCommand()) # help_command is DefaultHelpCommand by default so it isn't necessary to enable it like this -# We enable it here for the sake of understanding - -... - -bot.run("token") -``` - - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- - -```python title="Minimal Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.MinimalHelpCommand()) - -... - -bot.run("token") -``` - - - - !help - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
- -
- -
- -## Updating Built-in Help Commands - -Let's try to make the `MinimalHelpCommand` look better. We can do this by putting its content in an -embed. - -```python title="Minimal Help Command Example" -bot = commands.Bot(command_prefix='!') - - -class MyNewHelp(commands.MinimalHelpCommand): - async def send_pages(self): - destination = self.get_destination() - for page in self.paginator.pages: - emby = discord.Embed(description=page) - await destination.send(embed=emby) - -bot.help_command = MyNewHelp() -``` - -Let's go through the code. - -First, we create a new class called `MyNewHelp`. This class is a subclass of `MinimalHelpCommand`. - -Next, we override the `send_pages` method. This method is responsible for sending the help command to -the user. We override this method because we don't want to change the content of the pages, just how -they are sent. - -We use the `get_destination` method to get the destination of the message. This is the channel or use that the help -command is to be sent to. - -We use the `paginator.pages` property to get the different pages of the help command. We put the page -in an embed, and then send the embed to the destination channel. - -Finally, we set this as our new help command using `bot.help_command = MyNewHelp()`. - - - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a - category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
-
- -## Creating Your Help Command - -Not satisfied with the built-in help commands? You can create your own! - -For this, we will subclass the `HelpCommand` class. - -There are 4 methods that we need to override: - -- `HelpCommand.send_bot_help(mapping)` that gets called with `help` -- `HelpCommand.send_command_help(command)` that gets called with `help ` -- `HelpCommand.send_group_help(group)` that gets called with `help ` -- `HelpCommand.send_cog_help(cog)` that gets called with `help ` - -### Bot Help - -```python title="Bot Help Example" -class MyHelp(commands.HelpCommand): - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help") - for cog, commands in mapping.items(): - command_signatures = [self.get_command_signature(c) for c in commands] - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's go through the code. - -- First, we create a new class called `MyHelp`. This class is a subclass of `HelpCommand`. - -- Next, we override the `send_bot_help` method. This method is responsible for sending the main help - command to the user. - -- We create an embed with the title "Help". - -- We iterate through `mapping.items()`, which returns a list of tuples, the first element being the - cog and the second element being a list of commands. - -- By using `self.get_command_signature(c)` we get the signature of the command, also known as the - `parameters` or `arguments`. - -- There is a chance that the cog is empty, so we use `if command_signatures:`. - -- We get the name of the cog using `getattr(cog, "qualified_name", "No Category")`. This calls the - cog's attribute `qualified_name` which returns "No Category" if the cog has no name. - -- We add a field to the embed with the name of the cog and the value of the command signatures. - -- Finally, we send the embed to the channel. - -Let's improve the code a little. - -```python title="Improved Bot Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - command_signatures = [self.get_command_signature(c) for c in filtered] - - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Now the help command won't show commands that the user can't use, as well as aliases for commands. -Let's get the help command to show command aliases. - -### Command Help - -This function is called when the user uses `help `. - -```python title="Command Help Example" -class MyHelp(commands.HelpCommand): - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command), color=discord.Color.random()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's quickly go through the code we haven't discussed yet. - -- In line 3, we create an embed with a title the signature of the command (so that the title of the - embed looks like ` [parameter]`), and a random color. - -- In lines 4 and 5, we get the command's `help` description and add it to the embed. The help description - of a command can be specified in the docstrings of a command function. For example: - - ```` - ```python - @bot.command() - async def ping(ctx): - """Returns the latency of the bot.""" - await ctx.send(f"Pong! {round(bot.latency * 1000)}ms") - ``` - ```` - -- Line 6 is shorthand for - - ```python - alias = command.aliases - if alias: - ... - - # is the same as - - if alias := command.aliases: - ... - ``` - - A very helpful (but not well-known) Python shorthand! - -- In line 7, we get the aliases of the command and add them to the embed. - -### Cog Help - -This is pretty easy! - -```python title="Custom Cog Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_cog_help(self, cog): - embed = discord.Embed(title=cog.qualified_name or "No Category", description=cog.description, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(cog.get_commands()): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Once again, we create an embed, get the commands that the user can use, and add them to the embed. - -### Group Help - -Similar to the cog help, this is pretty easy! - -```python title = "Custom Group Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_group_help(self, group): - embed = discord.Embed(title=self.get_command_signature(group), description=group.help, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(group.commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Add all of these methods together, and you have a fully functioning help command! - -
-Click to see the final code for this section -
- -:::note - -The following code has been slightly edited from the tutorial version. - -::: - -```python title="Custom Help Command Example" -class SupremeHelpCommand(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - if command_signatures := [ - self.get_command_signature(c) for c in filtered - ]: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command) , color=discord.Color.blurple()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_help_embed(self, title, description, commands): # a helper function to add commands to an embed - embed = discord.Embed(title=title, description=description or "No help found...") - - if filtered_commands := await self.filter_commands(commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No help found...") - - await self.get_destination().send(embed=embed) - - async def send_group_help(self, group): - title = self.get_command_signature(group) - await self.send_help_embed(title, group.help, group.commands) - - async def send_cog_help(self, cog): - title = cog.qualified_name or "No" - await self.send_help_embed(f'{title} Category', cog.description, cog.get_commands()) - -bot.help_command = SupremeHelpCommand() -``` - -
-
- -## Command Attributes - -How can you add cooldowns, set aliases, and change the name of help commands? Command attributes can -help you do all of that, and more! - -```python title="Help Command Attributes" -attributes = { - 'name': "help", - 'aliases': ["helpme"], - 'cooldown': commands.CooldownMapping.from_cooldown(3, 5, commands.BucketType.user), -} - -# You need to use CooldownMapping.from_cooldown(rate, per, type) - -bot.help_command = MyHelp(command_attrs=attributes) -``` - -## Error Handling - -When a user attempts to use a command that does not exist, we need to inform the user. -We can do this by overriding the `send_error_message` function. - -```python title="Custom Help Error Example" -class MyHelp(commands.HelpCommand): - async def send_error_message(self, error): - embed = discord.Embed(title="Error", description=error, color=discord.Color.red()) - channel = self.get_destination() - - await channel.send(embed=embed) -``` - - - - !help update_pycord - - - - Command 'update_pycord' not found. - - - - -## Credits - -Most of the content from this guide is from -[InterStella0's walkthrough guide on subclassing HelpCommand](https://gist.github.com/InterStella0/b78488fb28cadf279dfd3164b9f0cf96). -Thanks to InterStella0 for making this guide amazing. - -:::info Related Topics - -- [Subclassing Bots](../../Popular-Topics/subclassing-bots) -- [Prefixed Commands](./prefixed-commands) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx deleted file mode 100644 index 87bef7ac..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx +++ /dev/null @@ -1,324 +0,0 @@ ---- -title: Prefixed Commands -description: Learn how to use the commands extension for Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Before Discord added slash commands, all bots had prefixed commands. A user would type the bot's prefix -followed by a word or phrase to invoke a command, such as `?help` or `!help`. -However, this prefixed commands system isn't native to Discord! Developers made use of an `on_message` -event to check if the message began with a certain character, then invoke the command. Every time a -message was sent, the bot would see the message and check for its "prefix" - -The syntax becomes a little more complicated when you want to have multiple commands. There are several -disadvantages to this system. This is where the commands extension comes in. `ext.commands` has -various advantages, such as: - -- Simpler syntax -- Easier to use -- Easier to parse user input -- Comes with built-in help commands -- Comes with a built-in system for categorizing commands - - - - -```python title="Prefixed Commands with Events" -import discord - -client = discord.Client() - -@client.event -async def on_message(message): - if message.content.startswith("!ping"): - await message.channel.send("Pong!") - - elif message.content.startswith("!announce"): - if len(message.content.split(" ")) < 3: - await message.channel.send("You need to specify a title and a message. Correct usage: `!announce Hello Hello everyone!`") - return - - msg = message.content.split(" ", 2) - title = msg[1] - content = msg[2] - - await message.channel.send("**{}**\n{}".format(title, content)) - - elif message.content.startswith("!"): - await message.channel.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !help - - - Unknown Command. - -
- -
- - -```python title="The Commands Extension" -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix="!", intents=intents) - -@bot.command() -async def ping(ctx): - await ctx.send("Pong!") - -@bot.command() -async def announce(ctx, title, *, message): - await ctx.send("**{}**\n{}".format(title, message)) - -@bot.event -async def on_command_error(ctx, error): - if isinstance(error, commands.CommandNotFound): - await ctx.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !pycord - - - Unknown command. - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
- !announce -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The commands extension has many more uses. This example only showcases the basic features mentioned -in the previous example. Other things you can do with the commands extension include using a different -built-in help command and creating your own. The following tutorials showcase these. - -::: - -
-
- -## Syntax - -Before we check out the syntax, let's take a look at the bot classes. - -> `discord.Client` - Contains only events. -> -> `discord.Bot` - Subclasses `discord.Client`, adds commands. -> -> `discord.ext.commands.Bot` - Subclasses `discord.Bot`, adds prefixed commands, cogs, and more. - -This means that `discord.ext.commands.Bot` has both slash commands and prefixed commands, as well as -events, cogs and more. - -Now let's look at the syntax. - -```python title="A Simple Prefixed Bot" -import discord -from discord.ext import commands # Import the commands extension -# discord.ext.commands are not the same as discord.commands! - -intents = discord.Intents.default() #Defining intents -intents.message_content = True # Adding the message_content intent so that the bot can read user messages - -bot = commands.Bot(command_prefix="!", intents=intents) # You can change the command prefix to whatever you want. - -@bot.command() # This is the decorator we use to create a prefixed command. -async def ping(ctx): # This is the function we will use to create the command. - await ctx.send("Pong!") # This is the response the bot will send. - - -bot.run("token") # Run the bot with your token. -``` - - - - !ping - - - Pong! - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The help command is a built-in command and is enabled by default. You will learn more about it in the -following guides. - -::: - -## Parameters - -Prefixed commands can take parameters, just like slash commands. You can specify the parameters in -the function itself. - -```python title="Parameters Example 1" -@bot.command() -async def echo(ctx, *, message): - await ctx.send(message) -``` - -`ctx` is the context of the message. `*` means that the parameter can be any number of words. `message` -is the parameter. If you had not passed `*`, `message` would only have been one word. - -For example, if a user had used `!echo hello world`, `message` would have been `hello`. Since we -passed `*`, `message` is `hello world`, or the rest of the message. - -We can pass multiple parameters too! - -```python title="Parameters Example 2" -@bot.command() -async def echo(ctx, channel:discord.TextChannel, title, *, message): - await channel.send("**{}**\n{}".format(title, message)) -``` - -In the example above, `channel` is a parameter that is of type `discord.TextChannel`. When you -specify the type of the parameter, Pycord will automatically try to convert the parameter to that type. -That is why you can use `channel.send` directly without needing to convert it first. - -We also have a new parameter, `title`. This does not have a type, so it will be a string. `*` means -that the rest of the message belongs to the next parameter, in this case, `message`. - -When a user types `!echo #general Greetings! Hello World!`, `channel` will be the text channel -`#general`, `title` will be `Greetings!` and `message` will be `Hello World!`. - -Let's take an example where the user passes `!echo #general Holiday Greetings! Greetings to you all!`. -Here, the user wants the title to be "Holiday Greetings!" and the message to be "Greetings to you all!". -However, since Pycord parses the message at whitespaces, the title will end up being "Holiday" and the -message "Greetings! Greetings to you all!". The user can prevent this by typing `!echo "Holiday -Greetings!" Greetings to you all!`. - - - - - - !echo #general Holiday Greetings! Greetings to you all! - - - Holiday -
- Greetings! Greetings to you all! -
- - !echo #general "Holiday Greetings!" Greetings to you all! - - - Holiday Greetings! -
- Greetings to you all! -
-
- -Let's check out another example for parameters and parameter types. - -```python title="Parameters Example 3" -import random - -@bot.command() -async def gtn(ctx, guess:int): - number = random.randint(1, 10) - if guess == number: - await ctx.send("You guessed it!") - else: - await ctx.send("Nope! Better luck next time :)") -``` - -If you had not specified the type of the parameter, it would have been a string. And since `"5"` is not -the same as `5` in python, the bot would have responded with "Nope! Better luck next time :)". -Even if you do not specify the type of the parameter, you can still convert it later on, in this case, -with `int(guess)`. - -:::info Related Topics - -- [Command Groups](groups) -- [Rules and Common Practices](../../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json b/i18n/ja/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json deleted file mode 100644 index baeba701..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Pages", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx deleted file mode 100644 index be90b035..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Paginator Basics ---- - -# Paginator Basics - -## [Page](https://docs.pycord.dev/en/stable/ext/pages/index.html#page) - -This class contains two attributes: `content` and `embeds`, which correspond to the attributes of the same name on the -`discord.Message` class. -To create a new Page, use the following syntax: - -```py -import discord -page = Page(content="My Page Content", embeds=[discord.Embed(title="My First Embed Title")]) -``` - -## [PageGroup](https://docs.pycord.dev/en/stable/ext/pages/index.html#pagegroup) - -This class represents a group of pages. It uses most of the same parameters as `Paginator`, which allows each -`PageGroup` to effectively have its own settings and behaviours. - -## [Paginator](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator) - -This is the main class for `ext.pages`, and is used to control most of the functionality of the extension. - -In its most basic form, with no arguments provided (default values listed below), a paginator can be created like so: - -```py title="Paginator Example" -import discord -from discord.ext.pages import Paginator, Page - -my_pages = [ - Page( - content="This is my first page. It has a list of embeds and message content.", - embeds=[ - discord.Embed(title="My First Embed Title"), - discord.Embed(title="My Second Embed Title"), - ], - ), - Page( - content="This is my second page. It only has message content.", - ), - Page( - embeds=[ - discord.Embed( - title="This is my third page.", - description="It has no message content, and one embed.", - ) - ], - ), -] -paginator = Paginator(pages=my_pages) -``` - -The only required parameter for `Paginator` is the `pages` parameter, which is usually a list of `Page` objects. - -You can also pass in a list of `PageGroup` objects, a list of strings, a list of embeds, or a list of lists of embeds. - -Once the `Paginator` instance is created, you can call either -[`Paginator.send()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.send) -or [`Paginator.respond()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.respond) -to send a message or response with the paginator's contents. - -#### Depending on what's being passed to the `pages` parameter, the behaviour of the paginator may differ: - -- Passing a list of `PageGroup` objects will essentially treat each `PageGroup` as its own Paginator, with most - `Paginator` attributes able to be set independently for each `PageGroup`. - \- Each `PageGroup` accepts its own `pages` parameter, which inherits the same behaviour as the `pages` parameter - of `Paginator`, except it cannot contain other `PageGroup` objects. -- If a page is a `Page` object, this will allow you to specify both the `discord.Message.content` and - `discord.Message.embeds` attributes for a page. - \- **This is the preferred method of defining a page.** -- If a page is a string, this will be used for the `discord.Message.content` attribute. This type of page cannot have - any embeds. -- If a page is a list of embeds, this will be used for the `discord.Message.embeds` attribute. This type of page - cannot have any message content. -- If a page is a list of lists of embeds, each parent list item will create a page containing all embeds from its - child list. This type of page cannot have any message content. - -#### Parameters for the `Paginator` class which have default values: - -- `show_disabled` **:** `True` - - Show buttons that are disabled (i.e. can't be clicked) -- `author_check` **:** `True` - - Only the author can interact with the paginator. -- `timeout` **:** `180` _(seconds)_ - - The paginator will time out and become inactive after this many seconds. -- `disable_on_timeout` **:** `True` - - If the paginator times out, it will be automatically disabled and all buttons will be unusable. -- `use_default_buttons` **:** `True` - - Use the default set of 4 buttons and a page indicator. -- `show_indicator` **:** `True` - - When using the default buttons, shows a middle 5th button with the current/total page numbers. - -**For other parameters that can be set on initialization, please check the -[API Reference](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator)** - -## [PaginatorButton](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatorbutton) - -This class represents a button used to navigate between the pages of a paginator. It's also used to create the page -indicator. - -When creating your own custom buttons, you can either use this class directly or subclass it to add any additional -functionality you may need. - -To add custom buttons to the paginator instead of the default navigation buttons, you have two options to do so: - -1. **Using the `custom_buttons` parameter of `Paginator`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - buttons = [ - PaginatorButton("first", label="<<-", style=discord.ButtonStyle.green), - PaginatorButton("prev", label="<-", style=discord.ButtonStyle.green), - PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True), - PaginatorButton("next", label="->", style=discord.ButtonStyle.green), - PaginatorButton("last", label="->>", style=discord.ButtonStyle.green), - ] - paginator = Paginator( - pages=["Page 1", "Page 2", "Page 3"], - show_indicator=True, - use_default_buttons=False, - custom_buttons=buttons, - ) - ``` -2. **Using `Paginator.add_button()`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"], use_default_buttons=False) - paginator.add_button(PaginatorButton("prev", label="<", style=discord.ButtonStyle.green)) - paginator.add_button(PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True)) - paginator.add_button(PaginatorButton("next", label=">", style=discord.ButtonStyle.green)) - ``` - -If you want to use the default navigation buttons, but not all of them, you can also use `Paginator.remove_button()` to -selectively remove them: - -```py -from discord.ext.pages import Paginator - -paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"]) -paginator.remove_button("first") -paginator.remove_button("last") -``` - -## [PaginatorMenu](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatormenu) - -This class represents the `discord.Select` menu used to navigate between `PageGroup` instances. In most situations, you -will not need to interact with this class directly. - -If you do subclass it, you'll likely want to call `super()` in your `__init__` method to ensure that the `PageGroup` -navigation functionality is retained. - -## Usage Examples - -For a comprehensive list of examples showing all `Paginator` functionality, please see the -[example in cog form](https://github.com/Pycord-Development/pycord/blob/master/examples/views/paginator.py) in the repo. - -## Support and Feedback - -If you have any questions, suggestions, or feedback for `ext.pages`, please join the -[Discord server](https://discord.gg/pycord). diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx deleted file mode 100644 index b8d68925..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Paginator FAQ ---- - -# Paginator FAQ - -- **What's the difference between `Paginator.send()` and `Paginator.respond()`?** - - `Paginator.send()` is used to send a channel message (DMChannel or TextChannel) with the paginator. - - `Paginator.respond()` is used to send an interaction response (or followup) message with the paginator. - -- **How can the bot send a paginator to a different destination than where it was invoked?** - - Use the `target` parameter in `Paginator.send()` or `Paginator.respond()`. - - You can also set the `target_message` parameter to control what's shown as a response where the paginator was originally invoked. - - For `Paginator.respond()`, this parameter is required if `target` is set, as an interaction requires being responded to. - -- **How can I change the paginator's behavior without re-creating and re-sending it?** - - Use the `Paginator.update()` method. - -- **How can I make the bot actually do something with the contents of a page?** - - Use the (upcoming) `Paginator.page_action()` method. diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json b/i18n/ja/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json deleted file mode 100644 index 36dfb009..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Tasks" -} \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx deleted file mode 100644 index 848f6066..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Tasks ---- - -## Concept - -So you want to run a background task running at some specified interval? Thankfully, that's a common thing to do, whether you're working with some API or handling some background logic don't worry, the Pycord tasks extension is here to make life easier for you! - -With the tasks extension, you can make background tasks without worrying about the asyncio hell and mind bogglers like "what if my internet dies" and "how do I handle reconnecting" with the added benefit of a lot of useful additions that are one line of code away! - -### Example Usage - -```py -import discord -from discord.ext import tasks - -bot = discord.Bot() - -@bot.event -async def on_ready(): - very_useful_task.start() - -@tasks.loop(seconds=5) -async def very_useful_task(): - print('doing very useful stuff.') - -bot.run("TOKEN") -``` - -If you do run this code in your terminal you should see something like this after about 15 seconds: - -``` -doing very useful stuff. -doing very useful stuff. -doing very useful stuff. -``` - -For a more useful example here's a task in a cog context ripped straight from the [docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#recipes): - -```py -from discord.ext import tasks, commands - -class MyCog(commands.Cog): - def __init__(self): - self.index = 0 - self.printer.start() - - def cog_unload(self): - self.printer.cancel() - - @tasks.loop(seconds=5) - async def printer(self): - print(self.index) - self.index += 1 -``` - -As you'd expect this will increment a number and print it out every 5 seconds like so: - -```sh -0 -# 5 seconds later -1 -# 5 more seconds later -2 -# ... -``` - -## [Tasks](https://docs.pycord.dev/en/stable/ext/tasks/index.html) - -Now let's get into the nitty-gritty of tasks. - -As you've seen tasks can work in both outer scope and class contexts and the handle is roughly the same, you define a task using the `tasks.loop` decorator and use the `start` method to start it, the difference is you add the `self` argument when in a class context so since most people have all their bot's code in Cogs all the following code blocks will be in a Cog context to make it easy to copy it then apply whatever modifications you might need! - -### [Creating a task](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop) - -A look at `discord.ext.tasks.loop`'s definition in the documentation reveals that: - -1. As you've seen before it expects the time between each execution, that however doesn't have to be in seconds as - there are `seconds`, `minutes` and `hours` parameters to make it easier for us, they can also be floats in case you want - ultra-precision. -2. You can also pass in a `datetime.time` object or a sequence of them in the `time` parameter which will make it run - at the specified time(s). -3. You can pass in how many times a loop runs before it stops by passing in the `count` parameter, you can use `None` - to make it run forever which is also the default. -4. The loop function **_must_** be a coroutine. - -These are all really useful, and they aren't the only parameters so if you want to know more about them check out the -[docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop)! - -### Attributes - -A task has the following attributes: - -- `current_loop`: The current loop the task is on. -- `hours`, `minutes`, `seconds`: attributes that represent the time between each execution. -- `time`: A list of datetime.time objects that represent the times the task will run, returns `None` if no datetime - objects were passed. -- `next_iteration`: A `datetime.datetime` object that represents the next time the next iteration of the task will - run, can return `None` if the task stopped running. - -These attributes serve as a really powerful asset to get info about your loop. - -### Example - -Now let's create a cog that handles a leaderboard we have in our bot using Tasks then explain what we did after that and -also provide a refresher of how slash commands groups work in cogs. - -For the sake of this example let's pretend that we have a leaderboard module that does all the leaderboard handling for -us and that computing the leaderboard is very expensive computationally wise, so we want to store one version of it that -gets regularly updated instead of generating it every time someone calls the `/leaderboard view` command. - -```py -from discord.ext import tasks, commands -from discord.commands import SlashCommandGroup, CommandPermissions - -from leaderboard import * # Mock leaderboard module. - -class LeaderboardCog(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.update_leaderboard.start() - self.leaderboard_embed = generate_leaderboard_embed() - - leaderboard = SlashCommandGroup(name='leaderboard', description='Leaderboard commands.') - - @tasks.loop(minutes=10) - async def update_leaderboard(self): - print('Updating leaderboard...') - await update_leaderboard() - self.leaderboard_embed = generate_leaderboard_embed() - - @update_leaderboard.before_loop - async def before_update_leaderboard(self): - await self.bot.wait_until_ready() - print("About to start updating leaderboard.") - - @update_leaderboard.after_loop - async def after_update_leaderboard(self): - leaderboard_cleanup() - print("Stopped updating leaderboard.") - - @update_leaderboard.error - async def update_leaderboard_error(self, error): - print(f"Oh no, an error occurred while updating the leaderboard. Error: {error}") - - @leaderboard.command() - async def view(self, ctx): - await ctx.respond(embed=self.leaderboard_embed) - - @leaderboard.command() - async def update_info(self, ctx): - await ctx.respond(f"""***Leaderboard Info***\n - Last update: {(600 - self.update_leaderboard.next_iteration.timestamp())//60} minutes ago.\n - Next update: in {self.update_leaderboard.next_iteration.timestamp() // 60} minutes.\n - Time between loops: {self.update_leaderboard.minutes} minutes.\n - Times updated this session: {self.update_leaderboard.current_loop}. - Running? {self.update_leaderboard.is_running()} - Failed? {self.update_leaderboard.failed()}""", ephemeral=True) - - # Now for the owner only commands: - - leaderboard_config = SlashCommandGroup(name="leaderboard_config", description="Leaderboard configuration commands", permission=[CommandPermissions("owner", 2, True)]) - - @leaderboard_config.command() - async def set_time_between_updates(self, ctx, minutes: int): - self.update_leaderboard.change_interval(minutes=minutes) - await ctx.respond(f"Set time between updates to {minutes} minutes.") - - @leaderboard_config.command() - async def stop(self, ctx): - self.update_leaderboard.stop() - await ctx.respond("Stopped the leaderboard update.") - - @leaderboard_config.command() - async def restart(self, ctx): - self.update_leaderboard.restart() - await ctx.respond("Restarted the leaderboard update.") - -def setup(bot): - bot.add_cog(LeaderboardCog(bot)) -``` - -Phew, that was quite a bit of code. - -Now to explain what's going on: - -First things first we create a cog and in its `__init__` function we start the `update_leaderboard` task and generate -the first instance of our leaderboard's embed. - -After that, we define the `update_leaderboard` task using the `loop` decorator, and we make it run every ten minutes by -passing 10 to the `minutes` parameter. - -Then that we define the `before_update_leaderboard` task using the `before_loop` decorator, and we make it wait until the -bot is ready before starting the task. - -Next up we define the `after_update_leaderboard` task using the `after_loop` decorator, and we make it clean up the -leaderboard when the loop finally stops running. - -Then we define the `update_leaderboard_error` task using the `error` decorator, and we make it print any errors that may -occur while we update our leaderboard to the console. - -Then we get into the fun stuff, we create a slash command group using the `SlashCommandGroup` class and name it -`leaderboard`, we then create the `view` sub-command which sends the embed generated when the leaderboard is updated and -`update_info` which shows a lot of data about the task using some attributes and functions available to us. - -We also create a slash command group called `leaderboard_config` which is only available to the owner of the bot. - -Then we create the `set_time_between_updates` sub-command which takes in the time in minutes and changes the time -between updates of the leaderboard using the `change_interval` method, the `stop` sub-command which stops the task using -the `stop` method and `restart` which restarts the task using the `restart` method. - -Finally, we add the `LeaderboardCog` cog to the bot, and we're done! - -I'd highly recommend you check the tasks extension -[documentation](https://docs.pycord.dev/en/stable/ext/tasks/index.html) for more info on how to use them and what other -functions they have. diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/_category_.json b/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/_category_.json deleted file mode 100644 index 9d6255f5..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 3, - "label": "Getting Started", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx deleted file mode 100644 index 7fbabf77..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: Creating Your First Bot ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -Excited to create your first bot? Once you [install Pycord](../installation.mdx), you can start right -away! - -## Creating the Bot Application - -Just like how you need to sign up to use Discord, your bot also has to be signed up. To do this, -you should: - -1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click - on . -2. Give your bot a name, and click . -3. Now, you should see a page like this. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdW3OQnwUhacopqSWw%2F-Mjd_-mxrJCrzmaXrAg8%2Fimage.png?alt=media&token=b8e2ae6c-2290-4d37-ad7c-eb412f3fb00e) -4. Click on the tab on the left side of the screen. -5. Click on . -6. You can give it a name, change the Avatar, etc. - -## Inviting the bot - -Now, lets get the bot added to some servers. Go to the tab -in the left pane and select `bot` and `applications.commands` as scopes. - -You may want your bot to have application commands, which is what the `application.commands` scope -allows your bot to make. - -Next, you want to choose what permissions the bot will have and select them. For now, you can just -give your bot the `administrator` permission, which gives your bot every permission. Once you select -your bot's permissions, click on to get the bot invite link. - -:::tip - -When your bot is all ready to go, make sure that administrator permissions aren't selected unless -your bot truly needs them. Try selecting only permissions the bot will need. For testing, -Administrator permissions are fine. - -::: - -![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-Mk6tNY3LfDkjd6pqdpL%2F-Mk6tkdpddEWoa2jczZk%2Fimage.png?alt=media&token=52c8a29f-a798-48f8-a8c7-4ecca2681f79) - -You can use this link to invite the bot. - -## Tokens - -Now that you have an account for your bot, you need to log in. To log in, we need the bot's -password. All users and bots have a "token." You may think of this token as a password, as this allows -us to log our bot into Discord. - -Tokens are "snowflakes." Not actual snowflakes, though. Just like how no two snowflakes in real life have the same -pattern, snowflakes in computers are unique things - no two bots have the same token - so a token is -considered a snowflake. A Discord user ID is also a snowflake. - -Now, lets get your bot's token. To do this, you want to: - -1. Go back to the tab. -2. Click on the button in the "Token" section. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdbU12JISJorAZxrKH%2F-MjdbpUsapzb5n15Po5P%2Fimage.png?alt=media&token=118e259f-940a-4f6c-b3a3-c29f3a54100d) - -Now, you have your bot's token copied to your clipboard. - -:::danger - -Do not, under any circumstances, give your token to anyone. Even if you are contacted by someone -claiming to be Discord staff, do not give them your bot's token. They are lying to you to try and -gain access to your bot. If an unauthorized user gains access to your bot's token, they can access -your bot and use it in malicious ways. - -Never push your token to GitHub or include it in your code. One way to prevent your token from -getting leaked is to store it in `.env` files. - -::: - -### Protecting Tokens - -#### Using dotenv - -You can store your tokens in `.env` files. This is a simple way to store sensitive information. - -1. Create a file with the name `.env` (only the extension, with a dot/period at the start and without a name before it). -2. Define the token in the `.env` file (replace the example value with your token). - ```env title=".env" - TOKEN = NzkyNzE1NDU0MTk2MDg4ODQy.X-hvzA.Ovy4MCQywSkoMRRclStW4xAYK7I - ``` -3. Install [`python-dotenv`](https://pypi.org/project/python-dotenv/). - ```bash - python -m pip install python-dotenv - ``` -4. Load the token from the `.env` file. - ```python - import dotenv - dotenv.load_dotenv() - token = str(os.getenv("TOKEN")) - ``` -5. Pass your token as parameter when running the bot. - ```python - client.run(token) - ``` - -:::tip - -If you are using Git to track your bot's changes, you should create a file called `.gitignore` and add -`.env` to it. This stops your `.env` file from getting tracked along with the rest of your code, and -will not be pushed to a remote Git repository. As a consequence, it will stay secure on your local machine. - -::: - -## Coding the Basics - -Here's an example of code you'll write with Pycord: - -```py -import discord -import os # default module -from dotenv import load_dotenv - -load_dotenv() # load all the variables from the env file -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") - -bot.run(os.getenv('TOKEN')) # run the bot with the token -``` - - - -
- - hello - -
- Hey! -
-
-
- -Let's go through the code. First, the imports. - -```py -import discord -import os -from dotenv import load_dotenv -``` - -In the first line, `import discord`, we import Pycord. Although you install Pycord with `pip install py-cord`, you -import it with `import discord`. This is so it's as easy as possible when switching from Discord.py to Pycord. - -We then import `os` and `dotenv`. `os` is a default module that we will use to get the token from the env file. `dotenv` -is a module that we will use to load the env file. You installed this with `pip install python-dotenv`. - -Next, we load the env file with `load_dotenv()`. - -```py -bot = discord.Bot() -``` - -In this line, we create a new instance of [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). -In this object, we can pass various parameters for configuration purposes, such as `owner_ids` -and [`intents`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```py -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") -``` - -We use the [`event`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) decorator to override -the [`on_ready`](https://docs.pycord.dev/en/stable/api/events.html#discord.on_ready) function to define an -event that is automatically called when the bot is ready to use. - -```py -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") -``` - -Here, we use the [`slash_command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.slash_command) -decorator to define a slash command. We specify the `name` and `description` arguments. If not -specified, the name of the slash command would be the function name and the command description would -be empty. - -Optional: We type-hint the context parameter (`ctx`) as [`discord.ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext). In modern IDEs, type-hinting allows access to autocompletion and docstrings. You can read more about type-hinting [here](https://docs.python.org/3/library/typing.html). - -Finally, you want to run the bot using the token specified in the `.env` file. - -Now you have finished creating your first Pycord bot! What we have shown you is just the basic structure -of a bot. You can do a lot more with Python and Pycord knowledge, as well as your imagination! Pycord -will not limit your bot's abilities. - -:::note - -The part where we load the token from the environmental variables is not required. You may use another way to keep your token secure, or, although not recommended, simply specify the token normally as a string, as shown below. - -
-A Basic Bot without securing the token -
- -```py -import discord - -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.send("Hey!") - -bot.run("TOKEN") -``` - -
-
- -::: - -## FAQ - -### How do I make prefixed commands? - -Prefixed commands are an older method of creating bot commands that listen for messages and replies -if the message starts with a certain character. You can read [this page](../extensions/commands/prefixed-commands.mdx) -to learn more about prefixed commands. - -### How do I setup modules/cogs? - -[Cogs](../popular-topics/cogs) are a great way to organize your commands by putting them into -groups called cogs. Cogs are separate files that your bot loads to get the commands inside. -You can read more about cogs, as well as learn how to use them and their benefits, -[here](../popular-topics/cogs). - -### How do I add components, such as buttons and dropdown menus, to my bot? - -Pycord makes it very easy to use Message Commands with your bot by using the `discord.ui` module. -To learn more, read about Message Commands in our [interactions directory](../interactions). - -:::info Related Topics - -- [Prefixed Commands](../extensions/commands/prefixed-commands) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx deleted file mode 100644 index 2a68677b..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Hosting Your Pycord Bot ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Hosting Your Pycord Bot - -If you're completely new to this, you might have thought something along the lines of "Yay! I got my -bot working," after following our [Creating your First Bot](creating-your-first-bot) guide, only -to close your IDE or shut down your computer to find your bot offline. - -The reason for this is that programs have to be hosted somewhere, meaning some machine somewhere has -to constantly run your bot. There are tons of hosting services that can help you host your bot for -little to no cost. - -## Can I get a Clear Explanation? - -Sure thing. When you run your bot, it first makes a connection to Discord's API. Once that's done, -Pycord sends "heartbeats" to Discord. "heartbeats" are small packets sent at a set interval telling -Discord that your bot is indeed still alive. If Discord doesn't receive a heartbeat after a certain -amount of time, your bot is pronounced dead and buried in the graveyard (not really). It is, though, -taken offline and its connection with Discord is terminated. - -Once you close the terminal that you've run your program on, the program is no longer running, and -the bot stops sending heartbeats and can no longer process commands. This is why you have to constantly -keep the process running. - -This goes for all programs, in a different nature. If the code isn't compiled/built/assembled/interpreted, -it can't be running. - -## What is a Host? - -A host is a server or container for running code offered by a **hosting provider.** There are a lot -of hosting providers, such as bigger ones like Amazon Web Services (AWS) and Google Cloud, and smaller -ones like GalaxyGate and DigitalOcean. - -There are three types of hosts. - - - - Shared hosting is a type of hosting where multiple people share one VPS. Getting a spot on - a shared host is usually cheap, sometimes even free. Shared hosts do not give you a lot of - resources, from less than a gigabyte of RAM (usually 512MB on free hosts) and half of a CPU - with very little storage. Shared hosting is usually used for website hosting and is not - recommended for hosting a Discord bot. - - - A virtual private server (VPS) is a virtual computer (virtual machine) that is rented out to - customers. Most people use a VPS for hosting their projects such as Discord bots. You can get - anywhere from less than a gigabyte of RAM and a less powerful CPU to just under one hundred - gigabytes of RAM, a (or multiple) powerful CPU(s), and a fair amount of storage. A VPS is the - best choice for most users and can be fairly cheap. - - - A dedicated host is a physical computer. You can buy these yourself or rent one from a hosting - provider. Dedicated hosts are often very expensive, but are also very powerful, having a - few hundred gigabytes of RAM and a few very powerful CPUs, along with a good amount of storage. - Dedicated hosts are usually used for very large projects and are overkill for something like - a Discord bot. - - -
- -:::danger - -Make sure you choose a hosting provider you trust. Also make -sure the hosting provider you're looking at has good reviews on public forums. Googling along the -lines of "[host] review" should do the trick. A provider you don't trust can compromise your token. - -::: - -Most hosting providers rent their services to you for a monthly or yearly fee. These can be anywhere -from a few dollars to hundreds or thousands of dollars. - -## How to Host Your Bot - -Once you rent or buy a VPS, you can get to work. Most hosting providers allow you to choose from a -wide range of operating systems, most allow you to choose one but some allow you to choose -multiple. Once that's ready, you have to SSH into the system. We won't get into SSH here, but you can -read [this article from DigitalOcean](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys). -You can also use VNC, which is remote desktop software. If you are using an OS that does not have a -GUI, and is only a command line (a "server" OS), such as Ubuntu Server or most Linux Server Operating Servers, you will most -likely use SSH. If you are using an OS that has a GUI, such as Windows Server, you will most likely use VNC. - -Once you've decided on your operating system, you'll want to set it up and install Python. Once that's -done, you can copy your bot's files to your remote system, install the required packages, and run -the bot. - -:::warning - -If you are using SSH to run the file, your bot will not stay running. This is because the file is -only told to run during your session. You can use a command like [nohup](https://en.wikipedia.org/wiki/Nohup) -to make sure your file stays running after you disconnect. - -::: - -Now your bot is hosted, but that doesn't mean it can't go offline. If your bot encounters an error, -it can often go offline or stop its process. For this, make sure you have proper error handling. -Also be sure to pay attention to your hosting provider's updates or news, as they usually notify -users of when they plan on doing maintenance to their servers, making their services unavailable for -a short time. - -:::info Related Topics - -- [Creating Your First Bot](creating-your-first-bot) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx deleted file mode 100644 index 32eeb744..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx +++ /dev/null @@ -1,379 +0,0 @@ ---- -title: More Features -description: More features to make your bot cool and snazzy. ---- - -import { - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, - DiscordEmbedField, - DiscordEmbedFields, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -So, you just created your first Pycord bot! Now, let's add some more features to it. This will include adding event handlers, waiting for user response, styling the messages, and more. - -## Events - -### Event Handlers - -Events in Discord are a way to listen for certain actions. For example, if you want to know when a user joins your server, so you could send a welcome message, you can use the `on_member_join` event. - -First, you need to ask Discord to send you events. This is done via "Intents". Read up the [Intents](../Popular-Topics/intents) page for more information. - -Once you understand what intents are, you can enable the events you need, or just use the default ones with `discord.Intents.all()`. - -Now that that's done, let's add an event handler for when a user joins the server. We will use the [`on_member_join` event](https://docs.pycord.dev/en/stable/api/events.html#discord.on_member_join). We will send a private message to the user welcoming them to the server. - -```python -@bot.event -async def on_member_join(member): - await member.send( - f'Welcome to the server, {member.mention}! Enjoy your stay here.' - ) -``` - -We use the [`discord.Bot.event` decorator](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) to add the event handler. - -The `on_member_join` event is called when a user joins the server. The `member` parameter is the user that joined. Different events have different names and parameters. You can find all of them [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -So, that's how you add event handlers! - -### Waiting for User Response - -Let's say you want to create a Guess-the-Number game (where the user has to guess a number between 1-10). You need to send a message to a user and wait for them to respond. You can do this with the [`wait_for`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.wait_for) method. - -```python -@bot.command() -async def gtn(ctx): - """A Slash Command to play a Guess-the-Number game.""" - - await ctx.respond('Guess a number between 1 and 10.') - guess = await bot.wait_for('message', check=lambda message: message.author == ctx.author) - - if int(guess.content) == 5: - await ctx.send('You guessed it!') - else: - await ctx.send('Nope, try again.') -``` - -`wait_for` takes one argument, which is the event type. The event type is the name of the event you want to wait for. In this case, it's `message`. It could also be `reaction` to wait for a reaction to be added. - -We pass a keyword argument to `wait_for` called `check`. The function may look complicated if you're a beginner. We pass a `lambda` function, which simplifies the code a bit. - -The lambda function takes one parameter, `message`. When Pycord receives a message, it passes it to the `check` function. If the function returns `True`, the message is returned. If the function returns `False`, the message is ignored and the bot waits for another message. - -Here, we check if the message is from the user that sent the command. We simply use `message.author == ctx.author`. This will check if the author of the message was the person who invoked the command. - -## Styling Messages - -### Embeds - -Embeds are a Discord feature that allows applications to format their messages in cool embedded format, -enabling your bot to lay out messages with a lot of text into neat fields. - - - - - The Pycord Guide is a detailed guide that explains how to use Pycord and all of its features. - - - The Getting Started section explains how you can get a brand new bot created and running from scratch. - - - Interactions with Pycord - - - Pycord's various Extensions - - - Other Popular Topics - - - We have so much more! Just explore, and you will find everything you need. If you want another page added, open an issue on the GitHub. - - - Created with 💖 by the Pycord Team & Contributors - - - - -
- -Creating embeds is simple! Just create an instance of [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) and edit it to your liking. Once you're done, send it! - -```python -import discord - -bot = discord.Bot() - -@bot.command() -async def hello(ctx): - embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from - ) - embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") - - embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) - embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) - embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) - - embed.set_footer(text="Footer! No markdown here.") # footers can have icons too - embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") - embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") - embed.set_image(url="https://example.com/link-to-my-banner.png") - - await ctx.respond("Hello! Here's a cool embed.", embed=embed) # Send the embed with some text - -bot.run("TOKEN") -``` - - - -
- hello -
- Hello! Here's a cool embed. - - Embeds are super easy, barely an inconvenience. - - - A really nice field with some information. The description as well as the fields support markdown! - - Inline Field 1 - Inline Field 2 - Inline Field 3 - - Footer! No markdown here. - -
-
- -
- -This simple command sends replies to a [slash command](../interactions/application-commands/slash-commands) with an embed. -Let's break it down: - -```py -embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), - ) -``` - -This command creates an embed. We use the [`Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) -class to create an embed object with the title "My Amazing Embed", the description "Embeds are super easy, barely an inconvenience.", and the color `blurple`, Discord's main theme color. - -[discord.Colour](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Colour) is a class full of [classmethods](https://docs.python.org/3/library/functions.html#classmethod) -that return color values. While the official, documented name of this is `discord.Colour`, `discord.Color` -works as well. - -```py -embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") -embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) -embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) -embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) -``` - -This small section shows off embed fields. You can add fields to embeds with the [`add_field` method](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.add_field) -of the [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) class. These consist of three -keyword arguments: `title`, `value`, and `inline`. `title` and `value` are both required arguments, which inline defaults to `False` if it's not defined. The `inline` argument specifies whether space will be divided among the inline fields. There could be a mix of fields where inline has different values too. - -```py -embed.set_footer(text="Footer! No markdown here.") # footers can have icons too -embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") -embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") -embed.set_image(url="https://example.com/link-to-my-banner.png") -``` - -In this section, we're adding unique items to the embed. These items are: - -- Footer - With the [`set_footer()`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_footer) - method, you can set a small footer that holds a message. This has `text` and `icon_url` kwargs. -- Author - With the [`set_author`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_author) - method, you can set an author for the embed. This is a small text field at the top of the embed. This - includes `name`, `url` and `icon_url` kwargs. -- Thumbnail - With the [`set_thumbnail`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_thumbnail) - method, you can set a small image to reside at the top-right of the embed. This has a single `url` kwarg. -- Image - With the [`set_image`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_image) - method, you can set an image to sit at the bottom of an embed. This has a single `url` kwarg. - -There are a lot more methods and attributes you can use to configure embeds. Here, we just covered the basics. Also, remember that all of these values are not necessary in an embed. An embed may only contain a few of these. For example, only a description, a title and a description, and so on. - -### Markdown - -Markdown is a type of markup language that's limited in terms of formatting yet simple. Discord allows -for a watered-down version of markdown to be in their messages. - -#### Text Markdown - -Text formatting can be used in messages and in most embed parts, -as explained in the dedicated section below. - - - - - - - - - - - - - - - - - - - - -
*italics*__*underlined italics*__
**bold**__**underlined bold**__
***bold italics***__***underlined bold italics***__
__underlined__~~strikethrough~~
- -#### Code Markdown - -To create a single-line code block without syntax highlight, wrap the text between single backticks. -This code block will only add a dark background to the text. - -``` -`print("Hello world!")` -``` - -To create a multi-line code block without syntax highlight, wrap the text between triple backticks -on first and last line. This type of code block will encase the code inside a box. - -```` -``` -message = "Hello world!" -print(message) -``` -```` - -To create a multi-line block with syntax highlight, add the name of the language you are using right after -the triple backticks on the first line. For example, for Python you can write either "python" or "py". - -```` -```python -message = "Hello world!" -print(message) -``` -```` - -If you want to use syntax highlight for a single line of code, you still have to format it -like a multi-line block but the code must be on a separate line than the triple backticks. - -#### Quote Markdown - -To create a single-line quote block, start the line with `>` followed by a space. - -``` -> This is a single-line quote. -``` - -To create a multi-line quote block, write `>>>` followed by a space. All text -from that point onwards will be included in that quote block. - -``` ->>> This is a -multi-line quote. -``` - -#### Spoiler Markdown - -To hide a spoiler, encase the text between double pipes. The users -will have to click on it before being able to see the text contained in it. - -``` -||spoiler|| -``` - -#### Link Markdown - -Link formatting only works in embeds and messages sent through webhooks, -by using the following syntax: - -``` -[Pycord](https://pycord.dev/) -``` - -Inside the supported elements that have just been mentioned, -the example above will look like this: [`Pycord`](https://pycord.dev/) - -Outside them, the link will still be clickable but the formatting will be ignored, -therefore the example above will look similarly to this: `[Pycord](https://pycord.dev/)` - -#### Embed Markdown - -Adding markdown to your embeds or messages will give your bot the sparkle it needs, -however, markdown is limited inside embeds. Use the following table as a reference -and keep in mind that embed title and filed names will always show in **bold**. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PartTextLink
Embed AuthorNoNo
Embed TitleYesNo
Embed DescriptionYesYes
Field NameYesNo
Field ValueYesYes
Embed FooterNoNo
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx deleted file mode 100644 index e44b7c49..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Rules and Common Practices -description: All about the rules and common practices for coding a Discord bot ---- - -# Rules and Common Practices of Creating a Bot - -When creating almost anything, there's always a certain set of rules to follow or common practices, -such as [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python. This applies to creating bots -with Pycord as well. - -:::note - -Most of these rules and common practices are only applicable for -[verified bots](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting), -but it's good to follow them nonetheless. - -::: - -## Rules - -There are rules for creating bots, and most of these are required by Discord themselves, not us at -Pycord. Not following these rules may get your bot denied for verification. - -### Terms of Service and Privacy Policy - -Starting at some point in time, Discord has made providing a privacy policy with your bot a requirement. -This is so that Discord knows exactly what you are doing with its users' data. - -:::tip -You don't need a lawyer or anyone special to write out a privacy policy for you, nor do you need -it approved by some official entity. Simply writing out how you are going to use Discord user -information neatly is all you need to do. -::: - -Providing a Terms of Service for your bot is optional, though usually a best practice. It tells users -what they can and cannot do with your service, and makes it easier to settle disputes if someone -disagrees with you. - -Read more in Discord's official [Legal Docs](https://discord.com/developers/docs/legal). - -### Developer Policy - -We could list almost every rule about using Discord's API here. _Or_ we could simply link Discord's -Developer Policy to make it easier on us. You can find Discord's Developer Policy -[here](https://discord.com/developers/docs/policy). This outlines what you can and cannot do with -Discord's Developer API. And, don't worry, it's completely readable and understandable. - -## Best Practices - -Now, here's something we _can't_ simply link an article for. We're going to discuss the best practices -of creating a Discord bot with Pycord. - -### Bot Sharding - -To any new or maybe even experienced bot developer, sharding a bot sounds beneficial once you hear -about it. I'm here to tell you that it isn't a good idea to shard your bot. - -_Wait a minute, why would it be an option if it wasn't a good idea?_ It's simple. I lied. Sort of. -I'm not going to go into the details of sharding a bot, so you can read about it on -[this page](../Popular-Topics/sharding). Sharding is the process of taking your bot -and breaking it up into small pieces, so it's easier to perform tasks. This is very useful for large -bots, as it makes them faster and more reliable. Sharding is not a good practice for small bots. - -:::note -Discord will notify you once it is time to shard your bot, and will eventually force you to do so. -::: - -At the very least, wait for one thousand servers to shard your bot. If you shard your bot while it's -small, you'll just be wasting resources and possibly making your bot slower. - -### [Verification](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting) - -Verifying your Discord bot is something every developer would like to achieve. It shows that your bot -is in more than 75 servers. It's generally a good idea to try to get your bot verified as soon as -possible. We're talking at 76 servers soon. This is because Discord can be somewhat slow in terms of -bot verification, so verifying as soon as possible gives them enough time to verify before your bot -reaches the 100 server cap. If a bot is not verified, it cannot grow beyond 100 servers. - -It's also a good idea to only apply for the privileged intents that you need. Applying for intents -your bot doesn't use wastes both your time and Discord's time, as your privileged intent request -will be denied simply because you applied for an intent you didn't need. - -### Subclassing - -While it may take some time, subclassing a bot is very worth it. Once again, this was explained -elsewhere, so I won't go into the details, but I felt it fit here, so I put it here. - -Subclassing a bot makes it more flexible and allows it to do a lot more. Read more about subclassing -bots [here](../Popular-Topics/subclassing-bots) - -### Your Bot's Token - -Your bot is only able to be run for one reason: its token. If you followed the -[guide for creating your first bot](creating-your-first-bot), you should already know a bit about -keeping that token safe. That's exactly what you want to do. - -Sharing your token is never good. If someone evil gets a hold of your token, they can do terrible things, -such as making your bot leave all of its servers, spamming all the members the bot has contact with, -and even manipulating the servers the bot is in, if given the permissions. That's why it's very important -to keep your token safe. To learn how to do so, read [this part](creating-your-first-bot#tokens) of -the Creating Your First Bot guide. - -### Backups - -You always want to back up your bot's data. This includes both its code _and_ its databases. This way, -if something tragic happens, such as your host failing a data migration or you breaking your Raspberry -Pi's SD card that held your bot, you'll still have its precious user data. I have a small program for -my bot that uploads its databases to a remote GitHub repository periodically to not lose any data. -It may be smarter to find a bit more of a reliable way to do so, though. - -Public or private, having a local Git repository connected to a remote one is a good idea for making -almost any application. For a lot of developers, it's like saving your work. If you do this, all of -your bot's code won't be lost if your computer spontaneously combusts, or you smash it to bits from -anger. You can simply grab the backup computer that everyone has lying around, and you're back -in business. - -### Organization and Cleanliness - -It is _extremely_ important to have organized code. This includes commands, objects, functions, -and classes. If you don't have organized code, it will get progressively harder for you to recognize -it, and others won't be able to decipher it. - -Make sure you utilize indents and spaces, as these are very important in making your code readable. - -```py title="Bad Spacing" -class MyClass: - async def add(self,num1,num2): - return num1+num2 - async def sub(self,num1,num2): - return num1-num2 -``` - -```py title="Good Spacing" -class MyClass: - async def add(self, num1, num2): - return num1 + num2 - - async def sub(self, num1, num2): - return num1 - num2 -``` - -See the difference? Now, which one looks more readable? Hopefully, you answered the second example. -Python's [PEP8](https://www.python.org/dev/peps/pep-0008/) is a PEP (**Python Enhancement Proposal**) -style guide for Python. It is the style guide that is used by most Python developers and programmers, -providing a universal way to write and read code. - -### Databases - -As your bot grows, you'll inevitably have to store data for your bot. Now, most people would probably just load up some -JSON file on boot into a `dict`, modify it in memory then write to the file. However, JSON files aren't the solution. -When you write to a JSON file, it rewrites the entire file instead of just rewriting the section that changed. It's also -a configuration file format, not a storage file format. - -Instead of using a JSON file or some other related format, you should instead use a database. There are many databases -out there, like MongoDB, SQLite, and PostgreSQL to name a few. - -All of these databases I named do the job well, and which one you use depends on what features you want out of a database. - -<>{/* Maybe clarify these/add more options */} - -#### MongoDB - -MongoDB is a JSON-like format and if you already use JSON files, it shouldn't be too hard to migrate over to. - -#### SQLite - -SQLite is based on SQL, a common relational data model. It's a lightweight, easy-to-use, portable database solution that -works entirely on files. However, if for some reason you cannot read/write to and from a file, and you need to manage -lots of data, SQLite might not be for you. - -While SQLite is a part of the Python Standard Library as the `sqlite3` package, we recommend not using it as it is -synchronous and blocking. You should use an asynchronous alternative, such as [`aiosqlite`](https://pypi.org/project/aiosqlite/). - -#### PostgreSQL - -PostgreSQL is also based on SQL, but it also has more features than SQLite. It's compliant with the SQL standard, -open-source, and extensible. However, it's not that fast or simple compared to SQLite. - -#### MariaDB - -MariaDB is also based on SQL and is a fork of the MySQL project. It's compliant with the SQL standard, it's also open -source and is a complete drop-in replacement for any code with MySQL. You don't even need to change what package you're -using! diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/installation.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/installation.mdx deleted file mode 100644 index 521c69cd..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/installation.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Installation -sidebar_position: 2 ---- - -Before you can start using Pycord, you need to install the library. - -:::note -Python **3.8 or above** is required to use Pycord. -::: - -:::tip -Before you start installing python packages globally, it's recommended you set up a virtual environment. -You can find instructions for that [here](More/virtual-environments). -::: - -## Fresh Installation - -To install Pycord, you can use the following command in your terminal: - -``` -pip install py-cord -``` - -:::tip -Remember that you need to install `py-cord`, not `pycord`. -Also, the `pip` command varies depending on your installation. For example, it might be `python3 -m pip` on macOS/Linux or `py3 -m pip` on some versions of Windows. -::: - -If you need voice support for your bot, you should run: - -``` -pip install "py-cord[voice]" -``` - -## Migration - -### Updating Pycord - -If you are upgrading from a previous version of Pycord, you can use the following command in your terminal to upgrade to the latest version: - -``` -pip install -U py-cord -``` - -### Migrating from other libraries - -If you are migrating from another library, say, `discord.py`, first of all, you need to uninstall it. - -``` -pip uninstall discord.py -``` - -Then, you can install Pycord, it's as simple as that!: - -``` -pip install py-cord -``` - -:::caution -Uninstalling `discord.py` _after_ installing `py-cord` can cause issues. Make sure to uninstall it first! -::: - -## Installing Other Builds - -### Development Build - -:::caution -The development build comes with cutting edge features and new functionality, but as it isn't a stable build you may encounter bugs. -::: - -To install the development build, you can use the following command in your terminal: - -``` -pip install -U git+https://github.com/Pycord-Development/pycord -``` - -:::important -Git is required to install this build. [Learn how you can install Git](./more/git). -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/_category_.json b/i18n/ja/docusaurus-plugin-content-docs/current/interactions/_category_.json deleted file mode 100644 index ea28be60..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 4, - "label": "Interactions" -} \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json b/i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json deleted file mode 100644 index 6dcafe83..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Application Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx deleted file mode 100644 index 8fdca991..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Context Menus -description: Learn all about Context Menus (User Commands & Message Commands) and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -When you right-click a message, you may see an option called "Apps". Hover over it, and you can see -commands a bot can run with that message. These are called message commands. - -When you right-click a user in the user list, you can once again see an option called "Apps". -Hover over it, and you can see commands a bot can run with that message. These are called user commands. - -Together, these two are called Context Menus or Context Menu Commands. These commands work very much like normal commands, except they take a member or message. - -:::note - -A bot can have up to 5 global Context Menus of each type. - -::: - -## User Commands - -Creating a user command is very simple. - -```python -@bot.user_command(name="Account Creation Date", guild_ids=[...]) # create a user command for the supplied guilds -async def account_creation_date(ctx, member: discord.Member): # user commands return the member - await ctx.respond(f"{member.name}'s account was created on {member.created_at}") -``` - - - -
- - Account Creation Date - -
- {defaultOptions.profiles.bob.author}'s account was created on 2020-01-01 -
-
- -## Message Commands - -```python -@bot.message_command(name="Get Message ID") # creates a global message command. use guild_ids=[] to create guild-specific commands. -async def get_message_id(ctx, message: discord.Message): # message commands return the message - await ctx.respond(f"Message ID: `{message.id}`") -``` - - - - Do. Or do not. There is no try. - - -
- - Get Message ID - -
- Message ID: 930650407917748286 -
-
- -
- -:::info Related Topics - -- [Slash Commands](./slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx deleted file mode 100644 index edac55b3..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Localizations -description: Localizations are a way to make your bot more accessible to your users. Learn all about localizations now! ---- - -Localizations are a way to make your bot more accessible to your users. You can localize the command -name, the names of any arguments, and any text that is displayed to the user. - -## Syntax - -```python -@bot.slash_command( - name="ping", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - }, - options=[ - Option( - name="Example", - name_localizations={ - "en-GB": "British Example" - }, - description="Example option that does nothing", - description_localizations={ - "en-GB": "British example option that does nothing" - } - ) - ] -) -async def ping(ctx, example): - responses = {"en-US": "Pong!", - "en-GB": "British Pong!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -@bot.slash_command( - name="ping2", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - } -) -async def ping2(ctx, example: Option(str, "example", name_localizations={"en-GB": "British Example"}, description="Example option that does nothing", description_localizations={"en-GB": "British example option that does nothing"})): - responses = {"en-US": "Pong2!", - "en-GB": "British Pong2!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -``` - -- [`Locales`](https://discord.com/developers/docs/reference#locales) - List of valid locales recognized by Discord diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx deleted file mode 100644 index f4a760b6..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx +++ /dev/null @@ -1,292 +0,0 @@ ---- -title: Slash Commands -description: Learn all about Slash Commands and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On March 24, 2021, Discord added Slash Commands to Discord as an easier, more efficient, and better way of using bot commands. Pycord has implemented Slash Commands into the library, so it's simple, efficient, and familiar. - -:::important - -Remember that Slash Commands require your bot to be invited with the `application.commands` scope or Slash Commands will not show up. Bots already in the guild can simply be invited again with the scope; there is no need to kick the bot. - -::: - -## Syntax - -Let's create a simple Slash Command. - -```py -import discord - -bot = discord.Bot() - -# we need to limit the guilds for testing purposes -# so other users wouldn't see the command that we're testing - -@bot.command(description="Sends the bot's latency.") # this decorator makes a slash command -async def ping(ctx): # a slash command will be created with the name "ping" - await ctx.respond(f"Pong! Latency is {bot.latency}") - -bot.run("TOKEN") -``` - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -Let's go through the code. - -First, we import Pycord's `discord` package. - -Next, we create a [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot) object and assign it to a variable `bot`. - -We then go ahead and use the [`@bot.command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.command) decorator, which registers a new Slash Command. We pass a `description` parameter to give a description to the Slash Command. We can also pass a `name` parameter to change the Slash Command's name. By default, the name of the Slash Command will be the name of the function, in this case, `/ping`. - -We create an async function called `ping` with parameters `ctx`, which, when called, sends the bot's ping/latency using [`ctx.respond`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext.respond). - -## Subcommand Groups - -You might want to group certain commands together to make them more organised. A command group is exactly what it sounds like, a group of individual Slash Commands together. - -In order to make a Slash Command group, you can use the `bot.create_group` function. - -```python -import discord - -bot = discord.Bot() - -# create Slash Command group with bot.create_group -greetings = bot.create_group("greetings", "Greet people") - -@greetings.command() -async def hello(ctx): - await ctx.respond(f"Hello, {ctx.author}!") - -@greetings.command() -async def bye(ctx): - await ctx.respond(f"Bye, {ctx.author}!") - -bot.run("TOKEN") -``` - -Or, you can instead manually make a `SlashCommandGroup` class like so: - -```python -import discord - -math = discord.SlashCommandGroup("math", "Math related commands") - -@math.command() -async def add(ctx, num1: int, num2: int): - sum = num1 + num2 - await ctx.respond(f"{num1} plus {num2} is {sum}.") - -@math.command() -async def subtract(ctx, num1: int, num2: int): - sum = num1 - num2 - await ctx.respond(f"{num1} minus {num2} is {sum}.") - -# you'll have to manually add the manually created Slash Command group -bot.add_application_command(math) -``` - -Here's what the registered subcommands will look like in the Slash Command Menu: - -![Picture of the subcommands in the Slash Command Menu](../../assets/interactions/groups-and-subcommands.jpg) - -You'll notice that there's the name of the Slash Command Group and then the name of the subcommand separated by a space. - -::: - -:::info Cogs - -If you are looking to add Slash Command Groups to cogs, please look at our [Cogs page](../../popular-topics/cogs)! - -::: - -## Sub-groups - -We've made a subcommand group, but did you know that you could create a group inside another? - -```python -from discord import SlashCommandGroup -from math import sqrt - -math = SlashCommandGroup("math", "Math related commands") -advanced = math.create_subgroup("advanced", "Advanced math commands") - -@advanced.command() -async def square_root(ctx, x: int): - await ctx.respond(sqrt(x)) - -bot.add_application_command(math) -``` - -The command created above can be invoked by typing `/math advanced square_root`. - -## Options & Option Types - -Whenever you're using Slash Commands, you might notice that you can specify parameters that the user has to set or can optionally set. These are called Options. - -Options can also include a description to provide more information. [You can learn more about Options in our documentation!](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.Option) - -Since you want different inputs from Options, you'll have to specify the type for that Option; there are a few ways of doing this. - - - - -You could use Type Annotations and let Pycord figure out the option type or explicitly specified using the [`SlashCommandOptionType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.SlashCommandOptionType) enum. - -```python -import discord - -bot = discord.Bot() - -@bot.command() -# pycord will figure out the types for you -async def add(ctx, first: discord.Option(int), second: discord.Option(int)): - # you can use them as they were actual integers - sum = first + second - await ctx.respond(f"The sum of {first} and {second} is {sum}.") - -@bot.command() -# this explicitly tells pycord what types the options are instead -async def join( - ctx, - first: discord.Option(discord.SlashCommandOptionType.string), - second: discord.Option(discord.SlashCommandOptionType.string) -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - add - -
- The sum of 1 and 1 is 2. -
- -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
- - -Instead of Type Annotations, you can also use the option decorator. This is usually done to have type-hinting. - -```python title="Slash Command Type" -import discord - -bot = discord.Bot() - -@bot.command() -@discord.option("first", type=discord.SlashCommandOptionType.string) # type = str also works -@discord.option("second", type=discord.SlashCommandOptionType.string) # type = str also works -async def join( - ctx, - first: str, - second: str, -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
-
- -## Autocomplete - -Discord's autocomplete allows developers to determine option choices that are used in a slash command option. You can do this by defining a function: - -```py -async def get_animal_types(ctx: discord.AutocompleteContext): - """ - Here we will check if 'ctx.options['animal_type']' is a marine or land animal and return respective option choices - """ - animal_type = ctx.options['animal_type'] - if animal_type == 'Marine': - return ['Whale', 'Shark', 'Fish', 'Octopus', 'Turtle'] - else: # is land animal - return ['Snake', 'Wolf', 'Lizard', 'Lion', 'Bird'] - -@bot.slash_command(name="animal") -async def animal_command( - ctx: discord.ApplicationContext, - animal_type: discord.Option(str, choices=['Marine', 'Land']), - animal: discord.Option(str, autocomplete=discord.utils.basic_autocomplete(get_animal_types)) -): - await ctx.respond(f'You picked an animal type of `{animal_type}` that led you to pick `{animal}`!') -``` - - - -
- - animal - -
- You picked an animal type of Marine that led you to pick Shark! -
-
- -:::warning - -Autocomplete can **only** be used with slash commands. - -::: - -:::info Related Topics - -- [Interactions Index](../../interactions) -- [Rules and Common Practices](../../getting-started/rules-and-common-practices) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/index.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/interactions/index.mdx deleted file mode 100644 index 3f695606..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/index.mdx +++ /dev/null @@ -1,242 +0,0 @@ ---- -title: Discord Interactions ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -In December 2020, Discord released their first Interaction: the -[Slash Command](https://discord.com/developers/docs/interactions/application-commands#slash-commands). -Since then, Discord has added many types of Interactions, including: - -[**Application Commands**](https://discord.com/developers/docs/interactions/application-commands) - -- [**Slash Commands**](https://discord.com/developers/docs/interactions/application-commands#slash-commands): - Commands that can be used with the `/` prefix. -- **Context Menu Commands**: Commands that can be used from the right-click menu. - - [**User Commands**](https://discord.com/developers/docs/interactions/application-commands#user-commands): - Commands that can be used on a user by alt-clicking/selecting them. - - [**Message Commands**](https://discord.com/developers/docs/interactions/application-commands#message-commands): - Commands that can be used on a message by alt-clicking/selecting it. - -[**UI Components**](https://discord.com/developers/docs/interactions/message-components) - -- [**Buttons**](https://discord.com/developers/docs/interactions/message-components#buttons): - Buttons are attached to a message and can be clicked on to perform an action. -- [**Select Menus**](https://discord.com/developers/docs/interactions/message-components#select-menus): - Drop-down menus are used to select a number of options from a list. -- [**Modals**](https://discord.com/developers/docs/interactions/message-components#text-inputs): - Form-like modals can be used to ask for input from a user. - -## Application Commands - -Application Commands are another set of new features that are intended to avoid compromising users' safety and privacy. -They're relatively easy to add to your bot, and give people a simpler and safer way to use commands. - -### [Slash Commands](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.SlashCommand) - -Slash Commands were the first Interaction added to Discord. They're easy to use and create, and -is the only prefix commands alternative that does not need Message Content intent. - -:::note - -Preferring prefix commands over Application Commands is **not** a valid reason to apply for the -Message Content intent. Using that as a reason will get your application denied. - -::: - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -This is what a Slash Command looks like. Not too different from a prefix command, -apart from the note telling you who invoked it. A Slash Command's fields can accept any of the following: - -- Members -- Roles -- Channels -- Attachments -- Text - -Just about as good as it gets. - -### [Message](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.MessageCommand) and [User](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.UserCommand) Commands - -Message Commands and User Commands were both introduced at around the same time, and are very similar to each other, so we'll be -introducing them together. These commands can be found in the `Apps` tab when alt-clicking. The only difference between the two is that -Message Commands only appear in the `Apps` tab of a message, while User Commands are found in the `Apps` tab of a user. Message Commands -can be used to quickly report a message, warn a user for a message, and other functions. Likewise, User Commands can be used to add a -user to a ticket, warn a user, and more. - -Here's an example of a Message Command: - - - - Hello World! - - -
- - Reverse Message - -
- Message 930650407917748286 reversed is "!dlroW olleH" -
-
- -
- -And here's an example of a User Command: - - - - {defaultOptions.profiles.dorukyum.author} has been on Discord for a long time - - -
- - User Age - -
- {defaultOptions.profiles.dorukyum.author} is 1 week old. -
- -
- - User Age - -
- {defaultOptions.profiles.bob.author} is 40 years old. -
- - 🤔 - -
- -
- -Pretty cool, right? To learn more about these two, please read the [Context Menus guide](./application-commands/context-menus.mdx). - -## [Application Commands](#application-commands) vs. [Prefix Commands](../extensions/commands/prefixed-commands) - -Ever since Discord was created, apps on it have used prefix commands. Using prefixes meant that you would have to put a -certain character (or string of characters) in front of your command, such as the exclamation mark in `!ping`. The way this -worked was that your bot would listen for messages, pick out the ones that had their specific prefix, and then respond to the command. -Now, Discord is encouraging developers to switch their bots over to Application Commands, which is a new system meant to preserve the -privacy and safety of their users. But why exactly is Discord making us switch? What's the better option, Application Commands or prefix -commands? Below, we'll discuss everything you need to know. - -### Discord's Decision - -Application Commands were conceptualized partly due to privacy concerns. When Discord first began, they weren't entirely concerned about bots -having access to the content of every message that was being sent. However, as Discord grew, this became more of a problem. Hypothetically, bots -could simply log every message they're able to receive via the Discord API and hand their contents over to a company or other third party. This is -a problem, since that data is meant to be used only by Discord. As such, they locked down Message Content, and introduced Application Commands for -bot developers to use instead. - -Prefix commands work by reading messages, as described before. Application Commands, however, don't -work this way; instead, they work by having your bot get information from Discord about when a command was used. This way, Discord can limit -Message Content only to bots that _absolutely_ depend on it, such as auto-moderation bots. - -### Who has to Use Application Commands - -Any verified bot that does not have the Message Content intent must use Application Commands. Discord is allowing developers to submit -applications for the ability to use the intent; however, since they don't want to keep supporting prefix commands due to privacy concerns, -they will automatically decline any application that includes only that as a reason. So, if your bot doesn't have an auto-moderation feature -(or any other functionality that requires Message Content), you're out of luck. - -Unverified bots, however, don't have to use Application Commands. This is because the Message Content intent is a `Privileged Intent`, meaning that -it must be applied for only if your bot is verified or about to be verified. Unverified bots don't have to apply for Privileged Intents, so they can -use them freely. - -So, if your bot is made only for a couple of servers, you can choose between prefix commands and Application Commands. However, if you plan on expanding -your bot's reach, it'll have to use Application Commands. - -### What's the Better Option - -Choosing which is the better option is up to you, if you're starting small. If -you plan on growing your bot, however, you will have to use Application Commands. Since prefix commands are slowly being phased out by Discord, -there isn't much of a choice for developers of larger bots. - -## Message Components - -Message Components are fairly new features in Discord, allowing developers to give their bots a fast -and understandable user interface. Message Components are easy to use and make your bot look modern, -sleek, and downright awesome. - -### [Views](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View) - -Views are not an Application Command nor are they a Message Component. Views are the invisible placeholders, or grid, -that Message Components lie in. Views can have up to 5 [`Action Rows`](https://docs.pycord.dev/en/stable/api/models.html#discord.ActionRow), -and Action Rows can have a maximum of 5 slots. Below, you can find a table showing how many slots a Message Interaction takes up. - -| Component | Slots | -| ------------ | ----------------------------------------------- | -| Buttons | 1 Slot | -| Select Menus | 5 Slots | -| Text Modals | 1 Slot (opened via a Button) | - -So, based on this, you could have a maximum of 25 Buttons in a View with no Select Menus, and 5 Select -Menus in a View with no Buttons. This doesn't mean you can't have them both in a View, however. You can have -a combination of them, such as 20 Buttons and a Select Menu or 10 Buttons and 3 Select Menus. - -### [Buttons](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button) - -Buttons are the first of the Message Components. They allow for quick responses to prompts, such as for canceling or continuing an action. -Of course, these aren't their only uses; people have created awesome things with Buttons, such as calculators, games, and more! - - - - Discord Buttons are awesome! -
- - Click me! - -
-
-
- -
- -This is what a Button looks like, very simple and modern. To learn more about Buttons, refer to our -[Buttons page](./ui-components/buttons.mdx). - -### [Select Menus](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Select) - -Select Menus are the second of Discord's Message Components. They allow users to select from a list of choices, which your bot can then use. -Select Menus are good for things such as choosing features, pages of a help menu, and more. - -![Select Menu Example Image](../assets/interactions/select-menus-example.png) - -This is what a Select Menu looks like. While not looking as good as Buttons, they still look great -and have even greater possibilities. To learn more about Select Menus, please refer to our [Select -Menus page](./ui-components/dropdowns.mdx). - -### [Modal Dialogs](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal) - -Text Modals are the most recently added Message Component in Discord. They're useful for text input and filling out forms, such as a -sign-up for your bot's service. These are meant to replace long bot setup processes by allowing users to fill out multiple text fields, -which avoids having the user send multiple messages for the bot. Modals can be accessed by either invoking an Application Command or by -interacting with another UI Component. - -![Text Modal Example Image](../assets/interactions/modal-example.png) - -This is what a Text Modal looks like, easy to use and one of the most useful Message Components yet. To learn more about Text Modals, -please visit our [Modal Dialogs page](./ui-components/modal-dialogs.mdx). diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json b/i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json deleted file mode 100644 index 7b0a72fe..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "UI Components", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx deleted file mode 100644 index 10557c94..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx +++ /dev/null @@ -1,314 +0,0 @@ ---- -title: Buttons -description: Learn all about implementing buttons in your Discord Bot using Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On May 26, 2021, Discord added a new interaction called buttons. Instead of reactions, bots could now -send buttons and users could use them to interact with bots. This opened up a whole new world of -possibilities for bots. Soon after, developers made calculators, polls, and games like blackjack, UNO, -and even Minecraft! Buttons provided a clear and easy to use interface for interacting with bots. - -So, let's learn how you can add buttons to your bot! - -## Concept - -Buttons weren't the only update to the interactions system in Discord. Discord also added [Select Menus](./dropdowns) and [Modal Dialogs](./modal-dialogs), both of which work very similarly to buttons. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive button. - -```python -import discord - -bot = discord.Bot() # Create a bot object - -class MyView(discord.ui.View): # Create a class called MyView that subclasses discord.ui.View - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.primary, emoji="😎") # Create a button with the label "😎 Click me!" with color Blurple - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") # Send a message when the button is clicked - -@bot.slash_command() # Create a slash command -async def button(ctx): - await ctx.respond("This is a button!", view=MyView()) # Send a message with our View class that contains the button - -bot.run("TOKEN") # Run the bot -``` - -Using this command should return the following message: - - - -
- - button - -
- This is a button! -
- - Click me! - -
-
-
- -
- -As you can see, we create a class called `MyView` that [subclasses](#oop) -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `button_callback` to the `MyView` class with the decorator -[`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button). -This decorator adds a button to a component. This function takes two arguments: the button that was -clicked and the interaction. These arguments are passed to the function when the button is clicked -by the module. We use the [`interaction.response.send_message`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse.send_message) -function to send a message to the channel where the interaction was sent. - -Finally, we create a global slash command called `button` that sends the message, along with the view -that contains a button. - -This is the basic syntax of creating a button. What you create with it is up to you. You can worry -about making your button do amazing things, while Pycord handles the rest! - -## Button Styles - - - -| Name | Usage | Color | -| --------- | ----------------------------------------------------------------------------------------- | ------- | -| Primary | `discord.ButtonStyle.primary` / `discord.ButtonStyle.blurple` | Blurple | -| Secondary | `discord.ButtonStyle.secondary` / `discord.ButtonStyle.grey` / `discord.ButtonStyle.gray` | Grey | -| Success | `discord.ButtonStyle.success` / `discord.ButtonStyle.green` | Green | -| Danger | `discord.ButtonStyle.danger` / `discord.ButtonStyle.red` | Red | -| Link | `discord.ButtonStyle.link` / `discord.ButtonStyle.url` | Grey | - -Check out the [`discord.ButtonStyle`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ButtonStyle) class for more information. - -![Different Button Styles](../../assets/interactions/button-styles.png) - -You can set a button's style by adding the `style` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) decorator. - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.success) - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots, and each button takes up 1 slot. -So, how do we move the buttons to another row? - -This can be done by specifying the `row` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) -decorator. - -:::info The `row` argument - -The row argument specifies the relative row this button belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=1, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") -``` - -## Disabling Buttons - -### Pre-Disabled Buttons - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary, disabled=True) # pass `disabled=True` to make the button pre-disabled - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView()) -``` - -### Disabling Buttons on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - button.disabled = True # set button.disabled to True to disable the button - button.label = "No more pressing!" # change the button's label to something else - await interaction.response.edit_message(view=self) # edit the message's view -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(emoji="😀", label="Button 1", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) - - @discord.ui.button(label="Button 2", style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -Sometimes, you want to have a button that is disabled after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView(timeout=30)) -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a button that is disabled after a certain amount of time, you want to have a -button that is always working. - -Normally, when the bot goes offline, all of its buttons stop working. You will be able to see the -buttons, but nothing will happen when you press them. This is a problem -if you are trying to create a self-role system with buttons, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons will stop working. When the bot comes back online, however, the buttons will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view must have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.button(label="A button", custom_id="button-1", style=discord.ButtonStyle.primary, emoji="😎") # the button has a custom_id set - async def button_callback(self, button, interaction): - await interaction.response.send_message("Button was pressed", ephemeral=True) - -@bot.command() -async def button(ctx): - await ctx.send(f"Press the button! View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many buttons can I have in a message? - -Each message can have a maximum of 25 buttons. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do buttons need any special permissions? - -No new permissions are needed for either the bot or the server to allow bots to use buttons. - -#### Should I replace reactions with buttons for my bot? - -That is up to you. Buttons do provide a cleaner interface for your bot and are easier to use. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx deleted file mode 100644 index 8320f25d..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx +++ /dev/null @@ -1,339 +0,0 @@ ---- -title: Select Menus -description: Learn all about implementing Select Menus or Dropdowns in your Discord Bot with Pycord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Shortly after the buttons were added, Discord added their second message component: Select Menus. Select Menus allow users to choose from a list of items sent by a bot. These are a great substitute for having a user send a number that corresponds to an option. You can even allow users to select multiple options from the Select Menus. This guide will show you the easy and painless ways of using them with Pycord. - -## Concept - -Select Menus aren't the only message component in Discord. There's also [Buttons](./buttons) and [Modal Dialogs](./modal-dialogs). Select Menus make it easy for users to pick one or multiple options from a list provided by a bot. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive select menu. - -```python -import discord - -bot = discord.Bot() - -class MyView(discord.ui.View): - @discord.ui.select( # the decorator that lets you specify the properties of the select menu - placeholder = "Choose a Flavor!", # the placeholder text that will be displayed if nothing is selected - min_values = 1, # the minimum number of values that must be selected by the users - max_values = 1, # the maximum number of values that can be selected by the users - options = [ # the list of options from which users can choose, a required field - discord.SelectOption( - label="Vanilla", - description="Pick this if you like vanilla!" - ), - discord.SelectOption( - label="Chocolate", - description="Pick this if you like chocolate!" - ), - discord.SelectOption( - label="Strawberry", - description="Pick this if you like strawberry!" - ) - ] - ) - async def select_callback(self, select, interaction): # the function called when the user is done selecting options - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") - -@bot.command() -async def flavor(ctx): - await ctx.respond("Choose a flavor!", view=MyView()) - -bot.run("TOKEN") -``` - -There's a lot going on over here! Don't worry, we will go over the code and explain it. - -As you can see, we create a class called `MyView` that subclasses -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `select_callback` to the `View` class with the decorator -[`discord.ui.select`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.select). -This decorator adds a select menu to the view. This decorator takes a few arguments to customize your select menu. Read them in the [Customization section](#customization). - -That was the decorator. Now, the function itself is pretty simple. It takes two parameters, not including `self`. The parameters are `select`: The select menu, and `interaction`: a [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object. Both of these are passed by Pycord, so you just need to specify them in the function! - - - -In the callback, you could do anything you want. You get the two parameters `select` and `interaction` to play around with. Here, we send a message using `await interaction.response.send_message` (where interaction is [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse)) with content `select.values[0]`, which sends the label of the first/only option the user selected. Obviously, this is only an example, and you could do just about anything you want. - -Finally, we create a global slash command called `flavour` that sends a message "Choose a flavor!" along with the view -that contains our select menu. - -This is the basic syntax of creating a select menu. What you create with it is up to you. You can worry -about making your code do amazing things, while Pycord handles the rest! - -## Customization - -#### Select Menu Properties - -- `select_type`: The type of select to create. This must be a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. -- `channel_types`: A list of channel types that can be selected in the menu. This is only valid for selects of `select_type` [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType). -- `options`: A list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. These are the options that can be selected in this menu. -- `placeholder` is the placeholder text shown in the select menu if no option is selected. -- `custom_id`: The ID of the select menu that gets received during an interaction. It is recommended not to set this to anything unless you are trying to create a persistent view. -- `row`: The relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). -- `min_values`: The minimum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `max_values`: The maximum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `disabled`: Whether the select is disabled or not. Defaults to False. - -#### Select Option Properties - -In the `options` parameter, you pass a list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. This class also has a few parameters: - -- `default` (whether the option is selected by default) -- `description` (an additional description, if any) -- `emoji` (a string or an emoji object, if any) -- `label` (the name displayed to users, can be up to 100 characters) -- `value` (a special value of the option, defaults to the label). - -## Select Types - -In addition to regular string selects, you can also have your select menu contain users, roles, mentionables, and channels as its options. You can use these alternative select types by passing a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value for the `select_type` parameter when creating the Select. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.user_select - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -Additionally, you can use shortcut decorators to create a [`discord.ui.Select`](https://docs.pycord.dev/en/master/api/ui_kit.html#discord.ui.select) with a predetermined [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. Using a shortcut decorator, the above code can be rewritten like this: - -```python -class MyView(discord.ui.View): - @discord.ui.user_select() - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -### Specifying Channel Types - -When using a [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType.channel_select) type select menu, you can pass in a list of [`discord.ChannelType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ChannelType) values to limit which types of channels users can choose when interacting with the select menu. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.channel_select, - channel_types=[discord.ChannelType.text, discord.ChannelType.voice] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"You selected {select.values[0].mention}") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots. A button takes a single slot, while a select menu takes up all 5 of them. This means a view can have a maximum of 5 select menus, or any possible combination of select menus and buttons. - -The arrangement of buttons and select menus is generally adjusted by Pycord. However, it is possible to move them to specific relative rows. This is done by specifying the `row` argument. - -:::info The `row` argument - -The row argument specifies the relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero-indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=0, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.select( - row = 1, - options = [...] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") -``` - -## Disabling Select Menus - -### Pre-Disabled Menus - -```python -class MyView(discord.ui.View): - @discord.ui.select( - disabled = True, # pass disabled=True to set the menu as disabled - options = [...] - ) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send("Select and option from the menu!", view=MyView()) -``` - -### Disabling Menus on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - select.disabled = True # set the status of the select as disabled - await interaction.response.edit_message(view=self) # edit the message to show the changes -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def first_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) # edit the message to show the changes - - @discord.ui.select(options = [...]) - async def second_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -You may want a select menu to automatically stop working after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select(ctx): - await ctx.send(view=MyView(timeout=30)) # specify the timeout here -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a select menu that is disabled after a certain amount of time, you want to have a -select menu that is always working. - -Normally, when the bot goes offline, all of its views stop working, even if they don't have a timeout. You will be able to see the -views, but nothing will happen when you try to interact with them. This is a problem -if you are trying to create a self-role system, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons and select menus will stop working. However, when the bot comes back online, the buttons and select menus will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view much have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.select(custom_id="select-1", options = [...]) # a custom_id must be set - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send(f"View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many select menus can I have in a message? - -Each message can have a maximum of 5 select menus. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do select menus need any special permissions? - -No new permissions are needed in the bot or in the server. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx deleted file mode 100644 index 6ee4682f..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Modal Dialogs -description: Learn how you can implement Modals in your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Modal Dialogs, also known as "modals", provide a form-like structure for bots to receive input from users. No extra permissions are needed for bots to send modal dialogs, so it becomes a convenient workaround for bots to receive longer input without needing the Message Content [intent](../../popular-topics/intents). - -## Concept - -Modal Dialogs consist of a title, custom ID, and up to 5 [`discord.ui.InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) components. While creating modals, we generally subclass [`discord.ui.Modal`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal), as we'll see later. - -Unlike other UI Components, Modals cannot be sent with messages. They must be invoked by an Application Command or another UI Component. - -## Usage Syntax - -```py -class MyModal(discord.ui.Modal): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - self.add_item(discord.ui.InputText(label="Short Input")) - self.add_item(discord.ui.InputText(label="Long Input", style=discord.InputTextStyle.long)) - - async def callback(self, interaction: discord.Interaction): - embed = discord.Embed(title="Modal Results") - embed.add_field(name="Short Input", value=self.children[0].value) - embed.add_field(name="Long Input", value=self.children[1].value) - await interaction.response.send_message(embeds=[embed]) -``` - - - - -The `ctx` parameter we define in Application Commands receives an [`ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext) object. Using its `send_modal()` coroutine, you can send a Modal dialog to the user invoking the Application Command. - -```py -@bot.slash_command() -async def modal_slash(ctx: discord.ApplicationContext): - """Shows an example of a modal dialog being invoked from a slash command.""" - modal = MyModal(title="Modal via Slash Command") - await ctx.send_modal(modal) -``` - - - - -The `interaction` parameter we define in UI Components receives an [`Interaction`](https://docs.pycord.dev/en/stable/api/models.html#discord.Interaction) object. The `response` attribute of the object contains an [`InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object, with various coroutines such as `send_message()` and `send_modal()`, which we utilize. - -```py -class MyView(discord.ui.View): - @discord.ui.button(label="Send Modal") - async def button_callback(self, button, interaction): - await interaction.response.send_modal(MyModal(title="Modal via Button")) - -@bot.slash_command() -async def send_modal(ctx): - await ctx.respond(view=MyView()) -``` - - - - -The above example uses an embed to display the results of the modal submission, but you can do anything you want with the text provided by the user. -Each input field can be accessed in the order it was added to the modal dialog, via `Modal.children`. - -## Customization - -A Modal can have up to 5 [`InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) fields. These fields offer some customization. - -Each field has a label which is shown to the user. This is defined with `label`. - -The `style` parameter is used to determine whether it should be a short (single-line) or long (multi-line) input field. - -There are a number of aliases that can be used: - -```x title="Single-line InputTextStyle values:" -short -singleline -``` - -```x title="Multi-line InputTextStyle values:" -paragraph = 2 -multiline = 2 -long = 2 -``` - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Buttons](./buttons) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/introduction.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/introduction.mdx deleted file mode 100644 index 3262c632..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/introduction.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Introduction -description: Pycord Guide is a complete guide for Pycord. Learn how to create Discord Bots today! -sidebar_position: 1 ---- - -Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord, written in Python. Pycord is a maintained fork of [discord.py](https://github.com/Rapptz/discord.py). - -## Before you begin - -Pycord is an advanced and complex Python library. To take advantage of the full capabilities of Pycord, you will need to have a good understanding of Python. You should know the basics of Python and have an understanding of the following concepts: - -- Variables -- Data Types -- Functions -- Packages -- Conditionals -- Loops -- Classes -- Object-Oriented Programming -- Inheritance -- Exception Handling -- Iterators -- Coroutines -- Async/Await - -This list is not exhaustive, but it should give you a good idea of what you need to know to get started. - -When you see an ellipsis - that's the three dots - in this guide, it is a placeholder for code that you need to fill in. Sometimes, it may be code for a command, while other times it could be something simple like a Guild ID. Make sure to replace them before running your bot! - -## Learning Resources - -Here are some good resources to get started or to freshen up your Python knowledge: - -- [Official Beginner's Guide](https://wiki.python.org/moin/BeginnersGuide) -- [Official Tutorial](https://docs.python.org/3/tutorial/) -- [Automate the Boring Stuff, a free online book for complete beginners to programming](https://automatetheboringstuff.com/) -- [Learn Python in y Minutes, complete cheat sheet for people who know programming already](https://learnxinyminutes.com/docs/python3/) -- [Swaroopch's free Python book](http://python.swaroopch.com/) -- [Codeabbey, exercises for beginners](http://www.codeabbey.com/) - -## Credits - -First of all, we would like to thank [Rapptz](https://github.com/Rapptz) for the original [discord.py](https://pypi.org/project/discord.py) library. Pycord is a maintained fork of this library. - -We would also like to thank the [discord.js guide](https://discordjs.guide), which inspired this guide style-wise, and the [original Pycord Guide](https://namantech.me/pycord), which inspired some content in this guide. - -We created this guide using [Docusaurus v2](https://docusaurus.io), a modern static site generator for React. We would also like to thank Danktuary for his [`@discord-message-components/react`](https://www.npmjs.com/package/@discord-message-components/react) package, from which we took the Discord message components. - -And finally, we would like to thank the amazing and loving community of Pycord users, contributors and developers. diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/more/_category_.json b/i18n/ja/docusaurus-plugin-content-docs/current/more/_category_.json deleted file mode 100644 index 2cbe2c56..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/more/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 8, - "label": "More", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/more/community-resources.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/more/community-resources.mdx deleted file mode 100644 index ed3075bd..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/more/community-resources.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Community Resources ---- - -This page showcases the amazing things created by the Pycord community, including bots, Plugins, and more. - -## Plugins - -| Name | Type | GitHub | -| --------------- | ------------ | --------------------------------------------------------------- | -| Music Cord | Music | [NixonXC/cord-music](https://github.com/NixonXC/cord-music) | -| pycord-i18n | Localization | [Dorukyum-pycord-i18n](https://github.com/Dorukyum/pycord-i18n) | -| pycord-multicog | Cogs | [pycord-multicog](https://github.com/Dorukyum/pycord-multicog) | -| EzCord | Utilities | [EzCord](https://github.com/tibue99/ezcord) | - -## Bots - -| Name | Type | Link | -| ------------------------ | ------------ | ----------------------------------------------------------------------------------- | -| Discord-Multipurpose-Bot | Multipurpose | [github](https://github.com/pogrammar/Discord-multipurpose-bot/tree/master/Python) | -| inconnu | Fun & QOL | [github](https://github.com/tiltowait/inconnu) | -| Mai | Multipurpose | [github](https://github.com/TeamMai/Mai) & [website](https://xfghoul.github.io/Mai) | -| Toolkit | Multipurpose | [github](https://github.com/Dorukyum/Toolkit) | diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/more/contributing.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/more/contributing.mdx deleted file mode 100644 index 8fdf31af..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/more/contributing.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: Contributing to the Guide -description: Learn how to contribute to the Pycord Guide. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -This page outlines some of the basic syntax you need to know to contribute to the guide. We recommend you also check out: - -- [Docusaurus's Docs](https://docusaurus.io/docs/) -- [Contributing Rules](https://github.com/Pycord-Development/guide/blob/master/.github/CONTRIBUTING.md) - -## Info - -We use [Docusaurus v2](https://docusaurus.io/) to generate our guide. All the guide pages are generated -from `mdx` files in the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory. -MDX allows you to use JSX in your markdown content. - -## Structure - -Let's visit the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory and check its file structure. - -We can see various folders and a few files in it. Let's talk a bit about the `introduction.mdx` file. At the top, you can see something like: - -```md ---- -title: Introduction -description: ... -sidebar_position: 1 ---- -``` - -Most pages have this at the top. The `title` defaults to the file name. Since the titles need to be Capitalized according to need while the file names are lowercased (sometimes, the file names are shorter than the title!), we set a title ourselves. - -The `description` field is also important. This is the text shown in an embed when the page's link is shared on Discord, Twitter or other websites that support embedded links. Make sure to give a nice an interesting description! - -The `sidebar_position` field is pretty self-explanatory. It sets the position of the page in the sidebar. Most files in categories do not need this since they are sorted alphabetically. - -## Markdown Syntax - -This page quickly outlines some of the syntax that is used in markdown. - -````mdx -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - - ```python - print("We can use code blocks like this.") - ``` - -You can add [links to other websites](https://pycord.dev). You can add images like this: ![alternate text that describes the image](https://pycord.dev/image.png). - -- You can create -- unordered lists like this - -1. Or ordered lists -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` -4. Like this - -# Headers - -## Go - -### Like - -#### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet -```` - -
-Preview -
- -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - -```python -print("We can use code blocks like this.") -``` - -You can add [links to other websites](https://pycord.dev). You can add images by adding ![alt text](@site/static/img/favicon.ico). - -- You can create -- unordered lists like this - -1. Or ordered lists - -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` - -4. Like this - - # Headers - - ## Go - - ### Like - - #### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet - -
-
- -## Admonitions - -We can add warnings, notes, etc. with the following syntax: - -```md -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: -``` - -
-Preview -
- -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: - -
- -
- -## Discord Message Components - -As most files already have the imports for these, it's not that hard to add them. - -First, import the necessary components: - -```tsx -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; -``` - -The div starts like so: - -```tsx - - - - -
-``` - -This is where you list a `DiscordMessage`. - -```tsx - - - Hello! - - - -
-``` - - - - Hello! - - - -
- -It has a pretty straightforward syntax. - -:::tip - -Add a `
` to the end of a component to make the content below it look better. - -::: - -### Slash Commands - -To make a message authored by a slash command, do the following: - -```tsx - - -
- - update - -
- Updated dependencies to the latest version! -
-
-``` - - - -
- - update - -
- Updated dependencies to the latest version! -
-
- -### Buttons - -To make a message with buttons, do the following: - -```tsx - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
-``` - - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
- -## Page Format - -There are a few things you need to take care of: - -1. Make sure that the spelling and grammar is perfect. We have a GitHub action configured that will warn you about spelling errors when you start a pull request. Make sure to commit your changes accordingly. - - As for the grammar, you should try reading the changes you have done and wait for reviews from others. - -2. A common mistake people make is incorrect header style. People often think that the less the important the topic is, the lower it's heading style should be. - - ```md - [PAGE STARTS] - # Topic - ## Less Important Topic - ## Subtopic - ``` - - ```md - [PAGE STARTS] - # About - [Introduction] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - That's VERY wrong. Here's the correct example: - - ```md - [PAGE STARTS] - [Introduction] - ## Topic - ## Less Important Topic - ### Subtopic - ``` - - ```md - [PAGE STARTS] - [Introduction] - - ## About - [More Information] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - Note that the `---`s at the beginning have been skipped here. diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/more/git.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/more/git.mdx deleted file mode 100644 index 0f929d6d..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/more/git.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Installing Git -description: Learn how you can install Git on your system. ---- - -Git is software for tracking changes in any set of files (also known as a "version control" software), usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems). - -Let's see how to install Git on different platforms. - -## Windows - -On Windows, Git can be installed via: - -- [Git for Windows](https://gitforwindows.org) -- [Git Scm](https://git-scm.com/download/windows) - -## Linux - -On Linux, Git is probably already installed in your distribution's repository. If not, you can install it via [Git for Linux](https://git-scm.com/download/linux). You can also install it via the built-in package manager on your Linux distro. - -## Mac - -You can install Git for your macOS computer via [Git for Mac](https://git-scm.com/download/mac). Alternatively, it can be also be installed from the Xcode Command Line Tools by installing Xcode from the App Store, or by running this: - -``` -xcode-select --install -``` - -## Using Package Managers - -You can also install Git using package managers. - -### Chocolatey - -If you use the Chocolatey package manager, you can install Git using: - -``` -choco install git -``` - -### Scoop - -If you use Scoop, you can install Git using: - -``` -scoop install git -``` - -### Brew - -If you're on macOS or Linux, you can install Git using: - -``` -brew install git -``` diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx deleted file mode 100644 index b0b8c7ea..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Virtual Environments -description: Learn how to set up a virtual environment for Pycord. ---- - -## Setup - -Sometimes you want to keep libraries from polluting system installs or use a different version of libraries than the ones installed on the system. You might also not have permissions to install libraries system-wide. For this purpose, the standard library as of Python 3.3 comes with a concept called “Virtual Environment”s to help maintain these separate versions. - -A more in-depth tutorial is found on [Virtual Environments and Packages](https://docs.python.org/3/tutorial/venv.html). - -However, for the quick and dirty: - -Go to your project’s working directory: - -```bash -$ cd your-bot-source -$ python3 -m venv venv -``` - -Activate the virtual environment: - -```bash -$ source venv/bin/activate -``` - -On Windows you activate it with: - -```batch -$ venv\Scripts\activate.bat -``` - -Use pip like usual: - -```bash -$ pip install -U py-cord -``` - -Congratulations. You now have a virtual environment all set up. - -## Additional info - -It can be useful to set up a requirements.txt, so you can just put all of your dependencies in there and have pip install it. -For instance, if you wanted to have the latest 2.0 version of pycord and [pytz](https://github.com/stub42/pytz/blob/master/src/README.rst), just create a file named requirements.txt with the following contents: - -``` -py-cord>=2.0.0 -pytz -``` - -And then (in your virtual environment) you can just execute - -```bash -pip install -r requirements.txt -``` - -To keep from committing your virtual environment to git, you can set up a .gitignore file with the following line -(assuming you named your virtual environment venv like the above example): - -``` -venv/ -``` diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/_category_.json b/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/_category_.json deleted file mode 100644 index c38ea014..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 7, - "label": "Popular Topics", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx deleted file mode 100644 index 5377a6c3..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Cogs ---- - -Cogs, often known as modules or extensions, are used to organize commands into groups. This is useful -for grouping commands that have the same general idea (such as moderation commands). This also helps -to avoid making your bot's files messy and cluttered. - -## Getting Started - -First, you'll need to create a folder to store your cogs, e.g. `cogs/`. - -Then, create a file inside the folder, e.g. `cogs/greetings.py`. By convention, the file name should -be the same as the name of the cog or module. - -We can then create the cog. - -```python title="./cogs/greetings.py" -import discord -from discord.ext import commands - -class Greetings(commands.Cog): # create a class for our cog that inherits from commands.Cog - # this class is used to create a cog, which is a module that can be added to the bot - - def __init__(self, bot): # this is a special method that is called when the cog is loaded - self.bot = bot - - @commands.command() # creates a prefixed command - async def hello(self, ctx): # all methods now must have both self and ctx parameters - await ctx.send('Hello!') - - @discord.slash_command() # we can also add application commands - async def goodbye(self, ctx): - await ctx.respond('Goodbye!') - - @discord.user_command() - async def greet(self, ctx, member: discord.Member): - await ctx.respond(f'{ctx.author.mention} says hello to {member.mention}!') - - math = discord.SlashCommandGroup("math", "Spooky math stuff") # create a Slash Command Group called "math" - advanced_math = math.create_subgroup( - "advanced", - "super hard math commands!" - ) - - @math.command() - async def add(self, a: int, b: int): - c = a + b - await ctx.respond(f"{a} + {b} is {c}.") - - @advanced_math.command() - async def midpoint(self, x1: float, y1: float, x2: float, y2: float): - mid_x = (x1 + x2)/2 - mid_y = (y1 + y2)/2 - await ctx.respond(f"The midpoint between those coordinates is ({mid_x}, {mid_y}).") - - @commands.Cog.listener() # we can add event listeners to our cog - async def on_member_join(self, member): # this is called when a member joins the server - # you must enable the proper intents - # to access this event. - # See the Popular-Topics/Intents page for more info - await member.send('Welcome to the server!') - -def setup(bot): # this is called by Pycord to setup the cog - bot.add_cog(Greetings(bot)) # add the cog to the bot -``` - -You can add any number of commands to your cog, as well as event listeners. However, this code will -not work on its own. In your main bot file, you must add the following code: - -```python -bot.load_extension('cogs.greetings') -``` - -This loads the file `cogs/greetings.py` and adds it to the bot. -The argument of `load_extension` should be your cog's path (e.g. cogs/greetings.py) without the file -extension and with the `/` replaced with `.` - -If you have multiple cogs, you can add them all at once by adding the following code: - -```python -cogs_list = [ - 'greetings', - 'moderation', - 'fun', - 'owner' -] - -for cog in cogs_list: - bot.load_extension(f'cogs.{cog}') -``` - -## Cog Rules - -When using a cog instead of the main file, there are some changes you have to make to your code. This -is because cogs work slightly different from a regular file. - -### The `self` variable - -The self variable is a variable that represents a class. In the case of cogs, `self` represents -the cog. In the `__init__` function, you can see that we have `self.bot = bot`. `bot` represents your -`discord.Bot` or `discord.ext.commands.Bot` instance, which is used for some functions. - -This means that instead of using functions that would usually be accessed via `bot`, you now need -to access them via `self.bot` - -Because we're in a class, all of our commands are methods of that class. Because of this, all of our -functions need to have `self` as the first parameter, where `self` is the cog. Without this, we -wouldn't be able to access our bot instance. - -### Creating Commands - -When creating prefixed commands, your decorator would usually be something like `@bot.command()`. If you're using -cogs, this isn't the case. In a cog, you can't access the bot instance outside of functions, so to -register a function as a command, you must instead use `@commands.command()`. - -Similar to prefixed commands, you'll have to use either the `@discord.slash_command()`, `@discord.user_command()`, -or `@discord.message_command()` decorators for Application Commands. - -Also, when creating a command, make sure that it is indented. If we want a command to be actually -inside a cog, it has to be inside your cog's class. If the command is not inside the cog, -your command becomes useless. - -### Events - -When creating events, you can no longer use `@bot.event` as a decorator. This is because we cannot -access the `bot` variable outside a function. To make an event, you have to use the `ext.commands` -method, `@commands.Cog.listener()`. Events also need `self` as their first parameter. - -And that's it! Cogs are a simple and easy way of organizing your code. Now you can check out how to -create a help command [here](../extensions/commands/help-command). - -:::info Related Topics - -- [Creating a Help Command](../extensions/commands/help-command) -- [Rules and Common Practices](../getting-started/rules-and-common-practices) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Application Commands](../interactions#application-commands) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx deleted file mode 100644 index 3599cc82..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx +++ /dev/null @@ -1,383 +0,0 @@ ---- -title: Error Handling -description: All about handling errors. ---- - -import { - DiscordEmbed, - DiscordInteraction, - DiscordMessage, -} from "@pycord/discord-message-components-react"; -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -## About - -When using the library, errors are frequently raised due to various reasons. These reasons range from the Discord API -failing your bot's request due to missing permissions or an invalid syntax error. - -Before going into error handling, it's best that you learn the basic ways of handling errors. A good resource is: - -- [W3Schools' Guide to Python Try-Except Statements](https://www.w3schools.com/python/python_try_except.asp) - -## Basic Handling - -The most basic way to handle errors is to tackle it at the source. This can be done like so: - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -import asyncio - -import discord - -intents = discord.Intents.default() -intents.message_content = True - -bot = discord.Bot(intents=intents) - - -@bot.slash_command(description="Gets some feedback.") -@discord.option("name", description="Enter your name.") -async def feedback(ctx: discord.ApplicationContext, name: str): - try: - await ctx.respond(f"Hey, {name}! Send your feedback within the next 30 seconds please!") - - def is_author(m: discord.Message): - return m.author.id == ctx.author.id - - feedback_message = await bot.wait_for("message", check=is_author, timeout=30.0) - await ctx.send(f"Thanks for the feedback!\nReceived feedback: `{feedback_message.content}`") - except asyncio.TimeoutError: - await ctx.send("Timed out, please try again!") - - -bot.run("TOKEN") -``` - -If you respond within 30 seconds, the interaction will look like so: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Great bot! - - - Thanks for the feedback! -
- Received feedback: Great bot! -
-
-
- -Otherwise, if you don't respond in time, the interaction will go as follows: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Timed out, please try again! - -
-
- -This basic method of error handling can be extended to handle -many other errors including ones raised directly by py-cord. - -## Per-Command Handling - -This type of error handling allows you to handle errors per each command you have on your bot. -Each and every command can have it's own error handler made to handle specific errors that each command may raise! - -An example of per-command error handling is as follows: - -:::note Bridge Commands - -For these types of commands, it is recommended to utilize global error handling -until [the feature](https://github.com/Pycord-Development/pycord/issues/1388) is added. -::: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot(owner_id=...) # Your Discord user ID goes in owner_id - - -@bot.slash_command(description="A private command...") -@commands.is_owner() # This decorator will raise commands.NotOwner if the invoking user doesn't have the owner_id -async def secret(ctx: discord.ApplicationContext): - await ctx.respond(f"Hey {ctx.author.name}! This is a secret command!") - - -@secret.error -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.NotOwner): - await ctx.respond("Sorry, only the bot owner can use this command!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If your ID is registered as the owner ID, you'll get the following: - - - -
- - secret - -
- Hey Dorukyum! This is a secret command! -
-
-
- -Any other user whose ID doesn't match the bot owner's will get the following: - - - -
- - secret - -
- Sorry, only the bot owner can use this command! -
-
-
- -This local (per-command) error handler can also be used to handle the same types of errors that standard try-except -statements can handle. This is done by using the same method as above with the `isinstance` built-in function. - -## Per-Cog Handling - -Adding error handlers per-command can be quite the task in terms of work if you have a lot. If you have happened to -group your commands in cogs, then you're in luck! You can create an error handler that is specific to a cog and -handles all errors raised by commands inside that cog. - -Here's an example of a bot with a cog that implements its own error handling: - -```python title="./cogs/dm.py" -# This cog is for DM only commands! Sadly, we only have 1 command here right now... - -import discord -from discord.ext import commands - - -class DM(commands.Cog): - def __init__(self, bot: commands.Bot): - self.bot = bot - - @commands.command() - @commands.dm_only() # This decorator will raise commands.PrivateMessageOnly if invoked in a guild context. - async def avatar(self, ctx: commands.Context): - embed = discord.Embed( - title="Avatar", - description=f"Here's your enlarged avatar, {ctx.author.name}!", - color=ctx.author.top_role.color - ) - embed.set_image(url=ctx.author.display_avatar.url) - await ctx.send(embed=embed, reference=ctx.message) - - async def cog_command_error(self, ctx: commands.Context, error: commands.CommandError): - if isinstance(error, commands.PrivateMessageOnly): - await ctx.send("Sorry, you can only use this in private messages!", reference=ctx.message) - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -def setup(bot: commands.Bot): - bot.add_cog(DM(bot)) -``` - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -# This is the main file where we load the DM cog and run the bot. - -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix=commands.when_mentioned_or("!")) -bot.load_extension("cogs.dm") -bot.run("TOKEN") -``` - -If you use this command in a DM context, you'll get the following: - - - - !avatar - - -
- - !avatar - -
- - Here's your enlarged avatar, BobDotCom! - -
-
-
- -Otherwise, if used in a guild context: - - - - !avatar - - -
- - !avatar - -
- Sorry, you can only use this in private messages! -
-
-
- -Per-cog error handling comes in very handy as you can relegate all of your error handling to a single function instead -of spreading it out across several per-command error handlers or inside the commands themselves. - -## Global Handling - -If separating your error handling is not how you would like to handle errors, then global error handling is the way to -go. This method of handling allows you to relegate all handling to a single function that resides within your bot -instance. - -A non-subclassed bot would implement this like so: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot() - - -@bot.slash_command(description="Get the bot's current latency!") -@commands.cooldown(1, 30, commands.BucketType.user) -# ^ This decorator allows one usage of the command every 30 seconds and raises commands.CommandOnCooldown if exceeded -async def ping(ctx: discord.ApplicationContext): - await ctx.respond(f"Pong! `{int(bot.latency*1000)} ms`.") - - -@bot.event -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.CommandOnCooldown): - await ctx.respond("This command is currently on cooldown!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If you've subclassed your bot, the `on_application_command_error` event will be placed inside the subclass without a -`bot.event` decorator and `bot.slash_command` will be replaced with `discord.slash_command`. - -The error handling used above will yield this interaction if the command is used again too quickly: - - - -
- - ping - -
- Pong! 49 ms. -
- -
- - ping - -
- This command is currently on cooldown! -
-
-
- -The only issue regarding global error handling is that, if you have a large amount of commands, the global handler may -start to get crammed with a lot of code. This is where all the previously mentioned handlers can take their place! - -## FAQ - -#### Why does the example in per-cog handling have self at the start of its function signatures? - -This is a feature of classes and allows you to reference the cog object as `self` and get access to the bot object -passed at initialization through `self.bot`. - -If this is new to you, we recommend checking out these helpful resources to learn more about classes and cogs: - -- [W3Schools' Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [Our Cogs Guide Page](./cogs) - -#### How many errors can I handle in a single error handler? - -While all the examples in this guide page only handle one specific error and re-raise all others, all of these -error handlers can be extended to catch many errors. - -In [basic handling](#basic) (i.e. try/except statements) you can do one of two things: - -- Explicitly handle the errors you know might get raised and then have a broad `except Exception as exc:` statement - as a catch-all. -- Catch any and all errors via the catch-all statement mentioned above. - -In [per-command](#percommand), [per-cog](#percog), and [global handling](#global), you can use elif clauses with the -built-in isinstance function to catch specific errors. Atop of this, an else clause can be used to catch any other -errors you either don't want to handle or want to relegate to a different error handler. - -#### Can I use more than one type of error handler at once? - -Thankfully, all of these different ways of error handling can be mixed together, so you don't have to pick just one! -For commands that raise specific errors that no other commands will raise, you can use [per-command](#percommand). -For cogs that raise specific errors that no other cogs will raise, use [per-cog](#percog)! Lastly, for errors that -occur frequently across all commands and cogs, use [global handling](#global)! - -However, one important note to remember is that you should always raise the error again in an error handler if it -isn't handled there! If you don't do this, the error will go ignored and your other handlers won't have a chance to -do their work! - -#### What's the difference between slash and prefixed command error handling? - -Although most examples shown here use slash commands, the [per-cog handling](#percog) section presents a prefixed -command. The main difference you may notice is the change in command signature. - -To make the distinguishing features apparent: - -- Slash commands use `on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException)` - as presented in the [per-command](#percommand) and [global handling](#global) examples. -- Prefixed commands use `on_command_error(ctx: commands.Context, error: commands.CommandError)` as presented in the - [per-cog handling](#percog) example. - -This distinction is made as both types of commands need their own system for handling errors that are specific to -themselves. - -:::info Related Topics - -- [Slash Commands](../interactions/application-commands/slash-commands) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Cogs](./cogs) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx deleted file mode 100644 index 9f4210af..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Intents -description: All about intents in Discord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## What are Intents? - -Intents allow bot developers to "subscribe" to specific events in Discord. This is useful for bots that need to respond to specific events, such as when a user joins a server or sends a message. You could choose to enable all intents or to enable only specific intents that your bot requires. - -## How do I enable intents? - -:::important - -Remember that [Privileged Intents](#what-are-privileged-intents) require you to enable them in the Discord Developer Portal. Verified Discord Bots that don't already have access to them will need to request Discord to allow access. - -::: - - - - -```python -import discord - -bot = discord.Bot(intents=discord.Intents.all()) -``` - - - - - -You can view a list of intents and the events they subscribe to [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```python title="Enabling Intents" -import discord - -bot = discord.Bot(intents=discord.intents.members(bans=True, guilds=True)) -``` - - - - -## What are Privileged Intents? - -Discord defines some intents as "privileged" because of the sensitive information they contain. Currently, there are three privileged intents: `members`, `presences`, and `message_content`. These intents must be enabled in your bot's Developer Portal. Once your bot reaches 100 servers, you will need to verify your bot for these intents to keep working and for your bot to be able to be invited to more guilds. - -:::tip - -Only enable these intents if you need them. These intents give your bot access to quite sensitive information about the users in your guild. These intents are privileged to respect the privacy of users, and you should do that as well. - -Not enabling these intents doesn't mean you won't be able to ban users, but you will be unable to detect when a new user joins a guild, or what game they are playing. The majority of bots won't need all intents. - -::: - -:::info Related Topics - -- [Sharding Bots](sharding) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx deleted file mode 100644 index c3d17197..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Sharding -description: All about Sharding Discord Bots. ---- - -# Sharding - -## What is Sharding? - -Sharding is the process of breaking up your bot into smaller pieces so that it has a better time handling -events. As [Discord's Documentation](https://discord.com/developers/docs/topics/gateway#sharding) puts -it, sharding is "a method of user-controlled guild sharding which allows for splitting events across -several gateway connections." - -Sharding is used only for large bots and takes up additional resources for managing the new processes. -Pycord automatically shards your bot, so the only thing you need to do is use an `AutoShardedClient` -or `AutoShardedBot` class instead of a plain `Client` or `Bot` class. Pretty cool, right? - -Just because you _can_ shard your bot doesn't mean you _should_. While Pycord makes it easy to shard -your bot, it isn't necessary to shard unless your bot is large. Sharding a small bot isn't -just useless, but _harmful_, as it uses extra resources and may slow down your bot. Discord -themselves will let you know when your bot needs sharding, so you won't need to worry about this until they contact you. - -## How Do I Shard in Pycord? - -Sharding in Pycord is straightforward. - -Just replace your `discord.Client`, `discord.Bot`, `commands.Bot` objects -with `discord.AutoShardedClient`, `discord.AutoShardedBot`, `commands.AutoShardedBot` respectively. - -These new objects have been inherited from the original objects, so all the functions from those other types should be present. - -If you want to specify the number of shards your bot uses, -just add the `shards` parameter, along with the number of shards you want. - -## Why Should I Shard my Bot? - -Sharding is very necessary for big bots. While your bot grows, it gets harder for your bot to control -how many guilds it is in and what parts of your code should do what. This is exactly what sharding -handles, it makes all of this easier for your bot. Remember, though, only shard your bot once it's -big enough, and that's at _least_ 1,000 guilds. - -:::info Related Topics - -- [Hosting your Bot](../Getting-Started/hosting-your-bot) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx deleted file mode 100644 index bd2969c1..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Subclassing Bots -description: Subclassing is a popular way of creating Discord Bots. Explore how you can create a Discord bot by subclassing. ---- - -## About - -Subclassing is another popular way of creating Discord Bots. Here, you create a bot by extending a bot class. To some advanced users, this is preferable to creating a bot instance with `bot = discord.Bot()`. - -Subclassing is an intermediate python concept, so we recommend you learn about it before continuing. Some good resources are: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -## Why Subclassing? - -Many developers prefer to subclass their bots for many reasons, some of them being: - -#### Skeletal Frameworks for Bots - -Developers often share their bots code on open-source platforms, mostly GitHub, and allow users to self-host the bot (running their own instance of the bot with the code provided by the developer. Permissions vary in accordance to licences). Here, users find it easier and more convenient to have a small file that imports the custom bot class and runs it, rather than having to go through the code of the bot and find out which file to run. This makes it easier for people not familiar with programming to run and customize the bot, since it often brings down the code to: - -```python title="./main.py" -from src import Bot - -bot = Bot() - -bot.run("TOKEN") -``` - -Here, all the commands are inside the `/src` folder that the user need not bother with. - -#### Running Multiple Instances - -Some developers may need to run multiple instances of their bot (perhaps on different bot accounts). For example, a developer might have a second bot for testing alpha features. This system makes it simpler for the developer, and allows them to maintain multiple versions of the bot in the same directory: - -```python title="./alpha_bot.py" -from src import Bot - -class AlphaBot(Bot): # subclasses Bot - ... # insert any custom configuration - -bot = AlphaBot() - -@bot.slash_command() # adds a new slash command to this subclassed bot -async def alpha_feature(ctx): - await ctx.respond("Alpha Feature!") - -bot.run("TOKEN") -``` - -There are many more reasons to subclass! It's not required, and won't affect the speed of the bot, but it may affect your development process, for the good or for the worse. You don't miss out on any features when you subclass, either. Some developers want the OOP feel, while some just prefer that method and find it easier. - -## Basic Example - -```python -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override the on_ready event - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') - -bot = MyBot() - -@bot.slash_command() # create a slash command -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run('token') -``` - -As you can see, instead of creating a bot object with `bot = discord.Bot()`, we subclass [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). We then create an instance of our new bot class and run it. Notice how we don't need to use the `@event` decorator. - -Here's another example: - -```python title="./src/bot.py" -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override on_ready - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') -``` - -```python title="./src/\_\_init\_\_.py" -from .bot import MyBot # import the MyBot class from the bot.py file -``` - -```python title="./main.py" -from src import MyBot # import MyBot from /src - -bot = MyBot() # create an instance of MyBot - -@bot.slash_command() -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run("TOKEN") # run the bot -``` - -These are just two ways you could do it. There are ton of other structures you can implement. It's up to you. - -So, should you subclass? There are no limitations you face if you decide to subclass your bot, but, once again, it's up to you. - -:::info Related Topics - -- [Making a Help Command](../Extensions/Commands/help-command) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx deleted file mode 100644 index 23220b0e..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Threads -description: Threads with Pycord ---- - -In programming, threads are a way to run multiple processes at the same time. In Discord, threads are -a way to keep multiple conversations going at the same time. Let's take a brief look at how to use threads in Pycord. - -:::tip - -Not all the methods and attributes will be covered in this guide, but you can find them in our documentation! -[Check it out!](https://docs.pycord.dev/en/stable/api/models.html#discord.Thread) - -::: - -## Creating a thread - -With a few simple lines of code, we can create threads in Pycord. - -:::important - -All public threads need a starting message. This message will start the thread. However, private threads -(which are unlocked with having your server boosted to Level 2), do not require a starting message. - -::: - -### Creating thread from a message - -```python title="Creating a Thread from a Message" -message = await ctx.send("My Starting Message") -await message.create_thread(name="thread name", auto_archive_duration=60) -``` - -You may also use other ways to create the thread, for example, by using `on_message` events or by commands. - -### Creating thread in a channel - -```python title="Creating a Thread from a Channel" -channel = bot.get_channel(...) # define this! -await channel.create_thread(name="Thread Name", message=None, auto_archive_duration=60, type=None, reason=None) -``` - -A thread type could be `news_thread`, `public_thread`, `private_thread`. You may use it by passing `type=discord.ChannelType.news_thread`. - -## Deleting Threads - -Deleting Threads is simple. You need to get a thread and then use the `delete` method. - -```python title="Deleting a Thread" -thread = bot.get_channel(thread_id) # you could use other ways to get a thread -await thread.delete() -``` - -## Editing Threads - -**Parameters** - -- `name` (str) – The new name of the thread - -- `archived` (bool) – Whether to archive the thread or not. - -- `locked` (bool) – Whether to lock the thread or not. - -- `invitable` (bool) – Whether non-moderators can add other non-moderators to this thread. Only available for private threads. - -- `auto_archive_duration` (int) – The new duration in minutes before a thread gets automatically archived for inactivity. Must be one of 60, 1440, 4320, or 10080. - -- `slowmode_delay` (int) – Specifies the slow-mode rate limit for users in the thread, in seconds. A value of 0 disables slow-mode. The maximum value possible is 21600. - -```python title="Editing a Thread" -thread = bot.get_channel(id) -await thread.edit( - name="New Name", - archived=True, - locked=True, - slowmode_delay=10, - auto_archive_duration=60, -) -``` - -As you can see, threads are very simple. Once you learn how to use them, it's easy to create whatever you want. - -## FAQ - -### Why am I getting a `Forbidden` error when I try to create a thread? - -A `Forbidden` error occurs when the bot does not have the correct permissions to create threads. - -### Why am I getting an Unknown Message error when I try to create a thread? - -Getting an error looking something like `discord.ext.commands.errors.CommandInvokeError: Command -raised an exception: HTTPException: 400 Bad Request (error code: 10008): Unknown Message`? - -There could be multiple reasons, some of them being: - -- The message does not exist -- The message already has a thread -- The message is in channel x, you are trying to start a thread in channel y. -- The message was deleted. - -:::info Related Topics - -<>{/* I can't think of any related topics for this at the moment. */} - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/voice/_category_.json b/i18n/ja/docusaurus-plugin-content-docs/current/voice/_category_.json deleted file mode 100644 index 8baf3da8..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/voice/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 6, - "label": "Voice" -} \ No newline at end of file diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/voice/index.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/voice/index.mdx deleted file mode 100644 index 835838c6..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/voice/index.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Voice ---- - -Welcome to the guide for voice features in Pycord. - -:::caution -This guide requires previous experience with Pycord and Python. -::: - -## Requirements - -The only requirement which is required for voice features is [`PyNaCl`](https://pypi.org/project/PyNaCl/). -The following features are optional: - -:::tip -Opus is also a required library, but this comes with Pycord. -Some hosts may not come with it, though, so remember to always check if required dependencies are installed. -::: - -- [`FFmpeg`](https://ffmpeg.org) - used for sending/receiving files other than `.pcm` and `.wav` -- [`Pycord.Wavelink`](https://github.com/Pycord-Development/Pycord.Wavelink), - [`Lavalink.py`](https://github.com/Devoxin/Lavalink.py), - [`Wavelink`](https://github.com/PythonistaGuild/Wavelink) or any other Python LavaLink library for music playback. diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/voice/playing.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/voice/playing.mdx deleted file mode 100644 index 7a58baee..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/voice/playing.mdx +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Wavelink Audio Player ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { - defaultOptions, -} from "@site/src/components/DiscordComponent"; - -# About - -Pycord and Wavelink try to keep the playing of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio playing feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/). - -## Starting out - -First you need to run a [Lavalink Server](https://github.com/freyacodes/Lavalink) to connect with. -There a multiple documentations to do this, so we are not covering that here. - -You also need to install the [wavelink](https://github.com/PythonistaGuild/Wavelink) library. - -```py title="Installing wavelink" -python3 -m pip install wavelink -``` - -You will now want to connect to your server via a node. - -```py title="Connect Node with Lavalink" -import discord -import wavelink - -bot = discord.Bot() - -async def connect_nodes(): - """Connect to our Lavalink nodes.""" - await bot.wait_until_ready() # wait until the bot is ready - - nodes = [ - wavelink.Node( - identifier="Node1", # This identifier must be unique for all the nodes you are going to use - uri="http://0.0.0.0:443", # Protocol (http/s) is required, port must be 443 as it is the one lavalink uses - password="youshallnotpass" - ) - ] - - await wavelink.Pool.connect(nodes=nodes, client=bot) # Connect our nodes -``` - -
- -Now you are finished making your node! Next, you will want to: - -1. Making a play command -2. Adding connect events - -### Making a play command - -To make a play command, you will need to make a function to connect and play audio in a voice channel. - -```py title="Play Command Example" -import typing - -@bot.slash_command(name="play") -async def play(ctx, search: str): - # First we may define our voice client, - # for this, we are going to use typing.cast() - # function just for the type checker know that - # `ctx.voice_client` is going to be from type - # `wavelink.Player` - vc = typing.cast(wavelink.Player, ctx.voice_client) - - if not vc: # We firstly check if there is a voice client - vc = await ctx.author.voice.channel.connect(cls=wavelink.Player) # If there isn't, we connect it to the channel - - # Now we are going to check if the invoker of the command - # is in the same voice channel than the voice client, when defined. - # If not, we return an error message. - if ctx.author.voice.channel.id != vc.channel.id: - return await ctx.respond("You must be in the same voice channel as the bot.") - - # Now we search for the song. You can optionally - # pass the "source" keyword, of type "wavelink.TrackSource" - song = await wavelink.Playable.search(search) - - if not song: # In case the song is not found - return await ctx.respond("No song found.") # we return an error message - - await vc.play(song) # Else, we play it - await ctx.respond(f"Now playing: `{song.title}`") # and return a success message -``` - - - -
- - play - -
- Now playing: Never Gonna Give You Up -
-
- -
- -Now that you've done this, the only thing left to do is make your connect events. - -### Adding connect events - -The final step to this guide is connecting the node to your server when the bot goes online. - -To make it, you will want to do the following: - -```py title="Adding connect events" -@bot.event -async def on_ready(): - await connect_nodes() # connect to the server - -@bot.event -async def on_wavelink_node_ready(payload: wavelink.NodeReadyEventPayload): - # Everytime a node is successfully connected, we - # will print a message letting it know. - print(f"Node with ID {payload.session_id} has connected") - print(f"Resumed session: {payload.resumed}") - -bot.run("token") -``` - -Congratulations! You have now implemented voice playing into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/voice/receiving.mdx b/i18n/ja/docusaurus-plugin-content-docs/current/voice/receiving.mdx deleted file mode 100644 index 70f91507..00000000 --- a/i18n/ja/docusaurus-plugin-content-docs/current/voice/receiving.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Receiving Voice Samples ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -# About - -Pycord tries to keep the recording of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio recording feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/audio_recording.py). - -## Starting out - -The first thing you want to do is make a cache of your voice connections. This is fairly easy; as -it's just putting a variable with an empty dictionary in our code, such as `connections = {}`. - -You will now want to create your command for recording. - -```py title="Record Command Example" -import discord - -bot = discord.Bot() -connections = {} - -@bot.command() -async def record(ctx): # If you're using commands.Bot, this will also work. - voice = ctx.author.voice - - if not voice: - await ctx.respond("You aren't in a voice channel!") - - vc = await voice.channel.connect() # Connect to the voice channel the author is in. - connections.update({ctx.guild.id: vc}) # Updating the cache with the guild and channel. - - vc.start_recording( - discord.sinks.WaveSink(), # The sink type to use. - once_done, # What to do once done. - ctx.channel # The channel to disconnect from. - ) - await ctx.respond("Started recording!") -``` - - - -
- - record - -
- Started recording! -
-
- -
- -Now you are finished making your command for voice receiving! Next, you will want to: - -1. Make your finished callback -2. Make a stop command - -### Making a Callback - -To make a callback, you will want to define the currently undefined `once_done` function inside -our command, like so: - -```py title="Recorder Callback" -async def once_done(sink: discord.sinks, channel: discord.TextChannel, *args): # Our voice client already passes these in. - recorded_users = [ # A list of recorded users - f"<@{user_id}>" - for user_id, audio in sink.audio_data.items() - ] - await sink.vc.disconnect() # Disconnect from the voice channel. - files = [discord.File(audio.file, f"{user_id}.{sink.encoding}") for user_id, audio in sink.audio_data.items()] # List down the files. - await channel.send(f"finished recording audio for: {', '.join(recorded_users)}.", files=files) # Send a message with the accumulated files. -``` - - - - finished recording audio for:{" "} - {defaultOptions.profiles.bob.author} - - - -
- -Now that you've done this, the only thing left to do is make your stop command. - -### Making a Stop Command - -The final step to this guide is stopping the audio recording. This is the easiest step by far. - -To make it, you will want to do the following: - -```py title="Stop Recording Command" -@bot.command() -async def stop_recording(ctx): - if ctx.guild.id in connections: # Check if the guild is in the cache. - vc = connections[ctx.guild.id] - vc.stop_recording() # Stop recording, and call the callback (once_done). - del connections[ctx.guild.id] # Remove the guild from the cache. - await ctx.delete() # And delete. - else: - await ctx.respond("I am currently not recording here.") # Respond with this if we aren't recording. - -bot.run("token") -``` - -Congratulations! You have now implemented voice recording into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/ja/docusaurus-plugin-content-pagesindex.tsx b/i18n/ja/docusaurus-plugin-content-pagesindex.tsx deleted file mode 100644 index 6ca77bb2..00000000 --- a/i18n/ja/docusaurus-plugin-content-pagesindex.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import DefaultLayout from "@site/src/layouts/DefaultLayout"; -import PYCHero from "@site/src/components/PYCHero"; -import PYCButton from "@site/src/components/PYCButton"; - -export default function Home(): JSX.Element { - return ( - - -
- Imagine a place where you can learn how to create an awesome Discord - bot, equip it with Pycord, and have it running in less than a minute. - Imagine a place where you can learn everything about Pycord. Imagine a - guide. A Pycord Guide! -

- Whether you are a newbie or an experienced developer, you will find - everything you need to know about Pycord here. This guide will teach - you: -
    -
  • How to get a brand new bot running from scratch;
  • -
  • How to create Interactions, Context Menus and Commands;
  • -
  • In-depth concepts such as Embeds, Reactions, Help Commands, Paginators, etc;
  • -
  • Popular Topics such as working with Databases, Sharding, etc;
  • -
  • Ways to handle and manage common errors and best practices for bots;
  • -
  • And Much More!
  • -
-
-
- ); -} diff --git a/i18n/ja/docusaurus-theme-classic/footer.json b/i18n/ja/docusaurus-theme-classic/footer.json deleted file mode 100644 index 82aab2e0..00000000 --- a/i18n/ja/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "copyright": { - "message": "Copyright © 2022-2026 Pycord Development, All rights reserved.", - "description": "The footer copyright" - } -} diff --git a/i18n/ja/docusaurus-theme-classic/navbar.json b/i18n/ja/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 473b847e..00000000 --- a/i18n/ja/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "title": { - "message": "Pycord Guide", - "description": "The title in the navbar" - }, - "item.label.Home": { - "message": "Home", - "description": "Navbar item with label Home" - }, - "item.label.Docs": { - "message": "Docs", - "description": "Navbar item with label Docs" - }, - "item.label.GitHub": { - "message": "GitHub", - "description": "Navbar item with label GitHub" - }, - "item.label.Source": { - "message": "Source", - "description": "Navbar item with label Source" - } -} diff --git a/i18n/ko/code.json b/i18n/ko/code.json deleted file mode 100644 index 9cce6148..00000000 --- a/i18n/ko/code.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "theme.ErrorPageContent.title": { - "message": "This page crashed.", - "description": "The title of the fallback page when the page crashed" - }, - "theme.NotFound.title": { - "message": "Page Not Found", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "We could not find what you were looking for.", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.admonition.note": { - "message": "note", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "tip", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.danger": { - "message": "danger", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "info", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.caution": { - "message": "caution", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "Scroll back to top", - "description": "The ARIA label for the back to top button" - }, - "theme.blog.archive.title": { - "message": "Archive", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "Archive", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "Blog list page navigation", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "Newer Entries", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "Older Entries", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "Blog post page navigation", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "Newer Post", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "Older Post", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.blog.post.plurals": { - "message": "One post|{count} posts", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} tagged with \"{tagName}\"", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "View All Tags", - "description": "The label of the link targeting the tag list page" - }, - "theme.colorToggle.ariaLabel": { - "message": "Switch between dark and light mode (currently {mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "dark mode", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "light mode", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "Breadcrumbs", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription": { - "message": "{count} items", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "Docs pages", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "Previous", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "Next", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "One doc tagged|{count} docs tagged", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "{nDocsTagged} with \"{tagName}\"", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versionBadge.label": { - "message": "Version: {versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "latest version", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "Edit this page", - "description": "The link label to edit the current page" - }, - "theme.common.headingLinkTitle": { - "message": "Direct link to {heading}", - "description": "Title for link to heading" - }, - "theme.lastUpdated.atDate": { - "message": " on {date}", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": " by {user}", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "Last updated{atDate}{byUser}", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "Versions", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "Tags:", - "description": "The label alongside a tag list" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "Close", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "Blog recent posts navigation", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.copied": { - "message": "Copied", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "Copy code to clipboard", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "Copy", - "description": "The copy button label on code blocks" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "Toggle word wrap", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "Toggle the collapsible sidebar category '{label}'", - "description": "The ARIA label to toggle the collapsible sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "Main", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "Languages", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "On this page", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "Read More", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "Read more about {title}", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.blog.post.readingTime.plurals": { - "message": "One min read|{readingTime} min read", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.breadcrumbs.home": { - "message": "Home page", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "Docs sidebar", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "Close navigation bar", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← Back to main menu", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "Toggle navigation bar", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.SearchBar.seeAll": { - "message": "See all {count} results" - }, - "theme.SearchPage.documentsFound.plurals": { - "message": "One document found|{count} documents found", - "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.SearchPage.existingResultsTitle": { - "message": "Search results for \"{query}\"", - "description": "The search page title for non-empty query" - }, - "theme.SearchPage.emptyResultsTitle": { - "message": "Search the documentation", - "description": "The search page title for empty query" - }, - "theme.SearchPage.inputPlaceholder": { - "message": "Type your search here", - "description": "The placeholder for search page input" - }, - "theme.SearchPage.inputLabel": { - "message": "Search", - "description": "The ARIA label for search page input" - }, - "theme.SearchPage.algoliaLabel": { - "message": "Search by Algolia", - "description": "The ARIA label for Algolia mention" - }, - "theme.SearchPage.noResultsText": { - "message": "No results were found", - "description": "The paragraph for empty search result" - }, - "theme.SearchPage.fetchingNewResults": { - "message": "Fetching new results...", - "description": "The paragraph for fetching new search results" - }, - "theme.SearchBar.label": { - "message": "Search", - "description": "The ARIA label and placeholder for search button" - }, - "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "Clear the query", - "description": "The label and ARIA label for search box reset button" - }, - "theme.SearchModal.searchBox.cancelButtonText": { - "message": "Cancel", - "description": "The label and ARIA label for search box cancel button" - }, - "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "Recent", - "description": "The title for recent searches" - }, - "theme.SearchModal.startScreen.noRecentSearchesText": { - "message": "No recent searches", - "description": "The text when no recent searches" - }, - "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { - "message": "Save this search", - "description": "The label for save recent search button" - }, - "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "Remove this search from history", - "description": "The label for remove recent search button" - }, - "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "Favorite", - "description": "The title for favorite searches" - }, - "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "Remove this search from favorites", - "description": "The label for remove favorite search button" - }, - "theme.SearchModal.errorScreen.titleText": { - "message": "Unable to fetch results", - "description": "The title for error screen of search modal" - }, - "theme.SearchModal.errorScreen.helpText": { - "message": "You might want to check your network connection.", - "description": "The help text for error screen of search modal" - }, - "theme.SearchModal.footer.selectText": { - "message": "to select", - "description": "The explanatory text of the action for the enter key" - }, - "theme.SearchModal.footer.selectKeyAriaLabel": { - "message": "Enter key", - "description": "The ARIA label for the Enter key button that makes the selection" - }, - "theme.SearchModal.footer.navigateText": { - "message": "to navigate", - "description": "The explanatory text of the action for the Arrow up and Arrow down key" - }, - "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "Arrow up", - "description": "The ARIA label for the Arrow up key button that makes the navigation" - }, - "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "Arrow down", - "description": "The ARIA label for the Arrow down key button that makes the navigation" - }, - "theme.SearchModal.footer.closeText": { - "message": "to close", - "description": "The explanatory text of the action for Escape key" - }, - "theme.SearchModal.footer.closeKeyAriaLabel": { - "message": "Escape key", - "description": "The ARIA label for the Escape key button that close the modal" - }, - "theme.SearchModal.footer.searchByText": { - "message": "Search by", - "description": "The text explain that the search is making by Algolia" - }, - "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "No results for", - "description": "The text explains that there are no results for the following search" - }, - "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "Try searching for", - "description": "The text for the suggested query when no results are found for the following search" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "Believe this query should return results?", - "description": "The text for the question where the user thinks there are missing results" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "Let us know.", - "description": "The text for the link to report missing results" - }, - "theme.SearchModal.placeholder": { - "message": "Search docs", - "description": "The placeholder of the input of the DocSearch pop-up modal" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "Try again", - "description": "The label of the button to try again rendering when the React error boundary captures an error" - }, - "theme.common.skipToMainContent": { - "message": "Skip to main content", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "Tags", - "description": "The title of the tag list page" - } -} diff --git a/i18n/ko/docusaurus-plugin-content-blog/options.json b/i18n/ko/docusaurus-plugin-content-blog/options.json deleted file mode 100644 index 9239ff70..00000000 --- a/i18n/ko/docusaurus-plugin-content-blog/options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": { - "message": "Blog", - "description": "The title for the blog used in SEO" - }, - "description": { - "message": "Blog", - "description": "The description for the blog used in SEO" - }, - "sidebar.title": { - "message": "Recent posts", - "description": "The label for the left sidebar" - } -} diff --git a/i18n/ko/docusaurus-plugin-content-docs/current.json b/i18n/ko/docusaurus-plugin-content-docs/current.json deleted file mode 100644 index 36b4849a..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.defaultSidebar.category.Getting Started": { - "message": "Getting Started", - "description": "The label for category Getting Started in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Interactions": { - "message": "Interactions", - "description": "The label for category Interactions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Application Commands": { - "message": "Application Commands", - "description": "The label for category Application Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.UI Components": { - "message": "UI Components", - "description": "The label for category UI Components in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Extensions": { - "message": "Extensions", - "description": "The label for category Extensions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Commands": { - "message": "Commands", - "description": "The label for category Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Pages": { - "message": "Pages", - "description": "The label for category Pages in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Voice": { - "message": "Voice", - "description": "The label for category Voice in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Popular Topics": { - "message": "Popular Topics", - "description": "The label for category Popular Topics in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar defaultSidebar" - } -} diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png b/i18n/ko/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png deleted file mode 100644 index 7480e1da90a413f8dfe8e13b66a9a2a8c5dc2bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40520 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 CfS#QI diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg b/i18n/ko/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg deleted file mode 100644 index ce6b5110ab3b4285f55402fb88c1b8a8f6ba9900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78518 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 diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png b/i18n/ko/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png deleted file mode 100644 index 32a47d0424f1ab420ca363682a12460aff040c91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39618 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 aeS&BlM7jQ%=K2BnBlKRJKmVP^m;VLX8_o0p diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/_category_.json b/i18n/ko/docusaurus-plugin-content-docs/current/extensions/_category_.json deleted file mode 100644 index 309b494a..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 5, - "label": "Extensions", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json b/i18n/ko/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json deleted file mode 100644 index 652aa4ee..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Bridge" -} \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx deleted file mode 100644 index 451775d3..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Bridge ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -## Concept - -Let's say that you want to make a command that is both a Slash Command and a Prefixed Command. Now, you could just copy and paste the code from the first command callback to the other and make some adjustments, but that's not very efficient. - -This is where the `ext.bridge` module comes in. It allows you to use one callback to make both a Slash Command and a Prefixed Command. - -### Example Usage - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def hello(ctx): - await ctx.respond("Hello!") - -bot.run("TOKEN") -``` - - - -

- - hello - -
- Hello! - - - - !hello - - - -
- - !hello - -
- Hello! -
- - -## Syntax - -First, instead of using `discord.Bot` or `commands.Bot`, we use `bridge.Bot`. `bridge.Bot` does inherit from `commands.Bot`, so you can do anything with `bridge.Bot` that `commands.Bot` can do. -Then, we define a command with `@bot.bridge_command()`. This makes a Bridge Command, which has both a Prefixed Command counterpart and a Slash Command counterpart. -Next, the callback has access to a `ctx` object, which is the context of the command. This context is either of `BridgeApplicationContext` type or `BridgeExtContext`. Because of that, it makes detecting how the function was called easier. - -### Using Bridge Commands in a Cog - -Like Slash Commands and Prefixed Commands, you can use Bridge Commands in a Cog. You can do this by using the `bridge_command` decorator. Here's an example: - -```python -import discord -from discord.ext import bridge, commands - -class Greetings(commands.Cog): - def __init__(self, bot): - self.bot = bot - - @bridge.bridge_command() - async def hello(self, ctx): - await ctx.respond("Hello!") - - @bridge.bridge_command() - async def bye(self, ctx): - await ctx.respond("Bye!") - -def setup(bot): - bot.add_cog(Greetings(bot)) -``` - -The cog will automatically split the Bridge Command into their Slash Command and Prefixed Command counterparts. - - - -
- - hello - -
- Hello! -
- - - !hello - - - -
- - !hello - -
- Hello! -
- - -
- - bye - -
- Bye! -
- - - !bye - - - -
- - !bye - -
- Bye! -
-
- -### Deferring - -You can defer if you want to communicate to the user that your bot is busy processing the command. This is done by using `ctx.defer()`. For the Slash Command implementation, `ctx.defer()` calls the function that gives out a "Bot is thinking" message. For the Prefixed Command implementation, `ctx.defer()` enables the typing indicator. - - - -### Options - -Options are pretty straightforward. You just specify them like you do with prefixed commands, and you're all set! - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def sum(ctx, a: int, b: int): - await ctx.respond(a + b) - -bot.run("TOKEN") -``` - - - -
- - sum - -
- 4 -
- - - !sum 2 2 - - - -
- - !sum 2 2 - -
- 4 -
-
diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json b/i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json deleted file mode 100644 index 63f8e08e..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx deleted file mode 100644 index bf345c07..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Command Groups ---- - -Command groups are a way to create subcommands for your commands. For example, `!afk set` or `!afk -remove`. - -## Syntax - -Creating a command group is very simple. - -```python title="Command Groups Example" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!') - -@bot.group() -async def afk(): - pass - -@afk.command() -async def set(): - ... - -@afk.command() -async def remove(): - ... - -# Another command group - -@bot.group(invoke_without_command=True) # Indicates if the group callback should begin parsing and invocation only if no subcommand was found. -async def math(ctx): - await ctx.send('Subcommand not found') - -@math.command() -async def add(ctx, a: int, b: int): - ... - -@math.command() -async def subtract(ctx, a: int, b: int): - ... -``` - -To create a command group, the command's decorator must be `@bot.group`. Once you have a command with -that decorator, you can use `@function.command()`, such as `@math.command()`. Now, you have subcommand -groups! - - - -:::info Related Topics - -- [Prefixed Commands](./prefixed-commands.mdx) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx deleted file mode 100644 index e84fd42d..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx +++ /dev/null @@ -1,481 +0,0 @@ ---- -title: Help Command ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Pycord's `commands` extension comes with a built-in help command. In this guide, we will take a look at them as well as learn how to create your own. Let's dive in! - -:::note - -This guide demonstrates using object-oriented programming and subclassing to make a help command for your -Pycord bot. It is important to understand these two concepts before continuing. - -**Learning Resources**: - -- [W3Schools - Python Subclassing](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools - Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -::: - -## The Wrong Way - -A popular way to create a help command is to disable the built-in help command and create your own. This is not recommended as it will lead to a lot of confusion. - -```python title="The Wrong Way" -bot = commands.Bot(command_prefix='!', help_command=None) -# OR -bot.help_command = None -# OR -bot.remove_command("help") - -@bot.command() -async def help(ctx, *, argument=None): - ... -``` - -While it's possible to create a help command this way, doing so does not utilize the full capabilities -of making one with Pycord. Making a help command with subclassing and OOP will save time and effort. - -## Types of Help Commands - -There are two types of built-in help commands: - -- [`DefaultHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.DefaultHelpCommand) -- [`MinimalHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.MinimalHelpCommand) - -`DefaultHelpCommand` is the command enabled by default. It isn't the best looking, but `MinimalHelpCommand` can help make it look a bit better. - - - - -```python title="Default Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.DefaultHelpCommand()) # help_command is DefaultHelpCommand by default so it isn't necessary to enable it like this -# We enable it here for the sake of understanding - -... - -bot.run("token") -``` - - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- - -```python title="Minimal Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.MinimalHelpCommand()) - -... - -bot.run("token") -``` - - - - !help - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
- -
- -
- -## Updating Built-in Help Commands - -Let's try to make the `MinimalHelpCommand` look better. We can do this by putting its content in an -embed. - -```python title="Minimal Help Command Example" -bot = commands.Bot(command_prefix='!') - - -class MyNewHelp(commands.MinimalHelpCommand): - async def send_pages(self): - destination = self.get_destination() - for page in self.paginator.pages: - emby = discord.Embed(description=page) - await destination.send(embed=emby) - -bot.help_command = MyNewHelp() -``` - -Let's go through the code. - -First, we create a new class called `MyNewHelp`. This class is a subclass of `MinimalHelpCommand`. - -Next, we override the `send_pages` method. This method is responsible for sending the help command to -the user. We override this method because we don't want to change the content of the pages, just how -they are sent. - -We use the `get_destination` method to get the destination of the message. This is the channel or use that the help -command is to be sent to. - -We use the `paginator.pages` property to get the different pages of the help command. We put the page -in an embed, and then send the embed to the destination channel. - -Finally, we set this as our new help command using `bot.help_command = MyNewHelp()`. - - - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a - category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
-
- -## Creating Your Help Command - -Not satisfied with the built-in help commands? You can create your own! - -For this, we will subclass the `HelpCommand` class. - -There are 4 methods that we need to override: - -- `HelpCommand.send_bot_help(mapping)` that gets called with `help` -- `HelpCommand.send_command_help(command)` that gets called with `help ` -- `HelpCommand.send_group_help(group)` that gets called with `help ` -- `HelpCommand.send_cog_help(cog)` that gets called with `help ` - -### Bot Help - -```python title="Bot Help Example" -class MyHelp(commands.HelpCommand): - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help") - for cog, commands in mapping.items(): - command_signatures = [self.get_command_signature(c) for c in commands] - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's go through the code. - -- First, we create a new class called `MyHelp`. This class is a subclass of `HelpCommand`. - -- Next, we override the `send_bot_help` method. This method is responsible for sending the main help - command to the user. - -- We create an embed with the title "Help". - -- We iterate through `mapping.items()`, which returns a list of tuples, the first element being the - cog and the second element being a list of commands. - -- By using `self.get_command_signature(c)` we get the signature of the command, also known as the - `parameters` or `arguments`. - -- There is a chance that the cog is empty, so we use `if command_signatures:`. - -- We get the name of the cog using `getattr(cog, "qualified_name", "No Category")`. This calls the - cog's attribute `qualified_name` which returns "No Category" if the cog has no name. - -- We add a field to the embed with the name of the cog and the value of the command signatures. - -- Finally, we send the embed to the channel. - -Let's improve the code a little. - -```python title="Improved Bot Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - command_signatures = [self.get_command_signature(c) for c in filtered] - - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Now the help command won't show commands that the user can't use, as well as aliases for commands. -Let's get the help command to show command aliases. - -### Command Help - -This function is called when the user uses `help `. - -```python title="Command Help Example" -class MyHelp(commands.HelpCommand): - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command), color=discord.Color.random()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's quickly go through the code we haven't discussed yet. - -- In line 3, we create an embed with a title the signature of the command (so that the title of the - embed looks like ` [parameter]`), and a random color. - -- In lines 4 and 5, we get the command's `help` description and add it to the embed. The help description - of a command can be specified in the docstrings of a command function. For example: - - ```` - ```python - @bot.command() - async def ping(ctx): - """Returns the latency of the bot.""" - await ctx.send(f"Pong! {round(bot.latency * 1000)}ms") - ``` - ```` - -- Line 6 is shorthand for - - ```python - alias = command.aliases - if alias: - ... - - # is the same as - - if alias := command.aliases: - ... - ``` - - A very helpful (but not well-known) Python shorthand! - -- In line 7, we get the aliases of the command and add them to the embed. - -### Cog Help - -This is pretty easy! - -```python title="Custom Cog Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_cog_help(self, cog): - embed = discord.Embed(title=cog.qualified_name or "No Category", description=cog.description, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(cog.get_commands()): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Once again, we create an embed, get the commands that the user can use, and add them to the embed. - -### Group Help - -Similar to the cog help, this is pretty easy! - -```python title = "Custom Group Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_group_help(self, group): - embed = discord.Embed(title=self.get_command_signature(group), description=group.help, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(group.commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Add all of these methods together, and you have a fully functioning help command! - -
-Click to see the final code for this section -
- -:::note - -The following code has been slightly edited from the tutorial version. - -::: - -```python title="Custom Help Command Example" -class SupremeHelpCommand(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - if command_signatures := [ - self.get_command_signature(c) for c in filtered - ]: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command) , color=discord.Color.blurple()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_help_embed(self, title, description, commands): # a helper function to add commands to an embed - embed = discord.Embed(title=title, description=description or "No help found...") - - if filtered_commands := await self.filter_commands(commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No help found...") - - await self.get_destination().send(embed=embed) - - async def send_group_help(self, group): - title = self.get_command_signature(group) - await self.send_help_embed(title, group.help, group.commands) - - async def send_cog_help(self, cog): - title = cog.qualified_name or "No" - await self.send_help_embed(f'{title} Category', cog.description, cog.get_commands()) - -bot.help_command = SupremeHelpCommand() -``` - -
-
- -## Command Attributes - -How can you add cooldowns, set aliases, and change the name of help commands? Command attributes can -help you do all of that, and more! - -```python title="Help Command Attributes" -attributes = { - 'name': "help", - 'aliases': ["helpme"], - 'cooldown': commands.CooldownMapping.from_cooldown(3, 5, commands.BucketType.user), -} - -# You need to use CooldownMapping.from_cooldown(rate, per, type) - -bot.help_command = MyHelp(command_attrs=attributes) -``` - -## Error Handling - -When a user attempts to use a command that does not exist, we need to inform the user. -We can do this by overriding the `send_error_message` function. - -```python title="Custom Help Error Example" -class MyHelp(commands.HelpCommand): - async def send_error_message(self, error): - embed = discord.Embed(title="Error", description=error, color=discord.Color.red()) - channel = self.get_destination() - - await channel.send(embed=embed) -``` - - - - !help update_pycord - - - - Command 'update_pycord' not found. - - - - -## Credits - -Most of the content from this guide is from -[InterStella0's walkthrough guide on subclassing HelpCommand](https://gist.github.com/InterStella0/b78488fb28cadf279dfd3164b9f0cf96). -Thanks to InterStella0 for making this guide amazing. - -:::info Related Topics - -- [Subclassing Bots](../../Popular-Topics/subclassing-bots) -- [Prefixed Commands](./prefixed-commands) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx deleted file mode 100644 index 87bef7ac..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx +++ /dev/null @@ -1,324 +0,0 @@ ---- -title: Prefixed Commands -description: Learn how to use the commands extension for Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Before Discord added slash commands, all bots had prefixed commands. A user would type the bot's prefix -followed by a word or phrase to invoke a command, such as `?help` or `!help`. -However, this prefixed commands system isn't native to Discord! Developers made use of an `on_message` -event to check if the message began with a certain character, then invoke the command. Every time a -message was sent, the bot would see the message and check for its "prefix" - -The syntax becomes a little more complicated when you want to have multiple commands. There are several -disadvantages to this system. This is where the commands extension comes in. `ext.commands` has -various advantages, such as: - -- Simpler syntax -- Easier to use -- Easier to parse user input -- Comes with built-in help commands -- Comes with a built-in system for categorizing commands - - - - -```python title="Prefixed Commands with Events" -import discord - -client = discord.Client() - -@client.event -async def on_message(message): - if message.content.startswith("!ping"): - await message.channel.send("Pong!") - - elif message.content.startswith("!announce"): - if len(message.content.split(" ")) < 3: - await message.channel.send("You need to specify a title and a message. Correct usage: `!announce Hello Hello everyone!`") - return - - msg = message.content.split(" ", 2) - title = msg[1] - content = msg[2] - - await message.channel.send("**{}**\n{}".format(title, content)) - - elif message.content.startswith("!"): - await message.channel.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !help - - - Unknown Command. - -
- -
- - -```python title="The Commands Extension" -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix="!", intents=intents) - -@bot.command() -async def ping(ctx): - await ctx.send("Pong!") - -@bot.command() -async def announce(ctx, title, *, message): - await ctx.send("**{}**\n{}".format(title, message)) - -@bot.event -async def on_command_error(ctx, error): - if isinstance(error, commands.CommandNotFound): - await ctx.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !pycord - - - Unknown command. - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
- !announce -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The commands extension has many more uses. This example only showcases the basic features mentioned -in the previous example. Other things you can do with the commands extension include using a different -built-in help command and creating your own. The following tutorials showcase these. - -::: - -
-
- -## Syntax - -Before we check out the syntax, let's take a look at the bot classes. - -> `discord.Client` - Contains only events. -> -> `discord.Bot` - Subclasses `discord.Client`, adds commands. -> -> `discord.ext.commands.Bot` - Subclasses `discord.Bot`, adds prefixed commands, cogs, and more. - -This means that `discord.ext.commands.Bot` has both slash commands and prefixed commands, as well as -events, cogs and more. - -Now let's look at the syntax. - -```python title="A Simple Prefixed Bot" -import discord -from discord.ext import commands # Import the commands extension -# discord.ext.commands are not the same as discord.commands! - -intents = discord.Intents.default() #Defining intents -intents.message_content = True # Adding the message_content intent so that the bot can read user messages - -bot = commands.Bot(command_prefix="!", intents=intents) # You can change the command prefix to whatever you want. - -@bot.command() # This is the decorator we use to create a prefixed command. -async def ping(ctx): # This is the function we will use to create the command. - await ctx.send("Pong!") # This is the response the bot will send. - - -bot.run("token") # Run the bot with your token. -``` - - - - !ping - - - Pong! - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The help command is a built-in command and is enabled by default. You will learn more about it in the -following guides. - -::: - -## Parameters - -Prefixed commands can take parameters, just like slash commands. You can specify the parameters in -the function itself. - -```python title="Parameters Example 1" -@bot.command() -async def echo(ctx, *, message): - await ctx.send(message) -``` - -`ctx` is the context of the message. `*` means that the parameter can be any number of words. `message` -is the parameter. If you had not passed `*`, `message` would only have been one word. - -For example, if a user had used `!echo hello world`, `message` would have been `hello`. Since we -passed `*`, `message` is `hello world`, or the rest of the message. - -We can pass multiple parameters too! - -```python title="Parameters Example 2" -@bot.command() -async def echo(ctx, channel:discord.TextChannel, title, *, message): - await channel.send("**{}**\n{}".format(title, message)) -``` - -In the example above, `channel` is a parameter that is of type `discord.TextChannel`. When you -specify the type of the parameter, Pycord will automatically try to convert the parameter to that type. -That is why you can use `channel.send` directly without needing to convert it first. - -We also have a new parameter, `title`. This does not have a type, so it will be a string. `*` means -that the rest of the message belongs to the next parameter, in this case, `message`. - -When a user types `!echo #general Greetings! Hello World!`, `channel` will be the text channel -`#general`, `title` will be `Greetings!` and `message` will be `Hello World!`. - -Let's take an example where the user passes `!echo #general Holiday Greetings! Greetings to you all!`. -Here, the user wants the title to be "Holiday Greetings!" and the message to be "Greetings to you all!". -However, since Pycord parses the message at whitespaces, the title will end up being "Holiday" and the -message "Greetings! Greetings to you all!". The user can prevent this by typing `!echo "Holiday -Greetings!" Greetings to you all!`. - - - - - - !echo #general Holiday Greetings! Greetings to you all! - - - Holiday -
- Greetings! Greetings to you all! -
- - !echo #general "Holiday Greetings!" Greetings to you all! - - - Holiday Greetings! -
- Greetings to you all! -
-
- -Let's check out another example for parameters and parameter types. - -```python title="Parameters Example 3" -import random - -@bot.command() -async def gtn(ctx, guess:int): - number = random.randint(1, 10) - if guess == number: - await ctx.send("You guessed it!") - else: - await ctx.send("Nope! Better luck next time :)") -``` - -If you had not specified the type of the parameter, it would have been a string. And since `"5"` is not -the same as `5` in python, the bot would have responded with "Nope! Better luck next time :)". -Even if you do not specify the type of the parameter, you can still convert it later on, in this case, -with `int(guess)`. - -:::info Related Topics - -- [Command Groups](groups) -- [Rules and Common Practices](../../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json b/i18n/ko/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json deleted file mode 100644 index baeba701..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Pages", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx deleted file mode 100644 index be90b035..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Paginator Basics ---- - -# Paginator Basics - -## [Page](https://docs.pycord.dev/en/stable/ext/pages/index.html#page) - -This class contains two attributes: `content` and `embeds`, which correspond to the attributes of the same name on the -`discord.Message` class. -To create a new Page, use the following syntax: - -```py -import discord -page = Page(content="My Page Content", embeds=[discord.Embed(title="My First Embed Title")]) -``` - -## [PageGroup](https://docs.pycord.dev/en/stable/ext/pages/index.html#pagegroup) - -This class represents a group of pages. It uses most of the same parameters as `Paginator`, which allows each -`PageGroup` to effectively have its own settings and behaviours. - -## [Paginator](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator) - -This is the main class for `ext.pages`, and is used to control most of the functionality of the extension. - -In its most basic form, with no arguments provided (default values listed below), a paginator can be created like so: - -```py title="Paginator Example" -import discord -from discord.ext.pages import Paginator, Page - -my_pages = [ - Page( - content="This is my first page. It has a list of embeds and message content.", - embeds=[ - discord.Embed(title="My First Embed Title"), - discord.Embed(title="My Second Embed Title"), - ], - ), - Page( - content="This is my second page. It only has message content.", - ), - Page( - embeds=[ - discord.Embed( - title="This is my third page.", - description="It has no message content, and one embed.", - ) - ], - ), -] -paginator = Paginator(pages=my_pages) -``` - -The only required parameter for `Paginator` is the `pages` parameter, which is usually a list of `Page` objects. - -You can also pass in a list of `PageGroup` objects, a list of strings, a list of embeds, or a list of lists of embeds. - -Once the `Paginator` instance is created, you can call either -[`Paginator.send()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.send) -or [`Paginator.respond()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.respond) -to send a message or response with the paginator's contents. - -#### Depending on what's being passed to the `pages` parameter, the behaviour of the paginator may differ: - -- Passing a list of `PageGroup` objects will essentially treat each `PageGroup` as its own Paginator, with most - `Paginator` attributes able to be set independently for each `PageGroup`. - \- Each `PageGroup` accepts its own `pages` parameter, which inherits the same behaviour as the `pages` parameter - of `Paginator`, except it cannot contain other `PageGroup` objects. -- If a page is a `Page` object, this will allow you to specify both the `discord.Message.content` and - `discord.Message.embeds` attributes for a page. - \- **This is the preferred method of defining a page.** -- If a page is a string, this will be used for the `discord.Message.content` attribute. This type of page cannot have - any embeds. -- If a page is a list of embeds, this will be used for the `discord.Message.embeds` attribute. This type of page - cannot have any message content. -- If a page is a list of lists of embeds, each parent list item will create a page containing all embeds from its - child list. This type of page cannot have any message content. - -#### Parameters for the `Paginator` class which have default values: - -- `show_disabled` **:** `True` - - Show buttons that are disabled (i.e. can't be clicked) -- `author_check` **:** `True` - - Only the author can interact with the paginator. -- `timeout` **:** `180` _(seconds)_ - - The paginator will time out and become inactive after this many seconds. -- `disable_on_timeout` **:** `True` - - If the paginator times out, it will be automatically disabled and all buttons will be unusable. -- `use_default_buttons` **:** `True` - - Use the default set of 4 buttons and a page indicator. -- `show_indicator` **:** `True` - - When using the default buttons, shows a middle 5th button with the current/total page numbers. - -**For other parameters that can be set on initialization, please check the -[API Reference](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator)** - -## [PaginatorButton](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatorbutton) - -This class represents a button used to navigate between the pages of a paginator. It's also used to create the page -indicator. - -When creating your own custom buttons, you can either use this class directly or subclass it to add any additional -functionality you may need. - -To add custom buttons to the paginator instead of the default navigation buttons, you have two options to do so: - -1. **Using the `custom_buttons` parameter of `Paginator`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - buttons = [ - PaginatorButton("first", label="<<-", style=discord.ButtonStyle.green), - PaginatorButton("prev", label="<-", style=discord.ButtonStyle.green), - PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True), - PaginatorButton("next", label="->", style=discord.ButtonStyle.green), - PaginatorButton("last", label="->>", style=discord.ButtonStyle.green), - ] - paginator = Paginator( - pages=["Page 1", "Page 2", "Page 3"], - show_indicator=True, - use_default_buttons=False, - custom_buttons=buttons, - ) - ``` -2. **Using `Paginator.add_button()`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"], use_default_buttons=False) - paginator.add_button(PaginatorButton("prev", label="<", style=discord.ButtonStyle.green)) - paginator.add_button(PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True)) - paginator.add_button(PaginatorButton("next", label=">", style=discord.ButtonStyle.green)) - ``` - -If you want to use the default navigation buttons, but not all of them, you can also use `Paginator.remove_button()` to -selectively remove them: - -```py -from discord.ext.pages import Paginator - -paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"]) -paginator.remove_button("first") -paginator.remove_button("last") -``` - -## [PaginatorMenu](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatormenu) - -This class represents the `discord.Select` menu used to navigate between `PageGroup` instances. In most situations, you -will not need to interact with this class directly. - -If you do subclass it, you'll likely want to call `super()` in your `__init__` method to ensure that the `PageGroup` -navigation functionality is retained. - -## Usage Examples - -For a comprehensive list of examples showing all `Paginator` functionality, please see the -[example in cog form](https://github.com/Pycord-Development/pycord/blob/master/examples/views/paginator.py) in the repo. - -## Support and Feedback - -If you have any questions, suggestions, or feedback for `ext.pages`, please join the -[Discord server](https://discord.gg/pycord). diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx deleted file mode 100644 index b8d68925..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Paginator FAQ ---- - -# Paginator FAQ - -- **What's the difference between `Paginator.send()` and `Paginator.respond()`?** - - `Paginator.send()` is used to send a channel message (DMChannel or TextChannel) with the paginator. - - `Paginator.respond()` is used to send an interaction response (or followup) message with the paginator. - -- **How can the bot send a paginator to a different destination than where it was invoked?** - - Use the `target` parameter in `Paginator.send()` or `Paginator.respond()`. - - You can also set the `target_message` parameter to control what's shown as a response where the paginator was originally invoked. - - For `Paginator.respond()`, this parameter is required if `target` is set, as an interaction requires being responded to. - -- **How can I change the paginator's behavior without re-creating and re-sending it?** - - Use the `Paginator.update()` method. - -- **How can I make the bot actually do something with the contents of a page?** - - Use the (upcoming) `Paginator.page_action()` method. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json b/i18n/ko/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json deleted file mode 100644 index 36dfb009..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Tasks" -} \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx deleted file mode 100644 index 848f6066..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Tasks ---- - -## Concept - -So you want to run a background task running at some specified interval? Thankfully, that's a common thing to do, whether you're working with some API or handling some background logic don't worry, the Pycord tasks extension is here to make life easier for you! - -With the tasks extension, you can make background tasks without worrying about the asyncio hell and mind bogglers like "what if my internet dies" and "how do I handle reconnecting" with the added benefit of a lot of useful additions that are one line of code away! - -### Example Usage - -```py -import discord -from discord.ext import tasks - -bot = discord.Bot() - -@bot.event -async def on_ready(): - very_useful_task.start() - -@tasks.loop(seconds=5) -async def very_useful_task(): - print('doing very useful stuff.') - -bot.run("TOKEN") -``` - -If you do run this code in your terminal you should see something like this after about 15 seconds: - -``` -doing very useful stuff. -doing very useful stuff. -doing very useful stuff. -``` - -For a more useful example here's a task in a cog context ripped straight from the [docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#recipes): - -```py -from discord.ext import tasks, commands - -class MyCog(commands.Cog): - def __init__(self): - self.index = 0 - self.printer.start() - - def cog_unload(self): - self.printer.cancel() - - @tasks.loop(seconds=5) - async def printer(self): - print(self.index) - self.index += 1 -``` - -As you'd expect this will increment a number and print it out every 5 seconds like so: - -```sh -0 -# 5 seconds later -1 -# 5 more seconds later -2 -# ... -``` - -## [Tasks](https://docs.pycord.dev/en/stable/ext/tasks/index.html) - -Now let's get into the nitty-gritty of tasks. - -As you've seen tasks can work in both outer scope and class contexts and the handle is roughly the same, you define a task using the `tasks.loop` decorator and use the `start` method to start it, the difference is you add the `self` argument when in a class context so since most people have all their bot's code in Cogs all the following code blocks will be in a Cog context to make it easy to copy it then apply whatever modifications you might need! - -### [Creating a task](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop) - -A look at `discord.ext.tasks.loop`'s definition in the documentation reveals that: - -1. As you've seen before it expects the time between each execution, that however doesn't have to be in seconds as - there are `seconds`, `minutes` and `hours` parameters to make it easier for us, they can also be floats in case you want - ultra-precision. -2. You can also pass in a `datetime.time` object or a sequence of them in the `time` parameter which will make it run - at the specified time(s). -3. You can pass in how many times a loop runs before it stops by passing in the `count` parameter, you can use `None` - to make it run forever which is also the default. -4. The loop function **_must_** be a coroutine. - -These are all really useful, and they aren't the only parameters so if you want to know more about them check out the -[docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop)! - -### Attributes - -A task has the following attributes: - -- `current_loop`: The current loop the task is on. -- `hours`, `minutes`, `seconds`: attributes that represent the time between each execution. -- `time`: A list of datetime.time objects that represent the times the task will run, returns `None` if no datetime - objects were passed. -- `next_iteration`: A `datetime.datetime` object that represents the next time the next iteration of the task will - run, can return `None` if the task stopped running. - -These attributes serve as a really powerful asset to get info about your loop. - -### Example - -Now let's create a cog that handles a leaderboard we have in our bot using Tasks then explain what we did after that and -also provide a refresher of how slash commands groups work in cogs. - -For the sake of this example let's pretend that we have a leaderboard module that does all the leaderboard handling for -us and that computing the leaderboard is very expensive computationally wise, so we want to store one version of it that -gets regularly updated instead of generating it every time someone calls the `/leaderboard view` command. - -```py -from discord.ext import tasks, commands -from discord.commands import SlashCommandGroup, CommandPermissions - -from leaderboard import * # Mock leaderboard module. - -class LeaderboardCog(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.update_leaderboard.start() - self.leaderboard_embed = generate_leaderboard_embed() - - leaderboard = SlashCommandGroup(name='leaderboard', description='Leaderboard commands.') - - @tasks.loop(minutes=10) - async def update_leaderboard(self): - print('Updating leaderboard...') - await update_leaderboard() - self.leaderboard_embed = generate_leaderboard_embed() - - @update_leaderboard.before_loop - async def before_update_leaderboard(self): - await self.bot.wait_until_ready() - print("About to start updating leaderboard.") - - @update_leaderboard.after_loop - async def after_update_leaderboard(self): - leaderboard_cleanup() - print("Stopped updating leaderboard.") - - @update_leaderboard.error - async def update_leaderboard_error(self, error): - print(f"Oh no, an error occurred while updating the leaderboard. Error: {error}") - - @leaderboard.command() - async def view(self, ctx): - await ctx.respond(embed=self.leaderboard_embed) - - @leaderboard.command() - async def update_info(self, ctx): - await ctx.respond(f"""***Leaderboard Info***\n - Last update: {(600 - self.update_leaderboard.next_iteration.timestamp())//60} minutes ago.\n - Next update: in {self.update_leaderboard.next_iteration.timestamp() // 60} minutes.\n - Time between loops: {self.update_leaderboard.minutes} minutes.\n - Times updated this session: {self.update_leaderboard.current_loop}. - Running? {self.update_leaderboard.is_running()} - Failed? {self.update_leaderboard.failed()}""", ephemeral=True) - - # Now for the owner only commands: - - leaderboard_config = SlashCommandGroup(name="leaderboard_config", description="Leaderboard configuration commands", permission=[CommandPermissions("owner", 2, True)]) - - @leaderboard_config.command() - async def set_time_between_updates(self, ctx, minutes: int): - self.update_leaderboard.change_interval(minutes=minutes) - await ctx.respond(f"Set time between updates to {minutes} minutes.") - - @leaderboard_config.command() - async def stop(self, ctx): - self.update_leaderboard.stop() - await ctx.respond("Stopped the leaderboard update.") - - @leaderboard_config.command() - async def restart(self, ctx): - self.update_leaderboard.restart() - await ctx.respond("Restarted the leaderboard update.") - -def setup(bot): - bot.add_cog(LeaderboardCog(bot)) -``` - -Phew, that was quite a bit of code. - -Now to explain what's going on: - -First things first we create a cog and in its `__init__` function we start the `update_leaderboard` task and generate -the first instance of our leaderboard's embed. - -After that, we define the `update_leaderboard` task using the `loop` decorator, and we make it run every ten minutes by -passing 10 to the `minutes` parameter. - -Then that we define the `before_update_leaderboard` task using the `before_loop` decorator, and we make it wait until the -bot is ready before starting the task. - -Next up we define the `after_update_leaderboard` task using the `after_loop` decorator, and we make it clean up the -leaderboard when the loop finally stops running. - -Then we define the `update_leaderboard_error` task using the `error` decorator, and we make it print any errors that may -occur while we update our leaderboard to the console. - -Then we get into the fun stuff, we create a slash command group using the `SlashCommandGroup` class and name it -`leaderboard`, we then create the `view` sub-command which sends the embed generated when the leaderboard is updated and -`update_info` which shows a lot of data about the task using some attributes and functions available to us. - -We also create a slash command group called `leaderboard_config` which is only available to the owner of the bot. - -Then we create the `set_time_between_updates` sub-command which takes in the time in minutes and changes the time -between updates of the leaderboard using the `change_interval` method, the `stop` sub-command which stops the task using -the `stop` method and `restart` which restarts the task using the `restart` method. - -Finally, we add the `LeaderboardCog` cog to the bot, and we're done! - -I'd highly recommend you check the tasks extension -[documentation](https://docs.pycord.dev/en/stable/ext/tasks/index.html) for more info on how to use them and what other -functions they have. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/_category_.json b/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/_category_.json deleted file mode 100644 index 9d6255f5..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 3, - "label": "Getting Started", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx deleted file mode 100644 index 7fbabf77..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: Creating Your First Bot ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -Excited to create your first bot? Once you [install Pycord](../installation.mdx), you can start right -away! - -## Creating the Bot Application - -Just like how you need to sign up to use Discord, your bot also has to be signed up. To do this, -you should: - -1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click - on . -2. Give your bot a name, and click . -3. Now, you should see a page like this. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdW3OQnwUhacopqSWw%2F-Mjd_-mxrJCrzmaXrAg8%2Fimage.png?alt=media&token=b8e2ae6c-2290-4d37-ad7c-eb412f3fb00e) -4. Click on the tab on the left side of the screen. -5. Click on . -6. You can give it a name, change the Avatar, etc. - -## Inviting the bot - -Now, lets get the bot added to some servers. Go to the tab -in the left pane and select `bot` and `applications.commands` as scopes. - -You may want your bot to have application commands, which is what the `application.commands` scope -allows your bot to make. - -Next, you want to choose what permissions the bot will have and select them. For now, you can just -give your bot the `administrator` permission, which gives your bot every permission. Once you select -your bot's permissions, click on to get the bot invite link. - -:::tip - -When your bot is all ready to go, make sure that administrator permissions aren't selected unless -your bot truly needs them. Try selecting only permissions the bot will need. For testing, -Administrator permissions are fine. - -::: - -![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-Mk6tNY3LfDkjd6pqdpL%2F-Mk6tkdpddEWoa2jczZk%2Fimage.png?alt=media&token=52c8a29f-a798-48f8-a8c7-4ecca2681f79) - -You can use this link to invite the bot. - -## Tokens - -Now that you have an account for your bot, you need to log in. To log in, we need the bot's -password. All users and bots have a "token." You may think of this token as a password, as this allows -us to log our bot into Discord. - -Tokens are "snowflakes." Not actual snowflakes, though. Just like how no two snowflakes in real life have the same -pattern, snowflakes in computers are unique things - no two bots have the same token - so a token is -considered a snowflake. A Discord user ID is also a snowflake. - -Now, lets get your bot's token. To do this, you want to: - -1. Go back to the tab. -2. Click on the button in the "Token" section. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdbU12JISJorAZxrKH%2F-MjdbpUsapzb5n15Po5P%2Fimage.png?alt=media&token=118e259f-940a-4f6c-b3a3-c29f3a54100d) - -Now, you have your bot's token copied to your clipboard. - -:::danger - -Do not, under any circumstances, give your token to anyone. Even if you are contacted by someone -claiming to be Discord staff, do not give them your bot's token. They are lying to you to try and -gain access to your bot. If an unauthorized user gains access to your bot's token, they can access -your bot and use it in malicious ways. - -Never push your token to GitHub or include it in your code. One way to prevent your token from -getting leaked is to store it in `.env` files. - -::: - -### Protecting Tokens - -#### Using dotenv - -You can store your tokens in `.env` files. This is a simple way to store sensitive information. - -1. Create a file with the name `.env` (only the extension, with a dot/period at the start and without a name before it). -2. Define the token in the `.env` file (replace the example value with your token). - ```env title=".env" - TOKEN = NzkyNzE1NDU0MTk2MDg4ODQy.X-hvzA.Ovy4MCQywSkoMRRclStW4xAYK7I - ``` -3. Install [`python-dotenv`](https://pypi.org/project/python-dotenv/). - ```bash - python -m pip install python-dotenv - ``` -4. Load the token from the `.env` file. - ```python - import dotenv - dotenv.load_dotenv() - token = str(os.getenv("TOKEN")) - ``` -5. Pass your token as parameter when running the bot. - ```python - client.run(token) - ``` - -:::tip - -If you are using Git to track your bot's changes, you should create a file called `.gitignore` and add -`.env` to it. This stops your `.env` file from getting tracked along with the rest of your code, and -will not be pushed to a remote Git repository. As a consequence, it will stay secure on your local machine. - -::: - -## Coding the Basics - -Here's an example of code you'll write with Pycord: - -```py -import discord -import os # default module -from dotenv import load_dotenv - -load_dotenv() # load all the variables from the env file -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") - -bot.run(os.getenv('TOKEN')) # run the bot with the token -``` - - - -
- - hello - -
- Hey! -
-
-
- -Let's go through the code. First, the imports. - -```py -import discord -import os -from dotenv import load_dotenv -``` - -In the first line, `import discord`, we import Pycord. Although you install Pycord with `pip install py-cord`, you -import it with `import discord`. This is so it's as easy as possible when switching from Discord.py to Pycord. - -We then import `os` and `dotenv`. `os` is a default module that we will use to get the token from the env file. `dotenv` -is a module that we will use to load the env file. You installed this with `pip install python-dotenv`. - -Next, we load the env file with `load_dotenv()`. - -```py -bot = discord.Bot() -``` - -In this line, we create a new instance of [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). -In this object, we can pass various parameters for configuration purposes, such as `owner_ids` -and [`intents`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```py -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") -``` - -We use the [`event`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) decorator to override -the [`on_ready`](https://docs.pycord.dev/en/stable/api/events.html#discord.on_ready) function to define an -event that is automatically called when the bot is ready to use. - -```py -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") -``` - -Here, we use the [`slash_command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.slash_command) -decorator to define a slash command. We specify the `name` and `description` arguments. If not -specified, the name of the slash command would be the function name and the command description would -be empty. - -Optional: We type-hint the context parameter (`ctx`) as [`discord.ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext). In modern IDEs, type-hinting allows access to autocompletion and docstrings. You can read more about type-hinting [here](https://docs.python.org/3/library/typing.html). - -Finally, you want to run the bot using the token specified in the `.env` file. - -Now you have finished creating your first Pycord bot! What we have shown you is just the basic structure -of a bot. You can do a lot more with Python and Pycord knowledge, as well as your imagination! Pycord -will not limit your bot's abilities. - -:::note - -The part where we load the token from the environmental variables is not required. You may use another way to keep your token secure, or, although not recommended, simply specify the token normally as a string, as shown below. - -
-A Basic Bot without securing the token -
- -```py -import discord - -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.send("Hey!") - -bot.run("TOKEN") -``` - -
-
- -::: - -## FAQ - -### How do I make prefixed commands? - -Prefixed commands are an older method of creating bot commands that listen for messages and replies -if the message starts with a certain character. You can read [this page](../extensions/commands/prefixed-commands.mdx) -to learn more about prefixed commands. - -### How do I setup modules/cogs? - -[Cogs](../popular-topics/cogs) are a great way to organize your commands by putting them into -groups called cogs. Cogs are separate files that your bot loads to get the commands inside. -You can read more about cogs, as well as learn how to use them and their benefits, -[here](../popular-topics/cogs). - -### How do I add components, such as buttons and dropdown menus, to my bot? - -Pycord makes it very easy to use Message Commands with your bot by using the `discord.ui` module. -To learn more, read about Message Commands in our [interactions directory](../interactions). - -:::info Related Topics - -- [Prefixed Commands](../extensions/commands/prefixed-commands) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx deleted file mode 100644 index 2a68677b..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Hosting Your Pycord Bot ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Hosting Your Pycord Bot - -If you're completely new to this, you might have thought something along the lines of "Yay! I got my -bot working," after following our [Creating your First Bot](creating-your-first-bot) guide, only -to close your IDE or shut down your computer to find your bot offline. - -The reason for this is that programs have to be hosted somewhere, meaning some machine somewhere has -to constantly run your bot. There are tons of hosting services that can help you host your bot for -little to no cost. - -## Can I get a Clear Explanation? - -Sure thing. When you run your bot, it first makes a connection to Discord's API. Once that's done, -Pycord sends "heartbeats" to Discord. "heartbeats" are small packets sent at a set interval telling -Discord that your bot is indeed still alive. If Discord doesn't receive a heartbeat after a certain -amount of time, your bot is pronounced dead and buried in the graveyard (not really). It is, though, -taken offline and its connection with Discord is terminated. - -Once you close the terminal that you've run your program on, the program is no longer running, and -the bot stops sending heartbeats and can no longer process commands. This is why you have to constantly -keep the process running. - -This goes for all programs, in a different nature. If the code isn't compiled/built/assembled/interpreted, -it can't be running. - -## What is a Host? - -A host is a server or container for running code offered by a **hosting provider.** There are a lot -of hosting providers, such as bigger ones like Amazon Web Services (AWS) and Google Cloud, and smaller -ones like GalaxyGate and DigitalOcean. - -There are three types of hosts. - - - - Shared hosting is a type of hosting where multiple people share one VPS. Getting a spot on - a shared host is usually cheap, sometimes even free. Shared hosts do not give you a lot of - resources, from less than a gigabyte of RAM (usually 512MB on free hosts) and half of a CPU - with very little storage. Shared hosting is usually used for website hosting and is not - recommended for hosting a Discord bot. - - - A virtual private server (VPS) is a virtual computer (virtual machine) that is rented out to - customers. Most people use a VPS for hosting their projects such as Discord bots. You can get - anywhere from less than a gigabyte of RAM and a less powerful CPU to just under one hundred - gigabytes of RAM, a (or multiple) powerful CPU(s), and a fair amount of storage. A VPS is the - best choice for most users and can be fairly cheap. - - - A dedicated host is a physical computer. You can buy these yourself or rent one from a hosting - provider. Dedicated hosts are often very expensive, but are also very powerful, having a - few hundred gigabytes of RAM and a few very powerful CPUs, along with a good amount of storage. - Dedicated hosts are usually used for very large projects and are overkill for something like - a Discord bot. - - -
- -:::danger - -Make sure you choose a hosting provider you trust. Also make -sure the hosting provider you're looking at has good reviews on public forums. Googling along the -lines of "[host] review" should do the trick. A provider you don't trust can compromise your token. - -::: - -Most hosting providers rent their services to you for a monthly or yearly fee. These can be anywhere -from a few dollars to hundreds or thousands of dollars. - -## How to Host Your Bot - -Once you rent or buy a VPS, you can get to work. Most hosting providers allow you to choose from a -wide range of operating systems, most allow you to choose one but some allow you to choose -multiple. Once that's ready, you have to SSH into the system. We won't get into SSH here, but you can -read [this article from DigitalOcean](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys). -You can also use VNC, which is remote desktop software. If you are using an OS that does not have a -GUI, and is only a command line (a "server" OS), such as Ubuntu Server or most Linux Server Operating Servers, you will most -likely use SSH. If you are using an OS that has a GUI, such as Windows Server, you will most likely use VNC. - -Once you've decided on your operating system, you'll want to set it up and install Python. Once that's -done, you can copy your bot's files to your remote system, install the required packages, and run -the bot. - -:::warning - -If you are using SSH to run the file, your bot will not stay running. This is because the file is -only told to run during your session. You can use a command like [nohup](https://en.wikipedia.org/wiki/Nohup) -to make sure your file stays running after you disconnect. - -::: - -Now your bot is hosted, but that doesn't mean it can't go offline. If your bot encounters an error, -it can often go offline or stop its process. For this, make sure you have proper error handling. -Also be sure to pay attention to your hosting provider's updates or news, as they usually notify -users of when they plan on doing maintenance to their servers, making their services unavailable for -a short time. - -:::info Related Topics - -- [Creating Your First Bot](creating-your-first-bot) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx deleted file mode 100644 index 32eeb744..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx +++ /dev/null @@ -1,379 +0,0 @@ ---- -title: More Features -description: More features to make your bot cool and snazzy. ---- - -import { - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, - DiscordEmbedField, - DiscordEmbedFields, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -So, you just created your first Pycord bot! Now, let's add some more features to it. This will include adding event handlers, waiting for user response, styling the messages, and more. - -## Events - -### Event Handlers - -Events in Discord are a way to listen for certain actions. For example, if you want to know when a user joins your server, so you could send a welcome message, you can use the `on_member_join` event. - -First, you need to ask Discord to send you events. This is done via "Intents". Read up the [Intents](../Popular-Topics/intents) page for more information. - -Once you understand what intents are, you can enable the events you need, or just use the default ones with `discord.Intents.all()`. - -Now that that's done, let's add an event handler for when a user joins the server. We will use the [`on_member_join` event](https://docs.pycord.dev/en/stable/api/events.html#discord.on_member_join). We will send a private message to the user welcoming them to the server. - -```python -@bot.event -async def on_member_join(member): - await member.send( - f'Welcome to the server, {member.mention}! Enjoy your stay here.' - ) -``` - -We use the [`discord.Bot.event` decorator](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) to add the event handler. - -The `on_member_join` event is called when a user joins the server. The `member` parameter is the user that joined. Different events have different names and parameters. You can find all of them [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -So, that's how you add event handlers! - -### Waiting for User Response - -Let's say you want to create a Guess-the-Number game (where the user has to guess a number between 1-10). You need to send a message to a user and wait for them to respond. You can do this with the [`wait_for`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.wait_for) method. - -```python -@bot.command() -async def gtn(ctx): - """A Slash Command to play a Guess-the-Number game.""" - - await ctx.respond('Guess a number between 1 and 10.') - guess = await bot.wait_for('message', check=lambda message: message.author == ctx.author) - - if int(guess.content) == 5: - await ctx.send('You guessed it!') - else: - await ctx.send('Nope, try again.') -``` - -`wait_for` takes one argument, which is the event type. The event type is the name of the event you want to wait for. In this case, it's `message`. It could also be `reaction` to wait for a reaction to be added. - -We pass a keyword argument to `wait_for` called `check`. The function may look complicated if you're a beginner. We pass a `lambda` function, which simplifies the code a bit. - -The lambda function takes one parameter, `message`. When Pycord receives a message, it passes it to the `check` function. If the function returns `True`, the message is returned. If the function returns `False`, the message is ignored and the bot waits for another message. - -Here, we check if the message is from the user that sent the command. We simply use `message.author == ctx.author`. This will check if the author of the message was the person who invoked the command. - -## Styling Messages - -### Embeds - -Embeds are a Discord feature that allows applications to format their messages in cool embedded format, -enabling your bot to lay out messages with a lot of text into neat fields. - - - - - The Pycord Guide is a detailed guide that explains how to use Pycord and all of its features. - - - The Getting Started section explains how you can get a brand new bot created and running from scratch. - - - Interactions with Pycord - - - Pycord's various Extensions - - - Other Popular Topics - - - We have so much more! Just explore, and you will find everything you need. If you want another page added, open an issue on the GitHub. - - - Created with 💖 by the Pycord Team & Contributors - - - - -
- -Creating embeds is simple! Just create an instance of [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) and edit it to your liking. Once you're done, send it! - -```python -import discord - -bot = discord.Bot() - -@bot.command() -async def hello(ctx): - embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from - ) - embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") - - embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) - embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) - embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) - - embed.set_footer(text="Footer! No markdown here.") # footers can have icons too - embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") - embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") - embed.set_image(url="https://example.com/link-to-my-banner.png") - - await ctx.respond("Hello! Here's a cool embed.", embed=embed) # Send the embed with some text - -bot.run("TOKEN") -``` - - - -
- hello -
- Hello! Here's a cool embed. - - Embeds are super easy, barely an inconvenience. - - - A really nice field with some information. The description as well as the fields support markdown! - - Inline Field 1 - Inline Field 2 - Inline Field 3 - - Footer! No markdown here. - -
-
- -
- -This simple command sends replies to a [slash command](../interactions/application-commands/slash-commands) with an embed. -Let's break it down: - -```py -embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), - ) -``` - -This command creates an embed. We use the [`Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) -class to create an embed object with the title "My Amazing Embed", the description "Embeds are super easy, barely an inconvenience.", and the color `blurple`, Discord's main theme color. - -[discord.Colour](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Colour) is a class full of [classmethods](https://docs.python.org/3/library/functions.html#classmethod) -that return color values. While the official, documented name of this is `discord.Colour`, `discord.Color` -works as well. - -```py -embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") -embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) -embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) -embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) -``` - -This small section shows off embed fields. You can add fields to embeds with the [`add_field` method](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.add_field) -of the [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) class. These consist of three -keyword arguments: `title`, `value`, and `inline`. `title` and `value` are both required arguments, which inline defaults to `False` if it's not defined. The `inline` argument specifies whether space will be divided among the inline fields. There could be a mix of fields where inline has different values too. - -```py -embed.set_footer(text="Footer! No markdown here.") # footers can have icons too -embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") -embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") -embed.set_image(url="https://example.com/link-to-my-banner.png") -``` - -In this section, we're adding unique items to the embed. These items are: - -- Footer - With the [`set_footer()`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_footer) - method, you can set a small footer that holds a message. This has `text` and `icon_url` kwargs. -- Author - With the [`set_author`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_author) - method, you can set an author for the embed. This is a small text field at the top of the embed. This - includes `name`, `url` and `icon_url` kwargs. -- Thumbnail - With the [`set_thumbnail`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_thumbnail) - method, you can set a small image to reside at the top-right of the embed. This has a single `url` kwarg. -- Image - With the [`set_image`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_image) - method, you can set an image to sit at the bottom of an embed. This has a single `url` kwarg. - -There are a lot more methods and attributes you can use to configure embeds. Here, we just covered the basics. Also, remember that all of these values are not necessary in an embed. An embed may only contain a few of these. For example, only a description, a title and a description, and so on. - -### Markdown - -Markdown is a type of markup language that's limited in terms of formatting yet simple. Discord allows -for a watered-down version of markdown to be in their messages. - -#### Text Markdown - -Text formatting can be used in messages and in most embed parts, -as explained in the dedicated section below. - - - - - - - - - - - - - - - - - - - - -
*italics*__*underlined italics*__
**bold**__**underlined bold**__
***bold italics***__***underlined bold italics***__
__underlined__~~strikethrough~~
- -#### Code Markdown - -To create a single-line code block without syntax highlight, wrap the text between single backticks. -This code block will only add a dark background to the text. - -``` -`print("Hello world!")` -``` - -To create a multi-line code block without syntax highlight, wrap the text between triple backticks -on first and last line. This type of code block will encase the code inside a box. - -```` -``` -message = "Hello world!" -print(message) -``` -```` - -To create a multi-line block with syntax highlight, add the name of the language you are using right after -the triple backticks on the first line. For example, for Python you can write either "python" or "py". - -```` -```python -message = "Hello world!" -print(message) -``` -```` - -If you want to use syntax highlight for a single line of code, you still have to format it -like a multi-line block but the code must be on a separate line than the triple backticks. - -#### Quote Markdown - -To create a single-line quote block, start the line with `>` followed by a space. - -``` -> This is a single-line quote. -``` - -To create a multi-line quote block, write `>>>` followed by a space. All text -from that point onwards will be included in that quote block. - -``` ->>> This is a -multi-line quote. -``` - -#### Spoiler Markdown - -To hide a spoiler, encase the text between double pipes. The users -will have to click on it before being able to see the text contained in it. - -``` -||spoiler|| -``` - -#### Link Markdown - -Link formatting only works in embeds and messages sent through webhooks, -by using the following syntax: - -``` -[Pycord](https://pycord.dev/) -``` - -Inside the supported elements that have just been mentioned, -the example above will look like this: [`Pycord`](https://pycord.dev/) - -Outside them, the link will still be clickable but the formatting will be ignored, -therefore the example above will look similarly to this: `[Pycord](https://pycord.dev/)` - -#### Embed Markdown - -Adding markdown to your embeds or messages will give your bot the sparkle it needs, -however, markdown is limited inside embeds. Use the following table as a reference -and keep in mind that embed title and filed names will always show in **bold**. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PartTextLink
Embed AuthorNoNo
Embed TitleYesNo
Embed DescriptionYesYes
Field NameYesNo
Field ValueYesYes
Embed FooterNoNo
diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx deleted file mode 100644 index e44b7c49..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Rules and Common Practices -description: All about the rules and common practices for coding a Discord bot ---- - -# Rules and Common Practices of Creating a Bot - -When creating almost anything, there's always a certain set of rules to follow or common practices, -such as [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python. This applies to creating bots -with Pycord as well. - -:::note - -Most of these rules and common practices are only applicable for -[verified bots](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting), -but it's good to follow them nonetheless. - -::: - -## Rules - -There are rules for creating bots, and most of these are required by Discord themselves, not us at -Pycord. Not following these rules may get your bot denied for verification. - -### Terms of Service and Privacy Policy - -Starting at some point in time, Discord has made providing a privacy policy with your bot a requirement. -This is so that Discord knows exactly what you are doing with its users' data. - -:::tip -You don't need a lawyer or anyone special to write out a privacy policy for you, nor do you need -it approved by some official entity. Simply writing out how you are going to use Discord user -information neatly is all you need to do. -::: - -Providing a Terms of Service for your bot is optional, though usually a best practice. It tells users -what they can and cannot do with your service, and makes it easier to settle disputes if someone -disagrees with you. - -Read more in Discord's official [Legal Docs](https://discord.com/developers/docs/legal). - -### Developer Policy - -We could list almost every rule about using Discord's API here. _Or_ we could simply link Discord's -Developer Policy to make it easier on us. You can find Discord's Developer Policy -[here](https://discord.com/developers/docs/policy). This outlines what you can and cannot do with -Discord's Developer API. And, don't worry, it's completely readable and understandable. - -## Best Practices - -Now, here's something we _can't_ simply link an article for. We're going to discuss the best practices -of creating a Discord bot with Pycord. - -### Bot Sharding - -To any new or maybe even experienced bot developer, sharding a bot sounds beneficial once you hear -about it. I'm here to tell you that it isn't a good idea to shard your bot. - -_Wait a minute, why would it be an option if it wasn't a good idea?_ It's simple. I lied. Sort of. -I'm not going to go into the details of sharding a bot, so you can read about it on -[this page](../Popular-Topics/sharding). Sharding is the process of taking your bot -and breaking it up into small pieces, so it's easier to perform tasks. This is very useful for large -bots, as it makes them faster and more reliable. Sharding is not a good practice for small bots. - -:::note -Discord will notify you once it is time to shard your bot, and will eventually force you to do so. -::: - -At the very least, wait for one thousand servers to shard your bot. If you shard your bot while it's -small, you'll just be wasting resources and possibly making your bot slower. - -### [Verification](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting) - -Verifying your Discord bot is something every developer would like to achieve. It shows that your bot -is in more than 75 servers. It's generally a good idea to try to get your bot verified as soon as -possible. We're talking at 76 servers soon. This is because Discord can be somewhat slow in terms of -bot verification, so verifying as soon as possible gives them enough time to verify before your bot -reaches the 100 server cap. If a bot is not verified, it cannot grow beyond 100 servers. - -It's also a good idea to only apply for the privileged intents that you need. Applying for intents -your bot doesn't use wastes both your time and Discord's time, as your privileged intent request -will be denied simply because you applied for an intent you didn't need. - -### Subclassing - -While it may take some time, subclassing a bot is very worth it. Once again, this was explained -elsewhere, so I won't go into the details, but I felt it fit here, so I put it here. - -Subclassing a bot makes it more flexible and allows it to do a lot more. Read more about subclassing -bots [here](../Popular-Topics/subclassing-bots) - -### Your Bot's Token - -Your bot is only able to be run for one reason: its token. If you followed the -[guide for creating your first bot](creating-your-first-bot), you should already know a bit about -keeping that token safe. That's exactly what you want to do. - -Sharing your token is never good. If someone evil gets a hold of your token, they can do terrible things, -such as making your bot leave all of its servers, spamming all the members the bot has contact with, -and even manipulating the servers the bot is in, if given the permissions. That's why it's very important -to keep your token safe. To learn how to do so, read [this part](creating-your-first-bot#tokens) of -the Creating Your First Bot guide. - -### Backups - -You always want to back up your bot's data. This includes both its code _and_ its databases. This way, -if something tragic happens, such as your host failing a data migration or you breaking your Raspberry -Pi's SD card that held your bot, you'll still have its precious user data. I have a small program for -my bot that uploads its databases to a remote GitHub repository periodically to not lose any data. -It may be smarter to find a bit more of a reliable way to do so, though. - -Public or private, having a local Git repository connected to a remote one is a good idea for making -almost any application. For a lot of developers, it's like saving your work. If you do this, all of -your bot's code won't be lost if your computer spontaneously combusts, or you smash it to bits from -anger. You can simply grab the backup computer that everyone has lying around, and you're back -in business. - -### Organization and Cleanliness - -It is _extremely_ important to have organized code. This includes commands, objects, functions, -and classes. If you don't have organized code, it will get progressively harder for you to recognize -it, and others won't be able to decipher it. - -Make sure you utilize indents and spaces, as these are very important in making your code readable. - -```py title="Bad Spacing" -class MyClass: - async def add(self,num1,num2): - return num1+num2 - async def sub(self,num1,num2): - return num1-num2 -``` - -```py title="Good Spacing" -class MyClass: - async def add(self, num1, num2): - return num1 + num2 - - async def sub(self, num1, num2): - return num1 - num2 -``` - -See the difference? Now, which one looks more readable? Hopefully, you answered the second example. -Python's [PEP8](https://www.python.org/dev/peps/pep-0008/) is a PEP (**Python Enhancement Proposal**) -style guide for Python. It is the style guide that is used by most Python developers and programmers, -providing a universal way to write and read code. - -### Databases - -As your bot grows, you'll inevitably have to store data for your bot. Now, most people would probably just load up some -JSON file on boot into a `dict`, modify it in memory then write to the file. However, JSON files aren't the solution. -When you write to a JSON file, it rewrites the entire file instead of just rewriting the section that changed. It's also -a configuration file format, not a storage file format. - -Instead of using a JSON file or some other related format, you should instead use a database. There are many databases -out there, like MongoDB, SQLite, and PostgreSQL to name a few. - -All of these databases I named do the job well, and which one you use depends on what features you want out of a database. - -<>{/* Maybe clarify these/add more options */} - -#### MongoDB - -MongoDB is a JSON-like format and if you already use JSON files, it shouldn't be too hard to migrate over to. - -#### SQLite - -SQLite is based on SQL, a common relational data model. It's a lightweight, easy-to-use, portable database solution that -works entirely on files. However, if for some reason you cannot read/write to and from a file, and you need to manage -lots of data, SQLite might not be for you. - -While SQLite is a part of the Python Standard Library as the `sqlite3` package, we recommend not using it as it is -synchronous and blocking. You should use an asynchronous alternative, such as [`aiosqlite`](https://pypi.org/project/aiosqlite/). - -#### PostgreSQL - -PostgreSQL is also based on SQL, but it also has more features than SQLite. It's compliant with the SQL standard, -open-source, and extensible. However, it's not that fast or simple compared to SQLite. - -#### MariaDB - -MariaDB is also based on SQL and is a fork of the MySQL project. It's compliant with the SQL standard, it's also open -source and is a complete drop-in replacement for any code with MySQL. You don't even need to change what package you're -using! diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/installation.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/installation.mdx deleted file mode 100644 index 521c69cd..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/installation.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Installation -sidebar_position: 2 ---- - -Before you can start using Pycord, you need to install the library. - -:::note -Python **3.8 or above** is required to use Pycord. -::: - -:::tip -Before you start installing python packages globally, it's recommended you set up a virtual environment. -You can find instructions for that [here](More/virtual-environments). -::: - -## Fresh Installation - -To install Pycord, you can use the following command in your terminal: - -``` -pip install py-cord -``` - -:::tip -Remember that you need to install `py-cord`, not `pycord`. -Also, the `pip` command varies depending on your installation. For example, it might be `python3 -m pip` on macOS/Linux or `py3 -m pip` on some versions of Windows. -::: - -If you need voice support for your bot, you should run: - -``` -pip install "py-cord[voice]" -``` - -## Migration - -### Updating Pycord - -If you are upgrading from a previous version of Pycord, you can use the following command in your terminal to upgrade to the latest version: - -``` -pip install -U py-cord -``` - -### Migrating from other libraries - -If you are migrating from another library, say, `discord.py`, first of all, you need to uninstall it. - -``` -pip uninstall discord.py -``` - -Then, you can install Pycord, it's as simple as that!: - -``` -pip install py-cord -``` - -:::caution -Uninstalling `discord.py` _after_ installing `py-cord` can cause issues. Make sure to uninstall it first! -::: - -## Installing Other Builds - -### Development Build - -:::caution -The development build comes with cutting edge features and new functionality, but as it isn't a stable build you may encounter bugs. -::: - -To install the development build, you can use the following command in your terminal: - -``` -pip install -U git+https://github.com/Pycord-Development/pycord -``` - -:::important -Git is required to install this build. [Learn how you can install Git](./more/git). -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/_category_.json b/i18n/ko/docusaurus-plugin-content-docs/current/interactions/_category_.json deleted file mode 100644 index ea28be60..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 4, - "label": "Interactions" -} \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json b/i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json deleted file mode 100644 index 6dcafe83..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Application Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx deleted file mode 100644 index 8fdca991..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Context Menus -description: Learn all about Context Menus (User Commands & Message Commands) and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -When you right-click a message, you may see an option called "Apps". Hover over it, and you can see -commands a bot can run with that message. These are called message commands. - -When you right-click a user in the user list, you can once again see an option called "Apps". -Hover over it, and you can see commands a bot can run with that message. These are called user commands. - -Together, these two are called Context Menus or Context Menu Commands. These commands work very much like normal commands, except they take a member or message. - -:::note - -A bot can have up to 5 global Context Menus of each type. - -::: - -## User Commands - -Creating a user command is very simple. - -```python -@bot.user_command(name="Account Creation Date", guild_ids=[...]) # create a user command for the supplied guilds -async def account_creation_date(ctx, member: discord.Member): # user commands return the member - await ctx.respond(f"{member.name}'s account was created on {member.created_at}") -``` - - - -
- - Account Creation Date - -
- {defaultOptions.profiles.bob.author}'s account was created on 2020-01-01 -
-
- -## Message Commands - -```python -@bot.message_command(name="Get Message ID") # creates a global message command. use guild_ids=[] to create guild-specific commands. -async def get_message_id(ctx, message: discord.Message): # message commands return the message - await ctx.respond(f"Message ID: `{message.id}`") -``` - - - - Do. Or do not. There is no try. - - -
- - Get Message ID - -
- Message ID: 930650407917748286 -
-
- -
- -:::info Related Topics - -- [Slash Commands](./slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx deleted file mode 100644 index edac55b3..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Localizations -description: Localizations are a way to make your bot more accessible to your users. Learn all about localizations now! ---- - -Localizations are a way to make your bot more accessible to your users. You can localize the command -name, the names of any arguments, and any text that is displayed to the user. - -## Syntax - -```python -@bot.slash_command( - name="ping", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - }, - options=[ - Option( - name="Example", - name_localizations={ - "en-GB": "British Example" - }, - description="Example option that does nothing", - description_localizations={ - "en-GB": "British example option that does nothing" - } - ) - ] -) -async def ping(ctx, example): - responses = {"en-US": "Pong!", - "en-GB": "British Pong!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -@bot.slash_command( - name="ping2", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - } -) -async def ping2(ctx, example: Option(str, "example", name_localizations={"en-GB": "British Example"}, description="Example option that does nothing", description_localizations={"en-GB": "British example option that does nothing"})): - responses = {"en-US": "Pong2!", - "en-GB": "British Pong2!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -``` - -- [`Locales`](https://discord.com/developers/docs/reference#locales) - List of valid locales recognized by Discord diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx deleted file mode 100644 index f4a760b6..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx +++ /dev/null @@ -1,292 +0,0 @@ ---- -title: Slash Commands -description: Learn all about Slash Commands and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On March 24, 2021, Discord added Slash Commands to Discord as an easier, more efficient, and better way of using bot commands. Pycord has implemented Slash Commands into the library, so it's simple, efficient, and familiar. - -:::important - -Remember that Slash Commands require your bot to be invited with the `application.commands` scope or Slash Commands will not show up. Bots already in the guild can simply be invited again with the scope; there is no need to kick the bot. - -::: - -## Syntax - -Let's create a simple Slash Command. - -```py -import discord - -bot = discord.Bot() - -# we need to limit the guilds for testing purposes -# so other users wouldn't see the command that we're testing - -@bot.command(description="Sends the bot's latency.") # this decorator makes a slash command -async def ping(ctx): # a slash command will be created with the name "ping" - await ctx.respond(f"Pong! Latency is {bot.latency}") - -bot.run("TOKEN") -``` - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -Let's go through the code. - -First, we import Pycord's `discord` package. - -Next, we create a [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot) object and assign it to a variable `bot`. - -We then go ahead and use the [`@bot.command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.command) decorator, which registers a new Slash Command. We pass a `description` parameter to give a description to the Slash Command. We can also pass a `name` parameter to change the Slash Command's name. By default, the name of the Slash Command will be the name of the function, in this case, `/ping`. - -We create an async function called `ping` with parameters `ctx`, which, when called, sends the bot's ping/latency using [`ctx.respond`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext.respond). - -## Subcommand Groups - -You might want to group certain commands together to make them more organised. A command group is exactly what it sounds like, a group of individual Slash Commands together. - -In order to make a Slash Command group, you can use the `bot.create_group` function. - -```python -import discord - -bot = discord.Bot() - -# create Slash Command group with bot.create_group -greetings = bot.create_group("greetings", "Greet people") - -@greetings.command() -async def hello(ctx): - await ctx.respond(f"Hello, {ctx.author}!") - -@greetings.command() -async def bye(ctx): - await ctx.respond(f"Bye, {ctx.author}!") - -bot.run("TOKEN") -``` - -Or, you can instead manually make a `SlashCommandGroup` class like so: - -```python -import discord - -math = discord.SlashCommandGroup("math", "Math related commands") - -@math.command() -async def add(ctx, num1: int, num2: int): - sum = num1 + num2 - await ctx.respond(f"{num1} plus {num2} is {sum}.") - -@math.command() -async def subtract(ctx, num1: int, num2: int): - sum = num1 - num2 - await ctx.respond(f"{num1} minus {num2} is {sum}.") - -# you'll have to manually add the manually created Slash Command group -bot.add_application_command(math) -``` - -Here's what the registered subcommands will look like in the Slash Command Menu: - -![Picture of the subcommands in the Slash Command Menu](../../assets/interactions/groups-and-subcommands.jpg) - -You'll notice that there's the name of the Slash Command Group and then the name of the subcommand separated by a space. - -::: - -:::info Cogs - -If you are looking to add Slash Command Groups to cogs, please look at our [Cogs page](../../popular-topics/cogs)! - -::: - -## Sub-groups - -We've made a subcommand group, but did you know that you could create a group inside another? - -```python -from discord import SlashCommandGroup -from math import sqrt - -math = SlashCommandGroup("math", "Math related commands") -advanced = math.create_subgroup("advanced", "Advanced math commands") - -@advanced.command() -async def square_root(ctx, x: int): - await ctx.respond(sqrt(x)) - -bot.add_application_command(math) -``` - -The command created above can be invoked by typing `/math advanced square_root`. - -## Options & Option Types - -Whenever you're using Slash Commands, you might notice that you can specify parameters that the user has to set or can optionally set. These are called Options. - -Options can also include a description to provide more information. [You can learn more about Options in our documentation!](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.Option) - -Since you want different inputs from Options, you'll have to specify the type for that Option; there are a few ways of doing this. - - - - -You could use Type Annotations and let Pycord figure out the option type or explicitly specified using the [`SlashCommandOptionType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.SlashCommandOptionType) enum. - -```python -import discord - -bot = discord.Bot() - -@bot.command() -# pycord will figure out the types for you -async def add(ctx, first: discord.Option(int), second: discord.Option(int)): - # you can use them as they were actual integers - sum = first + second - await ctx.respond(f"The sum of {first} and {second} is {sum}.") - -@bot.command() -# this explicitly tells pycord what types the options are instead -async def join( - ctx, - first: discord.Option(discord.SlashCommandOptionType.string), - second: discord.Option(discord.SlashCommandOptionType.string) -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - add - -
- The sum of 1 and 1 is 2. -
- -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
- - -Instead of Type Annotations, you can also use the option decorator. This is usually done to have type-hinting. - -```python title="Slash Command Type" -import discord - -bot = discord.Bot() - -@bot.command() -@discord.option("first", type=discord.SlashCommandOptionType.string) # type = str also works -@discord.option("second", type=discord.SlashCommandOptionType.string) # type = str also works -async def join( - ctx, - first: str, - second: str, -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
-
- -## Autocomplete - -Discord's autocomplete allows developers to determine option choices that are used in a slash command option. You can do this by defining a function: - -```py -async def get_animal_types(ctx: discord.AutocompleteContext): - """ - Here we will check if 'ctx.options['animal_type']' is a marine or land animal and return respective option choices - """ - animal_type = ctx.options['animal_type'] - if animal_type == 'Marine': - return ['Whale', 'Shark', 'Fish', 'Octopus', 'Turtle'] - else: # is land animal - return ['Snake', 'Wolf', 'Lizard', 'Lion', 'Bird'] - -@bot.slash_command(name="animal") -async def animal_command( - ctx: discord.ApplicationContext, - animal_type: discord.Option(str, choices=['Marine', 'Land']), - animal: discord.Option(str, autocomplete=discord.utils.basic_autocomplete(get_animal_types)) -): - await ctx.respond(f'You picked an animal type of `{animal_type}` that led you to pick `{animal}`!') -``` - - - -
- - animal - -
- You picked an animal type of Marine that led you to pick Shark! -
-
- -:::warning - -Autocomplete can **only** be used with slash commands. - -::: - -:::info Related Topics - -- [Interactions Index](../../interactions) -- [Rules and Common Practices](../../getting-started/rules-and-common-practices) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/index.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/interactions/index.mdx deleted file mode 100644 index 3f695606..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/index.mdx +++ /dev/null @@ -1,242 +0,0 @@ ---- -title: Discord Interactions ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -In December 2020, Discord released their first Interaction: the -[Slash Command](https://discord.com/developers/docs/interactions/application-commands#slash-commands). -Since then, Discord has added many types of Interactions, including: - -[**Application Commands**](https://discord.com/developers/docs/interactions/application-commands) - -- [**Slash Commands**](https://discord.com/developers/docs/interactions/application-commands#slash-commands): - Commands that can be used with the `/` prefix. -- **Context Menu Commands**: Commands that can be used from the right-click menu. - - [**User Commands**](https://discord.com/developers/docs/interactions/application-commands#user-commands): - Commands that can be used on a user by alt-clicking/selecting them. - - [**Message Commands**](https://discord.com/developers/docs/interactions/application-commands#message-commands): - Commands that can be used on a message by alt-clicking/selecting it. - -[**UI Components**](https://discord.com/developers/docs/interactions/message-components) - -- [**Buttons**](https://discord.com/developers/docs/interactions/message-components#buttons): - Buttons are attached to a message and can be clicked on to perform an action. -- [**Select Menus**](https://discord.com/developers/docs/interactions/message-components#select-menus): - Drop-down menus are used to select a number of options from a list. -- [**Modals**](https://discord.com/developers/docs/interactions/message-components#text-inputs): - Form-like modals can be used to ask for input from a user. - -## Application Commands - -Application Commands are another set of new features that are intended to avoid compromising users' safety and privacy. -They're relatively easy to add to your bot, and give people a simpler and safer way to use commands. - -### [Slash Commands](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.SlashCommand) - -Slash Commands were the first Interaction added to Discord. They're easy to use and create, and -is the only prefix commands alternative that does not need Message Content intent. - -:::note - -Preferring prefix commands over Application Commands is **not** a valid reason to apply for the -Message Content intent. Using that as a reason will get your application denied. - -::: - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -This is what a Slash Command looks like. Not too different from a prefix command, -apart from the note telling you who invoked it. A Slash Command's fields can accept any of the following: - -- Members -- Roles -- Channels -- Attachments -- Text - -Just about as good as it gets. - -### [Message](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.MessageCommand) and [User](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.UserCommand) Commands - -Message Commands and User Commands were both introduced at around the same time, and are very similar to each other, so we'll be -introducing them together. These commands can be found in the `Apps` tab when alt-clicking. The only difference between the two is that -Message Commands only appear in the `Apps` tab of a message, while User Commands are found in the `Apps` tab of a user. Message Commands -can be used to quickly report a message, warn a user for a message, and other functions. Likewise, User Commands can be used to add a -user to a ticket, warn a user, and more. - -Here's an example of a Message Command: - - - - Hello World! - - -
- - Reverse Message - -
- Message 930650407917748286 reversed is "!dlroW olleH" -
-
- -
- -And here's an example of a User Command: - - - - {defaultOptions.profiles.dorukyum.author} has been on Discord for a long time - - -
- - User Age - -
- {defaultOptions.profiles.dorukyum.author} is 1 week old. -
- -
- - User Age - -
- {defaultOptions.profiles.bob.author} is 40 years old. -
- - 🤔 - -
- -
- -Pretty cool, right? To learn more about these two, please read the [Context Menus guide](./application-commands/context-menus.mdx). - -## [Application Commands](#application-commands) vs. [Prefix Commands](../extensions/commands/prefixed-commands) - -Ever since Discord was created, apps on it have used prefix commands. Using prefixes meant that you would have to put a -certain character (or string of characters) in front of your command, such as the exclamation mark in `!ping`. The way this -worked was that your bot would listen for messages, pick out the ones that had their specific prefix, and then respond to the command. -Now, Discord is encouraging developers to switch their bots over to Application Commands, which is a new system meant to preserve the -privacy and safety of their users. But why exactly is Discord making us switch? What's the better option, Application Commands or prefix -commands? Below, we'll discuss everything you need to know. - -### Discord's Decision - -Application Commands were conceptualized partly due to privacy concerns. When Discord first began, they weren't entirely concerned about bots -having access to the content of every message that was being sent. However, as Discord grew, this became more of a problem. Hypothetically, bots -could simply log every message they're able to receive via the Discord API and hand their contents over to a company or other third party. This is -a problem, since that data is meant to be used only by Discord. As such, they locked down Message Content, and introduced Application Commands for -bot developers to use instead. - -Prefix commands work by reading messages, as described before. Application Commands, however, don't -work this way; instead, they work by having your bot get information from Discord about when a command was used. This way, Discord can limit -Message Content only to bots that _absolutely_ depend on it, such as auto-moderation bots. - -### Who has to Use Application Commands - -Any verified bot that does not have the Message Content intent must use Application Commands. Discord is allowing developers to submit -applications for the ability to use the intent; however, since they don't want to keep supporting prefix commands due to privacy concerns, -they will automatically decline any application that includes only that as a reason. So, if your bot doesn't have an auto-moderation feature -(or any other functionality that requires Message Content), you're out of luck. - -Unverified bots, however, don't have to use Application Commands. This is because the Message Content intent is a `Privileged Intent`, meaning that -it must be applied for only if your bot is verified or about to be verified. Unverified bots don't have to apply for Privileged Intents, so they can -use them freely. - -So, if your bot is made only for a couple of servers, you can choose between prefix commands and Application Commands. However, if you plan on expanding -your bot's reach, it'll have to use Application Commands. - -### What's the Better Option - -Choosing which is the better option is up to you, if you're starting small. If -you plan on growing your bot, however, you will have to use Application Commands. Since prefix commands are slowly being phased out by Discord, -there isn't much of a choice for developers of larger bots. - -## Message Components - -Message Components are fairly new features in Discord, allowing developers to give their bots a fast -and understandable user interface. Message Components are easy to use and make your bot look modern, -sleek, and downright awesome. - -### [Views](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View) - -Views are not an Application Command nor are they a Message Component. Views are the invisible placeholders, or grid, -that Message Components lie in. Views can have up to 5 [`Action Rows`](https://docs.pycord.dev/en/stable/api/models.html#discord.ActionRow), -and Action Rows can have a maximum of 5 slots. Below, you can find a table showing how many slots a Message Interaction takes up. - -| Component | Slots | -| ------------ | ----------------------------------------------- | -| Buttons | 1 Slot | -| Select Menus | 5 Slots | -| Text Modals | 1 Slot (opened via a Button) | - -So, based on this, you could have a maximum of 25 Buttons in a View with no Select Menus, and 5 Select -Menus in a View with no Buttons. This doesn't mean you can't have them both in a View, however. You can have -a combination of them, such as 20 Buttons and a Select Menu or 10 Buttons and 3 Select Menus. - -### [Buttons](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button) - -Buttons are the first of the Message Components. They allow for quick responses to prompts, such as for canceling or continuing an action. -Of course, these aren't their only uses; people have created awesome things with Buttons, such as calculators, games, and more! - - - - Discord Buttons are awesome! -
- - Click me! - -
-
-
- -
- -This is what a Button looks like, very simple and modern. To learn more about Buttons, refer to our -[Buttons page](./ui-components/buttons.mdx). - -### [Select Menus](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Select) - -Select Menus are the second of Discord's Message Components. They allow users to select from a list of choices, which your bot can then use. -Select Menus are good for things such as choosing features, pages of a help menu, and more. - -![Select Menu Example Image](../assets/interactions/select-menus-example.png) - -This is what a Select Menu looks like. While not looking as good as Buttons, they still look great -and have even greater possibilities. To learn more about Select Menus, please refer to our [Select -Menus page](./ui-components/dropdowns.mdx). - -### [Modal Dialogs](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal) - -Text Modals are the most recently added Message Component in Discord. They're useful for text input and filling out forms, such as a -sign-up for your bot's service. These are meant to replace long bot setup processes by allowing users to fill out multiple text fields, -which avoids having the user send multiple messages for the bot. Modals can be accessed by either invoking an Application Command or by -interacting with another UI Component. - -![Text Modal Example Image](../assets/interactions/modal-example.png) - -This is what a Text Modal looks like, easy to use and one of the most useful Message Components yet. To learn more about Text Modals, -please visit our [Modal Dialogs page](./ui-components/modal-dialogs.mdx). diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json b/i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json deleted file mode 100644 index 7b0a72fe..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "UI Components", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx deleted file mode 100644 index 10557c94..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx +++ /dev/null @@ -1,314 +0,0 @@ ---- -title: Buttons -description: Learn all about implementing buttons in your Discord Bot using Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On May 26, 2021, Discord added a new interaction called buttons. Instead of reactions, bots could now -send buttons and users could use them to interact with bots. This opened up a whole new world of -possibilities for bots. Soon after, developers made calculators, polls, and games like blackjack, UNO, -and even Minecraft! Buttons provided a clear and easy to use interface for interacting with bots. - -So, let's learn how you can add buttons to your bot! - -## Concept - -Buttons weren't the only update to the interactions system in Discord. Discord also added [Select Menus](./dropdowns) and [Modal Dialogs](./modal-dialogs), both of which work very similarly to buttons. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive button. - -```python -import discord - -bot = discord.Bot() # Create a bot object - -class MyView(discord.ui.View): # Create a class called MyView that subclasses discord.ui.View - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.primary, emoji="😎") # Create a button with the label "😎 Click me!" with color Blurple - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") # Send a message when the button is clicked - -@bot.slash_command() # Create a slash command -async def button(ctx): - await ctx.respond("This is a button!", view=MyView()) # Send a message with our View class that contains the button - -bot.run("TOKEN") # Run the bot -``` - -Using this command should return the following message: - - - -
- - button - -
- This is a button! -
- - Click me! - -
-
-
- -
- -As you can see, we create a class called `MyView` that [subclasses](#oop) -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `button_callback` to the `MyView` class with the decorator -[`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button). -This decorator adds a button to a component. This function takes two arguments: the button that was -clicked and the interaction. These arguments are passed to the function when the button is clicked -by the module. We use the [`interaction.response.send_message`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse.send_message) -function to send a message to the channel where the interaction was sent. - -Finally, we create a global slash command called `button` that sends the message, along with the view -that contains a button. - -This is the basic syntax of creating a button. What you create with it is up to you. You can worry -about making your button do amazing things, while Pycord handles the rest! - -## Button Styles - - - -| Name | Usage | Color | -| --------- | ----------------------------------------------------------------------------------------- | ------- | -| Primary | `discord.ButtonStyle.primary` / `discord.ButtonStyle.blurple` | Blurple | -| Secondary | `discord.ButtonStyle.secondary` / `discord.ButtonStyle.grey` / `discord.ButtonStyle.gray` | Grey | -| Success | `discord.ButtonStyle.success` / `discord.ButtonStyle.green` | Green | -| Danger | `discord.ButtonStyle.danger` / `discord.ButtonStyle.red` | Red | -| Link | `discord.ButtonStyle.link` / `discord.ButtonStyle.url` | Grey | - -Check out the [`discord.ButtonStyle`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ButtonStyle) class for more information. - -![Different Button Styles](../../assets/interactions/button-styles.png) - -You can set a button's style by adding the `style` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) decorator. - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.success) - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots, and each button takes up 1 slot. -So, how do we move the buttons to another row? - -This can be done by specifying the `row` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) -decorator. - -:::info The `row` argument - -The row argument specifies the relative row this button belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=1, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") -``` - -## Disabling Buttons - -### Pre-Disabled Buttons - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary, disabled=True) # pass `disabled=True` to make the button pre-disabled - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView()) -``` - -### Disabling Buttons on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - button.disabled = True # set button.disabled to True to disable the button - button.label = "No more pressing!" # change the button's label to something else - await interaction.response.edit_message(view=self) # edit the message's view -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(emoji="😀", label="Button 1", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) - - @discord.ui.button(label="Button 2", style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -Sometimes, you want to have a button that is disabled after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView(timeout=30)) -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a button that is disabled after a certain amount of time, you want to have a -button that is always working. - -Normally, when the bot goes offline, all of its buttons stop working. You will be able to see the -buttons, but nothing will happen when you press them. This is a problem -if you are trying to create a self-role system with buttons, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons will stop working. When the bot comes back online, however, the buttons will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view must have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.button(label="A button", custom_id="button-1", style=discord.ButtonStyle.primary, emoji="😎") # the button has a custom_id set - async def button_callback(self, button, interaction): - await interaction.response.send_message("Button was pressed", ephemeral=True) - -@bot.command() -async def button(ctx): - await ctx.send(f"Press the button! View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many buttons can I have in a message? - -Each message can have a maximum of 25 buttons. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do buttons need any special permissions? - -No new permissions are needed for either the bot or the server to allow bots to use buttons. - -#### Should I replace reactions with buttons for my bot? - -That is up to you. Buttons do provide a cleaner interface for your bot and are easier to use. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx deleted file mode 100644 index 8320f25d..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx +++ /dev/null @@ -1,339 +0,0 @@ ---- -title: Select Menus -description: Learn all about implementing Select Menus or Dropdowns in your Discord Bot with Pycord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Shortly after the buttons were added, Discord added their second message component: Select Menus. Select Menus allow users to choose from a list of items sent by a bot. These are a great substitute for having a user send a number that corresponds to an option. You can even allow users to select multiple options from the Select Menus. This guide will show you the easy and painless ways of using them with Pycord. - -## Concept - -Select Menus aren't the only message component in Discord. There's also [Buttons](./buttons) and [Modal Dialogs](./modal-dialogs). Select Menus make it easy for users to pick one or multiple options from a list provided by a bot. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive select menu. - -```python -import discord - -bot = discord.Bot() - -class MyView(discord.ui.View): - @discord.ui.select( # the decorator that lets you specify the properties of the select menu - placeholder = "Choose a Flavor!", # the placeholder text that will be displayed if nothing is selected - min_values = 1, # the minimum number of values that must be selected by the users - max_values = 1, # the maximum number of values that can be selected by the users - options = [ # the list of options from which users can choose, a required field - discord.SelectOption( - label="Vanilla", - description="Pick this if you like vanilla!" - ), - discord.SelectOption( - label="Chocolate", - description="Pick this if you like chocolate!" - ), - discord.SelectOption( - label="Strawberry", - description="Pick this if you like strawberry!" - ) - ] - ) - async def select_callback(self, select, interaction): # the function called when the user is done selecting options - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") - -@bot.command() -async def flavor(ctx): - await ctx.respond("Choose a flavor!", view=MyView()) - -bot.run("TOKEN") -``` - -There's a lot going on over here! Don't worry, we will go over the code and explain it. - -As you can see, we create a class called `MyView` that subclasses -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `select_callback` to the `View` class with the decorator -[`discord.ui.select`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.select). -This decorator adds a select menu to the view. This decorator takes a few arguments to customize your select menu. Read them in the [Customization section](#customization). - -That was the decorator. Now, the function itself is pretty simple. It takes two parameters, not including `self`. The parameters are `select`: The select menu, and `interaction`: a [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object. Both of these are passed by Pycord, so you just need to specify them in the function! - - - -In the callback, you could do anything you want. You get the two parameters `select` and `interaction` to play around with. Here, we send a message using `await interaction.response.send_message` (where interaction is [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse)) with content `select.values[0]`, which sends the label of the first/only option the user selected. Obviously, this is only an example, and you could do just about anything you want. - -Finally, we create a global slash command called `flavour` that sends a message "Choose a flavor!" along with the view -that contains our select menu. - -This is the basic syntax of creating a select menu. What you create with it is up to you. You can worry -about making your code do amazing things, while Pycord handles the rest! - -## Customization - -#### Select Menu Properties - -- `select_type`: The type of select to create. This must be a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. -- `channel_types`: A list of channel types that can be selected in the menu. This is only valid for selects of `select_type` [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType). -- `options`: A list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. These are the options that can be selected in this menu. -- `placeholder` is the placeholder text shown in the select menu if no option is selected. -- `custom_id`: The ID of the select menu that gets received during an interaction. It is recommended not to set this to anything unless you are trying to create a persistent view. -- `row`: The relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). -- `min_values`: The minimum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `max_values`: The maximum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `disabled`: Whether the select is disabled or not. Defaults to False. - -#### Select Option Properties - -In the `options` parameter, you pass a list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. This class also has a few parameters: - -- `default` (whether the option is selected by default) -- `description` (an additional description, if any) -- `emoji` (a string or an emoji object, if any) -- `label` (the name displayed to users, can be up to 100 characters) -- `value` (a special value of the option, defaults to the label). - -## Select Types - -In addition to regular string selects, you can also have your select menu contain users, roles, mentionables, and channels as its options. You can use these alternative select types by passing a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value for the `select_type` parameter when creating the Select. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.user_select - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -Additionally, you can use shortcut decorators to create a [`discord.ui.Select`](https://docs.pycord.dev/en/master/api/ui_kit.html#discord.ui.select) with a predetermined [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. Using a shortcut decorator, the above code can be rewritten like this: - -```python -class MyView(discord.ui.View): - @discord.ui.user_select() - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -### Specifying Channel Types - -When using a [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType.channel_select) type select menu, you can pass in a list of [`discord.ChannelType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ChannelType) values to limit which types of channels users can choose when interacting with the select menu. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.channel_select, - channel_types=[discord.ChannelType.text, discord.ChannelType.voice] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"You selected {select.values[0].mention}") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots. A button takes a single slot, while a select menu takes up all 5 of them. This means a view can have a maximum of 5 select menus, or any possible combination of select menus and buttons. - -The arrangement of buttons and select menus is generally adjusted by Pycord. However, it is possible to move them to specific relative rows. This is done by specifying the `row` argument. - -:::info The `row` argument - -The row argument specifies the relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero-indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=0, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.select( - row = 1, - options = [...] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") -``` - -## Disabling Select Menus - -### Pre-Disabled Menus - -```python -class MyView(discord.ui.View): - @discord.ui.select( - disabled = True, # pass disabled=True to set the menu as disabled - options = [...] - ) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send("Select and option from the menu!", view=MyView()) -``` - -### Disabling Menus on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - select.disabled = True # set the status of the select as disabled - await interaction.response.edit_message(view=self) # edit the message to show the changes -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def first_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) # edit the message to show the changes - - @discord.ui.select(options = [...]) - async def second_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -You may want a select menu to automatically stop working after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select(ctx): - await ctx.send(view=MyView(timeout=30)) # specify the timeout here -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a select menu that is disabled after a certain amount of time, you want to have a -select menu that is always working. - -Normally, when the bot goes offline, all of its views stop working, even if they don't have a timeout. You will be able to see the -views, but nothing will happen when you try to interact with them. This is a problem -if you are trying to create a self-role system, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons and select menus will stop working. However, when the bot comes back online, the buttons and select menus will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view much have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.select(custom_id="select-1", options = [...]) # a custom_id must be set - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send(f"View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many select menus can I have in a message? - -Each message can have a maximum of 5 select menus. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do select menus need any special permissions? - -No new permissions are needed in the bot or in the server. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx deleted file mode 100644 index 6ee4682f..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Modal Dialogs -description: Learn how you can implement Modals in your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Modal Dialogs, also known as "modals", provide a form-like structure for bots to receive input from users. No extra permissions are needed for bots to send modal dialogs, so it becomes a convenient workaround for bots to receive longer input without needing the Message Content [intent](../../popular-topics/intents). - -## Concept - -Modal Dialogs consist of a title, custom ID, and up to 5 [`discord.ui.InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) components. While creating modals, we generally subclass [`discord.ui.Modal`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal), as we'll see later. - -Unlike other UI Components, Modals cannot be sent with messages. They must be invoked by an Application Command or another UI Component. - -## Usage Syntax - -```py -class MyModal(discord.ui.Modal): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - self.add_item(discord.ui.InputText(label="Short Input")) - self.add_item(discord.ui.InputText(label="Long Input", style=discord.InputTextStyle.long)) - - async def callback(self, interaction: discord.Interaction): - embed = discord.Embed(title="Modal Results") - embed.add_field(name="Short Input", value=self.children[0].value) - embed.add_field(name="Long Input", value=self.children[1].value) - await interaction.response.send_message(embeds=[embed]) -``` - - - - -The `ctx` parameter we define in Application Commands receives an [`ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext) object. Using its `send_modal()` coroutine, you can send a Modal dialog to the user invoking the Application Command. - -```py -@bot.slash_command() -async def modal_slash(ctx: discord.ApplicationContext): - """Shows an example of a modal dialog being invoked from a slash command.""" - modal = MyModal(title="Modal via Slash Command") - await ctx.send_modal(modal) -``` - - - - -The `interaction` parameter we define in UI Components receives an [`Interaction`](https://docs.pycord.dev/en/stable/api/models.html#discord.Interaction) object. The `response` attribute of the object contains an [`InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object, with various coroutines such as `send_message()` and `send_modal()`, which we utilize. - -```py -class MyView(discord.ui.View): - @discord.ui.button(label="Send Modal") - async def button_callback(self, button, interaction): - await interaction.response.send_modal(MyModal(title="Modal via Button")) - -@bot.slash_command() -async def send_modal(ctx): - await ctx.respond(view=MyView()) -``` - - - - -The above example uses an embed to display the results of the modal submission, but you can do anything you want with the text provided by the user. -Each input field can be accessed in the order it was added to the modal dialog, via `Modal.children`. - -## Customization - -A Modal can have up to 5 [`InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) fields. These fields offer some customization. - -Each field has a label which is shown to the user. This is defined with `label`. - -The `style` parameter is used to determine whether it should be a short (single-line) or long (multi-line) input field. - -There are a number of aliases that can be used: - -```x title="Single-line InputTextStyle values:" -short -singleline -``` - -```x title="Multi-line InputTextStyle values:" -paragraph = 2 -multiline = 2 -long = 2 -``` - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Buttons](./buttons) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/introduction.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/introduction.mdx deleted file mode 100644 index 3262c632..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/introduction.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Introduction -description: Pycord Guide is a complete guide for Pycord. Learn how to create Discord Bots today! -sidebar_position: 1 ---- - -Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord, written in Python. Pycord is a maintained fork of [discord.py](https://github.com/Rapptz/discord.py). - -## Before you begin - -Pycord is an advanced and complex Python library. To take advantage of the full capabilities of Pycord, you will need to have a good understanding of Python. You should know the basics of Python and have an understanding of the following concepts: - -- Variables -- Data Types -- Functions -- Packages -- Conditionals -- Loops -- Classes -- Object-Oriented Programming -- Inheritance -- Exception Handling -- Iterators -- Coroutines -- Async/Await - -This list is not exhaustive, but it should give you a good idea of what you need to know to get started. - -When you see an ellipsis - that's the three dots - in this guide, it is a placeholder for code that you need to fill in. Sometimes, it may be code for a command, while other times it could be something simple like a Guild ID. Make sure to replace them before running your bot! - -## Learning Resources - -Here are some good resources to get started or to freshen up your Python knowledge: - -- [Official Beginner's Guide](https://wiki.python.org/moin/BeginnersGuide) -- [Official Tutorial](https://docs.python.org/3/tutorial/) -- [Automate the Boring Stuff, a free online book for complete beginners to programming](https://automatetheboringstuff.com/) -- [Learn Python in y Minutes, complete cheat sheet for people who know programming already](https://learnxinyminutes.com/docs/python3/) -- [Swaroopch's free Python book](http://python.swaroopch.com/) -- [Codeabbey, exercises for beginners](http://www.codeabbey.com/) - -## Credits - -First of all, we would like to thank [Rapptz](https://github.com/Rapptz) for the original [discord.py](https://pypi.org/project/discord.py) library. Pycord is a maintained fork of this library. - -We would also like to thank the [discord.js guide](https://discordjs.guide), which inspired this guide style-wise, and the [original Pycord Guide](https://namantech.me/pycord), which inspired some content in this guide. - -We created this guide using [Docusaurus v2](https://docusaurus.io), a modern static site generator for React. We would also like to thank Danktuary for his [`@discord-message-components/react`](https://www.npmjs.com/package/@discord-message-components/react) package, from which we took the Discord message components. - -And finally, we would like to thank the amazing and loving community of Pycord users, contributors and developers. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/more/_category_.json b/i18n/ko/docusaurus-plugin-content-docs/current/more/_category_.json deleted file mode 100644 index 2cbe2c56..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/more/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 8, - "label": "More", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/more/community-resources.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/more/community-resources.mdx deleted file mode 100644 index ed3075bd..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/more/community-resources.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Community Resources ---- - -This page showcases the amazing things created by the Pycord community, including bots, Plugins, and more. - -## Plugins - -| Name | Type | GitHub | -| --------------- | ------------ | --------------------------------------------------------------- | -| Music Cord | Music | [NixonXC/cord-music](https://github.com/NixonXC/cord-music) | -| pycord-i18n | Localization | [Dorukyum-pycord-i18n](https://github.com/Dorukyum/pycord-i18n) | -| pycord-multicog | Cogs | [pycord-multicog](https://github.com/Dorukyum/pycord-multicog) | -| EzCord | Utilities | [EzCord](https://github.com/tibue99/ezcord) | - -## Bots - -| Name | Type | Link | -| ------------------------ | ------------ | ----------------------------------------------------------------------------------- | -| Discord-Multipurpose-Bot | Multipurpose | [github](https://github.com/pogrammar/Discord-multipurpose-bot/tree/master/Python) | -| inconnu | Fun & QOL | [github](https://github.com/tiltowait/inconnu) | -| Mai | Multipurpose | [github](https://github.com/TeamMai/Mai) & [website](https://xfghoul.github.io/Mai) | -| Toolkit | Multipurpose | [github](https://github.com/Dorukyum/Toolkit) | diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/more/contributing.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/more/contributing.mdx deleted file mode 100644 index 8fdf31af..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/more/contributing.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: Contributing to the Guide -description: Learn how to contribute to the Pycord Guide. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -This page outlines some of the basic syntax you need to know to contribute to the guide. We recommend you also check out: - -- [Docusaurus's Docs](https://docusaurus.io/docs/) -- [Contributing Rules](https://github.com/Pycord-Development/guide/blob/master/.github/CONTRIBUTING.md) - -## Info - -We use [Docusaurus v2](https://docusaurus.io/) to generate our guide. All the guide pages are generated -from `mdx` files in the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory. -MDX allows you to use JSX in your markdown content. - -## Structure - -Let's visit the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory and check its file structure. - -We can see various folders and a few files in it. Let's talk a bit about the `introduction.mdx` file. At the top, you can see something like: - -```md ---- -title: Introduction -description: ... -sidebar_position: 1 ---- -``` - -Most pages have this at the top. The `title` defaults to the file name. Since the titles need to be Capitalized according to need while the file names are lowercased (sometimes, the file names are shorter than the title!), we set a title ourselves. - -The `description` field is also important. This is the text shown in an embed when the page's link is shared on Discord, Twitter or other websites that support embedded links. Make sure to give a nice an interesting description! - -The `sidebar_position` field is pretty self-explanatory. It sets the position of the page in the sidebar. Most files in categories do not need this since they are sorted alphabetically. - -## Markdown Syntax - -This page quickly outlines some of the syntax that is used in markdown. - -````mdx -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - - ```python - print("We can use code blocks like this.") - ``` - -You can add [links to other websites](https://pycord.dev). You can add images like this: ![alternate text that describes the image](https://pycord.dev/image.png). - -- You can create -- unordered lists like this - -1. Or ordered lists -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` -4. Like this - -# Headers - -## Go - -### Like - -#### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet -```` - -
-Preview -
- -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - -```python -print("We can use code blocks like this.") -``` - -You can add [links to other websites](https://pycord.dev). You can add images by adding ![alt text](@site/static/img/favicon.ico). - -- You can create -- unordered lists like this - -1. Or ordered lists - -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` - -4. Like this - - # Headers - - ## Go - - ### Like - - #### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet - -
-
- -## Admonitions - -We can add warnings, notes, etc. with the following syntax: - -```md -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: -``` - -
-Preview -
- -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: - -
- -
- -## Discord Message Components - -As most files already have the imports for these, it's not that hard to add them. - -First, import the necessary components: - -```tsx -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; -``` - -The div starts like so: - -```tsx - - - - -
-``` - -This is where you list a `DiscordMessage`. - -```tsx - - - Hello! - - - -
-``` - - - - Hello! - - - -
- -It has a pretty straightforward syntax. - -:::tip - -Add a `
` to the end of a component to make the content below it look better. - -::: - -### Slash Commands - -To make a message authored by a slash command, do the following: - -```tsx - - -
- - update - -
- Updated dependencies to the latest version! -
-
-``` - - - -
- - update - -
- Updated dependencies to the latest version! -
-
- -### Buttons - -To make a message with buttons, do the following: - -```tsx - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
-``` - - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
- -## Page Format - -There are a few things you need to take care of: - -1. Make sure that the spelling and grammar is perfect. We have a GitHub action configured that will warn you about spelling errors when you start a pull request. Make sure to commit your changes accordingly. - - As for the grammar, you should try reading the changes you have done and wait for reviews from others. - -2. A common mistake people make is incorrect header style. People often think that the less the important the topic is, the lower it's heading style should be. - - ```md - [PAGE STARTS] - # Topic - ## Less Important Topic - ## Subtopic - ``` - - ```md - [PAGE STARTS] - # About - [Introduction] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - That's VERY wrong. Here's the correct example: - - ```md - [PAGE STARTS] - [Introduction] - ## Topic - ## Less Important Topic - ### Subtopic - ``` - - ```md - [PAGE STARTS] - [Introduction] - - ## About - [More Information] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - Note that the `---`s at the beginning have been skipped here. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/more/git.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/more/git.mdx deleted file mode 100644 index 0f929d6d..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/more/git.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Installing Git -description: Learn how you can install Git on your system. ---- - -Git is software for tracking changes in any set of files (also known as a "version control" software), usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems). - -Let's see how to install Git on different platforms. - -## Windows - -On Windows, Git can be installed via: - -- [Git for Windows](https://gitforwindows.org) -- [Git Scm](https://git-scm.com/download/windows) - -## Linux - -On Linux, Git is probably already installed in your distribution's repository. If not, you can install it via [Git for Linux](https://git-scm.com/download/linux). You can also install it via the built-in package manager on your Linux distro. - -## Mac - -You can install Git for your macOS computer via [Git for Mac](https://git-scm.com/download/mac). Alternatively, it can be also be installed from the Xcode Command Line Tools by installing Xcode from the App Store, or by running this: - -``` -xcode-select --install -``` - -## Using Package Managers - -You can also install Git using package managers. - -### Chocolatey - -If you use the Chocolatey package manager, you can install Git using: - -``` -choco install git -``` - -### Scoop - -If you use Scoop, you can install Git using: - -``` -scoop install git -``` - -### Brew - -If you're on macOS or Linux, you can install Git using: - -``` -brew install git -``` diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx deleted file mode 100644 index b0b8c7ea..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Virtual Environments -description: Learn how to set up a virtual environment for Pycord. ---- - -## Setup - -Sometimes you want to keep libraries from polluting system installs or use a different version of libraries than the ones installed on the system. You might also not have permissions to install libraries system-wide. For this purpose, the standard library as of Python 3.3 comes with a concept called “Virtual Environment”s to help maintain these separate versions. - -A more in-depth tutorial is found on [Virtual Environments and Packages](https://docs.python.org/3/tutorial/venv.html). - -However, for the quick and dirty: - -Go to your project’s working directory: - -```bash -$ cd your-bot-source -$ python3 -m venv venv -``` - -Activate the virtual environment: - -```bash -$ source venv/bin/activate -``` - -On Windows you activate it with: - -```batch -$ venv\Scripts\activate.bat -``` - -Use pip like usual: - -```bash -$ pip install -U py-cord -``` - -Congratulations. You now have a virtual environment all set up. - -## Additional info - -It can be useful to set up a requirements.txt, so you can just put all of your dependencies in there and have pip install it. -For instance, if you wanted to have the latest 2.0 version of pycord and [pytz](https://github.com/stub42/pytz/blob/master/src/README.rst), just create a file named requirements.txt with the following contents: - -``` -py-cord>=2.0.0 -pytz -``` - -And then (in your virtual environment) you can just execute - -```bash -pip install -r requirements.txt -``` - -To keep from committing your virtual environment to git, you can set up a .gitignore file with the following line -(assuming you named your virtual environment venv like the above example): - -``` -venv/ -``` diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/_category_.json b/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/_category_.json deleted file mode 100644 index c38ea014..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 7, - "label": "Popular Topics", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx deleted file mode 100644 index 5377a6c3..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Cogs ---- - -Cogs, often known as modules or extensions, are used to organize commands into groups. This is useful -for grouping commands that have the same general idea (such as moderation commands). This also helps -to avoid making your bot's files messy and cluttered. - -## Getting Started - -First, you'll need to create a folder to store your cogs, e.g. `cogs/`. - -Then, create a file inside the folder, e.g. `cogs/greetings.py`. By convention, the file name should -be the same as the name of the cog or module. - -We can then create the cog. - -```python title="./cogs/greetings.py" -import discord -from discord.ext import commands - -class Greetings(commands.Cog): # create a class for our cog that inherits from commands.Cog - # this class is used to create a cog, which is a module that can be added to the bot - - def __init__(self, bot): # this is a special method that is called when the cog is loaded - self.bot = bot - - @commands.command() # creates a prefixed command - async def hello(self, ctx): # all methods now must have both self and ctx parameters - await ctx.send('Hello!') - - @discord.slash_command() # we can also add application commands - async def goodbye(self, ctx): - await ctx.respond('Goodbye!') - - @discord.user_command() - async def greet(self, ctx, member: discord.Member): - await ctx.respond(f'{ctx.author.mention} says hello to {member.mention}!') - - math = discord.SlashCommandGroup("math", "Spooky math stuff") # create a Slash Command Group called "math" - advanced_math = math.create_subgroup( - "advanced", - "super hard math commands!" - ) - - @math.command() - async def add(self, a: int, b: int): - c = a + b - await ctx.respond(f"{a} + {b} is {c}.") - - @advanced_math.command() - async def midpoint(self, x1: float, y1: float, x2: float, y2: float): - mid_x = (x1 + x2)/2 - mid_y = (y1 + y2)/2 - await ctx.respond(f"The midpoint between those coordinates is ({mid_x}, {mid_y}).") - - @commands.Cog.listener() # we can add event listeners to our cog - async def on_member_join(self, member): # this is called when a member joins the server - # you must enable the proper intents - # to access this event. - # See the Popular-Topics/Intents page for more info - await member.send('Welcome to the server!') - -def setup(bot): # this is called by Pycord to setup the cog - bot.add_cog(Greetings(bot)) # add the cog to the bot -``` - -You can add any number of commands to your cog, as well as event listeners. However, this code will -not work on its own. In your main bot file, you must add the following code: - -```python -bot.load_extension('cogs.greetings') -``` - -This loads the file `cogs/greetings.py` and adds it to the bot. -The argument of `load_extension` should be your cog's path (e.g. cogs/greetings.py) without the file -extension and with the `/` replaced with `.` - -If you have multiple cogs, you can add them all at once by adding the following code: - -```python -cogs_list = [ - 'greetings', - 'moderation', - 'fun', - 'owner' -] - -for cog in cogs_list: - bot.load_extension(f'cogs.{cog}') -``` - -## Cog Rules - -When using a cog instead of the main file, there are some changes you have to make to your code. This -is because cogs work slightly different from a regular file. - -### The `self` variable - -The self variable is a variable that represents a class. In the case of cogs, `self` represents -the cog. In the `__init__` function, you can see that we have `self.bot = bot`. `bot` represents your -`discord.Bot` or `discord.ext.commands.Bot` instance, which is used for some functions. - -This means that instead of using functions that would usually be accessed via `bot`, you now need -to access them via `self.bot` - -Because we're in a class, all of our commands are methods of that class. Because of this, all of our -functions need to have `self` as the first parameter, where `self` is the cog. Without this, we -wouldn't be able to access our bot instance. - -### Creating Commands - -When creating prefixed commands, your decorator would usually be something like `@bot.command()`. If you're using -cogs, this isn't the case. In a cog, you can't access the bot instance outside of functions, so to -register a function as a command, you must instead use `@commands.command()`. - -Similar to prefixed commands, you'll have to use either the `@discord.slash_command()`, `@discord.user_command()`, -or `@discord.message_command()` decorators for Application Commands. - -Also, when creating a command, make sure that it is indented. If we want a command to be actually -inside a cog, it has to be inside your cog's class. If the command is not inside the cog, -your command becomes useless. - -### Events - -When creating events, you can no longer use `@bot.event` as a decorator. This is because we cannot -access the `bot` variable outside a function. To make an event, you have to use the `ext.commands` -method, `@commands.Cog.listener()`. Events also need `self` as their first parameter. - -And that's it! Cogs are a simple and easy way of organizing your code. Now you can check out how to -create a help command [here](../extensions/commands/help-command). - -:::info Related Topics - -- [Creating a Help Command](../extensions/commands/help-command) -- [Rules and Common Practices](../getting-started/rules-and-common-practices) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Application Commands](../interactions#application-commands) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx deleted file mode 100644 index 3599cc82..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx +++ /dev/null @@ -1,383 +0,0 @@ ---- -title: Error Handling -description: All about handling errors. ---- - -import { - DiscordEmbed, - DiscordInteraction, - DiscordMessage, -} from "@pycord/discord-message-components-react"; -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -## About - -When using the library, errors are frequently raised due to various reasons. These reasons range from the Discord API -failing your bot's request due to missing permissions or an invalid syntax error. - -Before going into error handling, it's best that you learn the basic ways of handling errors. A good resource is: - -- [W3Schools' Guide to Python Try-Except Statements](https://www.w3schools.com/python/python_try_except.asp) - -## Basic Handling - -The most basic way to handle errors is to tackle it at the source. This can be done like so: - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -import asyncio - -import discord - -intents = discord.Intents.default() -intents.message_content = True - -bot = discord.Bot(intents=intents) - - -@bot.slash_command(description="Gets some feedback.") -@discord.option("name", description="Enter your name.") -async def feedback(ctx: discord.ApplicationContext, name: str): - try: - await ctx.respond(f"Hey, {name}! Send your feedback within the next 30 seconds please!") - - def is_author(m: discord.Message): - return m.author.id == ctx.author.id - - feedback_message = await bot.wait_for("message", check=is_author, timeout=30.0) - await ctx.send(f"Thanks for the feedback!\nReceived feedback: `{feedback_message.content}`") - except asyncio.TimeoutError: - await ctx.send("Timed out, please try again!") - - -bot.run("TOKEN") -``` - -If you respond within 30 seconds, the interaction will look like so: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Great bot! - - - Thanks for the feedback! -
- Received feedback: Great bot! -
-
-
- -Otherwise, if you don't respond in time, the interaction will go as follows: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Timed out, please try again! - -
-
- -This basic method of error handling can be extended to handle -many other errors including ones raised directly by py-cord. - -## Per-Command Handling - -This type of error handling allows you to handle errors per each command you have on your bot. -Each and every command can have it's own error handler made to handle specific errors that each command may raise! - -An example of per-command error handling is as follows: - -:::note Bridge Commands - -For these types of commands, it is recommended to utilize global error handling -until [the feature](https://github.com/Pycord-Development/pycord/issues/1388) is added. -::: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot(owner_id=...) # Your Discord user ID goes in owner_id - - -@bot.slash_command(description="A private command...") -@commands.is_owner() # This decorator will raise commands.NotOwner if the invoking user doesn't have the owner_id -async def secret(ctx: discord.ApplicationContext): - await ctx.respond(f"Hey {ctx.author.name}! This is a secret command!") - - -@secret.error -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.NotOwner): - await ctx.respond("Sorry, only the bot owner can use this command!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If your ID is registered as the owner ID, you'll get the following: - - - -
- - secret - -
- Hey Dorukyum! This is a secret command! -
-
-
- -Any other user whose ID doesn't match the bot owner's will get the following: - - - -
- - secret - -
- Sorry, only the bot owner can use this command! -
-
-
- -This local (per-command) error handler can also be used to handle the same types of errors that standard try-except -statements can handle. This is done by using the same method as above with the `isinstance` built-in function. - -## Per-Cog Handling - -Adding error handlers per-command can be quite the task in terms of work if you have a lot. If you have happened to -group your commands in cogs, then you're in luck! You can create an error handler that is specific to a cog and -handles all errors raised by commands inside that cog. - -Here's an example of a bot with a cog that implements its own error handling: - -```python title="./cogs/dm.py" -# This cog is for DM only commands! Sadly, we only have 1 command here right now... - -import discord -from discord.ext import commands - - -class DM(commands.Cog): - def __init__(self, bot: commands.Bot): - self.bot = bot - - @commands.command() - @commands.dm_only() # This decorator will raise commands.PrivateMessageOnly if invoked in a guild context. - async def avatar(self, ctx: commands.Context): - embed = discord.Embed( - title="Avatar", - description=f"Here's your enlarged avatar, {ctx.author.name}!", - color=ctx.author.top_role.color - ) - embed.set_image(url=ctx.author.display_avatar.url) - await ctx.send(embed=embed, reference=ctx.message) - - async def cog_command_error(self, ctx: commands.Context, error: commands.CommandError): - if isinstance(error, commands.PrivateMessageOnly): - await ctx.send("Sorry, you can only use this in private messages!", reference=ctx.message) - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -def setup(bot: commands.Bot): - bot.add_cog(DM(bot)) -``` - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -# This is the main file where we load the DM cog and run the bot. - -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix=commands.when_mentioned_or("!")) -bot.load_extension("cogs.dm") -bot.run("TOKEN") -``` - -If you use this command in a DM context, you'll get the following: - - - - !avatar - - -
- - !avatar - -
- - Here's your enlarged avatar, BobDotCom! - -
-
-
- -Otherwise, if used in a guild context: - - - - !avatar - - -
- - !avatar - -
- Sorry, you can only use this in private messages! -
-
-
- -Per-cog error handling comes in very handy as you can relegate all of your error handling to a single function instead -of spreading it out across several per-command error handlers or inside the commands themselves. - -## Global Handling - -If separating your error handling is not how you would like to handle errors, then global error handling is the way to -go. This method of handling allows you to relegate all handling to a single function that resides within your bot -instance. - -A non-subclassed bot would implement this like so: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot() - - -@bot.slash_command(description="Get the bot's current latency!") -@commands.cooldown(1, 30, commands.BucketType.user) -# ^ This decorator allows one usage of the command every 30 seconds and raises commands.CommandOnCooldown if exceeded -async def ping(ctx: discord.ApplicationContext): - await ctx.respond(f"Pong! `{int(bot.latency*1000)} ms`.") - - -@bot.event -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.CommandOnCooldown): - await ctx.respond("This command is currently on cooldown!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If you've subclassed your bot, the `on_application_command_error` event will be placed inside the subclass without a -`bot.event` decorator and `bot.slash_command` will be replaced with `discord.slash_command`. - -The error handling used above will yield this interaction if the command is used again too quickly: - - - -
- - ping - -
- Pong! 49 ms. -
- -
- - ping - -
- This command is currently on cooldown! -
-
-
- -The only issue regarding global error handling is that, if you have a large amount of commands, the global handler may -start to get crammed with a lot of code. This is where all the previously mentioned handlers can take their place! - -## FAQ - -#### Why does the example in per-cog handling have self at the start of its function signatures? - -This is a feature of classes and allows you to reference the cog object as `self` and get access to the bot object -passed at initialization through `self.bot`. - -If this is new to you, we recommend checking out these helpful resources to learn more about classes and cogs: - -- [W3Schools' Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [Our Cogs Guide Page](./cogs) - -#### How many errors can I handle in a single error handler? - -While all the examples in this guide page only handle one specific error and re-raise all others, all of these -error handlers can be extended to catch many errors. - -In [basic handling](#basic) (i.e. try/except statements) you can do one of two things: - -- Explicitly handle the errors you know might get raised and then have a broad `except Exception as exc:` statement - as a catch-all. -- Catch any and all errors via the catch-all statement mentioned above. - -In [per-command](#percommand), [per-cog](#percog), and [global handling](#global), you can use elif clauses with the -built-in isinstance function to catch specific errors. Atop of this, an else clause can be used to catch any other -errors you either don't want to handle or want to relegate to a different error handler. - -#### Can I use more than one type of error handler at once? - -Thankfully, all of these different ways of error handling can be mixed together, so you don't have to pick just one! -For commands that raise specific errors that no other commands will raise, you can use [per-command](#percommand). -For cogs that raise specific errors that no other cogs will raise, use [per-cog](#percog)! Lastly, for errors that -occur frequently across all commands and cogs, use [global handling](#global)! - -However, one important note to remember is that you should always raise the error again in an error handler if it -isn't handled there! If you don't do this, the error will go ignored and your other handlers won't have a chance to -do their work! - -#### What's the difference between slash and prefixed command error handling? - -Although most examples shown here use slash commands, the [per-cog handling](#percog) section presents a prefixed -command. The main difference you may notice is the change in command signature. - -To make the distinguishing features apparent: - -- Slash commands use `on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException)` - as presented in the [per-command](#percommand) and [global handling](#global) examples. -- Prefixed commands use `on_command_error(ctx: commands.Context, error: commands.CommandError)` as presented in the - [per-cog handling](#percog) example. - -This distinction is made as both types of commands need their own system for handling errors that are specific to -themselves. - -:::info Related Topics - -- [Slash Commands](../interactions/application-commands/slash-commands) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Cogs](./cogs) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx deleted file mode 100644 index 9f4210af..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Intents -description: All about intents in Discord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## What are Intents? - -Intents allow bot developers to "subscribe" to specific events in Discord. This is useful for bots that need to respond to specific events, such as when a user joins a server or sends a message. You could choose to enable all intents or to enable only specific intents that your bot requires. - -## How do I enable intents? - -:::important - -Remember that [Privileged Intents](#what-are-privileged-intents) require you to enable them in the Discord Developer Portal. Verified Discord Bots that don't already have access to them will need to request Discord to allow access. - -::: - - - - -```python -import discord - -bot = discord.Bot(intents=discord.Intents.all()) -``` - - - - - -You can view a list of intents and the events they subscribe to [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```python title="Enabling Intents" -import discord - -bot = discord.Bot(intents=discord.intents.members(bans=True, guilds=True)) -``` - - - - -## What are Privileged Intents? - -Discord defines some intents as "privileged" because of the sensitive information they contain. Currently, there are three privileged intents: `members`, `presences`, and `message_content`. These intents must be enabled in your bot's Developer Portal. Once your bot reaches 100 servers, you will need to verify your bot for these intents to keep working and for your bot to be able to be invited to more guilds. - -:::tip - -Only enable these intents if you need them. These intents give your bot access to quite sensitive information about the users in your guild. These intents are privileged to respect the privacy of users, and you should do that as well. - -Not enabling these intents doesn't mean you won't be able to ban users, but you will be unable to detect when a new user joins a guild, or what game they are playing. The majority of bots won't need all intents. - -::: - -:::info Related Topics - -- [Sharding Bots](sharding) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx deleted file mode 100644 index c3d17197..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Sharding -description: All about Sharding Discord Bots. ---- - -# Sharding - -## What is Sharding? - -Sharding is the process of breaking up your bot into smaller pieces so that it has a better time handling -events. As [Discord's Documentation](https://discord.com/developers/docs/topics/gateway#sharding) puts -it, sharding is "a method of user-controlled guild sharding which allows for splitting events across -several gateway connections." - -Sharding is used only for large bots and takes up additional resources for managing the new processes. -Pycord automatically shards your bot, so the only thing you need to do is use an `AutoShardedClient` -or `AutoShardedBot` class instead of a plain `Client` or `Bot` class. Pretty cool, right? - -Just because you _can_ shard your bot doesn't mean you _should_. While Pycord makes it easy to shard -your bot, it isn't necessary to shard unless your bot is large. Sharding a small bot isn't -just useless, but _harmful_, as it uses extra resources and may slow down your bot. Discord -themselves will let you know when your bot needs sharding, so you won't need to worry about this until they contact you. - -## How Do I Shard in Pycord? - -Sharding in Pycord is straightforward. - -Just replace your `discord.Client`, `discord.Bot`, `commands.Bot` objects -with `discord.AutoShardedClient`, `discord.AutoShardedBot`, `commands.AutoShardedBot` respectively. - -These new objects have been inherited from the original objects, so all the functions from those other types should be present. - -If you want to specify the number of shards your bot uses, -just add the `shards` parameter, along with the number of shards you want. - -## Why Should I Shard my Bot? - -Sharding is very necessary for big bots. While your bot grows, it gets harder for your bot to control -how many guilds it is in and what parts of your code should do what. This is exactly what sharding -handles, it makes all of this easier for your bot. Remember, though, only shard your bot once it's -big enough, and that's at _least_ 1,000 guilds. - -:::info Related Topics - -- [Hosting your Bot](../Getting-Started/hosting-your-bot) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx deleted file mode 100644 index bd2969c1..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Subclassing Bots -description: Subclassing is a popular way of creating Discord Bots. Explore how you can create a Discord bot by subclassing. ---- - -## About - -Subclassing is another popular way of creating Discord Bots. Here, you create a bot by extending a bot class. To some advanced users, this is preferable to creating a bot instance with `bot = discord.Bot()`. - -Subclassing is an intermediate python concept, so we recommend you learn about it before continuing. Some good resources are: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -## Why Subclassing? - -Many developers prefer to subclass their bots for many reasons, some of them being: - -#### Skeletal Frameworks for Bots - -Developers often share their bots code on open-source platforms, mostly GitHub, and allow users to self-host the bot (running their own instance of the bot with the code provided by the developer. Permissions vary in accordance to licences). Here, users find it easier and more convenient to have a small file that imports the custom bot class and runs it, rather than having to go through the code of the bot and find out which file to run. This makes it easier for people not familiar with programming to run and customize the bot, since it often brings down the code to: - -```python title="./main.py" -from src import Bot - -bot = Bot() - -bot.run("TOKEN") -``` - -Here, all the commands are inside the `/src` folder that the user need not bother with. - -#### Running Multiple Instances - -Some developers may need to run multiple instances of their bot (perhaps on different bot accounts). For example, a developer might have a second bot for testing alpha features. This system makes it simpler for the developer, and allows them to maintain multiple versions of the bot in the same directory: - -```python title="./alpha_bot.py" -from src import Bot - -class AlphaBot(Bot): # subclasses Bot - ... # insert any custom configuration - -bot = AlphaBot() - -@bot.slash_command() # adds a new slash command to this subclassed bot -async def alpha_feature(ctx): - await ctx.respond("Alpha Feature!") - -bot.run("TOKEN") -``` - -There are many more reasons to subclass! It's not required, and won't affect the speed of the bot, but it may affect your development process, for the good or for the worse. You don't miss out on any features when you subclass, either. Some developers want the OOP feel, while some just prefer that method and find it easier. - -## Basic Example - -```python -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override the on_ready event - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') - -bot = MyBot() - -@bot.slash_command() # create a slash command -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run('token') -``` - -As you can see, instead of creating a bot object with `bot = discord.Bot()`, we subclass [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). We then create an instance of our new bot class and run it. Notice how we don't need to use the `@event` decorator. - -Here's another example: - -```python title="./src/bot.py" -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override on_ready - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') -``` - -```python title="./src/\_\_init\_\_.py" -from .bot import MyBot # import the MyBot class from the bot.py file -``` - -```python title="./main.py" -from src import MyBot # import MyBot from /src - -bot = MyBot() # create an instance of MyBot - -@bot.slash_command() -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run("TOKEN") # run the bot -``` - -These are just two ways you could do it. There are ton of other structures you can implement. It's up to you. - -So, should you subclass? There are no limitations you face if you decide to subclass your bot, but, once again, it's up to you. - -:::info Related Topics - -- [Making a Help Command](../Extensions/Commands/help-command) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx deleted file mode 100644 index 23220b0e..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Threads -description: Threads with Pycord ---- - -In programming, threads are a way to run multiple processes at the same time. In Discord, threads are -a way to keep multiple conversations going at the same time. Let's take a brief look at how to use threads in Pycord. - -:::tip - -Not all the methods and attributes will be covered in this guide, but you can find them in our documentation! -[Check it out!](https://docs.pycord.dev/en/stable/api/models.html#discord.Thread) - -::: - -## Creating a thread - -With a few simple lines of code, we can create threads in Pycord. - -:::important - -All public threads need a starting message. This message will start the thread. However, private threads -(which are unlocked with having your server boosted to Level 2), do not require a starting message. - -::: - -### Creating thread from a message - -```python title="Creating a Thread from a Message" -message = await ctx.send("My Starting Message") -await message.create_thread(name="thread name", auto_archive_duration=60) -``` - -You may also use other ways to create the thread, for example, by using `on_message` events or by commands. - -### Creating thread in a channel - -```python title="Creating a Thread from a Channel" -channel = bot.get_channel(...) # define this! -await channel.create_thread(name="Thread Name", message=None, auto_archive_duration=60, type=None, reason=None) -``` - -A thread type could be `news_thread`, `public_thread`, `private_thread`. You may use it by passing `type=discord.ChannelType.news_thread`. - -## Deleting Threads - -Deleting Threads is simple. You need to get a thread and then use the `delete` method. - -```python title="Deleting a Thread" -thread = bot.get_channel(thread_id) # you could use other ways to get a thread -await thread.delete() -``` - -## Editing Threads - -**Parameters** - -- `name` (str) – The new name of the thread - -- `archived` (bool) – Whether to archive the thread or not. - -- `locked` (bool) – Whether to lock the thread or not. - -- `invitable` (bool) – Whether non-moderators can add other non-moderators to this thread. Only available for private threads. - -- `auto_archive_duration` (int) – The new duration in minutes before a thread gets automatically archived for inactivity. Must be one of 60, 1440, 4320, or 10080. - -- `slowmode_delay` (int) – Specifies the slow-mode rate limit for users in the thread, in seconds. A value of 0 disables slow-mode. The maximum value possible is 21600. - -```python title="Editing a Thread" -thread = bot.get_channel(id) -await thread.edit( - name="New Name", - archived=True, - locked=True, - slowmode_delay=10, - auto_archive_duration=60, -) -``` - -As you can see, threads are very simple. Once you learn how to use them, it's easy to create whatever you want. - -## FAQ - -### Why am I getting a `Forbidden` error when I try to create a thread? - -A `Forbidden` error occurs when the bot does not have the correct permissions to create threads. - -### Why am I getting an Unknown Message error when I try to create a thread? - -Getting an error looking something like `discord.ext.commands.errors.CommandInvokeError: Command -raised an exception: HTTPException: 400 Bad Request (error code: 10008): Unknown Message`? - -There could be multiple reasons, some of them being: - -- The message does not exist -- The message already has a thread -- The message is in channel x, you are trying to start a thread in channel y. -- The message was deleted. - -:::info Related Topics - -<>{/* I can't think of any related topics for this at the moment. */} - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/voice/_category_.json b/i18n/ko/docusaurus-plugin-content-docs/current/voice/_category_.json deleted file mode 100644 index 8baf3da8..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/voice/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 6, - "label": "Voice" -} \ No newline at end of file diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/voice/index.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/voice/index.mdx deleted file mode 100644 index 835838c6..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/voice/index.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Voice ---- - -Welcome to the guide for voice features in Pycord. - -:::caution -This guide requires previous experience with Pycord and Python. -::: - -## Requirements - -The only requirement which is required for voice features is [`PyNaCl`](https://pypi.org/project/PyNaCl/). -The following features are optional: - -:::tip -Opus is also a required library, but this comes with Pycord. -Some hosts may not come with it, though, so remember to always check if required dependencies are installed. -::: - -- [`FFmpeg`](https://ffmpeg.org) - used for sending/receiving files other than `.pcm` and `.wav` -- [`Pycord.Wavelink`](https://github.com/Pycord-Development/Pycord.Wavelink), - [`Lavalink.py`](https://github.com/Devoxin/Lavalink.py), - [`Wavelink`](https://github.com/PythonistaGuild/Wavelink) or any other Python LavaLink library for music playback. diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/voice/playing.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/voice/playing.mdx deleted file mode 100644 index 7a58baee..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/voice/playing.mdx +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Wavelink Audio Player ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { - defaultOptions, -} from "@site/src/components/DiscordComponent"; - -# About - -Pycord and Wavelink try to keep the playing of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio playing feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/). - -## Starting out - -First you need to run a [Lavalink Server](https://github.com/freyacodes/Lavalink) to connect with. -There a multiple documentations to do this, so we are not covering that here. - -You also need to install the [wavelink](https://github.com/PythonistaGuild/Wavelink) library. - -```py title="Installing wavelink" -python3 -m pip install wavelink -``` - -You will now want to connect to your server via a node. - -```py title="Connect Node with Lavalink" -import discord -import wavelink - -bot = discord.Bot() - -async def connect_nodes(): - """Connect to our Lavalink nodes.""" - await bot.wait_until_ready() # wait until the bot is ready - - nodes = [ - wavelink.Node( - identifier="Node1", # This identifier must be unique for all the nodes you are going to use - uri="http://0.0.0.0:443", # Protocol (http/s) is required, port must be 443 as it is the one lavalink uses - password="youshallnotpass" - ) - ] - - await wavelink.Pool.connect(nodes=nodes, client=bot) # Connect our nodes -``` - -
- -Now you are finished making your node! Next, you will want to: - -1. Making a play command -2. Adding connect events - -### Making a play command - -To make a play command, you will need to make a function to connect and play audio in a voice channel. - -```py title="Play Command Example" -import typing - -@bot.slash_command(name="play") -async def play(ctx, search: str): - # First we may define our voice client, - # for this, we are going to use typing.cast() - # function just for the type checker know that - # `ctx.voice_client` is going to be from type - # `wavelink.Player` - vc = typing.cast(wavelink.Player, ctx.voice_client) - - if not vc: # We firstly check if there is a voice client - vc = await ctx.author.voice.channel.connect(cls=wavelink.Player) # If there isn't, we connect it to the channel - - # Now we are going to check if the invoker of the command - # is in the same voice channel than the voice client, when defined. - # If not, we return an error message. - if ctx.author.voice.channel.id != vc.channel.id: - return await ctx.respond("You must be in the same voice channel as the bot.") - - # Now we search for the song. You can optionally - # pass the "source" keyword, of type "wavelink.TrackSource" - song = await wavelink.Playable.search(search) - - if not song: # In case the song is not found - return await ctx.respond("No song found.") # we return an error message - - await vc.play(song) # Else, we play it - await ctx.respond(f"Now playing: `{song.title}`") # and return a success message -``` - - - -
- - play - -
- Now playing: Never Gonna Give You Up -
-
- -
- -Now that you've done this, the only thing left to do is make your connect events. - -### Adding connect events - -The final step to this guide is connecting the node to your server when the bot goes online. - -To make it, you will want to do the following: - -```py title="Adding connect events" -@bot.event -async def on_ready(): - await connect_nodes() # connect to the server - -@bot.event -async def on_wavelink_node_ready(payload: wavelink.NodeReadyEventPayload): - # Everytime a node is successfully connected, we - # will print a message letting it know. - print(f"Node with ID {payload.session_id} has connected") - print(f"Resumed session: {payload.resumed}") - -bot.run("token") -``` - -Congratulations! You have now implemented voice playing into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-docs/current/voice/receiving.mdx b/i18n/ko/docusaurus-plugin-content-docs/current/voice/receiving.mdx deleted file mode 100644 index 70f91507..00000000 --- a/i18n/ko/docusaurus-plugin-content-docs/current/voice/receiving.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Receiving Voice Samples ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -# About - -Pycord tries to keep the recording of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio recording feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/audio_recording.py). - -## Starting out - -The first thing you want to do is make a cache of your voice connections. This is fairly easy; as -it's just putting a variable with an empty dictionary in our code, such as `connections = {}`. - -You will now want to create your command for recording. - -```py title="Record Command Example" -import discord - -bot = discord.Bot() -connections = {} - -@bot.command() -async def record(ctx): # If you're using commands.Bot, this will also work. - voice = ctx.author.voice - - if not voice: - await ctx.respond("You aren't in a voice channel!") - - vc = await voice.channel.connect() # Connect to the voice channel the author is in. - connections.update({ctx.guild.id: vc}) # Updating the cache with the guild and channel. - - vc.start_recording( - discord.sinks.WaveSink(), # The sink type to use. - once_done, # What to do once done. - ctx.channel # The channel to disconnect from. - ) - await ctx.respond("Started recording!") -``` - - - -
- - record - -
- Started recording! -
-
- -
- -Now you are finished making your command for voice receiving! Next, you will want to: - -1. Make your finished callback -2. Make a stop command - -### Making a Callback - -To make a callback, you will want to define the currently undefined `once_done` function inside -our command, like so: - -```py title="Recorder Callback" -async def once_done(sink: discord.sinks, channel: discord.TextChannel, *args): # Our voice client already passes these in. - recorded_users = [ # A list of recorded users - f"<@{user_id}>" - for user_id, audio in sink.audio_data.items() - ] - await sink.vc.disconnect() # Disconnect from the voice channel. - files = [discord.File(audio.file, f"{user_id}.{sink.encoding}") for user_id, audio in sink.audio_data.items()] # List down the files. - await channel.send(f"finished recording audio for: {', '.join(recorded_users)}.", files=files) # Send a message with the accumulated files. -``` - - - - finished recording audio for:{" "} - {defaultOptions.profiles.bob.author} - - - -
- -Now that you've done this, the only thing left to do is make your stop command. - -### Making a Stop Command - -The final step to this guide is stopping the audio recording. This is the easiest step by far. - -To make it, you will want to do the following: - -```py title="Stop Recording Command" -@bot.command() -async def stop_recording(ctx): - if ctx.guild.id in connections: # Check if the guild is in the cache. - vc = connections[ctx.guild.id] - vc.stop_recording() # Stop recording, and call the callback (once_done). - del connections[ctx.guild.id] # Remove the guild from the cache. - await ctx.delete() # And delete. - else: - await ctx.respond("I am currently not recording here.") # Respond with this if we aren't recording. - -bot.run("token") -``` - -Congratulations! You have now implemented voice recording into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/ko/docusaurus-plugin-content-pagesindex.tsx b/i18n/ko/docusaurus-plugin-content-pagesindex.tsx deleted file mode 100644 index 6ca77bb2..00000000 --- a/i18n/ko/docusaurus-plugin-content-pagesindex.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import DefaultLayout from "@site/src/layouts/DefaultLayout"; -import PYCHero from "@site/src/components/PYCHero"; -import PYCButton from "@site/src/components/PYCButton"; - -export default function Home(): JSX.Element { - return ( - - -
- Imagine a place where you can learn how to create an awesome Discord - bot, equip it with Pycord, and have it running in less than a minute. - Imagine a place where you can learn everything about Pycord. Imagine a - guide. A Pycord Guide! -

- Whether you are a newbie or an experienced developer, you will find - everything you need to know about Pycord here. This guide will teach - you: -
    -
  • How to get a brand new bot running from scratch;
  • -
  • How to create Interactions, Context Menus and Commands;
  • -
  • In-depth concepts such as Embeds, Reactions, Help Commands, Paginators, etc;
  • -
  • Popular Topics such as working with Databases, Sharding, etc;
  • -
  • Ways to handle and manage common errors and best practices for bots;
  • -
  • And Much More!
  • -
-
-
- ); -} diff --git a/i18n/ko/docusaurus-theme-classic/footer.json b/i18n/ko/docusaurus-theme-classic/footer.json deleted file mode 100644 index 82aab2e0..00000000 --- a/i18n/ko/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "copyright": { - "message": "Copyright © 2022-2026 Pycord Development, All rights reserved.", - "description": "The footer copyright" - } -} diff --git a/i18n/ko/docusaurus-theme-classic/navbar.json b/i18n/ko/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 473b847e..00000000 --- a/i18n/ko/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "title": { - "message": "Pycord Guide", - "description": "The title in the navbar" - }, - "item.label.Home": { - "message": "Home", - "description": "Navbar item with label Home" - }, - "item.label.Docs": { - "message": "Docs", - "description": "Navbar item with label Docs" - }, - "item.label.GitHub": { - "message": "GitHub", - "description": "Navbar item with label GitHub" - }, - "item.label.Source": { - "message": "Source", - "description": "Navbar item with label Source" - } -} diff --git a/i18n/pt/code.json b/i18n/pt/code.json deleted file mode 100644 index 9cce6148..00000000 --- a/i18n/pt/code.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "theme.ErrorPageContent.title": { - "message": "This page crashed.", - "description": "The title of the fallback page when the page crashed" - }, - "theme.NotFound.title": { - "message": "Page Not Found", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "We could not find what you were looking for.", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.admonition.note": { - "message": "note", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "tip", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.danger": { - "message": "danger", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "info", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.caution": { - "message": "caution", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "Scroll back to top", - "description": "The ARIA label for the back to top button" - }, - "theme.blog.archive.title": { - "message": "Archive", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "Archive", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "Blog list page navigation", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "Newer Entries", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "Older Entries", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "Blog post page navigation", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "Newer Post", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "Older Post", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.blog.post.plurals": { - "message": "One post|{count} posts", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} tagged with \"{tagName}\"", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "View All Tags", - "description": "The label of the link targeting the tag list page" - }, - "theme.colorToggle.ariaLabel": { - "message": "Switch between dark and light mode (currently {mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "dark mode", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "light mode", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "Breadcrumbs", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription": { - "message": "{count} items", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "Docs pages", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "Previous", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "Next", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "One doc tagged|{count} docs tagged", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "{nDocsTagged} with \"{tagName}\"", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versionBadge.label": { - "message": "Version: {versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "latest version", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "Edit this page", - "description": "The link label to edit the current page" - }, - "theme.common.headingLinkTitle": { - "message": "Direct link to {heading}", - "description": "Title for link to heading" - }, - "theme.lastUpdated.atDate": { - "message": " on {date}", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": " by {user}", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "Last updated{atDate}{byUser}", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "Versions", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "Tags:", - "description": "The label alongside a tag list" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "Close", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "Blog recent posts navigation", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.copied": { - "message": "Copied", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "Copy code to clipboard", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "Copy", - "description": "The copy button label on code blocks" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "Toggle word wrap", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "Toggle the collapsible sidebar category '{label}'", - "description": "The ARIA label to toggle the collapsible sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "Main", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "Languages", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "On this page", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "Read More", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "Read more about {title}", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.blog.post.readingTime.plurals": { - "message": "One min read|{readingTime} min read", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.breadcrumbs.home": { - "message": "Home page", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "Docs sidebar", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "Close navigation bar", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← Back to main menu", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "Toggle navigation bar", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.SearchBar.seeAll": { - "message": "See all {count} results" - }, - "theme.SearchPage.documentsFound.plurals": { - "message": "One document found|{count} documents found", - "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.SearchPage.existingResultsTitle": { - "message": "Search results for \"{query}\"", - "description": "The search page title for non-empty query" - }, - "theme.SearchPage.emptyResultsTitle": { - "message": "Search the documentation", - "description": "The search page title for empty query" - }, - "theme.SearchPage.inputPlaceholder": { - "message": "Type your search here", - "description": "The placeholder for search page input" - }, - "theme.SearchPage.inputLabel": { - "message": "Search", - "description": "The ARIA label for search page input" - }, - "theme.SearchPage.algoliaLabel": { - "message": "Search by Algolia", - "description": "The ARIA label for Algolia mention" - }, - "theme.SearchPage.noResultsText": { - "message": "No results were found", - "description": "The paragraph for empty search result" - }, - "theme.SearchPage.fetchingNewResults": { - "message": "Fetching new results...", - "description": "The paragraph for fetching new search results" - }, - "theme.SearchBar.label": { - "message": "Search", - "description": "The ARIA label and placeholder for search button" - }, - "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "Clear the query", - "description": "The label and ARIA label for search box reset button" - }, - "theme.SearchModal.searchBox.cancelButtonText": { - "message": "Cancel", - "description": "The label and ARIA label for search box cancel button" - }, - "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "Recent", - "description": "The title for recent searches" - }, - "theme.SearchModal.startScreen.noRecentSearchesText": { - "message": "No recent searches", - "description": "The text when no recent searches" - }, - "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { - "message": "Save this search", - "description": "The label for save recent search button" - }, - "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "Remove this search from history", - "description": "The label for remove recent search button" - }, - "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "Favorite", - "description": "The title for favorite searches" - }, - "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "Remove this search from favorites", - "description": "The label for remove favorite search button" - }, - "theme.SearchModal.errorScreen.titleText": { - "message": "Unable to fetch results", - "description": "The title for error screen of search modal" - }, - "theme.SearchModal.errorScreen.helpText": { - "message": "You might want to check your network connection.", - "description": "The help text for error screen of search modal" - }, - "theme.SearchModal.footer.selectText": { - "message": "to select", - "description": "The explanatory text of the action for the enter key" - }, - "theme.SearchModal.footer.selectKeyAriaLabel": { - "message": "Enter key", - "description": "The ARIA label for the Enter key button that makes the selection" - }, - "theme.SearchModal.footer.navigateText": { - "message": "to navigate", - "description": "The explanatory text of the action for the Arrow up and Arrow down key" - }, - "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "Arrow up", - "description": "The ARIA label for the Arrow up key button that makes the navigation" - }, - "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "Arrow down", - "description": "The ARIA label for the Arrow down key button that makes the navigation" - }, - "theme.SearchModal.footer.closeText": { - "message": "to close", - "description": "The explanatory text of the action for Escape key" - }, - "theme.SearchModal.footer.closeKeyAriaLabel": { - "message": "Escape key", - "description": "The ARIA label for the Escape key button that close the modal" - }, - "theme.SearchModal.footer.searchByText": { - "message": "Search by", - "description": "The text explain that the search is making by Algolia" - }, - "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "No results for", - "description": "The text explains that there are no results for the following search" - }, - "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "Try searching for", - "description": "The text for the suggested query when no results are found for the following search" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "Believe this query should return results?", - "description": "The text for the question where the user thinks there are missing results" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "Let us know.", - "description": "The text for the link to report missing results" - }, - "theme.SearchModal.placeholder": { - "message": "Search docs", - "description": "The placeholder of the input of the DocSearch pop-up modal" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "Try again", - "description": "The label of the button to try again rendering when the React error boundary captures an error" - }, - "theme.common.skipToMainContent": { - "message": "Skip to main content", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "Tags", - "description": "The title of the tag list page" - } -} diff --git a/i18n/pt/docusaurus-plugin-content-blog/options.json b/i18n/pt/docusaurus-plugin-content-blog/options.json deleted file mode 100644 index 9239ff70..00000000 --- a/i18n/pt/docusaurus-plugin-content-blog/options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": { - "message": "Blog", - "description": "The title for the blog used in SEO" - }, - "description": { - "message": "Blog", - "description": "The description for the blog used in SEO" - }, - "sidebar.title": { - "message": "Recent posts", - "description": "The label for the left sidebar" - } -} diff --git a/i18n/pt/docusaurus-plugin-content-docs/current.json b/i18n/pt/docusaurus-plugin-content-docs/current.json deleted file mode 100644 index 36b4849a..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.defaultSidebar.category.Getting Started": { - "message": "Getting Started", - "description": "The label for category Getting Started in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Interactions": { - "message": "Interactions", - "description": "The label for category Interactions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Application Commands": { - "message": "Application Commands", - "description": "The label for category Application Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.UI Components": { - "message": "UI Components", - "description": "The label for category UI Components in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Extensions": { - "message": "Extensions", - "description": "The label for category Extensions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Commands": { - "message": "Commands", - "description": "The label for category Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Pages": { - "message": "Pages", - "description": "The label for category Pages in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Voice": { - "message": "Voice", - "description": "The label for category Voice in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Popular Topics": { - "message": "Popular Topics", - "description": "The label for category Popular Topics in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar defaultSidebar" - } -} diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png deleted file mode 100644 index 7480e1da90a413f8dfe8e13b66a9a2a8c5dc2bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40520 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 CfS#QI diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg b/i18n/pt/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg deleted file mode 100644 index ce6b5110ab3b4285f55402fb88c1b8a8f6ba9900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78518 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 diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png deleted file mode 100644 index 32a47d0424f1ab420ca363682a12460aff040c91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39618 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 aeS&BlM7jQ%=K2BnBlKRJKmVP^m;VLX8_o0p diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/_category_.json b/i18n/pt/docusaurus-plugin-content-docs/current/extensions/_category_.json deleted file mode 100644 index 309b494a..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 5, - "label": "Extensions", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json b/i18n/pt/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json deleted file mode 100644 index 652aa4ee..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Bridge" -} \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx deleted file mode 100644 index 451775d3..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Bridge ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -## Concept - -Let's say that you want to make a command that is both a Slash Command and a Prefixed Command. Now, you could just copy and paste the code from the first command callback to the other and make some adjustments, but that's not very efficient. - -This is where the `ext.bridge` module comes in. It allows you to use one callback to make both a Slash Command and a Prefixed Command. - -### Example Usage - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def hello(ctx): - await ctx.respond("Hello!") - -bot.run("TOKEN") -``` - - - -

- - hello - -
- Hello! - - - - !hello - - - -
- - !hello - -
- Hello! -
- - -## Syntax - -First, instead of using `discord.Bot` or `commands.Bot`, we use `bridge.Bot`. `bridge.Bot` does inherit from `commands.Bot`, so you can do anything with `bridge.Bot` that `commands.Bot` can do. -Then, we define a command with `@bot.bridge_command()`. This makes a Bridge Command, which has both a Prefixed Command counterpart and a Slash Command counterpart. -Next, the callback has access to a `ctx` object, which is the context of the command. This context is either of `BridgeApplicationContext` type or `BridgeExtContext`. Because of that, it makes detecting how the function was called easier. - -### Using Bridge Commands in a Cog - -Like Slash Commands and Prefixed Commands, you can use Bridge Commands in a Cog. You can do this by using the `bridge_command` decorator. Here's an example: - -```python -import discord -from discord.ext import bridge, commands - -class Greetings(commands.Cog): - def __init__(self, bot): - self.bot = bot - - @bridge.bridge_command() - async def hello(self, ctx): - await ctx.respond("Hello!") - - @bridge.bridge_command() - async def bye(self, ctx): - await ctx.respond("Bye!") - -def setup(bot): - bot.add_cog(Greetings(bot)) -``` - -The cog will automatically split the Bridge Command into their Slash Command and Prefixed Command counterparts. - - - -
- - hello - -
- Hello! -
- - - !hello - - - -
- - !hello - -
- Hello! -
- - -
- - bye - -
- Bye! -
- - - !bye - - - -
- - !bye - -
- Bye! -
-
- -### Deferring - -You can defer if you want to communicate to the user that your bot is busy processing the command. This is done by using `ctx.defer()`. For the Slash Command implementation, `ctx.defer()` calls the function that gives out a "Bot is thinking" message. For the Prefixed Command implementation, `ctx.defer()` enables the typing indicator. - - - -### Options - -Options are pretty straightforward. You just specify them like you do with prefixed commands, and you're all set! - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def sum(ctx, a: int, b: int): - await ctx.respond(a + b) - -bot.run("TOKEN") -``` - - - -
- - sum - -
- 4 -
- - - !sum 2 2 - - - -
- - !sum 2 2 - -
- 4 -
-
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json b/i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json deleted file mode 100644 index 63f8e08e..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx deleted file mode 100644 index bf345c07..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Command Groups ---- - -Command groups are a way to create subcommands for your commands. For example, `!afk set` or `!afk -remove`. - -## Syntax - -Creating a command group is very simple. - -```python title="Command Groups Example" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!') - -@bot.group() -async def afk(): - pass - -@afk.command() -async def set(): - ... - -@afk.command() -async def remove(): - ... - -# Another command group - -@bot.group(invoke_without_command=True) # Indicates if the group callback should begin parsing and invocation only if no subcommand was found. -async def math(ctx): - await ctx.send('Subcommand not found') - -@math.command() -async def add(ctx, a: int, b: int): - ... - -@math.command() -async def subtract(ctx, a: int, b: int): - ... -``` - -To create a command group, the command's decorator must be `@bot.group`. Once you have a command with -that decorator, you can use `@function.command()`, such as `@math.command()`. Now, you have subcommand -groups! - - - -:::info Related Topics - -- [Prefixed Commands](./prefixed-commands.mdx) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx deleted file mode 100644 index e84fd42d..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx +++ /dev/null @@ -1,481 +0,0 @@ ---- -title: Help Command ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Pycord's `commands` extension comes with a built-in help command. In this guide, we will take a look at them as well as learn how to create your own. Let's dive in! - -:::note - -This guide demonstrates using object-oriented programming and subclassing to make a help command for your -Pycord bot. It is important to understand these two concepts before continuing. - -**Learning Resources**: - -- [W3Schools - Python Subclassing](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools - Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -::: - -## The Wrong Way - -A popular way to create a help command is to disable the built-in help command and create your own. This is not recommended as it will lead to a lot of confusion. - -```python title="The Wrong Way" -bot = commands.Bot(command_prefix='!', help_command=None) -# OR -bot.help_command = None -# OR -bot.remove_command("help") - -@bot.command() -async def help(ctx, *, argument=None): - ... -``` - -While it's possible to create a help command this way, doing so does not utilize the full capabilities -of making one with Pycord. Making a help command with subclassing and OOP will save time and effort. - -## Types of Help Commands - -There are two types of built-in help commands: - -- [`DefaultHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.DefaultHelpCommand) -- [`MinimalHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.MinimalHelpCommand) - -`DefaultHelpCommand` is the command enabled by default. It isn't the best looking, but `MinimalHelpCommand` can help make it look a bit better. - - - - -```python title="Default Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.DefaultHelpCommand()) # help_command is DefaultHelpCommand by default so it isn't necessary to enable it like this -# We enable it here for the sake of understanding - -... - -bot.run("token") -``` - - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- - -```python title="Minimal Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.MinimalHelpCommand()) - -... - -bot.run("token") -``` - - - - !help - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
- -
- -
- -## Updating Built-in Help Commands - -Let's try to make the `MinimalHelpCommand` look better. We can do this by putting its content in an -embed. - -```python title="Minimal Help Command Example" -bot = commands.Bot(command_prefix='!') - - -class MyNewHelp(commands.MinimalHelpCommand): - async def send_pages(self): - destination = self.get_destination() - for page in self.paginator.pages: - emby = discord.Embed(description=page) - await destination.send(embed=emby) - -bot.help_command = MyNewHelp() -``` - -Let's go through the code. - -First, we create a new class called `MyNewHelp`. This class is a subclass of `MinimalHelpCommand`. - -Next, we override the `send_pages` method. This method is responsible for sending the help command to -the user. We override this method because we don't want to change the content of the pages, just how -they are sent. - -We use the `get_destination` method to get the destination of the message. This is the channel or use that the help -command is to be sent to. - -We use the `paginator.pages` property to get the different pages of the help command. We put the page -in an embed, and then send the embed to the destination channel. - -Finally, we set this as our new help command using `bot.help_command = MyNewHelp()`. - - - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a - category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
-
- -## Creating Your Help Command - -Not satisfied with the built-in help commands? You can create your own! - -For this, we will subclass the `HelpCommand` class. - -There are 4 methods that we need to override: - -- `HelpCommand.send_bot_help(mapping)` that gets called with `help` -- `HelpCommand.send_command_help(command)` that gets called with `help ` -- `HelpCommand.send_group_help(group)` that gets called with `help ` -- `HelpCommand.send_cog_help(cog)` that gets called with `help ` - -### Bot Help - -```python title="Bot Help Example" -class MyHelp(commands.HelpCommand): - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help") - for cog, commands in mapping.items(): - command_signatures = [self.get_command_signature(c) for c in commands] - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's go through the code. - -- First, we create a new class called `MyHelp`. This class is a subclass of `HelpCommand`. - -- Next, we override the `send_bot_help` method. This method is responsible for sending the main help - command to the user. - -- We create an embed with the title "Help". - -- We iterate through `mapping.items()`, which returns a list of tuples, the first element being the - cog and the second element being a list of commands. - -- By using `self.get_command_signature(c)` we get the signature of the command, also known as the - `parameters` or `arguments`. - -- There is a chance that the cog is empty, so we use `if command_signatures:`. - -- We get the name of the cog using `getattr(cog, "qualified_name", "No Category")`. This calls the - cog's attribute `qualified_name` which returns "No Category" if the cog has no name. - -- We add a field to the embed with the name of the cog and the value of the command signatures. - -- Finally, we send the embed to the channel. - -Let's improve the code a little. - -```python title="Improved Bot Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - command_signatures = [self.get_command_signature(c) for c in filtered] - - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Now the help command won't show commands that the user can't use, as well as aliases for commands. -Let's get the help command to show command aliases. - -### Command Help - -This function is called when the user uses `help `. - -```python title="Command Help Example" -class MyHelp(commands.HelpCommand): - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command), color=discord.Color.random()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's quickly go through the code we haven't discussed yet. - -- In line 3, we create an embed with a title the signature of the command (so that the title of the - embed looks like ` [parameter]`), and a random color. - -- In lines 4 and 5, we get the command's `help` description and add it to the embed. The help description - of a command can be specified in the docstrings of a command function. For example: - - ```` - ```python - @bot.command() - async def ping(ctx): - """Returns the latency of the bot.""" - await ctx.send(f"Pong! {round(bot.latency * 1000)}ms") - ``` - ```` - -- Line 6 is shorthand for - - ```python - alias = command.aliases - if alias: - ... - - # is the same as - - if alias := command.aliases: - ... - ``` - - A very helpful (but not well-known) Python shorthand! - -- In line 7, we get the aliases of the command and add them to the embed. - -### Cog Help - -This is pretty easy! - -```python title="Custom Cog Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_cog_help(self, cog): - embed = discord.Embed(title=cog.qualified_name or "No Category", description=cog.description, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(cog.get_commands()): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Once again, we create an embed, get the commands that the user can use, and add them to the embed. - -### Group Help - -Similar to the cog help, this is pretty easy! - -```python title = "Custom Group Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_group_help(self, group): - embed = discord.Embed(title=self.get_command_signature(group), description=group.help, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(group.commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Add all of these methods together, and you have a fully functioning help command! - -
-Click to see the final code for this section -
- -:::note - -The following code has been slightly edited from the tutorial version. - -::: - -```python title="Custom Help Command Example" -class SupremeHelpCommand(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - if command_signatures := [ - self.get_command_signature(c) for c in filtered - ]: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command) , color=discord.Color.blurple()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_help_embed(self, title, description, commands): # a helper function to add commands to an embed - embed = discord.Embed(title=title, description=description or "No help found...") - - if filtered_commands := await self.filter_commands(commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No help found...") - - await self.get_destination().send(embed=embed) - - async def send_group_help(self, group): - title = self.get_command_signature(group) - await self.send_help_embed(title, group.help, group.commands) - - async def send_cog_help(self, cog): - title = cog.qualified_name or "No" - await self.send_help_embed(f'{title} Category', cog.description, cog.get_commands()) - -bot.help_command = SupremeHelpCommand() -``` - -
-
- -## Command Attributes - -How can you add cooldowns, set aliases, and change the name of help commands? Command attributes can -help you do all of that, and more! - -```python title="Help Command Attributes" -attributes = { - 'name': "help", - 'aliases': ["helpme"], - 'cooldown': commands.CooldownMapping.from_cooldown(3, 5, commands.BucketType.user), -} - -# You need to use CooldownMapping.from_cooldown(rate, per, type) - -bot.help_command = MyHelp(command_attrs=attributes) -``` - -## Error Handling - -When a user attempts to use a command that does not exist, we need to inform the user. -We can do this by overriding the `send_error_message` function. - -```python title="Custom Help Error Example" -class MyHelp(commands.HelpCommand): - async def send_error_message(self, error): - embed = discord.Embed(title="Error", description=error, color=discord.Color.red()) - channel = self.get_destination() - - await channel.send(embed=embed) -``` - - - - !help update_pycord - - - - Command 'update_pycord' not found. - - - - -## Credits - -Most of the content from this guide is from -[InterStella0's walkthrough guide on subclassing HelpCommand](https://gist.github.com/InterStella0/b78488fb28cadf279dfd3164b9f0cf96). -Thanks to InterStella0 for making this guide amazing. - -:::info Related Topics - -- [Subclassing Bots](../../Popular-Topics/subclassing-bots) -- [Prefixed Commands](./prefixed-commands) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx deleted file mode 100644 index 87bef7ac..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx +++ /dev/null @@ -1,324 +0,0 @@ ---- -title: Prefixed Commands -description: Learn how to use the commands extension for Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Before Discord added slash commands, all bots had prefixed commands. A user would type the bot's prefix -followed by a word or phrase to invoke a command, such as `?help` or `!help`. -However, this prefixed commands system isn't native to Discord! Developers made use of an `on_message` -event to check if the message began with a certain character, then invoke the command. Every time a -message was sent, the bot would see the message and check for its "prefix" - -The syntax becomes a little more complicated when you want to have multiple commands. There are several -disadvantages to this system. This is where the commands extension comes in. `ext.commands` has -various advantages, such as: - -- Simpler syntax -- Easier to use -- Easier to parse user input -- Comes with built-in help commands -- Comes with a built-in system for categorizing commands - - - - -```python title="Prefixed Commands with Events" -import discord - -client = discord.Client() - -@client.event -async def on_message(message): - if message.content.startswith("!ping"): - await message.channel.send("Pong!") - - elif message.content.startswith("!announce"): - if len(message.content.split(" ")) < 3: - await message.channel.send("You need to specify a title and a message. Correct usage: `!announce Hello Hello everyone!`") - return - - msg = message.content.split(" ", 2) - title = msg[1] - content = msg[2] - - await message.channel.send("**{}**\n{}".format(title, content)) - - elif message.content.startswith("!"): - await message.channel.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !help - - - Unknown Command. - -
- -
- - -```python title="The Commands Extension" -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix="!", intents=intents) - -@bot.command() -async def ping(ctx): - await ctx.send("Pong!") - -@bot.command() -async def announce(ctx, title, *, message): - await ctx.send("**{}**\n{}".format(title, message)) - -@bot.event -async def on_command_error(ctx, error): - if isinstance(error, commands.CommandNotFound): - await ctx.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !pycord - - - Unknown command. - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
- !announce -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The commands extension has many more uses. This example only showcases the basic features mentioned -in the previous example. Other things you can do with the commands extension include using a different -built-in help command and creating your own. The following tutorials showcase these. - -::: - -
-
- -## Syntax - -Before we check out the syntax, let's take a look at the bot classes. - -> `discord.Client` - Contains only events. -> -> `discord.Bot` - Subclasses `discord.Client`, adds commands. -> -> `discord.ext.commands.Bot` - Subclasses `discord.Bot`, adds prefixed commands, cogs, and more. - -This means that `discord.ext.commands.Bot` has both slash commands and prefixed commands, as well as -events, cogs and more. - -Now let's look at the syntax. - -```python title="A Simple Prefixed Bot" -import discord -from discord.ext import commands # Import the commands extension -# discord.ext.commands are not the same as discord.commands! - -intents = discord.Intents.default() #Defining intents -intents.message_content = True # Adding the message_content intent so that the bot can read user messages - -bot = commands.Bot(command_prefix="!", intents=intents) # You can change the command prefix to whatever you want. - -@bot.command() # This is the decorator we use to create a prefixed command. -async def ping(ctx): # This is the function we will use to create the command. - await ctx.send("Pong!") # This is the response the bot will send. - - -bot.run("token") # Run the bot with your token. -``` - - - - !ping - - - Pong! - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The help command is a built-in command and is enabled by default. You will learn more about it in the -following guides. - -::: - -## Parameters - -Prefixed commands can take parameters, just like slash commands. You can specify the parameters in -the function itself. - -```python title="Parameters Example 1" -@bot.command() -async def echo(ctx, *, message): - await ctx.send(message) -``` - -`ctx` is the context of the message. `*` means that the parameter can be any number of words. `message` -is the parameter. If you had not passed `*`, `message` would only have been one word. - -For example, if a user had used `!echo hello world`, `message` would have been `hello`. Since we -passed `*`, `message` is `hello world`, or the rest of the message. - -We can pass multiple parameters too! - -```python title="Parameters Example 2" -@bot.command() -async def echo(ctx, channel:discord.TextChannel, title, *, message): - await channel.send("**{}**\n{}".format(title, message)) -``` - -In the example above, `channel` is a parameter that is of type `discord.TextChannel`. When you -specify the type of the parameter, Pycord will automatically try to convert the parameter to that type. -That is why you can use `channel.send` directly without needing to convert it first. - -We also have a new parameter, `title`. This does not have a type, so it will be a string. `*` means -that the rest of the message belongs to the next parameter, in this case, `message`. - -When a user types `!echo #general Greetings! Hello World!`, `channel` will be the text channel -`#general`, `title` will be `Greetings!` and `message` will be `Hello World!`. - -Let's take an example where the user passes `!echo #general Holiday Greetings! Greetings to you all!`. -Here, the user wants the title to be "Holiday Greetings!" and the message to be "Greetings to you all!". -However, since Pycord parses the message at whitespaces, the title will end up being "Holiday" and the -message "Greetings! Greetings to you all!". The user can prevent this by typing `!echo "Holiday -Greetings!" Greetings to you all!`. - - - - - - !echo #general Holiday Greetings! Greetings to you all! - - - Holiday -
- Greetings! Greetings to you all! -
- - !echo #general "Holiday Greetings!" Greetings to you all! - - - Holiday Greetings! -
- Greetings to you all! -
-
- -Let's check out another example for parameters and parameter types. - -```python title="Parameters Example 3" -import random - -@bot.command() -async def gtn(ctx, guess:int): - number = random.randint(1, 10) - if guess == number: - await ctx.send("You guessed it!") - else: - await ctx.send("Nope! Better luck next time :)") -``` - -If you had not specified the type of the parameter, it would have been a string. And since `"5"` is not -the same as `5` in python, the bot would have responded with "Nope! Better luck next time :)". -Even if you do not specify the type of the parameter, you can still convert it later on, in this case, -with `int(guess)`. - -:::info Related Topics - -- [Command Groups](groups) -- [Rules and Common Practices](../../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json b/i18n/pt/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json deleted file mode 100644 index baeba701..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Pages", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx deleted file mode 100644 index be90b035..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Paginator Basics ---- - -# Paginator Basics - -## [Page](https://docs.pycord.dev/en/stable/ext/pages/index.html#page) - -This class contains two attributes: `content` and `embeds`, which correspond to the attributes of the same name on the -`discord.Message` class. -To create a new Page, use the following syntax: - -```py -import discord -page = Page(content="My Page Content", embeds=[discord.Embed(title="My First Embed Title")]) -``` - -## [PageGroup](https://docs.pycord.dev/en/stable/ext/pages/index.html#pagegroup) - -This class represents a group of pages. It uses most of the same parameters as `Paginator`, which allows each -`PageGroup` to effectively have its own settings and behaviours. - -## [Paginator](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator) - -This is the main class for `ext.pages`, and is used to control most of the functionality of the extension. - -In its most basic form, with no arguments provided (default values listed below), a paginator can be created like so: - -```py title="Paginator Example" -import discord -from discord.ext.pages import Paginator, Page - -my_pages = [ - Page( - content="This is my first page. It has a list of embeds and message content.", - embeds=[ - discord.Embed(title="My First Embed Title"), - discord.Embed(title="My Second Embed Title"), - ], - ), - Page( - content="This is my second page. It only has message content.", - ), - Page( - embeds=[ - discord.Embed( - title="This is my third page.", - description="It has no message content, and one embed.", - ) - ], - ), -] -paginator = Paginator(pages=my_pages) -``` - -The only required parameter for `Paginator` is the `pages` parameter, which is usually a list of `Page` objects. - -You can also pass in a list of `PageGroup` objects, a list of strings, a list of embeds, or a list of lists of embeds. - -Once the `Paginator` instance is created, you can call either -[`Paginator.send()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.send) -or [`Paginator.respond()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.respond) -to send a message or response with the paginator's contents. - -#### Depending on what's being passed to the `pages` parameter, the behaviour of the paginator may differ: - -- Passing a list of `PageGroup` objects will essentially treat each `PageGroup` as its own Paginator, with most - `Paginator` attributes able to be set independently for each `PageGroup`. - \- Each `PageGroup` accepts its own `pages` parameter, which inherits the same behaviour as the `pages` parameter - of `Paginator`, except it cannot contain other `PageGroup` objects. -- If a page is a `Page` object, this will allow you to specify both the `discord.Message.content` and - `discord.Message.embeds` attributes for a page. - \- **This is the preferred method of defining a page.** -- If a page is a string, this will be used for the `discord.Message.content` attribute. This type of page cannot have - any embeds. -- If a page is a list of embeds, this will be used for the `discord.Message.embeds` attribute. This type of page - cannot have any message content. -- If a page is a list of lists of embeds, each parent list item will create a page containing all embeds from its - child list. This type of page cannot have any message content. - -#### Parameters for the `Paginator` class which have default values: - -- `show_disabled` **:** `True` - - Show buttons that are disabled (i.e. can't be clicked) -- `author_check` **:** `True` - - Only the author can interact with the paginator. -- `timeout` **:** `180` _(seconds)_ - - The paginator will time out and become inactive after this many seconds. -- `disable_on_timeout` **:** `True` - - If the paginator times out, it will be automatically disabled and all buttons will be unusable. -- `use_default_buttons` **:** `True` - - Use the default set of 4 buttons and a page indicator. -- `show_indicator` **:** `True` - - When using the default buttons, shows a middle 5th button with the current/total page numbers. - -**For other parameters that can be set on initialization, please check the -[API Reference](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator)** - -## [PaginatorButton](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatorbutton) - -This class represents a button used to navigate between the pages of a paginator. It's also used to create the page -indicator. - -When creating your own custom buttons, you can either use this class directly or subclass it to add any additional -functionality you may need. - -To add custom buttons to the paginator instead of the default navigation buttons, you have two options to do so: - -1. **Using the `custom_buttons` parameter of `Paginator`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - buttons = [ - PaginatorButton("first", label="<<-", style=discord.ButtonStyle.green), - PaginatorButton("prev", label="<-", style=discord.ButtonStyle.green), - PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True), - PaginatorButton("next", label="->", style=discord.ButtonStyle.green), - PaginatorButton("last", label="->>", style=discord.ButtonStyle.green), - ] - paginator = Paginator( - pages=["Page 1", "Page 2", "Page 3"], - show_indicator=True, - use_default_buttons=False, - custom_buttons=buttons, - ) - ``` -2. **Using `Paginator.add_button()`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"], use_default_buttons=False) - paginator.add_button(PaginatorButton("prev", label="<", style=discord.ButtonStyle.green)) - paginator.add_button(PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True)) - paginator.add_button(PaginatorButton("next", label=">", style=discord.ButtonStyle.green)) - ``` - -If you want to use the default navigation buttons, but not all of them, you can also use `Paginator.remove_button()` to -selectively remove them: - -```py -from discord.ext.pages import Paginator - -paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"]) -paginator.remove_button("first") -paginator.remove_button("last") -``` - -## [PaginatorMenu](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatormenu) - -This class represents the `discord.Select` menu used to navigate between `PageGroup` instances. In most situations, you -will not need to interact with this class directly. - -If you do subclass it, you'll likely want to call `super()` in your `__init__` method to ensure that the `PageGroup` -navigation functionality is retained. - -## Usage Examples - -For a comprehensive list of examples showing all `Paginator` functionality, please see the -[example in cog form](https://github.com/Pycord-Development/pycord/blob/master/examples/views/paginator.py) in the repo. - -## Support and Feedback - -If you have any questions, suggestions, or feedback for `ext.pages`, please join the -[Discord server](https://discord.gg/pycord). diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx deleted file mode 100644 index b8d68925..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Paginator FAQ ---- - -# Paginator FAQ - -- **What's the difference between `Paginator.send()` and `Paginator.respond()`?** - - `Paginator.send()` is used to send a channel message (DMChannel or TextChannel) with the paginator. - - `Paginator.respond()` is used to send an interaction response (or followup) message with the paginator. - -- **How can the bot send a paginator to a different destination than where it was invoked?** - - Use the `target` parameter in `Paginator.send()` or `Paginator.respond()`. - - You can also set the `target_message` parameter to control what's shown as a response where the paginator was originally invoked. - - For `Paginator.respond()`, this parameter is required if `target` is set, as an interaction requires being responded to. - -- **How can I change the paginator's behavior without re-creating and re-sending it?** - - Use the `Paginator.update()` method. - -- **How can I make the bot actually do something with the contents of a page?** - - Use the (upcoming) `Paginator.page_action()` method. diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json b/i18n/pt/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json deleted file mode 100644 index 36dfb009..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Tasks" -} \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx deleted file mode 100644 index 848f6066..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Tasks ---- - -## Concept - -So you want to run a background task running at some specified interval? Thankfully, that's a common thing to do, whether you're working with some API or handling some background logic don't worry, the Pycord tasks extension is here to make life easier for you! - -With the tasks extension, you can make background tasks without worrying about the asyncio hell and mind bogglers like "what if my internet dies" and "how do I handle reconnecting" with the added benefit of a lot of useful additions that are one line of code away! - -### Example Usage - -```py -import discord -from discord.ext import tasks - -bot = discord.Bot() - -@bot.event -async def on_ready(): - very_useful_task.start() - -@tasks.loop(seconds=5) -async def very_useful_task(): - print('doing very useful stuff.') - -bot.run("TOKEN") -``` - -If you do run this code in your terminal you should see something like this after about 15 seconds: - -``` -doing very useful stuff. -doing very useful stuff. -doing very useful stuff. -``` - -For a more useful example here's a task in a cog context ripped straight from the [docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#recipes): - -```py -from discord.ext import tasks, commands - -class MyCog(commands.Cog): - def __init__(self): - self.index = 0 - self.printer.start() - - def cog_unload(self): - self.printer.cancel() - - @tasks.loop(seconds=5) - async def printer(self): - print(self.index) - self.index += 1 -``` - -As you'd expect this will increment a number and print it out every 5 seconds like so: - -```sh -0 -# 5 seconds later -1 -# 5 more seconds later -2 -# ... -``` - -## [Tasks](https://docs.pycord.dev/en/stable/ext/tasks/index.html) - -Now let's get into the nitty-gritty of tasks. - -As you've seen tasks can work in both outer scope and class contexts and the handle is roughly the same, you define a task using the `tasks.loop` decorator and use the `start` method to start it, the difference is you add the `self` argument when in a class context so since most people have all their bot's code in Cogs all the following code blocks will be in a Cog context to make it easy to copy it then apply whatever modifications you might need! - -### [Creating a task](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop) - -A look at `discord.ext.tasks.loop`'s definition in the documentation reveals that: - -1. As you've seen before it expects the time between each execution, that however doesn't have to be in seconds as - there are `seconds`, `minutes` and `hours` parameters to make it easier for us, they can also be floats in case you want - ultra-precision. -2. You can also pass in a `datetime.time` object or a sequence of them in the `time` parameter which will make it run - at the specified time(s). -3. You can pass in how many times a loop runs before it stops by passing in the `count` parameter, you can use `None` - to make it run forever which is also the default. -4. The loop function **_must_** be a coroutine. - -These are all really useful, and they aren't the only parameters so if you want to know more about them check out the -[docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop)! - -### Attributes - -A task has the following attributes: - -- `current_loop`: The current loop the task is on. -- `hours`, `minutes`, `seconds`: attributes that represent the time between each execution. -- `time`: A list of datetime.time objects that represent the times the task will run, returns `None` if no datetime - objects were passed. -- `next_iteration`: A `datetime.datetime` object that represents the next time the next iteration of the task will - run, can return `None` if the task stopped running. - -These attributes serve as a really powerful asset to get info about your loop. - -### Example - -Now let's create a cog that handles a leaderboard we have in our bot using Tasks then explain what we did after that and -also provide a refresher of how slash commands groups work in cogs. - -For the sake of this example let's pretend that we have a leaderboard module that does all the leaderboard handling for -us and that computing the leaderboard is very expensive computationally wise, so we want to store one version of it that -gets regularly updated instead of generating it every time someone calls the `/leaderboard view` command. - -```py -from discord.ext import tasks, commands -from discord.commands import SlashCommandGroup, CommandPermissions - -from leaderboard import * # Mock leaderboard module. - -class LeaderboardCog(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.update_leaderboard.start() - self.leaderboard_embed = generate_leaderboard_embed() - - leaderboard = SlashCommandGroup(name='leaderboard', description='Leaderboard commands.') - - @tasks.loop(minutes=10) - async def update_leaderboard(self): - print('Updating leaderboard...') - await update_leaderboard() - self.leaderboard_embed = generate_leaderboard_embed() - - @update_leaderboard.before_loop - async def before_update_leaderboard(self): - await self.bot.wait_until_ready() - print("About to start updating leaderboard.") - - @update_leaderboard.after_loop - async def after_update_leaderboard(self): - leaderboard_cleanup() - print("Stopped updating leaderboard.") - - @update_leaderboard.error - async def update_leaderboard_error(self, error): - print(f"Oh no, an error occurred while updating the leaderboard. Error: {error}") - - @leaderboard.command() - async def view(self, ctx): - await ctx.respond(embed=self.leaderboard_embed) - - @leaderboard.command() - async def update_info(self, ctx): - await ctx.respond(f"""***Leaderboard Info***\n - Last update: {(600 - self.update_leaderboard.next_iteration.timestamp())//60} minutes ago.\n - Next update: in {self.update_leaderboard.next_iteration.timestamp() // 60} minutes.\n - Time between loops: {self.update_leaderboard.minutes} minutes.\n - Times updated this session: {self.update_leaderboard.current_loop}. - Running? {self.update_leaderboard.is_running()} - Failed? {self.update_leaderboard.failed()}""", ephemeral=True) - - # Now for the owner only commands: - - leaderboard_config = SlashCommandGroup(name="leaderboard_config", description="Leaderboard configuration commands", permission=[CommandPermissions("owner", 2, True)]) - - @leaderboard_config.command() - async def set_time_between_updates(self, ctx, minutes: int): - self.update_leaderboard.change_interval(minutes=minutes) - await ctx.respond(f"Set time between updates to {minutes} minutes.") - - @leaderboard_config.command() - async def stop(self, ctx): - self.update_leaderboard.stop() - await ctx.respond("Stopped the leaderboard update.") - - @leaderboard_config.command() - async def restart(self, ctx): - self.update_leaderboard.restart() - await ctx.respond("Restarted the leaderboard update.") - -def setup(bot): - bot.add_cog(LeaderboardCog(bot)) -``` - -Phew, that was quite a bit of code. - -Now to explain what's going on: - -First things first we create a cog and in its `__init__` function we start the `update_leaderboard` task and generate -the first instance of our leaderboard's embed. - -After that, we define the `update_leaderboard` task using the `loop` decorator, and we make it run every ten minutes by -passing 10 to the `minutes` parameter. - -Then that we define the `before_update_leaderboard` task using the `before_loop` decorator, and we make it wait until the -bot is ready before starting the task. - -Next up we define the `after_update_leaderboard` task using the `after_loop` decorator, and we make it clean up the -leaderboard when the loop finally stops running. - -Then we define the `update_leaderboard_error` task using the `error` decorator, and we make it print any errors that may -occur while we update our leaderboard to the console. - -Then we get into the fun stuff, we create a slash command group using the `SlashCommandGroup` class and name it -`leaderboard`, we then create the `view` sub-command which sends the embed generated when the leaderboard is updated and -`update_info` which shows a lot of data about the task using some attributes and functions available to us. - -We also create a slash command group called `leaderboard_config` which is only available to the owner of the bot. - -Then we create the `set_time_between_updates` sub-command which takes in the time in minutes and changes the time -between updates of the leaderboard using the `change_interval` method, the `stop` sub-command which stops the task using -the `stop` method and `restart` which restarts the task using the `restart` method. - -Finally, we add the `LeaderboardCog` cog to the bot, and we're done! - -I'd highly recommend you check the tasks extension -[documentation](https://docs.pycord.dev/en/stable/ext/tasks/index.html) for more info on how to use them and what other -functions they have. diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/_category_.json b/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/_category_.json deleted file mode 100644 index 9d6255f5..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 3, - "label": "Getting Started", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx deleted file mode 100644 index 7fbabf77..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: Creating Your First Bot ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -Excited to create your first bot? Once you [install Pycord](../installation.mdx), you can start right -away! - -## Creating the Bot Application - -Just like how you need to sign up to use Discord, your bot also has to be signed up. To do this, -you should: - -1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click - on . -2. Give your bot a name, and click . -3. Now, you should see a page like this. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdW3OQnwUhacopqSWw%2F-Mjd_-mxrJCrzmaXrAg8%2Fimage.png?alt=media&token=b8e2ae6c-2290-4d37-ad7c-eb412f3fb00e) -4. Click on the tab on the left side of the screen. -5. Click on . -6. You can give it a name, change the Avatar, etc. - -## Inviting the bot - -Now, lets get the bot added to some servers. Go to the tab -in the left pane and select `bot` and `applications.commands` as scopes. - -You may want your bot to have application commands, which is what the `application.commands` scope -allows your bot to make. - -Next, you want to choose what permissions the bot will have and select them. For now, you can just -give your bot the `administrator` permission, which gives your bot every permission. Once you select -your bot's permissions, click on to get the bot invite link. - -:::tip - -When your bot is all ready to go, make sure that administrator permissions aren't selected unless -your bot truly needs them. Try selecting only permissions the bot will need. For testing, -Administrator permissions are fine. - -::: - -![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-Mk6tNY3LfDkjd6pqdpL%2F-Mk6tkdpddEWoa2jczZk%2Fimage.png?alt=media&token=52c8a29f-a798-48f8-a8c7-4ecca2681f79) - -You can use this link to invite the bot. - -## Tokens - -Now that you have an account for your bot, you need to log in. To log in, we need the bot's -password. All users and bots have a "token." You may think of this token as a password, as this allows -us to log our bot into Discord. - -Tokens are "snowflakes." Not actual snowflakes, though. Just like how no two snowflakes in real life have the same -pattern, snowflakes in computers are unique things - no two bots have the same token - so a token is -considered a snowflake. A Discord user ID is also a snowflake. - -Now, lets get your bot's token. To do this, you want to: - -1. Go back to the tab. -2. Click on the button in the "Token" section. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdbU12JISJorAZxrKH%2F-MjdbpUsapzb5n15Po5P%2Fimage.png?alt=media&token=118e259f-940a-4f6c-b3a3-c29f3a54100d) - -Now, you have your bot's token copied to your clipboard. - -:::danger - -Do not, under any circumstances, give your token to anyone. Even if you are contacted by someone -claiming to be Discord staff, do not give them your bot's token. They are lying to you to try and -gain access to your bot. If an unauthorized user gains access to your bot's token, they can access -your bot and use it in malicious ways. - -Never push your token to GitHub or include it in your code. One way to prevent your token from -getting leaked is to store it in `.env` files. - -::: - -### Protecting Tokens - -#### Using dotenv - -You can store your tokens in `.env` files. This is a simple way to store sensitive information. - -1. Create a file with the name `.env` (only the extension, with a dot/period at the start and without a name before it). -2. Define the token in the `.env` file (replace the example value with your token). - ```env title=".env" - TOKEN = NzkyNzE1NDU0MTk2MDg4ODQy.X-hvzA.Ovy4MCQywSkoMRRclStW4xAYK7I - ``` -3. Install [`python-dotenv`](https://pypi.org/project/python-dotenv/). - ```bash - python -m pip install python-dotenv - ``` -4. Load the token from the `.env` file. - ```python - import dotenv - dotenv.load_dotenv() - token = str(os.getenv("TOKEN")) - ``` -5. Pass your token as parameter when running the bot. - ```python - client.run(token) - ``` - -:::tip - -If you are using Git to track your bot's changes, you should create a file called `.gitignore` and add -`.env` to it. This stops your `.env` file from getting tracked along with the rest of your code, and -will not be pushed to a remote Git repository. As a consequence, it will stay secure on your local machine. - -::: - -## Coding the Basics - -Here's an example of code you'll write with Pycord: - -```py -import discord -import os # default module -from dotenv import load_dotenv - -load_dotenv() # load all the variables from the env file -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") - -bot.run(os.getenv('TOKEN')) # run the bot with the token -``` - - - -
- - hello - -
- Hey! -
-
-
- -Let's go through the code. First, the imports. - -```py -import discord -import os -from dotenv import load_dotenv -``` - -In the first line, `import discord`, we import Pycord. Although you install Pycord with `pip install py-cord`, you -import it with `import discord`. This is so it's as easy as possible when switching from Discord.py to Pycord. - -We then import `os` and `dotenv`. `os` is a default module that we will use to get the token from the env file. `dotenv` -is a module that we will use to load the env file. You installed this with `pip install python-dotenv`. - -Next, we load the env file with `load_dotenv()`. - -```py -bot = discord.Bot() -``` - -In this line, we create a new instance of [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). -In this object, we can pass various parameters for configuration purposes, such as `owner_ids` -and [`intents`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```py -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") -``` - -We use the [`event`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) decorator to override -the [`on_ready`](https://docs.pycord.dev/en/stable/api/events.html#discord.on_ready) function to define an -event that is automatically called when the bot is ready to use. - -```py -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") -``` - -Here, we use the [`slash_command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.slash_command) -decorator to define a slash command. We specify the `name` and `description` arguments. If not -specified, the name of the slash command would be the function name and the command description would -be empty. - -Optional: We type-hint the context parameter (`ctx`) as [`discord.ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext). In modern IDEs, type-hinting allows access to autocompletion and docstrings. You can read more about type-hinting [here](https://docs.python.org/3/library/typing.html). - -Finally, you want to run the bot using the token specified in the `.env` file. - -Now you have finished creating your first Pycord bot! What we have shown you is just the basic structure -of a bot. You can do a lot more with Python and Pycord knowledge, as well as your imagination! Pycord -will not limit your bot's abilities. - -:::note - -The part where we load the token from the environmental variables is not required. You may use another way to keep your token secure, or, although not recommended, simply specify the token normally as a string, as shown below. - -
-A Basic Bot without securing the token -
- -```py -import discord - -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.send("Hey!") - -bot.run("TOKEN") -``` - -
-
- -::: - -## FAQ - -### How do I make prefixed commands? - -Prefixed commands are an older method of creating bot commands that listen for messages and replies -if the message starts with a certain character. You can read [this page](../extensions/commands/prefixed-commands.mdx) -to learn more about prefixed commands. - -### How do I setup modules/cogs? - -[Cogs](../popular-topics/cogs) are a great way to organize your commands by putting them into -groups called cogs. Cogs are separate files that your bot loads to get the commands inside. -You can read more about cogs, as well as learn how to use them and their benefits, -[here](../popular-topics/cogs). - -### How do I add components, such as buttons and dropdown menus, to my bot? - -Pycord makes it very easy to use Message Commands with your bot by using the `discord.ui` module. -To learn more, read about Message Commands in our [interactions directory](../interactions). - -:::info Related Topics - -- [Prefixed Commands](../extensions/commands/prefixed-commands) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx deleted file mode 100644 index 2a68677b..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Hosting Your Pycord Bot ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Hosting Your Pycord Bot - -If you're completely new to this, you might have thought something along the lines of "Yay! I got my -bot working," after following our [Creating your First Bot](creating-your-first-bot) guide, only -to close your IDE or shut down your computer to find your bot offline. - -The reason for this is that programs have to be hosted somewhere, meaning some machine somewhere has -to constantly run your bot. There are tons of hosting services that can help you host your bot for -little to no cost. - -## Can I get a Clear Explanation? - -Sure thing. When you run your bot, it first makes a connection to Discord's API. Once that's done, -Pycord sends "heartbeats" to Discord. "heartbeats" are small packets sent at a set interval telling -Discord that your bot is indeed still alive. If Discord doesn't receive a heartbeat after a certain -amount of time, your bot is pronounced dead and buried in the graveyard (not really). It is, though, -taken offline and its connection with Discord is terminated. - -Once you close the terminal that you've run your program on, the program is no longer running, and -the bot stops sending heartbeats and can no longer process commands. This is why you have to constantly -keep the process running. - -This goes for all programs, in a different nature. If the code isn't compiled/built/assembled/interpreted, -it can't be running. - -## What is a Host? - -A host is a server or container for running code offered by a **hosting provider.** There are a lot -of hosting providers, such as bigger ones like Amazon Web Services (AWS) and Google Cloud, and smaller -ones like GalaxyGate and DigitalOcean. - -There are three types of hosts. - - - - Shared hosting is a type of hosting where multiple people share one VPS. Getting a spot on - a shared host is usually cheap, sometimes even free. Shared hosts do not give you a lot of - resources, from less than a gigabyte of RAM (usually 512MB on free hosts) and half of a CPU - with very little storage. Shared hosting is usually used for website hosting and is not - recommended for hosting a Discord bot. - - - A virtual private server (VPS) is a virtual computer (virtual machine) that is rented out to - customers. Most people use a VPS for hosting their projects such as Discord bots. You can get - anywhere from less than a gigabyte of RAM and a less powerful CPU to just under one hundred - gigabytes of RAM, a (or multiple) powerful CPU(s), and a fair amount of storage. A VPS is the - best choice for most users and can be fairly cheap. - - - A dedicated host is a physical computer. You can buy these yourself or rent one from a hosting - provider. Dedicated hosts are often very expensive, but are also very powerful, having a - few hundred gigabytes of RAM and a few very powerful CPUs, along with a good amount of storage. - Dedicated hosts are usually used for very large projects and are overkill for something like - a Discord bot. - - -
- -:::danger - -Make sure you choose a hosting provider you trust. Also make -sure the hosting provider you're looking at has good reviews on public forums. Googling along the -lines of "[host] review" should do the trick. A provider you don't trust can compromise your token. - -::: - -Most hosting providers rent their services to you for a monthly or yearly fee. These can be anywhere -from a few dollars to hundreds or thousands of dollars. - -## How to Host Your Bot - -Once you rent or buy a VPS, you can get to work. Most hosting providers allow you to choose from a -wide range of operating systems, most allow you to choose one but some allow you to choose -multiple. Once that's ready, you have to SSH into the system. We won't get into SSH here, but you can -read [this article from DigitalOcean](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys). -You can also use VNC, which is remote desktop software. If you are using an OS that does not have a -GUI, and is only a command line (a "server" OS), such as Ubuntu Server or most Linux Server Operating Servers, you will most -likely use SSH. If you are using an OS that has a GUI, such as Windows Server, you will most likely use VNC. - -Once you've decided on your operating system, you'll want to set it up and install Python. Once that's -done, you can copy your bot's files to your remote system, install the required packages, and run -the bot. - -:::warning - -If you are using SSH to run the file, your bot will not stay running. This is because the file is -only told to run during your session. You can use a command like [nohup](https://en.wikipedia.org/wiki/Nohup) -to make sure your file stays running after you disconnect. - -::: - -Now your bot is hosted, but that doesn't mean it can't go offline. If your bot encounters an error, -it can often go offline or stop its process. For this, make sure you have proper error handling. -Also be sure to pay attention to your hosting provider's updates or news, as they usually notify -users of when they plan on doing maintenance to their servers, making their services unavailable for -a short time. - -:::info Related Topics - -- [Creating Your First Bot](creating-your-first-bot) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx deleted file mode 100644 index 32eeb744..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx +++ /dev/null @@ -1,379 +0,0 @@ ---- -title: More Features -description: More features to make your bot cool and snazzy. ---- - -import { - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, - DiscordEmbedField, - DiscordEmbedFields, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -So, you just created your first Pycord bot! Now, let's add some more features to it. This will include adding event handlers, waiting for user response, styling the messages, and more. - -## Events - -### Event Handlers - -Events in Discord are a way to listen for certain actions. For example, if you want to know when a user joins your server, so you could send a welcome message, you can use the `on_member_join` event. - -First, you need to ask Discord to send you events. This is done via "Intents". Read up the [Intents](../Popular-Topics/intents) page for more information. - -Once you understand what intents are, you can enable the events you need, or just use the default ones with `discord.Intents.all()`. - -Now that that's done, let's add an event handler for when a user joins the server. We will use the [`on_member_join` event](https://docs.pycord.dev/en/stable/api/events.html#discord.on_member_join). We will send a private message to the user welcoming them to the server. - -```python -@bot.event -async def on_member_join(member): - await member.send( - f'Welcome to the server, {member.mention}! Enjoy your stay here.' - ) -``` - -We use the [`discord.Bot.event` decorator](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) to add the event handler. - -The `on_member_join` event is called when a user joins the server. The `member` parameter is the user that joined. Different events have different names and parameters. You can find all of them [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -So, that's how you add event handlers! - -### Waiting for User Response - -Let's say you want to create a Guess-the-Number game (where the user has to guess a number between 1-10). You need to send a message to a user and wait for them to respond. You can do this with the [`wait_for`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.wait_for) method. - -```python -@bot.command() -async def gtn(ctx): - """A Slash Command to play a Guess-the-Number game.""" - - await ctx.respond('Guess a number between 1 and 10.') - guess = await bot.wait_for('message', check=lambda message: message.author == ctx.author) - - if int(guess.content) == 5: - await ctx.send('You guessed it!') - else: - await ctx.send('Nope, try again.') -``` - -`wait_for` takes one argument, which is the event type. The event type is the name of the event you want to wait for. In this case, it's `message`. It could also be `reaction` to wait for a reaction to be added. - -We pass a keyword argument to `wait_for` called `check`. The function may look complicated if you're a beginner. We pass a `lambda` function, which simplifies the code a bit. - -The lambda function takes one parameter, `message`. When Pycord receives a message, it passes it to the `check` function. If the function returns `True`, the message is returned. If the function returns `False`, the message is ignored and the bot waits for another message. - -Here, we check if the message is from the user that sent the command. We simply use `message.author == ctx.author`. This will check if the author of the message was the person who invoked the command. - -## Styling Messages - -### Embeds - -Embeds are a Discord feature that allows applications to format their messages in cool embedded format, -enabling your bot to lay out messages with a lot of text into neat fields. - - - - - The Pycord Guide is a detailed guide that explains how to use Pycord and all of its features. - - - The Getting Started section explains how you can get a brand new bot created and running from scratch. - - - Interactions with Pycord - - - Pycord's various Extensions - - - Other Popular Topics - - - We have so much more! Just explore, and you will find everything you need. If you want another page added, open an issue on the GitHub. - - - Created with 💖 by the Pycord Team & Contributors - - - - -
- -Creating embeds is simple! Just create an instance of [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) and edit it to your liking. Once you're done, send it! - -```python -import discord - -bot = discord.Bot() - -@bot.command() -async def hello(ctx): - embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from - ) - embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") - - embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) - embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) - embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) - - embed.set_footer(text="Footer! No markdown here.") # footers can have icons too - embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") - embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") - embed.set_image(url="https://example.com/link-to-my-banner.png") - - await ctx.respond("Hello! Here's a cool embed.", embed=embed) # Send the embed with some text - -bot.run("TOKEN") -``` - - - -
- hello -
- Hello! Here's a cool embed. - - Embeds are super easy, barely an inconvenience. - - - A really nice field with some information. The description as well as the fields support markdown! - - Inline Field 1 - Inline Field 2 - Inline Field 3 - - Footer! No markdown here. - -
-
- -
- -This simple command sends replies to a [slash command](../interactions/application-commands/slash-commands) with an embed. -Let's break it down: - -```py -embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), - ) -``` - -This command creates an embed. We use the [`Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) -class to create an embed object with the title "My Amazing Embed", the description "Embeds are super easy, barely an inconvenience.", and the color `blurple`, Discord's main theme color. - -[discord.Colour](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Colour) is a class full of [classmethods](https://docs.python.org/3/library/functions.html#classmethod) -that return color values. While the official, documented name of this is `discord.Colour`, `discord.Color` -works as well. - -```py -embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") -embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) -embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) -embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) -``` - -This small section shows off embed fields. You can add fields to embeds with the [`add_field` method](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.add_field) -of the [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) class. These consist of three -keyword arguments: `title`, `value`, and `inline`. `title` and `value` are both required arguments, which inline defaults to `False` if it's not defined. The `inline` argument specifies whether space will be divided among the inline fields. There could be a mix of fields where inline has different values too. - -```py -embed.set_footer(text="Footer! No markdown here.") # footers can have icons too -embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") -embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") -embed.set_image(url="https://example.com/link-to-my-banner.png") -``` - -In this section, we're adding unique items to the embed. These items are: - -- Footer - With the [`set_footer()`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_footer) - method, you can set a small footer that holds a message. This has `text` and `icon_url` kwargs. -- Author - With the [`set_author`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_author) - method, you can set an author for the embed. This is a small text field at the top of the embed. This - includes `name`, `url` and `icon_url` kwargs. -- Thumbnail - With the [`set_thumbnail`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_thumbnail) - method, you can set a small image to reside at the top-right of the embed. This has a single `url` kwarg. -- Image - With the [`set_image`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_image) - method, you can set an image to sit at the bottom of an embed. This has a single `url` kwarg. - -There are a lot more methods and attributes you can use to configure embeds. Here, we just covered the basics. Also, remember that all of these values are not necessary in an embed. An embed may only contain a few of these. For example, only a description, a title and a description, and so on. - -### Markdown - -Markdown is a type of markup language that's limited in terms of formatting yet simple. Discord allows -for a watered-down version of markdown to be in their messages. - -#### Text Markdown - -Text formatting can be used in messages and in most embed parts, -as explained in the dedicated section below. - - - - - - - - - - - - - - - - - - - - -
*italics*__*underlined italics*__
**bold**__**underlined bold**__
***bold italics***__***underlined bold italics***__
__underlined__~~strikethrough~~
- -#### Code Markdown - -To create a single-line code block without syntax highlight, wrap the text between single backticks. -This code block will only add a dark background to the text. - -``` -`print("Hello world!")` -``` - -To create a multi-line code block without syntax highlight, wrap the text between triple backticks -on first and last line. This type of code block will encase the code inside a box. - -```` -``` -message = "Hello world!" -print(message) -``` -```` - -To create a multi-line block with syntax highlight, add the name of the language you are using right after -the triple backticks on the first line. For example, for Python you can write either "python" or "py". - -```` -```python -message = "Hello world!" -print(message) -``` -```` - -If you want to use syntax highlight for a single line of code, you still have to format it -like a multi-line block but the code must be on a separate line than the triple backticks. - -#### Quote Markdown - -To create a single-line quote block, start the line with `>` followed by a space. - -``` -> This is a single-line quote. -``` - -To create a multi-line quote block, write `>>>` followed by a space. All text -from that point onwards will be included in that quote block. - -``` ->>> This is a -multi-line quote. -``` - -#### Spoiler Markdown - -To hide a spoiler, encase the text between double pipes. The users -will have to click on it before being able to see the text contained in it. - -``` -||spoiler|| -``` - -#### Link Markdown - -Link formatting only works in embeds and messages sent through webhooks, -by using the following syntax: - -``` -[Pycord](https://pycord.dev/) -``` - -Inside the supported elements that have just been mentioned, -the example above will look like this: [`Pycord`](https://pycord.dev/) - -Outside them, the link will still be clickable but the formatting will be ignored, -therefore the example above will look similarly to this: `[Pycord](https://pycord.dev/)` - -#### Embed Markdown - -Adding markdown to your embeds or messages will give your bot the sparkle it needs, -however, markdown is limited inside embeds. Use the following table as a reference -and keep in mind that embed title and filed names will always show in **bold**. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PartTextLink
Embed AuthorNoNo
Embed TitleYesNo
Embed DescriptionYesYes
Field NameYesNo
Field ValueYesYes
Embed FooterNoNo
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx deleted file mode 100644 index e44b7c49..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Rules and Common Practices -description: All about the rules and common practices for coding a Discord bot ---- - -# Rules and Common Practices of Creating a Bot - -When creating almost anything, there's always a certain set of rules to follow or common practices, -such as [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python. This applies to creating bots -with Pycord as well. - -:::note - -Most of these rules and common practices are only applicable for -[verified bots](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting), -but it's good to follow them nonetheless. - -::: - -## Rules - -There are rules for creating bots, and most of these are required by Discord themselves, not us at -Pycord. Not following these rules may get your bot denied for verification. - -### Terms of Service and Privacy Policy - -Starting at some point in time, Discord has made providing a privacy policy with your bot a requirement. -This is so that Discord knows exactly what you are doing with its users' data. - -:::tip -You don't need a lawyer or anyone special to write out a privacy policy for you, nor do you need -it approved by some official entity. Simply writing out how you are going to use Discord user -information neatly is all you need to do. -::: - -Providing a Terms of Service for your bot is optional, though usually a best practice. It tells users -what they can and cannot do with your service, and makes it easier to settle disputes if someone -disagrees with you. - -Read more in Discord's official [Legal Docs](https://discord.com/developers/docs/legal). - -### Developer Policy - -We could list almost every rule about using Discord's API here. _Or_ we could simply link Discord's -Developer Policy to make it easier on us. You can find Discord's Developer Policy -[here](https://discord.com/developers/docs/policy). This outlines what you can and cannot do with -Discord's Developer API. And, don't worry, it's completely readable and understandable. - -## Best Practices - -Now, here's something we _can't_ simply link an article for. We're going to discuss the best practices -of creating a Discord bot with Pycord. - -### Bot Sharding - -To any new or maybe even experienced bot developer, sharding a bot sounds beneficial once you hear -about it. I'm here to tell you that it isn't a good idea to shard your bot. - -_Wait a minute, why would it be an option if it wasn't a good idea?_ It's simple. I lied. Sort of. -I'm not going to go into the details of sharding a bot, so you can read about it on -[this page](../Popular-Topics/sharding). Sharding is the process of taking your bot -and breaking it up into small pieces, so it's easier to perform tasks. This is very useful for large -bots, as it makes them faster and more reliable. Sharding is not a good practice for small bots. - -:::note -Discord will notify you once it is time to shard your bot, and will eventually force you to do so. -::: - -At the very least, wait for one thousand servers to shard your bot. If you shard your bot while it's -small, you'll just be wasting resources and possibly making your bot slower. - -### [Verification](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting) - -Verifying your Discord bot is something every developer would like to achieve. It shows that your bot -is in more than 75 servers. It's generally a good idea to try to get your bot verified as soon as -possible. We're talking at 76 servers soon. This is because Discord can be somewhat slow in terms of -bot verification, so verifying as soon as possible gives them enough time to verify before your bot -reaches the 100 server cap. If a bot is not verified, it cannot grow beyond 100 servers. - -It's also a good idea to only apply for the privileged intents that you need. Applying for intents -your bot doesn't use wastes both your time and Discord's time, as your privileged intent request -will be denied simply because you applied for an intent you didn't need. - -### Subclassing - -While it may take some time, subclassing a bot is very worth it. Once again, this was explained -elsewhere, so I won't go into the details, but I felt it fit here, so I put it here. - -Subclassing a bot makes it more flexible and allows it to do a lot more. Read more about subclassing -bots [here](../Popular-Topics/subclassing-bots) - -### Your Bot's Token - -Your bot is only able to be run for one reason: its token. If you followed the -[guide for creating your first bot](creating-your-first-bot), you should already know a bit about -keeping that token safe. That's exactly what you want to do. - -Sharing your token is never good. If someone evil gets a hold of your token, they can do terrible things, -such as making your bot leave all of its servers, spamming all the members the bot has contact with, -and even manipulating the servers the bot is in, if given the permissions. That's why it's very important -to keep your token safe. To learn how to do so, read [this part](creating-your-first-bot#tokens) of -the Creating Your First Bot guide. - -### Backups - -You always want to back up your bot's data. This includes both its code _and_ its databases. This way, -if something tragic happens, such as your host failing a data migration or you breaking your Raspberry -Pi's SD card that held your bot, you'll still have its precious user data. I have a small program for -my bot that uploads its databases to a remote GitHub repository periodically to not lose any data. -It may be smarter to find a bit more of a reliable way to do so, though. - -Public or private, having a local Git repository connected to a remote one is a good idea for making -almost any application. For a lot of developers, it's like saving your work. If you do this, all of -your bot's code won't be lost if your computer spontaneously combusts, or you smash it to bits from -anger. You can simply grab the backup computer that everyone has lying around, and you're back -in business. - -### Organization and Cleanliness - -It is _extremely_ important to have organized code. This includes commands, objects, functions, -and classes. If you don't have organized code, it will get progressively harder for you to recognize -it, and others won't be able to decipher it. - -Make sure you utilize indents and spaces, as these are very important in making your code readable. - -```py title="Bad Spacing" -class MyClass: - async def add(self,num1,num2): - return num1+num2 - async def sub(self,num1,num2): - return num1-num2 -``` - -```py title="Good Spacing" -class MyClass: - async def add(self, num1, num2): - return num1 + num2 - - async def sub(self, num1, num2): - return num1 - num2 -``` - -See the difference? Now, which one looks more readable? Hopefully, you answered the second example. -Python's [PEP8](https://www.python.org/dev/peps/pep-0008/) is a PEP (**Python Enhancement Proposal**) -style guide for Python. It is the style guide that is used by most Python developers and programmers, -providing a universal way to write and read code. - -### Databases - -As your bot grows, you'll inevitably have to store data for your bot. Now, most people would probably just load up some -JSON file on boot into a `dict`, modify it in memory then write to the file. However, JSON files aren't the solution. -When you write to a JSON file, it rewrites the entire file instead of just rewriting the section that changed. It's also -a configuration file format, not a storage file format. - -Instead of using a JSON file or some other related format, you should instead use a database. There are many databases -out there, like MongoDB, SQLite, and PostgreSQL to name a few. - -All of these databases I named do the job well, and which one you use depends on what features you want out of a database. - -<>{/* Maybe clarify these/add more options */} - -#### MongoDB - -MongoDB is a JSON-like format and if you already use JSON files, it shouldn't be too hard to migrate over to. - -#### SQLite - -SQLite is based on SQL, a common relational data model. It's a lightweight, easy-to-use, portable database solution that -works entirely on files. However, if for some reason you cannot read/write to and from a file, and you need to manage -lots of data, SQLite might not be for you. - -While SQLite is a part of the Python Standard Library as the `sqlite3` package, we recommend not using it as it is -synchronous and blocking. You should use an asynchronous alternative, such as [`aiosqlite`](https://pypi.org/project/aiosqlite/). - -#### PostgreSQL - -PostgreSQL is also based on SQL, but it also has more features than SQLite. It's compliant with the SQL standard, -open-source, and extensible. However, it's not that fast or simple compared to SQLite. - -#### MariaDB - -MariaDB is also based on SQL and is a fork of the MySQL project. It's compliant with the SQL standard, it's also open -source and is a complete drop-in replacement for any code with MySQL. You don't even need to change what package you're -using! diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/installation.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/installation.mdx deleted file mode 100644 index 521c69cd..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/installation.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Installation -sidebar_position: 2 ---- - -Before you can start using Pycord, you need to install the library. - -:::note -Python **3.8 or above** is required to use Pycord. -::: - -:::tip -Before you start installing python packages globally, it's recommended you set up a virtual environment. -You can find instructions for that [here](More/virtual-environments). -::: - -## Fresh Installation - -To install Pycord, you can use the following command in your terminal: - -``` -pip install py-cord -``` - -:::tip -Remember that you need to install `py-cord`, not `pycord`. -Also, the `pip` command varies depending on your installation. For example, it might be `python3 -m pip` on macOS/Linux or `py3 -m pip` on some versions of Windows. -::: - -If you need voice support for your bot, you should run: - -``` -pip install "py-cord[voice]" -``` - -## Migration - -### Updating Pycord - -If you are upgrading from a previous version of Pycord, you can use the following command in your terminal to upgrade to the latest version: - -``` -pip install -U py-cord -``` - -### Migrating from other libraries - -If you are migrating from another library, say, `discord.py`, first of all, you need to uninstall it. - -``` -pip uninstall discord.py -``` - -Then, you can install Pycord, it's as simple as that!: - -``` -pip install py-cord -``` - -:::caution -Uninstalling `discord.py` _after_ installing `py-cord` can cause issues. Make sure to uninstall it first! -::: - -## Installing Other Builds - -### Development Build - -:::caution -The development build comes with cutting edge features and new functionality, but as it isn't a stable build you may encounter bugs. -::: - -To install the development build, you can use the following command in your terminal: - -``` -pip install -U git+https://github.com/Pycord-Development/pycord -``` - -:::important -Git is required to install this build. [Learn how you can install Git](./more/git). -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/_category_.json b/i18n/pt/docusaurus-plugin-content-docs/current/interactions/_category_.json deleted file mode 100644 index ea28be60..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 4, - "label": "Interactions" -} \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json b/i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json deleted file mode 100644 index 6dcafe83..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Application Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx deleted file mode 100644 index 8fdca991..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Context Menus -description: Learn all about Context Menus (User Commands & Message Commands) and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -When you right-click a message, you may see an option called "Apps". Hover over it, and you can see -commands a bot can run with that message. These are called message commands. - -When you right-click a user in the user list, you can once again see an option called "Apps". -Hover over it, and you can see commands a bot can run with that message. These are called user commands. - -Together, these two are called Context Menus or Context Menu Commands. These commands work very much like normal commands, except they take a member or message. - -:::note - -A bot can have up to 5 global Context Menus of each type. - -::: - -## User Commands - -Creating a user command is very simple. - -```python -@bot.user_command(name="Account Creation Date", guild_ids=[...]) # create a user command for the supplied guilds -async def account_creation_date(ctx, member: discord.Member): # user commands return the member - await ctx.respond(f"{member.name}'s account was created on {member.created_at}") -``` - - - -
- - Account Creation Date - -
- {defaultOptions.profiles.bob.author}'s account was created on 2020-01-01 -
-
- -## Message Commands - -```python -@bot.message_command(name="Get Message ID") # creates a global message command. use guild_ids=[] to create guild-specific commands. -async def get_message_id(ctx, message: discord.Message): # message commands return the message - await ctx.respond(f"Message ID: `{message.id}`") -``` - - - - Do. Or do not. There is no try. - - -
- - Get Message ID - -
- Message ID: 930650407917748286 -
-
- -
- -:::info Related Topics - -- [Slash Commands](./slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx deleted file mode 100644 index edac55b3..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Localizations -description: Localizations are a way to make your bot more accessible to your users. Learn all about localizations now! ---- - -Localizations are a way to make your bot more accessible to your users. You can localize the command -name, the names of any arguments, and any text that is displayed to the user. - -## Syntax - -```python -@bot.slash_command( - name="ping", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - }, - options=[ - Option( - name="Example", - name_localizations={ - "en-GB": "British Example" - }, - description="Example option that does nothing", - description_localizations={ - "en-GB": "British example option that does nothing" - } - ) - ] -) -async def ping(ctx, example): - responses = {"en-US": "Pong!", - "en-GB": "British Pong!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -@bot.slash_command( - name="ping2", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - } -) -async def ping2(ctx, example: Option(str, "example", name_localizations={"en-GB": "British Example"}, description="Example option that does nothing", description_localizations={"en-GB": "British example option that does nothing"})): - responses = {"en-US": "Pong2!", - "en-GB": "British Pong2!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -``` - -- [`Locales`](https://discord.com/developers/docs/reference#locales) - List of valid locales recognized by Discord diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx deleted file mode 100644 index f4a760b6..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx +++ /dev/null @@ -1,292 +0,0 @@ ---- -title: Slash Commands -description: Learn all about Slash Commands and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On March 24, 2021, Discord added Slash Commands to Discord as an easier, more efficient, and better way of using bot commands. Pycord has implemented Slash Commands into the library, so it's simple, efficient, and familiar. - -:::important - -Remember that Slash Commands require your bot to be invited with the `application.commands` scope or Slash Commands will not show up. Bots already in the guild can simply be invited again with the scope; there is no need to kick the bot. - -::: - -## Syntax - -Let's create a simple Slash Command. - -```py -import discord - -bot = discord.Bot() - -# we need to limit the guilds for testing purposes -# so other users wouldn't see the command that we're testing - -@bot.command(description="Sends the bot's latency.") # this decorator makes a slash command -async def ping(ctx): # a slash command will be created with the name "ping" - await ctx.respond(f"Pong! Latency is {bot.latency}") - -bot.run("TOKEN") -``` - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -Let's go through the code. - -First, we import Pycord's `discord` package. - -Next, we create a [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot) object and assign it to a variable `bot`. - -We then go ahead and use the [`@bot.command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.command) decorator, which registers a new Slash Command. We pass a `description` parameter to give a description to the Slash Command. We can also pass a `name` parameter to change the Slash Command's name. By default, the name of the Slash Command will be the name of the function, in this case, `/ping`. - -We create an async function called `ping` with parameters `ctx`, which, when called, sends the bot's ping/latency using [`ctx.respond`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext.respond). - -## Subcommand Groups - -You might want to group certain commands together to make them more organised. A command group is exactly what it sounds like, a group of individual Slash Commands together. - -In order to make a Slash Command group, you can use the `bot.create_group` function. - -```python -import discord - -bot = discord.Bot() - -# create Slash Command group with bot.create_group -greetings = bot.create_group("greetings", "Greet people") - -@greetings.command() -async def hello(ctx): - await ctx.respond(f"Hello, {ctx.author}!") - -@greetings.command() -async def bye(ctx): - await ctx.respond(f"Bye, {ctx.author}!") - -bot.run("TOKEN") -``` - -Or, you can instead manually make a `SlashCommandGroup` class like so: - -```python -import discord - -math = discord.SlashCommandGroup("math", "Math related commands") - -@math.command() -async def add(ctx, num1: int, num2: int): - sum = num1 + num2 - await ctx.respond(f"{num1} plus {num2} is {sum}.") - -@math.command() -async def subtract(ctx, num1: int, num2: int): - sum = num1 - num2 - await ctx.respond(f"{num1} minus {num2} is {sum}.") - -# you'll have to manually add the manually created Slash Command group -bot.add_application_command(math) -``` - -Here's what the registered subcommands will look like in the Slash Command Menu: - -![Picture of the subcommands in the Slash Command Menu](../../assets/interactions/groups-and-subcommands.jpg) - -You'll notice that there's the name of the Slash Command Group and then the name of the subcommand separated by a space. - -::: - -:::info Cogs - -If you are looking to add Slash Command Groups to cogs, please look at our [Cogs page](../../popular-topics/cogs)! - -::: - -## Sub-groups - -We've made a subcommand group, but did you know that you could create a group inside another? - -```python -from discord import SlashCommandGroup -from math import sqrt - -math = SlashCommandGroup("math", "Math related commands") -advanced = math.create_subgroup("advanced", "Advanced math commands") - -@advanced.command() -async def square_root(ctx, x: int): - await ctx.respond(sqrt(x)) - -bot.add_application_command(math) -``` - -The command created above can be invoked by typing `/math advanced square_root`. - -## Options & Option Types - -Whenever you're using Slash Commands, you might notice that you can specify parameters that the user has to set or can optionally set. These are called Options. - -Options can also include a description to provide more information. [You can learn more about Options in our documentation!](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.Option) - -Since you want different inputs from Options, you'll have to specify the type for that Option; there are a few ways of doing this. - - - - -You could use Type Annotations and let Pycord figure out the option type or explicitly specified using the [`SlashCommandOptionType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.SlashCommandOptionType) enum. - -```python -import discord - -bot = discord.Bot() - -@bot.command() -# pycord will figure out the types for you -async def add(ctx, first: discord.Option(int), second: discord.Option(int)): - # you can use them as they were actual integers - sum = first + second - await ctx.respond(f"The sum of {first} and {second} is {sum}.") - -@bot.command() -# this explicitly tells pycord what types the options are instead -async def join( - ctx, - first: discord.Option(discord.SlashCommandOptionType.string), - second: discord.Option(discord.SlashCommandOptionType.string) -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - add - -
- The sum of 1 and 1 is 2. -
- -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
- - -Instead of Type Annotations, you can also use the option decorator. This is usually done to have type-hinting. - -```python title="Slash Command Type" -import discord - -bot = discord.Bot() - -@bot.command() -@discord.option("first", type=discord.SlashCommandOptionType.string) # type = str also works -@discord.option("second", type=discord.SlashCommandOptionType.string) # type = str also works -async def join( - ctx, - first: str, - second: str, -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
-
- -## Autocomplete - -Discord's autocomplete allows developers to determine option choices that are used in a slash command option. You can do this by defining a function: - -```py -async def get_animal_types(ctx: discord.AutocompleteContext): - """ - Here we will check if 'ctx.options['animal_type']' is a marine or land animal and return respective option choices - """ - animal_type = ctx.options['animal_type'] - if animal_type == 'Marine': - return ['Whale', 'Shark', 'Fish', 'Octopus', 'Turtle'] - else: # is land animal - return ['Snake', 'Wolf', 'Lizard', 'Lion', 'Bird'] - -@bot.slash_command(name="animal") -async def animal_command( - ctx: discord.ApplicationContext, - animal_type: discord.Option(str, choices=['Marine', 'Land']), - animal: discord.Option(str, autocomplete=discord.utils.basic_autocomplete(get_animal_types)) -): - await ctx.respond(f'You picked an animal type of `{animal_type}` that led you to pick `{animal}`!') -``` - - - -
- - animal - -
- You picked an animal type of Marine that led you to pick Shark! -
-
- -:::warning - -Autocomplete can **only** be used with slash commands. - -::: - -:::info Related Topics - -- [Interactions Index](../../interactions) -- [Rules and Common Practices](../../getting-started/rules-and-common-practices) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/index.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/interactions/index.mdx deleted file mode 100644 index 3f695606..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/index.mdx +++ /dev/null @@ -1,242 +0,0 @@ ---- -title: Discord Interactions ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -In December 2020, Discord released their first Interaction: the -[Slash Command](https://discord.com/developers/docs/interactions/application-commands#slash-commands). -Since then, Discord has added many types of Interactions, including: - -[**Application Commands**](https://discord.com/developers/docs/interactions/application-commands) - -- [**Slash Commands**](https://discord.com/developers/docs/interactions/application-commands#slash-commands): - Commands that can be used with the `/` prefix. -- **Context Menu Commands**: Commands that can be used from the right-click menu. - - [**User Commands**](https://discord.com/developers/docs/interactions/application-commands#user-commands): - Commands that can be used on a user by alt-clicking/selecting them. - - [**Message Commands**](https://discord.com/developers/docs/interactions/application-commands#message-commands): - Commands that can be used on a message by alt-clicking/selecting it. - -[**UI Components**](https://discord.com/developers/docs/interactions/message-components) - -- [**Buttons**](https://discord.com/developers/docs/interactions/message-components#buttons): - Buttons are attached to a message and can be clicked on to perform an action. -- [**Select Menus**](https://discord.com/developers/docs/interactions/message-components#select-menus): - Drop-down menus are used to select a number of options from a list. -- [**Modals**](https://discord.com/developers/docs/interactions/message-components#text-inputs): - Form-like modals can be used to ask for input from a user. - -## Application Commands - -Application Commands are another set of new features that are intended to avoid compromising users' safety and privacy. -They're relatively easy to add to your bot, and give people a simpler and safer way to use commands. - -### [Slash Commands](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.SlashCommand) - -Slash Commands were the first Interaction added to Discord. They're easy to use and create, and -is the only prefix commands alternative that does not need Message Content intent. - -:::note - -Preferring prefix commands over Application Commands is **not** a valid reason to apply for the -Message Content intent. Using that as a reason will get your application denied. - -::: - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -This is what a Slash Command looks like. Not too different from a prefix command, -apart from the note telling you who invoked it. A Slash Command's fields can accept any of the following: - -- Members -- Roles -- Channels -- Attachments -- Text - -Just about as good as it gets. - -### [Message](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.MessageCommand) and [User](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.UserCommand) Commands - -Message Commands and User Commands were both introduced at around the same time, and are very similar to each other, so we'll be -introducing them together. These commands can be found in the `Apps` tab when alt-clicking. The only difference between the two is that -Message Commands only appear in the `Apps` tab of a message, while User Commands are found in the `Apps` tab of a user. Message Commands -can be used to quickly report a message, warn a user for a message, and other functions. Likewise, User Commands can be used to add a -user to a ticket, warn a user, and more. - -Here's an example of a Message Command: - - - - Hello World! - - -
- - Reverse Message - -
- Message 930650407917748286 reversed is "!dlroW olleH" -
-
- -
- -And here's an example of a User Command: - - - - {defaultOptions.profiles.dorukyum.author} has been on Discord for a long time - - -
- - User Age - -
- {defaultOptions.profiles.dorukyum.author} is 1 week old. -
- -
- - User Age - -
- {defaultOptions.profiles.bob.author} is 40 years old. -
- - 🤔 - -
- -
- -Pretty cool, right? To learn more about these two, please read the [Context Menus guide](./application-commands/context-menus.mdx). - -## [Application Commands](#application-commands) vs. [Prefix Commands](../extensions/commands/prefixed-commands) - -Ever since Discord was created, apps on it have used prefix commands. Using prefixes meant that you would have to put a -certain character (or string of characters) in front of your command, such as the exclamation mark in `!ping`. The way this -worked was that your bot would listen for messages, pick out the ones that had their specific prefix, and then respond to the command. -Now, Discord is encouraging developers to switch their bots over to Application Commands, which is a new system meant to preserve the -privacy and safety of their users. But why exactly is Discord making us switch? What's the better option, Application Commands or prefix -commands? Below, we'll discuss everything you need to know. - -### Discord's Decision - -Application Commands were conceptualized partly due to privacy concerns. When Discord first began, they weren't entirely concerned about bots -having access to the content of every message that was being sent. However, as Discord grew, this became more of a problem. Hypothetically, bots -could simply log every message they're able to receive via the Discord API and hand their contents over to a company or other third party. This is -a problem, since that data is meant to be used only by Discord. As such, they locked down Message Content, and introduced Application Commands for -bot developers to use instead. - -Prefix commands work by reading messages, as described before. Application Commands, however, don't -work this way; instead, they work by having your bot get information from Discord about when a command was used. This way, Discord can limit -Message Content only to bots that _absolutely_ depend on it, such as auto-moderation bots. - -### Who has to Use Application Commands - -Any verified bot that does not have the Message Content intent must use Application Commands. Discord is allowing developers to submit -applications for the ability to use the intent; however, since they don't want to keep supporting prefix commands due to privacy concerns, -they will automatically decline any application that includes only that as a reason. So, if your bot doesn't have an auto-moderation feature -(or any other functionality that requires Message Content), you're out of luck. - -Unverified bots, however, don't have to use Application Commands. This is because the Message Content intent is a `Privileged Intent`, meaning that -it must be applied for only if your bot is verified or about to be verified. Unverified bots don't have to apply for Privileged Intents, so they can -use them freely. - -So, if your bot is made only for a couple of servers, you can choose between prefix commands and Application Commands. However, if you plan on expanding -your bot's reach, it'll have to use Application Commands. - -### What's the Better Option - -Choosing which is the better option is up to you, if you're starting small. If -you plan on growing your bot, however, you will have to use Application Commands. Since prefix commands are slowly being phased out by Discord, -there isn't much of a choice for developers of larger bots. - -## Message Components - -Message Components are fairly new features in Discord, allowing developers to give their bots a fast -and understandable user interface. Message Components are easy to use and make your bot look modern, -sleek, and downright awesome. - -### [Views](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View) - -Views are not an Application Command nor are they a Message Component. Views are the invisible placeholders, or grid, -that Message Components lie in. Views can have up to 5 [`Action Rows`](https://docs.pycord.dev/en/stable/api/models.html#discord.ActionRow), -and Action Rows can have a maximum of 5 slots. Below, you can find a table showing how many slots a Message Interaction takes up. - -| Component | Slots | -| ------------ | ----------------------------------------------- | -| Buttons | 1 Slot | -| Select Menus | 5 Slots | -| Text Modals | 1 Slot (opened via a Button) | - -So, based on this, you could have a maximum of 25 Buttons in a View with no Select Menus, and 5 Select -Menus in a View with no Buttons. This doesn't mean you can't have them both in a View, however. You can have -a combination of them, such as 20 Buttons and a Select Menu or 10 Buttons and 3 Select Menus. - -### [Buttons](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button) - -Buttons are the first of the Message Components. They allow for quick responses to prompts, such as for canceling or continuing an action. -Of course, these aren't their only uses; people have created awesome things with Buttons, such as calculators, games, and more! - - - - Discord Buttons are awesome! -
- - Click me! - -
-
-
- -
- -This is what a Button looks like, very simple and modern. To learn more about Buttons, refer to our -[Buttons page](./ui-components/buttons.mdx). - -### [Select Menus](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Select) - -Select Menus are the second of Discord's Message Components. They allow users to select from a list of choices, which your bot can then use. -Select Menus are good for things such as choosing features, pages of a help menu, and more. - -![Select Menu Example Image](../assets/interactions/select-menus-example.png) - -This is what a Select Menu looks like. While not looking as good as Buttons, they still look great -and have even greater possibilities. To learn more about Select Menus, please refer to our [Select -Menus page](./ui-components/dropdowns.mdx). - -### [Modal Dialogs](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal) - -Text Modals are the most recently added Message Component in Discord. They're useful for text input and filling out forms, such as a -sign-up for your bot's service. These are meant to replace long bot setup processes by allowing users to fill out multiple text fields, -which avoids having the user send multiple messages for the bot. Modals can be accessed by either invoking an Application Command or by -interacting with another UI Component. - -![Text Modal Example Image](../assets/interactions/modal-example.png) - -This is what a Text Modal looks like, easy to use and one of the most useful Message Components yet. To learn more about Text Modals, -please visit our [Modal Dialogs page](./ui-components/modal-dialogs.mdx). diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json b/i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json deleted file mode 100644 index 7b0a72fe..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "UI Components", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx deleted file mode 100644 index 10557c94..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx +++ /dev/null @@ -1,314 +0,0 @@ ---- -title: Buttons -description: Learn all about implementing buttons in your Discord Bot using Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On May 26, 2021, Discord added a new interaction called buttons. Instead of reactions, bots could now -send buttons and users could use them to interact with bots. This opened up a whole new world of -possibilities for bots. Soon after, developers made calculators, polls, and games like blackjack, UNO, -and even Minecraft! Buttons provided a clear and easy to use interface for interacting with bots. - -So, let's learn how you can add buttons to your bot! - -## Concept - -Buttons weren't the only update to the interactions system in Discord. Discord also added [Select Menus](./dropdowns) and [Modal Dialogs](./modal-dialogs), both of which work very similarly to buttons. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive button. - -```python -import discord - -bot = discord.Bot() # Create a bot object - -class MyView(discord.ui.View): # Create a class called MyView that subclasses discord.ui.View - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.primary, emoji="😎") # Create a button with the label "😎 Click me!" with color Blurple - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") # Send a message when the button is clicked - -@bot.slash_command() # Create a slash command -async def button(ctx): - await ctx.respond("This is a button!", view=MyView()) # Send a message with our View class that contains the button - -bot.run("TOKEN") # Run the bot -``` - -Using this command should return the following message: - - - -
- - button - -
- This is a button! -
- - Click me! - -
-
-
- -
- -As you can see, we create a class called `MyView` that [subclasses](#oop) -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `button_callback` to the `MyView` class with the decorator -[`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button). -This decorator adds a button to a component. This function takes two arguments: the button that was -clicked and the interaction. These arguments are passed to the function when the button is clicked -by the module. We use the [`interaction.response.send_message`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse.send_message) -function to send a message to the channel where the interaction was sent. - -Finally, we create a global slash command called `button` that sends the message, along with the view -that contains a button. - -This is the basic syntax of creating a button. What you create with it is up to you. You can worry -about making your button do amazing things, while Pycord handles the rest! - -## Button Styles - - - -| Name | Usage | Color | -| --------- | ----------------------------------------------------------------------------------------- | ------- | -| Primary | `discord.ButtonStyle.primary` / `discord.ButtonStyle.blurple` | Blurple | -| Secondary | `discord.ButtonStyle.secondary` / `discord.ButtonStyle.grey` / `discord.ButtonStyle.gray` | Grey | -| Success | `discord.ButtonStyle.success` / `discord.ButtonStyle.green` | Green | -| Danger | `discord.ButtonStyle.danger` / `discord.ButtonStyle.red` | Red | -| Link | `discord.ButtonStyle.link` / `discord.ButtonStyle.url` | Grey | - -Check out the [`discord.ButtonStyle`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ButtonStyle) class for more information. - -![Different Button Styles](../../assets/interactions/button-styles.png) - -You can set a button's style by adding the `style` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) decorator. - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.success) - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots, and each button takes up 1 slot. -So, how do we move the buttons to another row? - -This can be done by specifying the `row` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) -decorator. - -:::info The `row` argument - -The row argument specifies the relative row this button belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=1, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") -``` - -## Disabling Buttons - -### Pre-Disabled Buttons - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary, disabled=True) # pass `disabled=True` to make the button pre-disabled - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView()) -``` - -### Disabling Buttons on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - button.disabled = True # set button.disabled to True to disable the button - button.label = "No more pressing!" # change the button's label to something else - await interaction.response.edit_message(view=self) # edit the message's view -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(emoji="😀", label="Button 1", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) - - @discord.ui.button(label="Button 2", style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -Sometimes, you want to have a button that is disabled after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView(timeout=30)) -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a button that is disabled after a certain amount of time, you want to have a -button that is always working. - -Normally, when the bot goes offline, all of its buttons stop working. You will be able to see the -buttons, but nothing will happen when you press them. This is a problem -if you are trying to create a self-role system with buttons, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons will stop working. When the bot comes back online, however, the buttons will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view must have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.button(label="A button", custom_id="button-1", style=discord.ButtonStyle.primary, emoji="😎") # the button has a custom_id set - async def button_callback(self, button, interaction): - await interaction.response.send_message("Button was pressed", ephemeral=True) - -@bot.command() -async def button(ctx): - await ctx.send(f"Press the button! View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many buttons can I have in a message? - -Each message can have a maximum of 25 buttons. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do buttons need any special permissions? - -No new permissions are needed for either the bot or the server to allow bots to use buttons. - -#### Should I replace reactions with buttons for my bot? - -That is up to you. Buttons do provide a cleaner interface for your bot and are easier to use. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx deleted file mode 100644 index 8320f25d..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx +++ /dev/null @@ -1,339 +0,0 @@ ---- -title: Select Menus -description: Learn all about implementing Select Menus or Dropdowns in your Discord Bot with Pycord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Shortly after the buttons were added, Discord added their second message component: Select Menus. Select Menus allow users to choose from a list of items sent by a bot. These are a great substitute for having a user send a number that corresponds to an option. You can even allow users to select multiple options from the Select Menus. This guide will show you the easy and painless ways of using them with Pycord. - -## Concept - -Select Menus aren't the only message component in Discord. There's also [Buttons](./buttons) and [Modal Dialogs](./modal-dialogs). Select Menus make it easy for users to pick one or multiple options from a list provided by a bot. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive select menu. - -```python -import discord - -bot = discord.Bot() - -class MyView(discord.ui.View): - @discord.ui.select( # the decorator that lets you specify the properties of the select menu - placeholder = "Choose a Flavor!", # the placeholder text that will be displayed if nothing is selected - min_values = 1, # the minimum number of values that must be selected by the users - max_values = 1, # the maximum number of values that can be selected by the users - options = [ # the list of options from which users can choose, a required field - discord.SelectOption( - label="Vanilla", - description="Pick this if you like vanilla!" - ), - discord.SelectOption( - label="Chocolate", - description="Pick this if you like chocolate!" - ), - discord.SelectOption( - label="Strawberry", - description="Pick this if you like strawberry!" - ) - ] - ) - async def select_callback(self, select, interaction): # the function called when the user is done selecting options - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") - -@bot.command() -async def flavor(ctx): - await ctx.respond("Choose a flavor!", view=MyView()) - -bot.run("TOKEN") -``` - -There's a lot going on over here! Don't worry, we will go over the code and explain it. - -As you can see, we create a class called `MyView` that subclasses -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `select_callback` to the `View` class with the decorator -[`discord.ui.select`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.select). -This decorator adds a select menu to the view. This decorator takes a few arguments to customize your select menu. Read them in the [Customization section](#customization). - -That was the decorator. Now, the function itself is pretty simple. It takes two parameters, not including `self`. The parameters are `select`: The select menu, and `interaction`: a [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object. Both of these are passed by Pycord, so you just need to specify them in the function! - - - -In the callback, you could do anything you want. You get the two parameters `select` and `interaction` to play around with. Here, we send a message using `await interaction.response.send_message` (where interaction is [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse)) with content `select.values[0]`, which sends the label of the first/only option the user selected. Obviously, this is only an example, and you could do just about anything you want. - -Finally, we create a global slash command called `flavour` that sends a message "Choose a flavor!" along with the view -that contains our select menu. - -This is the basic syntax of creating a select menu. What you create with it is up to you. You can worry -about making your code do amazing things, while Pycord handles the rest! - -## Customization - -#### Select Menu Properties - -- `select_type`: The type of select to create. This must be a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. -- `channel_types`: A list of channel types that can be selected in the menu. This is only valid for selects of `select_type` [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType). -- `options`: A list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. These are the options that can be selected in this menu. -- `placeholder` is the placeholder text shown in the select menu if no option is selected. -- `custom_id`: The ID of the select menu that gets received during an interaction. It is recommended not to set this to anything unless you are trying to create a persistent view. -- `row`: The relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). -- `min_values`: The minimum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `max_values`: The maximum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `disabled`: Whether the select is disabled or not. Defaults to False. - -#### Select Option Properties - -In the `options` parameter, you pass a list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. This class also has a few parameters: - -- `default` (whether the option is selected by default) -- `description` (an additional description, if any) -- `emoji` (a string or an emoji object, if any) -- `label` (the name displayed to users, can be up to 100 characters) -- `value` (a special value of the option, defaults to the label). - -## Select Types - -In addition to regular string selects, you can also have your select menu contain users, roles, mentionables, and channels as its options. You can use these alternative select types by passing a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value for the `select_type` parameter when creating the Select. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.user_select - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -Additionally, you can use shortcut decorators to create a [`discord.ui.Select`](https://docs.pycord.dev/en/master/api/ui_kit.html#discord.ui.select) with a predetermined [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. Using a shortcut decorator, the above code can be rewritten like this: - -```python -class MyView(discord.ui.View): - @discord.ui.user_select() - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -### Specifying Channel Types - -When using a [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType.channel_select) type select menu, you can pass in a list of [`discord.ChannelType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ChannelType) values to limit which types of channels users can choose when interacting with the select menu. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.channel_select, - channel_types=[discord.ChannelType.text, discord.ChannelType.voice] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"You selected {select.values[0].mention}") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots. A button takes a single slot, while a select menu takes up all 5 of them. This means a view can have a maximum of 5 select menus, or any possible combination of select menus and buttons. - -The arrangement of buttons and select menus is generally adjusted by Pycord. However, it is possible to move them to specific relative rows. This is done by specifying the `row` argument. - -:::info The `row` argument - -The row argument specifies the relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero-indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=0, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.select( - row = 1, - options = [...] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") -``` - -## Disabling Select Menus - -### Pre-Disabled Menus - -```python -class MyView(discord.ui.View): - @discord.ui.select( - disabled = True, # pass disabled=True to set the menu as disabled - options = [...] - ) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send("Select and option from the menu!", view=MyView()) -``` - -### Disabling Menus on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - select.disabled = True # set the status of the select as disabled - await interaction.response.edit_message(view=self) # edit the message to show the changes -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def first_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) # edit the message to show the changes - - @discord.ui.select(options = [...]) - async def second_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -You may want a select menu to automatically stop working after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select(ctx): - await ctx.send(view=MyView(timeout=30)) # specify the timeout here -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a select menu that is disabled after a certain amount of time, you want to have a -select menu that is always working. - -Normally, when the bot goes offline, all of its views stop working, even if they don't have a timeout. You will be able to see the -views, but nothing will happen when you try to interact with them. This is a problem -if you are trying to create a self-role system, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons and select menus will stop working. However, when the bot comes back online, the buttons and select menus will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view much have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.select(custom_id="select-1", options = [...]) # a custom_id must be set - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send(f"View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many select menus can I have in a message? - -Each message can have a maximum of 5 select menus. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do select menus need any special permissions? - -No new permissions are needed in the bot or in the server. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx deleted file mode 100644 index 6ee4682f..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Modal Dialogs -description: Learn how you can implement Modals in your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Modal Dialogs, also known as "modals", provide a form-like structure for bots to receive input from users. No extra permissions are needed for bots to send modal dialogs, so it becomes a convenient workaround for bots to receive longer input without needing the Message Content [intent](../../popular-topics/intents). - -## Concept - -Modal Dialogs consist of a title, custom ID, and up to 5 [`discord.ui.InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) components. While creating modals, we generally subclass [`discord.ui.Modal`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal), as we'll see later. - -Unlike other UI Components, Modals cannot be sent with messages. They must be invoked by an Application Command or another UI Component. - -## Usage Syntax - -```py -class MyModal(discord.ui.Modal): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - self.add_item(discord.ui.InputText(label="Short Input")) - self.add_item(discord.ui.InputText(label="Long Input", style=discord.InputTextStyle.long)) - - async def callback(self, interaction: discord.Interaction): - embed = discord.Embed(title="Modal Results") - embed.add_field(name="Short Input", value=self.children[0].value) - embed.add_field(name="Long Input", value=self.children[1].value) - await interaction.response.send_message(embeds=[embed]) -``` - - - - -The `ctx` parameter we define in Application Commands receives an [`ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext) object. Using its `send_modal()` coroutine, you can send a Modal dialog to the user invoking the Application Command. - -```py -@bot.slash_command() -async def modal_slash(ctx: discord.ApplicationContext): - """Shows an example of a modal dialog being invoked from a slash command.""" - modal = MyModal(title="Modal via Slash Command") - await ctx.send_modal(modal) -``` - - - - -The `interaction` parameter we define in UI Components receives an [`Interaction`](https://docs.pycord.dev/en/stable/api/models.html#discord.Interaction) object. The `response` attribute of the object contains an [`InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object, with various coroutines such as `send_message()` and `send_modal()`, which we utilize. - -```py -class MyView(discord.ui.View): - @discord.ui.button(label="Send Modal") - async def button_callback(self, button, interaction): - await interaction.response.send_modal(MyModal(title="Modal via Button")) - -@bot.slash_command() -async def send_modal(ctx): - await ctx.respond(view=MyView()) -``` - - - - -The above example uses an embed to display the results of the modal submission, but you can do anything you want with the text provided by the user. -Each input field can be accessed in the order it was added to the modal dialog, via `Modal.children`. - -## Customization - -A Modal can have up to 5 [`InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) fields. These fields offer some customization. - -Each field has a label which is shown to the user. This is defined with `label`. - -The `style` parameter is used to determine whether it should be a short (single-line) or long (multi-line) input field. - -There are a number of aliases that can be used: - -```x title="Single-line InputTextStyle values:" -short -singleline -``` - -```x title="Multi-line InputTextStyle values:" -paragraph = 2 -multiline = 2 -long = 2 -``` - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Buttons](./buttons) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/introduction.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/introduction.mdx deleted file mode 100644 index 3262c632..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/introduction.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Introduction -description: Pycord Guide is a complete guide for Pycord. Learn how to create Discord Bots today! -sidebar_position: 1 ---- - -Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord, written in Python. Pycord is a maintained fork of [discord.py](https://github.com/Rapptz/discord.py). - -## Before you begin - -Pycord is an advanced and complex Python library. To take advantage of the full capabilities of Pycord, you will need to have a good understanding of Python. You should know the basics of Python and have an understanding of the following concepts: - -- Variables -- Data Types -- Functions -- Packages -- Conditionals -- Loops -- Classes -- Object-Oriented Programming -- Inheritance -- Exception Handling -- Iterators -- Coroutines -- Async/Await - -This list is not exhaustive, but it should give you a good idea of what you need to know to get started. - -When you see an ellipsis - that's the three dots - in this guide, it is a placeholder for code that you need to fill in. Sometimes, it may be code for a command, while other times it could be something simple like a Guild ID. Make sure to replace them before running your bot! - -## Learning Resources - -Here are some good resources to get started or to freshen up your Python knowledge: - -- [Official Beginner's Guide](https://wiki.python.org/moin/BeginnersGuide) -- [Official Tutorial](https://docs.python.org/3/tutorial/) -- [Automate the Boring Stuff, a free online book for complete beginners to programming](https://automatetheboringstuff.com/) -- [Learn Python in y Minutes, complete cheat sheet for people who know programming already](https://learnxinyminutes.com/docs/python3/) -- [Swaroopch's free Python book](http://python.swaroopch.com/) -- [Codeabbey, exercises for beginners](http://www.codeabbey.com/) - -## Credits - -First of all, we would like to thank [Rapptz](https://github.com/Rapptz) for the original [discord.py](https://pypi.org/project/discord.py) library. Pycord is a maintained fork of this library. - -We would also like to thank the [discord.js guide](https://discordjs.guide), which inspired this guide style-wise, and the [original Pycord Guide](https://namantech.me/pycord), which inspired some content in this guide. - -We created this guide using [Docusaurus v2](https://docusaurus.io), a modern static site generator for React. We would also like to thank Danktuary for his [`@discord-message-components/react`](https://www.npmjs.com/package/@discord-message-components/react) package, from which we took the Discord message components. - -And finally, we would like to thank the amazing and loving community of Pycord users, contributors and developers. diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/more/_category_.json b/i18n/pt/docusaurus-plugin-content-docs/current/more/_category_.json deleted file mode 100644 index 2cbe2c56..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/more/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 8, - "label": "More", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/more/community-resources.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/more/community-resources.mdx deleted file mode 100644 index ed3075bd..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/more/community-resources.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Community Resources ---- - -This page showcases the amazing things created by the Pycord community, including bots, Plugins, and more. - -## Plugins - -| Name | Type | GitHub | -| --------------- | ------------ | --------------------------------------------------------------- | -| Music Cord | Music | [NixonXC/cord-music](https://github.com/NixonXC/cord-music) | -| pycord-i18n | Localization | [Dorukyum-pycord-i18n](https://github.com/Dorukyum/pycord-i18n) | -| pycord-multicog | Cogs | [pycord-multicog](https://github.com/Dorukyum/pycord-multicog) | -| EzCord | Utilities | [EzCord](https://github.com/tibue99/ezcord) | - -## Bots - -| Name | Type | Link | -| ------------------------ | ------------ | ----------------------------------------------------------------------------------- | -| Discord-Multipurpose-Bot | Multipurpose | [github](https://github.com/pogrammar/Discord-multipurpose-bot/tree/master/Python) | -| inconnu | Fun & QOL | [github](https://github.com/tiltowait/inconnu) | -| Mai | Multipurpose | [github](https://github.com/TeamMai/Mai) & [website](https://xfghoul.github.io/Mai) | -| Toolkit | Multipurpose | [github](https://github.com/Dorukyum/Toolkit) | diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/more/contributing.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/more/contributing.mdx deleted file mode 100644 index 8fdf31af..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/more/contributing.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: Contributing to the Guide -description: Learn how to contribute to the Pycord Guide. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -This page outlines some of the basic syntax you need to know to contribute to the guide. We recommend you also check out: - -- [Docusaurus's Docs](https://docusaurus.io/docs/) -- [Contributing Rules](https://github.com/Pycord-Development/guide/blob/master/.github/CONTRIBUTING.md) - -## Info - -We use [Docusaurus v2](https://docusaurus.io/) to generate our guide. All the guide pages are generated -from `mdx` files in the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory. -MDX allows you to use JSX in your markdown content. - -## Structure - -Let's visit the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory and check its file structure. - -We can see various folders and a few files in it. Let's talk a bit about the `introduction.mdx` file. At the top, you can see something like: - -```md ---- -title: Introduction -description: ... -sidebar_position: 1 ---- -``` - -Most pages have this at the top. The `title` defaults to the file name. Since the titles need to be Capitalized according to need while the file names are lowercased (sometimes, the file names are shorter than the title!), we set a title ourselves. - -The `description` field is also important. This is the text shown in an embed when the page's link is shared on Discord, Twitter or other websites that support embedded links. Make sure to give a nice an interesting description! - -The `sidebar_position` field is pretty self-explanatory. It sets the position of the page in the sidebar. Most files in categories do not need this since they are sorted alphabetically. - -## Markdown Syntax - -This page quickly outlines some of the syntax that is used in markdown. - -````mdx -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - - ```python - print("We can use code blocks like this.") - ``` - -You can add [links to other websites](https://pycord.dev). You can add images like this: ![alternate text that describes the image](https://pycord.dev/image.png). - -- You can create -- unordered lists like this - -1. Or ordered lists -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` -4. Like this - -# Headers - -## Go - -### Like - -#### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet -```` - -
-Preview -
- -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - -```python -print("We can use code blocks like this.") -``` - -You can add [links to other websites](https://pycord.dev). You can add images by adding ![alt text](@site/static/img/favicon.ico). - -- You can create -- unordered lists like this - -1. Or ordered lists - -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` - -4. Like this - - # Headers - - ## Go - - ### Like - - #### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet - -
-
- -## Admonitions - -We can add warnings, notes, etc. with the following syntax: - -```md -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: -``` - -
-Preview -
- -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: - -
- -
- -## Discord Message Components - -As most files already have the imports for these, it's not that hard to add them. - -First, import the necessary components: - -```tsx -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; -``` - -The div starts like so: - -```tsx - - - - -
-``` - -This is where you list a `DiscordMessage`. - -```tsx - - - Hello! - - - -
-``` - - - - Hello! - - - -
- -It has a pretty straightforward syntax. - -:::tip - -Add a `
` to the end of a component to make the content below it look better. - -::: - -### Slash Commands - -To make a message authored by a slash command, do the following: - -```tsx - - -
- - update - -
- Updated dependencies to the latest version! -
-
-``` - - - -
- - update - -
- Updated dependencies to the latest version! -
-
- -### Buttons - -To make a message with buttons, do the following: - -```tsx - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
-``` - - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
- -## Page Format - -There are a few things you need to take care of: - -1. Make sure that the spelling and grammar is perfect. We have a GitHub action configured that will warn you about spelling errors when you start a pull request. Make sure to commit your changes accordingly. - - As for the grammar, you should try reading the changes you have done and wait for reviews from others. - -2. A common mistake people make is incorrect header style. People often think that the less the important the topic is, the lower it's heading style should be. - - ```md - [PAGE STARTS] - # Topic - ## Less Important Topic - ## Subtopic - ``` - - ```md - [PAGE STARTS] - # About - [Introduction] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - That's VERY wrong. Here's the correct example: - - ```md - [PAGE STARTS] - [Introduction] - ## Topic - ## Less Important Topic - ### Subtopic - ``` - - ```md - [PAGE STARTS] - [Introduction] - - ## About - [More Information] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - Note that the `---`s at the beginning have been skipped here. diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/more/git.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/more/git.mdx deleted file mode 100644 index 0f929d6d..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/more/git.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Installing Git -description: Learn how you can install Git on your system. ---- - -Git is software for tracking changes in any set of files (also known as a "version control" software), usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems). - -Let's see how to install Git on different platforms. - -## Windows - -On Windows, Git can be installed via: - -- [Git for Windows](https://gitforwindows.org) -- [Git Scm](https://git-scm.com/download/windows) - -## Linux - -On Linux, Git is probably already installed in your distribution's repository. If not, you can install it via [Git for Linux](https://git-scm.com/download/linux). You can also install it via the built-in package manager on your Linux distro. - -## Mac - -You can install Git for your macOS computer via [Git for Mac](https://git-scm.com/download/mac). Alternatively, it can be also be installed from the Xcode Command Line Tools by installing Xcode from the App Store, or by running this: - -``` -xcode-select --install -``` - -## Using Package Managers - -You can also install Git using package managers. - -### Chocolatey - -If you use the Chocolatey package manager, you can install Git using: - -``` -choco install git -``` - -### Scoop - -If you use Scoop, you can install Git using: - -``` -scoop install git -``` - -### Brew - -If you're on macOS or Linux, you can install Git using: - -``` -brew install git -``` diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx deleted file mode 100644 index b0b8c7ea..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Virtual Environments -description: Learn how to set up a virtual environment for Pycord. ---- - -## Setup - -Sometimes you want to keep libraries from polluting system installs or use a different version of libraries than the ones installed on the system. You might also not have permissions to install libraries system-wide. For this purpose, the standard library as of Python 3.3 comes with a concept called “Virtual Environment”s to help maintain these separate versions. - -A more in-depth tutorial is found on [Virtual Environments and Packages](https://docs.python.org/3/tutorial/venv.html). - -However, for the quick and dirty: - -Go to your project’s working directory: - -```bash -$ cd your-bot-source -$ python3 -m venv venv -``` - -Activate the virtual environment: - -```bash -$ source venv/bin/activate -``` - -On Windows you activate it with: - -```batch -$ venv\Scripts\activate.bat -``` - -Use pip like usual: - -```bash -$ pip install -U py-cord -``` - -Congratulations. You now have a virtual environment all set up. - -## Additional info - -It can be useful to set up a requirements.txt, so you can just put all of your dependencies in there and have pip install it. -For instance, if you wanted to have the latest 2.0 version of pycord and [pytz](https://github.com/stub42/pytz/blob/master/src/README.rst), just create a file named requirements.txt with the following contents: - -``` -py-cord>=2.0.0 -pytz -``` - -And then (in your virtual environment) you can just execute - -```bash -pip install -r requirements.txt -``` - -To keep from committing your virtual environment to git, you can set up a .gitignore file with the following line -(assuming you named your virtual environment venv like the above example): - -``` -venv/ -``` diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/_category_.json b/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/_category_.json deleted file mode 100644 index c38ea014..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 7, - "label": "Popular Topics", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx deleted file mode 100644 index 5377a6c3..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Cogs ---- - -Cogs, often known as modules or extensions, are used to organize commands into groups. This is useful -for grouping commands that have the same general idea (such as moderation commands). This also helps -to avoid making your bot's files messy and cluttered. - -## Getting Started - -First, you'll need to create a folder to store your cogs, e.g. `cogs/`. - -Then, create a file inside the folder, e.g. `cogs/greetings.py`. By convention, the file name should -be the same as the name of the cog or module. - -We can then create the cog. - -```python title="./cogs/greetings.py" -import discord -from discord.ext import commands - -class Greetings(commands.Cog): # create a class for our cog that inherits from commands.Cog - # this class is used to create a cog, which is a module that can be added to the bot - - def __init__(self, bot): # this is a special method that is called when the cog is loaded - self.bot = bot - - @commands.command() # creates a prefixed command - async def hello(self, ctx): # all methods now must have both self and ctx parameters - await ctx.send('Hello!') - - @discord.slash_command() # we can also add application commands - async def goodbye(self, ctx): - await ctx.respond('Goodbye!') - - @discord.user_command() - async def greet(self, ctx, member: discord.Member): - await ctx.respond(f'{ctx.author.mention} says hello to {member.mention}!') - - math = discord.SlashCommandGroup("math", "Spooky math stuff") # create a Slash Command Group called "math" - advanced_math = math.create_subgroup( - "advanced", - "super hard math commands!" - ) - - @math.command() - async def add(self, a: int, b: int): - c = a + b - await ctx.respond(f"{a} + {b} is {c}.") - - @advanced_math.command() - async def midpoint(self, x1: float, y1: float, x2: float, y2: float): - mid_x = (x1 + x2)/2 - mid_y = (y1 + y2)/2 - await ctx.respond(f"The midpoint between those coordinates is ({mid_x}, {mid_y}).") - - @commands.Cog.listener() # we can add event listeners to our cog - async def on_member_join(self, member): # this is called when a member joins the server - # you must enable the proper intents - # to access this event. - # See the Popular-Topics/Intents page for more info - await member.send('Welcome to the server!') - -def setup(bot): # this is called by Pycord to setup the cog - bot.add_cog(Greetings(bot)) # add the cog to the bot -``` - -You can add any number of commands to your cog, as well as event listeners. However, this code will -not work on its own. In your main bot file, you must add the following code: - -```python -bot.load_extension('cogs.greetings') -``` - -This loads the file `cogs/greetings.py` and adds it to the bot. -The argument of `load_extension` should be your cog's path (e.g. cogs/greetings.py) without the file -extension and with the `/` replaced with `.` - -If you have multiple cogs, you can add them all at once by adding the following code: - -```python -cogs_list = [ - 'greetings', - 'moderation', - 'fun', - 'owner' -] - -for cog in cogs_list: - bot.load_extension(f'cogs.{cog}') -``` - -## Cog Rules - -When using a cog instead of the main file, there are some changes you have to make to your code. This -is because cogs work slightly different from a regular file. - -### The `self` variable - -The self variable is a variable that represents a class. In the case of cogs, `self` represents -the cog. In the `__init__` function, you can see that we have `self.bot = bot`. `bot` represents your -`discord.Bot` or `discord.ext.commands.Bot` instance, which is used for some functions. - -This means that instead of using functions that would usually be accessed via `bot`, you now need -to access them via `self.bot` - -Because we're in a class, all of our commands are methods of that class. Because of this, all of our -functions need to have `self` as the first parameter, where `self` is the cog. Without this, we -wouldn't be able to access our bot instance. - -### Creating Commands - -When creating prefixed commands, your decorator would usually be something like `@bot.command()`. If you're using -cogs, this isn't the case. In a cog, you can't access the bot instance outside of functions, so to -register a function as a command, you must instead use `@commands.command()`. - -Similar to prefixed commands, you'll have to use either the `@discord.slash_command()`, `@discord.user_command()`, -or `@discord.message_command()` decorators for Application Commands. - -Also, when creating a command, make sure that it is indented. If we want a command to be actually -inside a cog, it has to be inside your cog's class. If the command is not inside the cog, -your command becomes useless. - -### Events - -When creating events, you can no longer use `@bot.event` as a decorator. This is because we cannot -access the `bot` variable outside a function. To make an event, you have to use the `ext.commands` -method, `@commands.Cog.listener()`. Events also need `self` as their first parameter. - -And that's it! Cogs are a simple and easy way of organizing your code. Now you can check out how to -create a help command [here](../extensions/commands/help-command). - -:::info Related Topics - -- [Creating a Help Command](../extensions/commands/help-command) -- [Rules and Common Practices](../getting-started/rules-and-common-practices) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Application Commands](../interactions#application-commands) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx deleted file mode 100644 index 3599cc82..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx +++ /dev/null @@ -1,383 +0,0 @@ ---- -title: Error Handling -description: All about handling errors. ---- - -import { - DiscordEmbed, - DiscordInteraction, - DiscordMessage, -} from "@pycord/discord-message-components-react"; -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -## About - -When using the library, errors are frequently raised due to various reasons. These reasons range from the Discord API -failing your bot's request due to missing permissions or an invalid syntax error. - -Before going into error handling, it's best that you learn the basic ways of handling errors. A good resource is: - -- [W3Schools' Guide to Python Try-Except Statements](https://www.w3schools.com/python/python_try_except.asp) - -## Basic Handling - -The most basic way to handle errors is to tackle it at the source. This can be done like so: - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -import asyncio - -import discord - -intents = discord.Intents.default() -intents.message_content = True - -bot = discord.Bot(intents=intents) - - -@bot.slash_command(description="Gets some feedback.") -@discord.option("name", description="Enter your name.") -async def feedback(ctx: discord.ApplicationContext, name: str): - try: - await ctx.respond(f"Hey, {name}! Send your feedback within the next 30 seconds please!") - - def is_author(m: discord.Message): - return m.author.id == ctx.author.id - - feedback_message = await bot.wait_for("message", check=is_author, timeout=30.0) - await ctx.send(f"Thanks for the feedback!\nReceived feedback: `{feedback_message.content}`") - except asyncio.TimeoutError: - await ctx.send("Timed out, please try again!") - - -bot.run("TOKEN") -``` - -If you respond within 30 seconds, the interaction will look like so: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Great bot! - - - Thanks for the feedback! -
- Received feedback: Great bot! -
-
-
- -Otherwise, if you don't respond in time, the interaction will go as follows: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Timed out, please try again! - -
-
- -This basic method of error handling can be extended to handle -many other errors including ones raised directly by py-cord. - -## Per-Command Handling - -This type of error handling allows you to handle errors per each command you have on your bot. -Each and every command can have it's own error handler made to handle specific errors that each command may raise! - -An example of per-command error handling is as follows: - -:::note Bridge Commands - -For these types of commands, it is recommended to utilize global error handling -until [the feature](https://github.com/Pycord-Development/pycord/issues/1388) is added. -::: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot(owner_id=...) # Your Discord user ID goes in owner_id - - -@bot.slash_command(description="A private command...") -@commands.is_owner() # This decorator will raise commands.NotOwner if the invoking user doesn't have the owner_id -async def secret(ctx: discord.ApplicationContext): - await ctx.respond(f"Hey {ctx.author.name}! This is a secret command!") - - -@secret.error -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.NotOwner): - await ctx.respond("Sorry, only the bot owner can use this command!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If your ID is registered as the owner ID, you'll get the following: - - - -
- - secret - -
- Hey Dorukyum! This is a secret command! -
-
-
- -Any other user whose ID doesn't match the bot owner's will get the following: - - - -
- - secret - -
- Sorry, only the bot owner can use this command! -
-
-
- -This local (per-command) error handler can also be used to handle the same types of errors that standard try-except -statements can handle. This is done by using the same method as above with the `isinstance` built-in function. - -## Per-Cog Handling - -Adding error handlers per-command can be quite the task in terms of work if you have a lot. If you have happened to -group your commands in cogs, then you're in luck! You can create an error handler that is specific to a cog and -handles all errors raised by commands inside that cog. - -Here's an example of a bot with a cog that implements its own error handling: - -```python title="./cogs/dm.py" -# This cog is for DM only commands! Sadly, we only have 1 command here right now... - -import discord -from discord.ext import commands - - -class DM(commands.Cog): - def __init__(self, bot: commands.Bot): - self.bot = bot - - @commands.command() - @commands.dm_only() # This decorator will raise commands.PrivateMessageOnly if invoked in a guild context. - async def avatar(self, ctx: commands.Context): - embed = discord.Embed( - title="Avatar", - description=f"Here's your enlarged avatar, {ctx.author.name}!", - color=ctx.author.top_role.color - ) - embed.set_image(url=ctx.author.display_avatar.url) - await ctx.send(embed=embed, reference=ctx.message) - - async def cog_command_error(self, ctx: commands.Context, error: commands.CommandError): - if isinstance(error, commands.PrivateMessageOnly): - await ctx.send("Sorry, you can only use this in private messages!", reference=ctx.message) - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -def setup(bot: commands.Bot): - bot.add_cog(DM(bot)) -``` - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -# This is the main file where we load the DM cog and run the bot. - -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix=commands.when_mentioned_or("!")) -bot.load_extension("cogs.dm") -bot.run("TOKEN") -``` - -If you use this command in a DM context, you'll get the following: - - - - !avatar - - -
- - !avatar - -
- - Here's your enlarged avatar, BobDotCom! - -
-
-
- -Otherwise, if used in a guild context: - - - - !avatar - - -
- - !avatar - -
- Sorry, you can only use this in private messages! -
-
-
- -Per-cog error handling comes in very handy as you can relegate all of your error handling to a single function instead -of spreading it out across several per-command error handlers or inside the commands themselves. - -## Global Handling - -If separating your error handling is not how you would like to handle errors, then global error handling is the way to -go. This method of handling allows you to relegate all handling to a single function that resides within your bot -instance. - -A non-subclassed bot would implement this like so: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot() - - -@bot.slash_command(description="Get the bot's current latency!") -@commands.cooldown(1, 30, commands.BucketType.user) -# ^ This decorator allows one usage of the command every 30 seconds and raises commands.CommandOnCooldown if exceeded -async def ping(ctx: discord.ApplicationContext): - await ctx.respond(f"Pong! `{int(bot.latency*1000)} ms`.") - - -@bot.event -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.CommandOnCooldown): - await ctx.respond("This command is currently on cooldown!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If you've subclassed your bot, the `on_application_command_error` event will be placed inside the subclass without a -`bot.event` decorator and `bot.slash_command` will be replaced with `discord.slash_command`. - -The error handling used above will yield this interaction if the command is used again too quickly: - - - -
- - ping - -
- Pong! 49 ms. -
- -
- - ping - -
- This command is currently on cooldown! -
-
-
- -The only issue regarding global error handling is that, if you have a large amount of commands, the global handler may -start to get crammed with a lot of code. This is where all the previously mentioned handlers can take their place! - -## FAQ - -#### Why does the example in per-cog handling have self at the start of its function signatures? - -This is a feature of classes and allows you to reference the cog object as `self` and get access to the bot object -passed at initialization through `self.bot`. - -If this is new to you, we recommend checking out these helpful resources to learn more about classes and cogs: - -- [W3Schools' Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [Our Cogs Guide Page](./cogs) - -#### How many errors can I handle in a single error handler? - -While all the examples in this guide page only handle one specific error and re-raise all others, all of these -error handlers can be extended to catch many errors. - -In [basic handling](#basic) (i.e. try/except statements) you can do one of two things: - -- Explicitly handle the errors you know might get raised and then have a broad `except Exception as exc:` statement - as a catch-all. -- Catch any and all errors via the catch-all statement mentioned above. - -In [per-command](#percommand), [per-cog](#percog), and [global handling](#global), you can use elif clauses with the -built-in isinstance function to catch specific errors. Atop of this, an else clause can be used to catch any other -errors you either don't want to handle or want to relegate to a different error handler. - -#### Can I use more than one type of error handler at once? - -Thankfully, all of these different ways of error handling can be mixed together, so you don't have to pick just one! -For commands that raise specific errors that no other commands will raise, you can use [per-command](#percommand). -For cogs that raise specific errors that no other cogs will raise, use [per-cog](#percog)! Lastly, for errors that -occur frequently across all commands and cogs, use [global handling](#global)! - -However, one important note to remember is that you should always raise the error again in an error handler if it -isn't handled there! If you don't do this, the error will go ignored and your other handlers won't have a chance to -do their work! - -#### What's the difference between slash and prefixed command error handling? - -Although most examples shown here use slash commands, the [per-cog handling](#percog) section presents a prefixed -command. The main difference you may notice is the change in command signature. - -To make the distinguishing features apparent: - -- Slash commands use `on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException)` - as presented in the [per-command](#percommand) and [global handling](#global) examples. -- Prefixed commands use `on_command_error(ctx: commands.Context, error: commands.CommandError)` as presented in the - [per-cog handling](#percog) example. - -This distinction is made as both types of commands need their own system for handling errors that are specific to -themselves. - -:::info Related Topics - -- [Slash Commands](../interactions/application-commands/slash-commands) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Cogs](./cogs) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx deleted file mode 100644 index 9f4210af..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Intents -description: All about intents in Discord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## What are Intents? - -Intents allow bot developers to "subscribe" to specific events in Discord. This is useful for bots that need to respond to specific events, such as when a user joins a server or sends a message. You could choose to enable all intents or to enable only specific intents that your bot requires. - -## How do I enable intents? - -:::important - -Remember that [Privileged Intents](#what-are-privileged-intents) require you to enable them in the Discord Developer Portal. Verified Discord Bots that don't already have access to them will need to request Discord to allow access. - -::: - - - - -```python -import discord - -bot = discord.Bot(intents=discord.Intents.all()) -``` - - - - - -You can view a list of intents and the events they subscribe to [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```python title="Enabling Intents" -import discord - -bot = discord.Bot(intents=discord.intents.members(bans=True, guilds=True)) -``` - - - - -## What are Privileged Intents? - -Discord defines some intents as "privileged" because of the sensitive information they contain. Currently, there are three privileged intents: `members`, `presences`, and `message_content`. These intents must be enabled in your bot's Developer Portal. Once your bot reaches 100 servers, you will need to verify your bot for these intents to keep working and for your bot to be able to be invited to more guilds. - -:::tip - -Only enable these intents if you need them. These intents give your bot access to quite sensitive information about the users in your guild. These intents are privileged to respect the privacy of users, and you should do that as well. - -Not enabling these intents doesn't mean you won't be able to ban users, but you will be unable to detect when a new user joins a guild, or what game they are playing. The majority of bots won't need all intents. - -::: - -:::info Related Topics - -- [Sharding Bots](sharding) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx deleted file mode 100644 index c3d17197..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Sharding -description: All about Sharding Discord Bots. ---- - -# Sharding - -## What is Sharding? - -Sharding is the process of breaking up your bot into smaller pieces so that it has a better time handling -events. As [Discord's Documentation](https://discord.com/developers/docs/topics/gateway#sharding) puts -it, sharding is "a method of user-controlled guild sharding which allows for splitting events across -several gateway connections." - -Sharding is used only for large bots and takes up additional resources for managing the new processes. -Pycord automatically shards your bot, so the only thing you need to do is use an `AutoShardedClient` -or `AutoShardedBot` class instead of a plain `Client` or `Bot` class. Pretty cool, right? - -Just because you _can_ shard your bot doesn't mean you _should_. While Pycord makes it easy to shard -your bot, it isn't necessary to shard unless your bot is large. Sharding a small bot isn't -just useless, but _harmful_, as it uses extra resources and may slow down your bot. Discord -themselves will let you know when your bot needs sharding, so you won't need to worry about this until they contact you. - -## How Do I Shard in Pycord? - -Sharding in Pycord is straightforward. - -Just replace your `discord.Client`, `discord.Bot`, `commands.Bot` objects -with `discord.AutoShardedClient`, `discord.AutoShardedBot`, `commands.AutoShardedBot` respectively. - -These new objects have been inherited from the original objects, so all the functions from those other types should be present. - -If you want to specify the number of shards your bot uses, -just add the `shards` parameter, along with the number of shards you want. - -## Why Should I Shard my Bot? - -Sharding is very necessary for big bots. While your bot grows, it gets harder for your bot to control -how many guilds it is in and what parts of your code should do what. This is exactly what sharding -handles, it makes all of this easier for your bot. Remember, though, only shard your bot once it's -big enough, and that's at _least_ 1,000 guilds. - -:::info Related Topics - -- [Hosting your Bot](../Getting-Started/hosting-your-bot) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx deleted file mode 100644 index bd2969c1..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Subclassing Bots -description: Subclassing is a popular way of creating Discord Bots. Explore how you can create a Discord bot by subclassing. ---- - -## About - -Subclassing is another popular way of creating Discord Bots. Here, you create a bot by extending a bot class. To some advanced users, this is preferable to creating a bot instance with `bot = discord.Bot()`. - -Subclassing is an intermediate python concept, so we recommend you learn about it before continuing. Some good resources are: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -## Why Subclassing? - -Many developers prefer to subclass their bots for many reasons, some of them being: - -#### Skeletal Frameworks for Bots - -Developers often share their bots code on open-source platforms, mostly GitHub, and allow users to self-host the bot (running their own instance of the bot with the code provided by the developer. Permissions vary in accordance to licences). Here, users find it easier and more convenient to have a small file that imports the custom bot class and runs it, rather than having to go through the code of the bot and find out which file to run. This makes it easier for people not familiar with programming to run and customize the bot, since it often brings down the code to: - -```python title="./main.py" -from src import Bot - -bot = Bot() - -bot.run("TOKEN") -``` - -Here, all the commands are inside the `/src` folder that the user need not bother with. - -#### Running Multiple Instances - -Some developers may need to run multiple instances of their bot (perhaps on different bot accounts). For example, a developer might have a second bot for testing alpha features. This system makes it simpler for the developer, and allows them to maintain multiple versions of the bot in the same directory: - -```python title="./alpha_bot.py" -from src import Bot - -class AlphaBot(Bot): # subclasses Bot - ... # insert any custom configuration - -bot = AlphaBot() - -@bot.slash_command() # adds a new slash command to this subclassed bot -async def alpha_feature(ctx): - await ctx.respond("Alpha Feature!") - -bot.run("TOKEN") -``` - -There are many more reasons to subclass! It's not required, and won't affect the speed of the bot, but it may affect your development process, for the good or for the worse. You don't miss out on any features when you subclass, either. Some developers want the OOP feel, while some just prefer that method and find it easier. - -## Basic Example - -```python -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override the on_ready event - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') - -bot = MyBot() - -@bot.slash_command() # create a slash command -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run('token') -``` - -As you can see, instead of creating a bot object with `bot = discord.Bot()`, we subclass [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). We then create an instance of our new bot class and run it. Notice how we don't need to use the `@event` decorator. - -Here's another example: - -```python title="./src/bot.py" -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override on_ready - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') -``` - -```python title="./src/\_\_init\_\_.py" -from .bot import MyBot # import the MyBot class from the bot.py file -``` - -```python title="./main.py" -from src import MyBot # import MyBot from /src - -bot = MyBot() # create an instance of MyBot - -@bot.slash_command() -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run("TOKEN") # run the bot -``` - -These are just two ways you could do it. There are ton of other structures you can implement. It's up to you. - -So, should you subclass? There are no limitations you face if you decide to subclass your bot, but, once again, it's up to you. - -:::info Related Topics - -- [Making a Help Command](../Extensions/Commands/help-command) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx deleted file mode 100644 index 23220b0e..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Threads -description: Threads with Pycord ---- - -In programming, threads are a way to run multiple processes at the same time. In Discord, threads are -a way to keep multiple conversations going at the same time. Let's take a brief look at how to use threads in Pycord. - -:::tip - -Not all the methods and attributes will be covered in this guide, but you can find them in our documentation! -[Check it out!](https://docs.pycord.dev/en/stable/api/models.html#discord.Thread) - -::: - -## Creating a thread - -With a few simple lines of code, we can create threads in Pycord. - -:::important - -All public threads need a starting message. This message will start the thread. However, private threads -(which are unlocked with having your server boosted to Level 2), do not require a starting message. - -::: - -### Creating thread from a message - -```python title="Creating a Thread from a Message" -message = await ctx.send("My Starting Message") -await message.create_thread(name="thread name", auto_archive_duration=60) -``` - -You may also use other ways to create the thread, for example, by using `on_message` events or by commands. - -### Creating thread in a channel - -```python title="Creating a Thread from a Channel" -channel = bot.get_channel(...) # define this! -await channel.create_thread(name="Thread Name", message=None, auto_archive_duration=60, type=None, reason=None) -``` - -A thread type could be `news_thread`, `public_thread`, `private_thread`. You may use it by passing `type=discord.ChannelType.news_thread`. - -## Deleting Threads - -Deleting Threads is simple. You need to get a thread and then use the `delete` method. - -```python title="Deleting a Thread" -thread = bot.get_channel(thread_id) # you could use other ways to get a thread -await thread.delete() -``` - -## Editing Threads - -**Parameters** - -- `name` (str) – The new name of the thread - -- `archived` (bool) – Whether to archive the thread or not. - -- `locked` (bool) – Whether to lock the thread or not. - -- `invitable` (bool) – Whether non-moderators can add other non-moderators to this thread. Only available for private threads. - -- `auto_archive_duration` (int) – The new duration in minutes before a thread gets automatically archived for inactivity. Must be one of 60, 1440, 4320, or 10080. - -- `slowmode_delay` (int) – Specifies the slow-mode rate limit for users in the thread, in seconds. A value of 0 disables slow-mode. The maximum value possible is 21600. - -```python title="Editing a Thread" -thread = bot.get_channel(id) -await thread.edit( - name="New Name", - archived=True, - locked=True, - slowmode_delay=10, - auto_archive_duration=60, -) -``` - -As you can see, threads are very simple. Once you learn how to use them, it's easy to create whatever you want. - -## FAQ - -### Why am I getting a `Forbidden` error when I try to create a thread? - -A `Forbidden` error occurs when the bot does not have the correct permissions to create threads. - -### Why am I getting an Unknown Message error when I try to create a thread? - -Getting an error looking something like `discord.ext.commands.errors.CommandInvokeError: Command -raised an exception: HTTPException: 400 Bad Request (error code: 10008): Unknown Message`? - -There could be multiple reasons, some of them being: - -- The message does not exist -- The message already has a thread -- The message is in channel x, you are trying to start a thread in channel y. -- The message was deleted. - -:::info Related Topics - -<>{/* I can't think of any related topics for this at the moment. */} - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/voice/_category_.json b/i18n/pt/docusaurus-plugin-content-docs/current/voice/_category_.json deleted file mode 100644 index 8baf3da8..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/voice/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 6, - "label": "Voice" -} \ No newline at end of file diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/voice/index.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/voice/index.mdx deleted file mode 100644 index 835838c6..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/voice/index.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Voice ---- - -Welcome to the guide for voice features in Pycord. - -:::caution -This guide requires previous experience with Pycord and Python. -::: - -## Requirements - -The only requirement which is required for voice features is [`PyNaCl`](https://pypi.org/project/PyNaCl/). -The following features are optional: - -:::tip -Opus is also a required library, but this comes with Pycord. -Some hosts may not come with it, though, so remember to always check if required dependencies are installed. -::: - -- [`FFmpeg`](https://ffmpeg.org) - used for sending/receiving files other than `.pcm` and `.wav` -- [`Pycord.Wavelink`](https://github.com/Pycord-Development/Pycord.Wavelink), - [`Lavalink.py`](https://github.com/Devoxin/Lavalink.py), - [`Wavelink`](https://github.com/PythonistaGuild/Wavelink) or any other Python LavaLink library for music playback. diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/voice/playing.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/voice/playing.mdx deleted file mode 100644 index 7a58baee..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/voice/playing.mdx +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Wavelink Audio Player ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { - defaultOptions, -} from "@site/src/components/DiscordComponent"; - -# About - -Pycord and Wavelink try to keep the playing of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio playing feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/). - -## Starting out - -First you need to run a [Lavalink Server](https://github.com/freyacodes/Lavalink) to connect with. -There a multiple documentations to do this, so we are not covering that here. - -You also need to install the [wavelink](https://github.com/PythonistaGuild/Wavelink) library. - -```py title="Installing wavelink" -python3 -m pip install wavelink -``` - -You will now want to connect to your server via a node. - -```py title="Connect Node with Lavalink" -import discord -import wavelink - -bot = discord.Bot() - -async def connect_nodes(): - """Connect to our Lavalink nodes.""" - await bot.wait_until_ready() # wait until the bot is ready - - nodes = [ - wavelink.Node( - identifier="Node1", # This identifier must be unique for all the nodes you are going to use - uri="http://0.0.0.0:443", # Protocol (http/s) is required, port must be 443 as it is the one lavalink uses - password="youshallnotpass" - ) - ] - - await wavelink.Pool.connect(nodes=nodes, client=bot) # Connect our nodes -``` - -
- -Now you are finished making your node! Next, you will want to: - -1. Making a play command -2. Adding connect events - -### Making a play command - -To make a play command, you will need to make a function to connect and play audio in a voice channel. - -```py title="Play Command Example" -import typing - -@bot.slash_command(name="play") -async def play(ctx, search: str): - # First we may define our voice client, - # for this, we are going to use typing.cast() - # function just for the type checker know that - # `ctx.voice_client` is going to be from type - # `wavelink.Player` - vc = typing.cast(wavelink.Player, ctx.voice_client) - - if not vc: # We firstly check if there is a voice client - vc = await ctx.author.voice.channel.connect(cls=wavelink.Player) # If there isn't, we connect it to the channel - - # Now we are going to check if the invoker of the command - # is in the same voice channel than the voice client, when defined. - # If not, we return an error message. - if ctx.author.voice.channel.id != vc.channel.id: - return await ctx.respond("You must be in the same voice channel as the bot.") - - # Now we search for the song. You can optionally - # pass the "source" keyword, of type "wavelink.TrackSource" - song = await wavelink.Playable.search(search) - - if not song: # In case the song is not found - return await ctx.respond("No song found.") # we return an error message - - await vc.play(song) # Else, we play it - await ctx.respond(f"Now playing: `{song.title}`") # and return a success message -``` - - - -
- - play - -
- Now playing: Never Gonna Give You Up -
-
- -
- -Now that you've done this, the only thing left to do is make your connect events. - -### Adding connect events - -The final step to this guide is connecting the node to your server when the bot goes online. - -To make it, you will want to do the following: - -```py title="Adding connect events" -@bot.event -async def on_ready(): - await connect_nodes() # connect to the server - -@bot.event -async def on_wavelink_node_ready(payload: wavelink.NodeReadyEventPayload): - # Everytime a node is successfully connected, we - # will print a message letting it know. - print(f"Node with ID {payload.session_id} has connected") - print(f"Resumed session: {payload.resumed}") - -bot.run("token") -``` - -Congratulations! You have now implemented voice playing into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/voice/receiving.mdx b/i18n/pt/docusaurus-plugin-content-docs/current/voice/receiving.mdx deleted file mode 100644 index 70f91507..00000000 --- a/i18n/pt/docusaurus-plugin-content-docs/current/voice/receiving.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Receiving Voice Samples ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -# About - -Pycord tries to keep the recording of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio recording feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/audio_recording.py). - -## Starting out - -The first thing you want to do is make a cache of your voice connections. This is fairly easy; as -it's just putting a variable with an empty dictionary in our code, such as `connections = {}`. - -You will now want to create your command for recording. - -```py title="Record Command Example" -import discord - -bot = discord.Bot() -connections = {} - -@bot.command() -async def record(ctx): # If you're using commands.Bot, this will also work. - voice = ctx.author.voice - - if not voice: - await ctx.respond("You aren't in a voice channel!") - - vc = await voice.channel.connect() # Connect to the voice channel the author is in. - connections.update({ctx.guild.id: vc}) # Updating the cache with the guild and channel. - - vc.start_recording( - discord.sinks.WaveSink(), # The sink type to use. - once_done, # What to do once done. - ctx.channel # The channel to disconnect from. - ) - await ctx.respond("Started recording!") -``` - - - -
- - record - -
- Started recording! -
-
- -
- -Now you are finished making your command for voice receiving! Next, you will want to: - -1. Make your finished callback -2. Make a stop command - -### Making a Callback - -To make a callback, you will want to define the currently undefined `once_done` function inside -our command, like so: - -```py title="Recorder Callback" -async def once_done(sink: discord.sinks, channel: discord.TextChannel, *args): # Our voice client already passes these in. - recorded_users = [ # A list of recorded users - f"<@{user_id}>" - for user_id, audio in sink.audio_data.items() - ] - await sink.vc.disconnect() # Disconnect from the voice channel. - files = [discord.File(audio.file, f"{user_id}.{sink.encoding}") for user_id, audio in sink.audio_data.items()] # List down the files. - await channel.send(f"finished recording audio for: {', '.join(recorded_users)}.", files=files) # Send a message with the accumulated files. -``` - - - - finished recording audio for:{" "} - {defaultOptions.profiles.bob.author} - - - -
- -Now that you've done this, the only thing left to do is make your stop command. - -### Making a Stop Command - -The final step to this guide is stopping the audio recording. This is the easiest step by far. - -To make it, you will want to do the following: - -```py title="Stop Recording Command" -@bot.command() -async def stop_recording(ctx): - if ctx.guild.id in connections: # Check if the guild is in the cache. - vc = connections[ctx.guild.id] - vc.stop_recording() # Stop recording, and call the callback (once_done). - del connections[ctx.guild.id] # Remove the guild from the cache. - await ctx.delete() # And delete. - else: - await ctx.respond("I am currently not recording here.") # Respond with this if we aren't recording. - -bot.run("token") -``` - -Congratulations! You have now implemented voice recording into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/pt/docusaurus-plugin-content-pagesindex.tsx b/i18n/pt/docusaurus-plugin-content-pagesindex.tsx deleted file mode 100644 index 6ca77bb2..00000000 --- a/i18n/pt/docusaurus-plugin-content-pagesindex.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import DefaultLayout from "@site/src/layouts/DefaultLayout"; -import PYCHero from "@site/src/components/PYCHero"; -import PYCButton from "@site/src/components/PYCButton"; - -export default function Home(): JSX.Element { - return ( - - -
- Imagine a place where you can learn how to create an awesome Discord - bot, equip it with Pycord, and have it running in less than a minute. - Imagine a place where you can learn everything about Pycord. Imagine a - guide. A Pycord Guide! -

- Whether you are a newbie or an experienced developer, you will find - everything you need to know about Pycord here. This guide will teach - you: -
    -
  • How to get a brand new bot running from scratch;
  • -
  • How to create Interactions, Context Menus and Commands;
  • -
  • In-depth concepts such as Embeds, Reactions, Help Commands, Paginators, etc;
  • -
  • Popular Topics such as working with Databases, Sharding, etc;
  • -
  • Ways to handle and manage common errors and best practices for bots;
  • -
  • And Much More!
  • -
-
-
- ); -} diff --git a/i18n/pt/docusaurus-theme-classic/footer.json b/i18n/pt/docusaurus-theme-classic/footer.json deleted file mode 100644 index 82aab2e0..00000000 --- a/i18n/pt/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "copyright": { - "message": "Copyright © 2022-2026 Pycord Development, All rights reserved.", - "description": "The footer copyright" - } -} diff --git a/i18n/pt/docusaurus-theme-classic/navbar.json b/i18n/pt/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 473b847e..00000000 --- a/i18n/pt/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "title": { - "message": "Pycord Guide", - "description": "The title in the navbar" - }, - "item.label.Home": { - "message": "Home", - "description": "Navbar item with label Home" - }, - "item.label.Docs": { - "message": "Docs", - "description": "Navbar item with label Docs" - }, - "item.label.GitHub": { - "message": "GitHub", - "description": "Navbar item with label GitHub" - }, - "item.label.Source": { - "message": "Source", - "description": "Navbar item with label Source" - } -} diff --git a/i18n/ru/code.json b/i18n/ru/code.json deleted file mode 100644 index 9cce6148..00000000 --- a/i18n/ru/code.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "theme.ErrorPageContent.title": { - "message": "This page crashed.", - "description": "The title of the fallback page when the page crashed" - }, - "theme.NotFound.title": { - "message": "Page Not Found", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "We could not find what you were looking for.", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.admonition.note": { - "message": "note", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "tip", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.danger": { - "message": "danger", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "info", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.caution": { - "message": "caution", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "Scroll back to top", - "description": "The ARIA label for the back to top button" - }, - "theme.blog.archive.title": { - "message": "Archive", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "Archive", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "Blog list page navigation", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "Newer Entries", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "Older Entries", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "Blog post page navigation", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "Newer Post", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "Older Post", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.blog.post.plurals": { - "message": "One post|{count} posts", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} tagged with \"{tagName}\"", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "View All Tags", - "description": "The label of the link targeting the tag list page" - }, - "theme.colorToggle.ariaLabel": { - "message": "Switch between dark and light mode (currently {mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "dark mode", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "light mode", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "Breadcrumbs", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription": { - "message": "{count} items", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "Docs pages", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "Previous", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "Next", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "One doc tagged|{count} docs tagged", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "{nDocsTagged} with \"{tagName}\"", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versionBadge.label": { - "message": "Version: {versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "latest version", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "Edit this page", - "description": "The link label to edit the current page" - }, - "theme.common.headingLinkTitle": { - "message": "Direct link to {heading}", - "description": "Title for link to heading" - }, - "theme.lastUpdated.atDate": { - "message": " on {date}", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": " by {user}", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "Last updated{atDate}{byUser}", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "Versions", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "Tags:", - "description": "The label alongside a tag list" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "Close", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "Blog recent posts navigation", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.copied": { - "message": "Copied", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "Copy code to clipboard", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "Copy", - "description": "The copy button label on code blocks" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "Toggle word wrap", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "Toggle the collapsible sidebar category '{label}'", - "description": "The ARIA label to toggle the collapsible sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "Main", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "Languages", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "On this page", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "Read More", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "Read more about {title}", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.blog.post.readingTime.plurals": { - "message": "One min read|{readingTime} min read", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.breadcrumbs.home": { - "message": "Home page", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "Docs sidebar", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "Close navigation bar", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← Back to main menu", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "Toggle navigation bar", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.SearchBar.seeAll": { - "message": "See all {count} results" - }, - "theme.SearchPage.documentsFound.plurals": { - "message": "One document found|{count} documents found", - "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.SearchPage.existingResultsTitle": { - "message": "Search results for \"{query}\"", - "description": "The search page title for non-empty query" - }, - "theme.SearchPage.emptyResultsTitle": { - "message": "Search the documentation", - "description": "The search page title for empty query" - }, - "theme.SearchPage.inputPlaceholder": { - "message": "Type your search here", - "description": "The placeholder for search page input" - }, - "theme.SearchPage.inputLabel": { - "message": "Search", - "description": "The ARIA label for search page input" - }, - "theme.SearchPage.algoliaLabel": { - "message": "Search by Algolia", - "description": "The ARIA label for Algolia mention" - }, - "theme.SearchPage.noResultsText": { - "message": "No results were found", - "description": "The paragraph for empty search result" - }, - "theme.SearchPage.fetchingNewResults": { - "message": "Fetching new results...", - "description": "The paragraph for fetching new search results" - }, - "theme.SearchBar.label": { - "message": "Search", - "description": "The ARIA label and placeholder for search button" - }, - "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "Clear the query", - "description": "The label and ARIA label for search box reset button" - }, - "theme.SearchModal.searchBox.cancelButtonText": { - "message": "Cancel", - "description": "The label and ARIA label for search box cancel button" - }, - "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "Recent", - "description": "The title for recent searches" - }, - "theme.SearchModal.startScreen.noRecentSearchesText": { - "message": "No recent searches", - "description": "The text when no recent searches" - }, - "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { - "message": "Save this search", - "description": "The label for save recent search button" - }, - "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "Remove this search from history", - "description": "The label for remove recent search button" - }, - "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "Favorite", - "description": "The title for favorite searches" - }, - "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "Remove this search from favorites", - "description": "The label for remove favorite search button" - }, - "theme.SearchModal.errorScreen.titleText": { - "message": "Unable to fetch results", - "description": "The title for error screen of search modal" - }, - "theme.SearchModal.errorScreen.helpText": { - "message": "You might want to check your network connection.", - "description": "The help text for error screen of search modal" - }, - "theme.SearchModal.footer.selectText": { - "message": "to select", - "description": "The explanatory text of the action for the enter key" - }, - "theme.SearchModal.footer.selectKeyAriaLabel": { - "message": "Enter key", - "description": "The ARIA label for the Enter key button that makes the selection" - }, - "theme.SearchModal.footer.navigateText": { - "message": "to navigate", - "description": "The explanatory text of the action for the Arrow up and Arrow down key" - }, - "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "Arrow up", - "description": "The ARIA label for the Arrow up key button that makes the navigation" - }, - "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "Arrow down", - "description": "The ARIA label for the Arrow down key button that makes the navigation" - }, - "theme.SearchModal.footer.closeText": { - "message": "to close", - "description": "The explanatory text of the action for Escape key" - }, - "theme.SearchModal.footer.closeKeyAriaLabel": { - "message": "Escape key", - "description": "The ARIA label for the Escape key button that close the modal" - }, - "theme.SearchModal.footer.searchByText": { - "message": "Search by", - "description": "The text explain that the search is making by Algolia" - }, - "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "No results for", - "description": "The text explains that there are no results for the following search" - }, - "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "Try searching for", - "description": "The text for the suggested query when no results are found for the following search" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "Believe this query should return results?", - "description": "The text for the question where the user thinks there are missing results" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "Let us know.", - "description": "The text for the link to report missing results" - }, - "theme.SearchModal.placeholder": { - "message": "Search docs", - "description": "The placeholder of the input of the DocSearch pop-up modal" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "Try again", - "description": "The label of the button to try again rendering when the React error boundary captures an error" - }, - "theme.common.skipToMainContent": { - "message": "Skip to main content", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "Tags", - "description": "The title of the tag list page" - } -} diff --git a/i18n/ru/docusaurus-plugin-content-blog/options.json b/i18n/ru/docusaurus-plugin-content-blog/options.json deleted file mode 100644 index 9239ff70..00000000 --- a/i18n/ru/docusaurus-plugin-content-blog/options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": { - "message": "Blog", - "description": "The title for the blog used in SEO" - }, - "description": { - "message": "Blog", - "description": "The description for the blog used in SEO" - }, - "sidebar.title": { - "message": "Recent posts", - "description": "The label for the left sidebar" - } -} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current.json b/i18n/ru/docusaurus-plugin-content-docs/current.json deleted file mode 100644 index 36b4849a..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.defaultSidebar.category.Getting Started": { - "message": "Getting Started", - "description": "The label for category Getting Started in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Interactions": { - "message": "Interactions", - "description": "The label for category Interactions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Application Commands": { - "message": "Application Commands", - "description": "The label for category Application Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.UI Components": { - "message": "UI Components", - "description": "The label for category UI Components in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Extensions": { - "message": "Extensions", - "description": "The label for category Extensions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Commands": { - "message": "Commands", - "description": "The label for category Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Pages": { - "message": "Pages", - "description": "The label for category Pages in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Voice": { - "message": "Voice", - "description": "The label for category Voice in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Popular Topics": { - "message": "Popular Topics", - "description": "The label for category Popular Topics in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar defaultSidebar" - } -} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png b/i18n/ru/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png deleted file mode 100644 index 7480e1da90a413f8dfe8e13b66a9a2a8c5dc2bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40520 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 CfS#QI diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg b/i18n/ru/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg deleted file mode 100644 index ce6b5110ab3b4285f55402fb88c1b8a8f6ba9900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78518 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 diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png b/i18n/ru/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png deleted file mode 100644 index 32a47d0424f1ab420ca363682a12460aff040c91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39618 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 aeS&BlM7jQ%=K2BnBlKRJKmVP^m;VLX8_o0p diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/_category_.json b/i18n/ru/docusaurus-plugin-content-docs/current/extensions/_category_.json deleted file mode 100644 index 309b494a..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 5, - "label": "Extensions", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json b/i18n/ru/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json deleted file mode 100644 index 652aa4ee..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Bridge" -} \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx deleted file mode 100644 index 451775d3..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Bridge ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -## Concept - -Let's say that you want to make a command that is both a Slash Command and a Prefixed Command. Now, you could just copy and paste the code from the first command callback to the other and make some adjustments, but that's not very efficient. - -This is where the `ext.bridge` module comes in. It allows you to use one callback to make both a Slash Command and a Prefixed Command. - -### Example Usage - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def hello(ctx): - await ctx.respond("Hello!") - -bot.run("TOKEN") -``` - - - -

- - hello - -
- Hello! - - - - !hello - - - -
- - !hello - -
- Hello! -
- - -## Syntax - -First, instead of using `discord.Bot` or `commands.Bot`, we use `bridge.Bot`. `bridge.Bot` does inherit from `commands.Bot`, so you can do anything with `bridge.Bot` that `commands.Bot` can do. -Then, we define a command with `@bot.bridge_command()`. This makes a Bridge Command, which has both a Prefixed Command counterpart and a Slash Command counterpart. -Next, the callback has access to a `ctx` object, which is the context of the command. This context is either of `BridgeApplicationContext` type or `BridgeExtContext`. Because of that, it makes detecting how the function was called easier. - -### Using Bridge Commands in a Cog - -Like Slash Commands and Prefixed Commands, you can use Bridge Commands in a Cog. You can do this by using the `bridge_command` decorator. Here's an example: - -```python -import discord -from discord.ext import bridge, commands - -class Greetings(commands.Cog): - def __init__(self, bot): - self.bot = bot - - @bridge.bridge_command() - async def hello(self, ctx): - await ctx.respond("Hello!") - - @bridge.bridge_command() - async def bye(self, ctx): - await ctx.respond("Bye!") - -def setup(bot): - bot.add_cog(Greetings(bot)) -``` - -The cog will automatically split the Bridge Command into their Slash Command and Prefixed Command counterparts. - - - -
- - hello - -
- Hello! -
- - - !hello - - - -
- - !hello - -
- Hello! -
- - -
- - bye - -
- Bye! -
- - - !bye - - - -
- - !bye - -
- Bye! -
-
- -### Deferring - -You can defer if you want to communicate to the user that your bot is busy processing the command. This is done by using `ctx.defer()`. For the Slash Command implementation, `ctx.defer()` calls the function that gives out a "Bot is thinking" message. For the Prefixed Command implementation, `ctx.defer()` enables the typing indicator. - - - -### Options - -Options are pretty straightforward. You just specify them like you do with prefixed commands, and you're all set! - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def sum(ctx, a: int, b: int): - await ctx.respond(a + b) - -bot.run("TOKEN") -``` - - - -
- - sum - -
- 4 -
- - - !sum 2 2 - - - -
- - !sum 2 2 - -
- 4 -
-
diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json b/i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json deleted file mode 100644 index 63f8e08e..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx deleted file mode 100644 index bf345c07..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Command Groups ---- - -Command groups are a way to create subcommands for your commands. For example, `!afk set` or `!afk -remove`. - -## Syntax - -Creating a command group is very simple. - -```python title="Command Groups Example" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!') - -@bot.group() -async def afk(): - pass - -@afk.command() -async def set(): - ... - -@afk.command() -async def remove(): - ... - -# Another command group - -@bot.group(invoke_without_command=True) # Indicates if the group callback should begin parsing and invocation only if no subcommand was found. -async def math(ctx): - await ctx.send('Subcommand not found') - -@math.command() -async def add(ctx, a: int, b: int): - ... - -@math.command() -async def subtract(ctx, a: int, b: int): - ... -``` - -To create a command group, the command's decorator must be `@bot.group`. Once you have a command with -that decorator, you can use `@function.command()`, such as `@math.command()`. Now, you have subcommand -groups! - - - -:::info Related Topics - -- [Prefixed Commands](./prefixed-commands.mdx) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx deleted file mode 100644 index e84fd42d..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx +++ /dev/null @@ -1,481 +0,0 @@ ---- -title: Help Command ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Pycord's `commands` extension comes with a built-in help command. In this guide, we will take a look at them as well as learn how to create your own. Let's dive in! - -:::note - -This guide demonstrates using object-oriented programming and subclassing to make a help command for your -Pycord bot. It is important to understand these two concepts before continuing. - -**Learning Resources**: - -- [W3Schools - Python Subclassing](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools - Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -::: - -## The Wrong Way - -A popular way to create a help command is to disable the built-in help command and create your own. This is not recommended as it will lead to a lot of confusion. - -```python title="The Wrong Way" -bot = commands.Bot(command_prefix='!', help_command=None) -# OR -bot.help_command = None -# OR -bot.remove_command("help") - -@bot.command() -async def help(ctx, *, argument=None): - ... -``` - -While it's possible to create a help command this way, doing so does not utilize the full capabilities -of making one with Pycord. Making a help command with subclassing and OOP will save time and effort. - -## Types of Help Commands - -There are two types of built-in help commands: - -- [`DefaultHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.DefaultHelpCommand) -- [`MinimalHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.MinimalHelpCommand) - -`DefaultHelpCommand` is the command enabled by default. It isn't the best looking, but `MinimalHelpCommand` can help make it look a bit better. - - - - -```python title="Default Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.DefaultHelpCommand()) # help_command is DefaultHelpCommand by default so it isn't necessary to enable it like this -# We enable it here for the sake of understanding - -... - -bot.run("token") -``` - - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- - -```python title="Minimal Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.MinimalHelpCommand()) - -... - -bot.run("token") -``` - - - - !help - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
- -
- -
- -## Updating Built-in Help Commands - -Let's try to make the `MinimalHelpCommand` look better. We can do this by putting its content in an -embed. - -```python title="Minimal Help Command Example" -bot = commands.Bot(command_prefix='!') - - -class MyNewHelp(commands.MinimalHelpCommand): - async def send_pages(self): - destination = self.get_destination() - for page in self.paginator.pages: - emby = discord.Embed(description=page) - await destination.send(embed=emby) - -bot.help_command = MyNewHelp() -``` - -Let's go through the code. - -First, we create a new class called `MyNewHelp`. This class is a subclass of `MinimalHelpCommand`. - -Next, we override the `send_pages` method. This method is responsible for sending the help command to -the user. We override this method because we don't want to change the content of the pages, just how -they are sent. - -We use the `get_destination` method to get the destination of the message. This is the channel or use that the help -command is to be sent to. - -We use the `paginator.pages` property to get the different pages of the help command. We put the page -in an embed, and then send the embed to the destination channel. - -Finally, we set this as our new help command using `bot.help_command = MyNewHelp()`. - - - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a - category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
-
- -## Creating Your Help Command - -Not satisfied with the built-in help commands? You can create your own! - -For this, we will subclass the `HelpCommand` class. - -There are 4 methods that we need to override: - -- `HelpCommand.send_bot_help(mapping)` that gets called with `help` -- `HelpCommand.send_command_help(command)` that gets called with `help ` -- `HelpCommand.send_group_help(group)` that gets called with `help ` -- `HelpCommand.send_cog_help(cog)` that gets called with `help ` - -### Bot Help - -```python title="Bot Help Example" -class MyHelp(commands.HelpCommand): - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help") - for cog, commands in mapping.items(): - command_signatures = [self.get_command_signature(c) for c in commands] - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's go through the code. - -- First, we create a new class called `MyHelp`. This class is a subclass of `HelpCommand`. - -- Next, we override the `send_bot_help` method. This method is responsible for sending the main help - command to the user. - -- We create an embed with the title "Help". - -- We iterate through `mapping.items()`, which returns a list of tuples, the first element being the - cog and the second element being a list of commands. - -- By using `self.get_command_signature(c)` we get the signature of the command, also known as the - `parameters` or `arguments`. - -- There is a chance that the cog is empty, so we use `if command_signatures:`. - -- We get the name of the cog using `getattr(cog, "qualified_name", "No Category")`. This calls the - cog's attribute `qualified_name` which returns "No Category" if the cog has no name. - -- We add a field to the embed with the name of the cog and the value of the command signatures. - -- Finally, we send the embed to the channel. - -Let's improve the code a little. - -```python title="Improved Bot Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - command_signatures = [self.get_command_signature(c) for c in filtered] - - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Now the help command won't show commands that the user can't use, as well as aliases for commands. -Let's get the help command to show command aliases. - -### Command Help - -This function is called when the user uses `help `. - -```python title="Command Help Example" -class MyHelp(commands.HelpCommand): - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command), color=discord.Color.random()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's quickly go through the code we haven't discussed yet. - -- In line 3, we create an embed with a title the signature of the command (so that the title of the - embed looks like ` [parameter]`), and a random color. - -- In lines 4 and 5, we get the command's `help` description and add it to the embed. The help description - of a command can be specified in the docstrings of a command function. For example: - - ```` - ```python - @bot.command() - async def ping(ctx): - """Returns the latency of the bot.""" - await ctx.send(f"Pong! {round(bot.latency * 1000)}ms") - ``` - ```` - -- Line 6 is shorthand for - - ```python - alias = command.aliases - if alias: - ... - - # is the same as - - if alias := command.aliases: - ... - ``` - - A very helpful (but not well-known) Python shorthand! - -- In line 7, we get the aliases of the command and add them to the embed. - -### Cog Help - -This is pretty easy! - -```python title="Custom Cog Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_cog_help(self, cog): - embed = discord.Embed(title=cog.qualified_name or "No Category", description=cog.description, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(cog.get_commands()): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Once again, we create an embed, get the commands that the user can use, and add them to the embed. - -### Group Help - -Similar to the cog help, this is pretty easy! - -```python title = "Custom Group Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_group_help(self, group): - embed = discord.Embed(title=self.get_command_signature(group), description=group.help, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(group.commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Add all of these methods together, and you have a fully functioning help command! - -
-Click to see the final code for this section -
- -:::note - -The following code has been slightly edited from the tutorial version. - -::: - -```python title="Custom Help Command Example" -class SupremeHelpCommand(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - if command_signatures := [ - self.get_command_signature(c) for c in filtered - ]: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command) , color=discord.Color.blurple()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_help_embed(self, title, description, commands): # a helper function to add commands to an embed - embed = discord.Embed(title=title, description=description or "No help found...") - - if filtered_commands := await self.filter_commands(commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No help found...") - - await self.get_destination().send(embed=embed) - - async def send_group_help(self, group): - title = self.get_command_signature(group) - await self.send_help_embed(title, group.help, group.commands) - - async def send_cog_help(self, cog): - title = cog.qualified_name or "No" - await self.send_help_embed(f'{title} Category', cog.description, cog.get_commands()) - -bot.help_command = SupremeHelpCommand() -``` - -
-
- -## Command Attributes - -How can you add cooldowns, set aliases, and change the name of help commands? Command attributes can -help you do all of that, and more! - -```python title="Help Command Attributes" -attributes = { - 'name': "help", - 'aliases': ["helpme"], - 'cooldown': commands.CooldownMapping.from_cooldown(3, 5, commands.BucketType.user), -} - -# You need to use CooldownMapping.from_cooldown(rate, per, type) - -bot.help_command = MyHelp(command_attrs=attributes) -``` - -## Error Handling - -When a user attempts to use a command that does not exist, we need to inform the user. -We can do this by overriding the `send_error_message` function. - -```python title="Custom Help Error Example" -class MyHelp(commands.HelpCommand): - async def send_error_message(self, error): - embed = discord.Embed(title="Error", description=error, color=discord.Color.red()) - channel = self.get_destination() - - await channel.send(embed=embed) -``` - - - - !help update_pycord - - - - Command 'update_pycord' not found. - - - - -## Credits - -Most of the content from this guide is from -[InterStella0's walkthrough guide on subclassing HelpCommand](https://gist.github.com/InterStella0/b78488fb28cadf279dfd3164b9f0cf96). -Thanks to InterStella0 for making this guide amazing. - -:::info Related Topics - -- [Subclassing Bots](../../Popular-Topics/subclassing-bots) -- [Prefixed Commands](./prefixed-commands) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx deleted file mode 100644 index 87bef7ac..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx +++ /dev/null @@ -1,324 +0,0 @@ ---- -title: Prefixed Commands -description: Learn how to use the commands extension for Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Before Discord added slash commands, all bots had prefixed commands. A user would type the bot's prefix -followed by a word or phrase to invoke a command, such as `?help` or `!help`. -However, this prefixed commands system isn't native to Discord! Developers made use of an `on_message` -event to check if the message began with a certain character, then invoke the command. Every time a -message was sent, the bot would see the message and check for its "prefix" - -The syntax becomes a little more complicated when you want to have multiple commands. There are several -disadvantages to this system. This is where the commands extension comes in. `ext.commands` has -various advantages, such as: - -- Simpler syntax -- Easier to use -- Easier to parse user input -- Comes with built-in help commands -- Comes with a built-in system for categorizing commands - - - - -```python title="Prefixed Commands with Events" -import discord - -client = discord.Client() - -@client.event -async def on_message(message): - if message.content.startswith("!ping"): - await message.channel.send("Pong!") - - elif message.content.startswith("!announce"): - if len(message.content.split(" ")) < 3: - await message.channel.send("You need to specify a title and a message. Correct usage: `!announce Hello Hello everyone!`") - return - - msg = message.content.split(" ", 2) - title = msg[1] - content = msg[2] - - await message.channel.send("**{}**\n{}".format(title, content)) - - elif message.content.startswith("!"): - await message.channel.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !help - - - Unknown Command. - -
- -
- - -```python title="The Commands Extension" -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix="!", intents=intents) - -@bot.command() -async def ping(ctx): - await ctx.send("Pong!") - -@bot.command() -async def announce(ctx, title, *, message): - await ctx.send("**{}**\n{}".format(title, message)) - -@bot.event -async def on_command_error(ctx, error): - if isinstance(error, commands.CommandNotFound): - await ctx.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !pycord - - - Unknown command. - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
- !announce -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The commands extension has many more uses. This example only showcases the basic features mentioned -in the previous example. Other things you can do with the commands extension include using a different -built-in help command and creating your own. The following tutorials showcase these. - -::: - -
-
- -## Syntax - -Before we check out the syntax, let's take a look at the bot classes. - -> `discord.Client` - Contains only events. -> -> `discord.Bot` - Subclasses `discord.Client`, adds commands. -> -> `discord.ext.commands.Bot` - Subclasses `discord.Bot`, adds prefixed commands, cogs, and more. - -This means that `discord.ext.commands.Bot` has both slash commands and prefixed commands, as well as -events, cogs and more. - -Now let's look at the syntax. - -```python title="A Simple Prefixed Bot" -import discord -from discord.ext import commands # Import the commands extension -# discord.ext.commands are not the same as discord.commands! - -intents = discord.Intents.default() #Defining intents -intents.message_content = True # Adding the message_content intent so that the bot can read user messages - -bot = commands.Bot(command_prefix="!", intents=intents) # You can change the command prefix to whatever you want. - -@bot.command() # This is the decorator we use to create a prefixed command. -async def ping(ctx): # This is the function we will use to create the command. - await ctx.send("Pong!") # This is the response the bot will send. - - -bot.run("token") # Run the bot with your token. -``` - - - - !ping - - - Pong! - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The help command is a built-in command and is enabled by default. You will learn more about it in the -following guides. - -::: - -## Parameters - -Prefixed commands can take parameters, just like slash commands. You can specify the parameters in -the function itself. - -```python title="Parameters Example 1" -@bot.command() -async def echo(ctx, *, message): - await ctx.send(message) -``` - -`ctx` is the context of the message. `*` means that the parameter can be any number of words. `message` -is the parameter. If you had not passed `*`, `message` would only have been one word. - -For example, if a user had used `!echo hello world`, `message` would have been `hello`. Since we -passed `*`, `message` is `hello world`, or the rest of the message. - -We can pass multiple parameters too! - -```python title="Parameters Example 2" -@bot.command() -async def echo(ctx, channel:discord.TextChannel, title, *, message): - await channel.send("**{}**\n{}".format(title, message)) -``` - -In the example above, `channel` is a parameter that is of type `discord.TextChannel`. When you -specify the type of the parameter, Pycord will automatically try to convert the parameter to that type. -That is why you can use `channel.send` directly without needing to convert it first. - -We also have a new parameter, `title`. This does not have a type, so it will be a string. `*` means -that the rest of the message belongs to the next parameter, in this case, `message`. - -When a user types `!echo #general Greetings! Hello World!`, `channel` will be the text channel -`#general`, `title` will be `Greetings!` and `message` will be `Hello World!`. - -Let's take an example where the user passes `!echo #general Holiday Greetings! Greetings to you all!`. -Here, the user wants the title to be "Holiday Greetings!" and the message to be "Greetings to you all!". -However, since Pycord parses the message at whitespaces, the title will end up being "Holiday" and the -message "Greetings! Greetings to you all!". The user can prevent this by typing `!echo "Holiday -Greetings!" Greetings to you all!`. - - - - - - !echo #general Holiday Greetings! Greetings to you all! - - - Holiday -
- Greetings! Greetings to you all! -
- - !echo #general "Holiday Greetings!" Greetings to you all! - - - Holiday Greetings! -
- Greetings to you all! -
-
- -Let's check out another example for parameters and parameter types. - -```python title="Parameters Example 3" -import random - -@bot.command() -async def gtn(ctx, guess:int): - number = random.randint(1, 10) - if guess == number: - await ctx.send("You guessed it!") - else: - await ctx.send("Nope! Better luck next time :)") -``` - -If you had not specified the type of the parameter, it would have been a string. And since `"5"` is not -the same as `5` in python, the bot would have responded with "Nope! Better luck next time :)". -Even if you do not specify the type of the parameter, you can still convert it later on, in this case, -with `int(guess)`. - -:::info Related Topics - -- [Command Groups](groups) -- [Rules and Common Practices](../../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json b/i18n/ru/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json deleted file mode 100644 index baeba701..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Pages", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx deleted file mode 100644 index be90b035..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Paginator Basics ---- - -# Paginator Basics - -## [Page](https://docs.pycord.dev/en/stable/ext/pages/index.html#page) - -This class contains two attributes: `content` and `embeds`, which correspond to the attributes of the same name on the -`discord.Message` class. -To create a new Page, use the following syntax: - -```py -import discord -page = Page(content="My Page Content", embeds=[discord.Embed(title="My First Embed Title")]) -``` - -## [PageGroup](https://docs.pycord.dev/en/stable/ext/pages/index.html#pagegroup) - -This class represents a group of pages. It uses most of the same parameters as `Paginator`, which allows each -`PageGroup` to effectively have its own settings and behaviours. - -## [Paginator](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator) - -This is the main class for `ext.pages`, and is used to control most of the functionality of the extension. - -In its most basic form, with no arguments provided (default values listed below), a paginator can be created like so: - -```py title="Paginator Example" -import discord -from discord.ext.pages import Paginator, Page - -my_pages = [ - Page( - content="This is my first page. It has a list of embeds and message content.", - embeds=[ - discord.Embed(title="My First Embed Title"), - discord.Embed(title="My Second Embed Title"), - ], - ), - Page( - content="This is my second page. It only has message content.", - ), - Page( - embeds=[ - discord.Embed( - title="This is my third page.", - description="It has no message content, and one embed.", - ) - ], - ), -] -paginator = Paginator(pages=my_pages) -``` - -The only required parameter for `Paginator` is the `pages` parameter, which is usually a list of `Page` objects. - -You can also pass in a list of `PageGroup` objects, a list of strings, a list of embeds, or a list of lists of embeds. - -Once the `Paginator` instance is created, you can call either -[`Paginator.send()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.send) -or [`Paginator.respond()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.respond) -to send a message or response with the paginator's contents. - -#### Depending on what's being passed to the `pages` parameter, the behaviour of the paginator may differ: - -- Passing a list of `PageGroup` objects will essentially treat each `PageGroup` as its own Paginator, with most - `Paginator` attributes able to be set independently for each `PageGroup`. - \- Each `PageGroup` accepts its own `pages` parameter, which inherits the same behaviour as the `pages` parameter - of `Paginator`, except it cannot contain other `PageGroup` objects. -- If a page is a `Page` object, this will allow you to specify both the `discord.Message.content` and - `discord.Message.embeds` attributes for a page. - \- **This is the preferred method of defining a page.** -- If a page is a string, this will be used for the `discord.Message.content` attribute. This type of page cannot have - any embeds. -- If a page is a list of embeds, this will be used for the `discord.Message.embeds` attribute. This type of page - cannot have any message content. -- If a page is a list of lists of embeds, each parent list item will create a page containing all embeds from its - child list. This type of page cannot have any message content. - -#### Parameters for the `Paginator` class which have default values: - -- `show_disabled` **:** `True` - - Show buttons that are disabled (i.e. can't be clicked) -- `author_check` **:** `True` - - Only the author can interact with the paginator. -- `timeout` **:** `180` _(seconds)_ - - The paginator will time out and become inactive after this many seconds. -- `disable_on_timeout` **:** `True` - - If the paginator times out, it will be automatically disabled and all buttons will be unusable. -- `use_default_buttons` **:** `True` - - Use the default set of 4 buttons and a page indicator. -- `show_indicator` **:** `True` - - When using the default buttons, shows a middle 5th button with the current/total page numbers. - -**For other parameters that can be set on initialization, please check the -[API Reference](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator)** - -## [PaginatorButton](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatorbutton) - -This class represents a button used to navigate between the pages of a paginator. It's also used to create the page -indicator. - -When creating your own custom buttons, you can either use this class directly or subclass it to add any additional -functionality you may need. - -To add custom buttons to the paginator instead of the default navigation buttons, you have two options to do so: - -1. **Using the `custom_buttons` parameter of `Paginator`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - buttons = [ - PaginatorButton("first", label="<<-", style=discord.ButtonStyle.green), - PaginatorButton("prev", label="<-", style=discord.ButtonStyle.green), - PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True), - PaginatorButton("next", label="->", style=discord.ButtonStyle.green), - PaginatorButton("last", label="->>", style=discord.ButtonStyle.green), - ] - paginator = Paginator( - pages=["Page 1", "Page 2", "Page 3"], - show_indicator=True, - use_default_buttons=False, - custom_buttons=buttons, - ) - ``` -2. **Using `Paginator.add_button()`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"], use_default_buttons=False) - paginator.add_button(PaginatorButton("prev", label="<", style=discord.ButtonStyle.green)) - paginator.add_button(PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True)) - paginator.add_button(PaginatorButton("next", label=">", style=discord.ButtonStyle.green)) - ``` - -If you want to use the default navigation buttons, but not all of them, you can also use `Paginator.remove_button()` to -selectively remove them: - -```py -from discord.ext.pages import Paginator - -paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"]) -paginator.remove_button("first") -paginator.remove_button("last") -``` - -## [PaginatorMenu](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatormenu) - -This class represents the `discord.Select` menu used to navigate between `PageGroup` instances. In most situations, you -will not need to interact with this class directly. - -If you do subclass it, you'll likely want to call `super()` in your `__init__` method to ensure that the `PageGroup` -navigation functionality is retained. - -## Usage Examples - -For a comprehensive list of examples showing all `Paginator` functionality, please see the -[example in cog form](https://github.com/Pycord-Development/pycord/blob/master/examples/views/paginator.py) in the repo. - -## Support and Feedback - -If you have any questions, suggestions, or feedback for `ext.pages`, please join the -[Discord server](https://discord.gg/pycord). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx deleted file mode 100644 index b8d68925..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Paginator FAQ ---- - -# Paginator FAQ - -- **What's the difference between `Paginator.send()` and `Paginator.respond()`?** - - `Paginator.send()` is used to send a channel message (DMChannel or TextChannel) with the paginator. - - `Paginator.respond()` is used to send an interaction response (or followup) message with the paginator. - -- **How can the bot send a paginator to a different destination than where it was invoked?** - - Use the `target` parameter in `Paginator.send()` or `Paginator.respond()`. - - You can also set the `target_message` parameter to control what's shown as a response where the paginator was originally invoked. - - For `Paginator.respond()`, this parameter is required if `target` is set, as an interaction requires being responded to. - -- **How can I change the paginator's behavior without re-creating and re-sending it?** - - Use the `Paginator.update()` method. - -- **How can I make the bot actually do something with the contents of a page?** - - Use the (upcoming) `Paginator.page_action()` method. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json b/i18n/ru/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json deleted file mode 100644 index 36dfb009..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Tasks" -} \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx deleted file mode 100644 index 848f6066..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Tasks ---- - -## Concept - -So you want to run a background task running at some specified interval? Thankfully, that's a common thing to do, whether you're working with some API or handling some background logic don't worry, the Pycord tasks extension is here to make life easier for you! - -With the tasks extension, you can make background tasks without worrying about the asyncio hell and mind bogglers like "what if my internet dies" and "how do I handle reconnecting" with the added benefit of a lot of useful additions that are one line of code away! - -### Example Usage - -```py -import discord -from discord.ext import tasks - -bot = discord.Bot() - -@bot.event -async def on_ready(): - very_useful_task.start() - -@tasks.loop(seconds=5) -async def very_useful_task(): - print('doing very useful stuff.') - -bot.run("TOKEN") -``` - -If you do run this code in your terminal you should see something like this after about 15 seconds: - -``` -doing very useful stuff. -doing very useful stuff. -doing very useful stuff. -``` - -For a more useful example here's a task in a cog context ripped straight from the [docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#recipes): - -```py -from discord.ext import tasks, commands - -class MyCog(commands.Cog): - def __init__(self): - self.index = 0 - self.printer.start() - - def cog_unload(self): - self.printer.cancel() - - @tasks.loop(seconds=5) - async def printer(self): - print(self.index) - self.index += 1 -``` - -As you'd expect this will increment a number and print it out every 5 seconds like so: - -```sh -0 -# 5 seconds later -1 -# 5 more seconds later -2 -# ... -``` - -## [Tasks](https://docs.pycord.dev/en/stable/ext/tasks/index.html) - -Now let's get into the nitty-gritty of tasks. - -As you've seen tasks can work in both outer scope and class contexts and the handle is roughly the same, you define a task using the `tasks.loop` decorator and use the `start` method to start it, the difference is you add the `self` argument when in a class context so since most people have all their bot's code in Cogs all the following code blocks will be in a Cog context to make it easy to copy it then apply whatever modifications you might need! - -### [Creating a task](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop) - -A look at `discord.ext.tasks.loop`'s definition in the documentation reveals that: - -1. As you've seen before it expects the time between each execution, that however doesn't have to be in seconds as - there are `seconds`, `minutes` and `hours` parameters to make it easier for us, they can also be floats in case you want - ultra-precision. -2. You can also pass in a `datetime.time` object or a sequence of them in the `time` parameter which will make it run - at the specified time(s). -3. You can pass in how many times a loop runs before it stops by passing in the `count` parameter, you can use `None` - to make it run forever which is also the default. -4. The loop function **_must_** be a coroutine. - -These are all really useful, and they aren't the only parameters so if you want to know more about them check out the -[docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop)! - -### Attributes - -A task has the following attributes: - -- `current_loop`: The current loop the task is on. -- `hours`, `minutes`, `seconds`: attributes that represent the time between each execution. -- `time`: A list of datetime.time objects that represent the times the task will run, returns `None` if no datetime - objects were passed. -- `next_iteration`: A `datetime.datetime` object that represents the next time the next iteration of the task will - run, can return `None` if the task stopped running. - -These attributes serve as a really powerful asset to get info about your loop. - -### Example - -Now let's create a cog that handles a leaderboard we have in our bot using Tasks then explain what we did after that and -also provide a refresher of how slash commands groups work in cogs. - -For the sake of this example let's pretend that we have a leaderboard module that does all the leaderboard handling for -us and that computing the leaderboard is very expensive computationally wise, so we want to store one version of it that -gets regularly updated instead of generating it every time someone calls the `/leaderboard view` command. - -```py -from discord.ext import tasks, commands -from discord.commands import SlashCommandGroup, CommandPermissions - -from leaderboard import * # Mock leaderboard module. - -class LeaderboardCog(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.update_leaderboard.start() - self.leaderboard_embed = generate_leaderboard_embed() - - leaderboard = SlashCommandGroup(name='leaderboard', description='Leaderboard commands.') - - @tasks.loop(minutes=10) - async def update_leaderboard(self): - print('Updating leaderboard...') - await update_leaderboard() - self.leaderboard_embed = generate_leaderboard_embed() - - @update_leaderboard.before_loop - async def before_update_leaderboard(self): - await self.bot.wait_until_ready() - print("About to start updating leaderboard.") - - @update_leaderboard.after_loop - async def after_update_leaderboard(self): - leaderboard_cleanup() - print("Stopped updating leaderboard.") - - @update_leaderboard.error - async def update_leaderboard_error(self, error): - print(f"Oh no, an error occurred while updating the leaderboard. Error: {error}") - - @leaderboard.command() - async def view(self, ctx): - await ctx.respond(embed=self.leaderboard_embed) - - @leaderboard.command() - async def update_info(self, ctx): - await ctx.respond(f"""***Leaderboard Info***\n - Last update: {(600 - self.update_leaderboard.next_iteration.timestamp())//60} minutes ago.\n - Next update: in {self.update_leaderboard.next_iteration.timestamp() // 60} minutes.\n - Time between loops: {self.update_leaderboard.minutes} minutes.\n - Times updated this session: {self.update_leaderboard.current_loop}. - Running? {self.update_leaderboard.is_running()} - Failed? {self.update_leaderboard.failed()}""", ephemeral=True) - - # Now for the owner only commands: - - leaderboard_config = SlashCommandGroup(name="leaderboard_config", description="Leaderboard configuration commands", permission=[CommandPermissions("owner", 2, True)]) - - @leaderboard_config.command() - async def set_time_between_updates(self, ctx, minutes: int): - self.update_leaderboard.change_interval(minutes=minutes) - await ctx.respond(f"Set time between updates to {minutes} minutes.") - - @leaderboard_config.command() - async def stop(self, ctx): - self.update_leaderboard.stop() - await ctx.respond("Stopped the leaderboard update.") - - @leaderboard_config.command() - async def restart(self, ctx): - self.update_leaderboard.restart() - await ctx.respond("Restarted the leaderboard update.") - -def setup(bot): - bot.add_cog(LeaderboardCog(bot)) -``` - -Phew, that was quite a bit of code. - -Now to explain what's going on: - -First things first we create a cog and in its `__init__` function we start the `update_leaderboard` task and generate -the first instance of our leaderboard's embed. - -After that, we define the `update_leaderboard` task using the `loop` decorator, and we make it run every ten minutes by -passing 10 to the `minutes` parameter. - -Then that we define the `before_update_leaderboard` task using the `before_loop` decorator, and we make it wait until the -bot is ready before starting the task. - -Next up we define the `after_update_leaderboard` task using the `after_loop` decorator, and we make it clean up the -leaderboard when the loop finally stops running. - -Then we define the `update_leaderboard_error` task using the `error` decorator, and we make it print any errors that may -occur while we update our leaderboard to the console. - -Then we get into the fun stuff, we create a slash command group using the `SlashCommandGroup` class and name it -`leaderboard`, we then create the `view` sub-command which sends the embed generated when the leaderboard is updated and -`update_info` which shows a lot of data about the task using some attributes and functions available to us. - -We also create a slash command group called `leaderboard_config` which is only available to the owner of the bot. - -Then we create the `set_time_between_updates` sub-command which takes in the time in minutes and changes the time -between updates of the leaderboard using the `change_interval` method, the `stop` sub-command which stops the task using -the `stop` method and `restart` which restarts the task using the `restart` method. - -Finally, we add the `LeaderboardCog` cog to the bot, and we're done! - -I'd highly recommend you check the tasks extension -[documentation](https://docs.pycord.dev/en/stable/ext/tasks/index.html) for more info on how to use them and what other -functions they have. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/_category_.json b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/_category_.json deleted file mode 100644 index 9d6255f5..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 3, - "label": "Getting Started", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx deleted file mode 100644 index 7fbabf77..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: Creating Your First Bot ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -Excited to create your first bot? Once you [install Pycord](../installation.mdx), you can start right -away! - -## Creating the Bot Application - -Just like how you need to sign up to use Discord, your bot also has to be signed up. To do this, -you should: - -1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click - on . -2. Give your bot a name, and click . -3. Now, you should see a page like this. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdW3OQnwUhacopqSWw%2F-Mjd_-mxrJCrzmaXrAg8%2Fimage.png?alt=media&token=b8e2ae6c-2290-4d37-ad7c-eb412f3fb00e) -4. Click on the tab on the left side of the screen. -5. Click on . -6. You can give it a name, change the Avatar, etc. - -## Inviting the bot - -Now, lets get the bot added to some servers. Go to the tab -in the left pane and select `bot` and `applications.commands` as scopes. - -You may want your bot to have application commands, which is what the `application.commands` scope -allows your bot to make. - -Next, you want to choose what permissions the bot will have and select them. For now, you can just -give your bot the `administrator` permission, which gives your bot every permission. Once you select -your bot's permissions, click on to get the bot invite link. - -:::tip - -When your bot is all ready to go, make sure that administrator permissions aren't selected unless -your bot truly needs them. Try selecting only permissions the bot will need. For testing, -Administrator permissions are fine. - -::: - -![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-Mk6tNY3LfDkjd6pqdpL%2F-Mk6tkdpddEWoa2jczZk%2Fimage.png?alt=media&token=52c8a29f-a798-48f8-a8c7-4ecca2681f79) - -You can use this link to invite the bot. - -## Tokens - -Now that you have an account for your bot, you need to log in. To log in, we need the bot's -password. All users and bots have a "token." You may think of this token as a password, as this allows -us to log our bot into Discord. - -Tokens are "snowflakes." Not actual snowflakes, though. Just like how no two snowflakes in real life have the same -pattern, snowflakes in computers are unique things - no two bots have the same token - so a token is -considered a snowflake. A Discord user ID is also a snowflake. - -Now, lets get your bot's token. To do this, you want to: - -1. Go back to the tab. -2. Click on the button in the "Token" section. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdbU12JISJorAZxrKH%2F-MjdbpUsapzb5n15Po5P%2Fimage.png?alt=media&token=118e259f-940a-4f6c-b3a3-c29f3a54100d) - -Now, you have your bot's token copied to your clipboard. - -:::danger - -Do not, under any circumstances, give your token to anyone. Even if you are contacted by someone -claiming to be Discord staff, do not give them your bot's token. They are lying to you to try and -gain access to your bot. If an unauthorized user gains access to your bot's token, they can access -your bot and use it in malicious ways. - -Never push your token to GitHub or include it in your code. One way to prevent your token from -getting leaked is to store it in `.env` files. - -::: - -### Protecting Tokens - -#### Using dotenv - -You can store your tokens in `.env` files. This is a simple way to store sensitive information. - -1. Create a file with the name `.env` (only the extension, with a dot/period at the start and without a name before it). -2. Define the token in the `.env` file (replace the example value with your token). - ```env title=".env" - TOKEN = NzkyNzE1NDU0MTk2MDg4ODQy.X-hvzA.Ovy4MCQywSkoMRRclStW4xAYK7I - ``` -3. Install [`python-dotenv`](https://pypi.org/project/python-dotenv/). - ```bash - python -m pip install python-dotenv - ``` -4. Load the token from the `.env` file. - ```python - import dotenv - dotenv.load_dotenv() - token = str(os.getenv("TOKEN")) - ``` -5. Pass your token as parameter when running the bot. - ```python - client.run(token) - ``` - -:::tip - -If you are using Git to track your bot's changes, you should create a file called `.gitignore` and add -`.env` to it. This stops your `.env` file from getting tracked along with the rest of your code, and -will not be pushed to a remote Git repository. As a consequence, it will stay secure on your local machine. - -::: - -## Coding the Basics - -Here's an example of code you'll write with Pycord: - -```py -import discord -import os # default module -from dotenv import load_dotenv - -load_dotenv() # load all the variables from the env file -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") - -bot.run(os.getenv('TOKEN')) # run the bot with the token -``` - - - -
- - hello - -
- Hey! -
-
-
- -Let's go through the code. First, the imports. - -```py -import discord -import os -from dotenv import load_dotenv -``` - -In the first line, `import discord`, we import Pycord. Although you install Pycord with `pip install py-cord`, you -import it with `import discord`. This is so it's as easy as possible when switching from Discord.py to Pycord. - -We then import `os` and `dotenv`. `os` is a default module that we will use to get the token from the env file. `dotenv` -is a module that we will use to load the env file. You installed this with `pip install python-dotenv`. - -Next, we load the env file with `load_dotenv()`. - -```py -bot = discord.Bot() -``` - -In this line, we create a new instance of [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). -In this object, we can pass various parameters for configuration purposes, such as `owner_ids` -and [`intents`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```py -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") -``` - -We use the [`event`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) decorator to override -the [`on_ready`](https://docs.pycord.dev/en/stable/api/events.html#discord.on_ready) function to define an -event that is automatically called when the bot is ready to use. - -```py -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") -``` - -Here, we use the [`slash_command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.slash_command) -decorator to define a slash command. We specify the `name` and `description` arguments. If not -specified, the name of the slash command would be the function name and the command description would -be empty. - -Optional: We type-hint the context parameter (`ctx`) as [`discord.ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext). In modern IDEs, type-hinting allows access to autocompletion and docstrings. You can read more about type-hinting [here](https://docs.python.org/3/library/typing.html). - -Finally, you want to run the bot using the token specified in the `.env` file. - -Now you have finished creating your first Pycord bot! What we have shown you is just the basic structure -of a bot. You can do a lot more with Python and Pycord knowledge, as well as your imagination! Pycord -will not limit your bot's abilities. - -:::note - -The part where we load the token from the environmental variables is not required. You may use another way to keep your token secure, or, although not recommended, simply specify the token normally as a string, as shown below. - -
-A Basic Bot without securing the token -
- -```py -import discord - -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.send("Hey!") - -bot.run("TOKEN") -``` - -
-
- -::: - -## FAQ - -### How do I make prefixed commands? - -Prefixed commands are an older method of creating bot commands that listen for messages and replies -if the message starts with a certain character. You can read [this page](../extensions/commands/prefixed-commands.mdx) -to learn more about prefixed commands. - -### How do I setup modules/cogs? - -[Cogs](../popular-topics/cogs) are a great way to organize your commands by putting them into -groups called cogs. Cogs are separate files that your bot loads to get the commands inside. -You can read more about cogs, as well as learn how to use them and their benefits, -[here](../popular-topics/cogs). - -### How do I add components, such as buttons and dropdown menus, to my bot? - -Pycord makes it very easy to use Message Commands with your bot by using the `discord.ui` module. -To learn more, read about Message Commands in our [interactions directory](../interactions). - -:::info Related Topics - -- [Prefixed Commands](../extensions/commands/prefixed-commands) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx deleted file mode 100644 index 2a68677b..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Hosting Your Pycord Bot ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Hosting Your Pycord Bot - -If you're completely new to this, you might have thought something along the lines of "Yay! I got my -bot working," after following our [Creating your First Bot](creating-your-first-bot) guide, only -to close your IDE or shut down your computer to find your bot offline. - -The reason for this is that programs have to be hosted somewhere, meaning some machine somewhere has -to constantly run your bot. There are tons of hosting services that can help you host your bot for -little to no cost. - -## Can I get a Clear Explanation? - -Sure thing. When you run your bot, it first makes a connection to Discord's API. Once that's done, -Pycord sends "heartbeats" to Discord. "heartbeats" are small packets sent at a set interval telling -Discord that your bot is indeed still alive. If Discord doesn't receive a heartbeat after a certain -amount of time, your bot is pronounced dead and buried in the graveyard (not really). It is, though, -taken offline and its connection with Discord is terminated. - -Once you close the terminal that you've run your program on, the program is no longer running, and -the bot stops sending heartbeats and can no longer process commands. This is why you have to constantly -keep the process running. - -This goes for all programs, in a different nature. If the code isn't compiled/built/assembled/interpreted, -it can't be running. - -## What is a Host? - -A host is a server or container for running code offered by a **hosting provider.** There are a lot -of hosting providers, such as bigger ones like Amazon Web Services (AWS) and Google Cloud, and smaller -ones like GalaxyGate and DigitalOcean. - -There are three types of hosts. - - - - Shared hosting is a type of hosting where multiple people share one VPS. Getting a spot on - a shared host is usually cheap, sometimes even free. Shared hosts do not give you a lot of - resources, from less than a gigabyte of RAM (usually 512MB on free hosts) and half of a CPU - with very little storage. Shared hosting is usually used for website hosting and is not - recommended for hosting a Discord bot. - - - A virtual private server (VPS) is a virtual computer (virtual machine) that is rented out to - customers. Most people use a VPS for hosting their projects such as Discord bots. You can get - anywhere from less than a gigabyte of RAM and a less powerful CPU to just under one hundred - gigabytes of RAM, a (or multiple) powerful CPU(s), and a fair amount of storage. A VPS is the - best choice for most users and can be fairly cheap. - - - A dedicated host is a physical computer. You can buy these yourself or rent one from a hosting - provider. Dedicated hosts are often very expensive, but are also very powerful, having a - few hundred gigabytes of RAM and a few very powerful CPUs, along with a good amount of storage. - Dedicated hosts are usually used for very large projects and are overkill for something like - a Discord bot. - - -
- -:::danger - -Make sure you choose a hosting provider you trust. Also make -sure the hosting provider you're looking at has good reviews on public forums. Googling along the -lines of "[host] review" should do the trick. A provider you don't trust can compromise your token. - -::: - -Most hosting providers rent their services to you for a monthly or yearly fee. These can be anywhere -from a few dollars to hundreds or thousands of dollars. - -## How to Host Your Bot - -Once you rent or buy a VPS, you can get to work. Most hosting providers allow you to choose from a -wide range of operating systems, most allow you to choose one but some allow you to choose -multiple. Once that's ready, you have to SSH into the system. We won't get into SSH here, but you can -read [this article from DigitalOcean](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys). -You can also use VNC, which is remote desktop software. If you are using an OS that does not have a -GUI, and is only a command line (a "server" OS), such as Ubuntu Server or most Linux Server Operating Servers, you will most -likely use SSH. If you are using an OS that has a GUI, such as Windows Server, you will most likely use VNC. - -Once you've decided on your operating system, you'll want to set it up and install Python. Once that's -done, you can copy your bot's files to your remote system, install the required packages, and run -the bot. - -:::warning - -If you are using SSH to run the file, your bot will not stay running. This is because the file is -only told to run during your session. You can use a command like [nohup](https://en.wikipedia.org/wiki/Nohup) -to make sure your file stays running after you disconnect. - -::: - -Now your bot is hosted, but that doesn't mean it can't go offline. If your bot encounters an error, -it can often go offline or stop its process. For this, make sure you have proper error handling. -Also be sure to pay attention to your hosting provider's updates or news, as they usually notify -users of when they plan on doing maintenance to their servers, making their services unavailable for -a short time. - -:::info Related Topics - -- [Creating Your First Bot](creating-your-first-bot) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx deleted file mode 100644 index 32eeb744..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx +++ /dev/null @@ -1,379 +0,0 @@ ---- -title: More Features -description: More features to make your bot cool and snazzy. ---- - -import { - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, - DiscordEmbedField, - DiscordEmbedFields, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -So, you just created your first Pycord bot! Now, let's add some more features to it. This will include adding event handlers, waiting for user response, styling the messages, and more. - -## Events - -### Event Handlers - -Events in Discord are a way to listen for certain actions. For example, if you want to know when a user joins your server, so you could send a welcome message, you can use the `on_member_join` event. - -First, you need to ask Discord to send you events. This is done via "Intents". Read up the [Intents](../Popular-Topics/intents) page for more information. - -Once you understand what intents are, you can enable the events you need, or just use the default ones with `discord.Intents.all()`. - -Now that that's done, let's add an event handler for when a user joins the server. We will use the [`on_member_join` event](https://docs.pycord.dev/en/stable/api/events.html#discord.on_member_join). We will send a private message to the user welcoming them to the server. - -```python -@bot.event -async def on_member_join(member): - await member.send( - f'Welcome to the server, {member.mention}! Enjoy your stay here.' - ) -``` - -We use the [`discord.Bot.event` decorator](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) to add the event handler. - -The `on_member_join` event is called when a user joins the server. The `member` parameter is the user that joined. Different events have different names and parameters. You can find all of them [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -So, that's how you add event handlers! - -### Waiting for User Response - -Let's say you want to create a Guess-the-Number game (where the user has to guess a number between 1-10). You need to send a message to a user and wait for them to respond. You can do this with the [`wait_for`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.wait_for) method. - -```python -@bot.command() -async def gtn(ctx): - """A Slash Command to play a Guess-the-Number game.""" - - await ctx.respond('Guess a number between 1 and 10.') - guess = await bot.wait_for('message', check=lambda message: message.author == ctx.author) - - if int(guess.content) == 5: - await ctx.send('You guessed it!') - else: - await ctx.send('Nope, try again.') -``` - -`wait_for` takes one argument, which is the event type. The event type is the name of the event you want to wait for. In this case, it's `message`. It could also be `reaction` to wait for a reaction to be added. - -We pass a keyword argument to `wait_for` called `check`. The function may look complicated if you're a beginner. We pass a `lambda` function, which simplifies the code a bit. - -The lambda function takes one parameter, `message`. When Pycord receives a message, it passes it to the `check` function. If the function returns `True`, the message is returned. If the function returns `False`, the message is ignored and the bot waits for another message. - -Here, we check if the message is from the user that sent the command. We simply use `message.author == ctx.author`. This will check if the author of the message was the person who invoked the command. - -## Styling Messages - -### Embeds - -Embeds are a Discord feature that allows applications to format their messages in cool embedded format, -enabling your bot to lay out messages with a lot of text into neat fields. - - - - - The Pycord Guide is a detailed guide that explains how to use Pycord and all of its features. - - - The Getting Started section explains how you can get a brand new bot created and running from scratch. - - - Interactions with Pycord - - - Pycord's various Extensions - - - Other Popular Topics - - - We have so much more! Just explore, and you will find everything you need. If you want another page added, open an issue on the GitHub. - - - Created with 💖 by the Pycord Team & Contributors - - - - -
- -Creating embeds is simple! Just create an instance of [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) and edit it to your liking. Once you're done, send it! - -```python -import discord - -bot = discord.Bot() - -@bot.command() -async def hello(ctx): - embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from - ) - embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") - - embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) - embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) - embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) - - embed.set_footer(text="Footer! No markdown here.") # footers can have icons too - embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") - embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") - embed.set_image(url="https://example.com/link-to-my-banner.png") - - await ctx.respond("Hello! Here's a cool embed.", embed=embed) # Send the embed with some text - -bot.run("TOKEN") -``` - - - -
- hello -
- Hello! Here's a cool embed. - - Embeds are super easy, barely an inconvenience. - - - A really nice field with some information. The description as well as the fields support markdown! - - Inline Field 1 - Inline Field 2 - Inline Field 3 - - Footer! No markdown here. - -
-
- -
- -This simple command sends replies to a [slash command](../interactions/application-commands/slash-commands) with an embed. -Let's break it down: - -```py -embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), - ) -``` - -This command creates an embed. We use the [`Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) -class to create an embed object with the title "My Amazing Embed", the description "Embeds are super easy, barely an inconvenience.", and the color `blurple`, Discord's main theme color. - -[discord.Colour](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Colour) is a class full of [classmethods](https://docs.python.org/3/library/functions.html#classmethod) -that return color values. While the official, documented name of this is `discord.Colour`, `discord.Color` -works as well. - -```py -embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") -embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) -embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) -embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) -``` - -This small section shows off embed fields. You can add fields to embeds with the [`add_field` method](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.add_field) -of the [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) class. These consist of three -keyword arguments: `title`, `value`, and `inline`. `title` and `value` are both required arguments, which inline defaults to `False` if it's not defined. The `inline` argument specifies whether space will be divided among the inline fields. There could be a mix of fields where inline has different values too. - -```py -embed.set_footer(text="Footer! No markdown here.") # footers can have icons too -embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") -embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") -embed.set_image(url="https://example.com/link-to-my-banner.png") -``` - -In this section, we're adding unique items to the embed. These items are: - -- Footer - With the [`set_footer()`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_footer) - method, you can set a small footer that holds a message. This has `text` and `icon_url` kwargs. -- Author - With the [`set_author`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_author) - method, you can set an author for the embed. This is a small text field at the top of the embed. This - includes `name`, `url` and `icon_url` kwargs. -- Thumbnail - With the [`set_thumbnail`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_thumbnail) - method, you can set a small image to reside at the top-right of the embed. This has a single `url` kwarg. -- Image - With the [`set_image`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_image) - method, you can set an image to sit at the bottom of an embed. This has a single `url` kwarg. - -There are a lot more methods and attributes you can use to configure embeds. Here, we just covered the basics. Also, remember that all of these values are not necessary in an embed. An embed may only contain a few of these. For example, only a description, a title and a description, and so on. - -### Markdown - -Markdown is a type of markup language that's limited in terms of formatting yet simple. Discord allows -for a watered-down version of markdown to be in their messages. - -#### Text Markdown - -Text formatting can be used in messages and in most embed parts, -as explained in the dedicated section below. - - - - - - - - - - - - - - - - - - - - -
*italics*__*underlined italics*__
**bold**__**underlined bold**__
***bold italics***__***underlined bold italics***__
__underlined__~~strikethrough~~
- -#### Code Markdown - -To create a single-line code block without syntax highlight, wrap the text between single backticks. -This code block will only add a dark background to the text. - -``` -`print("Hello world!")` -``` - -To create a multi-line code block without syntax highlight, wrap the text between triple backticks -on first and last line. This type of code block will encase the code inside a box. - -```` -``` -message = "Hello world!" -print(message) -``` -```` - -To create a multi-line block with syntax highlight, add the name of the language you are using right after -the triple backticks on the first line. For example, for Python you can write either "python" or "py". - -```` -```python -message = "Hello world!" -print(message) -``` -```` - -If you want to use syntax highlight for a single line of code, you still have to format it -like a multi-line block but the code must be on a separate line than the triple backticks. - -#### Quote Markdown - -To create a single-line quote block, start the line with `>` followed by a space. - -``` -> This is a single-line quote. -``` - -To create a multi-line quote block, write `>>>` followed by a space. All text -from that point onwards will be included in that quote block. - -``` ->>> This is a -multi-line quote. -``` - -#### Spoiler Markdown - -To hide a spoiler, encase the text between double pipes. The users -will have to click on it before being able to see the text contained in it. - -``` -||spoiler|| -``` - -#### Link Markdown - -Link formatting only works in embeds and messages sent through webhooks, -by using the following syntax: - -``` -[Pycord](https://pycord.dev/) -``` - -Inside the supported elements that have just been mentioned, -the example above will look like this: [`Pycord`](https://pycord.dev/) - -Outside them, the link will still be clickable but the formatting will be ignored, -therefore the example above will look similarly to this: `[Pycord](https://pycord.dev/)` - -#### Embed Markdown - -Adding markdown to your embeds or messages will give your bot the sparkle it needs, -however, markdown is limited inside embeds. Use the following table as a reference -and keep in mind that embed title and filed names will always show in **bold**. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PartTextLink
Embed AuthorNoNo
Embed TitleYesNo
Embed DescriptionYesYes
Field NameYesNo
Field ValueYesYes
Embed FooterNoNo
diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx deleted file mode 100644 index e44b7c49..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Rules and Common Practices -description: All about the rules and common practices for coding a Discord bot ---- - -# Rules and Common Practices of Creating a Bot - -When creating almost anything, there's always a certain set of rules to follow or common practices, -such as [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python. This applies to creating bots -with Pycord as well. - -:::note - -Most of these rules and common practices are only applicable for -[verified bots](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting), -but it's good to follow them nonetheless. - -::: - -## Rules - -There are rules for creating bots, and most of these are required by Discord themselves, not us at -Pycord. Not following these rules may get your bot denied for verification. - -### Terms of Service and Privacy Policy - -Starting at some point in time, Discord has made providing a privacy policy with your bot a requirement. -This is so that Discord knows exactly what you are doing with its users' data. - -:::tip -You don't need a lawyer or anyone special to write out a privacy policy for you, nor do you need -it approved by some official entity. Simply writing out how you are going to use Discord user -information neatly is all you need to do. -::: - -Providing a Terms of Service for your bot is optional, though usually a best practice. It tells users -what they can and cannot do with your service, and makes it easier to settle disputes if someone -disagrees with you. - -Read more in Discord's official [Legal Docs](https://discord.com/developers/docs/legal). - -### Developer Policy - -We could list almost every rule about using Discord's API here. _Or_ we could simply link Discord's -Developer Policy to make it easier on us. You can find Discord's Developer Policy -[here](https://discord.com/developers/docs/policy). This outlines what you can and cannot do with -Discord's Developer API. And, don't worry, it's completely readable and understandable. - -## Best Practices - -Now, here's something we _can't_ simply link an article for. We're going to discuss the best practices -of creating a Discord bot with Pycord. - -### Bot Sharding - -To any new or maybe even experienced bot developer, sharding a bot sounds beneficial once you hear -about it. I'm here to tell you that it isn't a good idea to shard your bot. - -_Wait a minute, why would it be an option if it wasn't a good idea?_ It's simple. I lied. Sort of. -I'm not going to go into the details of sharding a bot, so you can read about it on -[this page](../Popular-Topics/sharding). Sharding is the process of taking your bot -and breaking it up into small pieces, so it's easier to perform tasks. This is very useful for large -bots, as it makes them faster and more reliable. Sharding is not a good practice for small bots. - -:::note -Discord will notify you once it is time to shard your bot, and will eventually force you to do so. -::: - -At the very least, wait for one thousand servers to shard your bot. If you shard your bot while it's -small, you'll just be wasting resources and possibly making your bot slower. - -### [Verification](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting) - -Verifying your Discord bot is something every developer would like to achieve. It shows that your bot -is in more than 75 servers. It's generally a good idea to try to get your bot verified as soon as -possible. We're talking at 76 servers soon. This is because Discord can be somewhat slow in terms of -bot verification, so verifying as soon as possible gives them enough time to verify before your bot -reaches the 100 server cap. If a bot is not verified, it cannot grow beyond 100 servers. - -It's also a good idea to only apply for the privileged intents that you need. Applying for intents -your bot doesn't use wastes both your time and Discord's time, as your privileged intent request -will be denied simply because you applied for an intent you didn't need. - -### Subclassing - -While it may take some time, subclassing a bot is very worth it. Once again, this was explained -elsewhere, so I won't go into the details, but I felt it fit here, so I put it here. - -Subclassing a bot makes it more flexible and allows it to do a lot more. Read more about subclassing -bots [here](../Popular-Topics/subclassing-bots) - -### Your Bot's Token - -Your bot is only able to be run for one reason: its token. If you followed the -[guide for creating your first bot](creating-your-first-bot), you should already know a bit about -keeping that token safe. That's exactly what you want to do. - -Sharing your token is never good. If someone evil gets a hold of your token, they can do terrible things, -such as making your bot leave all of its servers, spamming all the members the bot has contact with, -and even manipulating the servers the bot is in, if given the permissions. That's why it's very important -to keep your token safe. To learn how to do so, read [this part](creating-your-first-bot#tokens) of -the Creating Your First Bot guide. - -### Backups - -You always want to back up your bot's data. This includes both its code _and_ its databases. This way, -if something tragic happens, such as your host failing a data migration or you breaking your Raspberry -Pi's SD card that held your bot, you'll still have its precious user data. I have a small program for -my bot that uploads its databases to a remote GitHub repository periodically to not lose any data. -It may be smarter to find a bit more of a reliable way to do so, though. - -Public or private, having a local Git repository connected to a remote one is a good idea for making -almost any application. For a lot of developers, it's like saving your work. If you do this, all of -your bot's code won't be lost if your computer spontaneously combusts, or you smash it to bits from -anger. You can simply grab the backup computer that everyone has lying around, and you're back -in business. - -### Organization and Cleanliness - -It is _extremely_ important to have organized code. This includes commands, objects, functions, -and classes. If you don't have organized code, it will get progressively harder for you to recognize -it, and others won't be able to decipher it. - -Make sure you utilize indents and spaces, as these are very important in making your code readable. - -```py title="Bad Spacing" -class MyClass: - async def add(self,num1,num2): - return num1+num2 - async def sub(self,num1,num2): - return num1-num2 -``` - -```py title="Good Spacing" -class MyClass: - async def add(self, num1, num2): - return num1 + num2 - - async def sub(self, num1, num2): - return num1 - num2 -``` - -See the difference? Now, which one looks more readable? Hopefully, you answered the second example. -Python's [PEP8](https://www.python.org/dev/peps/pep-0008/) is a PEP (**Python Enhancement Proposal**) -style guide for Python. It is the style guide that is used by most Python developers and programmers, -providing a universal way to write and read code. - -### Databases - -As your bot grows, you'll inevitably have to store data for your bot. Now, most people would probably just load up some -JSON file on boot into a `dict`, modify it in memory then write to the file. However, JSON files aren't the solution. -When you write to a JSON file, it rewrites the entire file instead of just rewriting the section that changed. It's also -a configuration file format, not a storage file format. - -Instead of using a JSON file or some other related format, you should instead use a database. There are many databases -out there, like MongoDB, SQLite, and PostgreSQL to name a few. - -All of these databases I named do the job well, and which one you use depends on what features you want out of a database. - -<>{/* Maybe clarify these/add more options */} - -#### MongoDB - -MongoDB is a JSON-like format and if you already use JSON files, it shouldn't be too hard to migrate over to. - -#### SQLite - -SQLite is based on SQL, a common relational data model. It's a lightweight, easy-to-use, portable database solution that -works entirely on files. However, if for some reason you cannot read/write to and from a file, and you need to manage -lots of data, SQLite might not be for you. - -While SQLite is a part of the Python Standard Library as the `sqlite3` package, we recommend not using it as it is -synchronous and blocking. You should use an asynchronous alternative, such as [`aiosqlite`](https://pypi.org/project/aiosqlite/). - -#### PostgreSQL - -PostgreSQL is also based on SQL, but it also has more features than SQLite. It's compliant with the SQL standard, -open-source, and extensible. However, it's not that fast or simple compared to SQLite. - -#### MariaDB - -MariaDB is also based on SQL and is a fork of the MySQL project. It's compliant with the SQL standard, it's also open -source and is a complete drop-in replacement for any code with MySQL. You don't even need to change what package you're -using! diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/installation.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/installation.mdx deleted file mode 100644 index 521c69cd..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/installation.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Installation -sidebar_position: 2 ---- - -Before you can start using Pycord, you need to install the library. - -:::note -Python **3.8 or above** is required to use Pycord. -::: - -:::tip -Before you start installing python packages globally, it's recommended you set up a virtual environment. -You can find instructions for that [here](More/virtual-environments). -::: - -## Fresh Installation - -To install Pycord, you can use the following command in your terminal: - -``` -pip install py-cord -``` - -:::tip -Remember that you need to install `py-cord`, not `pycord`. -Also, the `pip` command varies depending on your installation. For example, it might be `python3 -m pip` on macOS/Linux or `py3 -m pip` on some versions of Windows. -::: - -If you need voice support for your bot, you should run: - -``` -pip install "py-cord[voice]" -``` - -## Migration - -### Updating Pycord - -If you are upgrading from a previous version of Pycord, you can use the following command in your terminal to upgrade to the latest version: - -``` -pip install -U py-cord -``` - -### Migrating from other libraries - -If you are migrating from another library, say, `discord.py`, first of all, you need to uninstall it. - -``` -pip uninstall discord.py -``` - -Then, you can install Pycord, it's as simple as that!: - -``` -pip install py-cord -``` - -:::caution -Uninstalling `discord.py` _after_ installing `py-cord` can cause issues. Make sure to uninstall it first! -::: - -## Installing Other Builds - -### Development Build - -:::caution -The development build comes with cutting edge features and new functionality, but as it isn't a stable build you may encounter bugs. -::: - -To install the development build, you can use the following command in your terminal: - -``` -pip install -U git+https://github.com/Pycord-Development/pycord -``` - -:::important -Git is required to install this build. [Learn how you can install Git](./more/git). -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/_category_.json b/i18n/ru/docusaurus-plugin-content-docs/current/interactions/_category_.json deleted file mode 100644 index ea28be60..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 4, - "label": "Interactions" -} \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json b/i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json deleted file mode 100644 index 6dcafe83..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Application Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx deleted file mode 100644 index 8fdca991..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Context Menus -description: Learn all about Context Menus (User Commands & Message Commands) and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -When you right-click a message, you may see an option called "Apps". Hover over it, and you can see -commands a bot can run with that message. These are called message commands. - -When you right-click a user in the user list, you can once again see an option called "Apps". -Hover over it, and you can see commands a bot can run with that message. These are called user commands. - -Together, these two are called Context Menus or Context Menu Commands. These commands work very much like normal commands, except they take a member or message. - -:::note - -A bot can have up to 5 global Context Menus of each type. - -::: - -## User Commands - -Creating a user command is very simple. - -```python -@bot.user_command(name="Account Creation Date", guild_ids=[...]) # create a user command for the supplied guilds -async def account_creation_date(ctx, member: discord.Member): # user commands return the member - await ctx.respond(f"{member.name}'s account was created on {member.created_at}") -``` - - - -
- - Account Creation Date - -
- {defaultOptions.profiles.bob.author}'s account was created on 2020-01-01 -
-
- -## Message Commands - -```python -@bot.message_command(name="Get Message ID") # creates a global message command. use guild_ids=[] to create guild-specific commands. -async def get_message_id(ctx, message: discord.Message): # message commands return the message - await ctx.respond(f"Message ID: `{message.id}`") -``` - - - - Do. Or do not. There is no try. - - -
- - Get Message ID - -
- Message ID: 930650407917748286 -
-
- -
- -:::info Related Topics - -- [Slash Commands](./slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx deleted file mode 100644 index edac55b3..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Localizations -description: Localizations are a way to make your bot more accessible to your users. Learn all about localizations now! ---- - -Localizations are a way to make your bot more accessible to your users. You can localize the command -name, the names of any arguments, and any text that is displayed to the user. - -## Syntax - -```python -@bot.slash_command( - name="ping", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - }, - options=[ - Option( - name="Example", - name_localizations={ - "en-GB": "British Example" - }, - description="Example option that does nothing", - description_localizations={ - "en-GB": "British example option that does nothing" - } - ) - ] -) -async def ping(ctx, example): - responses = {"en-US": "Pong!", - "en-GB": "British Pong!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -@bot.slash_command( - name="ping2", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - } -) -async def ping2(ctx, example: Option(str, "example", name_localizations={"en-GB": "British Example"}, description="Example option that does nothing", description_localizations={"en-GB": "British example option that does nothing"})): - responses = {"en-US": "Pong2!", - "en-GB": "British Pong2!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -``` - -- [`Locales`](https://discord.com/developers/docs/reference#locales) - List of valid locales recognized by Discord diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx deleted file mode 100644 index f4a760b6..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx +++ /dev/null @@ -1,292 +0,0 @@ ---- -title: Slash Commands -description: Learn all about Slash Commands and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On March 24, 2021, Discord added Slash Commands to Discord as an easier, more efficient, and better way of using bot commands. Pycord has implemented Slash Commands into the library, so it's simple, efficient, and familiar. - -:::important - -Remember that Slash Commands require your bot to be invited with the `application.commands` scope or Slash Commands will not show up. Bots already in the guild can simply be invited again with the scope; there is no need to kick the bot. - -::: - -## Syntax - -Let's create a simple Slash Command. - -```py -import discord - -bot = discord.Bot() - -# we need to limit the guilds for testing purposes -# so other users wouldn't see the command that we're testing - -@bot.command(description="Sends the bot's latency.") # this decorator makes a slash command -async def ping(ctx): # a slash command will be created with the name "ping" - await ctx.respond(f"Pong! Latency is {bot.latency}") - -bot.run("TOKEN") -``` - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -Let's go through the code. - -First, we import Pycord's `discord` package. - -Next, we create a [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot) object and assign it to a variable `bot`. - -We then go ahead and use the [`@bot.command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.command) decorator, which registers a new Slash Command. We pass a `description` parameter to give a description to the Slash Command. We can also pass a `name` parameter to change the Slash Command's name. By default, the name of the Slash Command will be the name of the function, in this case, `/ping`. - -We create an async function called `ping` with parameters `ctx`, which, when called, sends the bot's ping/latency using [`ctx.respond`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext.respond). - -## Subcommand Groups - -You might want to group certain commands together to make them more organised. A command group is exactly what it sounds like, a group of individual Slash Commands together. - -In order to make a Slash Command group, you can use the `bot.create_group` function. - -```python -import discord - -bot = discord.Bot() - -# create Slash Command group with bot.create_group -greetings = bot.create_group("greetings", "Greet people") - -@greetings.command() -async def hello(ctx): - await ctx.respond(f"Hello, {ctx.author}!") - -@greetings.command() -async def bye(ctx): - await ctx.respond(f"Bye, {ctx.author}!") - -bot.run("TOKEN") -``` - -Or, you can instead manually make a `SlashCommandGroup` class like so: - -```python -import discord - -math = discord.SlashCommandGroup("math", "Math related commands") - -@math.command() -async def add(ctx, num1: int, num2: int): - sum = num1 + num2 - await ctx.respond(f"{num1} plus {num2} is {sum}.") - -@math.command() -async def subtract(ctx, num1: int, num2: int): - sum = num1 - num2 - await ctx.respond(f"{num1} minus {num2} is {sum}.") - -# you'll have to manually add the manually created Slash Command group -bot.add_application_command(math) -``` - -Here's what the registered subcommands will look like in the Slash Command Menu: - -![Picture of the subcommands in the Slash Command Menu](../../assets/interactions/groups-and-subcommands.jpg) - -You'll notice that there's the name of the Slash Command Group and then the name of the subcommand separated by a space. - -::: - -:::info Cogs - -If you are looking to add Slash Command Groups to cogs, please look at our [Cogs page](../../popular-topics/cogs)! - -::: - -## Sub-groups - -We've made a subcommand group, but did you know that you could create a group inside another? - -```python -from discord import SlashCommandGroup -from math import sqrt - -math = SlashCommandGroup("math", "Math related commands") -advanced = math.create_subgroup("advanced", "Advanced math commands") - -@advanced.command() -async def square_root(ctx, x: int): - await ctx.respond(sqrt(x)) - -bot.add_application_command(math) -``` - -The command created above can be invoked by typing `/math advanced square_root`. - -## Options & Option Types - -Whenever you're using Slash Commands, you might notice that you can specify parameters that the user has to set or can optionally set. These are called Options. - -Options can also include a description to provide more information. [You can learn more about Options in our documentation!](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.Option) - -Since you want different inputs from Options, you'll have to specify the type for that Option; there are a few ways of doing this. - - - - -You could use Type Annotations and let Pycord figure out the option type or explicitly specified using the [`SlashCommandOptionType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.SlashCommandOptionType) enum. - -```python -import discord - -bot = discord.Bot() - -@bot.command() -# pycord will figure out the types for you -async def add(ctx, first: discord.Option(int), second: discord.Option(int)): - # you can use them as they were actual integers - sum = first + second - await ctx.respond(f"The sum of {first} and {second} is {sum}.") - -@bot.command() -# this explicitly tells pycord what types the options are instead -async def join( - ctx, - first: discord.Option(discord.SlashCommandOptionType.string), - second: discord.Option(discord.SlashCommandOptionType.string) -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - add - -
- The sum of 1 and 1 is 2. -
- -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
- - -Instead of Type Annotations, you can also use the option decorator. This is usually done to have type-hinting. - -```python title="Slash Command Type" -import discord - -bot = discord.Bot() - -@bot.command() -@discord.option("first", type=discord.SlashCommandOptionType.string) # type = str also works -@discord.option("second", type=discord.SlashCommandOptionType.string) # type = str also works -async def join( - ctx, - first: str, - second: str, -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
-
- -## Autocomplete - -Discord's autocomplete allows developers to determine option choices that are used in a slash command option. You can do this by defining a function: - -```py -async def get_animal_types(ctx: discord.AutocompleteContext): - """ - Here we will check if 'ctx.options['animal_type']' is a marine or land animal and return respective option choices - """ - animal_type = ctx.options['animal_type'] - if animal_type == 'Marine': - return ['Whale', 'Shark', 'Fish', 'Octopus', 'Turtle'] - else: # is land animal - return ['Snake', 'Wolf', 'Lizard', 'Lion', 'Bird'] - -@bot.slash_command(name="animal") -async def animal_command( - ctx: discord.ApplicationContext, - animal_type: discord.Option(str, choices=['Marine', 'Land']), - animal: discord.Option(str, autocomplete=discord.utils.basic_autocomplete(get_animal_types)) -): - await ctx.respond(f'You picked an animal type of `{animal_type}` that led you to pick `{animal}`!') -``` - - - -
- - animal - -
- You picked an animal type of Marine that led you to pick Shark! -
-
- -:::warning - -Autocomplete can **only** be used with slash commands. - -::: - -:::info Related Topics - -- [Interactions Index](../../interactions) -- [Rules and Common Practices](../../getting-started/rules-and-common-practices) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/index.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/interactions/index.mdx deleted file mode 100644 index 3f695606..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/index.mdx +++ /dev/null @@ -1,242 +0,0 @@ ---- -title: Discord Interactions ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -In December 2020, Discord released their first Interaction: the -[Slash Command](https://discord.com/developers/docs/interactions/application-commands#slash-commands). -Since then, Discord has added many types of Interactions, including: - -[**Application Commands**](https://discord.com/developers/docs/interactions/application-commands) - -- [**Slash Commands**](https://discord.com/developers/docs/interactions/application-commands#slash-commands): - Commands that can be used with the `/` prefix. -- **Context Menu Commands**: Commands that can be used from the right-click menu. - - [**User Commands**](https://discord.com/developers/docs/interactions/application-commands#user-commands): - Commands that can be used on a user by alt-clicking/selecting them. - - [**Message Commands**](https://discord.com/developers/docs/interactions/application-commands#message-commands): - Commands that can be used on a message by alt-clicking/selecting it. - -[**UI Components**](https://discord.com/developers/docs/interactions/message-components) - -- [**Buttons**](https://discord.com/developers/docs/interactions/message-components#buttons): - Buttons are attached to a message and can be clicked on to perform an action. -- [**Select Menus**](https://discord.com/developers/docs/interactions/message-components#select-menus): - Drop-down menus are used to select a number of options from a list. -- [**Modals**](https://discord.com/developers/docs/interactions/message-components#text-inputs): - Form-like modals can be used to ask for input from a user. - -## Application Commands - -Application Commands are another set of new features that are intended to avoid compromising users' safety and privacy. -They're relatively easy to add to your bot, and give people a simpler and safer way to use commands. - -### [Slash Commands](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.SlashCommand) - -Slash Commands were the first Interaction added to Discord. They're easy to use and create, and -is the only prefix commands alternative that does not need Message Content intent. - -:::note - -Preferring prefix commands over Application Commands is **not** a valid reason to apply for the -Message Content intent. Using that as a reason will get your application denied. - -::: - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -This is what a Slash Command looks like. Not too different from a prefix command, -apart from the note telling you who invoked it. A Slash Command's fields can accept any of the following: - -- Members -- Roles -- Channels -- Attachments -- Text - -Just about as good as it gets. - -### [Message](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.MessageCommand) and [User](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.UserCommand) Commands - -Message Commands and User Commands were both introduced at around the same time, and are very similar to each other, so we'll be -introducing them together. These commands can be found in the `Apps` tab when alt-clicking. The only difference between the two is that -Message Commands only appear in the `Apps` tab of a message, while User Commands are found in the `Apps` tab of a user. Message Commands -can be used to quickly report a message, warn a user for a message, and other functions. Likewise, User Commands can be used to add a -user to a ticket, warn a user, and more. - -Here's an example of a Message Command: - - - - Hello World! - - -
- - Reverse Message - -
- Message 930650407917748286 reversed is "!dlroW olleH" -
-
- -
- -And here's an example of a User Command: - - - - {defaultOptions.profiles.dorukyum.author} has been on Discord for a long time - - -
- - User Age - -
- {defaultOptions.profiles.dorukyum.author} is 1 week old. -
- -
- - User Age - -
- {defaultOptions.profiles.bob.author} is 40 years old. -
- - 🤔 - -
- -
- -Pretty cool, right? To learn more about these two, please read the [Context Menus guide](./application-commands/context-menus.mdx). - -## [Application Commands](#application-commands) vs. [Prefix Commands](../extensions/commands/prefixed-commands) - -Ever since Discord was created, apps on it have used prefix commands. Using prefixes meant that you would have to put a -certain character (or string of characters) in front of your command, such as the exclamation mark in `!ping`. The way this -worked was that your bot would listen for messages, pick out the ones that had their specific prefix, and then respond to the command. -Now, Discord is encouraging developers to switch their bots over to Application Commands, which is a new system meant to preserve the -privacy and safety of their users. But why exactly is Discord making us switch? What's the better option, Application Commands or prefix -commands? Below, we'll discuss everything you need to know. - -### Discord's Decision - -Application Commands were conceptualized partly due to privacy concerns. When Discord first began, they weren't entirely concerned about bots -having access to the content of every message that was being sent. However, as Discord grew, this became more of a problem. Hypothetically, bots -could simply log every message they're able to receive via the Discord API and hand their contents over to a company or other third party. This is -a problem, since that data is meant to be used only by Discord. As such, they locked down Message Content, and introduced Application Commands for -bot developers to use instead. - -Prefix commands work by reading messages, as described before. Application Commands, however, don't -work this way; instead, they work by having your bot get information from Discord about when a command was used. This way, Discord can limit -Message Content only to bots that _absolutely_ depend on it, such as auto-moderation bots. - -### Who has to Use Application Commands - -Any verified bot that does not have the Message Content intent must use Application Commands. Discord is allowing developers to submit -applications for the ability to use the intent; however, since they don't want to keep supporting prefix commands due to privacy concerns, -they will automatically decline any application that includes only that as a reason. So, if your bot doesn't have an auto-moderation feature -(or any other functionality that requires Message Content), you're out of luck. - -Unverified bots, however, don't have to use Application Commands. This is because the Message Content intent is a `Privileged Intent`, meaning that -it must be applied for only if your bot is verified or about to be verified. Unverified bots don't have to apply for Privileged Intents, so they can -use them freely. - -So, if your bot is made only for a couple of servers, you can choose between prefix commands and Application Commands. However, if you plan on expanding -your bot's reach, it'll have to use Application Commands. - -### What's the Better Option - -Choosing which is the better option is up to you, if you're starting small. If -you plan on growing your bot, however, you will have to use Application Commands. Since prefix commands are slowly being phased out by Discord, -there isn't much of a choice for developers of larger bots. - -## Message Components - -Message Components are fairly new features in Discord, allowing developers to give their bots a fast -and understandable user interface. Message Components are easy to use and make your bot look modern, -sleek, and downright awesome. - -### [Views](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View) - -Views are not an Application Command nor are they a Message Component. Views are the invisible placeholders, or grid, -that Message Components lie in. Views can have up to 5 [`Action Rows`](https://docs.pycord.dev/en/stable/api/models.html#discord.ActionRow), -and Action Rows can have a maximum of 5 slots. Below, you can find a table showing how many slots a Message Interaction takes up. - -| Component | Slots | -| ------------ | ----------------------------------------------- | -| Buttons | 1 Slot | -| Select Menus | 5 Slots | -| Text Modals | 1 Slot (opened via a Button) | - -So, based on this, you could have a maximum of 25 Buttons in a View with no Select Menus, and 5 Select -Menus in a View with no Buttons. This doesn't mean you can't have them both in a View, however. You can have -a combination of them, such as 20 Buttons and a Select Menu or 10 Buttons and 3 Select Menus. - -### [Buttons](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button) - -Buttons are the first of the Message Components. They allow for quick responses to prompts, such as for canceling or continuing an action. -Of course, these aren't their only uses; people have created awesome things with Buttons, such as calculators, games, and more! - - - - Discord Buttons are awesome! -
- - Click me! - -
-
-
- -
- -This is what a Button looks like, very simple and modern. To learn more about Buttons, refer to our -[Buttons page](./ui-components/buttons.mdx). - -### [Select Menus](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Select) - -Select Menus are the second of Discord's Message Components. They allow users to select from a list of choices, which your bot can then use. -Select Menus are good for things such as choosing features, pages of a help menu, and more. - -![Select Menu Example Image](../assets/interactions/select-menus-example.png) - -This is what a Select Menu looks like. While not looking as good as Buttons, they still look great -and have even greater possibilities. To learn more about Select Menus, please refer to our [Select -Menus page](./ui-components/dropdowns.mdx). - -### [Modal Dialogs](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal) - -Text Modals are the most recently added Message Component in Discord. They're useful for text input and filling out forms, such as a -sign-up for your bot's service. These are meant to replace long bot setup processes by allowing users to fill out multiple text fields, -which avoids having the user send multiple messages for the bot. Modals can be accessed by either invoking an Application Command or by -interacting with another UI Component. - -![Text Modal Example Image](../assets/interactions/modal-example.png) - -This is what a Text Modal looks like, easy to use and one of the most useful Message Components yet. To learn more about Text Modals, -please visit our [Modal Dialogs page](./ui-components/modal-dialogs.mdx). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json b/i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json deleted file mode 100644 index 7b0a72fe..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "UI Components", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx deleted file mode 100644 index 10557c94..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx +++ /dev/null @@ -1,314 +0,0 @@ ---- -title: Buttons -description: Learn all about implementing buttons in your Discord Bot using Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On May 26, 2021, Discord added a new interaction called buttons. Instead of reactions, bots could now -send buttons and users could use them to interact with bots. This opened up a whole new world of -possibilities for bots. Soon after, developers made calculators, polls, and games like blackjack, UNO, -and even Minecraft! Buttons provided a clear and easy to use interface for interacting with bots. - -So, let's learn how you can add buttons to your bot! - -## Concept - -Buttons weren't the only update to the interactions system in Discord. Discord also added [Select Menus](./dropdowns) and [Modal Dialogs](./modal-dialogs), both of which work very similarly to buttons. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive button. - -```python -import discord - -bot = discord.Bot() # Create a bot object - -class MyView(discord.ui.View): # Create a class called MyView that subclasses discord.ui.View - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.primary, emoji="😎") # Create a button with the label "😎 Click me!" with color Blurple - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") # Send a message when the button is clicked - -@bot.slash_command() # Create a slash command -async def button(ctx): - await ctx.respond("This is a button!", view=MyView()) # Send a message with our View class that contains the button - -bot.run("TOKEN") # Run the bot -``` - -Using this command should return the following message: - - - -
- - button - -
- This is a button! -
- - Click me! - -
-
-
- -
- -As you can see, we create a class called `MyView` that [subclasses](#oop) -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `button_callback` to the `MyView` class with the decorator -[`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button). -This decorator adds a button to a component. This function takes two arguments: the button that was -clicked and the interaction. These arguments are passed to the function when the button is clicked -by the module. We use the [`interaction.response.send_message`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse.send_message) -function to send a message to the channel where the interaction was sent. - -Finally, we create a global slash command called `button` that sends the message, along with the view -that contains a button. - -This is the basic syntax of creating a button. What you create with it is up to you. You can worry -about making your button do amazing things, while Pycord handles the rest! - -## Button Styles - - - -| Name | Usage | Color | -| --------- | ----------------------------------------------------------------------------------------- | ------- | -| Primary | `discord.ButtonStyle.primary` / `discord.ButtonStyle.blurple` | Blurple | -| Secondary | `discord.ButtonStyle.secondary` / `discord.ButtonStyle.grey` / `discord.ButtonStyle.gray` | Grey | -| Success | `discord.ButtonStyle.success` / `discord.ButtonStyle.green` | Green | -| Danger | `discord.ButtonStyle.danger` / `discord.ButtonStyle.red` | Red | -| Link | `discord.ButtonStyle.link` / `discord.ButtonStyle.url` | Grey | - -Check out the [`discord.ButtonStyle`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ButtonStyle) class for more information. - -![Different Button Styles](../../assets/interactions/button-styles.png) - -You can set a button's style by adding the `style` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) decorator. - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.success) - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots, and each button takes up 1 slot. -So, how do we move the buttons to another row? - -This can be done by specifying the `row` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) -decorator. - -:::info The `row` argument - -The row argument specifies the relative row this button belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=1, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") -``` - -## Disabling Buttons - -### Pre-Disabled Buttons - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary, disabled=True) # pass `disabled=True` to make the button pre-disabled - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView()) -``` - -### Disabling Buttons on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - button.disabled = True # set button.disabled to True to disable the button - button.label = "No more pressing!" # change the button's label to something else - await interaction.response.edit_message(view=self) # edit the message's view -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(emoji="😀", label="Button 1", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) - - @discord.ui.button(label="Button 2", style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -Sometimes, you want to have a button that is disabled after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView(timeout=30)) -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a button that is disabled after a certain amount of time, you want to have a -button that is always working. - -Normally, when the bot goes offline, all of its buttons stop working. You will be able to see the -buttons, but nothing will happen when you press them. This is a problem -if you are trying to create a self-role system with buttons, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons will stop working. When the bot comes back online, however, the buttons will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view must have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.button(label="A button", custom_id="button-1", style=discord.ButtonStyle.primary, emoji="😎") # the button has a custom_id set - async def button_callback(self, button, interaction): - await interaction.response.send_message("Button was pressed", ephemeral=True) - -@bot.command() -async def button(ctx): - await ctx.send(f"Press the button! View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many buttons can I have in a message? - -Each message can have a maximum of 25 buttons. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do buttons need any special permissions? - -No new permissions are needed for either the bot or the server to allow bots to use buttons. - -#### Should I replace reactions with buttons for my bot? - -That is up to you. Buttons do provide a cleaner interface for your bot and are easier to use. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx deleted file mode 100644 index 8320f25d..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx +++ /dev/null @@ -1,339 +0,0 @@ ---- -title: Select Menus -description: Learn all about implementing Select Menus or Dropdowns in your Discord Bot with Pycord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Shortly after the buttons were added, Discord added their second message component: Select Menus. Select Menus allow users to choose from a list of items sent by a bot. These are a great substitute for having a user send a number that corresponds to an option. You can even allow users to select multiple options from the Select Menus. This guide will show you the easy and painless ways of using them with Pycord. - -## Concept - -Select Menus aren't the only message component in Discord. There's also [Buttons](./buttons) and [Modal Dialogs](./modal-dialogs). Select Menus make it easy for users to pick one or multiple options from a list provided by a bot. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive select menu. - -```python -import discord - -bot = discord.Bot() - -class MyView(discord.ui.View): - @discord.ui.select( # the decorator that lets you specify the properties of the select menu - placeholder = "Choose a Flavor!", # the placeholder text that will be displayed if nothing is selected - min_values = 1, # the minimum number of values that must be selected by the users - max_values = 1, # the maximum number of values that can be selected by the users - options = [ # the list of options from which users can choose, a required field - discord.SelectOption( - label="Vanilla", - description="Pick this if you like vanilla!" - ), - discord.SelectOption( - label="Chocolate", - description="Pick this if you like chocolate!" - ), - discord.SelectOption( - label="Strawberry", - description="Pick this if you like strawberry!" - ) - ] - ) - async def select_callback(self, select, interaction): # the function called when the user is done selecting options - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") - -@bot.command() -async def flavor(ctx): - await ctx.respond("Choose a flavor!", view=MyView()) - -bot.run("TOKEN") -``` - -There's a lot going on over here! Don't worry, we will go over the code and explain it. - -As you can see, we create a class called `MyView` that subclasses -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `select_callback` to the `View` class with the decorator -[`discord.ui.select`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.select). -This decorator adds a select menu to the view. This decorator takes a few arguments to customize your select menu. Read them in the [Customization section](#customization). - -That was the decorator. Now, the function itself is pretty simple. It takes two parameters, not including `self`. The parameters are `select`: The select menu, and `interaction`: a [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object. Both of these are passed by Pycord, so you just need to specify them in the function! - - - -In the callback, you could do anything you want. You get the two parameters `select` and `interaction` to play around with. Here, we send a message using `await interaction.response.send_message` (where interaction is [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse)) with content `select.values[0]`, which sends the label of the first/only option the user selected. Obviously, this is only an example, and you could do just about anything you want. - -Finally, we create a global slash command called `flavour` that sends a message "Choose a flavor!" along with the view -that contains our select menu. - -This is the basic syntax of creating a select menu. What you create with it is up to you. You can worry -about making your code do amazing things, while Pycord handles the rest! - -## Customization - -#### Select Menu Properties - -- `select_type`: The type of select to create. This must be a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. -- `channel_types`: A list of channel types that can be selected in the menu. This is only valid for selects of `select_type` [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType). -- `options`: A list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. These are the options that can be selected in this menu. -- `placeholder` is the placeholder text shown in the select menu if no option is selected. -- `custom_id`: The ID of the select menu that gets received during an interaction. It is recommended not to set this to anything unless you are trying to create a persistent view. -- `row`: The relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). -- `min_values`: The minimum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `max_values`: The maximum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `disabled`: Whether the select is disabled or not. Defaults to False. - -#### Select Option Properties - -In the `options` parameter, you pass a list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. This class also has a few parameters: - -- `default` (whether the option is selected by default) -- `description` (an additional description, if any) -- `emoji` (a string or an emoji object, if any) -- `label` (the name displayed to users, can be up to 100 characters) -- `value` (a special value of the option, defaults to the label). - -## Select Types - -In addition to regular string selects, you can also have your select menu contain users, roles, mentionables, and channels as its options. You can use these alternative select types by passing a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value for the `select_type` parameter when creating the Select. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.user_select - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -Additionally, you can use shortcut decorators to create a [`discord.ui.Select`](https://docs.pycord.dev/en/master/api/ui_kit.html#discord.ui.select) with a predetermined [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. Using a shortcut decorator, the above code can be rewritten like this: - -```python -class MyView(discord.ui.View): - @discord.ui.user_select() - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -### Specifying Channel Types - -When using a [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType.channel_select) type select menu, you can pass in a list of [`discord.ChannelType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ChannelType) values to limit which types of channels users can choose when interacting with the select menu. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.channel_select, - channel_types=[discord.ChannelType.text, discord.ChannelType.voice] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"You selected {select.values[0].mention}") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots. A button takes a single slot, while a select menu takes up all 5 of them. This means a view can have a maximum of 5 select menus, or any possible combination of select menus and buttons. - -The arrangement of buttons and select menus is generally adjusted by Pycord. However, it is possible to move them to specific relative rows. This is done by specifying the `row` argument. - -:::info The `row` argument - -The row argument specifies the relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero-indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=0, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.select( - row = 1, - options = [...] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") -``` - -## Disabling Select Menus - -### Pre-Disabled Menus - -```python -class MyView(discord.ui.View): - @discord.ui.select( - disabled = True, # pass disabled=True to set the menu as disabled - options = [...] - ) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send("Select and option from the menu!", view=MyView()) -``` - -### Disabling Menus on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - select.disabled = True # set the status of the select as disabled - await interaction.response.edit_message(view=self) # edit the message to show the changes -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def first_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) # edit the message to show the changes - - @discord.ui.select(options = [...]) - async def second_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -You may want a select menu to automatically stop working after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select(ctx): - await ctx.send(view=MyView(timeout=30)) # specify the timeout here -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a select menu that is disabled after a certain amount of time, you want to have a -select menu that is always working. - -Normally, when the bot goes offline, all of its views stop working, even if they don't have a timeout. You will be able to see the -views, but nothing will happen when you try to interact with them. This is a problem -if you are trying to create a self-role system, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons and select menus will stop working. However, when the bot comes back online, the buttons and select menus will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view much have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.select(custom_id="select-1", options = [...]) # a custom_id must be set - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send(f"View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many select menus can I have in a message? - -Each message can have a maximum of 5 select menus. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do select menus need any special permissions? - -No new permissions are needed in the bot or in the server. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx deleted file mode 100644 index 6ee4682f..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Modal Dialogs -description: Learn how you can implement Modals in your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Modal Dialogs, also known as "modals", provide a form-like structure for bots to receive input from users. No extra permissions are needed for bots to send modal dialogs, so it becomes a convenient workaround for bots to receive longer input without needing the Message Content [intent](../../popular-topics/intents). - -## Concept - -Modal Dialogs consist of a title, custom ID, and up to 5 [`discord.ui.InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) components. While creating modals, we generally subclass [`discord.ui.Modal`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal), as we'll see later. - -Unlike other UI Components, Modals cannot be sent with messages. They must be invoked by an Application Command or another UI Component. - -## Usage Syntax - -```py -class MyModal(discord.ui.Modal): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - self.add_item(discord.ui.InputText(label="Short Input")) - self.add_item(discord.ui.InputText(label="Long Input", style=discord.InputTextStyle.long)) - - async def callback(self, interaction: discord.Interaction): - embed = discord.Embed(title="Modal Results") - embed.add_field(name="Short Input", value=self.children[0].value) - embed.add_field(name="Long Input", value=self.children[1].value) - await interaction.response.send_message(embeds=[embed]) -``` - - - - -The `ctx` parameter we define in Application Commands receives an [`ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext) object. Using its `send_modal()` coroutine, you can send a Modal dialog to the user invoking the Application Command. - -```py -@bot.slash_command() -async def modal_slash(ctx: discord.ApplicationContext): - """Shows an example of a modal dialog being invoked from a slash command.""" - modal = MyModal(title="Modal via Slash Command") - await ctx.send_modal(modal) -``` - - - - -The `interaction` parameter we define in UI Components receives an [`Interaction`](https://docs.pycord.dev/en/stable/api/models.html#discord.Interaction) object. The `response` attribute of the object contains an [`InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object, with various coroutines such as `send_message()` and `send_modal()`, which we utilize. - -```py -class MyView(discord.ui.View): - @discord.ui.button(label="Send Modal") - async def button_callback(self, button, interaction): - await interaction.response.send_modal(MyModal(title="Modal via Button")) - -@bot.slash_command() -async def send_modal(ctx): - await ctx.respond(view=MyView()) -``` - - - - -The above example uses an embed to display the results of the modal submission, but you can do anything you want with the text provided by the user. -Each input field can be accessed in the order it was added to the modal dialog, via `Modal.children`. - -## Customization - -A Modal can have up to 5 [`InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) fields. These fields offer some customization. - -Each field has a label which is shown to the user. This is defined with `label`. - -The `style` parameter is used to determine whether it should be a short (single-line) or long (multi-line) input field. - -There are a number of aliases that can be used: - -```x title="Single-line InputTextStyle values:" -short -singleline -``` - -```x title="Multi-line InputTextStyle values:" -paragraph = 2 -multiline = 2 -long = 2 -``` - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Buttons](./buttons) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/introduction.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/introduction.mdx deleted file mode 100644 index 3262c632..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/introduction.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Introduction -description: Pycord Guide is a complete guide for Pycord. Learn how to create Discord Bots today! -sidebar_position: 1 ---- - -Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord, written in Python. Pycord is a maintained fork of [discord.py](https://github.com/Rapptz/discord.py). - -## Before you begin - -Pycord is an advanced and complex Python library. To take advantage of the full capabilities of Pycord, you will need to have a good understanding of Python. You should know the basics of Python and have an understanding of the following concepts: - -- Variables -- Data Types -- Functions -- Packages -- Conditionals -- Loops -- Classes -- Object-Oriented Programming -- Inheritance -- Exception Handling -- Iterators -- Coroutines -- Async/Await - -This list is not exhaustive, but it should give you a good idea of what you need to know to get started. - -When you see an ellipsis - that's the three dots - in this guide, it is a placeholder for code that you need to fill in. Sometimes, it may be code for a command, while other times it could be something simple like a Guild ID. Make sure to replace them before running your bot! - -## Learning Resources - -Here are some good resources to get started or to freshen up your Python knowledge: - -- [Official Beginner's Guide](https://wiki.python.org/moin/BeginnersGuide) -- [Official Tutorial](https://docs.python.org/3/tutorial/) -- [Automate the Boring Stuff, a free online book for complete beginners to programming](https://automatetheboringstuff.com/) -- [Learn Python in y Minutes, complete cheat sheet for people who know programming already](https://learnxinyminutes.com/docs/python3/) -- [Swaroopch's free Python book](http://python.swaroopch.com/) -- [Codeabbey, exercises for beginners](http://www.codeabbey.com/) - -## Credits - -First of all, we would like to thank [Rapptz](https://github.com/Rapptz) for the original [discord.py](https://pypi.org/project/discord.py) library. Pycord is a maintained fork of this library. - -We would also like to thank the [discord.js guide](https://discordjs.guide), which inspired this guide style-wise, and the [original Pycord Guide](https://namantech.me/pycord), which inspired some content in this guide. - -We created this guide using [Docusaurus v2](https://docusaurus.io), a modern static site generator for React. We would also like to thank Danktuary for his [`@discord-message-components/react`](https://www.npmjs.com/package/@discord-message-components/react) package, from which we took the Discord message components. - -And finally, we would like to thank the amazing and loving community of Pycord users, contributors and developers. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/more/_category_.json b/i18n/ru/docusaurus-plugin-content-docs/current/more/_category_.json deleted file mode 100644 index 2cbe2c56..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/more/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 8, - "label": "More", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/more/community-resources.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/more/community-resources.mdx deleted file mode 100644 index ed3075bd..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/more/community-resources.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Community Resources ---- - -This page showcases the amazing things created by the Pycord community, including bots, Plugins, and more. - -## Plugins - -| Name | Type | GitHub | -| --------------- | ------------ | --------------------------------------------------------------- | -| Music Cord | Music | [NixonXC/cord-music](https://github.com/NixonXC/cord-music) | -| pycord-i18n | Localization | [Dorukyum-pycord-i18n](https://github.com/Dorukyum/pycord-i18n) | -| pycord-multicog | Cogs | [pycord-multicog](https://github.com/Dorukyum/pycord-multicog) | -| EzCord | Utilities | [EzCord](https://github.com/tibue99/ezcord) | - -## Bots - -| Name | Type | Link | -| ------------------------ | ------------ | ----------------------------------------------------------------------------------- | -| Discord-Multipurpose-Bot | Multipurpose | [github](https://github.com/pogrammar/Discord-multipurpose-bot/tree/master/Python) | -| inconnu | Fun & QOL | [github](https://github.com/tiltowait/inconnu) | -| Mai | Multipurpose | [github](https://github.com/TeamMai/Mai) & [website](https://xfghoul.github.io/Mai) | -| Toolkit | Multipurpose | [github](https://github.com/Dorukyum/Toolkit) | diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/more/contributing.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/more/contributing.mdx deleted file mode 100644 index 8fdf31af..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/more/contributing.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: Contributing to the Guide -description: Learn how to contribute to the Pycord Guide. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -This page outlines some of the basic syntax you need to know to contribute to the guide. We recommend you also check out: - -- [Docusaurus's Docs](https://docusaurus.io/docs/) -- [Contributing Rules](https://github.com/Pycord-Development/guide/blob/master/.github/CONTRIBUTING.md) - -## Info - -We use [Docusaurus v2](https://docusaurus.io/) to generate our guide. All the guide pages are generated -from `mdx` files in the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory. -MDX allows you to use JSX in your markdown content. - -## Structure - -Let's visit the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory and check its file structure. - -We can see various folders and a few files in it. Let's talk a bit about the `introduction.mdx` file. At the top, you can see something like: - -```md ---- -title: Introduction -description: ... -sidebar_position: 1 ---- -``` - -Most pages have this at the top. The `title` defaults to the file name. Since the titles need to be Capitalized according to need while the file names are lowercased (sometimes, the file names are shorter than the title!), we set a title ourselves. - -The `description` field is also important. This is the text shown in an embed when the page's link is shared on Discord, Twitter or other websites that support embedded links. Make sure to give a nice an interesting description! - -The `sidebar_position` field is pretty self-explanatory. It sets the position of the page in the sidebar. Most files in categories do not need this since they are sorted alphabetically. - -## Markdown Syntax - -This page quickly outlines some of the syntax that is used in markdown. - -````mdx -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - - ```python - print("We can use code blocks like this.") - ``` - -You can add [links to other websites](https://pycord.dev). You can add images like this: ![alternate text that describes the image](https://pycord.dev/image.png). - -- You can create -- unordered lists like this - -1. Or ordered lists -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` -4. Like this - -# Headers - -## Go - -### Like - -#### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet -```` - -
-Preview -
- -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - -```python -print("We can use code blocks like this.") -``` - -You can add [links to other websites](https://pycord.dev). You can add images by adding ![alt text](@site/static/img/favicon.ico). - -- You can create -- unordered lists like this - -1. Or ordered lists - -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` - -4. Like this - - # Headers - - ## Go - - ### Like - - #### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet - -
-
- -## Admonitions - -We can add warnings, notes, etc. with the following syntax: - -```md -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: -``` - -
-Preview -
- -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: - -
- -
- -## Discord Message Components - -As most files already have the imports for these, it's not that hard to add them. - -First, import the necessary components: - -```tsx -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; -``` - -The div starts like so: - -```tsx - - - - -
-``` - -This is where you list a `DiscordMessage`. - -```tsx - - - Hello! - - - -
-``` - - - - Hello! - - - -
- -It has a pretty straightforward syntax. - -:::tip - -Add a `
` to the end of a component to make the content below it look better. - -::: - -### Slash Commands - -To make a message authored by a slash command, do the following: - -```tsx - - -
- - update - -
- Updated dependencies to the latest version! -
-
-``` - - - -
- - update - -
- Updated dependencies to the latest version! -
-
- -### Buttons - -To make a message with buttons, do the following: - -```tsx - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
-``` - - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
- -## Page Format - -There are a few things you need to take care of: - -1. Make sure that the spelling and grammar is perfect. We have a GitHub action configured that will warn you about spelling errors when you start a pull request. Make sure to commit your changes accordingly. - - As for the grammar, you should try reading the changes you have done and wait for reviews from others. - -2. A common mistake people make is incorrect header style. People often think that the less the important the topic is, the lower it's heading style should be. - - ```md - [PAGE STARTS] - # Topic - ## Less Important Topic - ## Subtopic - ``` - - ```md - [PAGE STARTS] - # About - [Introduction] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - That's VERY wrong. Here's the correct example: - - ```md - [PAGE STARTS] - [Introduction] - ## Topic - ## Less Important Topic - ### Subtopic - ``` - - ```md - [PAGE STARTS] - [Introduction] - - ## About - [More Information] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - Note that the `---`s at the beginning have been skipped here. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/more/git.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/more/git.mdx deleted file mode 100644 index 0f929d6d..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/more/git.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Installing Git -description: Learn how you can install Git on your system. ---- - -Git is software for tracking changes in any set of files (also known as a "version control" software), usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems). - -Let's see how to install Git on different platforms. - -## Windows - -On Windows, Git can be installed via: - -- [Git for Windows](https://gitforwindows.org) -- [Git Scm](https://git-scm.com/download/windows) - -## Linux - -On Linux, Git is probably already installed in your distribution's repository. If not, you can install it via [Git for Linux](https://git-scm.com/download/linux). You can also install it via the built-in package manager on your Linux distro. - -## Mac - -You can install Git for your macOS computer via [Git for Mac](https://git-scm.com/download/mac). Alternatively, it can be also be installed from the Xcode Command Line Tools by installing Xcode from the App Store, or by running this: - -``` -xcode-select --install -``` - -## Using Package Managers - -You can also install Git using package managers. - -### Chocolatey - -If you use the Chocolatey package manager, you can install Git using: - -``` -choco install git -``` - -### Scoop - -If you use Scoop, you can install Git using: - -``` -scoop install git -``` - -### Brew - -If you're on macOS or Linux, you can install Git using: - -``` -brew install git -``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx deleted file mode 100644 index b0b8c7ea..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Virtual Environments -description: Learn how to set up a virtual environment for Pycord. ---- - -## Setup - -Sometimes you want to keep libraries from polluting system installs or use a different version of libraries than the ones installed on the system. You might also not have permissions to install libraries system-wide. For this purpose, the standard library as of Python 3.3 comes with a concept called “Virtual Environment”s to help maintain these separate versions. - -A more in-depth tutorial is found on [Virtual Environments and Packages](https://docs.python.org/3/tutorial/venv.html). - -However, for the quick and dirty: - -Go to your project’s working directory: - -```bash -$ cd your-bot-source -$ python3 -m venv venv -``` - -Activate the virtual environment: - -```bash -$ source venv/bin/activate -``` - -On Windows you activate it with: - -```batch -$ venv\Scripts\activate.bat -``` - -Use pip like usual: - -```bash -$ pip install -U py-cord -``` - -Congratulations. You now have a virtual environment all set up. - -## Additional info - -It can be useful to set up a requirements.txt, so you can just put all of your dependencies in there and have pip install it. -For instance, if you wanted to have the latest 2.0 version of pycord and [pytz](https://github.com/stub42/pytz/blob/master/src/README.rst), just create a file named requirements.txt with the following contents: - -``` -py-cord>=2.0.0 -pytz -``` - -And then (in your virtual environment) you can just execute - -```bash -pip install -r requirements.txt -``` - -To keep from committing your virtual environment to git, you can set up a .gitignore file with the following line -(assuming you named your virtual environment venv like the above example): - -``` -venv/ -``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/_category_.json b/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/_category_.json deleted file mode 100644 index c38ea014..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 7, - "label": "Popular Topics", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx deleted file mode 100644 index 5377a6c3..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Cogs ---- - -Cogs, often known as modules or extensions, are used to organize commands into groups. This is useful -for grouping commands that have the same general idea (such as moderation commands). This also helps -to avoid making your bot's files messy and cluttered. - -## Getting Started - -First, you'll need to create a folder to store your cogs, e.g. `cogs/`. - -Then, create a file inside the folder, e.g. `cogs/greetings.py`. By convention, the file name should -be the same as the name of the cog or module. - -We can then create the cog. - -```python title="./cogs/greetings.py" -import discord -from discord.ext import commands - -class Greetings(commands.Cog): # create a class for our cog that inherits from commands.Cog - # this class is used to create a cog, which is a module that can be added to the bot - - def __init__(self, bot): # this is a special method that is called when the cog is loaded - self.bot = bot - - @commands.command() # creates a prefixed command - async def hello(self, ctx): # all methods now must have both self and ctx parameters - await ctx.send('Hello!') - - @discord.slash_command() # we can also add application commands - async def goodbye(self, ctx): - await ctx.respond('Goodbye!') - - @discord.user_command() - async def greet(self, ctx, member: discord.Member): - await ctx.respond(f'{ctx.author.mention} says hello to {member.mention}!') - - math = discord.SlashCommandGroup("math", "Spooky math stuff") # create a Slash Command Group called "math" - advanced_math = math.create_subgroup( - "advanced", - "super hard math commands!" - ) - - @math.command() - async def add(self, a: int, b: int): - c = a + b - await ctx.respond(f"{a} + {b} is {c}.") - - @advanced_math.command() - async def midpoint(self, x1: float, y1: float, x2: float, y2: float): - mid_x = (x1 + x2)/2 - mid_y = (y1 + y2)/2 - await ctx.respond(f"The midpoint between those coordinates is ({mid_x}, {mid_y}).") - - @commands.Cog.listener() # we can add event listeners to our cog - async def on_member_join(self, member): # this is called when a member joins the server - # you must enable the proper intents - # to access this event. - # See the Popular-Topics/Intents page for more info - await member.send('Welcome to the server!') - -def setup(bot): # this is called by Pycord to setup the cog - bot.add_cog(Greetings(bot)) # add the cog to the bot -``` - -You can add any number of commands to your cog, as well as event listeners. However, this code will -not work on its own. In your main bot file, you must add the following code: - -```python -bot.load_extension('cogs.greetings') -``` - -This loads the file `cogs/greetings.py` and adds it to the bot. -The argument of `load_extension` should be your cog's path (e.g. cogs/greetings.py) without the file -extension and with the `/` replaced with `.` - -If you have multiple cogs, you can add them all at once by adding the following code: - -```python -cogs_list = [ - 'greetings', - 'moderation', - 'fun', - 'owner' -] - -for cog in cogs_list: - bot.load_extension(f'cogs.{cog}') -``` - -## Cog Rules - -When using a cog instead of the main file, there are some changes you have to make to your code. This -is because cogs work slightly different from a regular file. - -### The `self` variable - -The self variable is a variable that represents a class. In the case of cogs, `self` represents -the cog. In the `__init__` function, you can see that we have `self.bot = bot`. `bot` represents your -`discord.Bot` or `discord.ext.commands.Bot` instance, which is used for some functions. - -This means that instead of using functions that would usually be accessed via `bot`, you now need -to access them via `self.bot` - -Because we're in a class, all of our commands are methods of that class. Because of this, all of our -functions need to have `self` as the first parameter, where `self` is the cog. Without this, we -wouldn't be able to access our bot instance. - -### Creating Commands - -When creating prefixed commands, your decorator would usually be something like `@bot.command()`. If you're using -cogs, this isn't the case. In a cog, you can't access the bot instance outside of functions, so to -register a function as a command, you must instead use `@commands.command()`. - -Similar to prefixed commands, you'll have to use either the `@discord.slash_command()`, `@discord.user_command()`, -or `@discord.message_command()` decorators for Application Commands. - -Also, when creating a command, make sure that it is indented. If we want a command to be actually -inside a cog, it has to be inside your cog's class. If the command is not inside the cog, -your command becomes useless. - -### Events - -When creating events, you can no longer use `@bot.event` as a decorator. This is because we cannot -access the `bot` variable outside a function. To make an event, you have to use the `ext.commands` -method, `@commands.Cog.listener()`. Events also need `self` as their first parameter. - -And that's it! Cogs are a simple and easy way of organizing your code. Now you can check out how to -create a help command [here](../extensions/commands/help-command). - -:::info Related Topics - -- [Creating a Help Command](../extensions/commands/help-command) -- [Rules and Common Practices](../getting-started/rules-and-common-practices) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Application Commands](../interactions#application-commands) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx deleted file mode 100644 index 3599cc82..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx +++ /dev/null @@ -1,383 +0,0 @@ ---- -title: Error Handling -description: All about handling errors. ---- - -import { - DiscordEmbed, - DiscordInteraction, - DiscordMessage, -} from "@pycord/discord-message-components-react"; -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -## About - -When using the library, errors are frequently raised due to various reasons. These reasons range from the Discord API -failing your bot's request due to missing permissions or an invalid syntax error. - -Before going into error handling, it's best that you learn the basic ways of handling errors. A good resource is: - -- [W3Schools' Guide to Python Try-Except Statements](https://www.w3schools.com/python/python_try_except.asp) - -## Basic Handling - -The most basic way to handle errors is to tackle it at the source. This can be done like so: - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -import asyncio - -import discord - -intents = discord.Intents.default() -intents.message_content = True - -bot = discord.Bot(intents=intents) - - -@bot.slash_command(description="Gets some feedback.") -@discord.option("name", description="Enter your name.") -async def feedback(ctx: discord.ApplicationContext, name: str): - try: - await ctx.respond(f"Hey, {name}! Send your feedback within the next 30 seconds please!") - - def is_author(m: discord.Message): - return m.author.id == ctx.author.id - - feedback_message = await bot.wait_for("message", check=is_author, timeout=30.0) - await ctx.send(f"Thanks for the feedback!\nReceived feedback: `{feedback_message.content}`") - except asyncio.TimeoutError: - await ctx.send("Timed out, please try again!") - - -bot.run("TOKEN") -``` - -If you respond within 30 seconds, the interaction will look like so: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Great bot! - - - Thanks for the feedback! -
- Received feedback: Great bot! -
-
-
- -Otherwise, if you don't respond in time, the interaction will go as follows: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Timed out, please try again! - -
-
- -This basic method of error handling can be extended to handle -many other errors including ones raised directly by py-cord. - -## Per-Command Handling - -This type of error handling allows you to handle errors per each command you have on your bot. -Each and every command can have it's own error handler made to handle specific errors that each command may raise! - -An example of per-command error handling is as follows: - -:::note Bridge Commands - -For these types of commands, it is recommended to utilize global error handling -until [the feature](https://github.com/Pycord-Development/pycord/issues/1388) is added. -::: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot(owner_id=...) # Your Discord user ID goes in owner_id - - -@bot.slash_command(description="A private command...") -@commands.is_owner() # This decorator will raise commands.NotOwner if the invoking user doesn't have the owner_id -async def secret(ctx: discord.ApplicationContext): - await ctx.respond(f"Hey {ctx.author.name}! This is a secret command!") - - -@secret.error -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.NotOwner): - await ctx.respond("Sorry, only the bot owner can use this command!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If your ID is registered as the owner ID, you'll get the following: - - - -
- - secret - -
- Hey Dorukyum! This is a secret command! -
-
-
- -Any other user whose ID doesn't match the bot owner's will get the following: - - - -
- - secret - -
- Sorry, only the bot owner can use this command! -
-
-
- -This local (per-command) error handler can also be used to handle the same types of errors that standard try-except -statements can handle. This is done by using the same method as above with the `isinstance` built-in function. - -## Per-Cog Handling - -Adding error handlers per-command can be quite the task in terms of work if you have a lot. If you have happened to -group your commands in cogs, then you're in luck! You can create an error handler that is specific to a cog and -handles all errors raised by commands inside that cog. - -Here's an example of a bot with a cog that implements its own error handling: - -```python title="./cogs/dm.py" -# This cog is for DM only commands! Sadly, we only have 1 command here right now... - -import discord -from discord.ext import commands - - -class DM(commands.Cog): - def __init__(self, bot: commands.Bot): - self.bot = bot - - @commands.command() - @commands.dm_only() # This decorator will raise commands.PrivateMessageOnly if invoked in a guild context. - async def avatar(self, ctx: commands.Context): - embed = discord.Embed( - title="Avatar", - description=f"Here's your enlarged avatar, {ctx.author.name}!", - color=ctx.author.top_role.color - ) - embed.set_image(url=ctx.author.display_avatar.url) - await ctx.send(embed=embed, reference=ctx.message) - - async def cog_command_error(self, ctx: commands.Context, error: commands.CommandError): - if isinstance(error, commands.PrivateMessageOnly): - await ctx.send("Sorry, you can only use this in private messages!", reference=ctx.message) - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -def setup(bot: commands.Bot): - bot.add_cog(DM(bot)) -``` - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -# This is the main file where we load the DM cog and run the bot. - -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix=commands.when_mentioned_or("!")) -bot.load_extension("cogs.dm") -bot.run("TOKEN") -``` - -If you use this command in a DM context, you'll get the following: - - - - !avatar - - -
- - !avatar - -
- - Here's your enlarged avatar, BobDotCom! - -
-
-
- -Otherwise, if used in a guild context: - - - - !avatar - - -
- - !avatar - -
- Sorry, you can only use this in private messages! -
-
-
- -Per-cog error handling comes in very handy as you can relegate all of your error handling to a single function instead -of spreading it out across several per-command error handlers or inside the commands themselves. - -## Global Handling - -If separating your error handling is not how you would like to handle errors, then global error handling is the way to -go. This method of handling allows you to relegate all handling to a single function that resides within your bot -instance. - -A non-subclassed bot would implement this like so: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot() - - -@bot.slash_command(description="Get the bot's current latency!") -@commands.cooldown(1, 30, commands.BucketType.user) -# ^ This decorator allows one usage of the command every 30 seconds and raises commands.CommandOnCooldown if exceeded -async def ping(ctx: discord.ApplicationContext): - await ctx.respond(f"Pong! `{int(bot.latency*1000)} ms`.") - - -@bot.event -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.CommandOnCooldown): - await ctx.respond("This command is currently on cooldown!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If you've subclassed your bot, the `on_application_command_error` event will be placed inside the subclass without a -`bot.event` decorator and `bot.slash_command` will be replaced with `discord.slash_command`. - -The error handling used above will yield this interaction if the command is used again too quickly: - - - -
- - ping - -
- Pong! 49 ms. -
- -
- - ping - -
- This command is currently on cooldown! -
-
-
- -The only issue regarding global error handling is that, if you have a large amount of commands, the global handler may -start to get crammed with a lot of code. This is where all the previously mentioned handlers can take their place! - -## FAQ - -#### Why does the example in per-cog handling have self at the start of its function signatures? - -This is a feature of classes and allows you to reference the cog object as `self` and get access to the bot object -passed at initialization through `self.bot`. - -If this is new to you, we recommend checking out these helpful resources to learn more about classes and cogs: - -- [W3Schools' Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [Our Cogs Guide Page](./cogs) - -#### How many errors can I handle in a single error handler? - -While all the examples in this guide page only handle one specific error and re-raise all others, all of these -error handlers can be extended to catch many errors. - -In [basic handling](#basic) (i.e. try/except statements) you can do one of two things: - -- Explicitly handle the errors you know might get raised and then have a broad `except Exception as exc:` statement - as a catch-all. -- Catch any and all errors via the catch-all statement mentioned above. - -In [per-command](#percommand), [per-cog](#percog), and [global handling](#global), you can use elif clauses with the -built-in isinstance function to catch specific errors. Atop of this, an else clause can be used to catch any other -errors you either don't want to handle or want to relegate to a different error handler. - -#### Can I use more than one type of error handler at once? - -Thankfully, all of these different ways of error handling can be mixed together, so you don't have to pick just one! -For commands that raise specific errors that no other commands will raise, you can use [per-command](#percommand). -For cogs that raise specific errors that no other cogs will raise, use [per-cog](#percog)! Lastly, for errors that -occur frequently across all commands and cogs, use [global handling](#global)! - -However, one important note to remember is that you should always raise the error again in an error handler if it -isn't handled there! If you don't do this, the error will go ignored and your other handlers won't have a chance to -do their work! - -#### What's the difference between slash and prefixed command error handling? - -Although most examples shown here use slash commands, the [per-cog handling](#percog) section presents a prefixed -command. The main difference you may notice is the change in command signature. - -To make the distinguishing features apparent: - -- Slash commands use `on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException)` - as presented in the [per-command](#percommand) and [global handling](#global) examples. -- Prefixed commands use `on_command_error(ctx: commands.Context, error: commands.CommandError)` as presented in the - [per-cog handling](#percog) example. - -This distinction is made as both types of commands need their own system for handling errors that are specific to -themselves. - -:::info Related Topics - -- [Slash Commands](../interactions/application-commands/slash-commands) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Cogs](./cogs) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx deleted file mode 100644 index 9f4210af..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Intents -description: All about intents in Discord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## What are Intents? - -Intents allow bot developers to "subscribe" to specific events in Discord. This is useful for bots that need to respond to specific events, such as when a user joins a server or sends a message. You could choose to enable all intents or to enable only specific intents that your bot requires. - -## How do I enable intents? - -:::important - -Remember that [Privileged Intents](#what-are-privileged-intents) require you to enable them in the Discord Developer Portal. Verified Discord Bots that don't already have access to them will need to request Discord to allow access. - -::: - - - - -```python -import discord - -bot = discord.Bot(intents=discord.Intents.all()) -``` - - - - - -You can view a list of intents and the events they subscribe to [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```python title="Enabling Intents" -import discord - -bot = discord.Bot(intents=discord.intents.members(bans=True, guilds=True)) -``` - - - - -## What are Privileged Intents? - -Discord defines some intents as "privileged" because of the sensitive information they contain. Currently, there are three privileged intents: `members`, `presences`, and `message_content`. These intents must be enabled in your bot's Developer Portal. Once your bot reaches 100 servers, you will need to verify your bot for these intents to keep working and for your bot to be able to be invited to more guilds. - -:::tip - -Only enable these intents if you need them. These intents give your bot access to quite sensitive information about the users in your guild. These intents are privileged to respect the privacy of users, and you should do that as well. - -Not enabling these intents doesn't mean you won't be able to ban users, but you will be unable to detect when a new user joins a guild, or what game they are playing. The majority of bots won't need all intents. - -::: - -:::info Related Topics - -- [Sharding Bots](sharding) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx deleted file mode 100644 index c3d17197..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Sharding -description: All about Sharding Discord Bots. ---- - -# Sharding - -## What is Sharding? - -Sharding is the process of breaking up your bot into smaller pieces so that it has a better time handling -events. As [Discord's Documentation](https://discord.com/developers/docs/topics/gateway#sharding) puts -it, sharding is "a method of user-controlled guild sharding which allows for splitting events across -several gateway connections." - -Sharding is used only for large bots and takes up additional resources for managing the new processes. -Pycord automatically shards your bot, so the only thing you need to do is use an `AutoShardedClient` -or `AutoShardedBot` class instead of a plain `Client` or `Bot` class. Pretty cool, right? - -Just because you _can_ shard your bot doesn't mean you _should_. While Pycord makes it easy to shard -your bot, it isn't necessary to shard unless your bot is large. Sharding a small bot isn't -just useless, but _harmful_, as it uses extra resources and may slow down your bot. Discord -themselves will let you know when your bot needs sharding, so you won't need to worry about this until they contact you. - -## How Do I Shard in Pycord? - -Sharding in Pycord is straightforward. - -Just replace your `discord.Client`, `discord.Bot`, `commands.Bot` objects -with `discord.AutoShardedClient`, `discord.AutoShardedBot`, `commands.AutoShardedBot` respectively. - -These new objects have been inherited from the original objects, so all the functions from those other types should be present. - -If you want to specify the number of shards your bot uses, -just add the `shards` parameter, along with the number of shards you want. - -## Why Should I Shard my Bot? - -Sharding is very necessary for big bots. While your bot grows, it gets harder for your bot to control -how many guilds it is in and what parts of your code should do what. This is exactly what sharding -handles, it makes all of this easier for your bot. Remember, though, only shard your bot once it's -big enough, and that's at _least_ 1,000 guilds. - -:::info Related Topics - -- [Hosting your Bot](../Getting-Started/hosting-your-bot) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx deleted file mode 100644 index bd2969c1..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Subclassing Bots -description: Subclassing is a popular way of creating Discord Bots. Explore how you can create a Discord bot by subclassing. ---- - -## About - -Subclassing is another popular way of creating Discord Bots. Here, you create a bot by extending a bot class. To some advanced users, this is preferable to creating a bot instance with `bot = discord.Bot()`. - -Subclassing is an intermediate python concept, so we recommend you learn about it before continuing. Some good resources are: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -## Why Subclassing? - -Many developers prefer to subclass their bots for many reasons, some of them being: - -#### Skeletal Frameworks for Bots - -Developers often share their bots code on open-source platforms, mostly GitHub, and allow users to self-host the bot (running their own instance of the bot with the code provided by the developer. Permissions vary in accordance to licences). Here, users find it easier and more convenient to have a small file that imports the custom bot class and runs it, rather than having to go through the code of the bot and find out which file to run. This makes it easier for people not familiar with programming to run and customize the bot, since it often brings down the code to: - -```python title="./main.py" -from src import Bot - -bot = Bot() - -bot.run("TOKEN") -``` - -Here, all the commands are inside the `/src` folder that the user need not bother with. - -#### Running Multiple Instances - -Some developers may need to run multiple instances of their bot (perhaps on different bot accounts). For example, a developer might have a second bot for testing alpha features. This system makes it simpler for the developer, and allows them to maintain multiple versions of the bot in the same directory: - -```python title="./alpha_bot.py" -from src import Bot - -class AlphaBot(Bot): # subclasses Bot - ... # insert any custom configuration - -bot = AlphaBot() - -@bot.slash_command() # adds a new slash command to this subclassed bot -async def alpha_feature(ctx): - await ctx.respond("Alpha Feature!") - -bot.run("TOKEN") -``` - -There are many more reasons to subclass! It's not required, and won't affect the speed of the bot, but it may affect your development process, for the good or for the worse. You don't miss out on any features when you subclass, either. Some developers want the OOP feel, while some just prefer that method and find it easier. - -## Basic Example - -```python -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override the on_ready event - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') - -bot = MyBot() - -@bot.slash_command() # create a slash command -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run('token') -``` - -As you can see, instead of creating a bot object with `bot = discord.Bot()`, we subclass [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). We then create an instance of our new bot class and run it. Notice how we don't need to use the `@event` decorator. - -Here's another example: - -```python title="./src/bot.py" -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override on_ready - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') -``` - -```python title="./src/\_\_init\_\_.py" -from .bot import MyBot # import the MyBot class from the bot.py file -``` - -```python title="./main.py" -from src import MyBot # import MyBot from /src - -bot = MyBot() # create an instance of MyBot - -@bot.slash_command() -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run("TOKEN") # run the bot -``` - -These are just two ways you could do it. There are ton of other structures you can implement. It's up to you. - -So, should you subclass? There are no limitations you face if you decide to subclass your bot, but, once again, it's up to you. - -:::info Related Topics - -- [Making a Help Command](../Extensions/Commands/help-command) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx deleted file mode 100644 index 23220b0e..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Threads -description: Threads with Pycord ---- - -In programming, threads are a way to run multiple processes at the same time. In Discord, threads are -a way to keep multiple conversations going at the same time. Let's take a brief look at how to use threads in Pycord. - -:::tip - -Not all the methods and attributes will be covered in this guide, but you can find them in our documentation! -[Check it out!](https://docs.pycord.dev/en/stable/api/models.html#discord.Thread) - -::: - -## Creating a thread - -With a few simple lines of code, we can create threads in Pycord. - -:::important - -All public threads need a starting message. This message will start the thread. However, private threads -(which are unlocked with having your server boosted to Level 2), do not require a starting message. - -::: - -### Creating thread from a message - -```python title="Creating a Thread from a Message" -message = await ctx.send("My Starting Message") -await message.create_thread(name="thread name", auto_archive_duration=60) -``` - -You may also use other ways to create the thread, for example, by using `on_message` events or by commands. - -### Creating thread in a channel - -```python title="Creating a Thread from a Channel" -channel = bot.get_channel(...) # define this! -await channel.create_thread(name="Thread Name", message=None, auto_archive_duration=60, type=None, reason=None) -``` - -A thread type could be `news_thread`, `public_thread`, `private_thread`. You may use it by passing `type=discord.ChannelType.news_thread`. - -## Deleting Threads - -Deleting Threads is simple. You need to get a thread and then use the `delete` method. - -```python title="Deleting a Thread" -thread = bot.get_channel(thread_id) # you could use other ways to get a thread -await thread.delete() -``` - -## Editing Threads - -**Parameters** - -- `name` (str) – The new name of the thread - -- `archived` (bool) – Whether to archive the thread or not. - -- `locked` (bool) – Whether to lock the thread or not. - -- `invitable` (bool) – Whether non-moderators can add other non-moderators to this thread. Only available for private threads. - -- `auto_archive_duration` (int) – The new duration in minutes before a thread gets automatically archived for inactivity. Must be one of 60, 1440, 4320, or 10080. - -- `slowmode_delay` (int) – Specifies the slow-mode rate limit for users in the thread, in seconds. A value of 0 disables slow-mode. The maximum value possible is 21600. - -```python title="Editing a Thread" -thread = bot.get_channel(id) -await thread.edit( - name="New Name", - archived=True, - locked=True, - slowmode_delay=10, - auto_archive_duration=60, -) -``` - -As you can see, threads are very simple. Once you learn how to use them, it's easy to create whatever you want. - -## FAQ - -### Why am I getting a `Forbidden` error when I try to create a thread? - -A `Forbidden` error occurs when the bot does not have the correct permissions to create threads. - -### Why am I getting an Unknown Message error when I try to create a thread? - -Getting an error looking something like `discord.ext.commands.errors.CommandInvokeError: Command -raised an exception: HTTPException: 400 Bad Request (error code: 10008): Unknown Message`? - -There could be multiple reasons, some of them being: - -- The message does not exist -- The message already has a thread -- The message is in channel x, you are trying to start a thread in channel y. -- The message was deleted. - -:::info Related Topics - -<>{/* I can't think of any related topics for this at the moment. */} - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/voice/_category_.json b/i18n/ru/docusaurus-plugin-content-docs/current/voice/_category_.json deleted file mode 100644 index 8baf3da8..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/voice/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 6, - "label": "Voice" -} \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/voice/index.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/voice/index.mdx deleted file mode 100644 index 835838c6..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/voice/index.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Voice ---- - -Welcome to the guide for voice features in Pycord. - -:::caution -This guide requires previous experience with Pycord and Python. -::: - -## Requirements - -The only requirement which is required for voice features is [`PyNaCl`](https://pypi.org/project/PyNaCl/). -The following features are optional: - -:::tip -Opus is also a required library, but this comes with Pycord. -Some hosts may not come with it, though, so remember to always check if required dependencies are installed. -::: - -- [`FFmpeg`](https://ffmpeg.org) - used for sending/receiving files other than `.pcm` and `.wav` -- [`Pycord.Wavelink`](https://github.com/Pycord-Development/Pycord.Wavelink), - [`Lavalink.py`](https://github.com/Devoxin/Lavalink.py), - [`Wavelink`](https://github.com/PythonistaGuild/Wavelink) or any other Python LavaLink library for music playback. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/voice/playing.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/voice/playing.mdx deleted file mode 100644 index 7a58baee..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/voice/playing.mdx +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Wavelink Audio Player ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { - defaultOptions, -} from "@site/src/components/DiscordComponent"; - -# About - -Pycord and Wavelink try to keep the playing of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio playing feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/). - -## Starting out - -First you need to run a [Lavalink Server](https://github.com/freyacodes/Lavalink) to connect with. -There a multiple documentations to do this, so we are not covering that here. - -You also need to install the [wavelink](https://github.com/PythonistaGuild/Wavelink) library. - -```py title="Installing wavelink" -python3 -m pip install wavelink -``` - -You will now want to connect to your server via a node. - -```py title="Connect Node with Lavalink" -import discord -import wavelink - -bot = discord.Bot() - -async def connect_nodes(): - """Connect to our Lavalink nodes.""" - await bot.wait_until_ready() # wait until the bot is ready - - nodes = [ - wavelink.Node( - identifier="Node1", # This identifier must be unique for all the nodes you are going to use - uri="http://0.0.0.0:443", # Protocol (http/s) is required, port must be 443 as it is the one lavalink uses - password="youshallnotpass" - ) - ] - - await wavelink.Pool.connect(nodes=nodes, client=bot) # Connect our nodes -``` - -
- -Now you are finished making your node! Next, you will want to: - -1. Making a play command -2. Adding connect events - -### Making a play command - -To make a play command, you will need to make a function to connect and play audio in a voice channel. - -```py title="Play Command Example" -import typing - -@bot.slash_command(name="play") -async def play(ctx, search: str): - # First we may define our voice client, - # for this, we are going to use typing.cast() - # function just for the type checker know that - # `ctx.voice_client` is going to be from type - # `wavelink.Player` - vc = typing.cast(wavelink.Player, ctx.voice_client) - - if not vc: # We firstly check if there is a voice client - vc = await ctx.author.voice.channel.connect(cls=wavelink.Player) # If there isn't, we connect it to the channel - - # Now we are going to check if the invoker of the command - # is in the same voice channel than the voice client, when defined. - # If not, we return an error message. - if ctx.author.voice.channel.id != vc.channel.id: - return await ctx.respond("You must be in the same voice channel as the bot.") - - # Now we search for the song. You can optionally - # pass the "source" keyword, of type "wavelink.TrackSource" - song = await wavelink.Playable.search(search) - - if not song: # In case the song is not found - return await ctx.respond("No song found.") # we return an error message - - await vc.play(song) # Else, we play it - await ctx.respond(f"Now playing: `{song.title}`") # and return a success message -``` - - - -
- - play - -
- Now playing: Never Gonna Give You Up -
-
- -
- -Now that you've done this, the only thing left to do is make your connect events. - -### Adding connect events - -The final step to this guide is connecting the node to your server when the bot goes online. - -To make it, you will want to do the following: - -```py title="Adding connect events" -@bot.event -async def on_ready(): - await connect_nodes() # connect to the server - -@bot.event -async def on_wavelink_node_ready(payload: wavelink.NodeReadyEventPayload): - # Everytime a node is successfully connected, we - # will print a message letting it know. - print(f"Node with ID {payload.session_id} has connected") - print(f"Resumed session: {payload.resumed}") - -bot.run("token") -``` - -Congratulations! You have now implemented voice playing into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/voice/receiving.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/voice/receiving.mdx deleted file mode 100644 index 70f91507..00000000 --- a/i18n/ru/docusaurus-plugin-content-docs/current/voice/receiving.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Receiving Voice Samples ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -# About - -Pycord tries to keep the recording of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio recording feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/audio_recording.py). - -## Starting out - -The first thing you want to do is make a cache of your voice connections. This is fairly easy; as -it's just putting a variable with an empty dictionary in our code, such as `connections = {}`. - -You will now want to create your command for recording. - -```py title="Record Command Example" -import discord - -bot = discord.Bot() -connections = {} - -@bot.command() -async def record(ctx): # If you're using commands.Bot, this will also work. - voice = ctx.author.voice - - if not voice: - await ctx.respond("You aren't in a voice channel!") - - vc = await voice.channel.connect() # Connect to the voice channel the author is in. - connections.update({ctx.guild.id: vc}) # Updating the cache with the guild and channel. - - vc.start_recording( - discord.sinks.WaveSink(), # The sink type to use. - once_done, # What to do once done. - ctx.channel # The channel to disconnect from. - ) - await ctx.respond("Started recording!") -``` - - - -
- - record - -
- Started recording! -
-
- -
- -Now you are finished making your command for voice receiving! Next, you will want to: - -1. Make your finished callback -2. Make a stop command - -### Making a Callback - -To make a callback, you will want to define the currently undefined `once_done` function inside -our command, like so: - -```py title="Recorder Callback" -async def once_done(sink: discord.sinks, channel: discord.TextChannel, *args): # Our voice client already passes these in. - recorded_users = [ # A list of recorded users - f"<@{user_id}>" - for user_id, audio in sink.audio_data.items() - ] - await sink.vc.disconnect() # Disconnect from the voice channel. - files = [discord.File(audio.file, f"{user_id}.{sink.encoding}") for user_id, audio in sink.audio_data.items()] # List down the files. - await channel.send(f"finished recording audio for: {', '.join(recorded_users)}.", files=files) # Send a message with the accumulated files. -``` - - - - finished recording audio for:{" "} - {defaultOptions.profiles.bob.author} - - - -
- -Now that you've done this, the only thing left to do is make your stop command. - -### Making a Stop Command - -The final step to this guide is stopping the audio recording. This is the easiest step by far. - -To make it, you will want to do the following: - -```py title="Stop Recording Command" -@bot.command() -async def stop_recording(ctx): - if ctx.guild.id in connections: # Check if the guild is in the cache. - vc = connections[ctx.guild.id] - vc.stop_recording() # Stop recording, and call the callback (once_done). - del connections[ctx.guild.id] # Remove the guild from the cache. - await ctx.delete() # And delete. - else: - await ctx.respond("I am currently not recording here.") # Respond with this if we aren't recording. - -bot.run("token") -``` - -Congratulations! You have now implemented voice recording into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/ru/docusaurus-plugin-content-pagesindex.tsx b/i18n/ru/docusaurus-plugin-content-pagesindex.tsx deleted file mode 100644 index 6ca77bb2..00000000 --- a/i18n/ru/docusaurus-plugin-content-pagesindex.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import DefaultLayout from "@site/src/layouts/DefaultLayout"; -import PYCHero from "@site/src/components/PYCHero"; -import PYCButton from "@site/src/components/PYCButton"; - -export default function Home(): JSX.Element { - return ( - - -
- Imagine a place where you can learn how to create an awesome Discord - bot, equip it with Pycord, and have it running in less than a minute. - Imagine a place where you can learn everything about Pycord. Imagine a - guide. A Pycord Guide! -

- Whether you are a newbie or an experienced developer, you will find - everything you need to know about Pycord here. This guide will teach - you: -
    -
  • How to get a brand new bot running from scratch;
  • -
  • How to create Interactions, Context Menus and Commands;
  • -
  • In-depth concepts such as Embeds, Reactions, Help Commands, Paginators, etc;
  • -
  • Popular Topics such as working with Databases, Sharding, etc;
  • -
  • Ways to handle and manage common errors and best practices for bots;
  • -
  • And Much More!
  • -
-
-
- ); -} diff --git a/i18n/ru/docusaurus-theme-classic/footer.json b/i18n/ru/docusaurus-theme-classic/footer.json deleted file mode 100644 index 82aab2e0..00000000 --- a/i18n/ru/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "copyright": { - "message": "Copyright © 2022-2026 Pycord Development, All rights reserved.", - "description": "The footer copyright" - } -} diff --git a/i18n/ru/docusaurus-theme-classic/navbar.json b/i18n/ru/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 473b847e..00000000 --- a/i18n/ru/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "title": { - "message": "Pycord Guide", - "description": "The title in the navbar" - }, - "item.label.Home": { - "message": "Home", - "description": "Navbar item with label Home" - }, - "item.label.Docs": { - "message": "Docs", - "description": "Navbar item with label Docs" - }, - "item.label.GitHub": { - "message": "GitHub", - "description": "Navbar item with label GitHub" - }, - "item.label.Source": { - "message": "Source", - "description": "Navbar item with label Source" - } -} diff --git a/i18n/zh/code.json b/i18n/zh/code.json deleted file mode 100644 index 9cce6148..00000000 --- a/i18n/zh/code.json +++ /dev/null @@ -1,404 +0,0 @@ -{ - "theme.ErrorPageContent.title": { - "message": "This page crashed.", - "description": "The title of the fallback page when the page crashed" - }, - "theme.NotFound.title": { - "message": "Page Not Found", - "description": "The title of the 404 page" - }, - "theme.NotFound.p1": { - "message": "We could not find what you were looking for.", - "description": "The first paragraph of the 404 page" - }, - "theme.NotFound.p2": { - "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", - "description": "The 2nd paragraph of the 404 page" - }, - "theme.admonition.note": { - "message": "note", - "description": "The default label used for the Note admonition (:::note)" - }, - "theme.admonition.tip": { - "message": "tip", - "description": "The default label used for the Tip admonition (:::tip)" - }, - "theme.admonition.danger": { - "message": "danger", - "description": "The default label used for the Danger admonition (:::danger)" - }, - "theme.admonition.info": { - "message": "info", - "description": "The default label used for the Info admonition (:::info)" - }, - "theme.admonition.caution": { - "message": "caution", - "description": "The default label used for the Caution admonition (:::caution)" - }, - "theme.BackToTopButton.buttonAriaLabel": { - "message": "Scroll back to top", - "description": "The ARIA label for the back to top button" - }, - "theme.blog.archive.title": { - "message": "Archive", - "description": "The page & hero title of the blog archive page" - }, - "theme.blog.archive.description": { - "message": "Archive", - "description": "The page & hero description of the blog archive page" - }, - "theme.blog.paginator.navAriaLabel": { - "message": "Blog list page navigation", - "description": "The ARIA label for the blog pagination" - }, - "theme.blog.paginator.newerEntries": { - "message": "Newer Entries", - "description": "The label used to navigate to the newer blog posts page (previous page)" - }, - "theme.blog.paginator.olderEntries": { - "message": "Older Entries", - "description": "The label used to navigate to the older blog posts page (next page)" - }, - "theme.blog.post.paginator.navAriaLabel": { - "message": "Blog post page navigation", - "description": "The ARIA label for the blog posts pagination" - }, - "theme.blog.post.paginator.newerPost": { - "message": "Newer Post", - "description": "The blog post button label to navigate to the newer/previous post" - }, - "theme.blog.post.paginator.olderPost": { - "message": "Older Post", - "description": "The blog post button label to navigate to the older/next post" - }, - "theme.blog.post.plurals": { - "message": "One post|{count} posts", - "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.blog.tagTitle": { - "message": "{nPosts} tagged with \"{tagName}\"", - "description": "The title of the page for a blog tag" - }, - "theme.tags.tagsPageLink": { - "message": "View All Tags", - "description": "The label of the link targeting the tag list page" - }, - "theme.colorToggle.ariaLabel": { - "message": "Switch between dark and light mode (currently {mode})", - "description": "The ARIA label for the navbar color mode toggle" - }, - "theme.colorToggle.ariaLabel.mode.dark": { - "message": "dark mode", - "description": "The name for the dark color mode" - }, - "theme.colorToggle.ariaLabel.mode.light": { - "message": "light mode", - "description": "The name for the light color mode" - }, - "theme.docs.breadcrumbs.navAriaLabel": { - "message": "Breadcrumbs", - "description": "The ARIA label for the breadcrumbs" - }, - "theme.docs.DocCard.categoryDescription": { - "message": "{count} items", - "description": "The default description for a category card in the generated index about how many items this category includes" - }, - "theme.docs.paginator.navAriaLabel": { - "message": "Docs pages", - "description": "The ARIA label for the docs pagination" - }, - "theme.docs.paginator.previous": { - "message": "Previous", - "description": "The label used to navigate to the previous doc" - }, - "theme.docs.paginator.next": { - "message": "Next", - "description": "The label used to navigate to the next doc" - }, - "theme.docs.tagDocListPageTitle.nDocsTagged": { - "message": "One doc tagged|{count} docs tagged", - "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.tagDocListPageTitle": { - "message": "{nDocsTagged} with \"{tagName}\"", - "description": "The title of the page for a docs tag" - }, - "theme.docs.versionBadge.label": { - "message": "Version: {versionLabel}" - }, - "theme.docs.versions.unreleasedVersionLabel": { - "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", - "description": "The label used to tell the user that he's browsing an unreleased doc version" - }, - "theme.docs.versions.unmaintainedVersionLabel": { - "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", - "description": "The label used to tell the user that he's browsing an unmaintained doc version" - }, - "theme.docs.versions.latestVersionSuggestionLabel": { - "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", - "description": "The label used to tell the user to check the latest version" - }, - "theme.docs.versions.latestVersionLinkLabel": { - "message": "latest version", - "description": "The label used for the latest version suggestion link label" - }, - "theme.common.editThisPage": { - "message": "Edit this page", - "description": "The link label to edit the current page" - }, - "theme.common.headingLinkTitle": { - "message": "Direct link to {heading}", - "description": "Title for link to heading" - }, - "theme.lastUpdated.atDate": { - "message": " on {date}", - "description": "The words used to describe on which date a page has been last updated" - }, - "theme.lastUpdated.byUser": { - "message": " by {user}", - "description": "The words used to describe by who the page has been last updated" - }, - "theme.lastUpdated.lastUpdatedAtBy": { - "message": "Last updated{atDate}{byUser}", - "description": "The sentence used to display when a page has been last updated, and by who" - }, - "theme.navbar.mobileVersionsDropdown.label": { - "message": "Versions", - "description": "The label for the navbar versions dropdown on mobile view" - }, - "theme.tags.tagsListLabel": { - "message": "Tags:", - "description": "The label alongside a tag list" - }, - "theme.AnnouncementBar.closeButtonAriaLabel": { - "message": "Close", - "description": "The ARIA label for close button of announcement bar" - }, - "theme.blog.sidebar.navAriaLabel": { - "message": "Blog recent posts navigation", - "description": "The ARIA label for recent posts in the blog sidebar" - }, - "theme.CodeBlock.copied": { - "message": "Copied", - "description": "The copied button label on code blocks" - }, - "theme.CodeBlock.copyButtonAriaLabel": { - "message": "Copy code to clipboard", - "description": "The ARIA label for copy code blocks button" - }, - "theme.CodeBlock.copy": { - "message": "Copy", - "description": "The copy button label on code blocks" - }, - "theme.CodeBlock.wordWrapToggle": { - "message": "Toggle word wrap", - "description": "The title attribute for toggle word wrapping button of code block lines" - }, - "theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel": { - "message": "Toggle the collapsible sidebar category '{label}'", - "description": "The ARIA label to toggle the collapsible sidebar category" - }, - "theme.NavBar.navAriaLabel": { - "message": "Main", - "description": "The ARIA label for the main navigation" - }, - "theme.navbar.mobileLanguageDropdown.label": { - "message": "Languages", - "description": "The label for the mobile language switcher dropdown" - }, - "theme.TOCCollapsible.toggleButtonLabel": { - "message": "On this page", - "description": "The label used by the button on the collapsible TOC component" - }, - "theme.blog.post.readMore": { - "message": "Read More", - "description": "The label used in blog post item excerpts to link to full blog posts" - }, - "theme.blog.post.readMoreLabel": { - "message": "Read more about {title}", - "description": "The ARIA label for the link to full blog posts from excerpts" - }, - "theme.blog.post.readingTime.plurals": { - "message": "One min read|{readingTime} min read", - "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.docs.breadcrumbs.home": { - "message": "Home page", - "description": "The ARIA label for the home page in the breadcrumbs" - }, - "theme.docs.sidebar.navAriaLabel": { - "message": "Docs sidebar", - "description": "The ARIA label for the sidebar navigation" - }, - "theme.docs.sidebar.closeSidebarButtonAriaLabel": { - "message": "Close navigation bar", - "description": "The ARIA label for close button of mobile sidebar" - }, - "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { - "message": "← Back to main menu", - "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" - }, - "theme.docs.sidebar.collapseButtonTitle": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.collapseButtonAriaLabel": { - "message": "Collapse sidebar", - "description": "The title attribute for collapse button of doc sidebar" - }, - "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { - "message": "Toggle navigation bar", - "description": "The ARIA label for hamburger menu button of mobile navigation" - }, - "theme.docs.sidebar.expandButtonTitle": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.docs.sidebar.expandButtonAriaLabel": { - "message": "Expand sidebar", - "description": "The ARIA label and title attribute for expand button of doc sidebar" - }, - "theme.SearchBar.seeAll": { - "message": "See all {count} results" - }, - "theme.SearchPage.documentsFound.plurals": { - "message": "One document found|{count} documents found", - "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" - }, - "theme.SearchPage.existingResultsTitle": { - "message": "Search results for \"{query}\"", - "description": "The search page title for non-empty query" - }, - "theme.SearchPage.emptyResultsTitle": { - "message": "Search the documentation", - "description": "The search page title for empty query" - }, - "theme.SearchPage.inputPlaceholder": { - "message": "Type your search here", - "description": "The placeholder for search page input" - }, - "theme.SearchPage.inputLabel": { - "message": "Search", - "description": "The ARIA label for search page input" - }, - "theme.SearchPage.algoliaLabel": { - "message": "Search by Algolia", - "description": "The ARIA label for Algolia mention" - }, - "theme.SearchPage.noResultsText": { - "message": "No results were found", - "description": "The paragraph for empty search result" - }, - "theme.SearchPage.fetchingNewResults": { - "message": "Fetching new results...", - "description": "The paragraph for fetching new search results" - }, - "theme.SearchBar.label": { - "message": "Search", - "description": "The ARIA label and placeholder for search button" - }, - "theme.SearchModal.searchBox.resetButtonTitle": { - "message": "Clear the query", - "description": "The label and ARIA label for search box reset button" - }, - "theme.SearchModal.searchBox.cancelButtonText": { - "message": "Cancel", - "description": "The label and ARIA label for search box cancel button" - }, - "theme.SearchModal.startScreen.recentSearchesTitle": { - "message": "Recent", - "description": "The title for recent searches" - }, - "theme.SearchModal.startScreen.noRecentSearchesText": { - "message": "No recent searches", - "description": "The text when no recent searches" - }, - "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { - "message": "Save this search", - "description": "The label for save recent search button" - }, - "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { - "message": "Remove this search from history", - "description": "The label for remove recent search button" - }, - "theme.SearchModal.startScreen.favoriteSearchesTitle": { - "message": "Favorite", - "description": "The title for favorite searches" - }, - "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { - "message": "Remove this search from favorites", - "description": "The label for remove favorite search button" - }, - "theme.SearchModal.errorScreen.titleText": { - "message": "Unable to fetch results", - "description": "The title for error screen of search modal" - }, - "theme.SearchModal.errorScreen.helpText": { - "message": "You might want to check your network connection.", - "description": "The help text for error screen of search modal" - }, - "theme.SearchModal.footer.selectText": { - "message": "to select", - "description": "The explanatory text of the action for the enter key" - }, - "theme.SearchModal.footer.selectKeyAriaLabel": { - "message": "Enter key", - "description": "The ARIA label for the Enter key button that makes the selection" - }, - "theme.SearchModal.footer.navigateText": { - "message": "to navigate", - "description": "The explanatory text of the action for the Arrow up and Arrow down key" - }, - "theme.SearchModal.footer.navigateUpKeyAriaLabel": { - "message": "Arrow up", - "description": "The ARIA label for the Arrow up key button that makes the navigation" - }, - "theme.SearchModal.footer.navigateDownKeyAriaLabel": { - "message": "Arrow down", - "description": "The ARIA label for the Arrow down key button that makes the navigation" - }, - "theme.SearchModal.footer.closeText": { - "message": "to close", - "description": "The explanatory text of the action for Escape key" - }, - "theme.SearchModal.footer.closeKeyAriaLabel": { - "message": "Escape key", - "description": "The ARIA label for the Escape key button that close the modal" - }, - "theme.SearchModal.footer.searchByText": { - "message": "Search by", - "description": "The text explain that the search is making by Algolia" - }, - "theme.SearchModal.noResultsScreen.noResultsText": { - "message": "No results for", - "description": "The text explains that there are no results for the following search" - }, - "theme.SearchModal.noResultsScreen.suggestedQueryText": { - "message": "Try searching for", - "description": "The text for the suggested query when no results are found for the following search" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsText": { - "message": "Believe this query should return results?", - "description": "The text for the question where the user thinks there are missing results" - }, - "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { - "message": "Let us know.", - "description": "The text for the link to report missing results" - }, - "theme.SearchModal.placeholder": { - "message": "Search docs", - "description": "The placeholder of the input of the DocSearch pop-up modal" - }, - "theme.ErrorPageContent.tryAgain": { - "message": "Try again", - "description": "The label of the button to try again rendering when the React error boundary captures an error" - }, - "theme.common.skipToMainContent": { - "message": "Skip to main content", - "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" - }, - "theme.tags.tagsPageTitle": { - "message": "Tags", - "description": "The title of the tag list page" - } -} diff --git a/i18n/zh/docusaurus-plugin-content-blog/options.json b/i18n/zh/docusaurus-plugin-content-blog/options.json deleted file mode 100644 index 9239ff70..00000000 --- a/i18n/zh/docusaurus-plugin-content-blog/options.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": { - "message": "Blog", - "description": "The title for the blog used in SEO" - }, - "description": { - "message": "Blog", - "description": "The description for the blog used in SEO" - }, - "sidebar.title": { - "message": "Recent posts", - "description": "The label for the left sidebar" - } -} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current.json b/i18n/zh/docusaurus-plugin-content-docs/current.json deleted file mode 100644 index 36b4849a..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "version.label": { - "message": "Next", - "description": "The label for version current" - }, - "sidebar.defaultSidebar.category.Getting Started": { - "message": "Getting Started", - "description": "The label for category Getting Started in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Interactions": { - "message": "Interactions", - "description": "The label for category Interactions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Application Commands": { - "message": "Application Commands", - "description": "The label for category Application Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.UI Components": { - "message": "UI Components", - "description": "The label for category UI Components in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Extensions": { - "message": "Extensions", - "description": "The label for category Extensions in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Commands": { - "message": "Commands", - "description": "The label for category Commands in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Pages": { - "message": "Pages", - "description": "The label for category Pages in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Voice": { - "message": "Voice", - "description": "The label for category Voice in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.Popular Topics": { - "message": "Popular Topics", - "description": "The label for category Popular Topics in sidebar defaultSidebar" - }, - "sidebar.defaultSidebar.category.More": { - "message": "More", - "description": "The label for category More in sidebar defaultSidebar" - } -} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png b/i18n/zh/docusaurus-plugin-content-docs/current/assets/interactions/button-styles.png deleted file mode 100644 index 7480e1da90a413f8dfe8e13b66a9a2a8c5dc2bb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40520 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 CfS#QI diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg b/i18n/zh/docusaurus-plugin-content-docs/current/assets/interactions/groups-and-subcommands.jpg deleted file mode 100644 index ce6b5110ab3b4285f55402fb88c1b8a8f6ba9900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78518 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 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png b/i18n/zh/docusaurus-plugin-content-docs/current/assets/interactions/select-menus-example.png deleted file mode 100644 index 32a47d0424f1ab420ca363682a12460aff040c91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39618 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 aeS&BlM7jQ%=K2BnBlKRJKmVP^m;VLX8_o0p diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/extensions/_category_.json deleted file mode 100644 index 309b494a..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 5, - "label": "Extensions", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json deleted file mode 100644 index 652aa4ee..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/bridge/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Bridge" -} \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx deleted file mode 100644 index 451775d3..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/bridge/index.mdx +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Bridge ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -## Concept - -Let's say that you want to make a command that is both a Slash Command and a Prefixed Command. Now, you could just copy and paste the code from the first command callback to the other and make some adjustments, but that's not very efficient. - -This is where the `ext.bridge` module comes in. It allows you to use one callback to make both a Slash Command and a Prefixed Command. - -### Example Usage - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def hello(ctx): - await ctx.respond("Hello!") - -bot.run("TOKEN") -``` - - - -

- - hello - -
- Hello! - - - - !hello - - - -
- - !hello - -
- Hello! -
- - -## Syntax - -First, instead of using `discord.Bot` or `commands.Bot`, we use `bridge.Bot`. `bridge.Bot` does inherit from `commands.Bot`, so you can do anything with `bridge.Bot` that `commands.Bot` can do. -Then, we define a command with `@bot.bridge_command()`. This makes a Bridge Command, which has both a Prefixed Command counterpart and a Slash Command counterpart. -Next, the callback has access to a `ctx` object, which is the context of the command. This context is either of `BridgeApplicationContext` type or `BridgeExtContext`. Because of that, it makes detecting how the function was called easier. - -### Using Bridge Commands in a Cog - -Like Slash Commands and Prefixed Commands, you can use Bridge Commands in a Cog. You can do this by using the `bridge_command` decorator. Here's an example: - -```python -import discord -from discord.ext import bridge, commands - -class Greetings(commands.Cog): - def __init__(self, bot): - self.bot = bot - - @bridge.bridge_command() - async def hello(self, ctx): - await ctx.respond("Hello!") - - @bridge.bridge_command() - async def bye(self, ctx): - await ctx.respond("Bye!") - -def setup(bot): - bot.add_cog(Greetings(bot)) -``` - -The cog will automatically split the Bridge Command into their Slash Command and Prefixed Command counterparts. - - - -
- - hello - -
- Hello! -
- - - !hello - - - -
- - !hello - -
- Hello! -
- - -
- - bye - -
- Bye! -
- - - !bye - - - -
- - !bye - -
- Bye! -
-
- -### Deferring - -You can defer if you want to communicate to the user that your bot is busy processing the command. This is done by using `ctx.defer()`. For the Slash Command implementation, `ctx.defer()` calls the function that gives out a "Bot is thinking" message. For the Prefixed Command implementation, `ctx.defer()` enables the typing indicator. - - - -### Options - -Options are pretty straightforward. You just specify them like you do with prefixed commands, and you're all set! - -```python -import discord -from discord.ext import bridge - -intents = discord.Intents() -intents.message_content = True - -bot = bridge.Bot(command_prefix="!", intents=intents) - -@bot.bridge_command() -async def sum(ctx, a: int, b: int): - await ctx.respond(a + b) - -bot.run("TOKEN") -``` - - - -
- - sum - -
- 4 -
- - - !sum 2 2 - - - -
- - !sum 2 2 - -
- 4 -
-
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json deleted file mode 100644 index 63f8e08e..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx deleted file mode 100644 index bf345c07..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/groups.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Command Groups ---- - -Command groups are a way to create subcommands for your commands. For example, `!afk set` or `!afk -remove`. - -## Syntax - -Creating a command group is very simple. - -```python title="Command Groups Example" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!') - -@bot.group() -async def afk(): - pass - -@afk.command() -async def set(): - ... - -@afk.command() -async def remove(): - ... - -# Another command group - -@bot.group(invoke_without_command=True) # Indicates if the group callback should begin parsing and invocation only if no subcommand was found. -async def math(ctx): - await ctx.send('Subcommand not found') - -@math.command() -async def add(ctx, a: int, b: int): - ... - -@math.command() -async def subtract(ctx, a: int, b: int): - ... -``` - -To create a command group, the command's decorator must be `@bot.group`. Once you have a command with -that decorator, you can use `@function.command()`, such as `@math.command()`. Now, you have subcommand -groups! - - - -:::info Related Topics - -- [Prefixed Commands](./prefixed-commands.mdx) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx deleted file mode 100644 index e84fd42d..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/help-command.mdx +++ /dev/null @@ -1,481 +0,0 @@ ---- -title: Help Command ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Pycord's `commands` extension comes with a built-in help command. In this guide, we will take a look at them as well as learn how to create your own. Let's dive in! - -:::note - -This guide demonstrates using object-oriented programming and subclassing to make a help command for your -Pycord bot. It is important to understand these two concepts before continuing. - -**Learning Resources**: - -- [W3Schools - Python Subclassing](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools - Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -::: - -## The Wrong Way - -A popular way to create a help command is to disable the built-in help command and create your own. This is not recommended as it will lead to a lot of confusion. - -```python title="The Wrong Way" -bot = commands.Bot(command_prefix='!', help_command=None) -# OR -bot.help_command = None -# OR -bot.remove_command("help") - -@bot.command() -async def help(ctx, *, argument=None): - ... -``` - -While it's possible to create a help command this way, doing so does not utilize the full capabilities -of making one with Pycord. Making a help command with subclassing and OOP will save time and effort. - -## Types of Help Commands - -There are two types of built-in help commands: - -- [`DefaultHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.DefaultHelpCommand) -- [`MinimalHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.MinimalHelpCommand) - -`DefaultHelpCommand` is the command enabled by default. It isn't the best looking, but `MinimalHelpCommand` can help make it look a bit better. - - - - -```python title="Default Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.DefaultHelpCommand()) # help_command is DefaultHelpCommand by default so it isn't necessary to enable it like this -# We enable it here for the sake of understanding - -... - -bot.run("token") -``` - - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- - -```python title="Minimal Help Command" -import discord -from discord.ext import commands - -bot = commands.Bot(command_prefix='!', help_command=commands.MinimalHelpCommand()) - -... - -bot.run("token") -``` - - - - !help - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
- -
- -
- -## Updating Built-in Help Commands - -Let's try to make the `MinimalHelpCommand` look better. We can do this by putting its content in an -embed. - -```python title="Minimal Help Command Example" -bot = commands.Bot(command_prefix='!') - - -class MyNewHelp(commands.MinimalHelpCommand): - async def send_pages(self): - destination = self.get_destination() - for page in self.paginator.pages: - emby = discord.Embed(description=page) - await destination.send(embed=emby) - -bot.help_command = MyNewHelp() -``` - -Let's go through the code. - -First, we create a new class called `MyNewHelp`. This class is a subclass of `MinimalHelpCommand`. - -Next, we override the `send_pages` method. This method is responsible for sending the help command to -the user. We override this method because we don't want to change the content of the pages, just how -they are sent. - -We use the `get_destination` method to get the destination of the message. This is the channel or use that the help -command is to be sent to. - -We use the `paginator.pages` property to get the different pages of the help command. We put the page -in an embed, and then send the embed to the destination channel. - -Finally, we set this as our new help command using `bot.help_command = MyNewHelp()`. - - - - - Use !help \[command] for more info on a command. -
- You can also use !help \[category] for more info on a - category. -
-
- - {" "} - No Category{" "} - -
- help ping -
-
-
- -## Creating Your Help Command - -Not satisfied with the built-in help commands? You can create your own! - -For this, we will subclass the `HelpCommand` class. - -There are 4 methods that we need to override: - -- `HelpCommand.send_bot_help(mapping)` that gets called with `help` -- `HelpCommand.send_command_help(command)` that gets called with `help ` -- `HelpCommand.send_group_help(group)` that gets called with `help ` -- `HelpCommand.send_cog_help(cog)` that gets called with `help ` - -### Bot Help - -```python title="Bot Help Example" -class MyHelp(commands.HelpCommand): - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help") - for cog, commands in mapping.items(): - command_signatures = [self.get_command_signature(c) for c in commands] - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's go through the code. - -- First, we create a new class called `MyHelp`. This class is a subclass of `HelpCommand`. - -- Next, we override the `send_bot_help` method. This method is responsible for sending the main help - command to the user. - -- We create an embed with the title "Help". - -- We iterate through `mapping.items()`, which returns a list of tuples, the first element being the - cog and the second element being a list of commands. - -- By using `self.get_command_signature(c)` we get the signature of the command, also known as the - `parameters` or `arguments`. - -- There is a chance that the cog is empty, so we use `if command_signatures:`. - -- We get the name of the cog using `getattr(cog, "qualified_name", "No Category")`. This calls the - cog's attribute `qualified_name` which returns "No Category" if the cog has no name. - -- We add a field to the embed with the name of the cog and the value of the command signatures. - -- Finally, we send the embed to the channel. - -Let's improve the code a little. - -```python title="Improved Bot Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - command_signatures = [self.get_command_signature(c) for c in filtered] - - if command_signatures: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Now the help command won't show commands that the user can't use, as well as aliases for commands. -Let's get the help command to show command aliases. - -### Command Help - -This function is called when the user uses `help `. - -```python title="Command Help Example" -class MyHelp(commands.HelpCommand): - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command), color=discord.Color.random()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - -bot.help_command = MyHelp() -``` - -Let's quickly go through the code we haven't discussed yet. - -- In line 3, we create an embed with a title the signature of the command (so that the title of the - embed looks like ` [parameter]`), and a random color. - -- In lines 4 and 5, we get the command's `help` description and add it to the embed. The help description - of a command can be specified in the docstrings of a command function. For example: - - ```` - ```python - @bot.command() - async def ping(ctx): - """Returns the latency of the bot.""" - await ctx.send(f"Pong! {round(bot.latency * 1000)}ms") - ``` - ```` - -- Line 6 is shorthand for - - ```python - alias = command.aliases - if alias: - ... - - # is the same as - - if alias := command.aliases: - ... - ``` - - A very helpful (but not well-known) Python shorthand! - -- In line 7, we get the aliases of the command and add them to the embed. - -### Cog Help - -This is pretty easy! - -```python title="Custom Cog Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_cog_help(self, cog): - embed = discord.Embed(title=cog.qualified_name or "No Category", description=cog.description, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(cog.get_commands()): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Once again, we create an embed, get the commands that the user can use, and add them to the embed. - -### Group Help - -Similar to the cog help, this is pretty easy! - -```python title = "Custom Group Help Example" -class MyHelp(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_group_help(self, group): - embed = discord.Embed(title=self.get_command_signature(group), description=group.help, color=discord.Color.blurple()) - - if filtered_commands := await self.filter_commands(group.commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No Help Message Found... ") - - await self.get_destination().send(embed=embed) -``` - -Add all of these methods together, and you have a fully functioning help command! - -
-Click to see the final code for this section -
- -:::note - -The following code has been slightly edited from the tutorial version. - -::: - -```python title="Custom Help Command Example" -class SupremeHelpCommand(commands.HelpCommand): - def get_command_signature(self, command): - return '%s%s %s' % (self.context.clean_prefix, command.qualified_name, command.signature) - - async def send_bot_help(self, mapping): - embed = discord.Embed(title="Help", color=discord.Color.blurple()) - for cog, commands in mapping.items(): - filtered = await self.filter_commands(commands, sort=True) - if command_signatures := [ - self.get_command_signature(c) for c in filtered - ]: - cog_name = getattr(cog, "qualified_name", "No Category") - embed.add_field(name=cog_name, value="\n".join(command_signatures), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_command_help(self, command): - embed = discord.Embed(title=self.get_command_signature(command) , color=discord.Color.blurple()) - if command.help: - embed.description = command.help - if alias := command.aliases: - embed.add_field(name="Aliases", value=", ".join(alias), inline=False) - - channel = self.get_destination() - await channel.send(embed=embed) - - async def send_help_embed(self, title, description, commands): # a helper function to add commands to an embed - embed = discord.Embed(title=title, description=description or "No help found...") - - if filtered_commands := await self.filter_commands(commands): - for command in filtered_commands: - embed.add_field(name=self.get_command_signature(command), value=command.help or "No help found...") - - await self.get_destination().send(embed=embed) - - async def send_group_help(self, group): - title = self.get_command_signature(group) - await self.send_help_embed(title, group.help, group.commands) - - async def send_cog_help(self, cog): - title = cog.qualified_name or "No" - await self.send_help_embed(f'{title} Category', cog.description, cog.get_commands()) - -bot.help_command = SupremeHelpCommand() -``` - -
-
- -## Command Attributes - -How can you add cooldowns, set aliases, and change the name of help commands? Command attributes can -help you do all of that, and more! - -```python title="Help Command Attributes" -attributes = { - 'name': "help", - 'aliases': ["helpme"], - 'cooldown': commands.CooldownMapping.from_cooldown(3, 5, commands.BucketType.user), -} - -# You need to use CooldownMapping.from_cooldown(rate, per, type) - -bot.help_command = MyHelp(command_attrs=attributes) -``` - -## Error Handling - -When a user attempts to use a command that does not exist, we need to inform the user. -We can do this by overriding the `send_error_message` function. - -```python title="Custom Help Error Example" -class MyHelp(commands.HelpCommand): - async def send_error_message(self, error): - embed = discord.Embed(title="Error", description=error, color=discord.Color.red()) - channel = self.get_destination() - - await channel.send(embed=embed) -``` - - - - !help update_pycord - - - - Command 'update_pycord' not found. - - - - -## Credits - -Most of the content from this guide is from -[InterStella0's walkthrough guide on subclassing HelpCommand](https://gist.github.com/InterStella0/b78488fb28cadf279dfd3164b9f0cf96). -Thanks to InterStella0 for making this guide amazing. - -:::info Related Topics - -- [Subclassing Bots](../../Popular-Topics/subclassing-bots) -- [Prefixed Commands](./prefixed-commands) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx deleted file mode 100644 index 87bef7ac..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/commands/prefixed-commands.mdx +++ /dev/null @@ -1,324 +0,0 @@ ---- -title: Prefixed Commands -description: Learn how to use the commands extension for Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Before Discord added slash commands, all bots had prefixed commands. A user would type the bot's prefix -followed by a word or phrase to invoke a command, such as `?help` or `!help`. -However, this prefixed commands system isn't native to Discord! Developers made use of an `on_message` -event to check if the message began with a certain character, then invoke the command. Every time a -message was sent, the bot would see the message and check for its "prefix" - -The syntax becomes a little more complicated when you want to have multiple commands. There are several -disadvantages to this system. This is where the commands extension comes in. `ext.commands` has -various advantages, such as: - -- Simpler syntax -- Easier to use -- Easier to parse user input -- Comes with built-in help commands -- Comes with a built-in system for categorizing commands - - - - -```python title="Prefixed Commands with Events" -import discord - -client = discord.Client() - -@client.event -async def on_message(message): - if message.content.startswith("!ping"): - await message.channel.send("Pong!") - - elif message.content.startswith("!announce"): - if len(message.content.split(" ")) < 3: - await message.channel.send("You need to specify a title and a message. Correct usage: `!announce Hello Hello everyone!`") - return - - msg = message.content.split(" ", 2) - title = msg[1] - content = msg[2] - - await message.channel.send("**{}**\n{}".format(title, content)) - - elif message.content.startswith("!"): - await message.channel.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !help - - - Unknown Command. - -
- -
- - -```python title="The Commands Extension" -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix="!", intents=intents) - -@bot.command() -async def ping(ctx): - await ctx.send("Pong!") - -@bot.command() -async def announce(ctx, title, *, message): - await ctx.send("**{}**\n{}".format(title, message)) - -@bot.event -async def on_command_error(ctx, error): - if isinstance(error, commands.CommandNotFound): - await ctx.send("Unknown command.") -``` - - - - !ping - - - Pong! - - - !announce Hello Hello World! - - - Hello -
- Hello World! -
- - !pycord - - - Unknown command. - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
- !announce -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The commands extension has many more uses. This example only showcases the basic features mentioned -in the previous example. Other things you can do with the commands extension include using a different -built-in help command and creating your own. The following tutorials showcase these. - -::: - -
-
- -## Syntax - -Before we check out the syntax, let's take a look at the bot classes. - -> `discord.Client` - Contains only events. -> -> `discord.Bot` - Subclasses `discord.Client`, adds commands. -> -> `discord.ext.commands.Bot` - Subclasses `discord.Bot`, adds prefixed commands, cogs, and more. - -This means that `discord.ext.commands.Bot` has both slash commands and prefixed commands, as well as -events, cogs and more. - -Now let's look at the syntax. - -```python title="A Simple Prefixed Bot" -import discord -from discord.ext import commands # Import the commands extension -# discord.ext.commands are not the same as discord.commands! - -intents = discord.Intents.default() #Defining intents -intents.message_content = True # Adding the message_content intent so that the bot can read user messages - -bot = commands.Bot(command_prefix="!", intents=intents) # You can change the command prefix to whatever you want. - -@bot.command() # This is the decorator we use to create a prefixed command. -async def ping(ctx): # This is the function we will use to create the command. - await ctx.send("Pong!") # This is the response the bot will send. - - -bot.run("token") # Run the bot with your token. -``` - - - - !ping - - - Pong! - - - !help - - - - No Category: -
-
- !help Shows this message -
- !ping -
-
- Type !help command for more info on a command. -
- You can also type !help category for more info on a category. -
-
-
- -
- -:::tip - -The help command is a built-in command and is enabled by default. You will learn more about it in the -following guides. - -::: - -## Parameters - -Prefixed commands can take parameters, just like slash commands. You can specify the parameters in -the function itself. - -```python title="Parameters Example 1" -@bot.command() -async def echo(ctx, *, message): - await ctx.send(message) -``` - -`ctx` is the context of the message. `*` means that the parameter can be any number of words. `message` -is the parameter. If you had not passed `*`, `message` would only have been one word. - -For example, if a user had used `!echo hello world`, `message` would have been `hello`. Since we -passed `*`, `message` is `hello world`, or the rest of the message. - -We can pass multiple parameters too! - -```python title="Parameters Example 2" -@bot.command() -async def echo(ctx, channel:discord.TextChannel, title, *, message): - await channel.send("**{}**\n{}".format(title, message)) -``` - -In the example above, `channel` is a parameter that is of type `discord.TextChannel`. When you -specify the type of the parameter, Pycord will automatically try to convert the parameter to that type. -That is why you can use `channel.send` directly without needing to convert it first. - -We also have a new parameter, `title`. This does not have a type, so it will be a string. `*` means -that the rest of the message belongs to the next parameter, in this case, `message`. - -When a user types `!echo #general Greetings! Hello World!`, `channel` will be the text channel -`#general`, `title` will be `Greetings!` and `message` will be `Hello World!`. - -Let's take an example where the user passes `!echo #general Holiday Greetings! Greetings to you all!`. -Here, the user wants the title to be "Holiday Greetings!" and the message to be "Greetings to you all!". -However, since Pycord parses the message at whitespaces, the title will end up being "Holiday" and the -message "Greetings! Greetings to you all!". The user can prevent this by typing `!echo "Holiday -Greetings!" Greetings to you all!`. - - - - - - !echo #general Holiday Greetings! Greetings to you all! - - - Holiday -
- Greetings! Greetings to you all! -
- - !echo #general "Holiday Greetings!" Greetings to you all! - - - Holiday Greetings! -
- Greetings to you all! -
-
- -Let's check out another example for parameters and parameter types. - -```python title="Parameters Example 3" -import random - -@bot.command() -async def gtn(ctx, guess:int): - number = random.randint(1, 10) - if guess == number: - await ctx.send("You guessed it!") - else: - await ctx.send("Nope! Better luck next time :)") -``` - -If you had not specified the type of the parameter, it would have been a string. And since `"5"` is not -the same as `5` in python, the bot would have responded with "Nope! Better luck next time :)". -Even if you do not specify the type of the parameter, you can still convert it later on, in this case, -with `int(guess)`. - -:::info Related Topics - -- [Command Groups](groups) -- [Rules and Common Practices](../../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json deleted file mode 100644 index baeba701..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/pages/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Pages", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx deleted file mode 100644 index be90b035..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/pages/paginator-basics.mdx +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Paginator Basics ---- - -# Paginator Basics - -## [Page](https://docs.pycord.dev/en/stable/ext/pages/index.html#page) - -This class contains two attributes: `content` and `embeds`, which correspond to the attributes of the same name on the -`discord.Message` class. -To create a new Page, use the following syntax: - -```py -import discord -page = Page(content="My Page Content", embeds=[discord.Embed(title="My First Embed Title")]) -``` - -## [PageGroup](https://docs.pycord.dev/en/stable/ext/pages/index.html#pagegroup) - -This class represents a group of pages. It uses most of the same parameters as `Paginator`, which allows each -`PageGroup` to effectively have its own settings and behaviours. - -## [Paginator](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator) - -This is the main class for `ext.pages`, and is used to control most of the functionality of the extension. - -In its most basic form, with no arguments provided (default values listed below), a paginator can be created like so: - -```py title="Paginator Example" -import discord -from discord.ext.pages import Paginator, Page - -my_pages = [ - Page( - content="This is my first page. It has a list of embeds and message content.", - embeds=[ - discord.Embed(title="My First Embed Title"), - discord.Embed(title="My Second Embed Title"), - ], - ), - Page( - content="This is my second page. It only has message content.", - ), - Page( - embeds=[ - discord.Embed( - title="This is my third page.", - description="It has no message content, and one embed.", - ) - ], - ), -] -paginator = Paginator(pages=my_pages) -``` - -The only required parameter for `Paginator` is the `pages` parameter, which is usually a list of `Page` objects. - -You can also pass in a list of `PageGroup` objects, a list of strings, a list of embeds, or a list of lists of embeds. - -Once the `Paginator` instance is created, you can call either -[`Paginator.send()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.send) -or [`Paginator.respond()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.respond) -to send a message or response with the paginator's contents. - -#### Depending on what's being passed to the `pages` parameter, the behaviour of the paginator may differ: - -- Passing a list of `PageGroup` objects will essentially treat each `PageGroup` as its own Paginator, with most - `Paginator` attributes able to be set independently for each `PageGroup`. - \- Each `PageGroup` accepts its own `pages` parameter, which inherits the same behaviour as the `pages` parameter - of `Paginator`, except it cannot contain other `PageGroup` objects. -- If a page is a `Page` object, this will allow you to specify both the `discord.Message.content` and - `discord.Message.embeds` attributes for a page. - \- **This is the preferred method of defining a page.** -- If a page is a string, this will be used for the `discord.Message.content` attribute. This type of page cannot have - any embeds. -- If a page is a list of embeds, this will be used for the `discord.Message.embeds` attribute. This type of page - cannot have any message content. -- If a page is a list of lists of embeds, each parent list item will create a page containing all embeds from its - child list. This type of page cannot have any message content. - -#### Parameters for the `Paginator` class which have default values: - -- `show_disabled` **:** `True` - - Show buttons that are disabled (i.e. can't be clicked) -- `author_check` **:** `True` - - Only the author can interact with the paginator. -- `timeout` **:** `180` _(seconds)_ - - The paginator will time out and become inactive after this many seconds. -- `disable_on_timeout` **:** `True` - - If the paginator times out, it will be automatically disabled and all buttons will be unusable. -- `use_default_buttons` **:** `True` - - Use the default set of 4 buttons and a page indicator. -- `show_indicator` **:** `True` - - When using the default buttons, shows a middle 5th button with the current/total page numbers. - -**For other parameters that can be set on initialization, please check the -[API Reference](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator)** - -## [PaginatorButton](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatorbutton) - -This class represents a button used to navigate between the pages of a paginator. It's also used to create the page -indicator. - -When creating your own custom buttons, you can either use this class directly or subclass it to add any additional -functionality you may need. - -To add custom buttons to the paginator instead of the default navigation buttons, you have two options to do so: - -1. **Using the `custom_buttons` parameter of `Paginator`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - buttons = [ - PaginatorButton("first", label="<<-", style=discord.ButtonStyle.green), - PaginatorButton("prev", label="<-", style=discord.ButtonStyle.green), - PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True), - PaginatorButton("next", label="->", style=discord.ButtonStyle.green), - PaginatorButton("last", label="->>", style=discord.ButtonStyle.green), - ] - paginator = Paginator( - pages=["Page 1", "Page 2", "Page 3"], - show_indicator=True, - use_default_buttons=False, - custom_buttons=buttons, - ) - ``` -2. **Using `Paginator.add_button()`:** - - ```py - import discord - from discord.ext.pages import PaginatorButton, Paginator - - paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"], use_default_buttons=False) - paginator.add_button(PaginatorButton("prev", label="<", style=discord.ButtonStyle.green)) - paginator.add_button(PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True)) - paginator.add_button(PaginatorButton("next", label=">", style=discord.ButtonStyle.green)) - ``` - -If you want to use the default navigation buttons, but not all of them, you can also use `Paginator.remove_button()` to -selectively remove them: - -```py -from discord.ext.pages import Paginator - -paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"]) -paginator.remove_button("first") -paginator.remove_button("last") -``` - -## [PaginatorMenu](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatormenu) - -This class represents the `discord.Select` menu used to navigate between `PageGroup` instances. In most situations, you -will not need to interact with this class directly. - -If you do subclass it, you'll likely want to call `super()` in your `__init__` method to ensure that the `PageGroup` -navigation functionality is retained. - -## Usage Examples - -For a comprehensive list of examples showing all `Paginator` functionality, please see the -[example in cog form](https://github.com/Pycord-Development/pycord/blob/master/examples/views/paginator.py) in the repo. - -## Support and Feedback - -If you have any questions, suggestions, or feedback for `ext.pages`, please join the -[Discord server](https://discord.gg/pycord). diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx deleted file mode 100644 index b8d68925..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/pages/paginator-faq.mdx +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Paginator FAQ ---- - -# Paginator FAQ - -- **What's the difference between `Paginator.send()` and `Paginator.respond()`?** - - `Paginator.send()` is used to send a channel message (DMChannel or TextChannel) with the paginator. - - `Paginator.respond()` is used to send an interaction response (or followup) message with the paginator. - -- **How can the bot send a paginator to a different destination than where it was invoked?** - - Use the `target` parameter in `Paginator.send()` or `Paginator.respond()`. - - You can also set the `target_message` parameter to control what's shown as a response where the paginator was originally invoked. - - For `Paginator.respond()`, this parameter is required if `target` is set, as an interaction requires being responded to. - -- **How can I change the paginator's behavior without re-creating and re-sending it?** - - Use the `Paginator.update()` method. - -- **How can I make the bot actually do something with the contents of a page?** - - Use the (upcoming) `Paginator.page_action()` method. diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json deleted file mode 100644 index 36dfb009..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/tasks/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Tasks" -} \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx deleted file mode 100644 index 848f6066..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/extensions/tasks/tasks.mdx +++ /dev/null @@ -1,216 +0,0 @@ ---- -title: Tasks ---- - -## Concept - -So you want to run a background task running at some specified interval? Thankfully, that's a common thing to do, whether you're working with some API or handling some background logic don't worry, the Pycord tasks extension is here to make life easier for you! - -With the tasks extension, you can make background tasks without worrying about the asyncio hell and mind bogglers like "what if my internet dies" and "how do I handle reconnecting" with the added benefit of a lot of useful additions that are one line of code away! - -### Example Usage - -```py -import discord -from discord.ext import tasks - -bot = discord.Bot() - -@bot.event -async def on_ready(): - very_useful_task.start() - -@tasks.loop(seconds=5) -async def very_useful_task(): - print('doing very useful stuff.') - -bot.run("TOKEN") -``` - -If you do run this code in your terminal you should see something like this after about 15 seconds: - -``` -doing very useful stuff. -doing very useful stuff. -doing very useful stuff. -``` - -For a more useful example here's a task in a cog context ripped straight from the [docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#recipes): - -```py -from discord.ext import tasks, commands - -class MyCog(commands.Cog): - def __init__(self): - self.index = 0 - self.printer.start() - - def cog_unload(self): - self.printer.cancel() - - @tasks.loop(seconds=5) - async def printer(self): - print(self.index) - self.index += 1 -``` - -As you'd expect this will increment a number and print it out every 5 seconds like so: - -```sh -0 -# 5 seconds later -1 -# 5 more seconds later -2 -# ... -``` - -## [Tasks](https://docs.pycord.dev/en/stable/ext/tasks/index.html) - -Now let's get into the nitty-gritty of tasks. - -As you've seen tasks can work in both outer scope and class contexts and the handle is roughly the same, you define a task using the `tasks.loop` decorator and use the `start` method to start it, the difference is you add the `self` argument when in a class context so since most people have all their bot's code in Cogs all the following code blocks will be in a Cog context to make it easy to copy it then apply whatever modifications you might need! - -### [Creating a task](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop) - -A look at `discord.ext.tasks.loop`'s definition in the documentation reveals that: - -1. As you've seen before it expects the time between each execution, that however doesn't have to be in seconds as - there are `seconds`, `minutes` and `hours` parameters to make it easier for us, they can also be floats in case you want - ultra-precision. -2. You can also pass in a `datetime.time` object or a sequence of them in the `time` parameter which will make it run - at the specified time(s). -3. You can pass in how many times a loop runs before it stops by passing in the `count` parameter, you can use `None` - to make it run forever which is also the default. -4. The loop function **_must_** be a coroutine. - -These are all really useful, and they aren't the only parameters so if you want to know more about them check out the -[docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop)! - -### Attributes - -A task has the following attributes: - -- `current_loop`: The current loop the task is on. -- `hours`, `minutes`, `seconds`: attributes that represent the time between each execution. -- `time`: A list of datetime.time objects that represent the times the task will run, returns `None` if no datetime - objects were passed. -- `next_iteration`: A `datetime.datetime` object that represents the next time the next iteration of the task will - run, can return `None` if the task stopped running. - -These attributes serve as a really powerful asset to get info about your loop. - -### Example - -Now let's create a cog that handles a leaderboard we have in our bot using Tasks then explain what we did after that and -also provide a refresher of how slash commands groups work in cogs. - -For the sake of this example let's pretend that we have a leaderboard module that does all the leaderboard handling for -us and that computing the leaderboard is very expensive computationally wise, so we want to store one version of it that -gets regularly updated instead of generating it every time someone calls the `/leaderboard view` command. - -```py -from discord.ext import tasks, commands -from discord.commands import SlashCommandGroup, CommandPermissions - -from leaderboard import * # Mock leaderboard module. - -class LeaderboardCog(commands.Cog): - def __init__(self, bot): - self.bot = bot - self.update_leaderboard.start() - self.leaderboard_embed = generate_leaderboard_embed() - - leaderboard = SlashCommandGroup(name='leaderboard', description='Leaderboard commands.') - - @tasks.loop(minutes=10) - async def update_leaderboard(self): - print('Updating leaderboard...') - await update_leaderboard() - self.leaderboard_embed = generate_leaderboard_embed() - - @update_leaderboard.before_loop - async def before_update_leaderboard(self): - await self.bot.wait_until_ready() - print("About to start updating leaderboard.") - - @update_leaderboard.after_loop - async def after_update_leaderboard(self): - leaderboard_cleanup() - print("Stopped updating leaderboard.") - - @update_leaderboard.error - async def update_leaderboard_error(self, error): - print(f"Oh no, an error occurred while updating the leaderboard. Error: {error}") - - @leaderboard.command() - async def view(self, ctx): - await ctx.respond(embed=self.leaderboard_embed) - - @leaderboard.command() - async def update_info(self, ctx): - await ctx.respond(f"""***Leaderboard Info***\n - Last update: {(600 - self.update_leaderboard.next_iteration.timestamp())//60} minutes ago.\n - Next update: in {self.update_leaderboard.next_iteration.timestamp() // 60} minutes.\n - Time between loops: {self.update_leaderboard.minutes} minutes.\n - Times updated this session: {self.update_leaderboard.current_loop}. - Running? {self.update_leaderboard.is_running()} - Failed? {self.update_leaderboard.failed()}""", ephemeral=True) - - # Now for the owner only commands: - - leaderboard_config = SlashCommandGroup(name="leaderboard_config", description="Leaderboard configuration commands", permission=[CommandPermissions("owner", 2, True)]) - - @leaderboard_config.command() - async def set_time_between_updates(self, ctx, minutes: int): - self.update_leaderboard.change_interval(minutes=minutes) - await ctx.respond(f"Set time between updates to {minutes} minutes.") - - @leaderboard_config.command() - async def stop(self, ctx): - self.update_leaderboard.stop() - await ctx.respond("Stopped the leaderboard update.") - - @leaderboard_config.command() - async def restart(self, ctx): - self.update_leaderboard.restart() - await ctx.respond("Restarted the leaderboard update.") - -def setup(bot): - bot.add_cog(LeaderboardCog(bot)) -``` - -Phew, that was quite a bit of code. - -Now to explain what's going on: - -First things first we create a cog and in its `__init__` function we start the `update_leaderboard` task and generate -the first instance of our leaderboard's embed. - -After that, we define the `update_leaderboard` task using the `loop` decorator, and we make it run every ten minutes by -passing 10 to the `minutes` parameter. - -Then that we define the `before_update_leaderboard` task using the `before_loop` decorator, and we make it wait until the -bot is ready before starting the task. - -Next up we define the `after_update_leaderboard` task using the `after_loop` decorator, and we make it clean up the -leaderboard when the loop finally stops running. - -Then we define the `update_leaderboard_error` task using the `error` decorator, and we make it print any errors that may -occur while we update our leaderboard to the console. - -Then we get into the fun stuff, we create a slash command group using the `SlashCommandGroup` class and name it -`leaderboard`, we then create the `view` sub-command which sends the embed generated when the leaderboard is updated and -`update_info` which shows a lot of data about the task using some attributes and functions available to us. - -We also create a slash command group called `leaderboard_config` which is only available to the owner of the bot. - -Then we create the `set_time_between_updates` sub-command which takes in the time in minutes and changes the time -between updates of the leaderboard using the `change_interval` method, the `stop` sub-command which stops the task using -the `stop` method and `restart` which restarts the task using the `restart` method. - -Finally, we add the `LeaderboardCog` cog to the bot, and we're done! - -I'd highly recommend you check the tasks extension -[documentation](https://docs.pycord.dev/en/stable/ext/tasks/index.html) for more info on how to use them and what other -functions they have. diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/_category_.json deleted file mode 100644 index 9d6255f5..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 3, - "label": "Getting Started", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx deleted file mode 100644 index 7fbabf77..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/creating-your-first-bot.mdx +++ /dev/null @@ -1,262 +0,0 @@ ---- -title: Creating Your First Bot ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -Excited to create your first bot? Once you [install Pycord](../installation.mdx), you can start right -away! - -## Creating the Bot Application - -Just like how you need to sign up to use Discord, your bot also has to be signed up. To do this, -you should: - -1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click - on . -2. Give your bot a name, and click . -3. Now, you should see a page like this. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdW3OQnwUhacopqSWw%2F-Mjd_-mxrJCrzmaXrAg8%2Fimage.png?alt=media&token=b8e2ae6c-2290-4d37-ad7c-eb412f3fb00e) -4. Click on the tab on the left side of the screen. -5. Click on . -6. You can give it a name, change the Avatar, etc. - -## Inviting the bot - -Now, lets get the bot added to some servers. Go to the tab -in the left pane and select `bot` and `applications.commands` as scopes. - -You may want your bot to have application commands, which is what the `application.commands` scope -allows your bot to make. - -Next, you want to choose what permissions the bot will have and select them. For now, you can just -give your bot the `administrator` permission, which gives your bot every permission. Once you select -your bot's permissions, click on to get the bot invite link. - -:::tip - -When your bot is all ready to go, make sure that administrator permissions aren't selected unless -your bot truly needs them. Try selecting only permissions the bot will need. For testing, -Administrator permissions are fine. - -::: - -![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-Mk6tNY3LfDkjd6pqdpL%2F-Mk6tkdpddEWoa2jczZk%2Fimage.png?alt=media&token=52c8a29f-a798-48f8-a8c7-4ecca2681f79) - -You can use this link to invite the bot. - -## Tokens - -Now that you have an account for your bot, you need to log in. To log in, we need the bot's -password. All users and bots have a "token." You may think of this token as a password, as this allows -us to log our bot into Discord. - -Tokens are "snowflakes." Not actual snowflakes, though. Just like how no two snowflakes in real life have the same -pattern, snowflakes in computers are unique things - no two bots have the same token - so a token is -considered a snowflake. A Discord user ID is also a snowflake. - -Now, lets get your bot's token. To do this, you want to: - -1. Go back to the tab. -2. Click on the button in the "Token" section. - ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdbU12JISJorAZxrKH%2F-MjdbpUsapzb5n15Po5P%2Fimage.png?alt=media&token=118e259f-940a-4f6c-b3a3-c29f3a54100d) - -Now, you have your bot's token copied to your clipboard. - -:::danger - -Do not, under any circumstances, give your token to anyone. Even if you are contacted by someone -claiming to be Discord staff, do not give them your bot's token. They are lying to you to try and -gain access to your bot. If an unauthorized user gains access to your bot's token, they can access -your bot and use it in malicious ways. - -Never push your token to GitHub or include it in your code. One way to prevent your token from -getting leaked is to store it in `.env` files. - -::: - -### Protecting Tokens - -#### Using dotenv - -You can store your tokens in `.env` files. This is a simple way to store sensitive information. - -1. Create a file with the name `.env` (only the extension, with a dot/period at the start and without a name before it). -2. Define the token in the `.env` file (replace the example value with your token). - ```env title=".env" - TOKEN = NzkyNzE1NDU0MTk2MDg4ODQy.X-hvzA.Ovy4MCQywSkoMRRclStW4xAYK7I - ``` -3. Install [`python-dotenv`](https://pypi.org/project/python-dotenv/). - ```bash - python -m pip install python-dotenv - ``` -4. Load the token from the `.env` file. - ```python - import dotenv - dotenv.load_dotenv() - token = str(os.getenv("TOKEN")) - ``` -5. Pass your token as parameter when running the bot. - ```python - client.run(token) - ``` - -:::tip - -If you are using Git to track your bot's changes, you should create a file called `.gitignore` and add -`.env` to it. This stops your `.env` file from getting tracked along with the rest of your code, and -will not be pushed to a remote Git repository. As a consequence, it will stay secure on your local machine. - -::: - -## Coding the Basics - -Here's an example of code you'll write with Pycord: - -```py -import discord -import os # default module -from dotenv import load_dotenv - -load_dotenv() # load all the variables from the env file -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") - -bot.run(os.getenv('TOKEN')) # run the bot with the token -``` - - - -
- - hello - -
- Hey! -
-
-
- -Let's go through the code. First, the imports. - -```py -import discord -import os -from dotenv import load_dotenv -``` - -In the first line, `import discord`, we import Pycord. Although you install Pycord with `pip install py-cord`, you -import it with `import discord`. This is so it's as easy as possible when switching from Discord.py to Pycord. - -We then import `os` and `dotenv`. `os` is a default module that we will use to get the token from the env file. `dotenv` -is a module that we will use to load the env file. You installed this with `pip install python-dotenv`. - -Next, we load the env file with `load_dotenv()`. - -```py -bot = discord.Bot() -``` - -In this line, we create a new instance of [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). -In this object, we can pass various parameters for configuration purposes, such as `owner_ids` -and [`intents`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```py -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") -``` - -We use the [`event`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) decorator to override -the [`on_ready`](https://docs.pycord.dev/en/stable/api/events.html#discord.on_ready) function to define an -event that is automatically called when the bot is ready to use. - -```py -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.respond("Hey!") -``` - -Here, we use the [`slash_command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.slash_command) -decorator to define a slash command. We specify the `name` and `description` arguments. If not -specified, the name of the slash command would be the function name and the command description would -be empty. - -Optional: We type-hint the context parameter (`ctx`) as [`discord.ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext). In modern IDEs, type-hinting allows access to autocompletion and docstrings. You can read more about type-hinting [here](https://docs.python.org/3/library/typing.html). - -Finally, you want to run the bot using the token specified in the `.env` file. - -Now you have finished creating your first Pycord bot! What we have shown you is just the basic structure -of a bot. You can do a lot more with Python and Pycord knowledge, as well as your imagination! Pycord -will not limit your bot's abilities. - -:::note - -The part where we load the token from the environmental variables is not required. You may use another way to keep your token secure, or, although not recommended, simply specify the token normally as a string, as shown below. - -
-A Basic Bot without securing the token -
- -```py -import discord - -bot = discord.Bot() - -@bot.event -async def on_ready(): - print(f"{bot.user} is ready and online!") - -@bot.slash_command(name="hello", description="Say hello to the bot") -async def hello(ctx: discord.ApplicationContext): - await ctx.send("Hey!") - -bot.run("TOKEN") -``` - -
-
- -::: - -## FAQ - -### How do I make prefixed commands? - -Prefixed commands are an older method of creating bot commands that listen for messages and replies -if the message starts with a certain character. You can read [this page](../extensions/commands/prefixed-commands.mdx) -to learn more about prefixed commands. - -### How do I setup modules/cogs? - -[Cogs](../popular-topics/cogs) are a great way to organize your commands by putting them into -groups called cogs. Cogs are separate files that your bot loads to get the commands inside. -You can read more about cogs, as well as learn how to use them and their benefits, -[here](../popular-topics/cogs). - -### How do I add components, such as buttons and dropdown menus, to my bot? - -Pycord makes it very easy to use Message Commands with your bot by using the `discord.ui` module. -To learn more, read about Message Commands in our [interactions directory](../interactions). - -:::info Related Topics - -- [Prefixed Commands](../extensions/commands/prefixed-commands) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx deleted file mode 100644 index 2a68677b..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/hosting-your-bot.mdx +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Hosting Your Pycord Bot ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -# Hosting Your Pycord Bot - -If you're completely new to this, you might have thought something along the lines of "Yay! I got my -bot working," after following our [Creating your First Bot](creating-your-first-bot) guide, only -to close your IDE or shut down your computer to find your bot offline. - -The reason for this is that programs have to be hosted somewhere, meaning some machine somewhere has -to constantly run your bot. There are tons of hosting services that can help you host your bot for -little to no cost. - -## Can I get a Clear Explanation? - -Sure thing. When you run your bot, it first makes a connection to Discord's API. Once that's done, -Pycord sends "heartbeats" to Discord. "heartbeats" are small packets sent at a set interval telling -Discord that your bot is indeed still alive. If Discord doesn't receive a heartbeat after a certain -amount of time, your bot is pronounced dead and buried in the graveyard (not really). It is, though, -taken offline and its connection with Discord is terminated. - -Once you close the terminal that you've run your program on, the program is no longer running, and -the bot stops sending heartbeats and can no longer process commands. This is why you have to constantly -keep the process running. - -This goes for all programs, in a different nature. If the code isn't compiled/built/assembled/interpreted, -it can't be running. - -## What is a Host? - -A host is a server or container for running code offered by a **hosting provider.** There are a lot -of hosting providers, such as bigger ones like Amazon Web Services (AWS) and Google Cloud, and smaller -ones like GalaxyGate and DigitalOcean. - -There are three types of hosts. - - - - Shared hosting is a type of hosting where multiple people share one VPS. Getting a spot on - a shared host is usually cheap, sometimes even free. Shared hosts do not give you a lot of - resources, from less than a gigabyte of RAM (usually 512MB on free hosts) and half of a CPU - with very little storage. Shared hosting is usually used for website hosting and is not - recommended for hosting a Discord bot. - - - A virtual private server (VPS) is a virtual computer (virtual machine) that is rented out to - customers. Most people use a VPS for hosting their projects such as Discord bots. You can get - anywhere from less than a gigabyte of RAM and a less powerful CPU to just under one hundred - gigabytes of RAM, a (or multiple) powerful CPU(s), and a fair amount of storage. A VPS is the - best choice for most users and can be fairly cheap. - - - A dedicated host is a physical computer. You can buy these yourself or rent one from a hosting - provider. Dedicated hosts are often very expensive, but are also very powerful, having a - few hundred gigabytes of RAM and a few very powerful CPUs, along with a good amount of storage. - Dedicated hosts are usually used for very large projects and are overkill for something like - a Discord bot. - - -
- -:::danger - -Make sure you choose a hosting provider you trust. Also make -sure the hosting provider you're looking at has good reviews on public forums. Googling along the -lines of "[host] review" should do the trick. A provider you don't trust can compromise your token. - -::: - -Most hosting providers rent their services to you for a monthly or yearly fee. These can be anywhere -from a few dollars to hundreds or thousands of dollars. - -## How to Host Your Bot - -Once you rent or buy a VPS, you can get to work. Most hosting providers allow you to choose from a -wide range of operating systems, most allow you to choose one but some allow you to choose -multiple. Once that's ready, you have to SSH into the system. We won't get into SSH here, but you can -read [this article from DigitalOcean](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys). -You can also use VNC, which is remote desktop software. If you are using an OS that does not have a -GUI, and is only a command line (a "server" OS), such as Ubuntu Server or most Linux Server Operating Servers, you will most -likely use SSH. If you are using an OS that has a GUI, such as Windows Server, you will most likely use VNC. - -Once you've decided on your operating system, you'll want to set it up and install Python. Once that's -done, you can copy your bot's files to your remote system, install the required packages, and run -the bot. - -:::warning - -If you are using SSH to run the file, your bot will not stay running. This is because the file is -only told to run during your session. You can use a command like [nohup](https://en.wikipedia.org/wiki/Nohup) -to make sure your file stays running after you disconnect. - -::: - -Now your bot is hosted, but that doesn't mean it can't go offline. If your bot encounters an error, -it can often go offline or stop its process. For this, make sure you have proper error handling. -Also be sure to pay attention to your hosting provider's updates or news, as they usually notify -users of when they plan on doing maintenance to their servers, making their services unavailable for -a short time. - -:::info Related Topics - -- [Creating Your First Bot](creating-your-first-bot) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx deleted file mode 100644 index 32eeb744..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/more-features.mdx +++ /dev/null @@ -1,379 +0,0 @@ ---- -title: More Features -description: More features to make your bot cool and snazzy. ---- - -import { - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordEmbed, - DiscordEmbedField, - DiscordEmbedFields, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -So, you just created your first Pycord bot! Now, let's add some more features to it. This will include adding event handlers, waiting for user response, styling the messages, and more. - -## Events - -### Event Handlers - -Events in Discord are a way to listen for certain actions. For example, if you want to know when a user joins your server, so you could send a welcome message, you can use the `on_member_join` event. - -First, you need to ask Discord to send you events. This is done via "Intents". Read up the [Intents](../Popular-Topics/intents) page for more information. - -Once you understand what intents are, you can enable the events you need, or just use the default ones with `discord.Intents.all()`. - -Now that that's done, let's add an event handler for when a user joins the server. We will use the [`on_member_join` event](https://docs.pycord.dev/en/stable/api/events.html#discord.on_member_join). We will send a private message to the user welcoming them to the server. - -```python -@bot.event -async def on_member_join(member): - await member.send( - f'Welcome to the server, {member.mention}! Enjoy your stay here.' - ) -``` - -We use the [`discord.Bot.event` decorator](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) to add the event handler. - -The `on_member_join` event is called when a user joins the server. The `member` parameter is the user that joined. Different events have different names and parameters. You can find all of them [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -So, that's how you add event handlers! - -### Waiting for User Response - -Let's say you want to create a Guess-the-Number game (where the user has to guess a number between 1-10). You need to send a message to a user and wait for them to respond. You can do this with the [`wait_for`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.wait_for) method. - -```python -@bot.command() -async def gtn(ctx): - """A Slash Command to play a Guess-the-Number game.""" - - await ctx.respond('Guess a number between 1 and 10.') - guess = await bot.wait_for('message', check=lambda message: message.author == ctx.author) - - if int(guess.content) == 5: - await ctx.send('You guessed it!') - else: - await ctx.send('Nope, try again.') -``` - -`wait_for` takes one argument, which is the event type. The event type is the name of the event you want to wait for. In this case, it's `message`. It could also be `reaction` to wait for a reaction to be added. - -We pass a keyword argument to `wait_for` called `check`. The function may look complicated if you're a beginner. We pass a `lambda` function, which simplifies the code a bit. - -The lambda function takes one parameter, `message`. When Pycord receives a message, it passes it to the `check` function. If the function returns `True`, the message is returned. If the function returns `False`, the message is ignored and the bot waits for another message. - -Here, we check if the message is from the user that sent the command. We simply use `message.author == ctx.author`. This will check if the author of the message was the person who invoked the command. - -## Styling Messages - -### Embeds - -Embeds are a Discord feature that allows applications to format their messages in cool embedded format, -enabling your bot to lay out messages with a lot of text into neat fields. - - - - - The Pycord Guide is a detailed guide that explains how to use Pycord and all of its features. - - - The Getting Started section explains how you can get a brand new bot created and running from scratch. - - - Interactions with Pycord - - - Pycord's various Extensions - - - Other Popular Topics - - - We have so much more! Just explore, and you will find everything you need. If you want another page added, open an issue on the GitHub. - - - Created with 💖 by the Pycord Team & Contributors - - - - -
- -Creating embeds is simple! Just create an instance of [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) and edit it to your liking. Once you're done, send it! - -```python -import discord - -bot = discord.Bot() - -@bot.command() -async def hello(ctx): - embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from - ) - embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") - - embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) - embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) - embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) - - embed.set_footer(text="Footer! No markdown here.") # footers can have icons too - embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") - embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") - embed.set_image(url="https://example.com/link-to-my-banner.png") - - await ctx.respond("Hello! Here's a cool embed.", embed=embed) # Send the embed with some text - -bot.run("TOKEN") -``` - - - -
- hello -
- Hello! Here's a cool embed. - - Embeds are super easy, barely an inconvenience. - - - A really nice field with some information. The description as well as the fields support markdown! - - Inline Field 1 - Inline Field 2 - Inline Field 3 - - Footer! No markdown here. - -
-
- -
- -This simple command sends replies to a [slash command](../interactions/application-commands/slash-commands) with an embed. -Let's break it down: - -```py -embed = discord.Embed( - title="My Amazing Embed", - description="Embeds are super easy, barely an inconvenience.", - color=discord.Colour.blurple(), - ) -``` - -This command creates an embed. We use the [`Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) -class to create an embed object with the title "My Amazing Embed", the description "Embeds are super easy, barely an inconvenience.", and the color `blurple`, Discord's main theme color. - -[discord.Colour](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Colour) is a class full of [classmethods](https://docs.python.org/3/library/functions.html#classmethod) -that return color values. While the official, documented name of this is `discord.Colour`, `discord.Color` -works as well. - -```py -embed.add_field(name="A Normal Field", value="A really nice field with some information. **The description as well as the fields support markdown!**") -embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) -embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) -embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) -``` - -This small section shows off embed fields. You can add fields to embeds with the [`add_field` method](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.add_field) -of the [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) class. These consist of three -keyword arguments: `title`, `value`, and `inline`. `title` and `value` are both required arguments, which inline defaults to `False` if it's not defined. The `inline` argument specifies whether space will be divided among the inline fields. There could be a mix of fields where inline has different values too. - -```py -embed.set_footer(text="Footer! No markdown here.") # footers can have icons too -embed.set_author(name="Pycord Team", icon_url="https://example.com/link-to-my-image.png") -embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") -embed.set_image(url="https://example.com/link-to-my-banner.png") -``` - -In this section, we're adding unique items to the embed. These items are: - -- Footer - With the [`set_footer()`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_footer) - method, you can set a small footer that holds a message. This has `text` and `icon_url` kwargs. -- Author - With the [`set_author`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_author) - method, you can set an author for the embed. This is a small text field at the top of the embed. This - includes `name`, `url` and `icon_url` kwargs. -- Thumbnail - With the [`set_thumbnail`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_thumbnail) - method, you can set a small image to reside at the top-right of the embed. This has a single `url` kwarg. -- Image - With the [`set_image`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_image) - method, you can set an image to sit at the bottom of an embed. This has a single `url` kwarg. - -There are a lot more methods and attributes you can use to configure embeds. Here, we just covered the basics. Also, remember that all of these values are not necessary in an embed. An embed may only contain a few of these. For example, only a description, a title and a description, and so on. - -### Markdown - -Markdown is a type of markup language that's limited in terms of formatting yet simple. Discord allows -for a watered-down version of markdown to be in their messages. - -#### Text Markdown - -Text formatting can be used in messages and in most embed parts, -as explained in the dedicated section below. - - - - - - - - - - - - - - - - - - - - -
*italics*__*underlined italics*__
**bold**__**underlined bold**__
***bold italics***__***underlined bold italics***__
__underlined__~~strikethrough~~
- -#### Code Markdown - -To create a single-line code block without syntax highlight, wrap the text between single backticks. -This code block will only add a dark background to the text. - -``` -`print("Hello world!")` -``` - -To create a multi-line code block without syntax highlight, wrap the text between triple backticks -on first and last line. This type of code block will encase the code inside a box. - -```` -``` -message = "Hello world!" -print(message) -``` -```` - -To create a multi-line block with syntax highlight, add the name of the language you are using right after -the triple backticks on the first line. For example, for Python you can write either "python" or "py". - -```` -```python -message = "Hello world!" -print(message) -``` -```` - -If you want to use syntax highlight for a single line of code, you still have to format it -like a multi-line block but the code must be on a separate line than the triple backticks. - -#### Quote Markdown - -To create a single-line quote block, start the line with `>` followed by a space. - -``` -> This is a single-line quote. -``` - -To create a multi-line quote block, write `>>>` followed by a space. All text -from that point onwards will be included in that quote block. - -``` ->>> This is a -multi-line quote. -``` - -#### Spoiler Markdown - -To hide a spoiler, encase the text between double pipes. The users -will have to click on it before being able to see the text contained in it. - -``` -||spoiler|| -``` - -#### Link Markdown - -Link formatting only works in embeds and messages sent through webhooks, -by using the following syntax: - -``` -[Pycord](https://pycord.dev/) -``` - -Inside the supported elements that have just been mentioned, -the example above will look like this: [`Pycord`](https://pycord.dev/) - -Outside them, the link will still be clickable but the formatting will be ignored, -therefore the example above will look similarly to this: `[Pycord](https://pycord.dev/)` - -#### Embed Markdown - -Adding markdown to your embeds or messages will give your bot the sparkle it needs, -however, markdown is limited inside embeds. Use the following table as a reference -and keep in mind that embed title and filed names will always show in **bold**. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PartTextLink
Embed AuthorNoNo
Embed TitleYesNo
Embed DescriptionYesYes
Field NameYesNo
Field ValueYesYes
Embed FooterNoNo
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx deleted file mode 100644 index e44b7c49..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/rules-and-common-practices.mdx +++ /dev/null @@ -1,184 +0,0 @@ ---- -title: Rules and Common Practices -description: All about the rules and common practices for coding a Discord bot ---- - -# Rules and Common Practices of Creating a Bot - -When creating almost anything, there's always a certain set of rules to follow or common practices, -such as [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python. This applies to creating bots -with Pycord as well. - -:::note - -Most of these rules and common practices are only applicable for -[verified bots](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting), -but it's good to follow them nonetheless. - -::: - -## Rules - -There are rules for creating bots, and most of these are required by Discord themselves, not us at -Pycord. Not following these rules may get your bot denied for verification. - -### Terms of Service and Privacy Policy - -Starting at some point in time, Discord has made providing a privacy policy with your bot a requirement. -This is so that Discord knows exactly what you are doing with its users' data. - -:::tip -You don't need a lawyer or anyone special to write out a privacy policy for you, nor do you need -it approved by some official entity. Simply writing out how you are going to use Discord user -information neatly is all you need to do. -::: - -Providing a Terms of Service for your bot is optional, though usually a best practice. It tells users -what they can and cannot do with your service, and makes it easier to settle disputes if someone -disagrees with you. - -Read more in Discord's official [Legal Docs](https://discord.com/developers/docs/legal). - -### Developer Policy - -We could list almost every rule about using Discord's API here. _Or_ we could simply link Discord's -Developer Policy to make it easier on us. You can find Discord's Developer Policy -[here](https://discord.com/developers/docs/policy). This outlines what you can and cannot do with -Discord's Developer API. And, don't worry, it's completely readable and understandable. - -## Best Practices - -Now, here's something we _can't_ simply link an article for. We're going to discuss the best practices -of creating a Discord bot with Pycord. - -### Bot Sharding - -To any new or maybe even experienced bot developer, sharding a bot sounds beneficial once you hear -about it. I'm here to tell you that it isn't a good idea to shard your bot. - -_Wait a minute, why would it be an option if it wasn't a good idea?_ It's simple. I lied. Sort of. -I'm not going to go into the details of sharding a bot, so you can read about it on -[this page](../Popular-Topics/sharding). Sharding is the process of taking your bot -and breaking it up into small pieces, so it's easier to perform tasks. This is very useful for large -bots, as it makes them faster and more reliable. Sharding is not a good practice for small bots. - -:::note -Discord will notify you once it is time to shard your bot, and will eventually force you to do so. -::: - -At the very least, wait for one thousand servers to shard your bot. If you shard your bot while it's -small, you'll just be wasting resources and possibly making your bot slower. - -### [Verification](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting) - -Verifying your Discord bot is something every developer would like to achieve. It shows that your bot -is in more than 75 servers. It's generally a good idea to try to get your bot verified as soon as -possible. We're talking at 76 servers soon. This is because Discord can be somewhat slow in terms of -bot verification, so verifying as soon as possible gives them enough time to verify before your bot -reaches the 100 server cap. If a bot is not verified, it cannot grow beyond 100 servers. - -It's also a good idea to only apply for the privileged intents that you need. Applying for intents -your bot doesn't use wastes both your time and Discord's time, as your privileged intent request -will be denied simply because you applied for an intent you didn't need. - -### Subclassing - -While it may take some time, subclassing a bot is very worth it. Once again, this was explained -elsewhere, so I won't go into the details, but I felt it fit here, so I put it here. - -Subclassing a bot makes it more flexible and allows it to do a lot more. Read more about subclassing -bots [here](../Popular-Topics/subclassing-bots) - -### Your Bot's Token - -Your bot is only able to be run for one reason: its token. If you followed the -[guide for creating your first bot](creating-your-first-bot), you should already know a bit about -keeping that token safe. That's exactly what you want to do. - -Sharing your token is never good. If someone evil gets a hold of your token, they can do terrible things, -such as making your bot leave all of its servers, spamming all the members the bot has contact with, -and even manipulating the servers the bot is in, if given the permissions. That's why it's very important -to keep your token safe. To learn how to do so, read [this part](creating-your-first-bot#tokens) of -the Creating Your First Bot guide. - -### Backups - -You always want to back up your bot's data. This includes both its code _and_ its databases. This way, -if something tragic happens, such as your host failing a data migration or you breaking your Raspberry -Pi's SD card that held your bot, you'll still have its precious user data. I have a small program for -my bot that uploads its databases to a remote GitHub repository periodically to not lose any data. -It may be smarter to find a bit more of a reliable way to do so, though. - -Public or private, having a local Git repository connected to a remote one is a good idea for making -almost any application. For a lot of developers, it's like saving your work. If you do this, all of -your bot's code won't be lost if your computer spontaneously combusts, or you smash it to bits from -anger. You can simply grab the backup computer that everyone has lying around, and you're back -in business. - -### Organization and Cleanliness - -It is _extremely_ important to have organized code. This includes commands, objects, functions, -and classes. If you don't have organized code, it will get progressively harder for you to recognize -it, and others won't be able to decipher it. - -Make sure you utilize indents and spaces, as these are very important in making your code readable. - -```py title="Bad Spacing" -class MyClass: - async def add(self,num1,num2): - return num1+num2 - async def sub(self,num1,num2): - return num1-num2 -``` - -```py title="Good Spacing" -class MyClass: - async def add(self, num1, num2): - return num1 + num2 - - async def sub(self, num1, num2): - return num1 - num2 -``` - -See the difference? Now, which one looks more readable? Hopefully, you answered the second example. -Python's [PEP8](https://www.python.org/dev/peps/pep-0008/) is a PEP (**Python Enhancement Proposal**) -style guide for Python. It is the style guide that is used by most Python developers and programmers, -providing a universal way to write and read code. - -### Databases - -As your bot grows, you'll inevitably have to store data for your bot. Now, most people would probably just load up some -JSON file on boot into a `dict`, modify it in memory then write to the file. However, JSON files aren't the solution. -When you write to a JSON file, it rewrites the entire file instead of just rewriting the section that changed. It's also -a configuration file format, not a storage file format. - -Instead of using a JSON file or some other related format, you should instead use a database. There are many databases -out there, like MongoDB, SQLite, and PostgreSQL to name a few. - -All of these databases I named do the job well, and which one you use depends on what features you want out of a database. - -<>{/* Maybe clarify these/add more options */} - -#### MongoDB - -MongoDB is a JSON-like format and if you already use JSON files, it shouldn't be too hard to migrate over to. - -#### SQLite - -SQLite is based on SQL, a common relational data model. It's a lightweight, easy-to-use, portable database solution that -works entirely on files. However, if for some reason you cannot read/write to and from a file, and you need to manage -lots of data, SQLite might not be for you. - -While SQLite is a part of the Python Standard Library as the `sqlite3` package, we recommend not using it as it is -synchronous and blocking. You should use an asynchronous alternative, such as [`aiosqlite`](https://pypi.org/project/aiosqlite/). - -#### PostgreSQL - -PostgreSQL is also based on SQL, but it also has more features than SQLite. It's compliant with the SQL standard, -open-source, and extensible. However, it's not that fast or simple compared to SQLite. - -#### MariaDB - -MariaDB is also based on SQL and is a fork of the MySQL project. It's compliant with the SQL standard, it's also open -source and is a complete drop-in replacement for any code with MySQL. You don't even need to change what package you're -using! diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/installation.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/installation.mdx deleted file mode 100644 index 521c69cd..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/installation.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Installation -sidebar_position: 2 ---- - -Before you can start using Pycord, you need to install the library. - -:::note -Python **3.8 or above** is required to use Pycord. -::: - -:::tip -Before you start installing python packages globally, it's recommended you set up a virtual environment. -You can find instructions for that [here](More/virtual-environments). -::: - -## Fresh Installation - -To install Pycord, you can use the following command in your terminal: - -``` -pip install py-cord -``` - -:::tip -Remember that you need to install `py-cord`, not `pycord`. -Also, the `pip` command varies depending on your installation. For example, it might be `python3 -m pip` on macOS/Linux or `py3 -m pip` on some versions of Windows. -::: - -If you need voice support for your bot, you should run: - -``` -pip install "py-cord[voice]" -``` - -## Migration - -### Updating Pycord - -If you are upgrading from a previous version of Pycord, you can use the following command in your terminal to upgrade to the latest version: - -``` -pip install -U py-cord -``` - -### Migrating from other libraries - -If you are migrating from another library, say, `discord.py`, first of all, you need to uninstall it. - -``` -pip uninstall discord.py -``` - -Then, you can install Pycord, it's as simple as that!: - -``` -pip install py-cord -``` - -:::caution -Uninstalling `discord.py` _after_ installing `py-cord` can cause issues. Make sure to uninstall it first! -::: - -## Installing Other Builds - -### Development Build - -:::caution -The development build comes with cutting edge features and new functionality, but as it isn't a stable build you may encounter bugs. -::: - -To install the development build, you can use the following command in your terminal: - -``` -pip install -U git+https://github.com/Pycord-Development/pycord -``` - -:::important -Git is required to install this build. [Learn how you can install Git](./more/git). -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/interactions/_category_.json deleted file mode 100644 index ea28be60..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 4, - "label": "Interactions" -} \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json deleted file mode 100644 index 6dcafe83..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Application Commands", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx deleted file mode 100644 index 8fdca991..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/context-menus.mdx +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: Context Menus -description: Learn all about Context Menus (User Commands & Message Commands) and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -When you right-click a message, you may see an option called "Apps". Hover over it, and you can see -commands a bot can run with that message. These are called message commands. - -When you right-click a user in the user list, you can once again see an option called "Apps". -Hover over it, and you can see commands a bot can run with that message. These are called user commands. - -Together, these two are called Context Menus or Context Menu Commands. These commands work very much like normal commands, except they take a member or message. - -:::note - -A bot can have up to 5 global Context Menus of each type. - -::: - -## User Commands - -Creating a user command is very simple. - -```python -@bot.user_command(name="Account Creation Date", guild_ids=[...]) # create a user command for the supplied guilds -async def account_creation_date(ctx, member: discord.Member): # user commands return the member - await ctx.respond(f"{member.name}'s account was created on {member.created_at}") -``` - - - -
- - Account Creation Date - -
- {defaultOptions.profiles.bob.author}'s account was created on 2020-01-01 -
-
- -## Message Commands - -```python -@bot.message_command(name="Get Message ID") # creates a global message command. use guild_ids=[] to create guild-specific commands. -async def get_message_id(ctx, message: discord.Message): # message commands return the message - await ctx.respond(f"Message ID: `{message.id}`") -``` - - - - Do. Or do not. There is no try. - - -
- - Get Message ID - -
- Message ID: 930650407917748286 -
-
- -
- -:::info Related Topics - -- [Slash Commands](./slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx deleted file mode 100644 index edac55b3..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/localizations.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Localizations -description: Localizations are a way to make your bot more accessible to your users. Learn all about localizations now! ---- - -Localizations are a way to make your bot more accessible to your users. You can localize the command -name, the names of any arguments, and any text that is displayed to the user. - -## Syntax - -```python -@bot.slash_command( - name="ping", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - }, - options=[ - Option( - name="Example", - name_localizations={ - "en-GB": "British Example" - }, - description="Example option that does nothing", - description_localizations={ - "en-GB": "British example option that does nothing" - } - ) - ] -) -async def ping(ctx, example): - responses = {"en-US": "Pong!", - "en-GB": "British Pong!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -@bot.slash_command( - name="ping2", - name_localizations={ - "en-GB": "British_Ping" - }, - description="Ping the bot", - description_localizations={ - "en-GB": "British ping the bot" - } -) -async def ping2(ctx, example: Option(str, "example", name_localizations={"en-GB": "British Example"}, description="Example option that does nothing", description_localizations={"en-GB": "British example option that does nothing"})): - responses = {"en-US": "Pong2!", - "en-GB": "British Pong2!"} - await ctx.respond(responses.get(ctx.interaction.locale, responses['en-US'])) - -``` - -- [`Locales`](https://discord.com/developers/docs/reference#locales) - List of valid locales recognized by Discord diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx deleted file mode 100644 index f4a760b6..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/application-commands/slash-commands.mdx +++ /dev/null @@ -1,292 +0,0 @@ ---- -title: Slash Commands -description: Learn all about Slash Commands and how to implement them into your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On March 24, 2021, Discord added Slash Commands to Discord as an easier, more efficient, and better way of using bot commands. Pycord has implemented Slash Commands into the library, so it's simple, efficient, and familiar. - -:::important - -Remember that Slash Commands require your bot to be invited with the `application.commands` scope or Slash Commands will not show up. Bots already in the guild can simply be invited again with the scope; there is no need to kick the bot. - -::: - -## Syntax - -Let's create a simple Slash Command. - -```py -import discord - -bot = discord.Bot() - -# we need to limit the guilds for testing purposes -# so other users wouldn't see the command that we're testing - -@bot.command(description="Sends the bot's latency.") # this decorator makes a slash command -async def ping(ctx): # a slash command will be created with the name "ping" - await ctx.respond(f"Pong! Latency is {bot.latency}") - -bot.run("TOKEN") -``` - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -Let's go through the code. - -First, we import Pycord's `discord` package. - -Next, we create a [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot) object and assign it to a variable `bot`. - -We then go ahead and use the [`@bot.command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.command) decorator, which registers a new Slash Command. We pass a `description` parameter to give a description to the Slash Command. We can also pass a `name` parameter to change the Slash Command's name. By default, the name of the Slash Command will be the name of the function, in this case, `/ping`. - -We create an async function called `ping` with parameters `ctx`, which, when called, sends the bot's ping/latency using [`ctx.respond`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext.respond). - -## Subcommand Groups - -You might want to group certain commands together to make them more organised. A command group is exactly what it sounds like, a group of individual Slash Commands together. - -In order to make a Slash Command group, you can use the `bot.create_group` function. - -```python -import discord - -bot = discord.Bot() - -# create Slash Command group with bot.create_group -greetings = bot.create_group("greetings", "Greet people") - -@greetings.command() -async def hello(ctx): - await ctx.respond(f"Hello, {ctx.author}!") - -@greetings.command() -async def bye(ctx): - await ctx.respond(f"Bye, {ctx.author}!") - -bot.run("TOKEN") -``` - -Or, you can instead manually make a `SlashCommandGroup` class like so: - -```python -import discord - -math = discord.SlashCommandGroup("math", "Math related commands") - -@math.command() -async def add(ctx, num1: int, num2: int): - sum = num1 + num2 - await ctx.respond(f"{num1} plus {num2} is {sum}.") - -@math.command() -async def subtract(ctx, num1: int, num2: int): - sum = num1 - num2 - await ctx.respond(f"{num1} minus {num2} is {sum}.") - -# you'll have to manually add the manually created Slash Command group -bot.add_application_command(math) -``` - -Here's what the registered subcommands will look like in the Slash Command Menu: - -![Picture of the subcommands in the Slash Command Menu](../../assets/interactions/groups-and-subcommands.jpg) - -You'll notice that there's the name of the Slash Command Group and then the name of the subcommand separated by a space. - -::: - -:::info Cogs - -If you are looking to add Slash Command Groups to cogs, please look at our [Cogs page](../../popular-topics/cogs)! - -::: - -## Sub-groups - -We've made a subcommand group, but did you know that you could create a group inside another? - -```python -from discord import SlashCommandGroup -from math import sqrt - -math = SlashCommandGroup("math", "Math related commands") -advanced = math.create_subgroup("advanced", "Advanced math commands") - -@advanced.command() -async def square_root(ctx, x: int): - await ctx.respond(sqrt(x)) - -bot.add_application_command(math) -``` - -The command created above can be invoked by typing `/math advanced square_root`. - -## Options & Option Types - -Whenever you're using Slash Commands, you might notice that you can specify parameters that the user has to set or can optionally set. These are called Options. - -Options can also include a description to provide more information. [You can learn more about Options in our documentation!](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.Option) - -Since you want different inputs from Options, you'll have to specify the type for that Option; there are a few ways of doing this. - - - - -You could use Type Annotations and let Pycord figure out the option type or explicitly specified using the [`SlashCommandOptionType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.SlashCommandOptionType) enum. - -```python -import discord - -bot = discord.Bot() - -@bot.command() -# pycord will figure out the types for you -async def add(ctx, first: discord.Option(int), second: discord.Option(int)): - # you can use them as they were actual integers - sum = first + second - await ctx.respond(f"The sum of {first} and {second} is {sum}.") - -@bot.command() -# this explicitly tells pycord what types the options are instead -async def join( - ctx, - first: discord.Option(discord.SlashCommandOptionType.string), - second: discord.Option(discord.SlashCommandOptionType.string) -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - add - -
- The sum of 1 and 1 is 2. -
- -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
- - -Instead of Type Annotations, you can also use the option decorator. This is usually done to have type-hinting. - -```python title="Slash Command Type" -import discord - -bot = discord.Bot() - -@bot.command() -@discord.option("first", type=discord.SlashCommandOptionType.string) # type = str also works -@discord.option("second", type=discord.SlashCommandOptionType.string) # type = str also works -async def join( - ctx, - first: str, - second: str, -): - joined = first + second - await ctx.respond(f"When you join \"{first}\" and \"{second}\", you get: \"{joined}\".") - -bot.run("TOKEN") -``` - - - -
- - join - -
- When you join "Py" and "cord", you get: "Pycord". -
-
- -
-
- -## Autocomplete - -Discord's autocomplete allows developers to determine option choices that are used in a slash command option. You can do this by defining a function: - -```py -async def get_animal_types(ctx: discord.AutocompleteContext): - """ - Here we will check if 'ctx.options['animal_type']' is a marine or land animal and return respective option choices - """ - animal_type = ctx.options['animal_type'] - if animal_type == 'Marine': - return ['Whale', 'Shark', 'Fish', 'Octopus', 'Turtle'] - else: # is land animal - return ['Snake', 'Wolf', 'Lizard', 'Lion', 'Bird'] - -@bot.slash_command(name="animal") -async def animal_command( - ctx: discord.ApplicationContext, - animal_type: discord.Option(str, choices=['Marine', 'Land']), - animal: discord.Option(str, autocomplete=discord.utils.basic_autocomplete(get_animal_types)) -): - await ctx.respond(f'You picked an animal type of `{animal_type}` that led you to pick `{animal}`!') -``` - - - -
- - animal - -
- You picked an animal type of Marine that led you to pick Shark! -
-
- -:::warning - -Autocomplete can **only** be used with slash commands. - -::: - -:::info Related Topics - -- [Interactions Index](../../interactions) -- [Rules and Common Practices](../../getting-started/rules-and-common-practices) -- [Cogs](../../popular-topics/cogs) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/index.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/interactions/index.mdx deleted file mode 100644 index 3f695606..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/index.mdx +++ /dev/null @@ -1,242 +0,0 @@ ---- -title: Discord Interactions ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -In December 2020, Discord released their first Interaction: the -[Slash Command](https://discord.com/developers/docs/interactions/application-commands#slash-commands). -Since then, Discord has added many types of Interactions, including: - -[**Application Commands**](https://discord.com/developers/docs/interactions/application-commands) - -- [**Slash Commands**](https://discord.com/developers/docs/interactions/application-commands#slash-commands): - Commands that can be used with the `/` prefix. -- **Context Menu Commands**: Commands that can be used from the right-click menu. - - [**User Commands**](https://discord.com/developers/docs/interactions/application-commands#user-commands): - Commands that can be used on a user by alt-clicking/selecting them. - - [**Message Commands**](https://discord.com/developers/docs/interactions/application-commands#message-commands): - Commands that can be used on a message by alt-clicking/selecting it. - -[**UI Components**](https://discord.com/developers/docs/interactions/message-components) - -- [**Buttons**](https://discord.com/developers/docs/interactions/message-components#buttons): - Buttons are attached to a message and can be clicked on to perform an action. -- [**Select Menus**](https://discord.com/developers/docs/interactions/message-components#select-menus): - Drop-down menus are used to select a number of options from a list. -- [**Modals**](https://discord.com/developers/docs/interactions/message-components#text-inputs): - Form-like modals can be used to ask for input from a user. - -## Application Commands - -Application Commands are another set of new features that are intended to avoid compromising users' safety and privacy. -They're relatively easy to add to your bot, and give people a simpler and safer way to use commands. - -### [Slash Commands](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.SlashCommand) - -Slash Commands were the first Interaction added to Discord. They're easy to use and create, and -is the only prefix commands alternative that does not need Message Content intent. - -:::note - -Preferring prefix commands over Application Commands is **not** a valid reason to apply for the -Message Content intent. Using that as a reason will get your application denied. - -::: - - - -
- - ping - -
- Pong! Latency is 335ms. -
-
- -
- -This is what a Slash Command looks like. Not too different from a prefix command, -apart from the note telling you who invoked it. A Slash Command's fields can accept any of the following: - -- Members -- Roles -- Channels -- Attachments -- Text - -Just about as good as it gets. - -### [Message](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.MessageCommand) and [User](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.UserCommand) Commands - -Message Commands and User Commands were both introduced at around the same time, and are very similar to each other, so we'll be -introducing them together. These commands can be found in the `Apps` tab when alt-clicking. The only difference between the two is that -Message Commands only appear in the `Apps` tab of a message, while User Commands are found in the `Apps` tab of a user. Message Commands -can be used to quickly report a message, warn a user for a message, and other functions. Likewise, User Commands can be used to add a -user to a ticket, warn a user, and more. - -Here's an example of a Message Command: - - - - Hello World! - - -
- - Reverse Message - -
- Message 930650407917748286 reversed is "!dlroW olleH" -
-
- -
- -And here's an example of a User Command: - - - - {defaultOptions.profiles.dorukyum.author} has been on Discord for a long time - - -
- - User Age - -
- {defaultOptions.profiles.dorukyum.author} is 1 week old. -
- -
- - User Age - -
- {defaultOptions.profiles.bob.author} is 40 years old. -
- - 🤔 - -
- -
- -Pretty cool, right? To learn more about these two, please read the [Context Menus guide](./application-commands/context-menus.mdx). - -## [Application Commands](#application-commands) vs. [Prefix Commands](../extensions/commands/prefixed-commands) - -Ever since Discord was created, apps on it have used prefix commands. Using prefixes meant that you would have to put a -certain character (or string of characters) in front of your command, such as the exclamation mark in `!ping`. The way this -worked was that your bot would listen for messages, pick out the ones that had their specific prefix, and then respond to the command. -Now, Discord is encouraging developers to switch their bots over to Application Commands, which is a new system meant to preserve the -privacy and safety of their users. But why exactly is Discord making us switch? What's the better option, Application Commands or prefix -commands? Below, we'll discuss everything you need to know. - -### Discord's Decision - -Application Commands were conceptualized partly due to privacy concerns. When Discord first began, they weren't entirely concerned about bots -having access to the content of every message that was being sent. However, as Discord grew, this became more of a problem. Hypothetically, bots -could simply log every message they're able to receive via the Discord API and hand their contents over to a company or other third party. This is -a problem, since that data is meant to be used only by Discord. As such, they locked down Message Content, and introduced Application Commands for -bot developers to use instead. - -Prefix commands work by reading messages, as described before. Application Commands, however, don't -work this way; instead, they work by having your bot get information from Discord about when a command was used. This way, Discord can limit -Message Content only to bots that _absolutely_ depend on it, such as auto-moderation bots. - -### Who has to Use Application Commands - -Any verified bot that does not have the Message Content intent must use Application Commands. Discord is allowing developers to submit -applications for the ability to use the intent; however, since they don't want to keep supporting prefix commands due to privacy concerns, -they will automatically decline any application that includes only that as a reason. So, if your bot doesn't have an auto-moderation feature -(or any other functionality that requires Message Content), you're out of luck. - -Unverified bots, however, don't have to use Application Commands. This is because the Message Content intent is a `Privileged Intent`, meaning that -it must be applied for only if your bot is verified or about to be verified. Unverified bots don't have to apply for Privileged Intents, so they can -use them freely. - -So, if your bot is made only for a couple of servers, you can choose between prefix commands and Application Commands. However, if you plan on expanding -your bot's reach, it'll have to use Application Commands. - -### What's the Better Option - -Choosing which is the better option is up to you, if you're starting small. If -you plan on growing your bot, however, you will have to use Application Commands. Since prefix commands are slowly being phased out by Discord, -there isn't much of a choice for developers of larger bots. - -## Message Components - -Message Components are fairly new features in Discord, allowing developers to give their bots a fast -and understandable user interface. Message Components are easy to use and make your bot look modern, -sleek, and downright awesome. - -### [Views](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View) - -Views are not an Application Command nor are they a Message Component. Views are the invisible placeholders, or grid, -that Message Components lie in. Views can have up to 5 [`Action Rows`](https://docs.pycord.dev/en/stable/api/models.html#discord.ActionRow), -and Action Rows can have a maximum of 5 slots. Below, you can find a table showing how many slots a Message Interaction takes up. - -| Component | Slots | -| ------------ | ----------------------------------------------- | -| Buttons | 1 Slot | -| Select Menus | 5 Slots | -| Text Modals | 1 Slot (opened via a Button) | - -So, based on this, you could have a maximum of 25 Buttons in a View with no Select Menus, and 5 Select -Menus in a View with no Buttons. This doesn't mean you can't have them both in a View, however. You can have -a combination of them, such as 20 Buttons and a Select Menu or 10 Buttons and 3 Select Menus. - -### [Buttons](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button) - -Buttons are the first of the Message Components. They allow for quick responses to prompts, such as for canceling or continuing an action. -Of course, these aren't their only uses; people have created awesome things with Buttons, such as calculators, games, and more! - - - - Discord Buttons are awesome! -
- - Click me! - -
-
-
- -
- -This is what a Button looks like, very simple and modern. To learn more about Buttons, refer to our -[Buttons page](./ui-components/buttons.mdx). - -### [Select Menus](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Select) - -Select Menus are the second of Discord's Message Components. They allow users to select from a list of choices, which your bot can then use. -Select Menus are good for things such as choosing features, pages of a help menu, and more. - -![Select Menu Example Image](../assets/interactions/select-menus-example.png) - -This is what a Select Menu looks like. While not looking as good as Buttons, they still look great -and have even greater possibilities. To learn more about Select Menus, please refer to our [Select -Menus page](./ui-components/dropdowns.mdx). - -### [Modal Dialogs](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal) - -Text Modals are the most recently added Message Component in Discord. They're useful for text input and filling out forms, such as a -sign-up for your bot's service. These are meant to replace long bot setup processes by allowing users to fill out multiple text fields, -which avoids having the user send multiple messages for the bot. Modals can be accessed by either invoking an Application Command or by -interacting with another UI Component. - -![Text Modal Example Image](../assets/interactions/modal-example.png) - -This is what a Text Modal looks like, easy to use and one of the most useful Message Components yet. To learn more about Text Modals, -please visit our [Modal Dialogs page](./ui-components/modal-dialogs.mdx). diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json deleted file mode 100644 index 7b0a72fe..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "UI Components", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx deleted file mode 100644 index 10557c94..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/buttons.mdx +++ /dev/null @@ -1,314 +0,0 @@ ---- -title: Buttons -description: Learn all about implementing buttons in your Discord Bot using Pycord. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -On May 26, 2021, Discord added a new interaction called buttons. Instead of reactions, bots could now -send buttons and users could use them to interact with bots. This opened up a whole new world of -possibilities for bots. Soon after, developers made calculators, polls, and games like blackjack, UNO, -and even Minecraft! Buttons provided a clear and easy to use interface for interacting with bots. - -So, let's learn how you can add buttons to your bot! - -## Concept - -Buttons weren't the only update to the interactions system in Discord. Discord also added [Select Menus](./dropdowns) and [Modal Dialogs](./modal-dialogs), both of which work very similarly to buttons. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive button. - -```python -import discord - -bot = discord.Bot() # Create a bot object - -class MyView(discord.ui.View): # Create a class called MyView that subclasses discord.ui.View - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.primary, emoji="😎") # Create a button with the label "😎 Click me!" with color Blurple - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") # Send a message when the button is clicked - -@bot.slash_command() # Create a slash command -async def button(ctx): - await ctx.respond("This is a button!", view=MyView()) # Send a message with our View class that contains the button - -bot.run("TOKEN") # Run the bot -``` - -Using this command should return the following message: - - - -
- - button - -
- This is a button! -
- - Click me! - -
-
-
- -
- -As you can see, we create a class called `MyView` that [subclasses](#oop) -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `button_callback` to the `MyView` class with the decorator -[`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button). -This decorator adds a button to a component. This function takes two arguments: the button that was -clicked and the interaction. These arguments are passed to the function when the button is clicked -by the module. We use the [`interaction.response.send_message`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse.send_message) -function to send a message to the channel where the interaction was sent. - -Finally, we create a global slash command called `button` that sends the message, along with the view -that contains a button. - -This is the basic syntax of creating a button. What you create with it is up to you. You can worry -about making your button do amazing things, while Pycord handles the rest! - -## Button Styles - - - -| Name | Usage | Color | -| --------- | ----------------------------------------------------------------------------------------- | ------- | -| Primary | `discord.ButtonStyle.primary` / `discord.ButtonStyle.blurple` | Blurple | -| Secondary | `discord.ButtonStyle.secondary` / `discord.ButtonStyle.grey` / `discord.ButtonStyle.gray` | Grey | -| Success | `discord.ButtonStyle.success` / `discord.ButtonStyle.green` | Green | -| Danger | `discord.ButtonStyle.danger` / `discord.ButtonStyle.red` | Red | -| Link | `discord.ButtonStyle.link` / `discord.ButtonStyle.url` | Grey | - -Check out the [`discord.ButtonStyle`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ButtonStyle) class for more information. - -![Different Button Styles](../../assets/interactions/button-styles.png) - -You can set a button's style by adding the `style` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) decorator. - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Click me!", style=discord.ButtonStyle.success) - async def button_callback(self, button, interaction): - await interaction.response.send_message("You clicked the button!") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots, and each button takes up 1 slot. -So, how do we move the buttons to another row? - -This can be done by specifying the `row` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) -decorator. - -:::info The `row` argument - -The row argument specifies the relative row this button belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=1, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") -``` - -## Disabling Buttons - -### Pre-Disabled Buttons - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary, disabled=True) # pass `disabled=True` to make the button pre-disabled - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView()) -``` - -### Disabling Buttons on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="A button", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - button.disabled = True # set button.disabled to True to disable the button - button.label = "No more pressing!" # change the button's label to something else - await interaction.response.edit_message(view=self) # edit the message's view -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.button(emoji="😀", label="Button 1", style=discord.ButtonStyle.primary) - async def button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) - - @discord.ui.button(label="Button 2", style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -Sometimes, you want to have a button that is disabled after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... - -@bot.command() -async def button(ctx): - await ctx.send("Press the button!", view=MyView(timeout=30)) -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.button() - async def button_callback(self, button, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a button that is disabled after a certain amount of time, you want to have a -button that is always working. - -Normally, when the bot goes offline, all of its buttons stop working. You will be able to see the -buttons, but nothing will happen when you press them. This is a problem -if you are trying to create a self-role system with buttons, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons will stop working. When the bot comes back online, however, the buttons will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view must have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.button(label="A button", custom_id="button-1", style=discord.ButtonStyle.primary, emoji="😎") # the button has a custom_id set - async def button_callback(self, button, interaction): - await interaction.response.send_message("Button was pressed", ephemeral=True) - -@bot.command() -async def button(ctx): - await ctx.send(f"Press the button! View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many buttons can I have in a message? - -Each message can have a maximum of 25 buttons. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do buttons need any special permissions? - -No new permissions are needed for either the bot or the server to allow bots to use buttons. - -#### Should I replace reactions with buttons for my bot? - -That is up to you. Buttons do provide a cleaner interface for your bot and are easier to use. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx deleted file mode 100644 index 8320f25d..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/dropdowns.mdx +++ /dev/null @@ -1,339 +0,0 @@ ---- -title: Select Menus -description: Learn all about implementing Select Menus or Dropdowns in your Discord Bot with Pycord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Shortly after the buttons were added, Discord added their second message component: Select Menus. Select Menus allow users to choose from a list of items sent by a bot. These are a great substitute for having a user send a number that corresponds to an option. You can even allow users to select multiple options from the Select Menus. This guide will show you the easy and painless ways of using them with Pycord. - -## Concept - -Select Menus aren't the only message component in Discord. There's also [Buttons](./buttons) and [Modal Dialogs](./modal-dialogs). Select Menus make it easy for users to pick one or multiple options from a list provided by a bot. - -These UI elements reside in a "view". To learn more about views, please refer to the -[interactions page](../../interactions). - -## Usage Syntax - -Let's see how to create a simple responsive select menu. - -```python -import discord - -bot = discord.Bot() - -class MyView(discord.ui.View): - @discord.ui.select( # the decorator that lets you specify the properties of the select menu - placeholder = "Choose a Flavor!", # the placeholder text that will be displayed if nothing is selected - min_values = 1, # the minimum number of values that must be selected by the users - max_values = 1, # the maximum number of values that can be selected by the users - options = [ # the list of options from which users can choose, a required field - discord.SelectOption( - label="Vanilla", - description="Pick this if you like vanilla!" - ), - discord.SelectOption( - label="Chocolate", - description="Pick this if you like chocolate!" - ), - discord.SelectOption( - label="Strawberry", - description="Pick this if you like strawberry!" - ) - ] - ) - async def select_callback(self, select, interaction): # the function called when the user is done selecting options - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") - -@bot.command() -async def flavor(ctx): - await ctx.respond("Choose a flavor!", view=MyView()) - -bot.run("TOKEN") -``` - -There's a lot going on over here! Don't worry, we will go over the code and explain it. - -As you can see, we create a class called `MyView` that subclasses -[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). - -Then, we add a function called `select_callback` to the `View` class with the decorator -[`discord.ui.select`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.select). -This decorator adds a select menu to the view. This decorator takes a few arguments to customize your select menu. Read them in the [Customization section](#customization). - -That was the decorator. Now, the function itself is pretty simple. It takes two parameters, not including `self`. The parameters are `select`: The select menu, and `interaction`: a [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object. Both of these are passed by Pycord, so you just need to specify them in the function! - - - -In the callback, you could do anything you want. You get the two parameters `select` and `interaction` to play around with. Here, we send a message using `await interaction.response.send_message` (where interaction is [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse)) with content `select.values[0]`, which sends the label of the first/only option the user selected. Obviously, this is only an example, and you could do just about anything you want. - -Finally, we create a global slash command called `flavour` that sends a message "Choose a flavor!" along with the view -that contains our select menu. - -This is the basic syntax of creating a select menu. What you create with it is up to you. You can worry -about making your code do amazing things, while Pycord handles the rest! - -## Customization - -#### Select Menu Properties - -- `select_type`: The type of select to create. This must be a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. -- `channel_types`: A list of channel types that can be selected in the menu. This is only valid for selects of `select_type` [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType). -- `options`: A list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. These are the options that can be selected in this menu. -- `placeholder` is the placeholder text shown in the select menu if no option is selected. -- `custom_id`: The ID of the select menu that gets received during an interaction. It is recommended not to set this to anything unless you are trying to create a persistent view. -- `row`: The relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). -- `min_values`: The minimum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `max_values`: The maximum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. -- `disabled`: Whether the select is disabled or not. Defaults to False. - -#### Select Option Properties - -In the `options` parameter, you pass a list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. This class also has a few parameters: - -- `default` (whether the option is selected by default) -- `description` (an additional description, if any) -- `emoji` (a string or an emoji object, if any) -- `label` (the name displayed to users, can be up to 100 characters) -- `value` (a special value of the option, defaults to the label). - -## Select Types - -In addition to regular string selects, you can also have your select menu contain users, roles, mentionables, and channels as its options. You can use these alternative select types by passing a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value for the `select_type` parameter when creating the Select. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.user_select - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -Additionally, you can use shortcut decorators to create a [`discord.ui.Select`](https://docs.pycord.dev/en/master/api/ui_kit.html#discord.ui.select) with a predetermined [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. Using a shortcut decorator, the above code can be rewritten like this: - -```python -class MyView(discord.ui.View): - @discord.ui.user_select() - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Hello, {select.values[0].mention}") -``` - -### Specifying Channel Types - -When using a [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType.channel_select) type select menu, you can pass in a list of [`discord.ChannelType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ChannelType) values to limit which types of channels users can choose when interacting with the select menu. - -```python -class MyView(discord.ui.View): - @discord.ui.select( - select_type=discord.ComponentType.channel_select, - channel_types=[discord.ChannelType.text, discord.ChannelType.voice] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"You selected {select.values[0].mention}") -``` - -## Action Rows - -We have discussed that Views can have 5 rows. Each row has 5 slots. A button takes a single slot, while a select menu takes up all 5 of them. This means a view can have a maximum of 5 select menus, or any possible combination of select menus and buttons. - -The arrangement of buttons and select menus is generally adjusted by Pycord. However, it is possible to move them to specific relative rows. This is done by specifying the `row` argument. - -:::info The `row` argument - -The row argument specifies the relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero-indexed). - -::: - -```python -class MyView(discord.ui.View): - @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) - async def first_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.button(label="Button 2", row=0, style=discord.ButtonStyle.primary) - async def second_button_callback(self, button, interaction): - await interaction.response.send_message("You pressed me!") - - @discord.ui.select( - row = 1, - options = [...] - ) - async def select_callback(self, select, interaction): - await interaction.response.send_message(f"Awesome! I like {select.values[0]} too!") -``` - -## Disabling Select Menus - -### Pre-Disabled Menus - -```python -class MyView(discord.ui.View): - @discord.ui.select( - disabled = True, # pass disabled=True to set the menu as disabled - options = [...] - ) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send("Select and option from the menu!", view=MyView()) -``` - -### Disabling Menus on Press - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - select.disabled = True # set the status of the select as disabled - await interaction.response.edit_message(view=self) # edit the message to show the changes -``` - - - - - -```python -class MyView(discord.ui.View): - @discord.ui.select(options = [...]) - async def first_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) # edit the message to show the changes - - @discord.ui.select(options = [...]) - async def second_select_callback(self, select, interaction): - self.disable_all_items() - await interaction.response.edit_message(view=self) -``` - - - - -## Timeouts - -You may want a select menu to automatically stop working after a certain amount of time. This is where timeouts come in. - - - - -```python -class MyView(discord.ui.View): - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select(ctx): - await ctx.send(view=MyView(timeout=30)) # specify the timeout here -``` - - - - -```python -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=10) # specify the timeout here - - async def on_timeout(self): - self.disable_all_items() - await self.message.edit(content="You took too long! Disabled all the components.", view=self) - - @discord.ui.select(options = [...]) - async def select_callback(self, select, interaction): - ... -``` - - - - -Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. - -:::note - -If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. - -::: - -## Persistent Views - -Sometimes, instead of a select menu that is disabled after a certain amount of time, you want to have a -select menu that is always working. - -Normally, when the bot goes offline, all of its views stop working, even if they don't have a timeout. You will be able to see the -views, but nothing will happen when you try to interact with them. This is a problem -if you are trying to create a self-role system, for example. This is where persistent views come in. - -Persistent views work forever. When the bot goes offline, the buttons and select menus will stop working. However, when the bot comes back online, the buttons and select menus will start working again. - -In a Persistent View, the timeout must be set to `None` and all the children in the view much have a `custom_id` attribute set. - -```python -@bot.event -async def on_ready(): - bot.add_view(MyView()) # Registers a View for persistent listening - -class MyView(discord.ui.View): - def __init__(self): - super().__init__(timeout=None) # timeout of the view must be set to None - - @discord.ui.select(custom_id="select-1", options = [...]) # a custom_id must be set - async def select_callback(self, select, interaction): - ... - -@bot.command() -async def select_menu(ctx): - await ctx.send(f"View persistence status: {MyView.is_persistent(MyView())}", view=MyView()) -``` - -## FAQ - -#### How many select menus can I have in a message? - -Each message can have a maximum of 5 select menus. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. - -#### Can I add more than one view to a message? - -No. As a Discord limitation, you can only have one view per message. - -#### Why are UI Components so confusing? - -They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. - -UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). - -#### What is OOP? What is subclassing? - -OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have -their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. - -Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. - -We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. - -**Resources**: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -#### Do select menus need any special permissions? - -No new permissions are needed in the bot or in the server. - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx deleted file mode 100644 index 6ee4682f..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/interactions/ui-components/modal-dialogs.mdx +++ /dev/null @@ -1,107 +0,0 @@ ---- -title: Modal Dialogs -description: Learn how you can implement Modals in your Discord Bot with Pycord! ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -Modal Dialogs, also known as "modals", provide a form-like structure for bots to receive input from users. No extra permissions are needed for bots to send modal dialogs, so it becomes a convenient workaround for bots to receive longer input without needing the Message Content [intent](../../popular-topics/intents). - -## Concept - -Modal Dialogs consist of a title, custom ID, and up to 5 [`discord.ui.InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) components. While creating modals, we generally subclass [`discord.ui.Modal`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal), as we'll see later. - -Unlike other UI Components, Modals cannot be sent with messages. They must be invoked by an Application Command or another UI Component. - -## Usage Syntax - -```py -class MyModal(discord.ui.Modal): - def __init__(self, *args, **kwargs) -> None: - super().__init__(*args, **kwargs) - - self.add_item(discord.ui.InputText(label="Short Input")) - self.add_item(discord.ui.InputText(label="Long Input", style=discord.InputTextStyle.long)) - - async def callback(self, interaction: discord.Interaction): - embed = discord.Embed(title="Modal Results") - embed.add_field(name="Short Input", value=self.children[0].value) - embed.add_field(name="Long Input", value=self.children[1].value) - await interaction.response.send_message(embeds=[embed]) -``` - - - - -The `ctx` parameter we define in Application Commands receives an [`ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext) object. Using its `send_modal()` coroutine, you can send a Modal dialog to the user invoking the Application Command. - -```py -@bot.slash_command() -async def modal_slash(ctx: discord.ApplicationContext): - """Shows an example of a modal dialog being invoked from a slash command.""" - modal = MyModal(title="Modal via Slash Command") - await ctx.send_modal(modal) -``` - - - - -The `interaction` parameter we define in UI Components receives an [`Interaction`](https://docs.pycord.dev/en/stable/api/models.html#discord.Interaction) object. The `response` attribute of the object contains an [`InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object, with various coroutines such as `send_message()` and `send_modal()`, which we utilize. - -```py -class MyView(discord.ui.View): - @discord.ui.button(label="Send Modal") - async def button_callback(self, button, interaction): - await interaction.response.send_modal(MyModal(title="Modal via Button")) - -@bot.slash_command() -async def send_modal(ctx): - await ctx.respond(view=MyView()) -``` - - - - -The above example uses an embed to display the results of the modal submission, but you can do anything you want with the text provided by the user. -Each input field can be accessed in the order it was added to the modal dialog, via `Modal.children`. - -## Customization - -A Modal can have up to 5 [`InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) fields. These fields offer some customization. - -Each field has a label which is shown to the user. This is defined with `label`. - -The `style` parameter is used to determine whether it should be a short (single-line) or long (multi-line) input field. - -There are a number of aliases that can be used: - -```x title="Single-line InputTextStyle values:" -short -singleline -``` - -```x title="Multi-line InputTextStyle values:" -paragraph = 2 -multiline = 2 -long = 2 -``` - -:::info Related Topics - -- [Slash Commands](../application-commands/slash-commands) -- [Buttons](./buttons) -- [Interactions Index](../../interactions) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/introduction.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/introduction.mdx deleted file mode 100644 index 3262c632..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/introduction.mdx +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Introduction -description: Pycord Guide is a complete guide for Pycord. Learn how to create Discord Bots today! -sidebar_position: 1 ---- - -Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord, written in Python. Pycord is a maintained fork of [discord.py](https://github.com/Rapptz/discord.py). - -## Before you begin - -Pycord is an advanced and complex Python library. To take advantage of the full capabilities of Pycord, you will need to have a good understanding of Python. You should know the basics of Python and have an understanding of the following concepts: - -- Variables -- Data Types -- Functions -- Packages -- Conditionals -- Loops -- Classes -- Object-Oriented Programming -- Inheritance -- Exception Handling -- Iterators -- Coroutines -- Async/Await - -This list is not exhaustive, but it should give you a good idea of what you need to know to get started. - -When you see an ellipsis - that's the three dots - in this guide, it is a placeholder for code that you need to fill in. Sometimes, it may be code for a command, while other times it could be something simple like a Guild ID. Make sure to replace them before running your bot! - -## Learning Resources - -Here are some good resources to get started or to freshen up your Python knowledge: - -- [Official Beginner's Guide](https://wiki.python.org/moin/BeginnersGuide) -- [Official Tutorial](https://docs.python.org/3/tutorial/) -- [Automate the Boring Stuff, a free online book for complete beginners to programming](https://automatetheboringstuff.com/) -- [Learn Python in y Minutes, complete cheat sheet for people who know programming already](https://learnxinyminutes.com/docs/python3/) -- [Swaroopch's free Python book](http://python.swaroopch.com/) -- [Codeabbey, exercises for beginners](http://www.codeabbey.com/) - -## Credits - -First of all, we would like to thank [Rapptz](https://github.com/Rapptz) for the original [discord.py](https://pypi.org/project/discord.py) library. Pycord is a maintained fork of this library. - -We would also like to thank the [discord.js guide](https://discordjs.guide), which inspired this guide style-wise, and the [original Pycord Guide](https://namantech.me/pycord), which inspired some content in this guide. - -We created this guide using [Docusaurus v2](https://docusaurus.io), a modern static site generator for React. We would also like to thank Danktuary for his [`@discord-message-components/react`](https://www.npmjs.com/package/@discord-message-components/react) package, from which we took the Discord message components. - -And finally, we would like to thank the amazing and loving community of Pycord users, contributors and developers. diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/more/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/more/_category_.json deleted file mode 100644 index 2cbe2c56..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/more/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 8, - "label": "More", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/more/community-resources.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/more/community-resources.mdx deleted file mode 100644 index ed3075bd..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/more/community-resources.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Community Resources ---- - -This page showcases the amazing things created by the Pycord community, including bots, Plugins, and more. - -## Plugins - -| Name | Type | GitHub | -| --------------- | ------------ | --------------------------------------------------------------- | -| Music Cord | Music | [NixonXC/cord-music](https://github.com/NixonXC/cord-music) | -| pycord-i18n | Localization | [Dorukyum-pycord-i18n](https://github.com/Dorukyum/pycord-i18n) | -| pycord-multicog | Cogs | [pycord-multicog](https://github.com/Dorukyum/pycord-multicog) | -| EzCord | Utilities | [EzCord](https://github.com/tibue99/ezcord) | - -## Bots - -| Name | Type | Link | -| ------------------------ | ------------ | ----------------------------------------------------------------------------------- | -| Discord-Multipurpose-Bot | Multipurpose | [github](https://github.com/pogrammar/Discord-multipurpose-bot/tree/master/Python) | -| inconnu | Fun & QOL | [github](https://github.com/tiltowait/inconnu) | -| Mai | Multipurpose | [github](https://github.com/TeamMai/Mai) & [website](https://xfghoul.github.io/Mai) | -| Toolkit | Multipurpose | [github](https://github.com/Dorukyum/Toolkit) | diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/more/contributing.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/more/contributing.mdx deleted file mode 100644 index 8fdf31af..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/more/contributing.mdx +++ /dev/null @@ -1,463 +0,0 @@ ---- -title: Contributing to the Guide -description: Learn how to contribute to the Pycord Guide. ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; - -This page outlines some of the basic syntax you need to know to contribute to the guide. We recommend you also check out: - -- [Docusaurus's Docs](https://docusaurus.io/docs/) -- [Contributing Rules](https://github.com/Pycord-Development/guide/blob/master/.github/CONTRIBUTING.md) - -## Info - -We use [Docusaurus v2](https://docusaurus.io/) to generate our guide. All the guide pages are generated -from `mdx` files in the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory. -MDX allows you to use JSX in your markdown content. - -## Structure - -Let's visit the [`docs/`](https://github.com/Pycord-Development/guide/tree/master/docs) directory and check its file structure. - -We can see various folders and a few files in it. Let's talk a bit about the `introduction.mdx` file. At the top, you can see something like: - -```md ---- -title: Introduction -description: ... -sidebar_position: 1 ---- -``` - -Most pages have this at the top. The `title` defaults to the file name. Since the titles need to be Capitalized according to need while the file names are lowercased (sometimes, the file names are shorter than the title!), we set a title ourselves. - -The `description` field is also important. This is the text shown in an embed when the page's link is shared on Discord, Twitter or other websites that support embedded links. Make sure to give a nice an interesting description! - -The `sidebar_position` field is pretty self-explanatory. It sets the position of the page in the sidebar. Most files in categories do not need this since they are sorted alphabetically. - -## Markdown Syntax - -This page quickly outlines some of the syntax that is used in markdown. - -````mdx -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - - ```python - print("We can use code blocks like this.") - ``` - -You can add [links to other websites](https://pycord.dev). You can add images like this: ![alternate text that describes the image](https://pycord.dev/image.png). - -- You can create -- unordered lists like this - -1. Or ordered lists -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` -4. Like this - -# Headers - -## Go - -### Like - -#### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet -```` - -
-Preview -
- -Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. - -```python -print("We can use code blocks like this.") -``` - -You can add [links to other websites](https://pycord.dev). You can add images by adding ![alt text](@site/static/img/favicon.ico). - -- You can create -- unordered lists like this - -1. Or ordered lists - -2. Like this - -3. If you want markdown to automatically detect what number you are on, you can use `1.` - -4. Like this - - # Headers - - ## Go - - ### Like - - #### This - -You can even use HTML in Markdown. - -This text is monospaced -Use
to add a break line. - -> We can use blockquotes too. - -2 ways to create tables: - - - - - - - - - - -
HeaderHeader
CellCell
- -| Header | Header | -| ------ | ------ | -| Cell | Cell | - -Here's a line for us to start with. - -This line is separated from the one above by two new lines, so it will be a _separate paragraph_. - -This line is also a separate paragraph, but... -This line is only separated by a single newline, so it's a separate line in the _same paragraph_. - -We can use emojis too! :joy: - -- [x] We can have task lists too -- [ ] This is a task -- [ ] That's not done yet - -
-
- -## Admonitions - -We can add warnings, notes, etc. with the following syntax: - -```md -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: -``` - -
-Preview -
- -:::note - -Some **content** with _markdown_ `syntax`. - -::: - -:::tip - -Some **content** with _markdown_ `syntax`. - -::: - -:::info - -Some **content** with _markdown_ `syntax`. - -::: - -:::caution - -Some **content** with _markdown_ `syntax`. - -::: - -:::danger - -Some **content** with _markdown_ `syntax`. - -::: - -:::important - -Remember that it's `:::important`, not `::: important` with a space! - -::: - -:::tip Cool Stuff - -You can edit an admonition's title by adding text after the `:::` and name, like this! - -::: - -
- -
- -## Discord Message Components - -As most files already have the imports for these, it's not that hard to add them. - -First, import the necessary components: - -```tsx -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent from "@site/src/components/DiscordComponent"; -``` - -The div starts like so: - -```tsx - - - - -
-``` - -This is where you list a `DiscordMessage`. - -```tsx - - - Hello! - - - -
-``` - - - - Hello! - - - -
- -It has a pretty straightforward syntax. - -:::tip - -Add a `
` to the end of a component to make the content below it look better. - -::: - -### Slash Commands - -To make a message authored by a slash command, do the following: - -```tsx - - -
- - update - -
- Updated dependencies to the latest version! -
-
-``` - - - -
- - update - -
- Updated dependencies to the latest version! -
-
- -### Buttons - -To make a message with buttons, do the following: - -```tsx - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
-``` - - - -
- - work - -
- Work Done! -
- - Work More - Sleep - -
-
-
- -## Page Format - -There are a few things you need to take care of: - -1. Make sure that the spelling and grammar is perfect. We have a GitHub action configured that will warn you about spelling errors when you start a pull request. Make sure to commit your changes accordingly. - - As for the grammar, you should try reading the changes you have done and wait for reviews from others. - -2. A common mistake people make is incorrect header style. People often think that the less the important the topic is, the lower it's heading style should be. - - ```md - [PAGE STARTS] - # Topic - ## Less Important Topic - ## Subtopic - ``` - - ```md - [PAGE STARTS] - # About - [Introduction] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - That's VERY wrong. Here's the correct example: - - ```md - [PAGE STARTS] - [Introduction] - ## Topic - ## Less Important Topic - ### Subtopic - ``` - - ```md - [PAGE STARTS] - [Introduction] - - ## About - [More Information] - - ## Installation - [Content] - - ### Windows - [Content] - ``` - - Note that the `---`s at the beginning have been skipped here. diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/more/git.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/more/git.mdx deleted file mode 100644 index 0f929d6d..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/more/git.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Installing Git -description: Learn how you can install Git on your system. ---- - -Git is software for tracking changes in any set of files (also known as a "version control" software), usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems). - -Let's see how to install Git on different platforms. - -## Windows - -On Windows, Git can be installed via: - -- [Git for Windows](https://gitforwindows.org) -- [Git Scm](https://git-scm.com/download/windows) - -## Linux - -On Linux, Git is probably already installed in your distribution's repository. If not, you can install it via [Git for Linux](https://git-scm.com/download/linux). You can also install it via the built-in package manager on your Linux distro. - -## Mac - -You can install Git for your macOS computer via [Git for Mac](https://git-scm.com/download/mac). Alternatively, it can be also be installed from the Xcode Command Line Tools by installing Xcode from the App Store, or by running this: - -``` -xcode-select --install -``` - -## Using Package Managers - -You can also install Git using package managers. - -### Chocolatey - -If you use the Chocolatey package manager, you can install Git using: - -``` -choco install git -``` - -### Scoop - -If you use Scoop, you can install Git using: - -``` -scoop install git -``` - -### Brew - -If you're on macOS or Linux, you can install Git using: - -``` -brew install git -``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx deleted file mode 100644 index b0b8c7ea..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/more/virtual-environments.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Virtual Environments -description: Learn how to set up a virtual environment for Pycord. ---- - -## Setup - -Sometimes you want to keep libraries from polluting system installs or use a different version of libraries than the ones installed on the system. You might also not have permissions to install libraries system-wide. For this purpose, the standard library as of Python 3.3 comes with a concept called “Virtual Environment”s to help maintain these separate versions. - -A more in-depth tutorial is found on [Virtual Environments and Packages](https://docs.python.org/3/tutorial/venv.html). - -However, for the quick and dirty: - -Go to your project’s working directory: - -```bash -$ cd your-bot-source -$ python3 -m venv venv -``` - -Activate the virtual environment: - -```bash -$ source venv/bin/activate -``` - -On Windows you activate it with: - -```batch -$ venv\Scripts\activate.bat -``` - -Use pip like usual: - -```bash -$ pip install -U py-cord -``` - -Congratulations. You now have a virtual environment all set up. - -## Additional info - -It can be useful to set up a requirements.txt, so you can just put all of your dependencies in there and have pip install it. -For instance, if you wanted to have the latest 2.0 version of pycord and [pytz](https://github.com/stub42/pytz/blob/master/src/README.rst), just create a file named requirements.txt with the following contents: - -``` -py-cord>=2.0.0 -pytz -``` - -And then (in your virtual environment) you can just execute - -```bash -pip install -r requirements.txt -``` - -To keep from committing your virtual environment to git, you can set up a .gitignore file with the following line -(assuming you named your virtual environment venv like the above example): - -``` -venv/ -``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/_category_.json deleted file mode 100644 index c38ea014..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/_category_.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "position": 7, - "label": "Popular Topics", - "link": { - "type": "generated-index" - } -} \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx deleted file mode 100644 index 5377a6c3..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/cogs.mdx +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Cogs ---- - -Cogs, often known as modules or extensions, are used to organize commands into groups. This is useful -for grouping commands that have the same general idea (such as moderation commands). This also helps -to avoid making your bot's files messy and cluttered. - -## Getting Started - -First, you'll need to create a folder to store your cogs, e.g. `cogs/`. - -Then, create a file inside the folder, e.g. `cogs/greetings.py`. By convention, the file name should -be the same as the name of the cog or module. - -We can then create the cog. - -```python title="./cogs/greetings.py" -import discord -from discord.ext import commands - -class Greetings(commands.Cog): # create a class for our cog that inherits from commands.Cog - # this class is used to create a cog, which is a module that can be added to the bot - - def __init__(self, bot): # this is a special method that is called when the cog is loaded - self.bot = bot - - @commands.command() # creates a prefixed command - async def hello(self, ctx): # all methods now must have both self and ctx parameters - await ctx.send('Hello!') - - @discord.slash_command() # we can also add application commands - async def goodbye(self, ctx): - await ctx.respond('Goodbye!') - - @discord.user_command() - async def greet(self, ctx, member: discord.Member): - await ctx.respond(f'{ctx.author.mention} says hello to {member.mention}!') - - math = discord.SlashCommandGroup("math", "Spooky math stuff") # create a Slash Command Group called "math" - advanced_math = math.create_subgroup( - "advanced", - "super hard math commands!" - ) - - @math.command() - async def add(self, a: int, b: int): - c = a + b - await ctx.respond(f"{a} + {b} is {c}.") - - @advanced_math.command() - async def midpoint(self, x1: float, y1: float, x2: float, y2: float): - mid_x = (x1 + x2)/2 - mid_y = (y1 + y2)/2 - await ctx.respond(f"The midpoint between those coordinates is ({mid_x}, {mid_y}).") - - @commands.Cog.listener() # we can add event listeners to our cog - async def on_member_join(self, member): # this is called when a member joins the server - # you must enable the proper intents - # to access this event. - # See the Popular-Topics/Intents page for more info - await member.send('Welcome to the server!') - -def setup(bot): # this is called by Pycord to setup the cog - bot.add_cog(Greetings(bot)) # add the cog to the bot -``` - -You can add any number of commands to your cog, as well as event listeners. However, this code will -not work on its own. In your main bot file, you must add the following code: - -```python -bot.load_extension('cogs.greetings') -``` - -This loads the file `cogs/greetings.py` and adds it to the bot. -The argument of `load_extension` should be your cog's path (e.g. cogs/greetings.py) without the file -extension and with the `/` replaced with `.` - -If you have multiple cogs, you can add them all at once by adding the following code: - -```python -cogs_list = [ - 'greetings', - 'moderation', - 'fun', - 'owner' -] - -for cog in cogs_list: - bot.load_extension(f'cogs.{cog}') -``` - -## Cog Rules - -When using a cog instead of the main file, there are some changes you have to make to your code. This -is because cogs work slightly different from a regular file. - -### The `self` variable - -The self variable is a variable that represents a class. In the case of cogs, `self` represents -the cog. In the `__init__` function, you can see that we have `self.bot = bot`. `bot` represents your -`discord.Bot` or `discord.ext.commands.Bot` instance, which is used for some functions. - -This means that instead of using functions that would usually be accessed via `bot`, you now need -to access them via `self.bot` - -Because we're in a class, all of our commands are methods of that class. Because of this, all of our -functions need to have `self` as the first parameter, where `self` is the cog. Without this, we -wouldn't be able to access our bot instance. - -### Creating Commands - -When creating prefixed commands, your decorator would usually be something like `@bot.command()`. If you're using -cogs, this isn't the case. In a cog, you can't access the bot instance outside of functions, so to -register a function as a command, you must instead use `@commands.command()`. - -Similar to prefixed commands, you'll have to use either the `@discord.slash_command()`, `@discord.user_command()`, -or `@discord.message_command()` decorators for Application Commands. - -Also, when creating a command, make sure that it is indented. If we want a command to be actually -inside a cog, it has to be inside your cog's class. If the command is not inside the cog, -your command becomes useless. - -### Events - -When creating events, you can no longer use `@bot.event` as a decorator. This is because we cannot -access the `bot` variable outside a function. To make an event, you have to use the `ext.commands` -method, `@commands.Cog.listener()`. Events also need `self` as their first parameter. - -And that's it! Cogs are a simple and easy way of organizing your code. Now you can check out how to -create a help command [here](../extensions/commands/help-command). - -:::info Related Topics - -- [Creating a Help Command](../extensions/commands/help-command) -- [Rules and Common Practices](../getting-started/rules-and-common-practices) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Application Commands](../interactions#application-commands) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx deleted file mode 100644 index 3599cc82..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/error-handling.mdx +++ /dev/null @@ -1,383 +0,0 @@ ---- -title: Error Handling -description: All about handling errors. ---- - -import { - DiscordEmbed, - DiscordInteraction, - DiscordMessage, -} from "@pycord/discord-message-components-react"; -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -## About - -When using the library, errors are frequently raised due to various reasons. These reasons range from the Discord API -failing your bot's request due to missing permissions or an invalid syntax error. - -Before going into error handling, it's best that you learn the basic ways of handling errors. A good resource is: - -- [W3Schools' Guide to Python Try-Except Statements](https://www.w3schools.com/python/python_try_except.asp) - -## Basic Handling - -The most basic way to handle errors is to tackle it at the source. This can be done like so: - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -import asyncio - -import discord - -intents = discord.Intents.default() -intents.message_content = True - -bot = discord.Bot(intents=intents) - - -@bot.slash_command(description="Gets some feedback.") -@discord.option("name", description="Enter your name.") -async def feedback(ctx: discord.ApplicationContext, name: str): - try: - await ctx.respond(f"Hey, {name}! Send your feedback within the next 30 seconds please!") - - def is_author(m: discord.Message): - return m.author.id == ctx.author.id - - feedback_message = await bot.wait_for("message", check=is_author, timeout=30.0) - await ctx.send(f"Thanks for the feedback!\nReceived feedback: `{feedback_message.content}`") - except asyncio.TimeoutError: - await ctx.send("Timed out, please try again!") - - -bot.run("TOKEN") -``` - -If you respond within 30 seconds, the interaction will look like so: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Great bot! - - - Thanks for the feedback! -
- Received feedback: Great bot! -
-
-
- -Otherwise, if you don't respond in time, the interaction will go as follows: - - - -
- - feedback - -
- Hey, Dorukyum! Send your feedback within the next 30 seconds please! -
- - Timed out, please try again! - -
-
- -This basic method of error handling can be extended to handle -many other errors including ones raised directly by py-cord. - -## Per-Command Handling - -This type of error handling allows you to handle errors per each command you have on your bot. -Each and every command can have it's own error handler made to handle specific errors that each command may raise! - -An example of per-command error handling is as follows: - -:::note Bridge Commands - -For these types of commands, it is recommended to utilize global error handling -until [the feature](https://github.com/Pycord-Development/pycord/issues/1388) is added. -::: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot(owner_id=...) # Your Discord user ID goes in owner_id - - -@bot.slash_command(description="A private command...") -@commands.is_owner() # This decorator will raise commands.NotOwner if the invoking user doesn't have the owner_id -async def secret(ctx: discord.ApplicationContext): - await ctx.respond(f"Hey {ctx.author.name}! This is a secret command!") - - -@secret.error -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.NotOwner): - await ctx.respond("Sorry, only the bot owner can use this command!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If your ID is registered as the owner ID, you'll get the following: - - - -
- - secret - -
- Hey Dorukyum! This is a secret command! -
-
-
- -Any other user whose ID doesn't match the bot owner's will get the following: - - - -
- - secret - -
- Sorry, only the bot owner can use this command! -
-
-
- -This local (per-command) error handler can also be used to handle the same types of errors that standard try-except -statements can handle. This is done by using the same method as above with the `isinstance` built-in function. - -## Per-Cog Handling - -Adding error handlers per-command can be quite the task in terms of work if you have a lot. If you have happened to -group your commands in cogs, then you're in luck! You can create an error handler that is specific to a cog and -handles all errors raised by commands inside that cog. - -Here's an example of a bot with a cog that implements its own error handling: - -```python title="./cogs/dm.py" -# This cog is for DM only commands! Sadly, we only have 1 command here right now... - -import discord -from discord.ext import commands - - -class DM(commands.Cog): - def __init__(self, bot: commands.Bot): - self.bot = bot - - @commands.command() - @commands.dm_only() # This decorator will raise commands.PrivateMessageOnly if invoked in a guild context. - async def avatar(self, ctx: commands.Context): - embed = discord.Embed( - title="Avatar", - description=f"Here's your enlarged avatar, {ctx.author.name}!", - color=ctx.author.top_role.color - ) - embed.set_image(url=ctx.author.display_avatar.url) - await ctx.send(embed=embed, reference=ctx.message) - - async def cog_command_error(self, ctx: commands.Context, error: commands.CommandError): - if isinstance(error, commands.PrivateMessageOnly): - await ctx.send("Sorry, you can only use this in private messages!", reference=ctx.message) - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -def setup(bot: commands.Bot): - bot.add_cog(DM(bot)) -``` - -```python title="./main.py" -# This code requires the `message_content` privileged intent for prefixed commands. - -# This is the main file where we load the DM cog and run the bot. - -import discord -from discord.ext import commands - -intents = discord.Intents.default() -intents.message_content = True - -bot = commands.Bot(command_prefix=commands.when_mentioned_or("!")) -bot.load_extension("cogs.dm") -bot.run("TOKEN") -``` - -If you use this command in a DM context, you'll get the following: - - - - !avatar - - -
- - !avatar - -
- - Here's your enlarged avatar, BobDotCom! - -
-
-
- -Otherwise, if used in a guild context: - - - - !avatar - - -
- - !avatar - -
- Sorry, you can only use this in private messages! -
-
-
- -Per-cog error handling comes in very handy as you can relegate all of your error handling to a single function instead -of spreading it out across several per-command error handlers or inside the commands themselves. - -## Global Handling - -If separating your error handling is not how you would like to handle errors, then global error handling is the way to -go. This method of handling allows you to relegate all handling to a single function that resides within your bot -instance. - -A non-subclassed bot would implement this like so: - -```python title="./main.py" -import discord -from discord.ext import commands - -bot = discord.Bot() - - -@bot.slash_command(description="Get the bot's current latency!") -@commands.cooldown(1, 30, commands.BucketType.user) -# ^ This decorator allows one usage of the command every 30 seconds and raises commands.CommandOnCooldown if exceeded -async def ping(ctx: discord.ApplicationContext): - await ctx.respond(f"Pong! `{int(bot.latency*1000)} ms`.") - - -@bot.event -async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException): - if isinstance(error, commands.CommandOnCooldown): - await ctx.respond("This command is currently on cooldown!") - else: - raise error # Here we raise other errors to ensure they aren't ignored - - -bot.run("TOKEN") -``` - -If you've subclassed your bot, the `on_application_command_error` event will be placed inside the subclass without a -`bot.event` decorator and `bot.slash_command` will be replaced with `discord.slash_command`. - -The error handling used above will yield this interaction if the command is used again too quickly: - - - -
- - ping - -
- Pong! 49 ms. -
- -
- - ping - -
- This command is currently on cooldown! -
-
-
- -The only issue regarding global error handling is that, if you have a large amount of commands, the global handler may -start to get crammed with a lot of code. This is where all the previously mentioned handlers can take their place! - -## FAQ - -#### Why does the example in per-cog handling have self at the start of its function signatures? - -This is a feature of classes and allows you to reference the cog object as `self` and get access to the bot object -passed at initialization through `self.bot`. - -If this is new to you, we recommend checking out these helpful resources to learn more about classes and cogs: - -- [W3Schools' Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [Our Cogs Guide Page](./cogs) - -#### How many errors can I handle in a single error handler? - -While all the examples in this guide page only handle one specific error and re-raise all others, all of these -error handlers can be extended to catch many errors. - -In [basic handling](#basic) (i.e. try/except statements) you can do one of two things: - -- Explicitly handle the errors you know might get raised and then have a broad `except Exception as exc:` statement - as a catch-all. -- Catch any and all errors via the catch-all statement mentioned above. - -In [per-command](#percommand), [per-cog](#percog), and [global handling](#global), you can use elif clauses with the -built-in isinstance function to catch specific errors. Atop of this, an else clause can be used to catch any other -errors you either don't want to handle or want to relegate to a different error handler. - -#### Can I use more than one type of error handler at once? - -Thankfully, all of these different ways of error handling can be mixed together, so you don't have to pick just one! -For commands that raise specific errors that no other commands will raise, you can use [per-command](#percommand). -For cogs that raise specific errors that no other cogs will raise, use [per-cog](#percog)! Lastly, for errors that -occur frequently across all commands and cogs, use [global handling](#global)! - -However, one important note to remember is that you should always raise the error again in an error handler if it -isn't handled there! If you don't do this, the error will go ignored and your other handlers won't have a chance to -do their work! - -#### What's the difference between slash and prefixed command error handling? - -Although most examples shown here use slash commands, the [per-cog handling](#percog) section presents a prefixed -command. The main difference you may notice is the change in command signature. - -To make the distinguishing features apparent: - -- Slash commands use `on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException)` - as presented in the [per-command](#percommand) and [global handling](#global) examples. -- Prefixed commands use `on_command_error(ctx: commands.Context, error: commands.CommandError)` as presented in the - [per-cog handling](#percog) example. - -This distinction is made as both types of commands need their own system for handling errors that are specific to -themselves. - -:::info Related Topics - -- [Slash Commands](../interactions/application-commands/slash-commands) -- [Prefixed Commands](../extensions/commands/prefixed-commands) -- [Cogs](./cogs) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx deleted file mode 100644 index 9f4210af..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/intents.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Intents -description: All about intents in Discord. ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; - -## What are Intents? - -Intents allow bot developers to "subscribe" to specific events in Discord. This is useful for bots that need to respond to specific events, such as when a user joins a server or sends a message. You could choose to enable all intents or to enable only specific intents that your bot requires. - -## How do I enable intents? - -:::important - -Remember that [Privileged Intents](#what-are-privileged-intents) require you to enable them in the Discord Developer Portal. Verified Discord Bots that don't already have access to them will need to request Discord to allow access. - -::: - - - - -```python -import discord - -bot = discord.Bot(intents=discord.Intents.all()) -``` - - - - - -You can view a list of intents and the events they subscribe to [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). - -```python title="Enabling Intents" -import discord - -bot = discord.Bot(intents=discord.intents.members(bans=True, guilds=True)) -``` - - - - -## What are Privileged Intents? - -Discord defines some intents as "privileged" because of the sensitive information they contain. Currently, there are three privileged intents: `members`, `presences`, and `message_content`. These intents must be enabled in your bot's Developer Portal. Once your bot reaches 100 servers, you will need to verify your bot for these intents to keep working and for your bot to be able to be invited to more guilds. - -:::tip - -Only enable these intents if you need them. These intents give your bot access to quite sensitive information about the users in your guild. These intents are privileged to respect the privacy of users, and you should do that as well. - -Not enabling these intents doesn't mean you won't be able to ban users, but you will be unable to detect when a new user joins a guild, or what game they are playing. The majority of bots won't need all intents. - -::: - -:::info Related Topics - -- [Sharding Bots](sharding) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx deleted file mode 100644 index c3d17197..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/sharding.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Sharding -description: All about Sharding Discord Bots. ---- - -# Sharding - -## What is Sharding? - -Sharding is the process of breaking up your bot into smaller pieces so that it has a better time handling -events. As [Discord's Documentation](https://discord.com/developers/docs/topics/gateway#sharding) puts -it, sharding is "a method of user-controlled guild sharding which allows for splitting events across -several gateway connections." - -Sharding is used only for large bots and takes up additional resources for managing the new processes. -Pycord automatically shards your bot, so the only thing you need to do is use an `AutoShardedClient` -or `AutoShardedBot` class instead of a plain `Client` or `Bot` class. Pretty cool, right? - -Just because you _can_ shard your bot doesn't mean you _should_. While Pycord makes it easy to shard -your bot, it isn't necessary to shard unless your bot is large. Sharding a small bot isn't -just useless, but _harmful_, as it uses extra resources and may slow down your bot. Discord -themselves will let you know when your bot needs sharding, so you won't need to worry about this until they contact you. - -## How Do I Shard in Pycord? - -Sharding in Pycord is straightforward. - -Just replace your `discord.Client`, `discord.Bot`, `commands.Bot` objects -with `discord.AutoShardedClient`, `discord.AutoShardedBot`, `commands.AutoShardedBot` respectively. - -These new objects have been inherited from the original objects, so all the functions from those other types should be present. - -If you want to specify the number of shards your bot uses, -just add the `shards` parameter, along with the number of shards you want. - -## Why Should I Shard my Bot? - -Sharding is very necessary for big bots. While your bot grows, it gets harder for your bot to control -how many guilds it is in and what parts of your code should do what. This is exactly what sharding -handles, it makes all of this easier for your bot. Remember, though, only shard your bot once it's -big enough, and that's at _least_ 1,000 guilds. - -:::info Related Topics - -- [Hosting your Bot](../Getting-Started/hosting-your-bot) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx deleted file mode 100644 index bd2969c1..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/subclassing-bots.mdx +++ /dev/null @@ -1,115 +0,0 @@ ---- -title: Subclassing Bots -description: Subclassing is a popular way of creating Discord Bots. Explore how you can create a Discord bot by subclassing. ---- - -## About - -Subclassing is another popular way of creating Discord Bots. Here, you create a bot by extending a bot class. To some advanced users, this is preferable to creating a bot instance with `bot = discord.Bot()`. - -Subclassing is an intermediate python concept, so we recommend you learn about it before continuing. Some good resources are: - -- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) -- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) - -## Why Subclassing? - -Many developers prefer to subclass their bots for many reasons, some of them being: - -#### Skeletal Frameworks for Bots - -Developers often share their bots code on open-source platforms, mostly GitHub, and allow users to self-host the bot (running their own instance of the bot with the code provided by the developer. Permissions vary in accordance to licences). Here, users find it easier and more convenient to have a small file that imports the custom bot class and runs it, rather than having to go through the code of the bot and find out which file to run. This makes it easier for people not familiar with programming to run and customize the bot, since it often brings down the code to: - -```python title="./main.py" -from src import Bot - -bot = Bot() - -bot.run("TOKEN") -``` - -Here, all the commands are inside the `/src` folder that the user need not bother with. - -#### Running Multiple Instances - -Some developers may need to run multiple instances of their bot (perhaps on different bot accounts). For example, a developer might have a second bot for testing alpha features. This system makes it simpler for the developer, and allows them to maintain multiple versions of the bot in the same directory: - -```python title="./alpha_bot.py" -from src import Bot - -class AlphaBot(Bot): # subclasses Bot - ... # insert any custom configuration - -bot = AlphaBot() - -@bot.slash_command() # adds a new slash command to this subclassed bot -async def alpha_feature(ctx): - await ctx.respond("Alpha Feature!") - -bot.run("TOKEN") -``` - -There are many more reasons to subclass! It's not required, and won't affect the speed of the bot, but it may affect your development process, for the good or for the worse. You don't miss out on any features when you subclass, either. Some developers want the OOP feel, while some just prefer that method and find it easier. - -## Basic Example - -```python -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override the on_ready event - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') - -bot = MyBot() - -@bot.slash_command() # create a slash command -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run('token') -``` - -As you can see, instead of creating a bot object with `bot = discord.Bot()`, we subclass [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). We then create an instance of our new bot class and run it. Notice how we don't need to use the `@event` decorator. - -Here's another example: - -```python title="./src/bot.py" -import discord - -class MyBot(discord.Bot): # subclass discord.Bot - async def on_ready(self): # override on_ready - print('Logged in as') - print(self.user.name) - print(self.user.id) - print('------') -``` - -```python title="./src/\_\_init\_\_.py" -from .bot import MyBot # import the MyBot class from the bot.py file -``` - -```python title="./main.py" -from src import MyBot # import MyBot from /src - -bot = MyBot() # create an instance of MyBot - -@bot.slash_command() -async def ping(ctx): - await ctx.respond('Pong!') - -bot.run("TOKEN") # run the bot -``` - -These are just two ways you could do it. There are ton of other structures you can implement. It's up to you. - -So, should you subclass? There are no limitations you face if you decide to subclass your bot, but, once again, it's up to you. - -:::info Related Topics - -- [Making a Help Command](../Extensions/Commands/help-command) -- [Rules and Common Practices](../Getting-Started/rules-and-common-practices) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx deleted file mode 100644 index 23220b0e..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/popular-topics/threads.mdx +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Threads -description: Threads with Pycord ---- - -In programming, threads are a way to run multiple processes at the same time. In Discord, threads are -a way to keep multiple conversations going at the same time. Let's take a brief look at how to use threads in Pycord. - -:::tip - -Not all the methods and attributes will be covered in this guide, but you can find them in our documentation! -[Check it out!](https://docs.pycord.dev/en/stable/api/models.html#discord.Thread) - -::: - -## Creating a thread - -With a few simple lines of code, we can create threads in Pycord. - -:::important - -All public threads need a starting message. This message will start the thread. However, private threads -(which are unlocked with having your server boosted to Level 2), do not require a starting message. - -::: - -### Creating thread from a message - -```python title="Creating a Thread from a Message" -message = await ctx.send("My Starting Message") -await message.create_thread(name="thread name", auto_archive_duration=60) -``` - -You may also use other ways to create the thread, for example, by using `on_message` events or by commands. - -### Creating thread in a channel - -```python title="Creating a Thread from a Channel" -channel = bot.get_channel(...) # define this! -await channel.create_thread(name="Thread Name", message=None, auto_archive_duration=60, type=None, reason=None) -``` - -A thread type could be `news_thread`, `public_thread`, `private_thread`. You may use it by passing `type=discord.ChannelType.news_thread`. - -## Deleting Threads - -Deleting Threads is simple. You need to get a thread and then use the `delete` method. - -```python title="Deleting a Thread" -thread = bot.get_channel(thread_id) # you could use other ways to get a thread -await thread.delete() -``` - -## Editing Threads - -**Parameters** - -- `name` (str) – The new name of the thread - -- `archived` (bool) – Whether to archive the thread or not. - -- `locked` (bool) – Whether to lock the thread or not. - -- `invitable` (bool) – Whether non-moderators can add other non-moderators to this thread. Only available for private threads. - -- `auto_archive_duration` (int) – The new duration in minutes before a thread gets automatically archived for inactivity. Must be one of 60, 1440, 4320, or 10080. - -- `slowmode_delay` (int) – Specifies the slow-mode rate limit for users in the thread, in seconds. A value of 0 disables slow-mode. The maximum value possible is 21600. - -```python title="Editing a Thread" -thread = bot.get_channel(id) -await thread.edit( - name="New Name", - archived=True, - locked=True, - slowmode_delay=10, - auto_archive_duration=60, -) -``` - -As you can see, threads are very simple. Once you learn how to use them, it's easy to create whatever you want. - -## FAQ - -### Why am I getting a `Forbidden` error when I try to create a thread? - -A `Forbidden` error occurs when the bot does not have the correct permissions to create threads. - -### Why am I getting an Unknown Message error when I try to create a thread? - -Getting an error looking something like `discord.ext.commands.errors.CommandInvokeError: Command -raised an exception: HTTPException: 400 Bad Request (error code: 10008): Unknown Message`? - -There could be multiple reasons, some of them being: - -- The message does not exist -- The message already has a thread -- The message is in channel x, you are trying to start a thread in channel y. -- The message was deleted. - -:::info Related Topics - -<>{/* I can't think of any related topics for this at the moment. */} - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/voice/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/voice/_category_.json deleted file mode 100644 index 8baf3da8..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/voice/_category_.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "position": 6, - "label": "Voice" -} \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/voice/index.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/voice/index.mdx deleted file mode 100644 index 835838c6..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/voice/index.mdx +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Voice ---- - -Welcome to the guide for voice features in Pycord. - -:::caution -This guide requires previous experience with Pycord and Python. -::: - -## Requirements - -The only requirement which is required for voice features is [`PyNaCl`](https://pypi.org/project/PyNaCl/). -The following features are optional: - -:::tip -Opus is also a required library, but this comes with Pycord. -Some hosts may not come with it, though, so remember to always check if required dependencies are installed. -::: - -- [`FFmpeg`](https://ffmpeg.org) - used for sending/receiving files other than `.pcm` and `.wav` -- [`Pycord.Wavelink`](https://github.com/Pycord-Development/Pycord.Wavelink), - [`Lavalink.py`](https://github.com/Devoxin/Lavalink.py), - [`Wavelink`](https://github.com/PythonistaGuild/Wavelink) or any other Python LavaLink library for music playback. diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/voice/playing.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/voice/playing.mdx deleted file mode 100644 index 7a58baee..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/voice/playing.mdx +++ /dev/null @@ -1,149 +0,0 @@ ---- -title: Wavelink Audio Player ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { - defaultOptions, -} from "@site/src/components/DiscordComponent"; - -# About - -Pycord and Wavelink try to keep the playing of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio playing feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/). - -## Starting out - -First you need to run a [Lavalink Server](https://github.com/freyacodes/Lavalink) to connect with. -There a multiple documentations to do this, so we are not covering that here. - -You also need to install the [wavelink](https://github.com/PythonistaGuild/Wavelink) library. - -```py title="Installing wavelink" -python3 -m pip install wavelink -``` - -You will now want to connect to your server via a node. - -```py title="Connect Node with Lavalink" -import discord -import wavelink - -bot = discord.Bot() - -async def connect_nodes(): - """Connect to our Lavalink nodes.""" - await bot.wait_until_ready() # wait until the bot is ready - - nodes = [ - wavelink.Node( - identifier="Node1", # This identifier must be unique for all the nodes you are going to use - uri="http://0.0.0.0:443", # Protocol (http/s) is required, port must be 443 as it is the one lavalink uses - password="youshallnotpass" - ) - ] - - await wavelink.Pool.connect(nodes=nodes, client=bot) # Connect our nodes -``` - -
- -Now you are finished making your node! Next, you will want to: - -1. Making a play command -2. Adding connect events - -### Making a play command - -To make a play command, you will need to make a function to connect and play audio in a voice channel. - -```py title="Play Command Example" -import typing - -@bot.slash_command(name="play") -async def play(ctx, search: str): - # First we may define our voice client, - # for this, we are going to use typing.cast() - # function just for the type checker know that - # `ctx.voice_client` is going to be from type - # `wavelink.Player` - vc = typing.cast(wavelink.Player, ctx.voice_client) - - if not vc: # We firstly check if there is a voice client - vc = await ctx.author.voice.channel.connect(cls=wavelink.Player) # If there isn't, we connect it to the channel - - # Now we are going to check if the invoker of the command - # is in the same voice channel than the voice client, when defined. - # If not, we return an error message. - if ctx.author.voice.channel.id != vc.channel.id: - return await ctx.respond("You must be in the same voice channel as the bot.") - - # Now we search for the song. You can optionally - # pass the "source" keyword, of type "wavelink.TrackSource" - song = await wavelink.Playable.search(search) - - if not song: # In case the song is not found - return await ctx.respond("No song found.") # we return an error message - - await vc.play(song) # Else, we play it - await ctx.respond(f"Now playing: `{song.title}`") # and return a success message -``` - - - -
- - play - -
- Now playing: Never Gonna Give You Up -
-
- -
- -Now that you've done this, the only thing left to do is make your connect events. - -### Adding connect events - -The final step to this guide is connecting the node to your server when the bot goes online. - -To make it, you will want to do the following: - -```py title="Adding connect events" -@bot.event -async def on_ready(): - await connect_nodes() # connect to the server - -@bot.event -async def on_wavelink_node_ready(payload: wavelink.NodeReadyEventPayload): - # Everytime a node is successfully connected, we - # will print a message letting it know. - print(f"Node with ID {payload.session_id} has connected") - print(f"Resumed session: {payload.resumed}") - -bot.run("token") -``` - -Congratulations! You have now implemented voice playing into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/voice/receiving.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/voice/receiving.mdx deleted file mode 100644 index 70f91507..00000000 --- a/i18n/zh/docusaurus-plugin-content-docs/current/voice/receiving.mdx +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: Receiving Voice Samples ---- - -import { - DiscordButton, - DiscordButtons, - DiscordInteraction, - DiscordMessage, - DiscordMessages, - DiscordMention, -} from "@pycord/discord-message-components-react"; -import "@pycord/discord-message-components-react/dist/style.css"; - -import DiscordComponent, { defaultOptions } from "@site/src/components/DiscordComponent"; - -# About - -Pycord tries to keep the recording of audio as simple and easy as possible, to keep making Discord -bots of any kind easy for all audiences. This guide provides simple and easy examples of using the -audio recording feature. - -For users that want extra examples, you can find some in Pycord's -[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/audio_recording.py). - -## Starting out - -The first thing you want to do is make a cache of your voice connections. This is fairly easy; as -it's just putting a variable with an empty dictionary in our code, such as `connections = {}`. - -You will now want to create your command for recording. - -```py title="Record Command Example" -import discord - -bot = discord.Bot() -connections = {} - -@bot.command() -async def record(ctx): # If you're using commands.Bot, this will also work. - voice = ctx.author.voice - - if not voice: - await ctx.respond("You aren't in a voice channel!") - - vc = await voice.channel.connect() # Connect to the voice channel the author is in. - connections.update({ctx.guild.id: vc}) # Updating the cache with the guild and channel. - - vc.start_recording( - discord.sinks.WaveSink(), # The sink type to use. - once_done, # What to do once done. - ctx.channel # The channel to disconnect from. - ) - await ctx.respond("Started recording!") -``` - - - -
- - record - -
- Started recording! -
-
- -
- -Now you are finished making your command for voice receiving! Next, you will want to: - -1. Make your finished callback -2. Make a stop command - -### Making a Callback - -To make a callback, you will want to define the currently undefined `once_done` function inside -our command, like so: - -```py title="Recorder Callback" -async def once_done(sink: discord.sinks, channel: discord.TextChannel, *args): # Our voice client already passes these in. - recorded_users = [ # A list of recorded users - f"<@{user_id}>" - for user_id, audio in sink.audio_data.items() - ] - await sink.vc.disconnect() # Disconnect from the voice channel. - files = [discord.File(audio.file, f"{user_id}.{sink.encoding}") for user_id, audio in sink.audio_data.items()] # List down the files. - await channel.send(f"finished recording audio for: {', '.join(recorded_users)}.", files=files) # Send a message with the accumulated files. -``` - - - - finished recording audio for:{" "} - {defaultOptions.profiles.bob.author} - - - -
- -Now that you've done this, the only thing left to do is make your stop command. - -### Making a Stop Command - -The final step to this guide is stopping the audio recording. This is the easiest step by far. - -To make it, you will want to do the following: - -```py title="Stop Recording Command" -@bot.command() -async def stop_recording(ctx): - if ctx.guild.id in connections: # Check if the guild is in the cache. - vc = connections[ctx.guild.id] - vc.stop_recording() # Stop recording, and call the callback (once_done). - del connections[ctx.guild.id] # Remove the guild from the cache. - await ctx.delete() # And delete. - else: - await ctx.respond("I am currently not recording here.") # Respond with this if we aren't recording. - -bot.run("token") -``` - -Congratulations! You have now implemented voice recording into your bot! Most bots and Discord API -wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes -it easy to make complex bots so that you can get even the most advanced of ideas down. - -:::info Related Topics - -- [Rules and Common Practices](../getting-started/rules-and-common-practices) - -::: diff --git a/i18n/zh/docusaurus-plugin-content-pagesindex.tsx b/i18n/zh/docusaurus-plugin-content-pagesindex.tsx deleted file mode 100644 index 6ca77bb2..00000000 --- a/i18n/zh/docusaurus-plugin-content-pagesindex.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import DefaultLayout from "@site/src/layouts/DefaultLayout"; -import PYCHero from "@site/src/components/PYCHero"; -import PYCButton from "@site/src/components/PYCButton"; - -export default function Home(): JSX.Element { - return ( - - -
- Imagine a place where you can learn how to create an awesome Discord - bot, equip it with Pycord, and have it running in less than a minute. - Imagine a place where you can learn everything about Pycord. Imagine a - guide. A Pycord Guide! -

- Whether you are a newbie or an experienced developer, you will find - everything you need to know about Pycord here. This guide will teach - you: -
    -
  • How to get a brand new bot running from scratch;
  • -
  • How to create Interactions, Context Menus and Commands;
  • -
  • In-depth concepts such as Embeds, Reactions, Help Commands, Paginators, etc;
  • -
  • Popular Topics such as working with Databases, Sharding, etc;
  • -
  • Ways to handle and manage common errors and best practices for bots;
  • -
  • And Much More!
  • -
-
-
- ); -} diff --git a/i18n/zh/docusaurus-theme-classic/footer.json b/i18n/zh/docusaurus-theme-classic/footer.json deleted file mode 100644 index 82aab2e0..00000000 --- a/i18n/zh/docusaurus-theme-classic/footer.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "copyright": { - "message": "Copyright © 2022-2026 Pycord Development, All rights reserved.", - "description": "The footer copyright" - } -} diff --git a/i18n/zh/docusaurus-theme-classic/navbar.json b/i18n/zh/docusaurus-theme-classic/navbar.json deleted file mode 100644 index 473b847e..00000000 --- a/i18n/zh/docusaurus-theme-classic/navbar.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "title": { - "message": "Pycord Guide", - "description": "The title in the navbar" - }, - "item.label.Home": { - "message": "Home", - "description": "Navbar item with label Home" - }, - "item.label.Docs": { - "message": "Docs", - "description": "Navbar item with label Docs" - }, - "item.label.GitHub": { - "message": "GitHub", - "description": "Navbar item with label GitHub" - }, - "item.label.Source": { - "message": "Source", - "description": "Navbar item with label Source" - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 1e13a16b..00000000 --- a/package.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "name": "guide.pycord.dev", - "version": "3.0.0", - "description": "Imagine a place... where you can learn how to add more features to your Pycord bot", - "private": true, - "repository": "https://github.com/Pycord-Development/guide", - "license": "MIT", - "authors": { - "name": "Matteu", - "email": "matteugt@gmail.com" - }, - "contributors": [ - { - "name": "Lala Sabathil", - "email": "lala@pycord.dev", - "url": "https://github.com/Lulalaby" - } - ], - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "yarn build && docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids", - "typecheck": "tsc", - "postinstall": "yarn add react@17.0.0 --ignore-scripts", - "check": "remark docs/*.mdx docs/**/*.mdx docs/**/**/*.mdx docs/**/**/**/*.mdx --quiet --frail", - "format": "remark docs/*.mdx docs/**/*.mdx docs/**/**/*.mdx docs/**/**/**/*.mdx --quiet -o", - "crowdin:upload": "docusaurus write-translations && crowdin upload", - "crowdin:download": "crowdin download", - "crowdin:sync": "docusaurus write-translations && crowdin upload && crowdin download" - }, - "dependencies": { - "@algolia/client-search": "5.57.0", - "@crowdin/cli": "4.15.1", - "@discordapp/twemoji": "discord/twemoji", - "@docusaurus/core": "^3.0.0", - "@docusaurus/mdx-loader": "3.10.2", - "@docusaurus/preset-classic": "^3.0.0", - "@docusaurus/theme-common": "^3.0.0", - "@easyops-cn/docusaurus-search-local": "^0.55.0", - "@matteusan/sentro": "1.4.0", - "@mdx-js/react": "3.1.1", - "@pycord/discord-message-components-react": "==0.3.2", - "babel-plugin-module-resolver": "5.0.3", - "clsx": "2.1.1", - "docusaurus-plugin-sass": "0.2.6", - "prism-react-renderer": "2.4.1", - "react": "19.2.8", - "react-dom": "19.2.8", - "react-loadable": "5.5.0", - "react-twemoji": "^0.7.0", - "sass": "1.103.1", - "search-insights": ">=1 <3", - "webpack": "^5.94.0", - "yarn": "^1.22.22" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.0.0", - "@tsconfig/docusaurus": "2.0.9", - "@types/react": "19.2.18", - "@types/react-twemoji": "0.4.3", - "micromark-extension-mdx-md": "^2.0.0", - "remark-cli": "^12.0.1", - "remark-comment": "^1.0.0", - "remark-frontmatter": "^5.0.0", - "remark-gfm": "^4.0.0", - "remark-mdx": "^3.0.1", - "remark-preset-lint-consistent": "^6.0.0", - "remark-preset-lint-recommended": "^7.0.0", - "typescript": "7.0.2" - }, - "resolutions": { - "@types/react": "19.2.18" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "remarkConfig": { - "plugins": [ - "remark-preset-lint-consistent", - "remark-preset-lint-recommended", - "remark-mdx", - "remark-frontmatter", - [ - "remark-lint-no-undefined-references", - [ - 1, - { - "allow": [ - "voice", - "host" - ] - } - ] - ], - "remark-gfm", - "remark-comment", - [ - "remark-lint-no-literal-urls", - false - ], - [ - "remark-lint-strong-marker", - false - ] - ] - } -} diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..6c9f483e --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,17 @@ +[project] +name = "guide" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +authors = [ + { name = "Paillat-dev", email = "me@paillat.dev" } +] +requires-python = ">=3.13" +dependencies = [] + +[dependency-groups] +dev = [ + "zensical~=0.0.56", + "mdformat~=1.0", + "mdformat-mkdocs[recommended]~=5.2", +] \ No newline at end of file diff --git a/renovate.json b/renovate.json deleted file mode 100644 index 4586a47f..00000000 --- a/renovate.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "local>Pycord-Development/renovate-config", - ":semanticPrefixFixDepsChoreOthers", - ":dependencyDashboard" - ] -} diff --git a/src/components/DiscordComponent.tsx b/src/components/DiscordComponent.tsx deleted file mode 100644 index d784c328..00000000 --- a/src/components/DiscordComponent.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React, { createContext } from 'react'; -import { - DiscordDefaultOptions, - DiscordOptionsContext, - DiscordMessageOptions, - DiscordMessages, -} from '@pycord/discord-message-components-react' -import Twemoji from 'react-twemoji'; - -export const defaultOptions: DiscordMessageOptions = { - ...DiscordDefaultOptions, - profiles: { - bob: { - author: 'BobDotCom', - avatar: '/img/bob.png', - roleColor: '#2cd6f7', - }, - robocord: { - author: 'Robocord', - avatar: '/img/robocord.png', - roleColor: '#9b59b6', - bot: true, - }, - dorukyum: { - author: 'Dorukyum', - avatar: '/img/dorukyum.png', - roleColor: '#2cd6f7', - } - }, -}; - -interface DiscordComponentProps { - options?: DiscordMessageOptions -} - -const DiscordComponent: React.FC = ({options = defaultOptions, children }) => { - return ( - - - {children} - - - ); -}; - -export default DiscordComponent; diff --git a/src/components/PYCButton.tsx b/src/components/PYCButton.tsx deleted file mode 100644 index 26202dae..00000000 --- a/src/components/PYCButton.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React, { MouseEventHandler } from 'react'; -import Link from '@docusaurus/Link'; - -interface PYCButtonProps { - label?: string; - type?: string; - icon?: React.ReactElement | string; - link?: string; - isDisabled?: boolean; - onClick?: () => MouseEventHandler | void; - children?: string; -} - -const PYCButton: React.FC = ({ - type, - label, - icon, - link, - isDisabled, - onClick, - children -}) => { - const assertType = (type: string): string => { - // const VALID_BUTTON_TYPES: string[] = ['outlined', 'filled']; - const finalTypes: string[] = []; - type.split(' ').forEach((type) => { - finalTypes.push('pyc-button--' + type); - }); - return finalTypes.join(' '); - }; - - const ButtonBase = ( - - ); - - if (!link) { - return ButtonBase; - } else { - return ( - - { icon && } - { children && { children } } - - ); - } -}; - -export default PYCButton; diff --git a/src/components/PYCCard.tsx b/src/components/PYCCard.tsx deleted file mode 100644 index 593819f7..00000000 --- a/src/components/PYCCard.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; - -interface PYCCardProps { - // Props -} - -const PYCCard: React.FC = ({ children }) => { - return ( -
-

{ children }

-
- ); -}; - -export default PYCCard; diff --git a/src/components/PYCHero.tsx b/src/components/PYCHero.tsx deleted file mode 100644 index 9672ed69..00000000 --- a/src/components/PYCHero.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react'; - -import PYCButton from './PYCButton'; - -interface PYCHeroProps { - title?: string; - subtitle?: string; - hasLogo?: boolean; -} - -const PYCHero: React.FC = ({ title, subtitle, hasLogo = true }) => { - return ( -
-
- { hasLogo && - Pycord Logo - } -

{ title }

- { subtitle } -
- Get Started -
-
-
- ); -}; - -export default PYCHero; \ No newline at end of file diff --git a/src/components/PYCTitleBar.tsx b/src/components/PYCTitleBar.tsx deleted file mode 100644 index d583720d..00000000 --- a/src/components/PYCTitleBar.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; - -interface PYCTitleBarProps { - title?: string; - icon?: React.ReactElement | string; - id?: string; -} - -const PYCTitleBar: React.FC = ({ title, icon, id, children, ...props }) => { - return ( -
- { icon && } -

{ title || children }

-
- ); -}; - -const PYCTitleBarIcon = ({ icon }: React.ReactElement | any) => { - return ( - - { icon } - - ); -} - -export default PYCTitleBar; diff --git a/src/constants/site.ts b/src/constants/site.ts deleted file mode 100644 index f73d68a6..00000000 --- a/src/constants/site.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const site: Record = { - 'name': 'Pycord Guide', - 'tagline': 'Imagine a place... where you can learn how to add more features to your Pycord bot', - 'url': 'https://guide.pycord.dev', - 'orgName': 'Pycord-Development' -} diff --git a/src/layouts/DefaultLayout.tsx b/src/layouts/DefaultLayout.tsx deleted file mode 100644 index 615bb0da..00000000 --- a/src/layouts/DefaultLayout.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react'; -import Head from '@docusaurus/Head'; -import Layout from "@theme/Layout"; - -import { site } from '@site/src/constants/site'; -// import '../scss/main.scss'; - -interface DefaultLayoutProps { - title?: string, - description?: string -} - -const DefaultLayout: React.FC = ({ title, description, children }) => { - return ( - <> - - { title } - { site.tagline } - - - - - - - - - - - - - - - - - - - - - - - { children } - - - ); -}; - -export default DefaultLayout; diff --git a/src/pages/index.tsx b/src/pages/index.tsx deleted file mode 100644 index 6ca77bb2..00000000 --- a/src/pages/index.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from "react"; -import DefaultLayout from "@site/src/layouts/DefaultLayout"; -import PYCHero from "@site/src/components/PYCHero"; -import PYCButton from "@site/src/components/PYCButton"; - -export default function Home(): JSX.Element { - return ( - - -
- Imagine a place where you can learn how to create an awesome Discord - bot, equip it with Pycord, and have it running in less than a minute. - Imagine a place where you can learn everything about Pycord. Imagine a - guide. A Pycord Guide! -

- Whether you are a newbie or an experienced developer, you will find - everything you need to know about Pycord here. This guide will teach - you: -
    -
  • How to get a brand new bot running from scratch;
  • -
  • How to create Interactions, Context Menus and Commands;
  • -
  • In-depth concepts such as Embeds, Reactions, Help Commands, Paginators, etc;
  • -
  • Popular Topics such as working with Databases, Sharding, etc;
  • -
  • Ways to handle and manage common errors and best practices for bots;
  • -
  • And Much More!
  • -
-
-
- ); -} diff --git a/src/scss/helpers/_functions.scss b/src/scss/helpers/_functions.scss deleted file mode 100644 index 8337712e..00000000 --- a/src/scss/helpers/_functions.scss +++ /dev/null @@ -1 +0,0 @@ -// diff --git a/src/scss/helpers/_index.scss b/src/scss/helpers/_index.scss deleted file mode 100644 index e92a1e2b..00000000 --- a/src/scss/helpers/_index.scss +++ /dev/null @@ -1,2 +0,0 @@ -@forward 'mixins'; -@forward 'functions'; diff --git a/src/scss/helpers/_mixins.scss b/src/scss/helpers/_mixins.scss deleted file mode 100644 index 23d214e9..00000000 --- a/src/scss/helpers/_mixins.scss +++ /dev/null @@ -1,23 +0,0 @@ -@use 'sass:map'; - -$breakpoints: ( - 'small': 320px, - 'medium': 640px, - 'large': 870px -); - -@mixin breakpoint($breakpoint, $context: 'min') { - @media (#{$context}-width: _contextualize-breakpoint($breakpoint, $context)) { - @content; - } -} - -@function _contextualize-breakpoint($breakpoint, $context) { - @if $context == 'min' { - @return map.get($breakpoints, $breakpoint); - } @else if $context == 'max' { - @return map.get($breakpoints, $breakpoint); - } @else { - @error 'Invalid breakpoint context: #{$context}! Please choose from the following valid contexts: min, max'; - } -} diff --git a/src/scss/infima/_overrides.scss b/src/scss/infima/_overrides.scss deleted file mode 100644 index 77f5a75e..00000000 --- a/src/scss/infima/_overrides.scss +++ /dev/null @@ -1,142 +0,0 @@ -@use '~@matteusan/sentro'; - -@mixin init() { - .navbar { - height: 100%; - background-color: rgba(sentro.token-get-raw('surface'), 97%); - box-shadow: none; - // filter: blur(8px); - - .navbar__toggle { - color: #fff !important; - } - - .navbar__items { - display: flex; - gap: 0.5rem; - - .navbar__title { - font-family: sentro.token-get('title-family'); - font-size: sentro.to-rem(24px); - font-weight: sentro.token-get('title-weight'); - } - - .navbar__item { - @extend .pyc-button; - max-width: max-content !important; - font-weight: 400 !important; - - &:hover, - &:focus, - &:active { - --hs-button-ink: #fff; - } - - > span { - font-family: inherit; - font-size: inherit; - font-weight: inherit; - } - } - } - } - - .theme-doc-sidebar-container { - border-right: none !important; - } - - .theme-back-to-top-button { - --ifm-color-emphasis-200: #{sentro.token-get('blurple')} !important; - --ifm-color-emphasis-1000: #{sentro.token-get('blurple-ink')} !important; - - &:hover { - background-color: sentro.token-get('blurple-light') !important; - } - } - - .theme-edit-this-page { - padding: 0.5rem 0.3rem; - border-radius: sentro.token-get('radius-small'); - background-color: sentro.key-create('button-fill', rgba(0 0 0 / 0)); - color: sentro.key-create('button-ink', sentro.token-get('blurple')); - border: 1px solid sentro.key-create('button-border', rgba(0 0 0 / 0)); - @include sentro.prefix(transition, all 0.1s ease); - - &:hover, - &:focus { - @include sentro.key-bind('button-fill', rgba(sentro.token-get-raw('blurple'), 10%)); - @include sentro.key-bind('button-border', rgba(sentro.token-get-raw('blurple'), 1%)); - } - - &:active { - @include sentro.key-bind('button-fill', rgba(sentro.token-get-raw('blurple'), 20%)); - @include sentro.key-bind('button-ink', sentro.token-get('blurple-light')); - @include sentro.key-bind('button-border', rgba(sentro.token-get-raw('blurple'), 2%)); - } - } - - .menu { - padding: 1rem !important; - background-color: rgba(sentro.token-get-raw('surface'), 50%); - - .menu__list, - .menu__list-item { - .menu__link { - padding: 0.7rem 1rem; - border: 1px solid rgba(0 0 0 / 0); - @include sentro.prefix(transition, all 0.1s ease); - - &:hover, - &:focus { - outline: none; - border-color: sentro.token-get('blurple'); - } - - &--active { - background-color: sentro.token-get('blurple'); - color: sentro.token-get('blurple-ink') - } - } - - .menu__caret { - display: grid; - place-items: center; - } - - > * + * { - margin-top: 0.5rem; - } - - + ul { - > * + * { - margin-top: 0.5rem; - } - } - } - } - - .pagination-nav__link { - background-color: rgba(sentro.token-get-raw('blurple'), 0%); - border: 1px solid rgba(sentro.token-get-raw('blurple'), 0%); - @include sentro.prefix(transition, all 0.1s ease); - - &:hover { - background-color: rgba(sentro.token-get-raw('blurple'), 10%); - border: 1px solid rgba(sentro.token-get-raw('blurple'), 1%); - } - - &:active { - background-color: rgba(sentro.token-get-raw('blurple'), 20%); - border: 1px solid rgba(sentro.token-get-raw('blurple'), 7%); - } - - .pagination-nav__sublabel { - display: none !important; - } - } - - .footer { - --ifm-footer-background-color: #{sentro.token-get('surface')}; - --ifm-footer-color: #{sentro.token-get('surface-ink')}; - } -} diff --git a/src/scss/main.scss b/src/scss/main.scss deleted file mode 100644 index 15082bbb..00000000 --- a/src/scss/main.scss +++ /dev/null @@ -1,347 +0,0 @@ -@use '~@matteusan/sentro' with ($prefix: 'pyc', $context: 'theme'); -@use 'helpers'; - -@use 'modules/pyc-button'; -@use 'modules/pyc-hero'; -@use 'modules/pyc-icon'; -@use 'modules/pyc-user-card'; -@use 'modules/pyc-title-bar'; - -@use 'infima/overrides'; - -@import url('https://fonts.googleapis.com/css2?family=Saira:wght@700&display=swap'); -@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;700&display=swap'); - -:root { - color-scheme: dark; - @include sentro.token-config( - $blurple: ( - 'light': #909aff, - 'default': #5865f2, - 'dark': #2f3bbe, - 'ink': #fff - ), - $surface: ( - 'light': #33373a, - 'default': #23272a, - 'dark': #17181a, - 'ink': #fff - ), - $error: ( - 'default': #d93333, - 'ink': #fff - ), - $warning: ( - 'default': #ffa012, - 'ink': #000 - ), - $success: ( - 'default': #1ea33c, - 'ink': #fff - ), - $radius: ( - 'small': 0.3rem, - 'medium': 0.5rem, - 'large': 0.7rem - ), - $global: ( - 'family': ('Outfit', sans-serif), - 'weight': 300, - ), - $title: ( - 'family': ('Saira', monospace), - 'weight': 700 - ), - $subtitle: ( - 'family': ('Outfit', sans-serif), - 'weight': 700, - ), - $code: ( - 'family': ('Fira Code', monospace), - 'weight': 400 - ), - $discord: ( - 'font-primary': (Whitney, "Helvetica Neue", Helvetica, Arial, sans-serif), - 'font-display': (Ginto, "Helvetica Neue", Helvetica, Arial, sans-serif), - 'font-code': ( - Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", - "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace), - 'font-headline': (Ginto Nord, Ginto, "Helvetica Neue", Helvetica, Arial, sans-serif) - ) - ); - --ifm-color-primary: #5865f2; - --ifm-color-primary-dark: #3949f0; - --ifm-color-primary-darker: #2a3bee; - --ifm-color-primary-darkest: #1121d6; - --ifm-color-primary-light: #7781f4; - --ifm-color-primary-lighter: #868ff6; - --ifm-color-primary-lightest: #b4baf9; -} - -html { - font-family: sentro.token-get('global-family'); - font-weight: sentro.token-get('global-weight'); -} - -* { - margin: 0; - padding: 0; - color: inherit; - box-sizing: inherit; - - font-family: inherit; - font-weight: inherit; - - &::before, - &::after { - margin: 0; - padding: 0; - color: inherit; - box-sizing: inherit; - } -} - -h1, -h2, -h3 { - margin: 0; - font-family: sentro.token-get('title-family'); - font-weight: sentro.token-get('title-weight'); -} - -h4, -h5, -h6 { - margin: 0; - font-family: sentro.token-get('subtitle-family'); - font-weight: sentro.token-get('subtitle-weight'); -} - -a { - margin: 0; - text-decoration: none; - color: sentro.token-get('blurple'); - - &:hover { - text-decoration: none; - color: sentro.token-get('blurple-light'); - } -} - -code, -code * { - margin: 0; - font-family: sentro.token-get('code-family'); -} - -html { - width: 100%; - height: 100%; - font-size: 100%; - background-color: sentro.token-get('surface-dark'); - box-sizing: border-box; -} - -body { - background-color: sentro.token-get('surface-dark'); - color: sentro.token-get('surface-ink'); -} - -#__next { - height: 100%; - min-height: 100vh; - display: flex; - flex-flow: column nowrap; - justify-content: space-between; -} - -.content-wrap { - width: calc(100% - 30px); - max-width: 1077px; - margin: 0 auto; - padding: #{sentro.to-rem(81px)} 0 1.5rem 0; - - &--home-page { - width: calc(100% - 30px); - max-width: 1077px; - margin: 0 auto; - padding: 2rem 0 1.5rem 0; - } -} - -.features { - display: flex; - flex-flow: row wrap; - justify-content: center; - - .feature { - margin: 0 0.7rem; - color: rgba(#b4b4b4, 80%); - cursor: pointer; - border-bottom: 3px solid rgba(0 0 0 / 0); - @include sentro.prefix(transition, all 0.1s ease); - - &.active { - color: #fff; - border-color: #fff; - } - - &:hover, - &:focus { - color: #fff - } - } -} - -.call-to-action { - height: 25vh; - display: grid; - place-items: center; - margin: 2.3rem 0; - text-align: center; - - .call-to-action__buttons { - width: 100%; - display: flex; - justify-content: center; - gap: 0.5rem; - margin-top: 1rem; - } -} - -.grid { - display: grid; - grid-template-columns: repeat(1, 1fr); - grid-gap: 1rem; - - @include helpers.breakpoint('medium') { - grid-template-columns: repeat(2, 1fr); - } - - @include helpers.breakpoint('large') { - grid-template-columns: repeat(3, 1fr); - } -} - -.emoji { - -o-object-fit: contain; - object-fit: contain; - width: 1.375em; - height: 1.375em; - vertical-align: bottom; -} - -.emoji.jumboable { - height: 2.7em; - width: 2.7em; -} - -.hidden { - display: none !important; -} - -@font-face { - font-family: Whitney; - font-weight: 300; - src: url(/static/fonts/whitney/whitney300.woff) format('woff'); -} - -@font-face { - font-family: Whitney; - font-weight: 400; - src: url(/static/fonts/whitney/whitney400.woff) format('woff'); -} - -@font-face { - font-family: Whitney; - font-weight: 500; - src: url(/static/fonts/whitney/whitney500.woff) format('woff'); -} - -@font-face { - font-family: Whitney; - font-weight: 600; - src: url(/static/fonts/whitney/whitney600.woff) format('woff'); -} - -@font-face { - font-family: Whitney; - font-weight: 700; - src: url(/static/fonts/whitney/whitney700.woff) format('woff'); -} - -.discord-messages { - font-family: sentro.token-get('discord-font-primary') !important; - // TODO: Figure out why this is necessary, and remove it. - // We Should be able to remove everything below here, but for some reason it doesn't work without it. Also, some - // of it hasn't been added to the component package yet anyways so that needs to be done. - .discord-message { - .discord-author-info { - .discord-author-username { - letter-spacing: unset; - cursor: pointer; - } - &:not(.discord-interaction-author-info) .discord-author-username:hover { - text-decoration: underline; - } - .discord-author-bot-tag { - font-weight: 500; - - } - } - .discord-interaction { - .discord-interaction-reply { - cursor: pointer; - } - .discord-interaction-command { - cursor: default; - .discord-interaction-command-name { - font-weight: 500; - cursor: pointer; - } - } - .discord-interaction-context-menu { - .discord-interaction-command-name { - cursor: unset; - } - .discord-interaction-command-name:hover { - text-decoration: unset; - opacity: 0.65; - } - } - } - .discord-message-timestamp { - font-weight: 500; - cursor: default; - } - .discord-buttons .discord-button { - font-family: inherit; - } - & { - font-weight: 400; - } - } -} - -@font-face{font-family:Ginto;font-weight:300;src:url(/static/fonts/ginto/ginto300.woff) format("woff")} -@font-face{font-family:Ginto;font-weight:400;src:url(/static/fonts/ginto/ginto400.woff) format("woff")} -@font-face{font-family:Ginto;font-weight:500;src:url(/static/fonts/ginto/ginto500.woff) format("woff")} -@font-face{font-family:Ginto;font-weight:600;src:url(/static/fonts/ginto/ginto600.woff) format("woff")} -@font-face{font-family:Ginto;font-weight:700;src:url(/static/fonts/ginto/ginto700.woff) format("woff")} -@font-face{font-family:Ginto;font-weight:300;font-style:italic;src:url(/static/fonts/ginto/ginto-italic300.woff) format("woff")} -@font-face{font-family:Ginto;font-weight:400;font-style:italic;src:url(/static/fonts/ginto/ginto-italic400.woff) format("woff")} -@font-face{font-family:Ginto;font-weight:500;font-style:italic;src:url(/static/fonts/ginto/ginto-italic500.woff) format("woff")} -@font-face{font-family:Ginto;font-weight:600;font-style:italic;src:url(/static/fonts/ginto/ginto-italic600.woff) format("woff")} -@font-face{font-family:Ginto;font-weight:700;font-style:italic;src:url(/static/fonts/ginto/ginto-italic700.woff) format("woff")} -@font-face{font-family:Ginto Nord;font-weight:500;src:url(/static/fonts/ginto-nord/ginto-nord500.woff2) format("woff2"),url(/static/fonts/ginto-nord/ginto-nord500.woff) format("woff")} -@font-face{font-family:Ginto Nord;font-weight:600;src:url(/static/fonts/ginto-nord/ginto-nord600.woff2) format("woff2"),url(/static/fonts/ginto-nord/ginto-nord600.woff) format("woff")} -@font-face{font-family:Ginto Nord;font-weight:700;src:url(/static/fonts/ginto-nord/ginto-nord700.woff2) format("woff2"),url(/static/fonts/ginto-nord/ginto-nord700.woff) format("woff")} - - -@include overrides.init(); - -@include pyc-button.init(); -@include pyc-hero.init(); -@include pyc-icon.init(); -@include pyc-user-card.init(); -@include pyc-title-bar.init(); diff --git a/src/scss/modules/_pyc-button.scss b/src/scss/modules/_pyc-button.scss deleted file mode 100644 index a8f40163..00000000 --- a/src/scss/modules/_pyc-button.scss +++ /dev/null @@ -1,149 +0,0 @@ -@use '~@matteusan/sentro'; -@use '../helpers'; - -@mixin init($color: 'blurple') { - .pyc-button { - width: 100%; - min-width: 57px; - max-width: max-content; - display: inline-flex; - flex-flow: row nowrap; - justify-content: center; - align-items: center; - padding: 0.4rem 0.6rem; - font-size: clamp(#{sentro.to-rem(16px)}, 7vw, #{sentro.to-rem(18px)}); - font-weight: 700; - border-radius: sentro.token-get('radius-small'); - cursor: pointer; - -webkit-user-select: none; - user-select: none; - @include sentro.prefix(transition, all 0.1s ease); - - & > * + * { - margin-left: 0.5rem; - } - - @include _text($color); - - &.pyc-button--inverted { - @include _text('surface'); - } - - &.pyc-button--outlined { - @include _outlined($color); - - &.pyc-button--inverted { - @include _outlined('surface'); - } - } - - &.pyc-button--filled { - @include _filled($color); - - &.pyc-button--inverted { - @include _filled('surface'); - } - } - - .pyc-button__icon { - display: grid; - place-items: center; - font-size: sentro.to-rem(24px); - vertical-align: center; - - > svg { - vertical-align: center; - width: sentro.to-rem(24px); - height: sentro.to-rem(24px); - size: sentro.to-rem(24px); - } - } - - .pyc-button__label { - font-size: inherit; - font-weight: inherit; - text-align: center; - } - } -} - -@mixin _text($color: 'blurple') { - & { - background-color: sentro.key-create('button-fill', rgba(0 0 0 / 0)); - color: sentro.key-create('button-ink', sentro.token-get('#{$color}')); - border: 1px solid sentro.key-create('button-border', rgba(0 0 0 / 0)); - } - - &:hover, - &:focus { - @include sentro.key-bind('button-fill', rgba(sentro.token-get-raw('#{$color}'), 10%)); - @include sentro.key-bind('button-border', rgba(sentro.token-get-raw('#{$color}'), 1%)); - } - - &:active { - @include sentro.key-bind('button-fill', rgba(sentro.token-get-raw('#{$color}'), 20%)); - @include sentro.key-bind('button-ink', sentro.token-get('#{$color}-light')); - @include sentro.key-bind('button-border', rgba(sentro.token-get-raw('#{$color}'), 2%)); - } - - &:disabled { - @include sentro.key-bind('button-ink', sentro.token-get('#{$color}-dark')); - @include sentro.key-bind('button-border', sentro.token-get('#{$color}-dark')); - } -} - -@mixin _outlined($color: 'blurple') { - & { - background-color: sentro.key-create('button-fill', rgba(0 0 0 / 0)); - color: sentro.key-create('button-ink', sentro.token-get('#{$color}-ink')); - border: 1px solid sentro.key-create('button-border', sentro.token-get('#{$color}')); - } - - &:focus { - @include sentro.key-bind('button-fill', rgba(#fff, 10%)); - @include sentro.key-bind('button-border', sentro.token-get('#{$color}')); - } - - &:hover { - @include sentro.key-bind('button-fill', sentro.token-get('#{$color}')); - @include sentro.key-bind('button-border', sentro.token-get('#{$color}')); - } - - &:active { - @include sentro.key-bind('button-fill', sentro.token-get('#{$color}-light')); - @include sentro.key-bind('button-ink', sentro.token-get('#{$color}-ink')); - @include sentro.key-bind('button-border', sentro.token-get('#{$color}-light') !important); - } - - &:disabled { - @include sentro.key-bind('button-ink', sentro.token-get('#{$color}-dark')); - @include sentro.key-bind('button-border', sentro.token-get('#{$color}-dark')); - } -} - -@mixin _filled($color: 'blurple') { - &{background-color: sentro.key-create('button-fill', sentro.token-get('#{$color}')); - color: sentro.key-create('button-ink', sentro.token-get('#{$color}-ink')); - border: 1px solid sentro.key-create('button-border', sentro.token-get('#{$color}'));} - - &:hover { - @include sentro.key-bind('button-fill', sentro.token-get('#{$color}')); - @include sentro.key-bind('button-border', sentro.token-get('#{$color}')); - } - - &:focus { - @include sentro.key-bind('button-fill', sentro.token-get('#{$color}')); - @include sentro.key-bind('button-border', sentro.token-get('#{$color}')); - } - - &:active { - @include sentro.key-bind('button-fill', sentro.token-get('#{$color}-light')); - @include sentro.key-bind('button-ink', sentro.token-get('#{$color}-ink')); - @include sentro.key-bind('button-border', sentro.token-get('#{$color}-light')); - } - - &:disabled { - @include sentro.key-bind('button-fill', sentro.token-get('#{$color}-dark')); - @include sentro.key-bind('button-border', sentro.token-get('#{$color}-dark')); - } -} diff --git a/src/scss/modules/_pyc-hero.scss b/src/scss/modules/_pyc-hero.scss deleted file mode 100644 index 9d249973..00000000 --- a/src/scss/modules/_pyc-hero.scss +++ /dev/null @@ -1,82 +0,0 @@ -@use '~@matteusan/sentro'; -@use '../helpers'; - -@mixin init() { - .pyc-hero { - min-height: 47vh; - display: flex; - justify-content: center; - align-items: center; - padding: 5rem 1rem 3rem 1rem; - background: linear-gradient(25deg, #{sentro.token-get('blurple-dark')} 0%, #{sentro.token-get('blurple-light')} 100%); - color: sentro.token-get('blurple-ink'); - - .pyc-hero__wrap { - display: grid; - place-items: center; - width: calc(100% - 40px); - max-width: 1077px; - margin: 0 auto; - - img { - width: 100px; - height: auto; - margin-bottom: 0.7rem; - user-select: none; - } - - h1 { - text-align: center; - font-size: clamp(#{sentro.to-rem(28px)}, 10vw, #{sentro.to-rem(34px)}); - } - - .pyc-hero__subtitle { - text-align: center; - font-size: clamp(#{sentro.to-rem(16px)}, 5.3vw, #{sentro.to-rem(18px)}); - font-weight: 300; - font-family: sentro.token-get('subtitle-family'); - } - - .pyc-hero__actions { - width: 100%; - display: flex; - flex-flow: row nowrap; - justify-content: center; - margin-top: 1rem; - - .pyc-code-block { - width: 100%; - display: flex; - justify-content: space-between; - align-items: center; - padding: 0.8rem; - background-color: sentro.token-get('surface'); - color: sentro.token-get('surface-ink'); - border-radius: sentro.token-get('radius-small'); - user-select: text; - - code { - font-size: sentro.to-rem(16px); - font-family: sentro.token-get('code-family'); - white-space: nowrap; - - &::before { - content: '$'; - margin-right: 0.7rem; - } - } - - .pyc-button { - min-width: auto; - margin: 0 0.3rem; - padding: 0.3rem; - - .pyc-button__icon { - font-size: sentro.to-rem(16px); - } - } - } - } - } - } -} diff --git a/src/scss/modules/_pyc-icon.scss b/src/scss/modules/_pyc-icon.scss deleted file mode 100644 index 61e1d00d..00000000 --- a/src/scss/modules/_pyc-icon.scss +++ /dev/null @@ -1,16 +0,0 @@ -@use '~@matteusan/sentro'; - -@mixin init() { - .pyc-icon__link { - color: inherit; - } - - .pyc-icon { - display: inline-block; - padding: 0.25rem; - - svg { - vertical-align: top; - } - } -} diff --git a/src/scss/modules/_pyc-title-bar.scss b/src/scss/modules/_pyc-title-bar.scss deleted file mode 100644 index 56ada531..00000000 --- a/src/scss/modules/_pyc-title-bar.scss +++ /dev/null @@ -1,31 +0,0 @@ -@use '~@matteusan/sentro'; - -@mixin init() { - .pyc-title-bar { - display: flex; - flex-flow: row nowrap; - align-items: center; - - > * + * { - margin-left: 0.5rem; - } - - .pyc-title-bar__icon { - display: grid; - place-items: center; - font-size: sentro.to-rem(30px); - color: sentro.token-get('blurple'); - user-select: none; - - > svg { - width: sentro.to-rem(30px); - height: sentro.to-rem(30px); - } - } - - .pyc-title-bar__title { - font-size: sentro.to-rem(28px); - line-height: sentro.to-rem(50px); - } - } -} diff --git a/src/scss/modules/_pyc-user-card.scss b/src/scss/modules/_pyc-user-card.scss deleted file mode 100644 index e646a888..00000000 --- a/src/scss/modules/_pyc-user-card.scss +++ /dev/null @@ -1,102 +0,0 @@ -@use '~@matteusan/sentro'; - -$img-size: 100px; - -@mixin init() { - .pyc-user-card__section { - margin-bottom: 2rem; - - .pyc-user-card { - width: 100%; - padding: 1rem; - background: sentro.token-get('surface'); - border-radius: sentro.token-get('radius-medium'); - display: flex; - flex-direction: column; - box-shadow: - 0px 3px 3px -2px rgba(0, 0, 0, 0.275), - 0px 3px 4px 0px rgba(0, 0, 0, 0.215), - 0px 1px 8px 0px rgba(0, 0, 0, 0.195); - - .pyc-user-card__wrap { - display: grid; - grid-template-columns: $img-size 1fr; - grid-gap: 0.7rem; - - .pyc-user-card__img { - width: $img-size; - height: $img-size; - position: relative; - display: grid; - place-items: center; - overflow: hidden; - border-radius: 50%; - border: 2px solid sentro.token-get('blurple'); - background-color: sentro.token-get('blurple'); // Prevents gap between image and border - user-select: none; - @include sentro.prefix(transition, all 0.1s ease); - - &:hover { - border-color: sentro.token-get('blurple-light'); - background-color: sentro.token-get('blurple-light'); - } - - img { - z-index: 1; - } - } - - .pyc-user-card__info { - .pyc-user-card__name { - font-size: sentro.to-rem(20px); - } - - .pyc-user-card__role { - font-size: sentro.to-rem(14px); - } - - .pyc-user-card__quote { - margin: 0.5rem 0; - font-size: sentro.to-rem(12px); - white-space: pre-line; - - &::before { - content: open-quote; - } - - &::after { - content: close-quote; - } - } - } - } - - .pyc-user-card__links { - margin-top: auto; - - .pyc-user-card__links__wrap { - width: 100%; - display: inline-block; - margin-top: 0.7rem; - float: bottom; - - > * + * { - margin-left: 0.5rem; - } - - .pyc-button { - max-width: calc(calc(100% - 0.5rem) / 2); - } - - .pyc-user-card__link { - @include sentro.prefix(transition, all 0.1s linear); - - &:hover { - color: sentro.token-get('blurple-light'); - } - } - } - } - } - } -} diff --git a/static/.nojekyll b/static/.nojekyll deleted file mode 100644 index e69de29b..00000000 diff --git a/static/CNAME b/static/CNAME deleted file mode 100644 index 64018b2b..00000000 --- a/static/CNAME +++ /dev/null @@ -1 +0,0 @@ -guide.pycord.dev diff --git a/static/fonts/ginto-nord/ginto-nord500.woff b/static/fonts/ginto-nord/ginto-nord500.woff deleted file mode 100644 index 19faec3aa5a13fe1d116368803e50c5dd00869b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67068 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 BAB+G1 diff --git a/static/fonts/ginto-nord/ginto-nord500.woff2 b/static/fonts/ginto-nord/ginto-nord500.woff2 deleted file mode 100644 index f87df1c72423f80c73d9f482bdcb0af1a490611f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54184 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 diff --git a/static/fonts/ginto-nord/ginto-nord600.woff2 b/static/fonts/ginto-nord/ginto-nord600.woff2 deleted file mode 100644 index 5cd55b8d6c27e04bd492554e367088072fee0797..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52300 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

iqkq5U%7whZgWG1+UC(V8B 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 diff --git a/static/fonts/ginto-nord/ginto-nord700.woff b/static/fonts/ginto-nord/ginto-nord700.woff deleted file mode 100644 index aab70242cf6af3e8316c1eb4aeb1a230bc13287e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71160 zcmZr$b8shJu>HlhZQI7i+1R$7jkB?BJK5N_ZQHi(&2Im3eh`kXKvHLFZ}yX~=7$H~2LQmM zWwWEsm>D?!#I{lXaQ?48L^Er5)1QY+1ORe_0YIrGn@6n`<|YQl06;PB50Cvn5Ge}E zn*TU|YKi=@34cI}kORAFZsYWmvsf7b0ObS#pjvFkxihWpjDC3kcz=9b{{gHtQ`*MB z?I-WQ|JwU6mJk#Y5y;lS#^k5wm7f>-!v#xgFB8tQw{vv*sSovsgYqBmy9K~(?_ly1 z+cffHSN~u%uQQ7`O2s4Oi{|Rw6zf3xtVrVRXU!>LHbmB1{NgT#f)y8 zbeu?z^L2|8zb3_E2glU3uKoa)g~e;1mW4(1(zX1mva0J$b^U#7{aJUVc}jB1=WM|M z3|7V0wN7fszNW4Xm^74S?_M8}0dABEhWP|Vgu6?M!k4_sqf1L3uKF)^Co2MHRn5x1 zZl!Q~u}c;O&{L%i^pdec#u;j0yBreoysaT4>`Qn;%DG(=g2d?88Kgr%U(Q1R!X-mE zP5q_On9I)syvqw3ml}-dr2f0b$MlFJJ}i(SQtc)Pi-u=VdG-(aYldYG_FMVxTFQ4~ z*LyRMuFEvv#au!Jpa&%F#j1DKk5d;{ViCcYc81s5-t<19rUK3bl!?8!!AZDggnXR8 zJyA7YC6(c%qzG||`IxN0zl{Ubpl$x|!?@2gz?kIfB}_Z>A$ z?C*%3V;rg=`=VXWJ;p$igF`c45xI`?dXl47euN8=x%<0))}zE?az`qV6u8UH&ryz# zQ5t@fpjV3KO_#i0TtcBpJ5dM+Od%*c_#HSFp-7KR+!>(^8v1^sln)-OUv^in&Vq$@ z>_Y2Kt&3k%vboB**tjPQ506JYj#;b52;7J`r#B8?aBA$j0$g#E1($b$ug4=gJnb$j z)I2WAUu+*dGNOw&oi_XX85}Ws%_`qse>z^Xd;oY7L=k#$tjqvTQi4OFj1Ycn{J)7S z9S^l9QXGMka(r;cEPi3G&eUKnVn8yvJ{G1&OIq2_9a<;nQqmsxYit=D)f(-qsV)f& z^O$(VJ;W2u!;m=q0O5^Dg*fxb;2N?aw-jcxb>y8LsIWMP!&-3bisKnM-RZ6Rg=!tQ zBau*vefQCCfi5nU2~-?H&j@s@OwsD#?t>KcPDHNgpc$7- z=qJ8${jzPwAneh?klVZVVywTgr+l5zj*}Is|3Sa%tCl*xTA8xcO^Z>PeRQv;Ch$Ud z@vSQD02Z)#*!|ixzD@XB){5bUzW74dE3q-#a_j& z`wzzA)+Tv$pCl$cNL|;LbZAI-2G>_4^6X+e?Pp(d1%xpEDhxn&A@1m)kidgaP5C2X zW&!cGr3-6r51_W;Pi|af6=~L`avEc1=&10*M3qHRZ)AExwtD^ zSnR!x4b6_Ud+n{P1>iit`lL;uLZ?aV>6u#CzfEmj=CA+uXo|LB&>Jb7>+C#LzDgTT z9x8nX#m~H2dEBk24m}q{%zY=~#3;tf>o?p0(G!G?#&eYIyJx?Md*(BcI)r=UMIj_l zJ*cJqgMC66(I4-Q`@B+@c~`{_p1D^sJr?MEr0IT`Btv)j=oaZwTR;BAL+UYTR&A>n zJWpYNaZmSxN5LMYKEVY`aWo=gSd?xT$u>g7q4+y8k^8fNk&XJAo?;$KpfpxYfSp^D z-UOTe+Qa(0YVN?ktlA3X+r7z0+O$LPq zqNXhkK9aFB5xZe}Sr%D>d?xBj8 z2^tgT&Kb>D?m)vhWR?%Ll+K+22Ue7(!*ptFW$6BwoHIjrY_MfPNHf%0tU!cX-k%_j zr!$Z6-F6A=J$s@rtZ^=spuy4#I|hkkI?nFq5|Ekr@?>U3-jtIJ`TXG={=@ls8<*30A4q&R%g?DjaS(lZvn?fz&Vp;k)# z$*!aE{9{z8OVQ)_sc(k_0NG08Gh}D5EeaH)+-`K>bD|%4r?^jaM;mHP*_YV%!u2cD zZm(zuB-9W6%uMUx^C^8gvmVQ9qy^S23jlqBqrqhPS~5`LGTj>Kxt!;bJvP#3a5Y@4 zck^(L(CIRK5@FkUyeodS=5FeAT^@62w(Y#Eb1k4s{i$L5vNWk>OY`*k^+E}#0mRf@ z5`Fw_gCD+G2&+?s^H3?wMrBm%nzz2SC>uO7 z8b@YHmrzHx(1v6p1s7M195pUrlszmZUfVGlrk_^St7Nl$qQJ;rUB_XetSIiuVQ7t=txvynaP)YNv7 zxet&XrGiJTJ9R6jPDUobX5IWlqIw2p44 z!ma)|o_wJoVgnXDBR!-f-itaqrb!Er75EdJeI;x0jQL2yYA5 zdc7Hbc`#G72mNuz!!!Dpup**1e0# z*f4ThqFjJ@6``zW{j|G(K*F6g?ZMNmt*2ywS3L ze|S|EoH%6FYH$X$_tH@CYJC8F&uKC{t_$#2XCs_dRtdHnY<0DZSy;V8G!*~b&U7#! z1K1A7*<5xY4-T_VEau2OM%9v^gMM zlPbYz{FNK4SfGcVC>T{1f_lWy5zWNpID{!3Ev|qT#Fyp9-LWLTMyTJFm|aJ}^w-kj zDiEm$w_+C6zz&)X!Epg>_b)Og^sXq8psnXJyNR5R4|tE~FCN?O1f6vE&D&NEg4eO$ zb=wWK_u4jboShuiR#Bj8Xk+@d0X#$h@<`-*ddXWpWPj6H%FkF{1+0eM8DpSmv`Q-D zd=(Vvppuz+nH!V~ZT3x_6RHyUpX5033m+up-j3~qklzd0@na4a_=?8>h?U5`5-wa-A#=qP4FICLAZ|GEqkI@vFV z)wCjHIzsVEm&+h=8AEzuub?*{pBtkQ`85|I_N6ZcCd>CINiGBZbsX(d)|1M$B{iI&!?Z!S*zd9*rBlG?2k3-<# z9X{jEK(4F4lwul(jRW0c3?mX+Mz~A0)T&M)g+2bo{J^>T0dw9js78gL;|2bH4=1Td7p3Dt3EV5y zfWIh?W4B0bgD|G{8`xIHM`a`Y#s|l>uAh_^iNl^tLf%q{2XYRUDSeBMnHHV7!Ckgp_Jhkm9J7ssbfAO*!PyI| z$?4VueWPNeZl0S2HlDn150m}Nn0j~L9@2^P(PHY|yEzTK*HUrVEAcRPI;mLhh|H=C~tyh-sJ75 zbUNE-G3H9(v-tY6a+&W%>Uiq&p-YD6?^pWPYbM0@+r_Hurq@~LaMPFl$JBcBrUEW# z53naS2hMP}vQfaniZCf|7$Y4^RS~aDk7E!A!D+U-qdZu(ZA&Wd*%@!!?i}$oa#MY- zJ6lLu>atGKO5H|U>|i5&pkwsyB8|9IKS+>tSr^OfY-Ud5^36Ii*1GffNjs6(yCKaa zPUkviZ;)jsWFpD>7)rCd7r^ii0e*Rxx>`Z=hV6v245(f*6%$=jt;K}FoL#0vl#Zk! zAEhr1suV9zlhL7zLJPhQDBqRdkUZbQF4mfS;!jsi=0E?yy_LW+(yBuIk{`k1w&=-O0l zMvU{}qrBQ^Yb*~>MsD=;IFcaM*g6U&W#3&NUl}ho+9RW-;TP^iPdWRhOaFdn+XoWE zIEkTWV3ZA`q+yE5l92Ry|EhtUpFAE%eMS=ikdHxOfv>`^X}(_|Smxx}JUn)5bOe>S z1nIotn2a;|erGf2L34G`T93A{CnQ*e`yGr#*JI{9kNhFF!oGxDt1#I@1{00}ibvix4XUUWQzN)m-Lgl-hHxzG5h~>?^Ka7tkIKRu`&#)CFf^dIl z372@K_FY?Sj8MM!oaM9gZ3JZnu($r_da9k%RqEgcA%ORxrZh9jTPlHR6^37{5%?6x zp@+3Uzl)Uuep|o_y!%)xiIu`^lZa9)?1%m#O7f&!lk%1V_>3OIKz1{VB|$yo@|W3& z-&IH3ijqq3;?{32plmK;OnQ-@&$DLjd%!Z0g=f7G;`Y{-6WjYc2H`A6>eemkZ?)mM zfY}W?b4|q)y$goKGv!Om*AhxzC=*iDaANf_)tU+~7gR>p22?*`jx(;DA`ee{r)v}$ z;idT7`!E6UDY}9|xf54|GYtvf+^Sh(HTP$}R>9uqfwWAA&r`iF@}!CCys(ZZIq|*; zbk_2524cXUqtH;BL-xeW43e0h%#!(LB(3&F_r7&>pm4p40a?>|H>#%_Jvf&`;+ISZ zlgllE;?ND8B^DUnJLIH>veu>?`=e%0)U!(E}RO`}_!95yfO0$WTj>u<57ALO^7HK zuuLS!WmuyLl^#h1UxYoG^`}Z{#@&kkBvswl;j0Fmp35hV0E1vspZD za!zt`b!aik{C~y$XJ@id7OuYZkSOJ3RREH+)?0|hi>I9gdb1J+b>~0vG4UhD47=hJ z$U(1Czt1qN+rH9%afcLae<@B8sT?o|{VoWZu#B0@UK?I1TWqJL4aN{g7#I-3(J3-t`>RVZmssGM(8WgdIrPP{EHs02d2qrhz|+z6Wz zVNR#H=X0eL7*?eji9xxfB@Ooc>i zj=2eVbq$jLrQqLbRym4lpxj|t~_p!Gtu?x)|Cw7l7izdOqzehDh)vcZM zMwH{B`*GuupGA#jYNXbx?DsQA#T*$iS)F{HNJ#|!jJmQG0V)+r zNUN#A4oPKOm}(A1w-Jj~POcj$xb#Q~Z&Tw(*@T3YGbT<2B!p|fx#8se{4lc^Mb_Mi z#fyTk(NJwGBzdjLKh&7HIY|gKEJa(z`Ir-OU$NFusRWTH%d=ZfCHTAkn0wh>x_YU{ z`1HF1$8^3NgU=D1OFzvqETemh--sHC*WpvmjU<4$qkn`7vYX$CpU0;Tw!n4m#NocR zA8?{XS4j`0D3dcOfvr@eiP|i)CcQ0vhou+XGY^D8;uVV~d)XIIs)%F6#U25QwN z42geaF3g{lE5(d>W6`Lv#?^cire4tDs4GO1x->Pi+oeAtsJ;G&16Kb$qTZ5ehjh$J zArXV!0AYx0-HU4rRi=5L6*|2T(~A8-=JD4zTS!iiJ<4`K{BSE@9XYC64aUJB$m8s; zA3?|akjDG&h9pJrtHSF&o9ugn;Jc@9^P1b~M8}oEbLU0xs{POVRMxuP2E+|O{NOJJwI`68_2Z0iF1^yL61f5ZFAaUE&suRaCv% zbRpT?j*&7qqT=L1$HL5R+AHHMX;-!RiaFIcMwSxe{IE+X%Tw_rYT(9=0&x~_} z1W6*)&c+b)=>2ssFv)LS?tP$dTE-VqCs(9H+E&#EOv9rJ){tTIm{V()SjRM3E%fOY z=f;wHWtYZAlTfUx$72q~Lm+T8o3m`Zqj4`Ii|Y!Cwcc%M-Yu?fi>hWRI(cz1Ru>Ku zwGSmSLzS=_EW(y&mER!XG?65lQRgh07brH7^>LNVq#N}+YrrzBk29OzD_7SwPkxcB z+ju6J_gs}+^7Ek_h(sn%;*{Smz_lZlV=)J=;lrlYrJ>PL6$}Ojt{K+7cAOuLzs~7* zXE@dy)m`EwKt*|SeC60w?nx2wJsrMpwci}Br7yw%b!R(y_Zj^TVJcO(AV|oLi@I6s zq$3<3dbv&ZeU$Cz@tUx3J~k^$(+*}jySQo5wi-dcj6`w?1hHO3g_upG{-Zop3q^hk zpPcjGj$rPQ%n?hE*#lLG$a>oJxQA}*--UR}Mk!p!p(56`4P|&ZiC5v}?VWrN{i~C- zjH0F&bAs12VTOuM>449)N4bkTCiED7g)FyGc!K+#y!u9*e7ldVyetgHU^O)sFA>TI z=3bAscFy{jE6!TP+Vlg**p9zw;6+a>#u{VL(sC``vV%ml^ysWIGx+q4oTd}$v&!fR z>7mch&oPfNRoaz467o;YRlf)xJj!rCirF>e?7olJ&jw$*owvZr)4?GlL_Luu$T52qZ$4;A~EYK?R-!A>2X`9FG)jR#y+4FVx zw@0`4t?pCZ_vnTzU`Rpxvpa3ofjZeKUiOnzXTDT3o=l@on^P^aJ<8?}{YY}T^}IC4 z0J=VG(eg}J?9;4NNwB_zIZ-SyIaC2g0{%z};#`2*w|jlNV|%k}GKk(Qh3`eyc7@AU z$8%BVGtPbjsl|p-i7JHmKF)lCX$sx>F;FSgs*%IDg@70QT`sDNmYLvQk3aKnj=nq@ zz(TwN?FIH;uvwy{lRyh0amH)PL1@J{Yh_BrT0vi%-w)Zx`?N)|D=+^S{^$dsKXEOYLhENGTkc$q^SpQ+h*jEJM`yR2J~j044KNL!D5 z`e9apqP_4m7+=zyjZQO-BARrwUpeh2*L@G?AInz3Y#GXuQIfq#h>qgWLu7q+vj|=} z*fp{jV+MIqByqWuniBu@rCGO<6~iJF56+_EB_kJ2*7mWN0}@{OcGsPMt2nZZw)};i z<@J}ail!gY{5-FTD6(rB_LjWp(S1F0xsdzpZ^++$qcF;u@d-jkB8)!(J=@FBT4l5?Mq_6Qi^;Y8x%D=2Q#5~w2 zg9ty0TXA&Kh0_WY!+ncbbc{&&#ivqj3#F+nP;GTf!hcb}p|{rJH#5B$SEH1i8&0bc zfa)v;`GD+vVEX}IL3_4^Boamto>WgxS}`YTpti()?jFI;>9^$2JvKwz^29>G!@)~} zi8j$Y=i5>|7tPZwNfPd2iY3yi!i_ep7?V)$cEYaNLMW<$$tAbJm+#c#$PErJg!|X| z1GcMg-X}Jv zFeu7Wmg=KYlEJP3Pp<(3IzEU+tOF6WOyc!K_)THsU5F&SZ3rmj*%WAq?a^)u(u({oLrz`*q*7Y^_><5IUM|ah;RD-NKXM2POpt$ES zxeNWjh!tQ_!_A5lxw#}d2FrdYu!sJJk7qArTUy)MA>=Ymo6)X4bYI1c@4cKJ945vq z_GCTrl}pnmgA-BOAJi7{=GCfmhjX&%jSd7MVpzV@ay<;9PL6~;?bP0$sG z$SHaczHFPq4vV(dhf@&+(Up=MM-eVRev0NLC+amqo*XiovzIQLP6xl*I4fdXb=&^4 zDzh`CgrXT8uwz`hh9*$PWLyIhKMQ~G^swSWXrOUHDEzwOB7fmH08CJi7weO{zOo!+ z0HJF9o>zM*I8r`=Ej3eZiZA281XSZ8FS%Y*o}3>7m5fMK97_xKB@M=&$(3DR*;u%W zZT8?}l}R<+>oie&G}&6Pg9)B#m$7d>e)4|d_&^uh>rrHoA_k>oq@6%DP7-*8OgQFm zd2JLVAe*jo=EvMei3Q}JKW3{xp~yaX2>6FgVTulq8|=;iTD%)FUrW6si(_dT6D7@B z9Kg5`_U)aS5Rs+G_>5wogNlJa8!y4SMmTkzg-vDCp(c?zZCn9M@HVc3lf2!O_uQcG zC}-s=b-uLRX9J^#t+#qxsnzv|qP4Hv_G)6X^Xua{+|5N}l>)-?Sej*u@V#lP&Uo~m zSQpiI5ESA`QwcDrj5|g{?AwROLrU4~$GBoR3~!*!vTAna2TwT=xl#-4Vqf$x;A(gV zGm@Cu@kbk?vtKAMXSU74J(BmVcq8U$97gZnoQEzrH(X#pNF;;~ znT|!dpICS?sHcVYD~=3k=TzKWmAg+);Ho(GaV#|uI?GN z1GBJVIJ&N!J6@5|V9{mC7O-V9d0zZ)ht3j1>TTtFXj}9fVwWOp!?Q1uR|u;yc%#L! zCf=w@E)Wjz6iRJ&<4@Md;$}J|l?*wpK9ZMf<>Jt2Dfhvn0*uW-Orl}sCO#>`|3nR+ zF3M>hOpFyW0g0hNiJ14buzUJ8@yD2aRT-^CernrB3@92K{uUI<@_I@- z3aW~kNw3+aXMZ@rzC`KWxdQN+!zQUX;L3I^)dqwcxdx4r_0X_zEn0yZJA9Xo*Ce1L zDARBeM9C*tbmky0uu9*wU;q==#c0zr zhV`}!-2Di+S=r}j4~Psz)VrT2fl|3Ax52cStDCK=t`wGZrfJFHN5PoW8`WH5^dHiy zdqjgA-iM05(h4xcJ19?D(78y}O7`=BrQi7}>S4&bMDb9BoBp=#LClfLg2VC`3?tLG zt(^N2EUh6z_&KpojcDR)kz0OTYem9r7xhJOrHsJh)9>1Rdc#r!Crt6cQmH4;=3;>t z&N-XsqWn44YidE>(+n#r#;8I=-ktr?{G9ZgKx1O2jfYZS-8biX*%RKM&PWD~d$#C9 z=*HHl(Zyhfym0+tVI4i3zY~EWN~P1Bc_u=+0#<4J+(g0QNIFgwbqlo94gIl%X6g=< z;>OI4sGC&eioLPq@T!7+_DEb+C7x1_l&-Z6+%wFg_|*8cHMLDxdLG0a)pP~SIfTx# zM*X(I8CF&uk~tkANqRy@OnKTsuyb@pxp6d>FQeLqDq>gJR8)55l^0bP*Dzy(&n@d6 zwmpEwnVlK~Knb93;vl#Ac)7T4mWjXl?sj}$8q|;qY$ICy(U~VBsm-U*RrKiqPJCvR zF$V_^hbur}c;axBBiab>*8b1(J`?F_{g9lor_%G{yw$Nu6!&9cUq1Qx2!s-AjgPqZ zyp?7D`nZO0Q6RjFWG94z^>(f#4NSrE_;xLkxLE*-u_igL)I?F(sO$WG|`*rA~6?u4x`ql3}&T*o2v zc*HMeImh=*6vkQYU{lx2xuEoN2YJdLuhAW`(1iRMQ$qRK1Bi01BrF9}I)SA`RFFy) z^G)%FX?XFnITPA&?_FGS#@WeXrT?1$Oju{I$wl@#L-hShZ|lk%>pFzwE0HTcsb(YQ zf?^?F_$BfXN|O8_RDhRAXpG-r_d8tdqQloH6EB%FLq=C313i1!raQ&+CX!X7<30pQZS zGs_iccEbF$ok*)qn-H}Bw~-I7OmF~ zP|YV{@gxWVEq5-{X$pU^04+WHr-5DQ4I(iz@wK*e6E?$rNp8xB>fNRuwjakf={2zY zy=w&jWJo21gY#-}={d%Mwt|bfW?BNc2tT@)MM`+KCv>5aY<;Ybn)f=*i4DEICt+LK zGmB?Fc+d^he0Suy^GgadVY-J2b!SBL!Y{}@YQbg0B(3Pd7;S7`)5YUag%pQE9aWdN z9NZiR&#-#1pFc{#q4?SE97y9Lynvz~D6F(=HBTYNZ6Z&awAFn0OprR{xL@d@iI+~z z&>^ow^d7I%D%+w(^uCK3OD8=^gl^X1Qn{~XT8CQgMv&}eS@JYXDZ1^nft&`sP`xCl ziGXOU<4d;IU^ZjX->&EQZyg>%F`3t>ZXxbT1ibA~&vXGPDkLD-r_j)j!Cevho!JVK zeNMm+3dZ7C!8jf+-AkQ=MXP3fSWLP283Ch7C9o~i5_}3wfQ@c@!A%^Z}IK?lo z+#}aCu8I-DQbf^7qR8LilI|Jlg)M26(&c0lU_oW!8LbUlT4&_6k3~&ocm1P>hTQjB z$H(_yDR6*T8%9ShI~mjx&`?=rx*W>LR$*{f$632sM32^#0QgjJ>Um|3Lx&ZuD^pE; zmVLHGiU);r`#ko_KbU~nM7YFD;j27=b_fMr_?hd20-blPz8JSA#iE4rkS?@)MCYb5 ztZ#*NJf*rT53yM{+-ftPt!oqgpyorBHDOTv?DNU>smp{fNt}oQn!#@qC>5$~ZGDKN zh<(%~OXbCzE5_V(&OqfQBSB>WcJ!s!3q*dG#MuLLbY9UePx4wENYRV zvYGv|*b|B2bp9cQpt3;nO76teJQ%+9nR?W=(`PIJO$P{Bqmf_IAF*reWsgqWI@l2f@X$YQl+yw7OOkr%(+vN z<>-iFjqZucVahtm!ZqSqX=DL8>G^LCVs{eoC0rf*Y%+oU5Bsb@OEk18d4DyA?VO;8 z9K-42!d9*7w8NdPu_s3@8fO7*yp1LzGRY|t%pJ0FDtN3a%NMzsk!U2tnzh3!OiWar z@cyW1s2W(GND4^?3{b4;5<21#e$k_NpD68G8Afq!`tCi30k#yEuUM=@)nnGL%yP*`xMrLmG0`e_QQ zu6)IN^KRiM6idsCFPzRT^&ecVL(j_y{Pjs4K1G0n5EuD_ssP4hMxeP`6}DNWSgor6 z6q_Tl&YtzjW{hKmRoN3V`wQ}k)8zSVm5DDT!iklWG%(nIH@0{AP7nGI zvfT#Pbjn5P&aT#{*E3{D=G>kQsHtA{8M5~t*Xg56PME$_Xkn0=whmYm z#}RGZ`J~Dhh6HuAIxSM6hIZgRo@Py}u=?2nnk3 z!l+K0uxgjbRGj<-ZN0eFIH=dQpfdYwA!z!r9nRHdICk-~5tbTRCJ9c_;?>kT#<;>0 zUS(I|N)xa#xM*AZ!4#ULiv13v0S54ZpqDz%9%Ew6DCE#4@nH^*VBtpI>#aKx+TansCfdJ~>y0`~*5bx*~=E`mp$9BT0TC<;@IS`z!oFL4)P=-UeeI{;mpf>MDJs{L%; zeR;@7#Xt-~@Pmn6Jo_OKEiV)Rb`_QCUsDmx@~H<9;B=eF+VKlebMkNHG%Pb77> z*&>pBjpuEfShy{#s#;pAvd~eYcx;k2zl7CK)k}n+Kns=TsoGrP^SF&9;Td{M%lA;8 zZ+{WCKic85oVa+|Xg&XXC2jkzt#;gKm6FL8g>cIPp5HY|aYyv!Uu=hCzFof)HXL>T z?zz245zSGg+5dTRyE(ncCVh38W*z-NN5^t>6X$*UVg7M-P9M6oEFPtHPD68kRz_WU zi~p$pa>P?{dq5+!oYsHc779&$vyQ~Zo@ckHk_VYlxfW7k6@m6k{T}A1TGb*n!2w$-Uggzp2;Wc@NX6R<}WxVXW%- zuB&Rh%j@ftlk>~mb-50M$DKzh0Y@-C<2wg5A?a3W56Pd!92jXZQ-Odg|7W z>$5=<8awUIw>Fc6Ze8u!^`$j}@833AGg8(eGvhpTofBw(C22b!3|ZR@Qb7Fb7{BO^ znee~TOQ29>@CfqShF~6)>4m_6nDxj>jYFdw@>kyfAj-}+qs#dkKT$jQT~!%w#*>K~ zhzE&yuvbJAkEUwIjzoyzh#CTIRWmMum0r>R)4N*Z8;(rRWZH^M=e<{o*uX=tuF7wX zrW`|Yj906&chM{IUOl+L(CE^BxlK~>6R zWlhqd_~!9ZP0u#p$RU!aP&kZ-1}o&Z*(ktqi7clU)g$HT!xVwiiM27i1FT$Z?=j62 zgb^_i=hV2Z%mu*}^;t%^RYb46|CXu4Gb#m*FsYnKs$gEfQ6l9}8<-B#ouc{C9eu4t zftT%>I{if(zG`4opk-*5Z2HY58NXAOqSpQx{ID_$mteCy%Jv@p!By_AipT3lSRbV6 z{XlM;qcS6?`}-gnk)R~-V5O5E-!m5ENEO2m*B|Gv&Wgv%F5pbRO7_q7)}<;1t`S{z z%A|6=<3xIIBwJ?^D_sJ@6;P4?m_F$zoRNxH(%G0QRyoy(BZE-7}lV;KWlJY+| zH@#fRZ5;(2IQdO^Jeb8_Xv(jjWE&Ch_mh$6F-;GtYSX?-7Pe62Xs%mWon2!d0u{Hg2JqU{i)iTl2DvW@=gn>T)XwhSsVAODjqr8El0ce@Vo|@ z9FpIDOY64uk;$74-ji%nFTW}Aqgh9|4oXtXH>@UEN*yb6kXS&Q@$mv26^^sbgYRUp z#xX|kCQZ4VQy5aVYrwu(k6dkoFzWREk?Y}X?Tsqx!7tt+S^MP}kJALn;2qq0D98=b zTP;b_zI{TAVXK(^iKpiMlI8vD1fOMmhIO^b;b*YWONfn56Gqj z6PCmoMWv%7{>_>@Hc-vrMkNO`{?@ci;E>=bcZk|RT?Pv#Zd6Vj{JVbJqrsNU{${O3NZ=psm?M(*VU? z_~Or>%z#PyW&p243!*AtAo|Xgv{cQT)fJ71a3@B(V_{8Ro7i>QcDS6&9PCbK2~@NF z(!%Lyz!V_M!|)7hcNxy1<#@JPU$v}~bDjb2{*AhXgcj~VHSYkKH^Gf+4nVsJ5PNZD zn!#*yRgcM8%o-Ba_M1mQNZ&6QdMsWP+>G$BOidiT3YV^EV-$y3K(6_bAs@5!ytXO*V5HU5D3L(8q@nf z7ekr*=y|VljOopK>q8Tm!yZK~AS}cRu-gqXE;>UpEX!Pjozo z;`757I^x@ODPGM%p!09hf;4~(IRrm~Ew?&f#6jJtBoHH=6Vs$eYB5~S5l!mKy{U=8 zU$icX08_B_L1y6bi3Chpnn*VovUixe-#|DwiOhls#+!&cA;dmRckCKS;9pk~m_C6Y z+FK7%Ft3Bb<$oM2t}cGHeXf;9iA#=Jm|^%g>{zPw=+*-oB2{mdAyc&WKhL_GXDyxVTlIe#03$3(3x)+xtQaAZT{mPKR{ zH}HjoYVk?@;%46&EN`0mJkrH~^Frl4>lD7ZOBT-l(TVs*!_T>1wVr0x#L3YdZw|j3 zI4vwlx!?ruT8v+7!vq{%cG3`c%Nr)*sIz;^Boc8o~ry6UrU?hfMakO>&K4Op`? zE%?QGiSFi>+>J5eX^@ zF`zdgd#`T?ei;P?j%g^Vr~Eav-7E!lgnu0DwdI5ZkOy54@Z|xA{;I+6OJcEmdVWb8a`*)ED1WUwmIJ)SLrzR zolc6*-}*Wsot9r5LlnV-Z5rf6&SjGL^d~4Lz7r+#j3+q=9R7*f5ZA-Ulbb?us1D3P zY1KZe@TFWx_P}Elg32c;6aGr17RIhM`$D6nzyZ(ITsj6N>%$sD3nI5cMYHHA6cS5% zMe|dX;{TiOSt40!u&ER5@XN}}{+EX6BI}&TWD;xeoM0*LDAmOK^oPX(A4pRUkVu0g z&t%Y_njWud&7f!QMk?`k*(fc}P*f}T49&9u>hujbQkLfGnb zm)BQ}iY_;xccJLZ@>8ObAcnB_kpulB4!JqZbC&`vWlgZGDqybM^-~Cxxrp=5!58t< z0qsG)I(1G~S_44{LBvpXQ3sLdEw3e5c!@rm~7lFf@T)O#TeOP!x7K>cry+ zNFfd{a55P_*En)a3m+MueFKg-pWftw+IH~YUkF~D`?-r459<%Hs~9~a%V8~faMXYi ztq*tn%oNNJjvA&7$R8ooH&`Q7;=i@nE#IkUw!uo{gEx)($Ys+B!cJD?PoagDvy3RP|TepeitV?E`!;dkq*v|~^&n4GBiA|U^ifxMNqnPf(qP@JrqT^lY}|BQnWcec9)HN+tKIrN3!XF->;(P4R5hE}dR z;+z}W>j_x)n?P5BLhM_LSYK)5i{SM<(gE?F5XB$u8o@D&I@UCdy=rp|)*g=_%hBn^ zK3EgFu<%@8>%WwULA%js?=j27YmqPU_}Fj@qRH4QF<)w3d@gAJcWU zI362Im+z}=dA8%@k#};vz4ehQtrq4;`Mt>tmMyz1v(aoee(G}0PsbHf5A2?)X8LKj zUA%aE@%A`o~~ z(PdI@vc(e4I)TW`Np6aAG48KH%9LRPJNcDed9#$-ZH0+HewUp)U>)GWoLRmx`hIiE zbj1k8?H)Yo=!z9|)BQID>a#b|qC*Y>qjG~A=DXp409`<$zjxjICBw!ytuCg)=JV$9 z-Yws-WO3W>6L@b2)-EYO1I{cZv!rni-ap=|qPhkA%_k0uEjIgB@<}vHMd8Yl( zoM{D}zAx3n9A_7^^XYbsCxu^$=uw(OK<0-8#kBw$qm*_#!YxrM6Xgj|2(Z*0Vd?<} z5ttQ22k{+5j=PRvPau?Ra7TKEfhvR!IO9D<4yhd)O3C753iA}BM0%L#?wNBgT5)h1 zPT9M@ksjuGi}5-mw>{wq^8^Z=T!x>pVsib?aNNwXwMUg>=UBkXvE|q)1zu~3FC!j~ zUD|AHX&;-oJyEsK?w&cDi~Bg^HPYMjwRCacYJ8JjWc)f!-ht7@GNc1{zOI$Pt+ zX_Bc!PEmVumNMdkh|2~MOR1E?Ry#xgfNZe9GPnX1M|hx^=Ma@T;smoMEcri5!qSJM zWTrP`$zHS3%jr5?izM<2D8;@dV5@2|@Z$A~Fn38!AxFXP6w!XaEHyX(#V|*hr4zC& z;wh5}>XqhBfGkWi-F#~?QW8^z4wd`O=-7Zgv76cLFPaotbuzcp&cM18>AG<_#s@hC zL)$N-OI|o-qrJwyT#R|YvGzM&^R7jl7>pH}K@~hUQ7$n*$#%vHN&5$fbv8t40+{#K6$%P0?R?jF|r0GnTuJIXMilocZ+w>&v@P1oqC z*SRTDgr8=>*tGj`0`Xdd;>6r z61Efjo~eo>MBP54cgDiU5v?#fGBzCLACqtmbXC)b)2m5-eNc%CWW<9P!SAw`I|x43 z8pj}bKL)`^KLWYF>_7VE=Wca}#4r8il&qaOc&eJ`2##N&wM35AvzhvAldI1tFE6(A zyfq__yxZKR!b_6)|7IR}P9xuB*?|7<*g$|A_*iy;=03J9{J^yTX3il$gZ>B_;g_aU zENCPYlaQ#704@hy4^(FH#$!V%Py!fck0(xe3TR!^=e{{21~|ME)e96{I&N)_NU#P9 z)0AOZNmWzS@huXi0#z-}cv*o`5w3=6%uF@Tjg&+~k!Tc2)gX;Jo-45UDcR$#)w#}Q zEV_DaY;r?QS-g2wG!l-*L!l<)wQoJQ{WAlnlXaKR9-gG>&#AT5lW(f2sHlt78I|Ov z%dhW9PFdA##im_P--bLm_ldk*3iC`AD>iq@Wjt2u48AB!3|f&l^sGXJo@I_WdkO;% zOfshwVS9}H;-QC(S3mbT(npuPX%H?R%}!w1$n`tPHEwN3~Bif#hsVf&QJze{-JSm8Y)^+M9cXRVU)mX(4~eThvO zpLi2g1qri#_TDr?9XVFbXWSnPJk&R5t7UdD(B@V3emb#@Vdu$LDDU@i?_4=IRs z1^-fszc?B(`IjQ8B*OZh9;>_PHLpzWYKvFz=rz8we?RGch3q-Aq0Rqde$hW}#~yOE zqXzCu6y_2}^9T~XRaH`-)s85JbyB7vgS2YexlRClgBZQl?M^TW+gM)4LBt1JQnf5( zqR9sF2YX#W^bwly5vqM>ML|t9Mp{L~e!tLBBHTlnyS0uM^M+2IU^RO7Y^&M5iCD8} zcO=n^Egv1lcC%f=XZ+pr89(#*44?6LA)6L5E>VGf9P&|0%89C#5k*xNG&Q1-%rtb_ zUm8P-DGVfI>gi@k_GYKNTuB=p8LKI~v(}T0#F^`*q-niDCS1r06pv1KAElmVg@q5{ z3zi8#(bDWMMK2MJ*nJ??EwjsL$e@JzZqM;Ow@Nzag{z{kTM9~fKNVYcRtf)+#nM8u zad^k9wjry*)p-rhsv_g%Q*zSzKf9ek?$-x!wmyh8P&f1Ze$xhV8lBk&(V2Mc@HgmF z(v0!L7tMKFeDqy5gD!z$`0|qq4y+cJR={T3Huq56Y%i7WLT`#sT?!!6D;e?JzUzhc zxM7JJ7Xn?YT@L1;@>HZGV$M@!KBZ(e?xA_4*LbaZ*P8P#Abs)HB+|I-U%2$*U1Zq! zQSZdlMn}!|i~0T$%P#BF*Kr=q5F8j2vk9)tf>|Unn{5ou{+_LJU6~y-49{kHPf%jE z!6WYXh`z62^LgJ#$$YcZ3-Sq$+Zc-qI-j%42h@C!G+`l77-76qRD!3g8l~93I0bQ> z8J6LkJq<`~MM(#vQiW|WF9XnFldP1kU5%NLWW9;RKReaz==dHtKGAGLc_C#4595I9 zj1HSsllFJ(uvEqcK@=jPVy=g!Q4AzdJS37%EJMXUfxVPHK zUA>Y>3GUjIrE`!+e)m<<*EoKBBk6nfmGb*AlbDk=GJ^f$B;?3yHjo3Cy19*mPHyAwG;ZU1C%5s(r#*J^9;--08$*uW9~p9XS=)@+~Z&2K*;jt@*P{?Ezdi8Mt__45BhBgLmL1@U@f^v z{47*{CE_h+`A)U>*pz?K_aP2nP2@+*s85fTQ}EfxQ1v+)1(i`TP0r7wc&9D~PE1;; z5a&imEq{o`p!Wo% zF;2dmD*`(M)>_mnMPFp zI7ta1W?aN1945tbE@)%S2nCL$97;9=W0NGoOl=AzsaAoi)JEZXBd|+tR3={5A;d5H z_gPuV-$~H;dB+0_&zd&<+$GDlRCaWBG;t!GM*8lN_xId5_oC%XFPT4Y;ZHgm8^^ad zHnt0Ws)5&-%2W}b*^y{FN{nTCd}VHVOY~^*m9_UJllPu=*1abs?>)1rqrJJMy}jkN z`Focy-!o^7fjh6Pfue-LiewC>wf+*=zdXl-Tw$$?N#b7f8;1iea+#+jr*sr>g+oCxalVb z_+f3RzOk{M9x;;ZPMfrK=Jc&o`ud-4sIPCpf2}(V$Q*hRJ4wXpy*dAp!lUy(7FxWI zu~al!vxE1s#YyMr1_2>)3kf!`34u-wMxJPR-8o^+ zvqaH4FnJft za&a%+;$3WV@-8-~co$o+&n4xe^RbInk$-J*I;)~w5dYwknX~tE$M{zkjk~TDEFGRhPqX^;0ftPr^Z z;kSvx8lpmB4rQ9p;(^IODi2J9WOZpJLb>tkane1}U~ME)8;qKF`jD0MWVQ;5;nXJ!&GQvW@DY>A zU0gKOHENeTN@Ttf7P~XMi@6 zhnE+`<1bR>%ahGG@G#faQg)s=JD-D}>EwH8l6()SoL)Kye4Iwu;7cQH;GeO1)~ty= zGiUakcK9&;ep@8c+8T+p8J{3$VQ%|(;U!YY&gYe@(sSD@g)gKGNghX3*EcEaF>Sq7 zu{A1a!({Hd3zP_Z%Taj-EEIB6$=vp;{K~R`o!joql-rKm)EWeGLt?IQ17@vrTN4{!M^UHp&lf1fHJd{V@3@xIUF-@~9Wl~KyS z!}=96a}-~Tsl~pE7Q)|0@(v&7Em7fzi2K|2>TKRp+;0W&?F4XXlt=*R_a zP9ZX37(0Ar!+lv|%Qi<<8w~@YpXta~Sb|r~Ur4 zeA$eY{gS&jO`9yo%1x|Dta%nVl*XLo$Tg3c>ATa>jP(wo~(hv`mM|cwQnA5J&M0`% zMb1@+CjefqI${uwHH*(Gwq`9dyf;&HZ{&@OyF&XWMGFFR7th*v#*Ce@=-~Liae-M& z=j}O*oKRnTWp%vBm&*zZCQq2Ts3Nepq^wBSS#Iu>DYF(~JMy{Azr&J{2UG0`x+Ztb zX@i`k7J25TR^+J9iX1hg`FhE!UAum?bLWrfKW{YtK>Rn(t}4B^AHI@qT3lH>?wXwZ$F|)%vj$HDLcG6D zqDP<@cFNe7lJwXY^z2T>s&p5MHIcp8@W!*mWjqTaWVniHC^9^tOMHG0Irs44(iO+8 zNFJ`Poq{_7$qC(S1_(J6YgmA?s^$KDIsaZiG$bNfPS~A?>o{HMG2cB={6UL6a>L>3 zy1MGaH|!_JpR@g~L(xbidg!g~=a}cFI49xn*PsR4Y8_@t!!rLWO-7u9`tTCkE*4>3 zoRQ+amw)&2d$jG4ktFxv`$ox1ww=E(A10;FKbz#4W=gX1kkfi#A7!GL@a=J(|AO+~ zE;`ity^+7pKJGVHywg7IJ2d{bk$nAia?e|DS?8_%`?vDnmj}I$Gs7nPB+xNq5`UNT zByj>Lr%8IGH;%uI{N##%PM`i?mtFj)Nt6Fhdk=5le)yGj>r4*2U(r+P5!cyYjTD#D zD?88r8jf=ICnZTDyD@yPNozDJMy(vjcZPCjAUN)2xx_mz+XbKPfXP0lm4 z2I<97w9Yd!`P4cF!v^zZW2lD*s)T6Cn?E`7;ai8upXlkA-?0Dc>&-P{B>=0Ww}A>i zNF?%ngn~*b5tH&N3@hiTayh0}5OfJx?^4Gjysx;3>AZoV5hv=%P*QUf7`R?o&Vf0nRQy-fe-Sgv~(mA9W7JxJ~&W! z+HnJy&7XhS00@4C86rN)591Rp=pc0Ao18{oiM?Hc?XRYbBK`okZC!?<>4A`pL@U8W zy|T4a@W7+7ZIy^bo3cQEniYun9@7_&{(-&2e_t6)OmvyPP{H3v@Hg^h588;hmb4Nl zKjODm(M8-0OSm7@^`P4ia@#j!j6>|5U7?!V%IakIuKl}=SI=VKCFfmO7xF*lFFSkt zea3!r?)LyhZp-i468fOcY4HEJy9%&4lI&mAGd%(X21XbdcNaz&W=LRwAxLaPju69= z5Evp5zx;DwmOXb{z0GFbjaBws_uSpx-TgB8S9Q}fQ%%zg>)-CJUcZ{J>skF?_4`#> z%kg8=3wowO+j}Puyzk7}_e@N@=WG=H5st^h>Kzv*rf%K6>(>0lg&jZWN@sGpOu7r} zQ3n9Zw&#Hi^gn@b3@%-`UAgodawYNYShe(<@nf~M_(UAF3ma3egIWj*U;G(W_lAoT z@S0hsb^?H!M|#tP!`W)KYQ^Ma2qfiq_l`fs-Mx9ikJx#EyL+7;_G}@S4aY90D0z}o zo*Z5U4HsXru(`FlC3W2U$_Mh-Y#E(gSh!)QE9G+f+?MZeZ9UX`*^Hmz?fjnl40?AT zczaf7fl}HGB~l-nLj{BwnM1mG%P&iz!EMzzBH2UXc`RZB$N%Dl%SEzQ-cy0IJ+exd z!{&6k@Tv}UC5}z8)i=fb3p?H7e5q3}+jaM`(d&}76B}Av9f2>H?hQI;b7vfDZyh{* z!cHG%j49C z4jn4|x-bom@EwI;Uvmxg-u~)WzXuM_e+=u$hwSwg^qxlWa(oLeMQbZ4)==2l9NcXv zl$6G}2{&(^TcjK_w%E(r!n>>#XA>+7!2o;KiV+x4mf_A?A-PYi_aWja!=vwi{jLYj zY`@pH=gO|`Y*+S-pE_BX%Zc zO%jQP_`jK?qQfOFZgZ!Yj6#i~=K#|lm@Fs*GK7L~s!Q6m&;}c+>k3~e+z$7^kAM9~ zh4t{`xZlBoY$d1WneX&*@XiIp8cJGx5euLgW#(~NUTz`srWX@{Sou(r=j3^pc=4YT zHsLPu%4)n`qtP4p#==4T2|f^Xu{J3)Ns3rhoFl9b46P{mJGX@%WDBWPjatHiN-# zHyCV%yX*#&!(nQ4l>AzSbY%iQ%(Snqq$s8#r0CajehhM38fGc?f=q-A)s$QjIfCxUnlpoYGG}HPN>o6WUa+Vka zL(VXeB%Xpd*ISbbc%j}*-OpkX7MFa#uT7oSMUs|Zg`0JNc{0$d#@ZHBs`0I-Zf4ylb{!*3WuQ-XnNN|>V7Qoqx z(Ais{9iy{MvZdvicWxe|v#IyL|MpRDtH&MmT7Np&c68&mQ$YZV`0R_o3l_3EGs0&k zgwMP@e5Mk@XK@mr34^%Qa{=O56z32`apEBEo?|2LN?1>9IOU3b%6xCoF|+=Rz4g}Z zN6upmH?_N~bAQTVez2~wMW=s#y{^fm`COwpwlkgH$i$bL!Eo;v#BgN@4IktFTw}No zA3Rw2RpB6m;eK`X)i8Dco8I(MIP;#*aTxBa=sk_#P5}(ZklkehE5j&TK$Io>=LYbt z8u7hh*MnyU@AZ$oBiG&0)y^Qk%lmf256p~hJkjAZ&PN<3lU-W_=RdyF!mW!M>Wd8C z`z{afsl@PJoR9ZJ(P8TOLWj>B9`0k|;XH=Ga zyx@aB0ic8tzqp7I-&?|nDnX1G=VL@+D4BZhpyacSCGR?M;+~!TyAhVW4P(jNz~31x z>38^|QC~3H6o9)2b8Y)Gnf>iugBs1oRC;$ZxjUWOsJY2*G&x;HgQIYr!)SInEe2-^ zOV%#N%y)QLQYDHd<2)=WjyzM(J@OO`8Rs(4Gqo)8d~jms<8y=OG4k9$0UHnZ^PuM! zaj-nP$7TMI)wO#|B9oX{zvUI{3pWHD_F%|v53s(C) zPfBH-LIN0>7UkHD!A7eU&l%s{dMbyR;Ch2Wui10UzWulC*>lVOeYfnnDz-bbb~uq3UYFSw zd$q%2L1AZc;+R7^nPhaL14p0GsOuz@gv+TquxLyMOYng?ZXv`?9h1bfY(we)hL9TK z9def`Lr7s4yjz%i*|!P?!rZ zm^6^(`NK%zY(PW~Lix_3xSS0UMrF;aWWeXNTTI5rdM%^23IVm19jQfvZcc^l_hLee zZ96QQE}zxvKV3IouWogB>ukeKd#1cjf9Tjaq0x6}YA32{YS!qsR#Z0BR-abYu8W!c z^2#PxOBXhKnQj|_34CY4prL36k=JrdkOVo&oQ%0rcos;dWdXIfs7zM(gfw!nb9`}9 z_e;eA)5$tX2xt8wa$JNWX|9)02Y`va4@Rr5TMSjDaHu*^sN$1DJaRH(ue$TcH~+G& z?atm_(mOXE`OMe$e{vrnebSG5WNPeCA~UHe))^&b&M1@6vV74QrBYF65vs%oC2AxLS8B0EBL-i8thCB!C8?SHP=5+VC*4M)W-}FUtTTUDx{Z3bV zz))LbsjB$f37=|RbH`@F*L)xe-k+`1BZFERD4CSoZS&%SM~2aetOBw})=^YZWi-uK znVZ{0Su&24&IZK@h+PVh4no#Cj4(ypasjfX!s}8x1=FW7W({;GM zwoa$3tE~sTHSi6O>tJaGG;=2a@*iy1fDom(kqhd_Y*ALWwSAhx2h`a zO67j1uBlen)zqjjSJ$YJObi#=ELkD5ET9 zN-o31ApBqS;(zUAHEk~{f`&!MmMW>Go^1sHiO2v|(%lj{H;w>dIqc9ydF;`KY>XwD z9RpH1>bX9K0{p;09Me;dIy~(qg){ zaM)SAPBn3^#)EvTp0TBbmShyuw14sI$dPFXdvD&rS(Jni%{l^tIf zDbz7s9fVRk0A*4el*>4P=*4r8(WQ(xDeipk;@tV;c)k}D5fpMg^I}b(vZk7ok&w?* zrnO2jt%;X@%c@bd3?x4R7$z3Fop24l9npx zs-RLrD-jt<0pv1;JimCGahcjHnS@qBs6ELajhxT1T8(LM3#lLR8CLv%rss>)Spe{ILVyIK*GKe{y-$jERv-kActj>D;j}q$_?Z` z>zc7iktKazw4dUz+pMcg@MP7xtlfkwSYBWi%UOOrWneU06N9uOL$ z?o2M*W=&gL;!U9dVclwB>#n}|U)Ino-v}Tqo)Oy>5Wr&(Jnn`iH0I$l*U}|W!DvZN z?oII%9XE^=&IUx}umy_ZEbh=_<-44`Jg5{=Ik}mztWMdD1(D>(?lRCkoYn=lz|=yM zi&Dt3qAFPLmZCIqYz=dvlmdIVLMc_`tFd#@5+$7%kB&4RFGWkmYJY%JeTx4BB{%2) z5HCK~t!kuDfcSH{mKHWda$9nn`+HluS~}a-BAnP9^p{zzM#N&P-|Y|&msRb2kP)-O zZ4iFmYymka%U1dv6s@#Fd2zS04J8-_N<5hBju#kYTCC@DIO!0G+2eVw(%n!=gT<63Pd6yIVIx2)K9i-=W4_Fl;N z4uBX~2Q7=cFHxwFM#7X*fp=fCqdyElBBW|!Z} z!F(rV(@oSI$AQtmc<%LVWqUB+yB~esk2Ez!!ihv!v+b(Uy;ukPMz0$9c55u2$;4x= zTo0z7I{ch)V6=-I82Ga{T)Yxa9Yul&0|4qiq&Gcy!_pp1eR-Q@M&yjg{PWa-c>z{m zJo~{u#1m~f?z!T@$*VRE?tSEu>j$hMi_Psceq%#sx~F%)1@n(DT}yo&&C3h&%lBX6 z`85*#kYIxAu*^tT(lq%rTPA0=vn`XBlN(MU+Doxz^0q`1`%_NygKFF| z`DVQqwM>4o!4ltaryl{*I)l3m|yrbjzL!EUqHTV1ijgAUVr3DyBJs1!ML8`tlZ<@bycp&S-~BQ z2WQ7Op6v7)AC5SUX57K}=qGns*gRpt{a7z;&dS&#XXU``C(Af1GaFaMS52N zDBXrBU0v(iGv`eFyU3Y1-YLYHnA?OK*LJ(iAF#THx5`^Ok`q0+bL~9pTnmMn&NT^| z_wU(tis4MmJz>&nBy883p6p7?yr85B9Y>mopmmGuN^43kS6I>TMUM z58t|d`>ltkFKqikM{8?WF4Nk<-MRUB>O9J`Q%@)nb_T`o=yg(v&)J}u)JZITE2;d0M#zGV-Kr~nlx=`wdp*Tyju8h>=4%<~sVKl|DLQ0EJtkAC#K6F;59?-T=o zdf-LHTYVceUwrL+Uj}LYi2I6r(7L>D8u3RfPB_w64@_UZsb7e> zs%t1xS9>w<0iUN%ef`D3T|GHAb_o_<4;$dfCHS_taopASJ%RO_a&&TYG8 zcFTFs;Hz6(Q|Zi%o9Zsy)HNW)UEOS8aX{6jUr?WaY2yIj)Y`!tCMRzj&A;d6Ti)(- z9a^_@oYqhFYz&8-_E69vgaf*x&4phF7#v_@a6kkp>!Ih5yBeXcDEzc=3mhotuBwr( zKJk*{uD&w2_57iO7ZBNCQ+D&U`KfC*w{QBX7d4f6JT`YI=<$Za9*(;@)|wqCaaWuB zgt)7OU%!;OtDn1VWa{0gFMFHcd3fE(sCKfqa~e5%-V_SjouPnpS?=n+KD#XtwAp;v zr%L!l2h0eE88vFj^Fdy%umAt{z5}p{V`+G2_llY=or)#7t6A>GmL*{WMsy4|rW+H8 z>5u|RAcc|;Ua08>LK4#G=@9br(tB^by!6UT?}hZ_z2Nh|yQi~kY)anueg9VhN!;zs z?#}Go?%eF`4AWQKx$YcWhRt<2J?*v;)s+*u>QY{Lxyx7H3pTj?_*PA2(bSi} z59_b2wyQr4?Vl#Cv1{@mQaWG#FKHKnZ7nU^PMp7W(xh!C1`7*=!J?v|WAyszv#%UG z_R87Q*N=XyrmDJzZgSV~vv&yL=kfgiEIllHciXWqyzoyvU!CySV|UGY?@ZRGN`&yP z|2DRh?OH%w96*RD<4PG0ykLVTU2wvz|`f7(uJRyN;o+L$eclg=GDsBU1Ng@t&s zdcmNnN!v+b&YoVu9L;v})G%T_v6!%ju$^?(nZi`Q?)n#PCt-ZC`ntL!X*==57yqaK{2~3vOrN8@DZ7&Wzkywe z=`(jP9(_p(mA2Ma*Sui^kMB3(+N3^H8a&9ZWULvOv@305VT#KG0d7}Ht@9bQ7w065 zbbrht{C}`4=^9OrJNsxfnhfo^a57t6W)l#rP{zR;AYl z^tPOC{Vox=o^E3~d|d5c;tbdYGVDZ1-HVKS5WYv<%hNHja;5zjmNBoTT&tO07rscQxi0^Fw z74GEtxAlncrud(8{9SrEIk^6Bc=_(`_4AwsIXDAXd1_;6}hO6dZoDE8p)3d%P1goPEsd|!Tpr|F~_C-oTs+m{_zM`s7>oEdu4|3ebuDc$Gc+};ON5Vza6~&+cQcme|0v55cy#dKyMMi1y?gX%_-etp zaZCSx)_fj+H5Z0c6?@^V+xB# z6*gwVdEb=AaLu6F;S;^~lXD$5f0_v_E6Nl;A7nr#?8hG>FAAX-6J{%5$gm~#ITIt7 z$r2V8YMKC=lM2wmmVj!a=SlSGsYwn8$YeKgurAjP0sjjzJTfyWe?pnT{9KmjB^2zU zl5}^&>k`-c%I4bRhRk2J@yyt?oUHo7cz@A0uq>LLok25%x$waH{uT9wC(mB^CzpMV z!_})e*SE*(ba<#ANhZ%#Qw(=fxsuQ@ZX44DTjAPXNAQjaK8zWxyA_NC98TE$@ZaCS z!!KN~eh#_ZZ_f>x@Hzf4sRJI@RR_%OsF3dW9<%VU^8QI?Y;+lR$8BjW;x#qYb&TN_}j-Fh@AD%pW(F(WyOqaK^ zG}k{eQPo)dw%6s#q|q+CY|Yo#bPPKYyVloE3^(v=ea*vgBfr+y84Ne^Ykhvkpyg=R z=SmE>@N0dJz;G+S)@2^UZTwo7OANa@;J@M5yLoKqZ2EN#egF|vtGltVHx!i0_sVY} zSdEg|UXA+I>CAt{#@6#d03yD};lamgMVg)`^rtlXwS1d!AMl)xa2-A$Y2{xD%{`P~ zk2mOgo^TW8i63s%$}vfnf11SqRhZHP{$|{);nVU}l!tz}DOvtjvixjDGu7k1gaxP# zSy42ZpP1dAj&)0#!ZnE&{U%~Ml?frPOA)F|WgMhSUD8xm)>K)^zcWJp3kv!NgX}v* z`TLLd;o_p%oYav3HEG;)2OPdfo*o6Ujc^I?e?INsQrt@W|A+;F438iS z%%IvLz&$X7X^Sk^FRgbKo=RaJ6*ZU)n3jZ@roo`9_AiA^sEyT=OZmXEZ*V?5LQ47i z5}@sz$;aM`<|M;!=oYQYRPwGqBo%%GC?24>UCI*P)NMj=i(ZHcd;hQqf?yTWLyC>r z?3kky?&OUI^VMe|{#EO=#)fIFjo-pw+sf;zE9>eitLwNVa z@kC;+O!tkkZe*tJvwk$|rI^rZ+|KjPSS>V*4$nHnbYgu1VBH~#Pk}7jkH%@OqppG& zcIy3TD~G?TY)hB`Y~>jIo8IUJlQN-a9LBr=(x>kLAkfXAPkO*@(q@F~=PJhS7K zlv(9E>A4YmClfee z_Aqc5OD#IMgsJ(#!v!y3VKGIrGCj$pM@BZXot^``mh(M1u|%kvk@U@6oFr}*qx8&O zllmMtuoB{w_Qeptyi)^@ay zjx~M$Fl+wJyjeP}mGfryIleRRKanc&Y;DkU-0PgFJ@VSnJ;f;mHa0hJY?-ui68$%zVdbb%D;pYCHZ`tn z(Co@tV8w;_2c#hB&*>sml|bATcFSQo9G9c+aNHet!-ZFGntn}HWi_O;9T#?NFFQLsFFTLrXJ(;gc&LlyADcq+ zH2VVaKs3TX5t)DF0RPbY4tfLned3?A!ZUeg-Y0pp^FPU7QMSypsO%))C;mCLS*K;4 zzjOAEKhZxsX74=ze6TNCq}fK=*Wo6@Qv4{1^bSo)Tj)g}_#mi$10~>COs?ecb_ze5 z!@Cns3_1dTryvTGD4<9Xf)bje`!$k(U>-vRl-a%xJ|i|{LAi;nPL>Z|MH51_z>>kx z-P)Uhk9&@NGX9JOlR+FX>8iye_itGHaZ}U#=l%XF;(E$DcMT6QeiAsxc2OYb+ohfws<_+TM7FqA^8pQb1sGbysMMvosfUK zY-kwls|crALS?zb!a;+yOHt-C>qLx>wN?ZeI_hz-yd2b|mj!#&rgiH`#({+YM4PC@sM53KYRLqIPM;vhfH8-k1?Abvw)J8P~Z^NAk5TSKE z#_C`?w1|1a8>D6Ffz$0aEO}@T9K`3aLi&z9>JK+k>;|;}-bwP~Gm0y*=Zhm@pjg^V zy}}xHD?UlFxnrvPeG{JBN|C;Qn&Zo~?U!Il3V(HX z=5u_F_cuYI8rup>R4YSoZ)bcb)wF#-yuo$;H(;CE=wcd|aVx9$dD6>&7d$@1M4R^G29_<<|Y0{#FToc#q`szE>qG z5HKqph;xyEFcG?oxg<$u$;?vn*kmay$?32XQ6f>OReyzDJFcs`iPoupwpx7}3$lA+p6Y=jay~O(*L7(9=_yi>Qh-7G5 zRtD3uI+Y;|pC_+>ChOrN3i}Bu)L;u!us;hI@Ul<4l{x8q@DlVf$nZTvDoXCjAXcoG z<3IEA{dzg>C`TAca6I0DKSl(}s9G}*rfK=uFeJAz99?ot5zzJ)I_ACz@d5qpd~%ff z1-#9^@yF^KSgNk!?E`I}*6(NiLj=ADp8Jxu3n%b)%Z_&IgfrT~n$jELHcm=^*LpM@ zh#+21*WpUlLyZn^Jvj>86n`ngEC&V|f=6??KRsbI$;o+vDZzSTvFb()ojqhy*~Rp` zfrIXHzZe(0!Kg_UFoKwEKzn$cc5WMB^S_U1>%ha1&KClbr>zHgwEBtqJXAxr{>yA* z2$4G4XFvSRdHXY*h?4m{;4Mzeyt|T1PA6TyI%V9-*YBa$E(WjEJ+6h?F>o&GcLDL< zoAlMo*s*%;J-D~5KdhhdGVjmSyF`q2wrXQlt%r{O*H4kP+-av{sxN|h$tjw4;$!s% zh$i<&QH=6x4M_0AKVs||!neotXUIa!;=Js~Ze;-!gAaMxPext_sWKNWdzF{{j1Mj= zhmCkXm;2xO*!&KCS(n*;sQlyd$|rBARNH{i3Pz!%j&d%38vhODq6GibXyEC<{ z|CxIKwbB-$lQ%%ZlAWF0J75o7PiqhC0R8IcPpuz0YUnZZhxJuoE-eiP%gTZWMhss#B|B&8!r>!ZCe_pb=Vnh{ zIIO;9w4RMx8?zuCvtNiEm7r*%DmU9p2+lKNAO;Z=w%^B86u=~9#ZSsXC@0KWALOi0 z#mLbUcIxB6`mCqy#J_Afd&{_sqO~`SFE7do9&-SnKw!VtvWqU+a_*FqFR87_Dw@7@ z@zSNroSAZk|L%fbR>i7_X^uG)C!c0rFyCBtceTx$mL^!NQzvWv_O^dc8t_f17zQTn z9*{&Y2oeUs1dv%sZgNx@*|mTd8i1$1mO(H9m<5=NH1ijKgEpHx`Tk_F7h{e_FswLw zJT_O9ciGKr4+4>)9+4RU$Rg3v6oe!9H6py?%D_Tm1?EEE#)imfo44@nFz*?&)LF?8Y$**JNiuq z&@~BrCQwxkkZb`0X23*9TE+53(6X;HyQM5k(<%Ead4Bfk+`^TL%PrAz#Do0l2%Vu4 zfgS<)3!(-_@E9!sCv!=nj0pr3yV01VWnB!&j5*r&aa?B(6Ky;@X4rI_pln>fsG+d3 zA|~NAS2{Lcdh+N%C43zyJm0@|W%xE{afRdjbI&Q*#a~%+5h6BxBl5C%W-dy11|Zo4 zga^F!rf9}pY3^#v&hJh$N9YO_I06*6eFu5~=xznqSmQ;W08^|xvBoEJ|5;|UNl6Tz zIVSr)^|xZUtW6m{^2$E_cCL+2EOgcd;N9ZVRm1LIw{+F4*)2BZNlUtBb3uqq#hZ|a z%7WPgfD{Q6jCCO}@mC=ufPuSJ&69yhpzZ#PVwGkaKO$U|yAfz0%vi9d3!K289%hB( ziSe5l!OTL%h~=*mX8M$Xk1$zqX>O|QNnwu*@wsss^tyY&F6)C2s!!d2f7-734?=Vy z-lV=c*W;YCWXT+lb1oFVoQ%VdknkqH3b}c#=o{|J_F@d6lWI0%8G+nvGDrkj)6y*> zk+`de0I35_M}muTrvL$%KS&oq0Hpl~!89F7bL7sY@d`azIaxWLOi$)Pra2oUozhHv zgny!uu+JTd^AEV`Z(P_CpV+Fduk+NZyQVeA^TD7j$bgXw2wtFl2QcX_Cne1ED2OL(%Ks@+ zGT6gBWJG3@(L5KKOwdZY=)*;twGwk{<&h8qM~}euzVai$0+^b043nl_+gUIWe||}l zvkr?fFS&jO*hh)bC6j$J^w2JdZoRNYmFTDI$e807Y?^WP&Yf4!*fgcJPwmKI>RtV3 z&(6!=KCiH-Ahck`JZ1SAXPkkrTD*Ai^7Q7q$^mKV6Z(U1rq`{0nV0R&N$%I4iyx$V z8piMo_Z6VJ&XfO{x=ytE(7MijeTSVmWl+PYK~qi`-mmYl6Q&Gl7&W-%#G!rE*SQ)~ z7WlnBrRhu@scSmJj_IW70Lr8^KllGj&w1|rGq#LcQ`P(W(M3UT-o(YHty#Ne*_0F4 zMT^{lsi!Vnwp5ur(@^2-qUW4yJ!!rv(oN4H?VsZ({!h>O|DxwadmLoSHbY&t8_RN$!b^|0P@K}845cR$OO-*_E7ma0W{-kxYTx;|-e~o=?yeg4q9p7!u z*Y`m&yvU!sd{l|=!{d+{4b@h3mjH-#OcG)%62)q5O&1Xsn^UE6HJd>`C?NL#m*w6WjUHV1EdWgqWjAu{1TcnLDI{R_nQ z;@vXeif7sa&f0kM%^P>^X5YKR1G|vQ<+oJr%ws}`DLG4+pnyoZ{L!#en|5@L>@ zwJ3~T^!hZA*)KW|Da@|kei}9J?E$#`yrlgcDBT}%x*e!rq81rs!)i8-uQ3_1%pQ0d z%@u)fe9<4kt$e0vLWsgU6#b7`qEEdxz02C3JS8R`k@0RahL1^G-R0-a} zVfFEKh$5k&+d+Ma!nUo(Th#W(2KB(}KQKMjhs^i^{4|9(v0YF}6bJ?+!-#J3*(94h zd}~y6g`y!BuoGxzxV3FAzKVV}!MnjHPJ4g(6RKg~KFwDSndw;E#{JX&qCI7PZ7)Lr zW@zTmnSuLpAiCPOB1x)}^ocA#^~4<#j<515I0}NWEaJI3R8(TCe2)N;_$n+bb z$C8qIaZ*wr!dl5JA9RJupJ_a~xtZ8YL04AdOipR{9M8fg)h2X>w6z4#n(|?KtdIKA1_D%VQ65KBiyX{!UG_T zx*U3BT>wWQEC(F$-ou|XG=B03zDiwx%{4HeozX`Z;uoGM81(P#nz^~%Mfzz%Vc z1^~pAA|xDVl8r>fSZv|{5%F{bp;veeb7@B?<<#!ar!|}5H1YGru2?ajfDyeL!0ehkKJpxdmvM>dmZjfd(w|#DUXZeM)5>-8emAr z7-0Z{NCRSg1LnR$2zOuM?yrc9L5RCIh5{lbCqp;rY1Ta6V?s$8JHlUDST6hQ7oLA& zeST3{h2&Q*I)6>U-LBHuKh9fSa)+~|TK#?1pSa9(AFo!X<3j_#_R?!F9ajt^^}R3h zF1*5tO=kj(k;n&GfA09!xGSLe6#j{lcNeMeZBpM`gs*x>9S9Gx zkG8*GLf7<-dfik75d;jZ8>mN3p6aqmHv*T>t*P$e5`2RC{EL5sSli`KK8df|d;bG_ zU%B(oN&h24bqZuarHLZ0EI05-C4@Qn<5dT5dMS!lIrzAt$mfP1VbvY)s;@i_)?xUn z*V>-I_)X2{^HX95`BEc<@-!1Yi`QQ_i0>FdFf6i;S73ude{HqrpTJgQLsSEg;K%WPM$z z*0J@BKt0rgar7YEM86I+Y?O^yJ`6g=#ImuaqXMI>#Ykl-Se(wTDOj9&&fH9op4*DY zNR1ujnJES!f;x>8I?M^luhuq>T03ss+Q!DU<6zboF#EH%=0G4XH{j31zpid2LnjnDV{^K*T^+=u8%%8{q`?@v!vp4$H*I%U3CT2x$CR#aT7uH`oq30`z#S#fb` zX>l>z9Fy6Y8ZtYLX@4{lHAB5NuDx|eQLb3P1d{1ED~Ra;<}TyoNV5~O8BbS?Hd*LA zx_yrhpO3FriOeb?oyWNL;4$v8E;h>DYe)=9jkH-dWBIU^aC|JATe?(a)mp@Vz%?^V}3)}sVC{{;!iKj=Ex2{!*d)I!sv0F@ONm1%+mC<7sU6MhvLnbvBMC8l9^^Sd)5qf=8Zl`soF ztAt=1NRO%CKL%#}>Idr2x2W^s(wo5i0n*~$hVi{rHVvpC5s;bMDnflvexe3sP*}Z= zIIT1aVMsg$fBu`gZx7_duTQGYyFXR;?FJv;lS4sLi?<;oU#l?YlRhG7wWgoZJKUQK zPeYjC(Td{G4)gjPF5+Xa2;hdAFTYfuep2lNkK=9XKNqX*dp|))=fQpWa@w8zM27W`Vj!fr z75Mrw^&fvye|`)JXD{zxULu>;2?83?ZIQF{?ztf%`;@o~ zXYWzp|M@Ak@o)I@-RgT!!cDtBL*4i&OPYTqK}0*EtJkW>(Qzalmw>IyJ`#2K;0$sv?)+ut(Bq!L=?58HRHEE)Gvx14_x+6qD1l$q z_jW_@v)yphlYCDyKyIV`O+&Fn#KcYtLW2NE;0bvBg|_|Nfk=L$0Ika1Tf( zPXgnWz~u=6Mr`I@g#-Yh83_X8nm~n>$(2Y4$LCY@k@1mr>i6nDp4SHES?mOpJ}f*Q zaq_%^8Pz0W1{n)Xo5X-u)5efMlI?&X@Ml(N6+r+Ysk$;*koX|c=E52qp<4YOJD$~; z_&k`X#bEzljf1EwUA+@gHYW)Be4`P^&$Dx~M9}H#sX1NlmVmYG>t{9Mo`*YVgUViz z76a@>2hmqaO?eWhPj}_TywNqCs6&*v6c-&SvV0-1g7myb*0XKj(COrty=wbn^`E>Q z%wv*YMs;Tq84-10G8$wNi#<3=L&QM>#O;oULAdU_@2=bb%;~3}PS=_H)mve_c*`w2 zDR>St;?4McWbNkj%ul#TJ)Ce6*H4(RzNKXY{hn-`uzpg@`iT?Qw@g|;f%Pp_Umog} zC_7Bt3Ldl~71my2O&vb0eV3MdPmM;W_Kr`9MyJHP^kQMGwWgNFsA;XOIX2G6#oB%i znTvl!gxY}!vl$r)nX8Ubo8cxHrcQuc;8xDp6r79LZ_r)m6rDL+J`#BKFqaA|0tZf^fnv16*+zD1jg^3UoJA#2b9V7lm#g;3Kngl_R z1=-F7#LFuYsWfU8sa`mlR(6WI8kX_)6&So1cJ+!PV;%WeH(S}wj$ zlhgY4HvAX-5Wpnyd#9t49I6v~2@^h&DG-lhstexFtpe++|tDz}97+vlb&vq>Pd{K*&cFmj=epJ2ux~;b$gi|zVCkYN- zZtV&i97dBPNtU|#X7v_Io7%+N)9KUN69{JQi2y_qIhiM(O51~pa6;R!(0Gd;&;0NB zBTBD={A|`q2aKS>FJe;9?W7`LHoh(F7vbpwyBvcMKeCiTk!;11lsp3}ccd&z1;vsB z`aUpTHgDJ6ckZ4yp|-{8Y^g0isjP6UWs!MoVfiV`@B@olPy2QA^}n6gx+q#z6;;b` z9vSJoaABWF!z~LDbo9}|xMGtiV=-V&t8pNEDd9axb)lmV)5cfqy8Dhj6%%5ETGG>7 z2H^*)r`4VM+vaQkd3s%I^{9aZlliQQ+xL*i@aJeg`UNtWAE*#6NdBc8@_aYGpn(6z zsBwgT@n7w~%vQqeUT*C#FXQ)IPMH#}{mR^7idPtBT#+Q1|CMBRn}Vk*jA{R^j%(nI z9#%2E!Rg|)WklG%x;svJOaY>j%&K9~^is3O>DBYUjQxxu(O8mgDhJDW_wzi z!zf$DEKzm~rsA?*ma_g$rL_*X)s!Ym7HhWRk0O5 z2!hEG$aI@5BF0z>XH}k=Fgwf2Vi{hKA=hXyh*oT}SZQOJ08X>H>;?(sbW@sa#OVgn ziCuorvle1^c|iinDq;br(WNZS>i6b2T;?Z@9+zYg1R@zIF=m6Eq6tJ$3|Np&0M6W^ zA%Ka+YqX2jblD(Vq`<(kU}3m=LZdg3ZZ=D@iP(umkIT6~NSf7_nQk%>Lm^;E!lEr?O*a$;O`@1)Nw*r(O_t)OtX|bvaCodPw>1{@Cvy8a z<3_*3U6GSjZg$9mDa}m^Vll-k_43=D77L-8q6yM01SS>cIK5c%h(5{#;<2~{;&x9eIU}vHm_zNQH*tj<*Dw5 z#Vv*u8G(S|khq>dfEzyumnWAz60X2@=jU`(LD-4YL*X#DB#9iC!qqqGX0S@eaz7BI zyu7@oymw(iC=@IRP?^eQn~Xge2{ljgq<2V=l?7>8S5G7%roQG`&{#J;9-B3A=$u^B zNyj#?8S&&xlRus`^Yb$vQNO$3e1Kc8dFLec#xffGu(;TNK|@J(abu)vbXk!uouCyQM{o*XcJ(Sd;-7L^PKNaN*IIOkgm;bp696?~f2EZ#0iA3Q68(MTU1M?f^vPK07p@NEn^5Q}iLLq;sG@vMEW430? zPYGT8pqQF2XCy*56HzR#%h{L=_xZQ@1c*(b!#n)(}LsuPx5 zfA13+*a!CRRzF|gEJqCTgu+GGT z;wn)sgf8odFZ`O77{|jJFOBNu#e>!~oOtc{_p;m*Hy%6goZ%Ci`_0$|<+bXixpqe& zFUvhVFsHO66w1!3oRYYrPhL%a-)XT*8vXW|K&0-p-}6FniN}@hRV*}tnp<6Fne5DS zXCuvTavf>Fn~(+B*n2`p6cK@MtrHPzd+Rp3tx91m1wM%#I#*Jm6BHji?0a&&W!2D; z*DZb&oXQU|P3RMJy+^sRA^C@WEsWE=Ah`QYxr^7K0qiMKvN_SkbdwJ!x z0|(@Uk8K?{yLsYD#xohUQ((R9s@3DJ$JBbGh}<9Az^)@~+O}`=l*JAPUi9 zEQv9m1pMH9rFxR?p7O(MsoV4nrG*7u6Lj;<)uYS}&$kOZFB&jR%h|@ir(HQ=!j;ps z@5l*#Y8Q-bZmJ$wQ5`M!_j8BF#k%Hf8?sc-*|u~@bFcA{$e3RK({p^8-heG_zSD(- zE_^6OQ8b5h;+T*h3o2$VilAac+uw-50sE#K$F}s#i&*G(z1(L;1zN;?CKK*&EgosCQ_7 zJpoF;`-rrUAJ#Ove&+ShXSzM^^25^oz|h*dA;-Y6do-%G+)oe{2%l%1Xkenh#1tPh zAPG0f7zmQk8qp{aB1xo~|A$De29StE(U~)!KL03oyJBKCGv+|R{y8G zE9`Zb_f^(qeOOl3W`pyWU9kjjQm_90`)|L6*}Hecvd=$f`?nCs7W@T|iQ1dV;gM}f zT?3yo$vSNC(?x>@EgCwMfBTE+tWU#4Lp(O4fB#v%d(Y~hm>#<#kdqq<(JdO3j3>}Y z@(*{0nnhKBM)eDD^B^C%6OJC00TDoRQyUzu2ou~9O#vvr(oqNdzy+}3z&zMMF}-LC zo{v96W;9#VgxuXce2^$cuk@3w9Q8=mom z`Vb6!Vs&yaV+uZ#_Q`=R*81cZ0R-ToCnP{fZe{LZGVLBAhE`-SM2LO_GcN^+42T%W z%+3gi_B4bHGBGrFaVSfn7)UF_Vx6`h>{VvuUS*wJXgLuseCC!dTh#sZYYQlN*3FeS zuUyH$xa_;zzsFb7^)CwrQEeig6KS2*Q||+IgTx?(TzI1kj@LVl)OJ&3UCH zC`um9^PBss$kBKg<$)$#b!(xmTsSb!KV|mxt0Vo!4>66}IB&!$b!Yvlp#P1~oRgKm z&93YU*VZ^(cUVi}(>ILo)f{ixP?!Cfv36)-!vNmby!Nm00emBmC_Nxim*d5P=yaqL z44AD`qJTuUP5~C6b7(e+hh{@4JJaK)xGul5K$g5+l0mq9uH;e^Adx6DctFixW*>X| zX>+b^R(tmuHvP(~Gag#}a!E~HFXxoa(`Q~kb;Nm7`@EV}(`)Wbxb`nDFJDjlBP99p zbI8i0LjH7DhJul-2jR>$flPs9M3)T-T8$z$2mp~r0d${o<&aR7ouKlWymdfP0E{ae z88BOfA+AH}-puqSl4OvM>xx3?qmlGd53?H*!Oe#Q#UvSHC^OS$(_>58yf&}L%^aHb zHNM-dE;`tgP3TwWjc2j(g8KRkX3V&-zW%})2i|!U($y8us6PlV1cUj$V9o!OS{SC&^T3qOKUXRHLm>2*sPG*zvAxr?_g*?PD zYC*}^bs}qLI%{VP^U+Nn3OO_oeenmj^4TmVSwt>yNyZG`HFs5qx~qFvQ`hUq1~*P0 zKVV>ai6=AD6Kc-u+bcfQJu5>=Pq)qwb)o-{`|7#bIva=W7e81(^pPt_?VW=M->KQ5 z@!2>*h9NU@qbgo&SmSC7=7fkuAdD6skwU0hnL{~|yNm8*KvNGmMhEoXI$p@tA|jr7pk@hvSw22Y$g7%%TrURqmQ zT2agJ+CQUm-pb`X%S~7`N3xU*TL~>cy zADM`oe%^j~)Ek%HHTDhq2$+0LeI-=Z-tJ9#DPo9zO2^EibDF=Ab-eNAoo~ zwE_kkkPbP`OL`ct;EK=5JmS>kPJV_guy|((vb-CJ_DtH55>%Y}Gnv8J?C$hp5m+~K z(ei?tSYgmvY)uUPd|+>S6e*OQ;V~Ibb#tB-;l*$cS;gh3j`ub~@3J;mFntUWplxH| zZ8NRxC}pa%Mt1JB=?x9jrjK-bJWi+A>%@y2`qkDq^yxF=7?0E8b~_wil;rsuERYe% zgZ`<_R|Sx0W!v3mr~Q1~I6SW`*WosY$%VLa7+#~;OeTkG;&iGcnTjS(L;nv4nAP(D z0003100M3SJpcy)R{#b80strgQ~-?t007et6#xVP0ssI2DgY_~bO6=?YysW^Xad>; zLIb1(AOye#o(2>Kpa&WUf(QNxhzVc`>I!rU&I?8h#0$&}Bn*%ZHVv{4E)KvCJP)oA z8W5lm?h#%R8WOG(FcZWS6cmIM_!TA5+&>= zP$s-5ZYR(vNGQ%JN-4xDR4VK%*eq}?{w=I6?k-3!tS?3{oGeI8#bf+Ej*A zm{j~#4pkskGF3!XR#j+KdR6jP1XdPS{#T$_SXlO1Y*~I;j#?mEm|Ch@x?6->lw2TO z%v~T|mR+b`WM0r;G+(e^!eE48{9$}yj$xo-vSGww)?w&j`eN2%=wkX~R%2*mdSi@Z zo@20M!ei8ALS$5AW@M^m0A&(oBxN>bNM)F1)@A5r`eqDf9%e9Rie{W0Dp>q=zx5IDuKp=V1o>Uc!V;9+=ZToP=?lrhKOW| zE{Yn97>lZmwvC#OgpTNsAdifX{E$YFn2{`zRFPbf*pf_=u#)n~uC>Iq=C(w(ZnosND7P@TIJaiEl()dR zB)BZO7P>mRWV(*Jyt?AM47)PBV7rRD!n^XkCcIj_j=aXa{=G82SiOL~%Dvvb{Js*t zJib!CWWIL3h`z4A#=hpi0KZbdg26_@PQ!Y{Cd638*2P-I-o{$SpvLIO0>>!Fa>v-n zF35h#ILTJYn#sP(8p=e{!faJ0d?#PjT;kRP|??IS@WQh5S?=;QIH71u55HKF<%6+z<2|JsQo&(A#oT zIDSVr#-M;*hWSDk@uM6{BQV%|8^gU?B+@;J(ErEt8t8$Ke zvX8BT3h^8ri;6ac&ls!sFn>hBPjP>@>DU_Sf%1EqC-cnd=n8tKXP`n6_m_T&+G(-1 z(V-V0HkHd!tyd7UkL`li0oxqI25eI|#(Tp}n3ApJ{4?(lchbF1GcXTU` z=SPQK#o9w?U)G<&h-ghMGf;#rHmiNf^*Disyejn97 zg<@DcinXk>Bj_lO2V%grv<-^75%2IkT9of?3m~bVGAk(S!^nnrXht!tdk=A{P&f7H zdu{@AVM@>_N=M^3`P5Eb)JYcA#Hp3i{dJw}`Ef|f%cz(4P_G4~*}&t9&F(E)oDqrH2Xi=$CDVeiSFLXY<_dSnmY zb(Cyfq~%AHC~fP767mn<TEZpygyNEJ77_L4@t^ViA+C1oH;Kc(j4@I*$`=qvd?_fPK{I-t$9=vk_E238RK(pMyx<=Ig4}3`xBX|L0U}Rum{`v0?0|QU%f0_TBJncXc6u^`R z0H8hwkaz)OU}olHR$yRd;9%-vieO-1@P^QgaSTR`$qWok+zc$tOiXM{EI>JS1|;C< zWRdpNuLB3=ES&a!dhCdw`Sz12+JgqW2v-$)}53Ze*#AwfD7pi)$Y zdeacvLfh#S59Fa-aGmGlP53;%gm2>e1PT}7D*{BYh!8O%x2Pdniw<$QEL|*bEq1v^ z?vsb)33*0dlGo%dy^Y=>epCVf0>QuS|Ils+0D=Ng3Rbg{td?^7k71}|A?0=vAE&yF zR&HMj$(;fzjG~AV-AX39^-pyRNp@?@XY+-8J>Q+|=AXf>eOyjU>qNKJa<4onkIU2Y zqP&{yHn4z4fgt6^65LoUq|h&=*ye!3ddRxYI>$N_z`UTws^%^vVy-l;<}q`iSwS7G z%ob)Xv$ncg%&?mUjV_=t<{DFt90nO-0IzI@ui^aa&#OnTjsU#e`NIGC#OEEKuY+Ws z4^z|o+52a2o_q$lbIrYhOFS@G3IGRLIqZ&80q`^a#Q$hh&89&L8mjR~8O=uvfNan( zrQv_oQ&C?_2Yyf2-{VL1$FBftQm;V@j)LF;Ob`M9!stJ<$~fCLv+K0BZD!lXXJxw< zac!P$+jrT$Cw1sgt#p8AI7WYIjn-;~2dG8+)T~u%Rhx%^{+ZD2ip#Dn&VyQ1WngjkI{Z7y3{EirE1kU z$I~6BKIf}SGxd`iRi`HPa1H?kaRI@c&xQ17EW;VaXcjP=xy)lQ%ZMV32;zzKAY!?d zQp%~|VUjq@OFYZ-yv7T>%Imz#*L=zsd`T+}G||k5Y-T50+0H(8crbfp{uPpjb5J8W zmzN3TInLu1F6C_o@E!wspMJc<5I$lkA2W_hM(`P9_=@pVF_O=j%(qP98>aF-Q}~V< z)H0nPxtvZG(#{+jxr`3xQ_n2gxRM^OrjKh`!S$@-I#zN6tGSUiEMh%N*vMiwu#`>2 zu$yqU5zQ_V*iR})Naq-793_(zN;~MP(=Q-C!E_azLT*3ny!o3>E z{Tj?;8l`{qw@&Mfj_agO>4ejrq2ZY<=qFaydE%t;0JOYdfP=!@UEvly0YN zl*uMhZ25;lr)IFHg9U|o8>`yqd|1=E>tI3~@V{GFnEFd++8EJZ%fpiATbQp0JAd`b z*^GU_tu0cmkvGoqYAy&M$-JqeX;O7}fU|6$B~Lol2Vx_R00+1HkTk%yL0-M!)r-&! zgCH=8EgaS@6gxhOH|%WD-h6}icy;eh^kZDK*yBf090Wl-3ed2Fpo<`YHsO(O;9yY! zRZyr$gsD$&`Pe62?3XTefI>nCODWyN1hkXB0~grHaLufI{>4J*wXis2kx@eoG382T zi*;gX+Yh(QXeaPxU|fNNpEF5yO6?V#!mj0)|!GuF}I45`zDG@PAc*pl=FJp?b75wyEx z3zHjyVB*>lVbod~ZDc7%E(ynn6eTF?qM%Wg0{T2MEb<;@F{KsE&=8NQB$xBB9c?%` zuE-St$MkDHfELst9OvB*?Z(r7O(I3v zCK1o_mP+z0Z>yxh(o{*21TOgB?ByNC3}s)Qb?3bXrS?TzHA&+ zCyccty9{hDEApeONJgb%2$2ZWEMBz!C%5)2wKusb8ksvgNJuk;UgO#(S`X~0W{%~ zw#sNu@*Vz450lY9>Ge7pEqOe8_;@BM8dcAq4N{a(GkUJ{d8XibTKRJ&x<20doM_lo z%f)(8`y%*nV@1v-&x|T#eL;Lc^OE{e=xENtm#T4N$-%knT+z@ia-XLbiCP^R&_p5m zvUwH9P1%$Y_y@!X8q)2|8Ai223@<1u3vZBHp-!LFEg2Rr4r%)^Zb*Qon9f{0?FNnP zJS<7K=M5P0&1G%d|6G6~n4b$%#oK}FO29!4u}mZ6W{4$y_PPy$=*b>W1s%2}7IoAn zb3sQYtwX-$osEekkoT0_q#jGkut_*cq*+3^D2e1Ok}M%fEY>6Xo^_%VxrjO!k*DA8 zE%i7T4Z>273m|QAs>_93BAS+aCc>QBH)WHPau-*6wiHapG>SdH0ZY;{Nz+r(p+~L2 zQk{0MPQJusO}uE@yWNsJ@~bB*(Y1NP* zKqV|eL(X;2-&Dz9q3%-1?-}Xl|7(gFQ$*;NB;Be`%!?It>ujn-EZ99({!F_?+mc;g zr3=+=s2TN#+S5yt8kvgJ7&=%x?wYxQIDwn_rD(VVlC8b^Z_oR=(RC_#EmClvck7oYAtdoBfdIS9c0C)jo@ZQ02A}C@b zBV%9W2F9Hn3>*x}1sfUIowhPqY00rLXo1)cT=p#b9Lj8>>?~YR0cR$2Hcb{8RR^25z7Tztdg@2M7d<>||hOU~t)}!q^cQvB9Au0>n>o*{A{H@8Dnn z3V;*W0Qlb^ zBX|K!$|0fwKp4dF|L%SOBmfyCT>@DJO#-I@$srt1!ej8-Z)OI_JC6e(iUR`962Ji` zJ3L3(17|t>v;F%-sC@hAzdpvAs~jios&aywYse|uZXl=WxSgEw3wM#T^uz6K2TAM7 z?&*>2pB~HM>8Wf_FXaerdlXIErt|gZzhX4V@l*>4T@C zhSxdfp?|EyOXwryI%VsrUzWx!u@%=M9{kO;q58E`TZ^zCJDn;`Ppq5tti~xHZoaSFps$TOus-kIe~r8Ic86}p%SQ%ltz$j7>egm2JeT)7 zaCdl__wB>C`0&+YyFLHA6lUwS+|QO$uONs@a(06_o%U`QgOIEsp+sW^s;W34#0isP&}UWzlxq&~wOj4gKL zORnTc9_0@{^>4oQUw+}1vb4Tp6__=wp`X|U_5)kh64U?y0C)kc(LwsnrNxul9rbAO#oz1cQ8k zAsFRbR8EId70WkDhe{P2gj=g-`4;KWsCM02>Cmb{-P-BUsZn?@dNpcLGaUxWbBUBn z6)BUdQcbE$4XFvMXXgQZP=>b(Zynwyylr^9@b=*y!aIg{3IGa#{4c}RkOU?SsK|s| zD1=g|#MgDcR11yJ3Z2kPyffMf;}sC5TPDnyPguO4^nh^u1>u@R!ei0G3(16+<_Rxn z0r9Kwf7BWG5RE@12`NTqkYnTl%}49dadZw{M)%Nb^p#Rd8K5ju-Z6ufV3k-M){o6$ zo7e;PMNOi1Qm3fL)C=l0^^W>TjaFZ%pR{J$8ts;D>ACa{`X)WvNM+P8x)~$PQf41> zoVmo@W}Y!GnbB4;tAe%7_Uv@_5PO#W*nVUGbCNkZoP16dr^0-?m5wJBln7X z&keY5++UvKrSS@RHM~{c7VnT3@ZNaeeE621%P-=W14UBkNDe(bo`i){NQ`rEZ~+P~ zgOQuTU*uNsD>MuWJ_!+9R^5#)ITV(Tp-oBLH|S=jVP<~6%uGLFUM}-r7-nY1W@ZMb z!*)Z=7Fkce@8pDE~lygz6%;EJB&`HabdR0ZiG zNaLCW4F>NKlaZK1YJ$`R$>(yvgWRJ+-k|x2&JkVn+FkxRffvsZJEQF6*eTLm-C!lK z_XwC^zX--pO-cSK?Xp)|iP!=5C*+_6!QX~9+u_(C7s#qzf|>yFKDf?EJIMP$J?cFI z#xgiZ;H+}aS#}C=rshkU|I#Ib9dPOY0TO$rqQErET>Vq6jG>nfHa#|bJ{ z*2m0@J}Ex38J$;6$rf1QZoTWa<0 z6K4Z!A84G*DL^lY=VmU456ZjhWt13H4xw<9-OINBd)djcDlX>A++>_ZV~^b=mAauX zQ>i!2bv%XmG~QsClT;>cSxV&5LLTH`S-@kK=>|KqzFTG|jE?@>=BIt`L{tLh??Cx5 zp6>;3Gu{Et)&lM(RG&fhh*kYHbHmNcF<0%gc4k8JW+tz0X3%oV&P~fLb8{ZgES@8% zU*v>MPB%@|b)wD_RUnEiP3{)mRex-1{QZIbyHmE?zaK-b-^(4j*lNDaD!E%k_F#KurMrbbB~*ug?g3$q9L0|F&TVA7vK5q8P{JTY zGh~p8&BM5dYxb5Js!t-OCp%d?JuvdWFZgJ!9MuGbwSqH!0 zW!6S!s~y5d5Izn<9E24htdtWN2=??{M8QX8cazB;Y%eSOz}YW%%K>AEqypq{6g$rQ z33P3{E*t?6n;cooyV|E_k9)E=Q zN12evn4>3Idz!W9d4GxZm$?&O<6eG)wKq+lz766#tnU}G$kd1%uga|aKri5PiMU?w zj{$R92iY6q8Fo$cevNmRg_fDAiaD-Terx>Jx$(xaNi(F=Si}5TXU(6zyCvw|E1vg& zneiUP9x^i$vtNfxWZDbk5LT8pt#Aid`K?J9v`Nq=iS`pMi>ScY3p>Ql8Sz*Ruo~d+ zafz`K*UKOj&0n=-{%U=r_=Y*=j4gI<$H#pl(Xy|0kc5#MGxUDH>joz4CWI>rrl32@iFIEpm3UdrEs&tt5# zLg_6~ibREIrq&E!uR-i6_-&2j~@50m62D4##?= z8^M-8w3+*dQpw7TZWm4i|IdqX9A1s8dN2eL4Of`06}5qWnL6kz$#54Ju` zP7Yi7UxhkyIwGC1tI)hry8Aw#Q=4QThL;N>xUnLv^Y-E{YM93Zf zRT3GK-i&*Nl<*F&VIN;Zwet2EA;+|w6EDI6Y*viN$Aih2!>aEEAq&U2xeRe)v4~G1 z!{)DDAsh%>oUy-N-)oCJO#01q*k=t7?j!9}aNmZ;U7}L{b3LY{(ABCDX&Ozb>0NlM z#!S~Rk$8acGMwKT@>*F6OUY>{y2^p3>I;1e`0%fNyniXj%@G_mh!ydh=rexWE&?zY zHY}T>>v&3#PYD~IUpJk3&Xo5;XeUCxPyD&~gobdg;Q@O#0MR&Dr8q;^$INP!bByrX z=h5cYG}#n%-Wynihb60M=% z&5{~@f&R}xqJUP`LI6FLB#WK~*curEwCDoLol;$Q`L{YNt@@o!$=;RfT65!py#!CE zdwvjdi_`fIwlH4f&FVM!*YN3^G!4$-=5Kac3yaO=L8ewq`zFC?^ntu+sNW<2wfGPV z={`p^H>9IzQNGXWUb4i$auqJ-;4qc_?Y!zlC1!APE=n>msG%RRq{rqs#o_Ocv!4oI zPhd*2F^YwT*bY|4?69~m2HDVz{K$**C9-}F?W%YGfyKj{(ex#+I^eN&4#%)iPGaXz zJx1HEgj*!s3lSQN&bOpB%R?^K?ht&|%=mhD8k9}c@a-{h<==dQJB)LCG@D>Ho|8BO zbYgX)iF{jYgWR`>vft&p=5d`R|3WS1ao;;t2mxbxJf7d?=e|7NHU&#MTuyL0MPsa7 zG^y!+wxIgEfnpTQiGsHPN7yZR@Y#_0(7q*G0`yMl>MmHEU1dJL`hFV`wW}}=WGse;CON4Ewb8fQ2$GPUD;P29j;hdR^rhbRKb*O`3VCK2U zbg4;AyQ(*Ry9mh}`+)NLZD*enfWsPQ)$I7$%kaR&GDZXnp}DUi|K_$Xi{?oWz94lQ z;FaX2lBcG?_yWEe1uJ%}+=VJ-Gbg0}Xqa=88g?6ty;mV7+aaeNR%lzOG)~brUAz)* z+o(Lm1^TUb&z_66#WVop*8B0=mTeBGfMM&s%D}SqQOULmn_YWg+d9#~hQ3Sn8n~Xv zEq2}7<;JsZ2&|v6Zh3$GxeWx~Edh3|gXST=eBIO@Q$%}LkZ3*(la3{wad?lA4u6VO zsq+HfSsfb&(~gcAosroyWe9bqbycHk-HMK3)ixYN!^0Zq9ieLLb<|tNsH8hJc&DTc9d zmU~1!$vJ>&eSvWBR!t6P*76IPO0{4uyHVesb-!qFH2}Y0Ms_JAJF7lUP{6ooc*&e+ zB0)!JSZz8~P{7bM*m`X+#TK0%?N%bqs8bau^$g9!zhL@q`c6rNLpVnP_XLqc5qtgn z`X56lOD7r<2!yy_@1nXwX(pNfZ{S=GfG|e`-TR4?P`TXUAO|@cmsL9UfQaR#0W+mTBgy|L%;r&F^ zh}GP-+_sS7%TamuTWzsDdzL88!QI6B=KbEI)nZr{Fli(h`Q|%mqJdy-=74i%)JMC^ z)ct5knQR{|$sgTJ0qi^V&_FFuUg;5+l&^l!R|epX9A{xV|ulDhu6n434+n#n-+k|6W=;n?xD zROI7yjaxyPZ^!fAui`-pr}9WfGu$X(g#O7!Gpx?N;=)MLYr)dusj53TFF()f=V}2= zJKgUxfC?tezB{yQVdIDEFA-)zI#rcFg6aXfQzlI+WdIBDKNs=6E*3LCV_ma6_EmD3 zJq0Pu^OqYw6g4kdfgJeZ+27wV!M3?|cw|5X+$M}KF=Haxpwo27$=w_OX63|FY2yc+ zk)ms4T19s=z3VuIU#0|xd>Y--us#vY@Tfyo%g;Lb@6qDq(WWOv&Kg-02;S}d5_SaQ&o6WBjR+agw9ZuGL z$2nBxWoHSDjGG2{B|g&5`M1^sI=CxT45&u}*%|7o9c+-!b5h$|74T~YQ*cv9?6_#m z42V=6*l5&CFHSL^%&J{K5{~8o301JgxqBSWX8@H7QH8}*eVp_*Qmf9gLAOLQN9C;z zs++Ukxv^_5jfE}5P$}w%-kGfT9X9eMx~FkZ?2mf)Xi@%XkNoT+5rfWw7A50r?}>%= z4C`?`_1c?rlTLCFQTlqT5&p!C`An_zI@0@JuENqC>_;q5-mMgi0<9E5YZTWV6*{D< z9~nWF6<5kQEXDmST#zsHh!$NJl%w-I$-p9kzd8}LBwB{Q9HkEx_S{sc^W0hAxywaL zMqwEd5hlrBlv935{Y*H^pe>O14|3A{M+RxgiM@nwq6ULIOen}%KI25bsc=s6jp;-r z?UlbIhS6JzZw2%%Cvpa__4(jZ(ln~otBYG2nYEHi;Q>);O74p7Bp6amqjuhECn9<7 zea;6O6+A~)X`Mp?OOb0kuMjV>Vv4qFoS(>-v7bokNTuI$)LA$r*Da?Y;*s@J-4%o{ zak>Cv-0|S77BD8BQuy;3&|sc-=cu)u7gDt5qT%s!Wzm)5ugaZ{{2}oRL#!HLiEe3X z5$+6!LxOyj$Rte~%CV%9S}&?RqI|{p-*G*X;eJL~^I7AFyGoR^qqveW`33ZN>zBd@f;E0VxlJFvAy`p?PF)^er=*d*K49vTQIH*hH|H9j6{$3 z7nxJQnJSYN&W)nUH+dJxI+th%iN|ON7NtN*avhg}f2HVL%~Z2*Pfyut5c6~+%C~AN zgr?tYd&-_m^WE_~n==^eYtZo`;Q0+L#YGj^<1X5ztl0`&U|1q&vluHOnIc8l+Y8SX zwoA?&p5E90oR|#1csCXj;Jm<%&!K)LgURlAYHiH76h`OHp&Iq?^z#c3o#mA*76;*S z6jziVVN;4AuJC$w7S1V;`a~R28Vh={j8vGn@RWOx_DZW1l*ICJ-5DciCj4BO%KvVfi9hp`uI)Rjd8y%k@Z9lhiHEOmOA&_*5NmE!9RyD|1pD7(sG;79kx0ck|@HoaEu3BCzuFCp$HfB)jOO;uw zH3^rdQJ9)R*tz62FoDjvldfr=bqP;XXi_d*<#`#j`$BsNr{kw{!FF`#{r$#OAVhta zf@!RSx?@~USLLB)OtMOt;U@HkS>Qu;SWI2?sBo+J=-mFNBYX_eky(afp}uJ!*G_pK z_59&T=18wYP!*bm)%EjDrJalad(^Ll5#^D%*h8|eG_9l;#p}>L>k+Y7hJdd2wNwIG z=vukqPTJ?cXNR?$BX87gJUr1JQedx^s=c=~LyybYRk%-|)^tl+(I;ulIy@_=M>B7)suCJ5*r8m6*YvC zEYYlAj1w-_ARn^O5J^O1!w*=2Won)Iax+A(6m0uGK zB)=78)aL6M^l${+Euqz<8FcmMd}Sj6D9^i}V8~H`a6rr;I1mex1@6kXb9_w7+;1hK zVKWx>Q0KzWQvfGuZ4s9##an1E(XQ%tX#@B$;{r8=g@_2f-KEcsA%yyiOZc|3w&)+w z0?Q}Fkf%C}e>4$}FvzwWc{S{+-_FvB)8%Rd-itQWi5_w!mOH?HVDkq!X{yjqybTB*Pa zA_COiDwL^(xypvtp7v3_$6)PwN<`h{k9n8i>HI_J%j=}YKbyJWVUe-V%!pLC*WBS- z{;4DL1ev1Rz{hK=xH+<+&#gU|<_|NmRMmhV*jLc!Gwq?Kcn$!TzOVQPL@1I`t-b4muT%dw){W+3~r*DATNA z7$~how5-oZR_x;veWRc)4HUr?MW|VlU83z^jTffdu@IvfSfpy>PtPM>9PsRm;I10H zjC}A2StylwcQ_fFsGIJzjlXO0_pwL}>ID~%JWL=Ah`y=jKl$jg4`xMAZiuzL8XYr9 zMe#InjXX9L#sb27J$k7osb3Zv3Z_a9Bn*|JpzC(d<@e0Zuj>JxjV~=EajqGv(^4PD zG-2Q)K?Xh{RSyBpLE~m<=j*}1+M@}1%!t{#E0evit*ON?`SN%&SXD`j+2e?AGC9~t zw}prFtle@^;S)=TSMehar8hdlw6%0Ke#DmvFBV|+o=$hs+BUQ^i?1}fSo)Sbitf-{ zx`@sv>w5Xu2}DNuvd9)@E-}C)bJHB)fw?Xe)$4Mf$n+mt+pNcNxj zm2(F)%YH21k2%byO9Xku`30h-EtrrnVu9G^0+I#VSZq>Fu$m3Fc^tN)?6)Kpaxh4H zG3u2A>kb{XCsSjm;xGIm0;E?j#pdvbJ$vhZXA-Ca#4q3Y_L;s;JSmuMmFPGP-%?1*nZv6#nNql5e7>eG|ih zmUm|>@-lDs2V9)H=iu2^Wey7f71mH?4#bp+K_P`xOG?sW=ssm` zSF81jNu4d0ZAqlHdkq6!YgO7H|6vzf_4c3fd7l%C|FA{&U2#HD?2x7VIocCV4t;Az z#ojj1`qz0B^oHYqdTzq8CA#LHW*?Sttg;rkY7YbM*KWqY-_ltNdfqL$g#cVpQMUDY z{|)UF^`RmTFd`1Y@?u^f$?f9uh8hydZ(p2pth4-3;_o%gp*sF~F>NWB7El>-@ zq7|c2(fg&M&(=5?p^x8a2m>@oYP=A|vR*P2qpwfJ%E1ZB#zz)`lLQ1hC}qbITVsM2 zE#|VZ)~DmDv>9#(^*IT|wm6+5hu}ETDE@vEbLQ1}PeI}}PvrAEEEfjtegj^U>daIo zJ@$3%C|yxAOfJrOXg?tx19&e*Z;J5y((KC}Y)6SHeA*q*u?Ef0L!DUW zd?WGW#En07q<5dRze_rDWSwoEik7*cn*^K)&nOk07Ho7WoICHFo=bhRXmCqi|L`8g z{`TydCba!GGruUxM<(Rui{wRW=DUm8l@5zuP^|Z(oFmXh+|4_B4lJuM@3btPRCauw zXVfoC-c_}L$oP~reVnkf7>u%5$_+Zp2gKd-KB?&yzH6<|6)oS3sMgi^SK^=5TtvTD zVs&Ac&U!F-r-S>}KijG~UWMgI;C68a&@r8pdnh;D40G&IRICyE7hNG{4mi3JRc$G^ z2QFSgi|Vru>d|iab5Ph?-wytonRxglRf9;U7O7I+Em_`c0m=Qv>z}56d}apElNNeB z)oPaTRyl}QJ|I?pYv}n;u12=y?#fK%+0ihmk#w=iM@AOy9J5H5BjA{j02i-Jw#$w= zgxFDMsOVkHq0(iGPTQcn)d+Fa#2&ukLqy}c-N%A$_U)J;A?8_078Mgl3gOOd*WyHMXg`2-&B z#2no19^4TZs$AbY-8=H}NyzzSX3Dr^omeYd`~p7!1}{htAl21WZ(`i(@s0i1rlcAD z!lB>a*X0~^`L$^{$luyYajc>T)`k%j#kq?_6oAC_q8e!a!q~k1V5F71syy zpH*KOH=@0cWf>-#;U}>cQ98EftFNxYb@;_KLIsU5o|{F{`#s&btZ#LzOm*f**77JsR+7tX2<+jCS2M%FD18$te*jsvF-nPY-X+7j6l6MV3Ey$tYWmcs0jNDO5=ud%JJsWWiTHK6)U@2M*h0|c@~i9Ji1#st z!j?=fb(ak$ep;lY3ryDKPd5*2hO3}R|q68V+uXtErn+ zgKCk5%LyMRy_O{{!sgmP!HRS5;BxKCxcj>YZUfbWFOFD+ib(LHMv9Ycf_IB0c*7d^ z-li2AEahqDwU>mJ6qgW!c3}wu4DFd^`*0r&9!Mj!F*-@#=saOI`=X8xq_?B46w@Q1 zaDsc9F_O03ZCju?cF5PlHE%EeA0gLp2E|)y9QC+>PgR8+wF}2vB6jDxs>P0VOn)t8 zIK{y_ns&adHQwh*+YPEo9Jn+5%bTrc4sgP()c10}-jMdLI1$MctDQ15zr)a=3&D#| zA*rHzygMOScywNPoHt{7Z#Fr`(xvBxoeaAfnV38$r;t(%RgXV+rEEOX5r54pO}*3U0-sbSQX@L}T&7yLbIbxxh#9a^FL3i zX<`!Ib4?n85?_9?9a2#h7zySZq5UF^caoox8X=W*r;^BA9OC{x@_Q*fy;>T+3c-5Y zea#o&9^K~Po~{|QX&boqm&YC(JjmCK{oKb}T3S3>KppfE(5`g^|hp ziioUs_yc*HF>o*s*yt#UUuxcK3L*c1>)rPMqYY7{T zW_-mcd;i>Squh@W;75(_7y7Zb>Aa1yGa&)!TYVJjAV#a@U{;!E%_L&B=)oA{hTKSC9sd+AP4WnvpC|Q|8EtdE~w9>q|a-EX0u@vj*3a?RNLPybD+vgt@cRMgBn(iBUOztR`Z#r2EMEY z+OlTSe$ns?y8$}8Awr|U|EP}EK*OjfoqhgsJ*>q5{m07aRj3vjZfq}yRffFzZ2)iJ z(3PQe&&3sm>}yn*T!}!0=_PGu-;HYzVWg@9x2o*eo>JNtn01%7B{P>tucUm?h?QdW zDElVEu5K2!lU5e5Khhiz`hQDynZ#1J zo@7D-)kjk7%WBKY3U-TKX#K_wiq?%KDY%zMWog*)#9;Y!^i0oV<=7smrSrfC5pJtP5 zRca;bs4*3*k|Shx-g4T!v5OziL2bKZVl(|#QJ+J1ZYBrAJrgqNltZ&#zPawsCwIWBWA4z>D_8;`moC&|s0 zN&q73ZIi*UG(iNZjd~^6`VquAjuxqY-~8rj_>|8*>FybMqqRkv)NF;&`Ug+7WzYp8 zw|V3DD*8hdnmIOP+{oT)qST3=FEN8)j|{tIL`dg4W;3SHw>F!%AbMBzU!F9n1X-Mc zK;{Xoaxy7K0nPvw$<7#OU}6GaLLM(>v3Nmr^c((lj=yJKq3167P^zUvB&4Qt;q*YG z2)qK;Z#in(&&$(ea}&pR8`h4L5EvE-><35k&k7{I@%*V>^iIULeT94C27s9*_?dsP zioc(`oo<|pyJmTB5*v4O46BO{tAms3cxg;a$V^knP0fFqs#BTbQkx#5uNG&@SizwT zG@dT5<}@L0@wkogTqpX~3U0~`F%LngQ2b5z7&FdNvVt>IG697F5e~@_5Q|^T!8M5M zM?@KL)nZ{6Bi=mwvK$s81P0Ta>m*o`>W$LF_+F!v7}tuv|1e1Z3WI*dNW+(46vB#7 ziP}rb$121ZA{tldMqVprlO~K;Nn@5OM4TA32G)`{6w45vC`3K6<}%5cNwTEQ{!6Tn z?P^ld8M<5Rj(EVfIl!{sl*C_|iG(<1|I9d&#%`UN;9fu0Z!N0DZnEcb!KvVB32Qr+ zA%0qhxikIr1-DRUsG>BNk0MexLvCvACMJx~iE3*E`*f{~hW<-FLAJk!CqqU^9jltu;zSD&D zLrCp?#R(|B#|iH!#i*&1@l$+X4enQ|42*lP0}!SyS-FS7ZVJ`AiFrIcNWCEt3nvIfc9Cw4?)1c3N0%$s1BWnGzts5R zs&n0P`B~Z)jw@U!m!(N8LIlt%@HtL47+yOn*bfiP)UJNSwb5`|=wEW(`xv7JeczVG#YpDIWo5d4!lO$mL)^{2a zhn<0la`^-0iZSYvGU|#`?vhOIG5(qrbV&=k;$^rbWw>Ilx-8w--9<7@-!Q_PP3e&~ zQ8#IP@8A;SN^(1x_&_1`{{MqP#;UCr2AE~)eHt5wjv${N8%TAM*V*AG7_NT(NINa< z%?APq9R=5b`Q%cs7K%O%FE&1d#o8tncb8)p-Klp}(sFI$7@x|6bYrY?F@vO}LjdaRo(LRzysmFn~^!Ohv|1fQvAR4yle&y}< zA(;){`(i~GZPe#` zn+?-C3Xm+aLu}aE9tp$aa12+{LIxYh-{zylb~rbi#KT)bEbKeZN`v3?bSoU zX|auN)LInC!}I6wt;bKiy!1rzhJMLMJyDOo^+Z~$kwSf*V;5syo8v4^4Oukp{ZtWc zt{s=KRU0Q}_ct@zfmX0%aUuqF5a~2u*ORC!t*7Y-i-iELHrHL9*;q44E6iS%w5^e& znVFV`Wlahe!`Mlv1rryyp~uR+n@7cKCp*39@=(JRb_e@?^hV>{mrdD`i@1gr32%Wp zKtb)~eVB{j9A zq&O9?{~|P*hTEoG)dp63SJgKmWD~chbtSB+-i3SdN0dykY@mT#sm!mzy$H(#Hvry(kS;Fd+iK)W6$c(&{Ztgeh~F6| z2R&dY7-J-)P2hc8zs;SN|MW^96H_&L8Q;xHlYM{pTHmqP;Ay^)XI;>o>zb!oIY_Wp z1y^@m)K7lMA?uB8?Ty_prlBix zkNN!{#e`H$vZ0Db8ZA^Id?!9yE+HSIz>h}t?F?&40E01gzxOLSbI6D^iPv14CrRQN<$Hn7z(1qb&9Nb}X za^|>za-+B$V+t6q5fPi~=p@hou%Z_^J(;ESj~KF8340<+t@L3n*#w#4pz+I6rl* zKxNZ8c+cd>w&*0ygMXL~pf(7iBfC(a?!x|=dKV2w-V!^coAQHhK)mm|#of#mo*Q2b zomLff&#)ZTE(n!jgC|M3e3V`8b{5b2=d0gXDNObRzcPsB&Ad$%_o>QTx?J>DO(?fv zKO{7wYPuscrDGu2(6DQHHG-u6Uy1gpD zH?>)yTe`@Q+SKq2iLASkmt|aWtl>3H?->~iSUEN(4(&NLjWsm0tl7lXt?R@&u6f5f zt_#N9Xr+xjR`%_EUNm>e;jwavIkh(g8zeEg)s3}L-6w8VZMKM6BKDG@tdIU4h!y*LsAK z!$MA)`lx(_kJ$#j&y|pX)ks@{{JpQhP71xMhHKcczlaX8iomlOBKEoiYbp;ZrkDuz zgM(T{Lb|!@78N{Xgyf{Fw?p$}0MR)jq`Fd>pCS42Wjr~|fn_O3N3{Rbatg#lQspvx zGsR({6_wGuT|ZMo=|``5;qB?xM=ma)Jq(XquywFQ?CuPT2xY^0sh$lk(6T7Hc!VIr zI|sG(n*5C0gUCamK=lT+TQYN~yhLH8W)v$TEY*;3hBmCt?#Lw@ZrJmeYlu^02fx5w z&fSDzX!+N(t9iKBgX5G%dy-f1QwFD8!JUaKdSY#YwH4N?1I+K!i)+{j#euJr-M9os zffZH*8gU8I*FRtey3QDJp_BCm^4s$LW_U-3ILD!oLs91@!P$FqA3;&d<}kuY$Ng^7 zW)n$39i@+;iTr6r`Go)=D2f!k+bl0UK$gff7Jq%n>EUrRM6e6=#`ujC)*ghv+?zJR z-t#rcHF;HS%g2EyYp3GV$JXz*vZ=u@C*bi6vH%% zxK2Eg?I{op1m~z#8fc#q%RS_B)rz7vpw4yV0#yS341_7p5%I?-Ufq zLuvQvAISFr_BGd@lT5HCprwgTRhK#Aq<@o4u5c5=0{8i;sbey;6!}F4<&Rr_U=sXQ z(1?#oR^Xlx?DDY-@;quq%xLfoefB(vHrd6tlRVEhg}X%cSO)pGl%foN4vVLJ`6od= zT=8v)VVc(6Bax#<(M>G?ntXW@4e0R6d5!oe68^ka%amS1Th+mllK5J(&izxFRLEyf zUytP;qvee0q%roA4o}rEX=mRgsP+JlA3vY7zIZCMZfCW-6tGua-5nzfyRlUT4o66r zr4tR=#a7UgVm+uxx_T&qSAMG32X8hykAhm9XF3Y@v#dQsxeB7*BSk{?=@3XNqD{TA zN>}ZQCss#g6OO2T`OftIQOPDt1)VU+h`0JzaZ*p7AK936Gf6OFa_hJDbEnRH6ur+h z4;N~^)@xMnQH}`2CbBi2zi+Q3kR3QyA6b1y(%g7Z9FiVp*VihGaQC!5zbgZMqwIfL z55RSI9lo!;zG5x-I0{(EbPH@tq3z0ivfUyMbh|h>y=Y#qlxe%Xs2&EtpaU=~cdU6w zkhq~YK2K$TzwNk znn2atWLI(clDYBTMwe^MEChZ3FKe)j6)#l95s>)LSWf*Nm5~ZA$r$-Ere_V4RO7Sa zs*AOZLaO)GaqHVFYMCSXc|dU9XV35eUu#T+eL%XyojEF7(m2z-aug^la=iSh)GdI# z52$l+?jdz+;;81xJan}z6b)^TEP3&R;+7w*X&-s=ERjly^pgO!&QNKuiOPH&jogbX zqX>{ysY9Y1Py&0FF+zWJUSq2|*QI5~Tm*oEe4|QKwH~iK^7z4p<%u$guB?`QBvo4y zwR1Ym8?n;G6^}u@TMgpEhd6!-YbSfd4X^EG~JbJ&C2l6c8Su9s>RRr79;3e;N0N2Mmti<9u^hko{ zh&H8GhmzbPYr08QF8NuRaOa-Zd55tMnB@9aA5j_R5B)aI1s=_-_}(X)0B9YmxA zwop}vNJECzmmBgLgoE5RzvDS_R9^i}z+18rKICnV0z~60Ehu>XDEC9{3e#e ze%OV!WLeaTj|bsQF31ucrYUWGZvSi#_(6SX(GH#9TA{Mpv78TQ+tY?R)OH0>+BGBx zc&-`2@$1(rZJ2Ex?Hb%eEpu>lM^!hV_jk+7BiEb2cc z2Zk`>qJ-?H(0TYaO>dcf4V0KNxk|JjbF%TF48aOlA^_^nACdz}!X>W%S&a3+ z7c+z@Tzvyjmx`1;)KX&72$wwkqr|inDN&=49H7coN~e|_XcH;nl!*_u4OXyk{kRXa zz~C<>W>Jgd8kcJa&tgUx2WOf{FTRK(zmW9pVsOZtA=9)E3Hj65fbe@u@{uj}_Ku}N zt}ZS4Q(3D!Ao0Vki}i;(a)*=g1da^@!~5z+S;9FQq))V|LZ;k^&|{Zhsyr0pw3 zi`06-Lw4KvvcUG*KG>msQG2_xyJ7y0krZ^sVcA zU(984yR@{8U#x>|ZakvehF&&K!E9akEzjc@uV8OlEc88^+?ID~qv)#OgEu;~wM|ls z=d^x!F4go%xzJhrPENusRGPg$g8)zAucx4pwJSJ4Sy_MCTRJ6C7HUbWBw~zcl9Pm| z5(Y$MC&W{PH>O}Ggce=SsKk|YtiQ4nyY1=KKy@)p`_&t;gfCqE)=qhbw4>&u^AfYa zqgI7B@yuJZBtRB8Tr_ao`CIy;DfIZ&gsEfmE-gjaQ`P7KK?KqX8-uAG3`HZV8fn1h zjr=u_oQG?2{UtyYLeU>hgr4RZD-tmsY3_M~%2AV*#5jTFIFa_u+14WC^+pX)XZtd2 zonT57EXu(C;Zh zf;cslnN47ym1$~+&y&2% zz4ljN5NW}CBbeoq=7kR2Yv>A_)hBjk@7UG9(!=oK&*fc=DevP)bLsU-cmMs``wjg) zOm*vv=f8J<)z$g9=xyVNA3C<3Ha*(p)sP!vH*DLjigsPTML=QA=Q6Yb-P*Ct9R_=} zs_p>SZ|K3*xTeejaaRiI|7flVpWnRN@eb{lz^?d3Da^+vnd=Y#2KFXg89J>t`>P+8 zs3!YpYvX+SsUSlAT3D<%uyy-fJ$X=3o(vT8WgA1RB07cw_b~aVc;Ze4xNrwt;6sqR zv#kBrV|f*`RK7MA)Kj=26yBVowow+|0ECA2q`vIa3*|obysX`itx;8`D7{GEiS~ay zBzZnQzHMmA1bI2!^&iolUV4r3#!VszPbw4UuV4%W+6=|JhJ`EvgrG)o^XOuiI_^bGA0VN1epJ31PXUS{c|bPeBJ zQuHV8q%h0vZ&PBtdSWm>19?^=S}RVexDk6QmOA><=kgqyoP+pkTSSqJeNYD}TSO7+ z0{}mbkf-38J_&Y~9@&YT^$B`lsuiHCWv1w(x~k!a(a=NdATxChM9MSoz}mZl)tK|= zc_4NACWKAS!)3d=DuBi*vR2#htFxKB_81k29qY5@Bo1P)Y(sx5tOXprm7Xy(ny6Bxy`cq6Y@k8!hJ`5Qj;9S_NFZGQx{*Y+o573 zU|g~TJzA5iJAQq3*l+4dapK?=#pUZGHDCYv37c|lH{1c*EO*A36z=j`_pSYPgEB-t zc~zQaEKi!S?e2<2ejZr4{WY5zn;la+C$rDnza4O&+-3lE_p4|O)SjR&z*Y%3GbaR< zBd6}v&(yK1o|j*6#G4Kz;WkLO<7_&r`M>WWVI;?0tpW|FUsvJ9x zgX3NMh-^$18b70yOuE>$uD$d-8Yk~e%X^|1$8MPQ!UID^aKHSp-aW*}vgd7{(O|C# zTo#(Bb090O`r@nNVT+K22A*$GrNM+wnW1i_n?diGF_wgDWJI8}e&WnoHt;`C=E0Ce zo^sh8XB?8|Jm>8H*K2l|-HTM@?Q_&&h&qPZ6=x6aG2TfOHXo;JZZN2&XH!ixCUg#h zw>jkJ@3vm+;pKUVuOFNJRJF_D#zQ)~ST739lz*;Il1n4dLvg7MNUBzJUjZp!W@blm zjw9b07S@wy_kb4ml3~@B%;Uboq$KBj(MUPa0Us*zj?4ajrWqMttXE-9T3ECyVF#2g z6J?6bd;Dgj9@r>@`sWxS;kMzT%&?khkg7v$c;VL@(|j=Irmuk z4xTDL=O95Yt3vzGpJmhDMR^dE5@u#Ps5IlD<`ixsHYw~H6pRUYkw49A}>oJENn{%v^v`kP&VODT7E znD1jqWDxmUaQE-{@%8@qYg~wfHJ3-9dy3Z%Xs8;iXo~ZX8e#s60y@k7@PpNXApfYg zm42r78lqj;n(bDUt6a)6ie1%xOHfiB`V11mttEV|?I*_kstv$H$9zx%oiPu)dN3e;~Vixz%=mcI)t>~?4jP>ex5%6KaF zK)S_ZH)3bI6iEnOh+`QP+crpKB7~$xyah{S{4!%o>gxPfFA3 zHb7vE(nM0twfUV(|LE2mrgc^(tXjfTW94%p={tm>^B@Q}(PkA-hlOTC zxOND{Ao3$()heDBdm=w$-P;fqNPbAfE#up<4e5~8U4p|5zNaBQh%7bKs9SHTLB6}@ z$&Gg`fJXX}6A7$Cc=d1E(FZhxp~uRD1ineA>WRSM_h;W=0+Zq~2fm+Ac{FN=>47txxML0f2kYU(@sdw=q;vhB))ht3%8B=) zLC_Z-u{u%68hRifJ9^f*X3DQ#IlCxU(Y60|e!%31-2>8$x=O9eye;n*X_}`lK>%3I zq)wu8aod(kn6jI7-sHY~usoJU-===z+R!j!DINJGgiF6?xQul)^UB zf9vFYiFoR3mKHj={0#_@q;Z#4_@Q+CxHzOh$K5LuAR7~#g4~2VjR3loXF6B_$=}fu z0aryPszr}`jM*_n4`BFnyQBAtO%A|?;rm7II=Adil-4bF!|w}qc~(a)TAiKBd}{kb zOeSsBbcJ}ezz3>+U;Bj`Ai3n@^XUAa{eI{vK6Pud-4-Fd%^KvF7LnIF`o-31 z#$@3z6v&@h6u#O0XpMd{7Am zcki2Jt7$ouh6`~Xq|xg?+wQOLS1}4R?zv_Yu~09fu^%je^GrS19y7eMV*LoyR@`BQ zh>ovW)a&MmCwnOi8fiQ_{|9v0vJ1BDvEi0b^Te)S6EAl-QFO!}1U-79iYm(3Ir3~g z;*zmnL^}*0DKUVbSp=wL+5AKwRi9XuV~wZYp?R>V&^{3MO@v0iRk zNcNYFi6+ZCj7B|f0S1EmTFY+57}4W}3I?)O5EPjwkRm9Tc8XFd8l|X)qJ4_uDe9xB zk|Gbx!kLLWEx!h zIeQ&LjGUVCKDk}nNQJ@79b|h$uX*aVZVA;k-tp{j*?L{uNP{V!Kj4_o37f+F*lP4X zk@@?I_-<;$8+!ZiC+2^jDNW346&W$)A6wM5jaM=0a|e>sGjFGay-#Rr8?Rx!qNbp8 z2iK=d7Cyfk*nfDvNGKTIB(N7Hq@Ul}<$?Wvx)^Moj}@KJUh0pQXJWN6R1bn} zTyc2Qwy%QoXj~^g4Z42vMjX%#@NBB_q8|C)l(-2`-c8T|{>Jk}%!q1r1ts<62NgdY zsNuZf_1>t=0Enhh2I$5aj~;kM8@~c{<@8U} zcfII;8|X^skNz7129|03%vI7UhEjCaD}&24%o8e!&ddn4ICkK?z@F(dnDL(Ja~Sm= zMl%sNuK|v!`o}O{V?2E?<7nbL{{rDiP}T6cjEZhz)(KoL!AK7Wf~;h)jQPYETM=;A zZqmE=+B@c?8nkp=5-yA_RIBK5uzr@P+geZOmum1TVD#%$($7SVY1rUx)Vj`{g*03? z3t{Ky!|VWZ$@*ew3iedls{c?W@S+Hg>Ya!4U77)DbgKLWx)beTSqGA*ucpki@vx*R zE?dPLk%!y6OFHur?Wyref+x3&Sz_Neoh8KwA{f9G!`3Bc@5FdltUTgEJbmDu*g4VM zLma|^G#RH7Nw>@P+=OoZJV?3nCy4RrYgv&bbAVgOOXCObUv_dm$9)__)E;cMKIPX5 z7m0d;V-+*_48#CQRjAP#&j4g+<8P1LW2L9>wNpfw0$uCPN(B@MYq^a8u& zl}N3yXpWmnOOJbLaXvAUH6QocC^Pp~6{P$`am|@{JPi-iDsVcHn~uSym0QIr-4d(8 zG04{TQRVE$l7r`qFWlsBKTGgV@?9z&D4Q+lslW`!dy+pDH?D`+9?NaBh>l)N@T>M+ zE;lOfdn=SaWtYwm3H&K#LkdIwVJd0U@copZwV*&<_Kp1!rTFj`dQ+DXI<}#-S7S@1 zTH$v^Zn6|-T4E8!Emifci&L1e8@-C1=bb$i-DVMNZAk!sq+>1xB8R`2n@+eRjUmtx z(##&p>-0?aWdDM&CL6W>p%P0cddHpJamp=W(gHg6pAsZHWKDH;NM9s-@M;=MDt60< znu)sdG5zYiq*av7b-PRCwtG3>)aNt<8EhhD=d2H}Dn)tCsdJi6n{Lyey@wTy`V2NJ zJ-$jwZOU4pcgI(xI!Mbn$m_Ps)m}B7d*TOuKK}_#{XC-?54Kgf3U6NAW>)Co@(ub% zx2+U>y8LP+5v((n#st$$AYkmh?-?wsi%)mhrujgd=vP6NLqsJ!ncv}l@r zNHv33j^Dcqz0@IM^|ohZJp)A}o5w|Ux78Z#H60c;FJaHJ$frQn->SV0z+Uufg>G{P z^Kg(NKdf#`2Qwl=@e^5zt4F$SC7xA%N1?%8^^ z$Xjoki?Jnt`+Xp`x?6$1za@^6k;_2YCEUIkd_5Ovk|{pVe#jXbZadF-XlbFX-)hs% z2D-q|D)E>$4#l*AVrc+V)_WFjd%WpARg`HSMm8+W)IK+Ny%*U@=}4NKsPsAGK&qKY z@`H`asBNKO+Swm)%6G)GYxM?qY35bb{I7JuzE*-v*c z_LmK71qtw|O+sA6R{r+o|NXt2T`Y-N+2aZbK!m|wuCAQqP*^@kiK~Z~L>sfV`&!|O z(vaz~CXDqymGi*4<#~;?`U`pQ5-O4eqc6~RF1n&GwMEiNP)0pc&f7g;9VXPd)-(q> zqz-*goC6(RQi_1jsdw)j%OA3Rf2%jo8^|>iCOa=3_|7Lhl*J}|b)GeliSu35Ji|0Q z+(37PvE>x3r(=H^lXpjU4xsZuaE*I9+|w#b*!w1~<@I<1K1n#)Id&%NwSQ4NLieYi zY7v!WjbtB7*{MK^xc*%8JOf8^AxpI;T0=EpId}Q7+)G^Y#*$2(9%u6El5~)sQZjJ~ z1GA8zo6|^gq(8T%FOeSFJr4P(M0s5#s4iinE{we{CbKTWvMzqA?%iJ?uvE+6 z%^+@aBv0(W9M1CHPC4$+@X_unV%f8jI7XH@8`%?mgWf;teK~hz_#&jq-D>AvrVX-Q zO^OmSf3QIt9-CxUgQFW#ogHHi-ITEePh%c_GZ_=)k{nkW&jP1`ZdmFxX~vZJe<^Br z*`!y4Fi*a0U&)gE92Yw-r{*eUW6Inf_i=ycGYO{e(y`I>l8onw@)cWI5SvdDYgH2)USPKj=KPmUlgO0ob><|Q z|39r{rukjFP9%Lxt2U`BMR=>bw)!>! ztxLxQML~k#e}Rvq7ksuRKN->=R51Vw*Nc=yic>0lQYydU2Gs%%oMYEM>H5^Io>~El z-&t|HPNw?Q&k`MS)rShyd}0iIx<&zc)D|Ub78U#!WzH5=EEc7~0DW^6w9B5d4HeHC zh|RSe3MfVH$A2G%9Ot+(Nf^otXGZH7I3>QM)iQ`3O34$E=3C&I(AVJWEf;1M>NzKF z0<7~bjg0+AjXXw;Ls$zQ$G>jN-_!5?T8u)W(or!e45}0bMA(XX=nT>-bNZ;QkYxty z&J9=33!Q$%grpJwU9?#PMi&3-ZP?&)ad5X6po!ACPK&t9CMhA}^T^UtaoiGfeDS=uy|>ebO7ZE1#OB_vI=o2;!SN!6`N%|Pzg_9-EZp}OCIjuiernYpvvn0)&L_~FnaZQa>INCezukIs{}6@OO{0RgSux+x~g}#8Uz`)`%tm6^mT=B4>uC-q_}@ zUFl9-(ZMZ*H|?Ja3chkmxuL+voc}h;N{;)%Hpy~A5V303ce_j3UhA^2OI?otmQ!!p zNeOuAu;gw~Z@QVrcLTBIZorl?41n%7vMMsQ))!R~l5;*h@+LwwNP=etq(foY=n=Lf zv;M8#(GSURb2aYbcLnjZY=dJ9B(n$ddUYSgfjPU~pP5oqM0?A+5g|oLzA^)2TG%-i zE7NFcl?b=hE$%>7-G>>dr2b(Lb{;1q`kGh$Gv~f^pYk&?kF~0!54^TVSxd6Jh&^TG zd!}%%!^GSy9r(%Jql^^zQ7XL7<|>YP9k3MKgf7$1DFQ{hxTU#(5?0)DR_-7pd1`I| zS^#UlA$iEX{7{v*yf3mYYf65(wzCh+(K0H0;=$VcKkS=9bFK)Hafb~_qVd`l%H5H( z&6*TFf1xhwD(Ba2P=)Xtx~}NxQYRa?rv0@x^r5!5fGZ$onGbs|d3Kt+HG5vDqKjEO x`+<#kv&7A5kd|$zJK^J!(S>XlA#6zf(rwGVku&dF`;gp6G1UIIs^^6Z{|AL|pt=A6 diff --git a/static/fonts/ginto-nord/ginto-nord700.woff2 b/static/fonts/ginto-nord/ginto-nord700.woff2 deleted file mode 100644 index d9a4f416b24ee3273887357da333c5eb5a96a0c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57460 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 ZWyL>;rn29W+rJBg>-SJGcTTRa0sss0m{0%! diff --git a/static/fonts/ginto/ginto-italic300.woff b/static/fonts/ginto/ginto-italic300.woff deleted file mode 100644 index e7d9f011a282276c6ae15e6e73c2636293a9d60f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61640 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 M000000RR910G@IOxc~qF diff --git a/static/fonts/ginto/ginto-italic500.woff b/static/fonts/ginto/ginto-italic500.woff deleted file mode 100644 index 4e135f3f80c1d4b5b0af10b146af4b47d81d6ab1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59820 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 M000000RR910G@IOxc~qF diff --git a/static/fonts/ginto/ginto-italic600.woff b/static/fonts/ginto/ginto-italic600.woff deleted file mode 100644 index 12687be20a615c99e32c52877fe05cbb23900304..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67148 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 O%>V!Z000310002|KHlsA diff --git a/static/fonts/ginto/ginto-italic700.woff b/static/fonts/ginto/ginto-italic700.woff deleted file mode 100644 index 6dabea7ff43aa34dbe6908deee26afee8f195b37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67484 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

WR~?)p51e?NpnrwZdgf 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 diff --git a/static/fonts/ginto/ginto300.woff b/static/fonts/ginto/ginto300.woff deleted file mode 100644 index c31ff17b2c873b3a301c6d25ec963def486fd108..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57716 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%0AZcG29(`^md_VB@P z@h+5nE%abKvJnE?% zyLoKq;En#UW+)*H$PzlM^o?)(qU-s=!0m%gw^*1WYyff_m7KAYeNEo$Z9+LGi;kf5 z0XG`)^mgGJ^vh=qx0%U(f_y;gml0Z3N;v~;$sjyWY`pa+3_ck%h7s9RVA!sKJ1Abr z=&pl1a87XPu7x{zPRPlwhdYpNaO$p!JD6_Bia)Q5k|VXX|XD`#A5u2@JnX=|@TzN%J!Y>r#89BJNIPoO8{vDCm+&8ski z3&VE8i|h{_eJk?vH8v89#uwi(CufIENwg%1BpvgK@oFZ%zbcUFVi$P#l`)?b2`=WV zeeXvBG^_n)iS9JA{mh~X)_d-Nx9p~s`59f*rX|K!dEr3^%_&IfBFuEhl&YpRN6s}z z$~8w)tXTmglP~7*JCH|?;2fsM*WzCpt&E=JT2LArGidA=Vxd{osc{bI;~_|s4v_1K z#<*A5bC&@$;bL4!XL1sq@iAgtFlQGSM@4aOj}v_*6rQ1f8w=eDBAfl|t#2?qJI}HO zZ(8JTu(2L(#cxa>V-RRi;EgqkH9Se?4|whb&_0=Zk=FJm zxvSO$SVD4E=A00C?NT11^WFG8<&vbQwAuq76eVcl@if+>+uTxE&9$k=pScfc3zVXw z(CvKNhi&3*!<=~*uHs^Z-jRy9iMN2yM1FqjJhXn~h=$ouKlIo!efQw$`3Wn1Vss{n zNr|bEN%o^;ewaTqZAUm~3;L!1>lVNhZgW5}ItZEunW)c1GZIU>d4yUuLwy%!J$NC~ z#Rp$IJ6ZtRMc3G<{{WBE>OEUexjdZz2F#LsV9p0Jt!RE7c>KJqUPOXhZk2sk7|(@V zZd^1YRDr8B?JNI#xdRq9#w*K+qmwJ zY1F#l`a>HuEeqKH39cVe;0v12QbbFT>t#QB=E8m@mjsVHP-fz_8((fENBYQL$>qPx zKgr;`~ELV_LuJ(`^$HodNrV`W&E9{75s&36@L+0 zqqQ2zE~}o}oZnpgDW9s7W)fFPdLg;Dq{x3o4C}es!SVljIg2jWjUWn#c3FmhLTH;G z7KTl5onr!wrS{0j_p zOjXN;iAA7bvqH^9fDdW@Z64(qf}!Q@wB50K10P>SJvwED4Vqw|<3+gfV>U86 z4l9+TViU|$5JibCtvNs=P}%Fvd6v><|6!^%8(rmv=Ax;-L{DShrF({wSmQe_JnR;h zQsIH7b3(D}k*%_URiwv$t<_Q~_O@7#{3e|FQc8F4rKG=Z=Nm>VoJb}aC&Lr&az}JN z^NCtrVU$VP&W6@QKRH2F9D&D~WfhBz;8>5cMSa0tIU7g|SW9rGgYB7`_!~-da=5IB z70}4-OsxQ1V}UM?h9gabA1LxG-?7Rh_c_9TexXPv{65Sf4)YJ+F-;$%{Kg*=2Zy+Z z7TR}oa)2is=O_k?^zfP&vUikYXc!#ky7=FfR-0h-65#DjMS@O%CuWCMrqt@5gmTk8 z$#?>>8cQsrGmnc$No;^|@=Qq$7Ra}vCyC!lxWXJW?a8rB5iQ!zHD=f0;xx=RwUR^< z>uSG%iLTTlJJAQB?S)NDss37=S_HDwA`d!dEnXO`DK(IuAEum$LRJ!&AmtUk`{tMh z&G6#m_i&H%6{b8H&Wp0*7PrE^bDWdB6k+zNs4YKbNVeKSyFmvFXt4sAGPlW!zaB(S z4(F(hh0&)|vS>Z!90RqI8Qq{7BMh+A?-J4+@Im6_m`?qDK_#U#x^}kbO%LN$=BX&i>mU-zf#*#{sScegskEb9n6ScEqLfiNuzT8t}nLLZEvO*W* z^_dA}`+nTVF;aV?&J2svNA*U>q~vIHlVgAhEQT4cwQ((>d5t5^WsXMK4aYgbMILa6 z2ZE*(2|r~SU|6=Vgx1AVW>~8CC~dr!_T63O7>idv6IH+qhPg&RcX`Aejv(3_{=+3t zk^IKpa->tfA8tGai_6^SI5%kHA%~d~n;^?Lqa37%cy}%O#Jf<5}Fj>P9hfajWyrXy!H3`s}-SxN$3sV-5~Zs-}4fAkK)pdlet~+Q_So zK)`L;->VMYdfiF-1yDdg4o&gUKw35T&VSzI?J+c?7^3MJr>22URrLh zW@aP=RbNqvG6Hzm7&!4+!fo;d1e6I7?}cVp5R1k7Zk6BojgN|H=?cJ>Xk0>%HU45>CI*tic!h} zJzQgoakAtniM^z))hi+t(Bo{;bXV|;L3e0Vh+3I0x;E*EtqA24q2*XZ+g+<+xcbWt zo>qF^%A5>aw$(dEMFBfWFOxi0a{DaG8ft-;^lY2i=xdguh>&HPIR+VKM6`>G$tb`a za)canOfikM<2c*Awpzp6tp-}`@3-C(eb`^&_Ww-W1#YEB5Jlm8&CJZqlw`=v95#C> z>@cmz&&)hb8yHSjk#(eXL{^EdR`oBI`+cVzPZy1+%f!=Jc`6KlDN?nfRTCx)TNlIs z@?+H&CQj|Tu2`I1oVxf;S&s&lfVRs)+r?^1vr5!lm}t$1$<;!bJmg&>@-7K^myEp2 zM&6|$?^2O>`N+F8Vr1X|Uoyxym>Zk>4KcIWKeO9xjbiK1 zY>j4X3|s5j8q3y?*&4^zVZ7fQ-Y)^~H>XILanxTn>MsHH*Mj;>K>cN-{*q9Csd}pC z8rKWG(u7{?jmGs>|7sEq*op@1K?7!^0ekdcm~l*C0w%Br6S%+&$T%{v1Q}S046Hx~ zRw4s$AOov-8JR%_R`W74j|oh|1Xj7(&HBJCZqbKsb*nx?d)1icAGN=~sQvZP`MZlD z{EW`uuXO%?!-dt*`K!Iu`TLT>Uq5ZXuP}$7)Asv=w%^~h{c6!<%a_`Izti^XrtSAB zZNG15`+bd9yhhvaPuhN67_?=tdQ~?aaYQ*@^O}~t?sfg-4R2`Fo8Ht9-tv~d^|rUQ z=pFCqd+&NzKYGu5s`I}0mFoi^sN9D>RGE)_q!b_fSjj%|iHdycQx*EmXG-+B&z0p1 zUxc&wd@r00ej%KF;0NLCLq7~>gJcM2ANz4Q`@~Pe*{9|=ZGNUK+}t#8Qs1HHrfCpf zr8{_qm#GFE<`Bn| zadvq)yL>u=X> zN4iJ8cD-#{V!ad977giLrIZ;b#3PbAQUg!C+?FdwNNHxZEKCaD= zEKz;-7~ve$S~fthQFy!O>#L+oLE725+oph4&0|uOy)^TmCy{3U=#*@Ap6OhhTSCGLFXao5dv|qv0?s3om&}luH|p0oV%Snv$Jjx?>L#&VX+}% z{tZgpC*|zloU_@L`TH{|@OxG#`HNqvWk-IerW!EBuedabX)EXFerB0shJVPg8I7!# z#crIN`QJ18@f9BtQQ!?aJ#~v&0z9-Q&8m>9)>lNrzjP=wA3ID%<5hthOg~+xpU!knl!n9Y2RIz<^!M@4L5->G=&{W9F=vxv=mT1c zDaT@pQeorZAVWkVWL(hd8KBUWuNNsScX}^2_!ezkJ|Q@i+ozke{&t)9l10?-aEZED zr#Ty33_NB8pv#|AwTK18C`t5&lkuF}Y&(yIMD7WlT%u{xOI(vz&IO{$u zPLw*w5{NfC+TwVi zTp|;li8o_?nvwZTv6dhCeX!EMQ1zdS>fimz*G$Q}|0K1el06Igi%Dui=}oHYfs{50 zLpCC$MnabYB|0QlTs>dy^WVYz37=|4zGm^_Rg3wCRERMlJ6jR$lom5|Eru&xE=xwj z+(!5Z6A@AjjNOAZ9*LE+kz1HxA0t9>bw&!Vutr&I_mqcS< z=+An}&zE9yFfYxgvNFHqWD4fkjGP>@XsI}fx?%PcLi=g!h2}^}Ec_BK4Zp|+x%v2I zYZa5j_KqyxhqzYkXz?ByVMh2&ts^qyr&u;A9m)%AEH&zb$94nO-{;1#uDnBoI`h;u4`* zguwLfvGyU#Pv08+ndU@@&p!uqONjgOhvNlgO?Ws}OXF>P64OUpw%}4^mhlx`yPpCR z`~XYYjpSI4Q>D!4XoYrHpZ^cIq4(Wz z?pNb}4ert8;gX z(t3ve_VU&~Z>|1T*FNI=+g|&r>i~5fq^@VF>kxH4M_q@h>j-siSfy;0hE=*&samCM zl@fI=+oKv#*NQ#5_E@z?m%6U0UsHdbx>l*{I(6-;Usiuz{Vnyo>d&jcp#FjShw4Yv zUsnH)`XTkN6YJi9y)LuYFYNUzd;P{|JFVe*pCGEx&N&_;jr&G>}3x7kiZ@h z*kb~Fk-*;er?pQU_Ju#KJ*BblY3vmOdrV+Y2<&SDneB(O^ac9FnF0|GloU}pmYJ3(Nx1hz?Fv%ROir#+83>?ICc=dkBF>@5y^fx~7v z>$n6EPV6WAhwO$Ywiw#!)W zGu8);^(|w4!&t8|*1J7@KUzBr9J!ewj8=wumYE^UOvlL)a*Bv^gNPyuGynO+%*@No zif~nFKlM7T899rxdU$%;F7NtPbya_{ixLruSHzD>wRFPJrbdwZutBp8oA%u_qvfk# zSCCa6=$O9LfrUmb&8U8wadqh=8c#!bd3_$C%U;x_a(YdV=@~QfZnT8GSmLN;bVRAB z(OGYEvi967IWY~!^jkmbM6hqP(D;FlEUP_h6~6 zg)5Sv)&IZ#AOre^>t}chO4cj?ypa7Q&;BMEWS{iB&sH-~*#{k4=qmp7)XSKD>3cn2 zV3UtUTJLX}4>Ap9>k0IFN2opd9;oX(r1a{kToueF&l08mHCH*KFZlEey{>okq+WE% zA#inPG#|99XvOD2j#`~x;c%SVpaIUQfT)a)>M$`gZ0cvi4RGJVM`EbWT{iFanD&F} znpuez_QakQjmh>Db2P;+dn4t{3m6j$Bwg4bSa+u>UXh>uj2GlKkJ=^ zD(GOlA+PBqk@Qio=B&s=;dWk)TicV3$&VHFzzuUa(Vdh|_I7`Q!Xu>7^q__D?8n^oB%+fe^ALTV-DgW~4yd30( zYq(Ko{uvu`CYWuq@c#?Zpl2fbmFkhP00z&SEAm|tD)ggN=*PJJCaKU*QK6ruLO(}^ zex3^b5-Rjdsn9Q@Lcg2}eKb_15-r_YtEHQg6kMB{QYi6n%Le$$eng(XUhNQ{;>TSyK<(&dnJ1ti_wz9-eN2r_12!5_q~1o-T!_TjA*tJROFoL-2GPJRNns zoD4ke`Zp1Hx*DEtgQwf!={9(}1D?)0ng&rp(*T}sgQvr;vH?8ZR-|u`fTxr2bPk?Q z!P8CfbQ+$ngQuI}=?FZXl8~%rHg~J+ME_WHP(SHU{jQ_h1^o&Q*BokH1+@ z+GRC?f}i23dh1Duc*juer623Bm*fTH0d6%t6n1KT zO;sptu<@U6*m7fiMJVjUKqX9qEQdPI87@+yQMXa^uCdj%Zg#K7z36S9`aVE}OO!3- zcxSp;sU|(fELdZk>)hf#Pk6~YKJ&wWh#V1;$nDiuZisrvMQp#r}?Pl5^y#(5m00%dEH4 zjc)g#r@iWZU-~)l6)n{Pj&!nf<*QVu&44MF+hCU^cX-G%Uh{#k{1T|dNOPd0oZ>tM zs(y@Dx1DA9H!M3-CUC2meZ|kHThLg(*A%uTvLy>CfOx_y)d* zpWs*c1OArQ5Yz&pWYFk^18^9Q!AV$*l~|9h*c}La0>&&{fXmeCn6U;op&tVn!(DN2 z+<}MTF<}+sBs>Gp!%Ofgya8{+d+;HAA{_IEjOXw*d=Edv@9?*@W-eMd07pdB8O#Y- zh~-#|&De=Ea2_tfRdH7!VQxS#Zo>$sa8KMH55c4Ggm}EN$~+Cv!He(;ybf={yYK;g z44+X}n=j!T_#S?OU*Qk80jA(pUOPe;FVHWzhdy|Ftzo zMmun*1M@Ktb5V2Ph^)<(!7^kgHb;gzaBOz!e<{c5zu)C>b#_jUBpfNq zat@bJf$O-9>eQz>?deW`hBKZV=CFj-Y-TqF{EmBhlxKNWNFt-BVn(7Xgb~IDj#kp> zn8>1_tPTv3yzEybc#)5tb7kE{{vLN(V3okz0_z604eTE{IdECv-oU>Ez8?6Yr*q%N zvK5y^EG;}Q2s|&aW#GKP!-^{saTi!xNXGhsbpv|_P7TZnTokxlanHTNNa6y;Juv1!L{j+>Gsni(V#-*H&5xE8(|X#8d1jM~sf`tn27BvUOutEqsCBTW#b)dcMRye1 zO~vM%GNOx$*f~XKGhSB|#fzHt@uKs8P-e#KzpxjJt=Onk#_vwCdkWWJT^Z}Q@=67- z^tZ9q#+)KrYa1)Vs)}BzX=7fYg74gsP~3I4`Dgfl(?qB}T|ryg(Vh-;q!XR#LRY%| z%i5p0m$!L`cX^L5`HHXkMkHTW$PSk%t_~`t>ZU#{rM1zM;@TC62ns%2WP6?&QOTU1qb)l_ZORec$xIE`tTKYd}>XB7+oA4G9iMb4d7#B)k2+g&HeYySF%Vj^+S$9YPs zWSUDnoLFnhpMpoBe%v$?uLdvZrtGzGucz0{yXzljVr*e128T=x37HrgGBGS(eqArqrQCPs%$j0u@=iK^<#_mo#PD*EpJH{O2n?p>sJht91}d=-5EH{ZH-bl=ad zf~ZCfy3>Q6^rAO?=u1EPGk}2%qQHMH3V!*?IQ8>-Y6qaeHT5~HtnTWsp&G4;%F!&V z<+a+Wqxzj5)U$e1pXx_ar2ocmBRv_&NG6iUJeIMRt?cC}_wYOZ!h<}{v%JikicyL3 zwyV=`xlxYWsVGNPeQnBD`c97OL~_)2rzy#Pwz8T$#?eLz4zP_iOlQ3L2ieYAW-!70 zL+oH3Gnr`qVRo{fSxhqj2)o$8Y$lt3l-+D(4pYoO#vV2?m#O9-XD^$X$29X#u#YXw zCr5D_v5>ap`Wjh8J6|J5l$5h+FG0ox~ITlSU-}l9|P+WJ( zai8}d_MVI7s03TtW?9~08QsNh%h_JbPXT5&KUrCP&uZ4N)^fkz^1RVH&h9C8lfhI*-3v=XZ6xY`qC@+3t{JCcAL;8%GDaJ)n@-+{6ji!F@M&*w(e0q zrf2kq-qPE8U!Um*%8}+w&f=UB}a$vSV+E7F6GK9?Nxs&w#rmordM51EkY?dW%&7U?{`S^ zC;p`K_$zTw0(bnSgSSUMBxtcFgp7P3~5|xxK%&N+n zeWtG@s!~-6fByp+64j}$EFoMIA$UYiFqpBD&(mwX;m$TKX(LCX9`!ZNKS3^S>8|;V zBVYNPwyIE`rfY^~YL;ee zj^=8f<`=JqBDD}I!7AxrsfZ5hlEhBA!dj9?_A z7|j^QQox@q?+@`Buk!|P@+qJ3IbWRGE&oPGEoV7&%2KYGbkYnxV`jNGi|I?VxPCB8 za3*IeiRC1`|1$plpY7lOr9w`(>HfmJg?i*69#WQ_Q%>1(W|+yZz%1_TGuKYUpAeqm SXSgu;%>V!Z000310000a7svDf diff --git a/static/fonts/ginto/ginto400.woff b/static/fonts/ginto/ginto400.woff deleted file mode 100644 index 6c5e871cc5be23b6e3aabe02ecc8d73cd6c79a14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55752 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 diff --git a/static/fonts/ginto/ginto500.woff b/static/fonts/ginto/ginto500.woff deleted file mode 100644 index 6c5e871cc5be23b6e3aabe02ecc8d73cd6c79a14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55752 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 diff --git a/static/fonts/ginto/ginto600.woff b/static/fonts/ginto/ginto600.woff deleted file mode 100644 index f06b4276b9c34cb6516e54dea9ee2865ca4f2bcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62512 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�@-@xN(IkU zjF#}*IDxk=dL*0d(a=gCd)dUD5TfU#9TgtSQ8AV4Z~cp%nok=HZ$o9fpOY`RXMN6r zOqbamfrplB`8>97mYh1am!#0e{N z)w7#I;1mS0c$oP+Aja4O?UBFkaC6A;|G1wD8om5x{QUB22!1xItqaatKPl@e&N5JpepCJtCCnJro-iZm9mE#VJfw=Z( zCf|PvM1@&s%fc2sjw3ReE)B|HyQgXnytOtp=m18qD-AWmZ*NtX|4rX>~kIMQzYH#8g+_BG^KTL%X{<4*wo!DFgG2M|MX>k}zagZnPqn zRh>w|&^}cXKm90|!EoGy{;SK4)VaXS6zdQJ9{YQ4j@@bD+&XenL z#m8Cz;e!bVMVkF6pRysxHo+We1yebt-A!{m}98Qaxl-sG`Ql)iq6Jhf$mp~qIoE%*-rak1w zR$ZmnaB#@pVBFqaT%co33gOGQeaZvt7zpiccn#_$jnc!RF`RY0h6P)uls)gO87J93j%c0t;ov}mX#pJ#;fWO(v!S=Qj-~qHR?^$BGU{$8M|1z$3YgaXT3;d( zvr^xYuprEMg!q;Jx3^B{*V2V@jS0l;txywPte)l{QZ*%^+vJ4AI4?pn&!Wwl5Fsu>lvuoat6 zm04Xlxv)p01d?NlsPMH{($+IR-Ppm zoH2L-q(ZMb!5#+LZNeb6Q5;i?{O1oE@6v==?aJ-;XqdQL*@z(1)hY(@#Tdh)L-I{= z`Hr#~Wn2WuJcPQVw*2I&@W_7h8Ap*$1#(w^TZO#o5QY{UOd)Da{gr9Z%*XiR;Xt+o z)s0K}jxalOUotW3{U5l)3x7LSPz>zYb@yeFEiw9kG=fji!raI-FMR2~48%x{A8YeW zjQ-|rb&5-<-9uTS#$yTs_%~UyJ&@KEMoEnq8)O<7VOK@SSCW;!rz~|_a+n7t;{akZ zfdj|`!20&FQRAknZ+Jkm%DNDLvuK{^G`Y{oyRGjq7yj$kx93ZqD1NVK!m}Zr^{PEe zEFBFYtSir|vH(OxS0!biPIUu(%VrHcJ@jdrWcZ%5Y`61i3~x7B&LGcd?>L6x34++e zHp0ggzagEeIjIjibU#S`K(H^i43pHp3|;{|s}Xq_TD49tc&mgjkEO%CiNF8rC*>HM z6+PRyQD6}zAtV(Bh3VzcDAVGfA}y@OSzjBbpypR zL|d;P1C^Lx#%$by;mb-9iI?D=_=jp81!l)9#@CR%2wO+Ww*E@mNS*wpoq@qGZCbYs z!&x@6f2a~=7|q1ki+$>UEZi%4X%YJ@SBqDSh9breuBmSfp0Q#`@6>Lj`(0Qds9cQI zJw$`|RJUNo&PhnHr=3Y7Pt0i0ue;oG)hPnt8mz_VC?m@3!$5gQ)Az7;3+iJYQp9xP*j@ z$OX72TOw->sQQHL4Y_I!L1~b*XP&YM+9fXTqkI)BZ!ORpIE564zWQW|(Cos10X4HY z`OLr6wES*gnwq2T3aJ&)s^H~dB`quh@W>Wz4hoR0X6ApL0M@xw>u|@Yfe2O7>YT+E*xQ zx}lFfZdezIeImbEZI__a@QSm-m78b?Jw$3h7lL6XP-MaX+$k+3qzrgjF1U0cea{7H z&rZ**A$lQv&bXl5Jn>lUOg%C1ibZOh5Mik?8v9D{X5wyQ*LHw(zM{X zX`@j#>NGReECK0F4ljjq778S9;*(Yp40x7>e7!q^>T~1Fszu zDs2z(DEy1$M*;yy!^R+IFX|HSz&h;-=~TV!{ubJKA{ABEBE2AkovDnmmzQV4lQ1z? z7k^pu#m;06{{a%jv0Lu8*yQ%{lij7#XjJfNOM~#VjA`oZC);z(RGaf`eC`$xt4%Z8 z=@m0{9SKg?e^+>%EPw1hoJe2ea0`eN)|X>!jJ<$4dv)-3Ts~=5i$N#IfWR+2wm=EL z;Ww*HD~EWAhD@uD>;4Y?FX$;GIF&b-Tr*A?E2h)|Al-V9H;@EB-QR24hUEnW=YEV$@PdX56qFDRhd=Inqd} zTRD6B$P)M@Eu+PPCO3LY|9cMfK>NEvF#cRppbDa7(m^?uh6+STSeiTp`Neae&Mnnn zBw(OQ#W152g*YRGVa&0{Lqz5Fe4ITSZlA<_U)_9v@^l~mo*kCsUx?ajWsG(-$a)=p zA1iat{_h3bjJcX}mw(ffq!awCf0dWfjsyZ5 z&eEm{ei_Wq*G8=^A>H!dQhz%k)K$pS#(tRKm_$f+}nI~ zY?w88Y<qSE=l=88yQF@$j&-v&X^)Te;fd;_zO)79Jm0_OYu;wzSQN!m-$9ZRF$`{%rRv zNmcD7=K9EUH-%4Uq@zZw#6I={pS4`%zE=tbw*|GG%5OBHiN04+vQUh!=o_rz%O8~d-(hLYmXEVO z9JcCuze{Be2(ZcymFSEZ($fdV%OM39d>Rl#g`EE{J|*CSDNkWA0aRzy#ypF+CWq#X zHHTD=>wGwhABCQphylp-uA zAmLVQE^-;Qh9$kTV#!0mg<`b@>IL!?%bv+jl59EPl6Lyy^rC8WsJZ(%8W_q*g-;d| z0zhKtty(q~I#oEG)HGTA_MP2%10|nyXF0T#_$`NPk0s!(>jX9_||(qTqkCftEm~1WnGr zMVlXa;&E?prz3AqwdYz>W554?DTQOr$h&t$FjdHpxiD=f!GzOyL)!d+=ybb?o%mIdPvEDB+%edvXRX zik{W4QK!!#ByUFJP$j8xp0Tu1WX_I<-Kw<&*{B4Y@O8~?$$}fB9_9Q*f zY}z2TqkwIBzlnA-H zzItSO?$LQ%)NFsZl=?+V+J!r~yl$H0GzA2G)!GC}M0y7c+-amAu$(Q>!DQ1iGtc}s z)Xu$*iUgAY;qH%9hzu`O95a_I_YFXd`I`c&3!k0x>Tv5o^@ep*gt3`1GS)9NI><`I z4f5{b-E?Vuh`__T6AJpP(N7$OSiqOGDUF$aN088qzbJJJj?M{P%^~2VIn~W^38W|B zZEQGDon@rO&?WO&02L5D{ zQiqJz>t_97&hp<7t?n3L^5*U?ty9M#*=o=(C+c&pN%NO00?t~Ht%Blz_M{cU*qC9UttxB!OR{9^=fg< zLI)KWUZImuXuhiBmqO4UJCuWieTe3LhF?VVt*`iD<$`dxy2S4Nk=mRILD zcgeTA1Ja2p*1Pb7^a_mH>>BxsgD27Q=}d0S1fh*;<%o$bp<#W=W<_g&$MHO`^=6yc zcQ5+-b0gU|xa!RJZgfa>o)U6W*L89VRRm;{;nn>shU2B;#iWa;RcAD!2 z1V7~c1gKCkKOa1EOcxEJ(YjY-=;F?OboStpe*ZDAP-h#u$hYL5c0+qfZ`d50%8JNY zK$xqw<+(EyF%V@m6&PDz$24P|94hZQ{@_ms_{s)sKn zumw50t{H@SSv$<{v)aguBz9Hx*C2Z=RC`pgko;w&w**XndciP+Pr}fFxbT)PehgyN zs{)gK0W>Lf)5KEd7GUXPv+v06B&jQzsf!21m3DJuD>5uaYvGe77f)W1XGjBJh}bBq zPwkaE8jL-IB7VpM<9n zq-zeJe={5&pA=M8l^>s719N<>=aoSxB|&;dgLnW?ZXmSXzxxJhC6Ml{%XF}OO%_U& z?!!`SD(DV|+B3wmpLI?}S;kkT%@pTF^c|Sg*x9c(>Fev>;+kl534Il%7#`%xd|k*Z z54EV1;-z`x8Ju7^xw!2t8>6rWaLxS`jrU44zH=9!@wLkk;>A{-LPiCX=Q-oEm3AAi zHPKuY`a8yWHY0{nFDKBbgAQc+q%Mj!%WQ}{=^|l%DU<+|6byz4gQeL&A7(EoNWL&L z%LfxH@R-MGOOBJj8LU2#%9>dx1sUj4V(P!Xe_JyGk|W(U@BaA~LX*TS#?^sXxi!z@ z)4^-+mG9}QtmjGxdYS2~m;^`aTSlqqPTwPjM+f^mr96q$RCW6&| z9^U9o!rSm?*M)3JHYQs7ZsQ7oNkVzxf-h}UpGccMGR#U$stf-ams{a8k?3j+BcBmw ztW3z7o_&=BppYuougj1gR!tgZNv3R0oNcS^bnT++Y7J9ClYVL&T6Q^4+sIQqXU)RX zP|o;Jb=VC_-clk}o$*FO%?EH=%v=Jufr-z4o*dXzZ=lC_(HKcZp8%oDfwE#;; zvV+Kvd5`*9CXECQwXq1T?k#sIf!E%z#EwtFMFx?$Rm!+NNIGUetE8pWRfI{d?WwYjEP+;bf@ERjKVqR%zS4U`W(F&JecMaO=HVY`^(@ z?Bp@SgO(Ukk4mhT1eKiO4|%5)euX-;pZY$2;aQjomOcQyD?V!VLi$+vTjl4g9{lp~ zqa`}OYT0u#?$jLt0mR;!Rv{}%g>KSKySeC}T)Rjgee0~?l`W))did?L|rwq5=fdGmY ztIf-jZ0VVclMCeuF`+qscb*XDP~UrAC496-3@Wyd(E%qf{qI7hq+0VH3DEOu;^Mg| zAX7N;C7M2?k)L`PI2v zyxg&feR6_}V)w?*C(7O=Qx*MhC2-8_e2EeW7ZLK}%DqCNsEl-PGbg5ib|ndAYarw1 zNJFqtEgHeGP7BcA)Yp`Y*o&-me#VIGnnqwedF68S0}gg#CsAf5AiQBAtog=7U$ZZ1 z!EbMObu5C!mV$9hPfa1oO@r%b;3Z~8xZCdgFB=A1I>TbBrr+6Wii(o1qVYT3IDcjx ztf||Uik>rjT@!}oS-PJV+Cjlkrv@1*uS2R|WaI|2e%=85FNv<0^4T2s&Fm0pCm0HP2lm$#RiJ9%lW-xQ z@@pyeG6G>{a7pi1LX%Bz(qA>gAn9iflr_dXkQ;$~MZ+fo2}!jua486e@TB@(V@kpu zUrTouW2s!%)Uq@b*nD=f6GWh&W?EXZceBO!t72vn46(Rs6j6hzBNa09sSnw0TnE|C)mPhOT^* zwx;PDk+ko~*;Dh6VZzCR6(vi%X$g3j74(yhJ2pi9=~PlzU;vrOL(F=T{j7|M5yl79(8 zJ@-Z>bCR6!u8*s7@I+I>-m8X%9gwK6V?r~bc9Fc^K<#P2H{fIL8sloGOb#@8W0b~v z*zwO>fWdFDFWCu~RydT&%$~#+#$rh=v~Yro4|3Bl)(E=O#bn9yhHc*2Gjna5@l(d< zg*(B0?=DB2RY$<4;W{AtxSr>2s8^QDty)XxXrK526Pwi2og~eizy>cjOSqhezpFV6 zi*w|P9%}b}D)Y(4BBMj!o^z|$rrpXme0tMw`L}OPi$1KA>M)X5wxpJ8H~D)m@KFK) z#J)U>6!O)z=jFlW|E#@m^fHW-Ib5}O*EziUEZ;~BT?B(5X*dQ1p#*Q~w0>SLnv*74 zdU-L3-15@0FU~;@Tt?A;`x?cP=E?xjBsKvHv}V=cJ#OGVLSWtX24G{h<@6v>M9D(A zs!BL%wrNm2df&q-lg|o43Yl>>1y)RD5KHkgz3aHIn1wl&N<9E!srRMvduJ2EG*4A<~g``4VS0=w+DkuF)=C|@gD};*{mV> z9XY26E_S%ziIw~R^N_P^^}oYb?O`^J|DABd!qBQu<#09p=b+L59IWBV8fMtB2WTgZ z&`uDpB#*yiHHvvh`wc4`6Xh^~4a`VpKpf=324mSqdC-D&U=LVtuX)vss3J(h3R zq5l>@&!m&tN>pCx`T6@f$$MT!keedAoAkf|ut|KL?Dw-<@U|AM%FCNo@K&r>g(=E>ksG1mE_5RU^*XBdUTkRaC6aIV{!UenrTy&mB3dn{?AzcGE0 z&4Rb#8j|hWebtMVLuM~MWdB@X`<8Oj3YZq>X|K}^mpzdkN{%=NIFZn)=Q$)~X ziJa;};?RO#f*b}HsGN%NY&(TXdJib>vpWx2{o;^nxWh3O+L3J&Jb|>#P(jp!kQchSERU zty8zX=hV@or{?z4|DK#*fK~GL?K5}I%-uCRd*}4*J@mit#aoh2yg&IcUPwNI=aY}J zpW)x7o!zr;5;$@eAycYE)>_lp0SSw_nuuu1*%`+0<)hn-nw&YU^# zIWzB>0TcLt_=oT8p#BLSqAyY!$^qcklM0Bclz!x~A z4n731KDEGCzy#jf3SYLll9x49_%a`NuAc<)fUhrjDFxpvd}rKEiotL2snILK@>Aqg z4GGvXh5yByv|5VNI<$7P5sFa_7cU#CYXk>tT=raz=*r=`m@7WEz1JG93o(Pyo@sZh z+vae$*y)RlQI+u z$SR_{3jh#3Cp6yf zosLX7yP{nlZzSxYKbgy9TRdG$J@I|9k=&05Baw7}ERsfjYleOM34IZB6GpgEY{bVw z0TEarOobjAwUivf2p_|zQ)}b}5ges>eKCEZM(GY*hQ4rdArxHbfm>an#W)iVGrn-x z_bX98#6k)RqEGb>cL<5=AKZ zj6ci84YH**PKGtEsS=HoP0rSOjsEmtSld?H=IUkw8MD=*Gn&l?`U_)&Uusrs5=#!H=8&Nk&VJ8D~ zvvpn0{)y&crq|lx^|)M~4ktVn^lcG~ecx99b|(6(F0VI){?Hi4V87lgn!x+)*TKGA zK8IS7&!M*SJJ2l!In-{F8ZCHE0pKM2(6~&={dAcyGrH7%dUwC8dB|f4*Ujy&58F5R zyiVM=i{6RO&h37a-bYi<7_7Okc6mJEE}tie@XQYTH&0)@Y+iH=pBL>e%!`IisxOxp z{qF4^?^LL-lZkk{B7Q@tDbxpsypt?D;jvCSLmnoqsN3e`=gFHz6IgfVvF?b7?x^x9 zxp{$6NM3wOt`qNR3m;=~^1It^I$NY6vMXxH?m4I-=}D*|eHNl2qKO<8G28cT@o(?s zH3YXG%kX+A!$wM5KJSlj9cfonQpN?BM7n;QD__x&y{;MN_|P z=HSA%%*4f3>4TsJUN6+zu8?QzluMHn%M+P#r_F|h3Md1Z03D(ks)=Ia9zM^DByZUZ zlD8aac%5{XDvltwU+n|0oP;K!RE-43gz|NCFTQW3f=?jRU#BS#s zK_)y%C+Cc2n`>^ajx1YQ9ofasgx#@@`PEh>zL~e@NM|_H?@OJo#06BhR&Y6 zTwe#}T0>dl#yo)@{%pPhdGN#>c__>VsH|SL~z##yEI{^XO!7-Sf zgx>5Zq&K&$J>=NUCdz2Zvzujlq5&LX!{1rJ+#uv;&@&fMo9S7-Mr{Fev&J4Pvsv!9 z&=&{eKmA(Tr2FBwO%|u=YhckAH5&|OULRrG8>rzmhOa`%YjzNgv^VFeabs(kBxge#vs&mc*g_H zo{pC0_6`>q>X--yCq16YU~r;iTgc}Np+AiA)U%LBe-UH+0gUK0hIcF$0hP{CfYV4M zE|3RwhY;|EWu7;n$J4Hs!47Mv4kA*-C0he@&v<~{?lb5<1b!JYx_Cgx_V-!v=DgoO zFXWLa1UxbakCA*=5SBWGP%A7V^zMaNTGDW`bGz%p&UWaT410%69u7@i(BEqMw8`on z_XoB!y+0ywn%7Mm{XeN%YNUuUWfpS7uu3`!`^!P7N5lgl*WuJsn-KX+R?K{2z~&~M z+3cX_=G0yE|CCSHdzwE97JK^9S)ouT`{;|8EsQO z>5+JnRYi@RmhkLo4;XTfD|L+xo9o04ngL&zbz6hdsHv`1kNOi7pcGIxZc!Jt0oglD zqF4{&98E%|Erf9P>0P^Kw{M@NKb6h>45+e;YR=v%VLv-WQL2gB72k}Ua~f-X?IyB2 zh~0K{bK3&H`G-Anoe0p_MFUG*i7B$nEvB|`o7_!QBianKVfuQhy+8&i)O8MBD3;C6 zt*m&#-Sydx8W(vRo z2ckuM7Be=EhF6gJ5_( z{iSEDP(z;iQhFS%pTlu}H9iBriQCa3x{g-fp@KEAc;)?>v8D6VcPxWvf0=t5Sj6Kw zL3iV`-c50Re&HR?6;wYjCcM0kWdUD-mY2B`sqc>OJ~}--ykp;dIJpOW>1VmO{q1jH z@rOS|Ys;`LH{!Fejd2}W$VPg=18hA9ut14k$a3q|(rXS64<9&t;z%lekgosKnKPew z*U_UC(qU+yUW4x&!guAOCa(3+g&N5BkcC~GTKewtwsXti$6w7gy$3|OadE;nW$;

@?E$Di7gd14g%t$O$|L%$X3 zuZ-%CZ;%2SP6Zm!#PT5Wj}qU4ir=h4Dp!Xp-o$^0GX*6QiA*A^msd$ua1J)WAGM1_ ze|_~g{{4CIzb`yQzxCf2=jLj_$8!B#Up(*~pQIl_{P(!CQG)CY>Iinym6<9)Qq|zg z9d$})UA;uAb5j!B8^H~>O85m+fQj@cGXvM;ewW$d+1}N)-LoT;``xvJ*@-t!Prq>- zsLr|eooPHh5t|DH=3*148_(=>o!dJ7+O1n(JB{0gdDe2g-`E~^S6AWWF4P)z2K6*U z<#9oSd@ZdgYpJV;cmUhR;{k#+vWNbLv!|P~KAZOJ+4%t3M3;Y_{xI1@2UPu~ztFFR zzo$U)iVOg%8csFnRU-Ap2M?>!tX8eXPa16M8lV?1m7<$i1b2bt*O<-pYY%Hxb>I- z_hd1t@?4l-p6uy4wPovR__-~WPN$OTbW%Qk_rB%3CMND)-gnpd>a{ETuDf>MzH703 z)bOJp>ZgSAeiR+S&966a5NvB~DBR5WP+c9D&Bvf*KJ^zDuK55hzxCfsbj>OBP6mGb z6!u$5Eyrs&16ouIC}h?tQCtB zuKZ&eAKwL@Bl)i0?qh@Oj61QM9FFy#mtPeNb;m+u+SXlc-y$3IgQ@AR$Q-NItcJth z=D-Zo>T0*BR<+u;QKoZrBhp0`{OE$?TtjW520pSuMpIQ_Z6^!*ayNM0=Jd;k4Mz|F^U-@&l~oC_k% zDT~BIIzWq+8)!h+V6H2aRFzm%#Vx}@@LwqqS)Lx&V6!_g;+ME$6Q^dv@kh?rfxVrH zlOxQ$-MGWoKRTT5$h3jC=Dy-hg7*Y>cO~~n44Pwlb27m8DjLDDLwD9A*?3{wI_O96 zdg`HgtsKyx4(IQStBA%LC4g(>3USoD1t}gR`3`YBSJp}vK8K#Va1GUF7bbr2%U!rX z#UA@xb_cqT4_Y%(g8&;k(nm=#!s@;C6olhF`D##a}%%v z8+ao3?42M?yALh@`@d*6tc2~I7RnKwpTkg#AJJ~2p@An7q-ZD>x(dlhR8E5U7C_Mo zDOw~!mrJK}F)m+wD>~lB-D<}YEIbH~ExL~#3Xdp>K%C!>MGg-P9FE3O*kL~FRusv}W^o@su)195uq0qRZX~@Tn`+Vb!Z>Z_}zLu6?u%*S9)5qG| zqtW*E7`H~{hW&TI{;Mb((xY0aKg4>h>5+6z$4OjQWIy!0{s^Z7k%C%HLG@8vje4|R zYO!G{2#pC#bUNryqW+0^Ji}RqJLA=QT~lL~hzv3EyJ(t&E-%jM=X<3vhh|Iq|lSrJ| zHg+bNI6KxiIFRlg9PE`(T{v>+!j9<+hYnwuTD|$`v0HCBcJ!7!E|1WkDuc`3OeMJd z?7}r4rwOKUETg3t$#s{qnpq_^U^cUY+|GFx-3fv(EzU z{6{}}6uethT4#F

$Cb41@m+FD25)dmelD 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 Q<9hh{kNUr^8ZTb_7vEh?SpWb4 diff --git a/static/fonts/ginto/ginto700.woff b/static/fonts/ginto/ginto700.woff deleted file mode 100644 index 5c7c4f38cfa3527b3aa08b4def09245c67432372..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62768 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 TH!WL!+)sQ=)c=<)|G)nOZxm_5 diff --git a/static/fonts/whitney/whitney300.woff b/static/fonts/whitney/whitney300.woff deleted file mode 100644 index dc914270c373bde791244dc47b0ab7f4480916ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79856 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�T#mKf$A9O39qmkvlD3sgv&= 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 QbhyDFLdg)qAc$)I7od4$e*gdg diff --git a/static/fonts/whitney/whitney400.woff b/static/fonts/whitney/whitney400.woff deleted file mode 100644 index 2b3308154b56e5e8b22e7a5ab4ab2b72610693c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77784 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 gWebffX}=#6f=CJg(lf@4}+|r|$UQ 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 z%0D(i5$){~EoZX)-KMqVHz$px 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 F>_1|+9rFMH diff --git a/static/img/dorukyum.png b/static/img/dorukyum.png deleted file mode 100644 index e75fadb64a5470581e2977892b10f90cf92bfbc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 484659 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

S$G}lI*xS5 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

_#9HO+P^XZwSfjD8g` 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ì* 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.0.0": - version "19.2.18" - resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.18.tgz#eb0b6a1fb635d1a9692d5f84a3495bd8ad153707" - integrity sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w== - dependencies: - csstype "^3.2.2" - -"@types/retry@0.12.2": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" - integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== - -"@types/sax@^1.2.1": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.4.tgz#8221affa7f4f3cb21abd22f244cfabfa63e6a69e" - integrity sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw== - dependencies: - "@types/node" "*" - -"@types/send@*": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" - integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== - dependencies: - "@types/node" "*" - -"@types/send@<1": - version "0.17.6" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.6.tgz#aeb5385be62ff58a52cd5459daa509ae91651d25" - integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-index@^1.9.4": - version "1.9.4" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" - integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== - dependencies: - "@types/express" "*" - -"@types/serve-static@*": - version "1.13.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" - integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@^1", "@types/serve-static@^1.15.5": - version "1.15.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" - integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== - dependencies: - "@types/http-errors" "*" - "@types/node" "*" - "@types/send" "<1" - -"@types/sockjs@^0.3.36": - version "0.3.36" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" - integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== - dependencies: - "@types/node" "*" - -"@types/supports-color@^8.0.0": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@types/supports-color/-/supports-color-8.1.1.tgz#1b44b1b096479273adf7f93c75fc4ecc40a61ee4" - integrity sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw== - -"@types/text-table@^0.2.0": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@types/text-table/-/text-table-0.2.2.tgz#774c90cfcfbc8b4b0ebb00fecbe861dc8b1e8e26" - integrity sha512-dGoI5Af7To0R2XE8wJuc6vwlavWARsCh3UKJPjWs1YEqGUqfgBI/j/4GX0yf19/DsDPPf0YAXWAp8psNeIehLg== - -"@types/unist@*", "@types/unist@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" - integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== - -"@types/unist@^2.0.0": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.11.tgz#11af57b127e32487774841f7a4e54eab166d03c4" - integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== - -"@types/ws@^8.5.10": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" - integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== - dependencies: - "@types/yargs-parser" "*" - -"@typescript/typescript-aix-ppc64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz#cdc7ce81d60f1e09034960ddfb1fb880d7a776b6" - integrity sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ== - -"@typescript/typescript-darwin-arm64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz#a55fdfcfa58df58d27db2237cde6a5c1e35a7235" - integrity sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA== - -"@typescript/typescript-darwin-x64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz#38d1c9172800a91d707bec64d2a370a016634db4" - integrity sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA== - -"@typescript/typescript-freebsd-arm64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz#f1ff8810030b35d2b5be0db6a2dc650460ea94fa" - integrity sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ== - -"@typescript/typescript-freebsd-x64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz#3d86b03f353c5b1ba95162eb6ce35533bfc294bd" - integrity sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw== - -"@typescript/typescript-linux-arm64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz#d9334d96d6dac6ff85da9c865588948de939e91f" - integrity sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ== - -"@typescript/typescript-linux-arm@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz#ad94b41e1aee2a4dcc6a298c7b67c43345fde32e" - integrity sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ== - -"@typescript/typescript-linux-loong64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz#2965aee4fc873360139d893daafe6397a29138ad" - integrity sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ== - -"@typescript/typescript-linux-mips64el@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz#1a887a311bed3a833f80bfd4a9ed37c271936cf0" - integrity sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA== - -"@typescript/typescript-linux-ppc64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz#8b63c9b2f445b393eb4e43ec21da225dade3577d" - integrity sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA== - -"@typescript/typescript-linux-riscv64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz#b6e8a35c289b3ea97a92a41d461aaeed0d3b36e1" - integrity sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ== - -"@typescript/typescript-linux-s390x@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz#2ef96693be4861f6d17965427e5b009cbbed1a3e" - integrity sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw== - -"@typescript/typescript-linux-x64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz#73269cb0baba50aea0ca060445a6b88e583f1ce2" - integrity sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A== - -"@typescript/typescript-netbsd-arm64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz#3a3649f97fafa210b4e6e3798c15e06605c8a901" - integrity sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA== - -"@typescript/typescript-netbsd-x64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz#47ec59491a40c470d2807dc4d2b825528fd979ab" - integrity sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA== - -"@typescript/typescript-openbsd-arm64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz#796be8da0bd989d8a3fb96f2801e38a8365b4baf" - integrity sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ== - -"@typescript/typescript-openbsd-x64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz#d37fe2a729eb942c076c454ee7f1815faf7d560f" - integrity sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg== - -"@typescript/typescript-sunos-x64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz#aba8d3464c3565a7044789baba96916bd4ab2c88" - integrity sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g== - -"@typescript/typescript-win32-arm64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz#b9de50a17196383f62620b5f9d0a2f34ad3b60d7" - integrity sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ== - -"@typescript/typescript-win32-x64@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz#cf3b7b0d6ce5635daca4c8e01c189cdcde47ec3c" - integrity sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g== - -"@ungap/structured-clone@^1.0.0": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.3.tgz#094041e1a4cb1987f038335421281ac8be390bcc" - integrity sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg== - -"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" - integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== - dependencies: - "@webassemblyjs/helper-numbers" "1.13.2" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - -"@webassemblyjs/floating-point-hex-parser@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" - integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== - -"@webassemblyjs/helper-api-error@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" - integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== - -"@webassemblyjs/helper-buffer@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" - integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== - -"@webassemblyjs/helper-numbers@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" - integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.13.2" - "@webassemblyjs/helper-api-error" "1.13.2" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" - integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== - -"@webassemblyjs/helper-wasm-section@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" - integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-buffer" "1.14.1" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/wasm-gen" "1.14.1" - -"@webassemblyjs/ieee754@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" - integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" - integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.13.2": - version "1.13.2" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" - integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== - -"@webassemblyjs/wasm-edit@^1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" - integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-buffer" "1.14.1" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/helper-wasm-section" "1.14.1" - "@webassemblyjs/wasm-gen" "1.14.1" - "@webassemblyjs/wasm-opt" "1.14.1" - "@webassemblyjs/wasm-parser" "1.14.1" - "@webassemblyjs/wast-printer" "1.14.1" - -"@webassemblyjs/wasm-gen@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" - integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/ieee754" "1.13.2" - "@webassemblyjs/leb128" "1.13.2" - "@webassemblyjs/utf8" "1.13.2" - -"@webassemblyjs/wasm-opt@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" - integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-buffer" "1.14.1" - "@webassemblyjs/wasm-gen" "1.14.1" - "@webassemblyjs/wasm-parser" "1.14.1" - -"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" - integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@webassemblyjs/helper-api-error" "1.13.2" - "@webassemblyjs/helper-wasm-bytecode" "1.13.2" - "@webassemblyjs/ieee754" "1.13.2" - "@webassemblyjs/leb128" "1.13.2" - "@webassemblyjs/utf8" "1.13.2" - -"@webassemblyjs/wast-printer@1.14.1": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" - integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== - dependencies: - "@webassemblyjs/ast" "1.14.1" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - -accepts@~1.3.4, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.0.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.0.0, acorn@^8.15.0, acorn@^8.16.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.18.0.tgz#4faf01b2d6d326bfeed97aea1f52220b5f4c1940" - integrity sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ== - -acorn@^8.0.4, acorn@^8.5.0: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== - -address@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/address/-/address-2.0.3.tgz#e910900615db3d8a20c040d4c710631062fc4ba8" - integrity sha512-XNAb/a6TCqou+TufU8/u11HCu9x1gYvOoxLwtlXgIqmkrYQADVv6ljyW2zwiPhHz9R1gItAWpuDrdJMmrOBFEA== - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.0.0, ajv-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.9.0: - version "8.20.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.20.0.tgz#304b3636add88ba7d936760dd50ece006dea95f9" - integrity sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA== - dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - -ajv@^8.8.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -algoliasearch-helper@^3.26.0: - version "3.29.3" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.29.3.tgz#dc21f119320acbdd5890a21021846b5730d11e03" - integrity sha512-gVOMbbPVrCO3Xs+B+BLAIGFqIQow6qHMTYCEeBqLQB9m4ZmKUqMwkEumlal2iyyezHEd4Y0FvFTLbCRutCutIQ== - dependencies: - "@algolia/events" "^4.0.1" - -algoliasearch@^5.37.0: - version "5.57.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.57.0.tgz#79b103088c1addccb707bafcd8623827dd62c0cf" - integrity sha512-HpND7MBGctOAkd1GoQoDZCGoCpqNTS5NG1LuhElFet3RdLJkwnyTYZXZhXwtpAQPrI36fqQ3eT6KQrdKDTKu3A== - dependencies: - "@algolia/abtesting" "1.23.0" - "@algolia/client-abtesting" "5.57.0" - "@algolia/client-analytics" "5.57.0" - "@algolia/client-common" "5.57.0" - "@algolia/client-insights" "5.57.0" - "@algolia/client-personalization" "5.57.0" - "@algolia/client-query-suggestions" "5.57.0" - "@algolia/client-search" "5.57.0" - "@algolia/ingestion" "1.57.0" - "@algolia/monitoring" "1.57.0" - "@algolia/recommend" "5.57.0" - "@algolia/requester-browser-xhr" "5.57.0" - "@algolia/requester-fetch" "5.57.0" - "@algolia/requester-node-http" "5.57.0" - -ansi-align@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" - integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== - -ansis@^3.2.0: - version "3.17.0" - resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.17.0.tgz#fa8d9c2a93fe7d1177e0c17f9eeb562a58a832d7" - integrity sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg== - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.1.tgz#eb0c9a8f77786cad2af8ff2b862899842d7b6adb" - integrity sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -asn1js@^3.0.10, asn1js@^3.0.6: - version "3.0.10" - resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.10.tgz#df26c874c8a8b41ca605efea47b2ad07551013dd" - integrity sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg== - dependencies: - pvtsutils "^1.3.6" - pvutils "^1.1.5" - tslib "^2.8.1" - -astring@^1.8.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/astring/-/astring-1.9.0.tgz#cc73e6062a7eb03e7d19c22d8b0b3451fd9bfeef" - integrity sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg== - -autoprefixer@^10.4.19, autoprefixer@^10.4.23: - version "10.5.4" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.5.4.tgz#3b7dd848b4155514a95ad1f6ce598844bea09697" - integrity sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA== - dependencies: - browserslist "^4.28.6" - caniuse-lite "^1.0.30001806" - fraction.js "^5.3.4" - picocolors "^1.1.1" - postcss-value-parser "^4.2.0" - -babel-loader@^9.2.1: - version "9.2.1" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.2.1.tgz#04c7835db16c246dd19ba0914418f3937797587b" - integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA== - dependencies: - find-cache-dir "^4.0.0" - schema-utils "^4.0.0" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-module-resolver@5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.3.tgz#13f03cf29048ad7e0239e6a1c4dcc669d199f394" - integrity sha512-h8h6H71ZvdLJZxZrYkaeR30BojTaV7O9GfqacY14SNj5CNB8ocL9tydNzTC0JrnNN7vY3eJhwCmkDj7tuEUaqQ== - dependencies: - find-babel-config "^2.1.1" - glob "^9.3.3" - pkg-up "^3.1.0" - reselect "^4.1.7" - resolve "^1.22.8" - -babel-plugin-polyfill-corejs2@^0.4.14, babel-plugin-polyfill-corejs2@^0.4.15: - version "0.4.17" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz#198f970f1c99a856b466d1187e88ce30bd199d91" - integrity sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w== - dependencies: - "@babel/compat-data" "^7.28.6" - "@babel/helper-define-polyfill-provider" "^0.6.8" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz#bb7f6aeef7addff17f7602a08a6d19a128c30164" - integrity sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.5" - core-js-compat "^3.43.0" - -babel-plugin-polyfill-corejs3@^0.14.0: - version "0.14.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz#6ac08d2f312affb70c4c69c0fbba4cb417ee5587" - integrity sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.8" - core-js-compat "^3.48.0" - -babel-plugin-polyfill-regenerator@^0.6.5, babel-plugin-polyfill-regenerator@^0.6.6: - version "0.6.8" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz#8a6bfd5dd54239362b3d06ce47ac52b2d95d7721" - integrity sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.8" - -bail@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/bail/-/bail-2.0.2.tgz#d26f5cd8fe5d6f832a31517b9f7c356040ba6d5d" - integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -baseline-browser-mapping@^2.11.12: - version "2.11.15" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.15.tgz#9c0cac93d7d304f3d61bb41088a102cd62e68676" - integrity sha512-FwMjJJ7HnyZpWe+oWxegG0fezZyBZUagI5LZEoO3GCbtbKNwRfMH9Ue5d5v01PNePBy1QSfPSDTTeVL0Hb9EzA== - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -body-parser@~1.20.5: - version "1.20.6" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.6.tgz#60c789c78e0992d906da0a29d71ae01d15c1ed76" - integrity sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g== - dependencies: - bytes "~3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "~1.2.0" - http-errors "~2.0.1" - iconv-lite "~0.4.24" - on-finished "~2.4.1" - qs "~6.15.1" - raw-body "~2.5.3" - type-is "~1.6.18" - unpipe "~1.0.0" - -bonjour-service@^1.2.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.4.4.tgz#8ff5b85fa0641e0996bf40bcf61fc0c6727b66d3" - integrity sha512-jCZcVv7eoc4QesRscwEZtSROBen+6LpKAmBIsQYQrsAeVHLyMXWX/t6eIV5KiRZYNUBl8eVqImEEMQ8L5+c/Kw== - dependencies: - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.5" - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -boxen@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d" - integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== - dependencies: - ansi-align "^3.0.1" - camelcase "^6.2.0" - chalk "^4.1.2" - cli-boxes "^3.0.0" - string-width "^5.0.1" - type-fest "^2.5.0" - widest-line "^4.0.1" - wrap-ansi "^8.0.1" - -boxen@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.1.1.tgz#f9ba525413c2fec9cdb88987d835c4f7cad9c8f4" - integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog== - dependencies: - ansi-align "^3.0.1" - camelcase "^7.0.1" - chalk "^5.2.0" - cli-boxes "^3.0.0" - string-width "^5.1.2" - type-fest "^2.13.0" - widest-line "^4.0.1" - wrap-ansi "^8.1.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.3, braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -browserslist@^4.0.0: - version "4.23.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" - integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== - dependencies: - caniuse-lite "^1.0.30001646" - electron-to-chromium "^1.5.4" - node-releases "^2.0.18" - update-browserslist-db "^1.1.0" - -browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.28.1, browserslist@^4.28.6, browserslist@^4.28.7: - version "4.28.8" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.8.tgz#a3c79ceb70028527e5da7dafc887f3200b5168c0" - integrity sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA== - dependencies: - baseline-browser-mapping "^2.11.12" - caniuse-lite "^1.0.30001809" - electron-to-chromium "^1.5.402" - node-releases "^2.0.53" - update-browserslist-db "^1.3.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -bundle-name@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" - integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== - dependencies: - run-applescript "^7.0.0" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2, bytes@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -bytestreamjs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/bytestreamjs/-/bytestreamjs-2.0.1.tgz#a32947c7ce389a6fa11a09a9a563d0a45889535e" - integrity sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ== - -cacheable-lookup@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" - integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== - -cacheable-request@^10.2.8: - version "10.2.14" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" - integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== - dependencies: - "@types/http-cache-semantics" "^4.0.2" - get-stream "^6.0.1" - http-cache-semantics "^4.1.1" - keyv "^4.5.3" - mimic-response "^4.0.0" - normalize-url "^8.0.0" - responselike "^3.0.0" - -call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-bound@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" - integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - dependencies: - call-bind-apply-helpers "^1.0.2" - get-intrinsic "^1.3.0" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -camelcase@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" - integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646: - version "1.0.30001651" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz" - integrity sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg== - -caniuse-lite@^1.0.30001806, caniuse-lite@^1.0.30001809: - version "1.0.30001809" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz#e6cf71f14ddfe008f114dd2a846923be3c03a07b" - integrity sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ== - -ccount@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" - integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== - -chalk@^2.0.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" - integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== - -chalk@^5.0.1, chalk@^5.2.0: - version "5.6.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" - integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -character-entities-html4@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" - integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== - -character-entities-legacy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" - integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== - -character-entities@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" - integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== - -character-reference-invalid@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" - integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== - -cheerio-select@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" - integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== - dependencies: - boolbase "^1.0.0" - css-select "^5.1.0" - css-what "^6.1.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - -cheerio@1.0.0-rc.12: - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== - dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" - parse5-htmlparser2-tree-adapter "^7.0.0" - -cheerio@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.2.0.tgz#f23b777c49021ead7475dcf3390d3535a7f896d6" - integrity sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg== - dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.2.2" - encoding-sniffer "^0.2.1" - htmlparser2 "^10.1.0" - parse5 "^7.3.0" - parse5-htmlparser2-tree-adapter "^7.1.0" - parse5-parser-stream "^7.1.2" - undici "^7.19.0" - whatwg-mimetype "^4.0.0" - -chokidar@^3.0.0, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chokidar@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chokidar@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-5.0.0.tgz#949c126a9238a80792be9a0265934f098af369a5" - integrity sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw== - dependencies: - readdirp "^5.0.0" - -chownr@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" - integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== - -chrome-trace-event@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz#05bffd7ff928465093314708c93bdfa9bd1f0f5b" - integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -ci-info@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.0.0.tgz#65466f8b280fc019b9f50a5388115d17a63a44f2" - integrity sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg== - -clean-css@^5.2.2: - version "5.3.0" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.0.tgz#ad3d8238d5f3549e83d5f87205189494bc7cbb59" - integrity sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ== - dependencies: - source-map "~0.6.0" - -clean-css@^5.3.3, clean-css@~5.3.2: - version "5.3.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.3.tgz#b330653cd3bd6b75009cc25c714cae7b93351ccd" - integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== - dependencies: - source-map "~0.6.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-boxes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" - integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== - -cli-table3@^0.6.3: - version "0.6.5" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" - integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clsx@2.1.1, clsx@^2.0.0, clsx@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-2.1.1.tgz#eed397c9fd8bd882bfb18deab7102049a2f32999" - integrity sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA== - -collapse-white-space@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-2.1.0.tgz#640257174f9f42c740b40f3b55ee752924feefca" - integrity sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-parse@^1.4.2: - version "1.4.3" - resolved "https://registry.yarnpkg.com/color-parse/-/color-parse-1.4.3.tgz#6dadfb49128c554c60c49d63f3d025f2c5a7ff22" - integrity sha512-BADfVl/FHkQkyo8sRBwMYBqemqsgnu7JZAwUgvBvuwwuNUZAhSvLTbsEErS5bQXzOjDR0dWzJ4vXN2Q+QoPx0A== - dependencies: - color-name "^1.0.0" - -color-rgba@^2.2.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/color-rgba/-/color-rgba-2.4.0.tgz#ae85819c530262c29fc2da129fc7c8f9efc57015" - integrity sha512-Nti4qbzr/z2LbUWySr7H9dk3Rl7gZt7ihHAxlgT4Ho90EXWkjtkL1avTleu9yeGuqrt/chxTB6GKK8nZZ6V0+Q== - dependencies: - color-parse "^1.4.2" - color-space "^2.0.0" - -color-space@^2.0.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/color-space/-/color-space-2.3.2.tgz#d8c72bab09ef26b98abebc58bc1586ce3073033d" - integrity sha512-BcKnbOEsOarCwyoLstcoEztwT0IJxqqQkNwDuA3a65sICvvHL2yoeV13psoDFh5IuiOMnIOKdQDwB4Mk3BypiA== - -colord@^2.9.3: - version "2.9.5" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.5.tgz#fe43625d8615b9a81d53280cc64afc435820bc6d" - integrity sha512-1N4FZkdj0BvP78UatS8VQHP+DnRy/rAyh+eelOONgZNsgatenTe+uApmVrdfknjqvsPdsBhq5tQpnIvClcNWZA== - -colorette@^2.0.10: - version "2.0.17" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.17.tgz#5dd4c0d15e2984b7433cb4a9f2ead45063b80c47" - integrity sha512-hJo+3Bkn0NCHybn9Tu35fIeoOKGOk5OCC32y4Hz2It+qlCO2Q3DeQ1hRn/tDDMQKRYUEzqsl7jbF6dYKjlE60g== - -combine-promises@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" - integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== - -comlink@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/comlink/-/comlink-4.4.2.tgz#cbbcd82742fbebc06489c28a183eedc5c60a2bca" - integrity sha512-OxGdvBmJuNKSCMO4NTl1L47VRp6xn2wG4F/2hYzB6tiCb709otOxtEYCSvK80PtjODfXXZu8ds+Nw5kVCjqd2g== - -comma-separated-tokens@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" - integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== - -command-exists-promise@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/command-exists-promise/-/command-exists-promise-2.0.2.tgz#7beecc4b218299f3c61fa69a4047aa0b36a64a99" - integrity sha512-T6PB6vdFrwnHXg/I0kivM3DqaCGZLjjYSOe0a5WgFKcz1sOnmOeIjnhQPXVXX3QjVbLyTJ85lJkX6lUpukTzaA== - -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -compressible@~2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79" - integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w== - dependencies: - bytes "3.1.2" - compressible "~2.0.18" - debug "2.6.9" - negotiator "~0.6.4" - on-headers "~1.1.0" - safe-buffer "5.2.1" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-6.0.0.tgz#49eca2ebc80983f77e09394a1a56e0aca8235566" - integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA== - dependencies: - dot-prop "^6.0.1" - graceful-fs "^4.2.6" - unique-string "^3.0.0" - write-file-atomic "^3.0.3" - xdg-basedir "^5.0.1" - -connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - -consola@^3.2.3: - version "3.4.2" - resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" - integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== - -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== - -content-disposition@~0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie-signature@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" - integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== - -cookie@~0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" - integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== - -copy-text-to-clipboard@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz#99bc79db3f2d355ec33a08d573aff6804491ddb9" - integrity sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A== - -copy-webpack-plugin@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== - dependencies: - fast-glob "^3.2.11" - glob-parent "^6.0.1" - globby "^13.1.1" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - -core-js-compat@^3.43.0, core-js-compat@^3.48.0: - version "3.50.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.50.0.tgz#d5922c2a692ab1cba6078c920e7c5567421ae08e" - integrity sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q== - dependencies: - browserslist "^4.28.7" - -core-js@^3.31.1: - version "3.50.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.50.0.tgz#a18646fcb0097650189b4504c803e887bcae4c0a" - integrity sha512-BRWgOLKkFeCgRudR6zrs8p9XJZcE14grzKMMssoYrk6krtuEZ7MTKPIY5RzOnqsEKIR9kst7wNzphttraT+Yqw== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^8.1.3, cosmiconfig@^8.3.5: - version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - -cross-spawn@^7.0.0, cross-spawn@^7.0.3: - version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" - integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== - dependencies: - type-fest "^1.0.1" - -css-blank-pseudo@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-7.0.1.tgz#32020bff20a209a53ad71b8675852b49e8d57e46" - integrity sha512-jf+twWGDf6LDoXDUode+nc7ZlrqfaNphrBIBrcmeP3D8yw1uPaix1gCC8LUQUGQ6CycuK2opkbFFWFuq/a94ag== - dependencies: - postcss-selector-parser "^7.0.0" - -css-declaration-sorter@^7.2.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.4.0.tgz#9c215fbda2dcf4083bae69f125688158ae847deb" - integrity sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw== - -css-has-pseudo@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz#a5ee2daf5f70a2032f3cefdf1e36e7f52a243873" - integrity sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA== - dependencies: - "@csstools/selector-specificity" "^5.0.0" - postcss-selector-parser "^7.0.0" - postcss-value-parser "^4.2.0" - -css-loader@^6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.11.0.tgz#33bae3bf6363d0a7c2cf9031c96c744ff54d85ba" - integrity sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.33" - postcss-modules-extract-imports "^3.1.0" - postcss-modules-local-by-default "^4.0.5" - postcss-modules-scope "^3.2.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.5.4" - -css-minimizer-webpack-plugin@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz#33effe662edb1a0bf08ad633c32fa75d0f7ec565" - integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - cssnano "^6.0.1" - jest-worker "^29.4.3" - postcss "^8.4.24" - schema-utils "^4.0.1" - serialize-javascript "^6.0.1" - -css-prefers-color-scheme@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-10.0.0.tgz#ba001b99b8105b8896ca26fc38309ddb2278bd3c" - integrity sha512-VCtXZAWivRglTZditUfB4StnsWr6YVZ2PRtuxQLKTNRdtAf8tpzaVPE9zXIF3VaSc7O70iK/j1+NXxyQCqdPjQ== - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-tree@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -css-tree@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" - integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== - dependencies: - mdn-data "2.0.28" - source-map-js "^1.0.1" - -css-what@^6.0.1, css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssdb@^8.6.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-8.10.0.tgz#fdb9cc7af72c81839265811ad8ca4e0a4db919c1" - integrity sha512-+JWEEjjoqkPY7iGHps3SaCT2w67Zpaj9zHvhCJ2iPBavKHwgtOOD2YEbZSCU8VO2uVGpKdYjVz+j6bhkNSjZ0g== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-advanced@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz#82b090872b8f98c471f681d541c735acf8b94d3f" - integrity sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ== - dependencies: - autoprefixer "^10.4.19" - browserslist "^4.23.0" - cssnano-preset-default "^6.1.2" - postcss-discard-unused "^6.0.5" - postcss-merge-idents "^6.0.3" - postcss-reduce-idents "^6.0.3" - postcss-zindex "^6.0.2" - -cssnano-preset-default@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz#adf4b89b975aa775f2750c89dbaf199bbd9da35e" - integrity sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg== - dependencies: - browserslist "^4.23.0" - css-declaration-sorter "^7.2.0" - cssnano-utils "^4.0.2" - postcss-calc "^9.0.1" - postcss-colormin "^6.1.0" - postcss-convert-values "^6.1.0" - postcss-discard-comments "^6.0.2" - postcss-discard-duplicates "^6.0.3" - postcss-discard-empty "^6.0.3" - postcss-discard-overridden "^6.0.2" - postcss-merge-longhand "^6.0.5" - postcss-merge-rules "^6.1.1" - postcss-minify-font-values "^6.1.0" - postcss-minify-gradients "^6.0.3" - postcss-minify-params "^6.1.0" - postcss-minify-selectors "^6.0.4" - postcss-normalize-charset "^6.0.2" - postcss-normalize-display-values "^6.0.2" - postcss-normalize-positions "^6.0.2" - postcss-normalize-repeat-style "^6.0.2" - postcss-normalize-string "^6.0.2" - postcss-normalize-timing-functions "^6.0.2" - postcss-normalize-unicode "^6.1.0" - postcss-normalize-url "^6.0.2" - postcss-normalize-whitespace "^6.0.2" - postcss-ordered-values "^6.0.2" - postcss-reduce-initial "^6.1.0" - postcss-reduce-transforms "^6.0.2" - postcss-svgo "^6.0.3" - postcss-unique-selectors "^6.0.4" - -cssnano-utils@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.2.tgz#56f61c126cd0f11f2eef1596239d730d9fceff3c" - integrity sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ== - -cssnano@^6.0.1, cssnano@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.1.2.tgz#4bd19e505bd37ee7cf0dc902d3d869f6d79c66b8" - integrity sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA== - dependencies: - cssnano-preset-default "^6.1.2" - lilconfig "^3.1.1" - -csso@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" - integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== - dependencies: - css-tree "~2.2.0" - -csstype@^3.2.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" - integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== - -debounce@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" - integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4.0.0, debug@^4.4.3: - version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== - dependencies: - ms "^2.1.3" - -debug@^4.1.0, debug@^4.2.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^4.3.1: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== - dependencies: - ms "2.1.2" - -decode-named-character-reference@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz#3e40603760874c2e5867691b599d73a7da25b53f" - integrity sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q== - dependencies: - character-entities "^2.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deepmerge@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -default-browser-id@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.1.tgz#f7a7ccb8f5104bf8e0f71ba3b1ccfa5eafdb21e8" - integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q== - -default-browser@^5.2.1: - version "5.5.1" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.5.1.tgz#1790affc52680fbb11e17cab2752d69aa2a37d2c" - integrity sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw== - dependencies: - bundle-name "^4.1.0" - default-browser-id "^5.0.0" - -defer-to-connect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-lazy-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== - -define-properties@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -depd@2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -dequal@^2.0.0, dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -destroy@1.2.0, destroy@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-libc@^2.0.3: - version "2.1.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" - integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -detect-port@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-2.1.0.tgz#03d72644891fa451ca5609b83107a8a0ebd03f91" - integrity sha512-epZuWb/6Q62L+nDHJc/hQAqf8pylsqgk3BpZXVBx1CDnr3nkrVNn73Uu1rXcFzkNcc+hkP3whuOg7JZYaQB65Q== - dependencies: - address "^2.0.1" - -devlop@^1.0.0, devlop@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" - integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== - dependencies: - dequal "^2.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dns-packet@^5.2.2: - version "5.4.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" - integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -docusaurus-plugin-sass@0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/docusaurus-plugin-sass/-/docusaurus-plugin-sass-0.2.6.tgz#b4930a1fe1cc7bcead639bb1bee38bce0ffd073d" - integrity sha512-2hKQQDkrufMong9upKoG/kSHJhuwd+FA3iAe/qzS/BmWpbIpe7XKmq5wlz4J5CJaOPu4x+iDJbgAxZqcoQf0kg== - dependencies: - sass-loader "^16.0.2" - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.1" - -domutils@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" - integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.5.4: - version "1.5.8" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.8.tgz#0a3225b305212f347be48f159a3c0a117d5e9801" - integrity sha512-4Nx0gP2tPNBLTrFxBMHpkQbtn2hidPVr/+/FTtcCiBYTucqc70zRyVZiOLj17Ui3wTO7SQ1/N+hkHYzJjBzt6A== - -electron-to-chromium@^1.5.402: - version "1.5.411" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.411.tgz#d56c7e43f91e2b3abb53b4eecd646e20d0b18b34" - integrity sha512-gglkxzokjHfawpGxq75XdBV2/l3BAPzrsMs70qgaZdTW5rpV1tC4MdgJVP9fN126bODA4ZJQkn1wryEzJyQXIg== - -emoji-regex@^10.2.1: - version "10.3.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" - integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -emojilib@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e" - integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -emoticon@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-4.1.0.tgz#d5a156868ee173095627a33de3f1e914c3dde79e" - integrity sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ== - -encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - -encoding-sniffer@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz#396ec97ac22ce5a037ba44af1992ac9d46a7b819" - integrity sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw== - dependencies: - iconv-lite "^0.6.3" - whatwg-encoding "^3.1.1" - -enhanced-resolve@^5.24.4: - version "5.24.5" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz#b4dad3255b7545f07ba5535189868e9f85f47573" - integrity sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.3.3" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^4.2.0, entities@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.0.tgz#62915f08d67353bb4eb67e3d62641a4059aec656" - integrity sha512-/iP1rZrSEJ0DTlPiX+jbzlA3eVkY/e8L8SozroF395fIqE3TYF/Nz7YOMAawta+vLmyJ/hkGNNPcSbMADCCXbg== - -entities@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -entities@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" - integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== - -entities@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-7.0.1.tgz#26e8a88889db63417dcb9a1e79a3f1bc92b5976b" - integrity sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -error-ex@^1.3.1, error-ex@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-module-lexer@^2.1.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.3.2.tgz#311fa4f40168c1975c505477c51b23234d41ad55" - integrity sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw== - -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz#a2d0b373205724dfa525d23b0c3e1b1ca582c99b" - integrity sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw== - dependencies: - es-errors "^1.3.0" - -esast-util-from-estree@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz#8d1cfb51ad534d2f159dc250e604f3478a79f1ad" - integrity sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - devlop "^1.0.0" - estree-util-visit "^2.0.0" - unist-util-position-from-estree "^2.0.0" - -esast-util-from-js@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz#5147bec34cc9da44accf52f87f239a40ac3e8225" - integrity sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw== - dependencies: - "@types/estree-jsx" "^1.0.0" - acorn "^8.0.0" - esast-util-from-estree "^2.0.0" - vfile-message "^4.0.0" - -escalade@^3.1.1, escalade@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escalade@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-goat@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081" - integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg== - -escape-html@^1.0.3, escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-util-attach-comments@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz#344bde6a64c8a31d15231e5ee9e297566a691c2d" - integrity sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw== - dependencies: - "@types/estree" "^1.0.0" - -estree-util-build-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz#b6d0bced1dcc4f06f25cf0ceda2b2dcaf98168f1" - integrity sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - estree-walker "^3.0.0" - -estree-util-is-identifier-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz#0b5ef4c4ff13508b34dcd01ecfa945f61fce5dbd" - integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== - -estree-util-scope@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/estree-util-scope/-/estree-util-scope-1.0.0.tgz#9cbdfc77f5cb51e3d9ed4ad9c4adbff22d43e585" - integrity sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - -estree-util-to-js@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz#10a6fb924814e6abb62becf0d2bc4dea51d04f17" - integrity sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg== - dependencies: - "@types/estree-jsx" "^1.0.0" - astring "^1.8.0" - source-map "^0.7.0" - -estree-util-value-to-estree@^3.0.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-3.5.0.tgz#cd70cf37e7f78eae3e110d66a3436ce0d18a8f80" - integrity sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ== - dependencies: - "@types/estree" "^1.0.0" - -estree-util-visit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-2.0.0.tgz#13a9a9f40ff50ed0c022f831ddf4b58d05446feb" - integrity sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/unist" "^3.0.0" - -estree-walker@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eta@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eta/-/eta-2.2.0.tgz#eb8b5f8c4e8b6306561a455e62cd7492fe3a9b8a" - integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eval@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" - integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== - dependencies: - "@types/node" "*" - require-like ">= 0.1.1" - -eventemitter3@^4.0.0, eventemitter3@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -express@^4.22.1: - version "4.22.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.22.2.tgz#c17ae0981e5efc24b22272f0e041c4662503b700" - integrity sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "~1.20.5" - content-disposition "~0.5.4" - content-type "~1.0.4" - cookie "~0.7.1" - cookie-signature "~1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~2.0.0" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.3.1" - fresh "~0.5.2" - http-errors "~2.0.0" - merge-descriptors "1.0.3" - methods "~1.1.2" - on-finished "~2.4.1" - parseurl "~1.3.3" - path-to-regexp "~0.1.12" - proxy-addr "~2.0.7" - qs "~6.15.1" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "~0.19.0" - serve-static "~1.16.2" - setprototypeof "1.2.0" - statuses "~2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-uri@^3.0.1: - version "3.1.5" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.5.tgz#610f37419a030270430cecd68d74e3d4d96725d0" - integrity sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw== - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -fault@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c" - integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== - dependencies: - format "^0.2.0" - -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -feed@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" - integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== - dependencies: - xml-js "^1.6.11" - -file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@~1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" - integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== - dependencies: - debug "2.6.9" - encodeurl "~2.0.0" - escape-html "~1.0.3" - on-finished "~2.4.1" - parseurl "~1.3.3" - statuses "~2.0.2" - unpipe "~1.0.0" - -find-babel-config@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-2.1.1.tgz#93703fc8e068db5e4c57592900c5715dd04b7e5b" - integrity sha512-5Ji+EAysHGe1OipH7GN4qDjok5Z1uw5KAwDCbicU/4wyTZY7CqOCzcWbG7J5ad9mazq67k89fXlbc1MuIfl9uA== - dependencies: - json5 "^2.2.3" - path-exists "^4.0.0" - -find-cache-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2" - integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== - dependencies: - common-path-prefix "^3.0.0" - pkg-dir "^7.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -follow-redirects@^1.0.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc" - integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== - -foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -form-data-encoder@^2.1.2: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" - integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== - -format@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" - integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-5.3.4.tgz#8c0fcc6a9908262df4ed197427bdeef563e0699a" - integrity sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ== - -fresh@~0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^11.1.1, fs-extra@^11.2.0: - version "11.4.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.4.0.tgz#f88ed6d180ac9e14b61b08e679468f0b1b6b4730" - integrity sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^8.0.1: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1, function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" - integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" - integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== - dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.1.1" - function-bind "^1.1.2" - get-proto "^1.0.1" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - -get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - -get-stream@^6.0.0, get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -github-slugger@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" - integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regex.js@^1.0.0, glob-to-regex.js@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz#2b323728271d133830850e32311f40766c5f6413" - integrity sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ== - -glob@^10.0.0, glob@^10.2.2: - version "10.4.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" - integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== - dependencies: - foreground-child "^3.1.0" - jackspeak "^3.1.2" - minimatch "^9.0.4" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^1.11.1" - -glob@^9.3.3: - version "9.3.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" - integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== - dependencies: - fs.realpath "^1.0.0" - minimatch "^8.0.2" - minipass "^4.2.4" - path-scurry "^1.6.1" - -global-dirs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" - integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== - dependencies: - ini "2.0.0" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.1.tgz#7c44a93869b0b7612e38f22ed532bfe37b25ea6f" - integrity sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -got@^12.1.0: - version "12.6.1" - resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" - integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== - dependencies: - "@sindresorhus/is" "^5.2.0" - "@szmarczak/http-timer" "^5.0.1" - cacheable-lookup "^7.0.0" - cacheable-request "^10.2.8" - decompress-response "^6.0.0" - form-data-encoder "^2.1.2" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^3.0.0" - -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.1, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-yarn@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-3.0.0.tgz#c3c21e559730d1d3b57e28af1f30d06fac38147d" - integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== - -has@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" - integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== - -hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hasown@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.4.tgz#8c62d8cb90beb2aad5d0a5b67581ad9854c3f003" - integrity sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A== - dependencies: - function-bind "^1.1.2" - -hast-util-from-parse5@^8.0.0: - version "8.0.3" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz#830a35022fff28c3fea3697a98c2f4cc6b835a2e" - integrity sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - hastscript "^9.0.0" - property-information "^7.0.0" - vfile "^6.0.0" - vfile-location "^5.0.0" - web-namespaces "^2.0.0" - -hast-util-parse-selector@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz#352879fa86e25616036037dd8931fb5f34cb4a27" - integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-raw@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-9.1.0.tgz#79b66b26f6f68fb50dfb4716b2cdca90d92adf2e" - integrity sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - "@ungap/structured-clone" "^1.0.0" - hast-util-from-parse5 "^8.0.0" - hast-util-to-parse5 "^8.0.0" - html-void-elements "^3.0.0" - mdast-util-to-hast "^13.0.0" - parse5 "^7.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - -hast-util-to-estree@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz#e654c1c9374645135695cc0ab9f70b8fcaf733d7" - integrity sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w== - dependencies: - "@types/estree" "^1.0.0" - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - estree-util-attach-comments "^3.0.0" - estree-util-is-identifier-name "^3.0.0" - hast-util-whitespace "^3.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - property-information "^7.0.0" - space-separated-tokens "^2.0.0" - style-to-js "^1.0.0" - unist-util-position "^5.0.0" - zwitch "^2.0.0" - -hast-util-to-jsx-runtime@^2.0.0: - version "2.3.6" - resolved "https://registry.yarnpkg.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz#ff31897aae59f62232e21594eac7ef6b63333e98" - integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== - dependencies: - "@types/estree" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - hast-util-whitespace "^3.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - property-information "^7.0.0" - space-separated-tokens "^2.0.0" - style-to-js "^1.0.0" - unist-util-position "^5.0.0" - vfile-message "^4.0.0" - -hast-util-to-parse5@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz#95aa391cc0514b4951418d01c883d1038af42f5d" - integrity sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA== - dependencies: - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - property-information "^7.0.0" - space-separated-tokens "^2.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - -hast-util-whitespace@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" - integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== - dependencies: - "@types/hast" "^3.0.0" - -hastscript@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-9.0.1.tgz#dbc84bef6051d40084342c229c451cd9dc567dff" - integrity sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w== - dependencies: - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - hast-util-parse-selector "^4.0.0" - property-information "^7.0.0" - space-separated-tokens "^2.0.0" - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -history@^4.9.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - -hoist-non-react-statics@^3.1.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -hosted-git-info@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" - integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== - dependencies: - lru-cache "^10.0.1" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-escaper@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-minifier-terser@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz#18752e23a2f0ed4b0f550f217bb41693e975b942" - integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA== - dependencies: - camel-case "^4.1.2" - clean-css "~5.3.2" - commander "^10.0.0" - entities "^4.4.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.15.1" - -html-tags@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" - integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== - -html-void-elements@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" - integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== - -html-webpack-plugin@^5.6.0: - version "5.6.8" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.6.8.tgz#5425dbc63eb533ffa59e92342be94894a125fc23" - integrity sha512-MZmKQcTnhEh1SPSyMiEytIeDZDUoBZVorNHivQGXMASHf/BSGGOrKa2xQ5bGx3TCe1n109ecCt+cpww7wwWhKA== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - -htmlparser2@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-10.1.0.tgz#fe3f2e12c73b6e462d4e10395db9c1119e4d6ae4" - integrity sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.2.2" - entities "^7.0.1" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -htmlparser2@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" - integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - entities "^4.4.0" - -http-cache-semantics@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" - integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-errors@~2.0.0, http-errors@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" - integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== - dependencies: - depd "~2.0.0" - inherits "~2.0.4" - setprototypeof "~1.2.0" - statuses "~2.0.2" - toidentifier "~1.0.1" - -http-parser-js@>=0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd" - integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA== - -http-proxy-middleware@^2.0.9: - version "2.0.10" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.10.tgz#b2df7b705203d7a8c269ac8450cf96b00c532f94" - integrity sha512-RKzRWNPxUZqbuk3BC5mGVJbBnWgr+diEnjJexIOytFbBzDy88Fbh/YvBr3DsNrl1jYAfjWfpATEv0NO35FDuPQ== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http2-wrapper@^2.1.10: - version "2.2.1" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" - integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.0" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -hyperdyperid@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b" - integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== - -iconv-lite@0.6.3, iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -iconv-lite@~0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ignore@^5.0.0, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -image-size@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-2.0.2.tgz#84a7b43704db5736f364bf0d1b029821299b4bdc" - integrity sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w== - -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -immutable@^5.1.5: - version "5.1.9" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.9.tgz#ac23c3a01992ab665e14ac9ffff298f28cd74a0c" - integrity sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg== - -import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-lazy@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - -import-meta-resolve@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#f9db8bead9fafa61adb811db77a2bf22c5399706" - integrity sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infima@0.2.0-alpha.45: - version "0.2.0-alpha.45" - resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.45.tgz#542aab5a249274d81679631b492973dd2c1e7466" - integrity sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -ini@^1.3.4, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -ini@^4.1.2, ini@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.3.tgz#4c359675a6071a46985eb39b14e4a2c0ec98a795" - integrity sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg== - -inline-style-parser@0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.2.7.tgz#b1fc68bfc0313b8685745e4464e37f9376b9c909" - integrity sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA== - -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -ipaddr.js@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.5.0.tgz#7d4b6c39f9392fb61cf807de6e425e22c10e061f" - integrity sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w== - -is-alphabetical@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" - integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== - -is-alphanumerical@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" - integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== - dependencies: - is-alphabetical "^2.0.0" - is-decimal "^2.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-ci@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -is-core-module@^2.13.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" - integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== - dependencies: - hasown "^2.0.2" - -is-core-module@^2.16.1: - version "2.16.2" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.2.tgz#3e07450a8080ebce3fbf0cac494f4d2ab324e082" - integrity sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA== - dependencies: - hasown "^2.0.3" - -is-decimal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" - integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-docker@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" - integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== - -is-empty@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b" - integrity sha1-3pu1snhzigWgsJpX4ftNSjQan2s= - -is-extendable@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" - integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== - -is-inside-container@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" - integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== - dependencies: - is-docker "^3.0.0" - -is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - -is-network-error@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/is-network-error/-/is-network-error-1.3.2.tgz#9460bc30f8419a4bca77114f4de88a3ee5e0c519" - integrity sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA== - -is-npm@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-6.1.0.tgz#f70e0b6c132dfc817ac97d3badc0134945b098d3" - integrity sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -is-plain-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -is-wsl@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.1.tgz#327897b26832a3eb117da6c27492d04ca132594f" - integrity sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw== - dependencies: - is-inside-container "^1.0.0" - -is-yarn-global@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.4.1.tgz#b312d902b313f81e4eaf98b6361ba2b45cd694bb" - integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isexe@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" - integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -jackspeak@^3.1.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" - integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^29.4.3: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jiti@^1.20.0: - version "1.21.6" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" - integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== - -joi@^17.9.2: - version "17.13.6" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.6.tgz#3fa166ca4b7feac442340c1522ea2f51cca3d425" - integrity sha512-ImNZaq/LSysofih+xIGYfR0WUXMA9GLUNB//YTCSrZptoRmVgaNAdJyi6K1kXi9pkLEoSkoI8I4UwtNiu/D7nw== - dependencies: - "@hapi/hoek" "^9.3.0" - "@hapi/topo" "^5.1.0" - "@sideway/address" "^4.1.5" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.1.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.3.1.tgz#01216c001d67f48e2cd560d708c7af21090a3848" - integrity sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ== - dependencies: - argparse "^2.0.1" - -jsesc@^3.0.2, jsesc@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" - integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-parse-even-better-errors@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz#b43d35e89c0f3be6b5fbbe9dc6c82467b30c28da" - integrity sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json5@^2.0.0, json5@^2.1.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-5.0.0.tgz#e6b718f73da420d612823996fdf14a03f6ff6922" - integrity sha512-NQRZ5CRo74MhMMC3/3r5g2k4fjodJ/wh8MxjFbCViWKFjxrnudWSY5vomh+23ZaXzAS7J3fBZIR2dV6WbmfM0w== - dependencies: - universalify "^0.1.2" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -klaw-sync@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/klaw-sync/-/klaw-sync-6.0.0.tgz#1fd2cfd56ebb6250181114f0a581167099c2b28c" - integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== - dependencies: - graceful-fs "^4.1.11" - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -latest-version@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da" - integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== - dependencies: - package-json "^8.1.0" - -launch-editor@^2.14.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.14.1.tgz#f7e0da3f58aaea03fea01074d840b5f739ed7ddc" - integrity sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA== - dependencies: - picocolors "^1.1.1" - shell-quote "^1.8.4" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -lilconfig@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" - integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -lines-and-columns@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.4.tgz#d00318855905d2660d8c0822e3f5a4715855fc42" - integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== - -load-plugin@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/load-plugin/-/load-plugin-6.0.3.tgz#b0eb8ea2361744f0e54850ccbc4c8a2d94ffabe3" - integrity sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w== - dependencies: - "@npmcli/config" "^8.0.0" - import-meta-resolve "^4.0.0" - -loader-utils@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4.17.20, lodash@^4.17.21: - version "4.18.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" - integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== - -longest-streak@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" - integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== - -loose-envify@^1.0.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - -lru-cache@^10.0.1, lru-cache@^10.2.0: - version "10.4.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" - integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lunr-languages@^1.4.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/lunr-languages/-/lunr-languages-1.9.0.tgz#7105230807788a112a69910561b7bbd055a0e588" - integrity sha512-Be5vFuc8NAheOIjviCRms3ZqFFBlzns3u9DXpPSZvALetgnydAN0poV71pVLFn0keYy/s4VblMMkqewTLe+KPg== - -lunr@^2.3.9: - version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== - -mark.js@^8.11.1: - version "8.11.1" - resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5" - integrity sha1-GA8fnr74sOY45BZq1S24eb6y/8U= - -markdown-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-2.0.0.tgz#34bebc83e9938cae16e0e017e4a9814a8330d3c4" - integrity sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q== - -markdown-table@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.4.tgz#fe44d6d410ff9d6f2ea1797a3f60aa4d2b631c2a" - integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== - -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - -mdast-comment-marker@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-comment-marker/-/mdast-comment-marker-3.0.0.tgz#8233f27c985ac7be53678ecb453dd9648fa1b5c5" - integrity sha512-bt08sLmTNg00/UtVDiqZKocxqvQqqyQZAg1uaRuO/4ysXV5motg7RolF5o5yy/sY1rG0v2XgZEqFWho1+2UquA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-mdx-expression "^2.0.0" - -mdast-util-directive@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz#f3656f4aab6ae3767d3c72cfab5e8055572ccba1" - integrity sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - ccount "^2.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - parse-entities "^4.0.0" - stringify-entities "^4.0.0" - unist-util-visit-parents "^6.0.0" - -mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz#70a3174c894e14df722abf43bc250cbae44b11df" - integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg== - dependencies: - "@types/mdast" "^4.0.0" - escape-string-regexp "^5.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -mdast-util-from-markdown@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz#c95822b91aab75f18a4cbe8b2f51b873ed2cf0c7" - integrity sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - mdast-util-to-string "^4.0.0" - micromark "^4.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-decode-string "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-stringify-position "^4.0.0" - -mdast-util-frontmatter@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz#f5f929eb1eb36c8a7737475c7eb438261f964ee8" - integrity sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - escape-string-regexp "^5.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - micromark-extension-frontmatter "^2.0.0" - -mdast-util-gfm-autolink-literal@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz#abd557630337bd30a6d5a4bd8252e1c2dc0875d5" - integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== - dependencies: - "@types/mdast" "^4.0.0" - ccount "^2.0.0" - devlop "^1.0.0" - mdast-util-find-and-replace "^3.0.0" - micromark-util-character "^2.0.0" - -mdast-util-gfm-footnote@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz#7778e9d9ca3df7238cc2bd3fa2b1bf6a65b19403" - integrity sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.1.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - -mdast-util-gfm-strikethrough@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz#d44ef9e8ed283ac8c1165ab0d0dfd058c2764c16" - integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm-table@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz#7a435fb6223a72b0862b33afbd712b6dae878d38" - integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - markdown-table "^3.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm-task-list-item@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz#e68095d2f8a4303ef24094ab642e1047b991a936" - integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz#2cdf63b92c2a331406b0fb0db4c077c1b0331751" - integrity sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ== - dependencies: - mdast-util-from-markdown "^2.0.0" - mdast-util-gfm-autolink-literal "^2.0.0" - mdast-util-gfm-footnote "^2.0.0" - mdast-util-gfm-strikethrough "^2.0.0" - mdast-util-gfm-table "^2.0.0" - mdast-util-gfm-task-list-item "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-heading-style@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-heading-style/-/mdast-util-heading-style-3.0.0.tgz#f1a02b2d0950e8535713f54de5ee0eea82413f51" - integrity sha512-tsUfM9Kj9msjlemA/38Z3pvraQay880E3zP2NgIthMoGcpU9bcPX9oSM6QC/+eFXGGB4ba+VCB1dKAPHB7Veug== - dependencies: - "@types/mdast" "^4.0.0" - -mdast-util-mdx-expression@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz#43f0abac9adc756e2086f63822a38c8d3c3a5096" - integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdx-jsx@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz#fd04c67a2a7499efb905a8a5c578dddc9fdada0d" - integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - ccount "^2.0.0" - devlop "^1.1.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - parse-entities "^4.0.0" - stringify-entities "^4.0.0" - unist-util-stringify-position "^4.0.0" - vfile-message "^4.0.0" - -mdast-util-mdx@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz#792f9cf0361b46bee1fdf1ef36beac424a099c41" - integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w== - dependencies: - mdast-util-from-markdown "^2.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdxjs-esm@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz#019cfbe757ad62dd557db35a695e7314bcc9fa97" - integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-phrasing@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz#7cc0a8dec30eaf04b7b1a9661a92adb3382aa6e3" - integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== - dependencies: - "@types/mdast" "^4.0.0" - unist-util-is "^6.0.0" - -mdast-util-to-hast@^13.0.0: - version "13.2.1" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz#d7ff84ca499a57e2c060ae67548ad950e689a053" - integrity sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@ungap/structured-clone" "^1.0.0" - devlop "^1.0.0" - micromark-util-sanitize-uri "^2.0.0" - trim-lines "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - -mdast-util-to-markdown@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz#f910ffe60897f04bb4b7e7ee434486f76288361b" - integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - longest-streak "^3.0.0" - mdast-util-phrasing "^4.0.0" - mdast-util-to-string "^4.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-decode-string "^2.0.0" - unist-util-visit "^5.0.0" - zwitch "^2.0.0" - -mdast-util-to-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz#7a5121475556a04e7eddeb67b264aae79d312814" - integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== - dependencies: - "@types/mdast" "^4.0.0" - -mdn-data@2.0.28: - version "2.0.28" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" - integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memfs@^4.43.1: - version "4.68.1" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.68.1.tgz#e42fa69c873305a9cd0b28a8d230b96efacd8b5d" - integrity sha512-OD+IDRUvIxu3QHL+nFm9gdyugInD27FDJ+sl4B5QgomPHXMlbw+GP918P8VNKu2FkNlVeqBkpzkwROpamVifRw== - dependencies: - "@jsonjoy.com/fs-core" "4.68.1" - "@jsonjoy.com/fs-fsa" "4.68.1" - "@jsonjoy.com/fs-node" "4.68.1" - "@jsonjoy.com/fs-node-builtins" "4.68.1" - "@jsonjoy.com/fs-node-to-fsa" "4.68.1" - "@jsonjoy.com/fs-node-utils" "4.68.1" - "@jsonjoy.com/fs-print" "4.68.1" - "@jsonjoy.com/fs-snapshot" "4.68.1" - "@jsonjoy.com/json-pack" "^1.11.0" - "@jsonjoy.com/util" "^1.9.0" - glob-to-regex.js "^1.0.1" - thingies "^2.5.0" - tree-dump "^1.0.3" - tslib "^2.0.0" - -merge-descriptors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" - integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromark-core-commonmark@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz#c691630e485021a68cf28dbc2b2ca27ebf678cd4" - integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== - dependencies: - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-factory-destination "^2.0.0" - micromark-factory-label "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-factory-title "^2.0.0" - micromark-factory-whitespace "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-html-tag-name "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-directive@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz#2eb61985d1995a7c1ff7621676a4f32af29409e8" - integrity sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-factory-whitespace "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - parse-entities "^4.0.0" - -micromark-extension-frontmatter@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz#651c52ffa5d7a8eeed687c513cd869885882d67a" - integrity sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg== - dependencies: - fault "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-autolink-literal@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz#6286aee9686c4462c1e3552a9d505feddceeb935" - integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-footnote@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz#4dab56d4e398b9853f6fe4efac4fc9361f3e0750" - integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== - dependencies: - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-strikethrough@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz#86106df8b3a692b5f6a92280d3879be6be46d923" - integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== - dependencies: - devlop "^1.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-table@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz#fac70bcbf51fe65f5f44033118d39be8a9b5940b" - integrity sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-tagfilter@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz#f26d8a7807b5985fba13cf61465b58ca5ff7dc57" - integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== - dependencies: - micromark-util-types "^2.0.0" - -micromark-extension-gfm-task-list-item@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz#bcc34d805639829990ec175c3eea12bb5b781f2c" - integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz#3e13376ab95dd7a5cfd0e29560dfe999657b3c5b" - integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== - dependencies: - micromark-extension-gfm-autolink-literal "^2.0.0" - micromark-extension-gfm-footnote "^2.0.0" - micromark-extension-gfm-strikethrough "^2.0.0" - micromark-extension-gfm-table "^2.0.0" - micromark-extension-gfm-tagfilter "^2.0.0" - micromark-extension-gfm-task-list-item "^2.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-mdx-expression@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz#43d058d999532fb3041195a3c3c05c46fa84543b" - integrity sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-factory-mdx-expression "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-mdx-jsx@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz#ffc98bdb649798902fa9fc5689f67f9c1c902044" - integrity sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - micromark-factory-mdx-expression "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - vfile-message "^4.0.0" - -micromark-extension-mdx-md@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz#1d252881ea35d74698423ab44917e1f5b197b92d" - integrity sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ== - dependencies: - micromark-util-types "^2.0.0" - -micromark-extension-mdxjs-esm@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz#de21b2b045fd2059bd00d36746081de38390d54a" - integrity sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-position-from-estree "^2.0.0" - vfile-message "^4.0.0" - -micromark-extension-mdxjs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz#b5a2e0ed449288f3f6f6c544358159557549de18" - integrity sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ== - dependencies: - acorn "^8.0.0" - acorn-jsx "^5.0.0" - micromark-extension-mdx-expression "^3.0.0" - micromark-extension-mdx-jsx "^3.0.0" - micromark-extension-mdx-md "^2.0.0" - micromark-extension-mdxjs-esm "^3.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-destination@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz#8fef8e0f7081f0474fbdd92deb50c990a0264639" - integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-label@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz#5267efa97f1e5254efc7f20b459a38cb21058ba1" - integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== - dependencies: - devlop "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-mdx-expression@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz#bb09988610589c07d1c1e4425285895041b3dfa9" - integrity sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-position-from-estree "^2.0.0" - vfile-message "^4.0.0" - -micromark-factory-space@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz#cebff49968f2b9616c0fcb239e96685cb9497633" - integrity sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-space@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz#36d0212e962b2b3121f8525fc7a3c7c029f334fc" - integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-title@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz#237e4aa5d58a95863f01032d9ee9b090f1de6e94" - integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-whitespace@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz#06b26b2983c4d27bfcc657b33e25134d4868b0b1" - integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-character@^1.0.0, micromark-util-character@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.1.0.tgz#d97c54d5742a0d9611a68ca0cd4124331f264d86" - integrity sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg== - dependencies: - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-character@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" - integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== - dependencies: - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-chunked@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz#47fbcd93471a3fccab86cff03847fc3552db1051" - integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-classify-character@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz#d399faf9c45ca14c8b4be98b1ea481bced87b629" - integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-combine-extensions@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz#2a0f490ab08bff5cc2fd5eec6dd0ca04f89b30a9" - integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== - dependencies: - micromark-util-chunked "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-decode-numeric-character-reference@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz#fcf15b660979388e6f118cdb6bf7d79d73d26fe5" - integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-decode-string@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz#6cb99582e5d271e84efca8e61a807994d7161eb2" - integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-encode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" - integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== - -micromark-util-events-to-acorn@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz#e7a8a6b55a47e5a06c720d5a1c4abae8c37c98f3" - integrity sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg== - dependencies: - "@types/estree" "^1.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - estree-util-visit "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - vfile-message "^4.0.0" - -micromark-util-html-tag-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz#e40403096481986b41c106627f98f72d4d10b825" - integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== - -micromark-util-normalize-identifier@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz#c30d77b2e832acf6526f8bf1aa47bc9c9438c16d" - integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-resolve-all@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz#e1a2d62cdd237230a2ae11839027b19381e31e8b" - integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== - dependencies: - micromark-util-types "^2.0.0" - -micromark-util-sanitize-uri@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" - integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-subtokenize@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz#d8ade5ba0f3197a1cf6a2999fbbfe6357a1a19ee" - integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== - dependencies: - devlop "^1.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-symbol@^1.0.0, micromark-util-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz#b90344db62042ce454f351cf0bebcc0a6da4920e" - integrity sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ== - -micromark-util-symbol@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" - integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== - -micromark-util-types@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.0.2.tgz#f4220fdb319205812f99c40f8c87a9be83eded20" - integrity sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w== - -micromark-util-types@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" - integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== - -micromark@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromark/-/micromark-4.0.2.tgz#91395a3e1884a198e62116e33c9c568e39936fdb" - integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5, micromatch@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-db@^1.54.0: - version "1.54.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" - integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== - -mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" - integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== - -mime-types@2.1.18: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" - integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== - dependencies: - mime-db "~1.33.0" - -mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime-types@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" - integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== - dependencies: - mime-db "^1.54.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -mimic-response@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" - integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== - -mini-css-extract-plugin@^2.9.2: - version "2.10.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.10.2.tgz#5c85ec9450c05d26e32531b465a15a08c3a57253" - integrity sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg== - dependencies: - schema-utils "^4.0.0" - tapable "^2.2.1" - -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimatch@3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" - integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^8.0.2: - version "8.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-8.0.4.tgz#847c1b25c014d4e9a7f68aaf63dedd668a626229" - integrity sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^9.0.0, minimatch@^9.0.4: - version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.0.0, minimist@^1.2.0: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minimizer-webpack-plugin@^5.6.1: - version "5.6.1" - resolved "https://registry.yarnpkg.com/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz#289922a4c96c4ed1ddb76b8a00bd8074e89a2f7f" - integrity sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.25" - jest-worker "^27.4.5" - schema-utils "^4.3.0" - terser "^5.31.1" - -minipass@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" - integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== - -minipass@^7.0.4: - version "7.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" - integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== - -minizlib@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c" - integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== - dependencies: - minipass "^7.1.2" - -mrmime@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-2.0.0.tgz#151082a6e06e59a9a39b46b3e14d5cfe92b3abb4" - integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns@^7.2.5: - version "7.2.5" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" - integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" - -nanoid@^3.3.17: - version "3.3.18" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.18.tgz#f66a2de1199ffde0fcf21c8a5f13106b1c081913" - integrity sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -negotiator@~0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" - integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-addon-api@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" - integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== - -node-emoji@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.2.0.tgz#1d000e3c76e462577895be1b436f4aa2d6760eb0" - integrity sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw== - dependencies: - "@sindresorhus/is" "^4.6.0" - char-regex "^1.0.2" - emojilib "^2.4.0" - skin-tone "^2.0.0" - -node-fetch@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-releases@^2.0.18: - version "2.0.18" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" - integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== - -node-releases@^2.0.53: - version "2.0.53" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.53.tgz#0fe5ad8a7935e075172f574e56f0c20f07fa41af" - integrity sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ== - -nopt@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7" - integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== - dependencies: - abbrev "^2.0.0" - -normalize-package-data@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" - integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== - dependencies: - hosted-git-info "^7.0.0" - semver "^7.3.5" - validate-npm-package-license "^3.0.4" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.1.1.tgz#751a20c8520e5725404c06015fea21d7567f25ef" - integrity sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ== - -npm-install-checks@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.3.0.tgz#046552d8920e801fa9f919cad569545d60e826fe" - integrity sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw== - dependencies: - semver "^7.1.1" - -npm-normalize-package-bin@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" - integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== - -npm-package-arg@^11.0.0: - version "11.0.3" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.3.tgz#dae0c21199a99feca39ee4bfb074df3adac87e2d" - integrity sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw== - dependencies: - hosted-git-info "^7.0.0" - proc-log "^4.0.0" - semver "^7.3.5" - validate-npm-package-name "^5.0.0" - -npm-pick-manifest@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz#83562afde52b0b07cb6244361788d319ce7e8636" - integrity sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA== - dependencies: - npm-install-checks "^6.0.0" - npm-normalize-package-bin "^3.0.0" - npm-package-arg "^11.0.0" - semver "^7.3.5" - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nprogress@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" - integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E= - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -null-loader@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-4.0.1.tgz#8e63bd3a2dd3c64236a4679428632edd0a6dbc6a" - integrity sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-inspect@^1.13.3, object-inspect@^1.13.4: - version "1.13.4" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" - integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@^2.4.1, on-finished@~2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" - integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^10.0.3: - version "10.2.0" - resolved "https://registry.yarnpkg.com/open/-/open-10.2.0.tgz#b9d855be007620e80b6fb05fac98141fe62db73c" - integrity sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA== - dependencies: - default-browser "^5.2.1" - define-lazy-prop "^3.0.0" - is-inside-container "^1.0.0" - wsl-utils "^0.1.0" - -open@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" - integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-queue@^6.6.2: - version "6.6.2" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" - integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== - dependencies: - eventemitter3 "^4.0.4" - p-timeout "^3.2.0" - -p-retry@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-6.2.1.tgz#81828f8dc61c6ef5a800585491572cc9892703af" - integrity sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ== - dependencies: - "@types/retry" "0.12.2" - is-network-error "^1.0.0" - retry "^0.13.1" - -p-timeout@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" - integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== - dependencies: - p-finally "^1.0.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-json-from-dist@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" - integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== - -package-json@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.1.tgz#3e9948e43df40d1e8e78a85485f1070bf8f03dc8" - integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA== - dependencies: - got "^12.1.0" - registry-auth-token "^5.0.1" - registry-url "^6.0.0" - semver "^7.3.7" - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-entities@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.2.tgz#61d46f5ed28e4ee62e9ddc43d6b010188443f159" - integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== - dependencies: - "@types/unist" "^2.0.0" - character-entities-legacy "^3.0.0" - character-reference-invalid "^2.0.0" - decode-named-character-reference "^1.0.0" - is-alphanumerical "^2.0.0" - is-decimal "^2.0.0" - is-hexadecimal "^2.0.0" - -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-json@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-7.1.1.tgz#68f7e6f0edf88c54ab14c00eb700b753b14e2120" - integrity sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw== - dependencies: - "@babel/code-frame" "^7.21.4" - error-ex "^1.3.2" - json-parse-even-better-errors "^3.0.0" - lines-and-columns "^2.0.3" - type-fest "^3.8.0" - -parse-numeric-range@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" - integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== - -parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== - dependencies: - domhandler "^5.0.2" - parse5 "^7.0.0" - -parse5-htmlparser2-tree-adapter@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz#b5a806548ed893a43e24ccb42fbb78069311e81b" - integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g== - dependencies: - domhandler "^5.0.3" - parse5 "^7.0.0" - -parse5-parser-stream@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz#d7c20eadc37968d272e2c02660fff92dd27e60e1" - integrity sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow== - dependencies: - parse5 "^7.0.0" - -parse5@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.0.0.tgz#51f74a5257f5fcc536389e8c2d0b3802e1bfa91a" - integrity sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g== - dependencies: - entities "^4.3.0" - -parse5@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" - integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== - dependencies: - entities "^6.0.0" - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-inside@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.11.1, path-scurry@^1.6.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" - integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== - dependencies: - lru-cache "^10.2.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-to-regexp@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" - integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-to-regexp@~0.1.12: - version "0.1.13" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.13.tgz#9b22ec16bc3ab88d05a0c7e369869421401ab17d" - integrity sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picocolors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== - -picocolors@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" - integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== - -picomatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.5.tgz#51ea57a17d86f605f81039595fbc40ed06a55fab" - integrity sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A== - -pkg-dir@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11" - integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== - dependencies: - find-up "^6.3.0" - -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -pkijs@^3.3.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pkijs/-/pkijs-3.4.0.tgz#d9164def30ff6d97be2d88966d5e36192499ca9c" - integrity sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw== - dependencies: - "@noble/hashes" "1.4.0" - asn1js "^3.0.6" - bytestreamjs "^2.0.1" - pvtsutils "^1.3.6" - pvutils "^1.1.3" - tslib "^2.8.1" - -pluralize@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" - integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== - -postcss-attribute-case-insensitive@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-7.0.1.tgz#0c4500e3bcb2141848e89382c05b5a31c23033a3" - integrity sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-calc@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6" - integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ== - dependencies: - postcss-selector-parser "^6.0.11" - postcss-value-parser "^4.2.0" - -postcss-clamp@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" - integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-functional-notation@^7.0.12: - version "7.0.12" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.12.tgz#9a3df2296889e629fde18b873bb1f50a4ecf4b83" - integrity sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" - "@csstools/utilities" "^2.0.0" - -postcss-color-hex-alpha@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-10.0.0.tgz#5dd3eba1f8facb4ea306cba6e3f7712e876b0c76" - integrity sha512-1kervM2cnlgPs2a8Vt/Qbe5cQ++N7rkYo/2rz2BkqJZIHQwaVuJgQH38REHrAi4uM0b1fqxMkWYmese94iMp3w== - dependencies: - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-color-rebeccapurple@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-10.0.0.tgz#5ada28406ac47e0796dff4056b0a9d5a6ecead98" - integrity sha512-JFta737jSP+hdAIEhk1Vs0q0YF5P8fFcj+09pweS8ktuGuZ8pPlykHsk6mPxZ8awDl4TrcxUqJo9l1IhVr/OjQ== - dependencies: - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-colormin@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.1.0.tgz#076e8d3fb291fbff7b10e6b063be9da42ff6488d" - integrity sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - colord "^2.9.3" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz#3498387f8efedb817cbc63901d45bd1ceaa40f48" - integrity sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w== - dependencies: - browserslist "^4.23.0" - postcss-value-parser "^4.2.0" - -postcss-custom-media@^11.0.6: - version "11.0.6" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-11.0.6.tgz#6b450e5bfa209efb736830066682e6567bd04967" - integrity sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw== - dependencies: - "@csstools/cascade-layer-name-parser" "^2.0.5" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/media-query-list-parser" "^4.0.3" - -postcss-custom-properties@^14.0.6: - version "14.0.6" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-14.0.6.tgz#1af73a650bf115ba052cf915287c9982825fc90e" - integrity sha512-fTYSp3xuk4BUeVhxCSJdIPhDLpJfNakZKoiTDx7yRGCdlZrSJR7mWKVOBS4sBF+5poPQFMj2YdXx1VHItBGihQ== - dependencies: - "@csstools/cascade-layer-name-parser" "^2.0.5" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-custom-selectors@^8.0.5: - version "8.0.5" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-8.0.5.tgz#9448ed37a12271d7ab6cb364b6f76a46a4a323e8" - integrity sha512-9PGmckHQswiB2usSO6XMSswO2yFWVoCAuih1yl9FVcwkscLjRKjwsjM3t+NIWpSU2Jx3eOiK2+t4vVTQaoCHHg== - dependencies: - "@csstools/cascade-layer-name-parser" "^2.0.5" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - postcss-selector-parser "^7.0.0" - -postcss-dir-pseudo-class@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-9.0.1.tgz#80d9e842c9ae9d29f6bf5fd3cf9972891d6cc0ca" - integrity sha512-tRBEK0MHYvcMUrAuYMEOa0zg9APqirBcgzi6P21OhxtJyJADo/SWBwY1CAwEohQ/6HDaa9jCjLRG7K3PVQYHEA== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-discard-comments@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz#e768dcfdc33e0216380623652b0a4f69f4678b6c" - integrity sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw== - -postcss-discard-duplicates@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz#d121e893c38dc58a67277f75bb58ba43fce4c3eb" - integrity sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw== - -postcss-discard-empty@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz#ee39c327219bb70473a066f772621f81435a79d9" - integrity sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ== - -postcss-discard-overridden@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz#4e9f9c62ecd2df46e8fdb44dc17e189776572e2d" - integrity sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ== - -postcss-discard-unused@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz#c1b0e8c032c6054c3fbd22aaddba5b248136f338" - integrity sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA== - dependencies: - postcss-selector-parser "^6.0.16" - -postcss-double-position-gradients@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.4.tgz#b482d08b5ced092b393eb297d07976ab482d4cad" - integrity sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^4.2.1" - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-focus-visible@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-10.0.1.tgz#1f7904904368a2d1180b220595d77b6f8a957868" - integrity sha512-U58wyjS/I1GZgjRok33aE8juW9qQgQUNwTSdxQGuShHzwuYdcklnvK/+qOWX1Q9kr7ysbraQ6ht6r+udansalA== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-focus-within@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-9.0.1.tgz#ac01ce80d3f2e8b2b3eac4ff84f8e15cd0057bc7" - integrity sha512-fzNUyS1yOYa7mOjpci/bR+u+ESvdar6hk8XNK/TRR0fiGTp2QT5N+ducP0n3rfH/m9I7H/EQU6lsa2BrgxkEjw== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-font-variant@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" - integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== - -postcss-gap-properties@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-6.0.0.tgz#d5ff0bdf923c06686499ed2b12e125fe64054fed" - integrity sha512-Om0WPjEwiM9Ru+VhfEDPZJAKWUd0mV1HmNXqp2C29z80aQ2uP9UVhLc7e3aYMIor/S5cVhoPgYQ7RtfeZpYTRw== - -postcss-image-set-function@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-7.0.0.tgz#538e94e16716be47f9df0573b56bbaca86e1da53" - integrity sha512-QL7W7QNlZuzOwBTeXEmbVckNt1FSmhQtbMRvGGqqU4Nf4xk6KUEQhAoWuMzwbSv5jxiRiSZ5Tv7eiDB9U87znA== - dependencies: - "@csstools/utilities" "^2.0.0" - postcss-value-parser "^4.2.0" - -postcss-lab-function@^7.0.12: - version "7.0.12" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-7.0.12.tgz#eb555ac542607730eb0a87555074e4a5c6eef6e4" - integrity sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" - "@csstools/utilities" "^2.0.0" - -postcss-loader@^7.3.4: - version "7.3.4" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.4.tgz#aed9b79ce4ed7e9e89e56199d25ad1ec8f606209" - integrity sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A== - dependencies: - cosmiconfig "^8.3.5" - jiti "^1.20.0" - semver "^7.5.4" - -postcss-logical@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-8.1.0.tgz#4092b16b49e3ecda70c4d8945257da403d167228" - integrity sha512-pL1hXFQ2fEXNKiNiAgtfA005T9FBxky5zkX6s4GZM2D8RkVgRqz3f4g1JUoq925zXv495qk8UNldDwh8uGEDoA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-merge-idents@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz#7b9c31c7bc823c94bec50f297f04e3c2b838ea65" - integrity sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g== - dependencies: - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-merge-longhand@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz#ba8a8d473617c34a36abbea8dda2b215750a065a" - integrity sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^6.1.1" - -postcss-merge-rules@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz#7aa539dceddab56019469c0edd7d22b64c3dea9d" - integrity sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - cssnano-utils "^4.0.2" - postcss-selector-parser "^6.0.16" - -postcss-minify-font-values@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz#a0e574c02ee3f299be2846369211f3b957ea4c59" - integrity sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz#ca3eb55a7bdb48a1e187a55c6377be918743dbd6" - integrity sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q== - dependencies: - colord "^2.9.3" - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz#54551dec77b9a45a29c3cb5953bf7325a399ba08" - integrity sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA== - dependencies: - browserslist "^4.23.0" - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz#197f7d72e6dd19eed47916d575d69dc38b396aff" - integrity sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ== - dependencies: - postcss-selector-parser "^6.0.16" - -postcss-modules-extract-imports@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz#b4497cb85a9c0c4b5aabeb759bb25e8d89f15002" - integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== - -postcss-modules-local-by-default@^4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz#f1b9bd757a8edf4d8556e8d0f4f894260e3df78f" - integrity sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz#a43d28289a169ce2c15c00c4e64c0858e43457d5" - integrity sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-nesting@^13.0.2: - version "13.0.2" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-13.0.2.tgz#fde0d4df772b76d03b52eccc84372e8d1ca1402e" - integrity sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ== - dependencies: - "@csstools/selector-resolve-nested" "^3.1.0" - "@csstools/selector-specificity" "^5.0.0" - postcss-selector-parser "^7.0.0" - -postcss-normalize-charset@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz#1ec25c435057a8001dac942942a95ffe66f721e1" - integrity sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ== - -postcss-normalize-display-values@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz#54f02764fed0b288d5363cbb140d6950dbbdd535" - integrity sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz#e982d284ec878b9b819796266f640852dbbb723a" - integrity sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz#f8006942fd0617c73f049dd8b6201c3a3040ecf3" - integrity sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz#e3cc6ad5c95581acd1fc8774b309dd7c06e5e363" - integrity sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz#40cb8726cef999de984527cbd9d1db1f3e9062c0" - integrity sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz#aaf8bbd34c306e230777e80f7f12a4b7d27ce06e" - integrity sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg== - dependencies: - browserslist "^4.23.0" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz#292792386be51a8de9a454cb7b5c58ae22db0f79" - integrity sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz#fbb009e6ebd312f8b2efb225c2fcc7cf32b400cd" - integrity sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-opacity-percentage@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-3.0.0.tgz#0b0db5ed5db5670e067044b8030b89c216e1eb0a" - integrity sha512-K6HGVzyxUxd/VgZdX04DCtdwWJ4NGLG212US4/LA1TLAbHgmAsTWVR86o+gGIbFtnTkfOpb9sCRBx8K7HO66qQ== - -postcss-ordered-values@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz#366bb663919707093451ab70c3f99c05672aaae5" - integrity sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q== - dependencies: - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-overflow-shorthand@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-6.0.0.tgz#f5252b4a2ee16c68cd8a9029edb5370c4a9808af" - integrity sha512-BdDl/AbVkDjoTofzDQnwDdm/Ym6oS9KgmO7Gr+LHYjNWJ6ExORe4+3pcLQsLA9gIROMkiGVjjwZNoL/mpXHd5Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-page-break@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" - integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== - -postcss-place@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-10.0.0.tgz#ba36ee4786ca401377ced17a39d9050ed772e5a9" - integrity sha512-5EBrMzat2pPAxQNWYavwAfoKfYcTADJ8AXGVPcUZ2UkNloUTWzJQExgrzrDkh3EKzmAx1evfTAzF9I8NGcc+qw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-preset-env@^10.2.1: - version "10.6.1" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-10.6.1.tgz#df30cfc54e90af2dcff5f94104e6f272359c9f65" - integrity sha512-yrk74d9EvY+W7+lO9Aj1QmjWY9q5NsKjK2V9drkOPZB/X6KZ0B3igKsHUYakb7oYVhnioWypQX3xGuePf89f3g== - dependencies: - "@csstools/postcss-alpha-function" "^1.0.1" - "@csstools/postcss-cascade-layers" "^5.0.2" - "@csstools/postcss-color-function" "^4.0.12" - "@csstools/postcss-color-function-display-p3-linear" "^1.0.1" - "@csstools/postcss-color-mix-function" "^3.0.12" - "@csstools/postcss-color-mix-variadic-function-arguments" "^1.0.2" - "@csstools/postcss-content-alt-text" "^2.0.8" - "@csstools/postcss-contrast-color-function" "^2.0.12" - "@csstools/postcss-exponential-functions" "^2.0.9" - "@csstools/postcss-font-format-keywords" "^4.0.0" - "@csstools/postcss-gamut-mapping" "^2.0.11" - "@csstools/postcss-gradients-interpolation-method" "^5.0.12" - "@csstools/postcss-hwb-function" "^4.0.12" - "@csstools/postcss-ic-unit" "^4.0.4" - "@csstools/postcss-initial" "^2.0.1" - "@csstools/postcss-is-pseudo-class" "^5.0.3" - "@csstools/postcss-light-dark-function" "^2.0.11" - "@csstools/postcss-logical-float-and-clear" "^3.0.0" - "@csstools/postcss-logical-overflow" "^2.0.0" - "@csstools/postcss-logical-overscroll-behavior" "^2.0.0" - "@csstools/postcss-logical-resize" "^3.0.0" - "@csstools/postcss-logical-viewport-units" "^3.0.4" - "@csstools/postcss-media-minmax" "^2.0.9" - "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.5" - "@csstools/postcss-nested-calc" "^4.0.0" - "@csstools/postcss-normalize-display-values" "^4.0.1" - "@csstools/postcss-oklab-function" "^4.0.12" - "@csstools/postcss-position-area-property" "^1.0.0" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" - "@csstools/postcss-property-rule-prelude-list" "^1.0.0" - "@csstools/postcss-random-function" "^2.0.1" - "@csstools/postcss-relative-color-syntax" "^3.0.12" - "@csstools/postcss-scope-pseudo-class" "^4.0.1" - "@csstools/postcss-sign-functions" "^1.1.4" - "@csstools/postcss-stepped-value-functions" "^4.0.9" - "@csstools/postcss-syntax-descriptor-syntax-production" "^1.0.1" - "@csstools/postcss-system-ui-font-family" "^1.0.0" - "@csstools/postcss-text-decoration-shorthand" "^4.0.3" - "@csstools/postcss-trigonometric-functions" "^4.0.9" - "@csstools/postcss-unset-value" "^4.0.0" - autoprefixer "^10.4.23" - browserslist "^4.28.1" - css-blank-pseudo "^7.0.1" - css-has-pseudo "^7.0.3" - css-prefers-color-scheme "^10.0.0" - cssdb "^8.6.0" - postcss-attribute-case-insensitive "^7.0.1" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^7.0.12" - postcss-color-hex-alpha "^10.0.0" - postcss-color-rebeccapurple "^10.0.0" - postcss-custom-media "^11.0.6" - postcss-custom-properties "^14.0.6" - postcss-custom-selectors "^8.0.5" - postcss-dir-pseudo-class "^9.0.1" - postcss-double-position-gradients "^6.0.4" - postcss-focus-visible "^10.0.1" - postcss-focus-within "^9.0.1" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^6.0.0" - postcss-image-set-function "^7.0.0" - postcss-lab-function "^7.0.12" - postcss-logical "^8.1.0" - postcss-nesting "^13.0.2" - postcss-opacity-percentage "^3.0.0" - postcss-overflow-shorthand "^6.0.0" - postcss-page-break "^3.0.4" - postcss-place "^10.0.0" - postcss-pseudo-class-any-link "^10.0.1" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^8.0.1" - -postcss-pseudo-class-any-link@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-10.0.1.tgz#06455431171bf44b84d79ebaeee9fd1c05946544" - integrity sha512-3el9rXlBOqTFaMFkWDOkHUTQekFIYnaQY55Rsp8As8QQkpiSgIYEcF/6Ond93oHiDsGb4kad8zjt+NPlOC1H0Q== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-reduce-idents@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz#b0d9c84316d2a547714ebab523ec7d13704cd486" - integrity sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-reduce-initial@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz#4401297d8e35cb6e92c8e9586963e267105586ba" - integrity sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz#6fa2c586bdc091a7373caeee4be75a0f3e12965d" - integrity sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-replace-overflow-wrap@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" - integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== - -postcss-selector-not@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-8.0.1.tgz#f2df9c6ac9f95e9fe4416ca41a957eda16130172" - integrity sha512-kmVy/5PYVb2UOhy0+LqUYAhKj7DUGDpSWa5LZqlkWJaaAV+dxxsOG3+St0yNLu6vsKD7Dmqx+nWQt0iil89+WA== - dependencies: - postcss-selector-parser "^7.0.0" - -postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: - version "6.1.4" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz#fdec4ca80f5781bd216ca9bf89a2a0fccfffa5f0" - integrity sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@^7.0.0: - version "7.1.5" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.5.tgz#ee7b090724eb60739b530660e5b402200e694a97" - integrity sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-sort-media-queries@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz#4556b3f982ef27d3bac526b99b6c0d3359a6cf97" - integrity sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA== - dependencies: - sort-css-media-queries "2.2.0" - -postcss-svgo@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.3.tgz#1d6e180d6df1fa8a3b30b729aaa9161e94f04eaa" - integrity sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^3.2.0" - -postcss-unique-selectors@^6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz#983ab308896b4bf3f2baaf2336e14e52c11a2088" - integrity sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg== - dependencies: - postcss-selector-parser "^6.0.16" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss-zindex@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-6.0.2.tgz#e498304b83a8b165755f53db40e2ea65a99b56e1" - integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== - -postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.33, postcss@^8.5.4: - version "8.5.26" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.26.tgz#6e75135780c7e10df3433bf2266c552d35c8c620" - integrity sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ== - dependencies: - nanoid "^3.3.17" - picocolors "^1.1.1" - source-map-js "^1.2.1" - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -pretty-time@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" - integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== - -prism-react-renderer@2.4.1, prism-react-renderer@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz#ac63b7f78e56c8f2b5e76e823a976d5ede77e35f" - integrity sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig== - dependencies: - "@types/prismjs" "^1.26.0" - clsx "^2.0.0" - -prismjs@^1.29.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.30.0.tgz#d9709969d9d4e16403f6f348c63553b19f0975a9" - integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw== - -proc-log@^4.0.0, proc-log@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034" - integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -prompts@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.5.0, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -property-information@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.2.0.tgz#0809b34264e995c0bfcd3227028a1e35210af80a" - integrity sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg== - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pupa@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-3.3.0.tgz#bc4036f9e8920c08ad472bc18fb600067cb83810" - integrity sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA== - dependencies: - escape-goat "^4.0.0" - -pvtsutils@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.6.tgz#ec46e34db7422b9e4fdc5490578c1883657d6001" - integrity sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg== - dependencies: - tslib "^2.8.1" - -pvutils@^1.1.3, pvutils@^1.1.5: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.2.0.tgz#4b5487a9cccd52d275b0538775790a3ca982bc22" - integrity sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg== - -qs@~6.15.1: - version "6.15.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.3.tgz#76852132a58ed5c7c0ef67e4441b9bb5d6061b3b" - integrity sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A== - dependencies: - es-define-property "^1.0.1" - side-channel "^1.1.1" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@~2.5.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" - integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== - dependencies: - bytes "~3.1.2" - http-errors "~2.0.1" - iconv-lite "~0.4.24" - unpipe "~1.0.0" - -rc@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-dom@19.2.8: - version "19.2.8" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.8.tgz#3b46b9eeda877cdff2cf13d2770fff4ae36c2ec2" - integrity sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ== - dependencies: - scheduler "^0.27.0" - -react-fast-compare@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" - integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== - -"react-helmet-async@npm:@slorber/react-helmet-async@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz#11fbc6094605cf60aa04a28c17e0aab894b4ecff" - integrity sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A== - dependencies: - "@babel/runtime" "^7.12.5" - invariant "^2.2.4" - prop-types "^15.7.2" - react-fast-compare "^3.2.0" - shallowequal "^1.1.0" - -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-json-view-lite@^2.3.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/react-json-view-lite/-/react-json-view-lite-2.5.0.tgz#c7ff011c7cc80e9900abc7aa4916c6a5c6d6c1c6" - integrity sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g== - -react-loadable-ssr-addon-v5-slorber@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.3.tgz#bb3791bf481222c63a5bc6b96ee23f68cb5614b9" - integrity sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ== - dependencies: - "@babel/runtime" "^7.10.3" - -react-loadable@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/react-loadable/-/react-loadable-5.5.0.tgz#582251679d3da86c32aae2c8e689c59f1196d8c4" - integrity sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg== - dependencies: - prop-types "^15.5.0" - -"react-loadable@npm:@docusaurus/react-loadable@6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz#de6c7f73c96542bd70786b8e522d535d69069dc4" - integrity sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ== - dependencies: - "@types/react" "*" - -react-router-config@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" - integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== - dependencies: - "@babel/runtime" "^7.1.2" - -react-router-dom@^5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" - integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.3.4" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router@5.3.4, react-router@^5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" - integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-twemoji@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/react-twemoji/-/react-twemoji-0.5.0.tgz#0565f8e427fc4c9ef3680977c4a88fbdef79f874" - integrity sha512-xz3NLWTFCfWOmPd559jcFX4f976ORIPpL9SwdBQO5BZwIYD1U1vpbY2E6k2vwPCVH78s2m1GbG5jpHKGUPZ+gw== - dependencies: - lodash.isequal "^4.5.0" - prop-types "^15.7.2" - twemoji "14.0.1" - -react-twemoji@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/react-twemoji/-/react-twemoji-0.7.2.tgz#1af0716f6a0b8401a5500ae8bdac1538057b9f1f" - integrity sha512-sNuzC0YIUtwWzoWq4cA6YCozIRu/9lDO8Anl2hlU5lQainZ2ZH6sB7wOv2wyTY462QSXqq9Y8T7rHgEjCfpVvg== - dependencies: - "@twemoji/api" "17.0.2" - dequal "^2.0.3" - -react@19.2.8: - version "19.2.8" - resolved "https://registry.yarnpkg.com/react/-/react-19.2.8.tgz#a80663dbb58d69c6fe3fd291d3cb324e8a7dff2d" - integrity sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw== - -read-package-json-fast@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" - integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== - dependencies: - json-parse-even-better-errors "^3.0.0" - npm-normalize-package-bin "^3.0.0" - -readable-stream@^2.0.1: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.2, readable-stream@^3.0.6: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-5.1.1.tgz#520bca06f9d1ae1b96cc0800dbe84b983d19422c" - integrity sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA== - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -recma-build-jsx@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz#c02f29e047e103d2fab2054954e1761b8ea253c4" - integrity sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew== - dependencies: - "@types/estree" "^1.0.0" - estree-util-build-jsx "^3.0.0" - vfile "^6.0.0" - -recma-jsx@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/recma-jsx/-/recma-jsx-1.0.1.tgz#58e718f45e2102ed0bf2fa994f05b70d76801a1a" - integrity sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w== - dependencies: - acorn-jsx "^5.0.0" - estree-util-to-js "^2.0.0" - recma-parse "^1.0.0" - recma-stringify "^1.0.0" - unified "^11.0.0" - -recma-parse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/recma-parse/-/recma-parse-1.0.0.tgz#c351e161bb0ab47d86b92a98a9d891f9b6814b52" - integrity sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ== - dependencies: - "@types/estree" "^1.0.0" - esast-util-from-js "^2.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -recma-stringify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/recma-stringify/-/recma-stringify-1.0.0.tgz#54632030631e0c7546136ff9ef8fde8e7b44f130" - integrity sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g== - dependencies: - "@types/estree" "^1.0.0" - estree-util-to-js "^2.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -reflect-metadata@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz#400c845b6cba87a21f2c65c4aeb158f4fa4d9c5b" - integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== - -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== - dependencies: - regenerate "^1.4.2" - -regenerate-unicode-properties@^10.2.2: - version "10.2.2" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66" - integrity sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regexpu-core@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" - integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" - -regexpu-core@^6.3.1: - version "6.4.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" - integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== - dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.2.2" - regjsgen "^0.8.0" - regjsparser "^0.13.0" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.2.1" - -registry-auth-token@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.1.tgz#f1ff69c8e492e7edee07110b4752dd0a8aa82853" - integrity sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q== - dependencies: - "@pnpm/npm-conf" "^3.0.2" - -registry-url@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" - integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== - dependencies: - rc "1.2.8" - -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== - -regjsgen@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" - integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== - -regjsparser@^0.13.0: - version "0.13.2" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.2.tgz#f654734b5c588b22ba3e21693b30523417180808" - integrity sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ== - dependencies: - jsesc "~3.1.0" - -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== - dependencies: - jsesc "~0.5.0" - -rehype-raw@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-7.0.0.tgz#59d7348fd5dbef3807bbaa1d443efd2dd85ecee4" - integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww== - dependencies: - "@types/hast" "^3.0.0" - hast-util-raw "^9.0.0" - vfile "^6.0.0" - -rehype-recma@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rehype-recma/-/rehype-recma-1.0.0.tgz#d68ef6344d05916bd96e25400c6261775411aa76" - integrity sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw== - dependencies: - "@types/estree" "^1.0.0" - "@types/hast" "^3.0.0" - hast-util-to-estree "^3.0.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -remark-cli@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/remark-cli/-/remark-cli-12.0.1.tgz#991ede01adfdf0471177c381168105da4b93f99a" - integrity sha512-2NAEOACoTgo+e+YAaCTODqbrWyhMVmlUyjxNCkTrDRHHQvH6+NbrnqVvQaLH/Q8Ket3v90A43dgAJmXv8y5Tkw== - dependencies: - import-meta-resolve "^4.0.0" - markdown-extensions "^2.0.0" - remark "^15.0.0" - unified-args "^11.0.0" - -remark-comment@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/remark-comment/-/remark-comment-1.0.0.tgz#befe2fd5dde688d641542cd1206130e00b79a337" - integrity sha512-k8YPo5MGvl8l4gGxOH6Zk4Fa2AhDACN5eqKnKZcHDORZQS15hlnezlBHj2lqyDiqzApNmYOMTibkEJbMSKU25w== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.1.0" - micromark-util-symbol "^1.0.1" - -remark-directive@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/remark-directive/-/remark-directive-3.0.1.tgz#689ba332f156cfe1118e849164cc81f157a3ef0a" - integrity sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-directive "^3.0.0" - micromark-extension-directive "^3.0.0" - unified "^11.0.0" - -remark-emoji@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-4.0.1.tgz#671bfda668047689e26b2078c7356540da299f04" - integrity sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg== - dependencies: - "@types/mdast" "^4.0.2" - emoticon "^4.0.1" - mdast-util-find-and-replace "^3.0.1" - node-emoji "^2.1.0" - unified "^11.0.4" - -remark-frontmatter@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz#b68d61552a421ec412c76f4f66c344627dc187a2" - integrity sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-frontmatter "^2.0.0" - micromark-extension-frontmatter "^2.0.0" - unified "^11.0.0" - -remark-gfm@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-4.0.1.tgz#33227b2a74397670d357bf05c098eaf8513f0d6b" - integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-gfm "^3.0.0" - micromark-extension-gfm "^3.0.0" - remark-parse "^11.0.0" - remark-stringify "^11.0.0" - unified "^11.0.0" - -remark-lint-blockquote-indentation@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-4.0.1.tgz#84bbe387254e38f7de94fcfa5e673d40308000a2" - integrity sha512-7BhOsImFgTD7IIliu2tt+yJbx5gbMbXCOspc3VdYf/87iLJdWKqJoMy2V6DZG7kBjBlBsIZi38fDDngJttXt4w== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-phrasing "^4.0.0" - pluralize "^8.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - -remark-lint-checkbox-character-style@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-5.0.1.tgz#fcc9254bac8ce2025c8949a863ad37b7aa354208" - integrity sha512-6qilm7XQXOcTvjFEqqNY57Ki7md9rkSdpMIfIzVXdEnI4Npl2BnUff6ANrGRM7qTgJTrloaf8H0eQ91urcU6Og== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-phrasing "^4.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-message "^4.0.0" - -remark-lint-code-block-style@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-code-block-style/-/remark-lint-code-block-style-4.0.1.tgz#28cdab3e687b68e5e2cc500e225ed4b75e088e0e" - integrity sha512-d4mHsEpv1yqXWl2dd+28tGRX0Lzk5qw7cfxAQVkOXPUONhsMFwXJEBeeqZokeG4lOKtkKdIJR7ezScDfWR0X4w== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-phrasing "^4.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-message "^4.0.0" - -remark-lint-emphasis-marker@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-4.0.1.tgz#473dd76c79cbc44b55410372f66d2ef8b92ebf2c" - integrity sha512-BF1WWsAxai3XoKk48sfiqT3L8m02AZLj3BnipWkHDRXuLfz6VwsHVaHWyNvvE0p6b2B3A5dSYbcfJu5RmPx4tQ== - dependencies: - "@types/mdast" "^4.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-message "^4.0.0" - -remark-lint-fenced-code-marker@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-4.0.1.tgz#6ad121dc253f9cb86c2269e02baf9de5c56770c5" - integrity sha512-uI91OcVPKjNxV+vpjDW9T64hkE0a/CRn3JhwdMxUAJYpVsKnA7PFPSFJOx/abNsVZHNSe7ZFGgGdaH/lqgSizA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-phrasing "^4.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-message "^4.0.0" - -remark-lint-final-newline@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-final-newline/-/remark-lint-final-newline-3.0.1.tgz#a5ca02cbdbfa26f7c7412d39df6f99f086990799" - integrity sha512-q5diKHD6BMbzqWqgvYPOB8AJgLrMzEMBAprNXjcpKoZ/uCRqly+gxjco+qVUMtMWSd+P+KXZZEqoa7Y6QiOudw== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - unified-lint-rule "^3.0.0" - vfile-location "^5.0.0" - -remark-lint-hard-break-spaces@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-4.1.1.tgz#c1c307d9c396501ee15353874c38cd8a1d6f19d8" - integrity sha512-AKDPDt39fvmr3yk38OKZEWJxxCOOUBE+96AsBfs+ExS5LW6oLa9041X5ahFDQHvHGzdoremEIaaElursaPEkNg== - dependencies: - "@types/mdast" "^4.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - -remark-lint-heading-style@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-heading-style/-/remark-lint-heading-style-4.0.1.tgz#8d6b80e4ed314f6dc52f5af9653f89dfe3b6b712" - integrity sha512-+rUpJ/N2CGC5xPgZ18XgsCsUBtadgEhdTi0BJPrsFmHPzL22BUHajeg9im8Y7zphUcbi1qFiKuxZd2nzDgZSXQ== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-heading-style "^3.0.0" - mdast-util-phrasing "^4.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-message "^4.0.0" - -remark-lint-link-title-style@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-link-title-style/-/remark-lint-link-title-style-4.0.1.tgz#4de0a635b367edbb1fbec25f708f0bb774c54239" - integrity sha512-MtmnYrhjhRXR0zeiyYf/7GBlUF5KAPypJb345KjyDluOhI4Wj4VAXvVQuov/MFc3y8p/1yVwv3QDYv6yue8/wQ== - dependencies: - "@types/mdast" "^4.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-message "^4.0.0" - -remark-lint-list-item-bullet-indent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-5.0.1.tgz#973629cda1ccdcb8aab5d79526c73aa9e7fbd27c" - integrity sha512-LKuTxkw5aYChzZoF3BkfaBheSCHs0T8n8dPHLQEuOLo6iC5wy98iyryz0KZ61GD8stlZgQO2KdWSdnP6vr40Iw== - dependencies: - "@types/mdast" "^4.0.0" - pluralize "^8.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - -remark-lint-list-item-content-indent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-4.0.1.tgz#8fb2f8029940fdb42f6b8d739cd4252838a80795" - integrity sha512-KSopxxp64O6dLuTQ2sWaTqgjKWr1+AoB1QCTektMJ3mfHfn0QyZzC2CZbBU22KGzBhiYXv9cIxlJlxUtq2NqHg== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-phrasing "^4.0.0" - pluralize "^8.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-message "^4.0.0" - -remark-lint-list-item-indent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-list-item-indent/-/remark-lint-list-item-indent-4.0.1.tgz#b2e956d07fdd7f3cbc5d3407321222605a8d9385" - integrity sha512-gJd1Q+jOAeTgmGRsdMpnRh01DUrAm0O5PCQxE8ttv1QZOV015p/qJH+B4N6QSmcUuPokHLAh9USuq05C73qpiA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-phrasing "^4.0.0" - pluralize "^8.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - -remark-lint-no-blockquote-without-marker@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-6.0.1.tgz#92da6318fa6237f8f706cfbf1c0f6ef4bb480ee3" - integrity sha512-b4IOkNcG7C16HYAdKUeAhO7qPt45m+v7SeYbVrqvbSFtlD3EUBL8fgHRgLK1mdujFXDP1VguOEMx+Txv8JOT4w== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-directive "^3.0.0" - mdast-util-phrasing "^4.0.0" - pluralize "^8.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-location "^5.0.0" - -remark-lint-no-duplicate-definitions@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-4.0.1.tgz#2411666d9dcdaf24662fd78ca7178085b02b51be" - integrity sha512-Ek+A/xDkv5Nn+BXCFmf+uOrFSajCHj6CjhsHjtROgVUeEPj726yYekDBoDRA0Y3+z+U30AsJoHgf/9Jj1IFSug== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-phrasing "^4.0.0" - unified-lint-rule "^3.0.0" - unist-util-visit-parents "^6.0.0" - vfile-message "^4.0.0" - -remark-lint-no-heading-content-indent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-5.0.1.tgz#53f5ac6aea9c46a40f16b1449cdae64c73028112" - integrity sha512-YIWktnZo7M9aw7PGnHdshvetSH3Y0qW+Fm143R66zsk5lLzn1XA5NEd/MtDzP8tSxxV+gcv+bDd5St1QUI4oSQ== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-phrasing "^4.0.0" - pluralize "^8.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - -remark-lint-no-literal-urls@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-4.0.1.tgz#e1380f203e81a371327c4f23553a2c989a71b29d" - integrity sha512-RhTANFkFFXE6bM+WxWcPo2TTPEfkWG3lJZU50ycW7tJJmxUzDNzRed/z80EVJIdGwFa0NntVooLUJp3xrogalQ== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-to-string "^4.0.0" - micromark-util-character "^2.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - -remark-lint-no-shortcut-reference-image@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-4.0.1.tgz#98e92ac300c9ed5374b026d2550849c1709878ca" - integrity sha512-hQhJ3Dr8ZWRdj7qm6+9vcPpqtGchhENA2UHOmcTraLf6dN1cFATCgY/HbTbRIN6NkG/EEClTgRC1QCokWR2Mmw== - dependencies: - "@types/mdast" "^4.0.0" - unified-lint-rule "^3.0.0" - unist-util-visit-parents "^6.0.0" - -remark-lint-no-shortcut-reference-link@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-4.0.1.tgz#b119ebea61f96630b62a453e141dd15049ee8756" - integrity sha512-YxciuUZc90QaJYhayGO80lS3zxEOBgwwLW1MKYB7AfUdkrLcLVlS+DFloiq0MZ7EDVXuuGUEnIzyjyLSbI5BUA== - dependencies: - "@types/mdast" "^4.0.0" - unified-lint-rule "^3.0.0" - unist-util-visit-parents "^6.0.0" - -remark-lint-no-undefined-references@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-5.0.2.tgz#8a244c250db92d3ee2664dbb7ad873c7df84d71d" - integrity sha512-5prkVb1tKwJwr5+kct/UjsLjvMdEDO7uClPeGfrxfAcN59+pWU8OUSYiqYmpSKWJPIdyxPRS8Oyf1HtaYvg8VQ== - dependencies: - "@types/mdast" "^4.0.0" - collapse-white-space "^2.0.0" - devlop "^1.0.0" - micromark-util-normalize-identifier "^2.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-location "^5.0.0" - -remark-lint-no-unused-definitions@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-4.0.2.tgz#920edd3b3b83b7b94f73308d95c93fc1e14283aa" - integrity sha512-KRzPmvfq6b3LSEcAQZobAn+5eDfPTle0dPyDEywgPSc3E7MIdRZQenL9UL8iIqHQWK4FvdUD0GX8FXGqu5EuCw== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - unified-lint-rule "^3.0.0" - unist-util-visit-parents "^6.0.0" - -remark-lint-ordered-list-marker-style@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-4.0.1.tgz#d93dddd490a3b823c0e9c0e9d961b5032f2f4c19" - integrity sha512-vZTAbstcBPbGwJacwldGzdGmKwy5/4r29SZ9nQkME4alEl5B1ReSBlYa8t7QnTSW7+tqvA9Sg71RPadgAKWa4w== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-phrasing "^4.0.0" - micromark-util-character "^2.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-message "^4.0.0" - -remark-lint-ordered-list-marker-value@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-4.0.1.tgz#8a945e0226eacb99cf8489038eff33fa10042f4b" - integrity sha512-HQb1MrArvApREC1/I6bkiFlZVDjngsuII29n8E8StnAaHOMN3hVYy6wJ9Uk+O3+X9O8v7fDsZPqFUHSfJhERXQ== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-phrasing "^4.0.0" - micromark-util-character "^2.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-message "^4.0.0" - -remark-lint-rule-style@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-rule-style/-/remark-lint-rule-style-4.0.1.tgz#2bab10a72b8e7e63b664b41355d93d9aae7c3610" - integrity sha512-gl1Ft13oTS3dJUCsWZzxD/5dAwI1HON67KU7uNfODD5gXJ8Y11deOWbun190ma7XbYdD7P0l8VT2HeRtEQzrWg== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-phrasing "^4.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-message "^4.0.0" - -remark-lint-strong-marker@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/remark-lint-strong-marker/-/remark-lint-strong-marker-4.0.1.tgz#78f5001a492bae6cdc76fa71fbb8718dd6838d86" - integrity sha512-KaGtj/OWEP4eoafevnlp3NsEVwC7yGEjBJ6uFMzfjNoXyjATdfZ2euB/AfKVt/A/FdZeeMeVoAUFH4DL+hScLQ== - dependencies: - "@types/mdast" "^4.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-message "^4.0.0" - -remark-lint-table-cell-padding@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-5.1.1.tgz#f2e20642ed4ae2af1e00ea4f29369322a8b36dc7" - integrity sha512-6fgVA1iINBoAJaZMOnSsxrF9Qj9+hmCqrsrqZqgJJETjT1ODGH64iAN1/6vHR7dIwmy73d6ysB2WrGyKhVlK3A== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - mdast-util-phrasing "^4.0.0" - pluralize "^8.0.0" - unified-lint-rule "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit-parents "^6.0.0" - vfile-message "^4.0.0" - -remark-lint@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/remark-lint/-/remark-lint-10.0.1.tgz#56d64e28a6373f10a4508e644c9d5a8056f9c9ca" - integrity sha512-1+PYGFziOg4pH7DDf1uMd4AR3YuO2EMnds/SdIWMPGT7CAfDRSnAmpxPsJD0Ds3IKpn97h3d5KPGf1WFOg6hXQ== - dependencies: - "@types/mdast" "^4.0.0" - remark-message-control "^8.0.0" - unified "^11.0.0" - -remark-mdx@^3.0.0, remark-mdx@^3.0.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-3.1.1.tgz#047f97038bc7ec387aebb4b0a4fe23779999d845" - integrity sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg== - dependencies: - mdast-util-mdx "^3.0.0" - micromark-extension-mdxjs "^3.0.0" - -remark-message-control@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/remark-message-control/-/remark-message-control-8.0.0.tgz#1d5880f33c05a65fcd60dcf0572b8198e9935d97" - integrity sha512-brpzOO+jdyE/mLqvqqvbogmhGxKygjpCUCG/PwSCU43+JZQ+RM+sSzkCWBcYvgF3KIAVNIoPsvXjBkzO7EdsYQ== - dependencies: - "@types/mdast" "^4.0.0" - mdast-comment-marker "^3.0.0" - unified-message-control "^5.0.0" - vfile "^6.0.0" - -remark-parse@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" - integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-from-markdown "^2.0.0" - micromark-util-types "^2.0.0" - unified "^11.0.0" - -remark-preset-lint-consistent@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/remark-preset-lint-consistent/-/remark-preset-lint-consistent-6.0.1.tgz#e410ed1aa1bffba04f1a6d9cceb4b9213696be62" - integrity sha512-SOLdA36UOU1hiGFm6HAqN9+DORGJPVWxU/EvPVkknTr9V4ULhlzHEJ8OVRMVX3jqoy4lrwb4IqiboVz0YLA7+Q== - dependencies: - remark-lint "^10.0.0" - remark-lint-blockquote-indentation "^4.0.0" - remark-lint-checkbox-character-style "^5.0.0" - remark-lint-code-block-style "^4.0.0" - remark-lint-emphasis-marker "^4.0.0" - remark-lint-fenced-code-marker "^4.0.0" - remark-lint-heading-style "^4.0.0" - remark-lint-link-title-style "^4.0.0" - remark-lint-list-item-content-indent "^4.0.0" - remark-lint-ordered-list-marker-style "^4.0.0" - remark-lint-ordered-list-marker-value "^4.0.0" - remark-lint-rule-style "^4.0.0" - remark-lint-strong-marker "^4.0.0" - remark-lint-table-cell-padding "^5.0.0" - unified "^11.0.0" - -remark-preset-lint-recommended@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/remark-preset-lint-recommended/-/remark-preset-lint-recommended-7.0.1.tgz#022ee51c50cfcb968968f68b248b7c99c48d14d5" - integrity sha512-j1CY5u48PtZl872BQ40uWSQMT3R4gXKp0FUgevMu5gW7hFMtvaCiDq+BfhzeR8XKKiW9nIMZGfIMZHostz5X4g== - dependencies: - remark-lint "^10.0.0" - remark-lint-final-newline "^3.0.0" - remark-lint-hard-break-spaces "^4.0.0" - remark-lint-list-item-bullet-indent "^5.0.0" - remark-lint-list-item-indent "^4.0.0" - remark-lint-no-blockquote-without-marker "^6.0.0" - remark-lint-no-duplicate-definitions "^4.0.0" - remark-lint-no-heading-content-indent "^5.0.0" - remark-lint-no-literal-urls "^4.0.0" - remark-lint-no-shortcut-reference-image "^4.0.0" - remark-lint-no-shortcut-reference-link "^4.0.0" - remark-lint-no-undefined-references "^5.0.0" - remark-lint-no-unused-definitions "^4.0.0" - remark-lint-ordered-list-marker-style "^4.0.0" - unified "^11.0.0" - -remark-rehype@^11.0.0: - version "11.1.2" - resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-11.1.2.tgz#2addaadda80ca9bd9aa0da763e74d16327683b37" - integrity sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - mdast-util-to-hast "^13.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -remark-stringify@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-11.0.0.tgz#4c5b01dd711c269df1aaae11743eb7e2e7636fd3" - integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-to-markdown "^2.0.0" - unified "^11.0.0" - -remark@^15.0.0: - version "15.0.1" - resolved "https://registry.yarnpkg.com/remark/-/remark-15.0.1.tgz#ac7e7563260513b66426bc47f850e7aa5862c37c" - integrity sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A== - dependencies: - "@types/mdast" "^4.0.0" - remark-parse "^11.0.0" - remark-stringify "^11.0.0" - unified "^11.0.0" - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -"require-like@>= 0.1.1": - version "0.1.2" - resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" - integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -reselect@^4.1.7: - version "4.1.8" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" - integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== - -resolve-alpn@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - -resolve@^1.22.11: - version "1.22.12" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.12.tgz#f5b2a680897c69c238a13cd16b15671f8b73549f" - integrity sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA== - dependencies: - es-errors "^1.3.0" - is-core-module "^2.16.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.22.8: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" - integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== - dependencies: - lowercase-keys "^3.0.0" - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -retry@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rtlcss@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-4.3.0.tgz#f8efd4d5b64f640ec4af8fa25b65bacd9e07cc97" - integrity sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - postcss "^8.4.21" - strip-json-comments "^3.1.1" - -run-applescript@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911" - integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sass-loader@^16.0.2: - version "16.0.8" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-16.0.8.tgz#b7eef3b7947b32e2988dd760a2f7f0d547838e6b" - integrity sha512-hcov4ZwZJIGbEuyNr9EmiTmZueyrxSToE6GOzoZnq5JM7ecRO7ttyvilPn+VmRsqiP16+VYZzVnGZj/hzZgKBA== - dependencies: - neo-async "^2.6.2" - -sass@1.103.1: - version "1.103.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.103.1.tgz#13b70f5ff69288db956dc27d27c8fb79f3a27c61" - integrity sha512-9icZURbP51S6S0QGoyaeqk9uB06GNWxsFYWfH5RgpFgqK5FA8tJcM3AdVxrZEVJ7dz+L87nG95gBKf4VuaMHGw== - dependencies: - chokidar "^5.0.0" - immutable "^5.1.5" - source-map-js ">=0.6.2 <2.0.0" - optionalDependencies: - "@parcel/watcher" "^2.4.1" - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -sax@^1.5.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.6.1.tgz#4c23cf608c0b693ab54b4b5888e92cfe977b9843" - integrity sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q== - -scheduler@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.27.0.tgz#0c4ef82d67d1e5c1e359e8fc76d3a87f045fe5bd" - integrity sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q== - -schema-dts@^1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/schema-dts/-/schema-dts-1.1.5.tgz#9237725d305bac3469f02b292a035107595dc324" - integrity sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg== - -schema-utils@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.8.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" - -schema-utils@^4.0.1, schema-utils@^4.2.0, schema-utils@^4.3.0, schema-utils@^4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" - integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -"search-insights@>=1 <3": - version "2.16.3" - resolved "https://registry.yarnpkg.com/search-insights/-/search-insights-2.16.3.tgz#7128e2c6c8499fff52326dda9209b380d4ee0e0a" - integrity sha512-hSHy/s4Zk2xibhj9XTCACB+1PqS+CaJxepGNBhKc/OsHRpqvHAUAm5+uZ6kJJbGXn0pb3XqekHjg6JAqPExzqg== - -section-matter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" - integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== - dependencies: - extend-shallow "^2.0.1" - kind-of "^6.0.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== - -selfsigned@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-5.5.0.tgz#4c9ab7c7c9f35f18fb6a9882c253eb0e6bd6557b" - integrity sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew== - dependencies: - "@peculiar/x509" "^1.14.2" - pkijs "^3.3.3" - -semver-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" - integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== - dependencies: - semver "^7.3.5" - -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.1.1, semver@^7.5.3, semver@^7.5.4: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -semver@^7.3.5, semver@^7.3.7: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@~0.19.0, send@~0.19.1: - version "0.19.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.2.tgz#59bc0da1b4ea7ad42736fd642b1c4294e114ff29" - integrity sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~2.0.0" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "~0.5.2" - http-errors "~2.0.1" - mime "1.6.0" - ms "2.1.3" - on-finished "~2.4.1" - range-parser "~1.2.1" - statuses "~2.0.2" - -serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - -serve-handler@^6.1.7: - version "6.1.7" - resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.7.tgz#e9bb864e87ee71e8dab874cde44d146b77e3fb78" - integrity sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg== - dependencies: - bytes "3.0.0" - content-disposition "0.5.2" - mime-types "2.1.18" - minimatch "3.1.5" - path-is-inside "1.0.2" - path-to-regexp "3.3.0" - range-parser "1.2.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@~1.16.2: - version "1.16.3" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.3.tgz#a97b74d955778583f3862a4f0b841eb4d5d78cf9" - integrity sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA== - dependencies: - encodeurl "~2.0.0" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "~0.19.1" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0, setprototypeof@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shallowequal@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.8.4: - version "1.10.0" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.10.0.tgz#482033e192e4f5c07151521ffa03400ec71b1b0f" - integrity sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA== - -shelljs@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.10.0.tgz#e3bbae99b0f3f0cc5dce05b46a346fae2090e883" - integrity sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw== - dependencies: - execa "^5.1.1" - fast-glob "^3.3.2" - -side-channel-list@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.1.tgz#c2e0b5a14a540aebee3bbc6c3f8666cc9b509127" - integrity sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.4" - -side-channel-map@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" - integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - -side-channel-weakmap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" - integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - side-channel-map "^1.0.1" - -side-channel@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.1.tgz#ea02c62e05dc4bea67d4442f0fb71ee192f8e0ab" - integrity sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.4" - side-channel-list "^1.0.1" - side-channel-map "^1.0.1" - side-channel-weakmap "^1.0.2" - -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-markdown@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/simple-markdown/-/simple-markdown-0.7.3.tgz#e32150b2ec6f8287197d09869fd928747a9c5640" - integrity sha512-uGXIc13NGpqfPeFJIt/7SHHxd6HekEJYtsdoCM06mEBPL9fQH/pSD7LRM6PZ7CKchpSvxKL4tvwMamqAaNDAyg== - dependencies: - "@types/react" ">=16.0.0" - -sirv@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-2.0.4.tgz#5dd9a725c578e34e449f332703eb2a74e46a29b0" - integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== - dependencies: - "@polka/url" "^1.0.0-next.24" - mrmime "^2.0.0" - totalist "^3.0.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -sitemap@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef" - integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== - dependencies: - "@types/node" "^17.0.5" - "@types/sax" "^1.2.1" - arg "^5.0.0" - sax "^1.2.4" - -skin-tone@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/skin-tone/-/skin-tone-2.0.0.tgz#4e3933ab45c0d4f4f781745d64b9f4c208e41237" - integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== - dependencies: - unicode-emoji-modifier-base "^1.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -snake-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - -sort-css-media-queries@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz#aa33cf4a08e0225059448b6c40eddbf9f1c8334c" - integrity sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA== - -"source-map-js@>=0.6.2 <2.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-js@^1.0.1, source-map-js@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" - integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.0: - version "0.7.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.6.tgz#a3658ab87e5b6429c8a1f3ba0083d4c61ca3ef02" - integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== - -space-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" - integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" - integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.18" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" - integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -srcset@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/srcset/-/srcset-4.0.0.tgz#336816b665b14cd013ba545b6fe62357f86e65f4" - integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -statuses@~2.0.1, statuses@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" - integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== - -std-env@^3.7.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.10.0.tgz#d810b27e3a073047b2b5e40034881f5ea6f9c83b" - integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg== - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string-width@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-6.1.0.tgz#96488d6ed23f9ad5d82d13522af9e4c4c3fd7518" - integrity sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^10.2.1" - strip-ansi "^7.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-entities@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" - integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== - dependencies: - character-entities-html4 "^2.0.0" - character-entities-legacy "^3.0.0" - -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" - -strip-bom-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" - integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -style-to-js@^1.0.0: - version "1.1.21" - resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.21.tgz#2908941187f857e79e28e9cd78008b9a0b3e0e8d" - integrity sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ== - dependencies: - style-to-object "1.0.14" - -style-to-object@1.0.14: - version "1.0.14" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-1.0.14.tgz#1d22f0e7266bb8c6d8cae5caf4ec4f005e08f611" - integrity sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw== - dependencies: - inline-style-parser "0.2.7" - -stylehacks@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.1.1.tgz#543f91c10d17d00a440430362d419f79c25545a6" - integrity sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg== - dependencies: - browserslist "^4.23.0" - postcss-selector-parser "^6.0.16" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^9.0.0: - version "9.2.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.2.tgz#502acaf82f2b7ee78eb7c83dcac0f89694e5a7bb" - integrity sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA== - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-parser@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" - integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== - -svgo@^3.0.2, svgo@^3.2.0: - version "3.3.4" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.4.tgz#fd2aa10ff585b3bd2b83ce3602f5582bc0718bb5" - integrity sha512-GsNRis4e8jxn2Y9ENz/8lbJ93CstG8svtMnuRaHbiF2LTJ5tK0/q3t/URPq9Zc7zVWBJnNnJMIp6bevK7bSmNg== - dependencies: - commander "^7.2.0" - css-select "^5.1.0" - css-tree "^2.3.1" - css-what "^6.1.0" - csso "^5.0.5" - picocolors "^1.0.0" - sax "^1.5.0" - -tapable@^2.0.0, tapable@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tapable@^2.3.0, tapable@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.3.tgz#5da7c9992c46038221267985ab28421a8879f160" - integrity sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A== - -tar@^7.5.21: - version "7.5.22" - resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.22.tgz#a696f998136e71487dc3f869a85bba2c67971ba9" - integrity sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA== - dependencies: - "@isaacs/fs-minipass" "^4.0.0" - chownr "^3.0.0" - minipass "^7.1.2" - minizlib "^3.1.0" - yallist "^5.0.0" - -terser-webpack-plugin@^5.3.9: - version "5.6.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.6.1.tgz#47bc41bd8b8fab8383b62ec763b7394829097e7b" - integrity sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ== - dependencies: - "@jridgewell/trace-mapping" "^0.3.25" - jest-worker "^27.4.5" - schema-utils "^4.3.0" - terser "^5.31.1" - -terser@^5.10.0: - version "5.14.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" - integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -terser@^5.15.1, terser@^5.31.1: - version "5.50.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.50.0.tgz#4e560a46704f9172f96ba31c3bd6dc108ad2cead" - integrity sha512-CN9BVxWhgS/hRxtUMjtC2uRWSTcSfQFHMDWma6sKKfIivCD91sM+FOPfvwoaRMqCSrUpe1nv3jDamd9eEQ4y+w== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.15.0" - commander "^2.20.0" - source-map-support "~0.5.20" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thingies@^2.5.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/thingies/-/thingies-2.6.1.tgz#4eb28e2585a75288f1765a0b08f1dfa020357a6f" - integrity sha512-cV/CMGTK3M4MlnJ/0At6ismOw/A0EEniDNScajjz/Br3c1sqE72YD01rGpPTKwd27wAxI5Pr+6+0w8yofzFRYw== - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -tiny-invariant@^1.0.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" - integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== - -tiny-warning@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -tinypool@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.1.1.tgz#059f2d042bd37567fbc017d3d426bdd2a2612591" - integrity sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -totalist@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8" - integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tree-dump@^1.0.3, tree-dump@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.1.0.tgz#ab29129169dc46004414f5a9d4a3c6e89f13e8a4" - integrity sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA== - -trim-lines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" - integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== - -trough@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" - integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== - -tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.6.0, tslib@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -tslib@^2.0.3, tslib@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tsyringe@^4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.10.0.tgz#d0c95815d584464214060285eaaadd94aa03299c" - integrity sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw== - dependencies: - tslib "^1.9.3" - -twemoji-parser@14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/twemoji-parser/-/twemoji-parser-14.0.0.tgz#13dabcb6d3a261d9efbf58a1666b182033bf2b62" - integrity sha512-9DUOTGLOWs0pFWnh1p6NF+C3CkQ96PWmEFwhOVmT3WbecRC+68AIqpsnJXygfkFcp4aXbOp8Dwbhh/HQgvoRxA== - -twemoji@14.0.1: - version "14.0.1" - resolved "https://registry.yarnpkg.com/twemoji/-/twemoji-14.0.1.tgz#0640887ef149403ae577081cbc2480a026e55ed6" - integrity sha512-eoqhea0sUhmC10iTacksyp1v9O4BP1jKmVqtK+Nztw40/dzawSHkXL3/xCpyh+mukmEvJ0Gw9VLvwZfQ9HKXDw== - dependencies: - fs-extra "^8.0.1" - jsonfile "^5.0.0" - twemoji-parser "14.0.0" - universalify "^0.1.2" - -type-fest@^1.0.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -type-fest@^2.13.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - -type-fest@^2.5.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.13.0.tgz#d1ecee38af29eb2e863b22299a3d68ef30d2abfb" - integrity sha512-lPfAm42MxE4/456+QyIaaVBAwgpJb6xZ8PRu09utnhPdWwcyj9vgy6Sq0Z5yNbJ21EdxB5dRU/Qg8bsyAMtlcw== - -type-fest@^3.8.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706" - integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-7.0.2.tgz#9ec773d7954a8c182c17cc5bbd575aa28bc51582" - integrity sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA== - optionalDependencies: - "@typescript/typescript-aix-ppc64" "7.0.2" - "@typescript/typescript-darwin-arm64" "7.0.2" - "@typescript/typescript-darwin-x64" "7.0.2" - "@typescript/typescript-freebsd-arm64" "7.0.2" - "@typescript/typescript-freebsd-x64" "7.0.2" - "@typescript/typescript-linux-arm" "7.0.2" - "@typescript/typescript-linux-arm64" "7.0.2" - "@typescript/typescript-linux-loong64" "7.0.2" - "@typescript/typescript-linux-mips64el" "7.0.2" - "@typescript/typescript-linux-ppc64" "7.0.2" - "@typescript/typescript-linux-riscv64" "7.0.2" - "@typescript/typescript-linux-s390x" "7.0.2" - "@typescript/typescript-linux-x64" "7.0.2" - "@typescript/typescript-netbsd-arm64" "7.0.2" - "@typescript/typescript-netbsd-x64" "7.0.2" - "@typescript/typescript-openbsd-arm64" "7.0.2" - "@typescript/typescript-openbsd-x64" "7.0.2" - "@typescript/typescript-sunos-x64" "7.0.2" - "@typescript/typescript-win32-arm64" "7.0.2" - "@typescript/typescript-win32-x64" "7.0.2" - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -undici-types@~8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-8.3.0.tgz#44e9fc9f3244648cdea35e4f9bb2d681e9410809" - integrity sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ== - -undici@^7.19.0: - version "7.29.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-7.29.0.tgz#ae0f6f62e06e057a9cbb7b2b5fde2bb74f791b8f" - integrity sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-emoji-modifier-base@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz#dbbd5b54ba30f287e2a8d5a249da6c0cef369459" - integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== - -unicode-match-property-value-ecmascript@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz#65a7adfad8574c219890e219285ce4c64ed67eaa" - integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== - -unified-args@^11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/unified-args/-/unified-args-11.0.1.tgz#5c82564616288b8d99feed7326c2223097d30726" - integrity sha512-WEQghE91+0s3xPVs0YW6a5zUduNLjmANswX7YbBfksHNDGMjHxaWCql4SR7c9q0yov/XiIEdk6r/LqfPjaYGcw== - dependencies: - "@types/text-table" "^0.2.0" - chalk "^5.0.0" - chokidar "^3.0.0" - comma-separated-tokens "^2.0.0" - json5 "^2.0.0" - minimist "^1.0.0" - strip-ansi "^7.0.0" - text-table "^0.2.0" - unified-engine "^11.0.0" - -unified-engine@^11.0.0: - version "11.2.1" - resolved "https://registry.yarnpkg.com/unified-engine/-/unified-engine-11.2.1.tgz#8f9c05b3f262930666b1cdb83108c15dd39d6cdd" - integrity sha512-xBAdZ8UY2X4R9Hm6X6kMne4Nz0PlpOc1oE6DPeqJnewr5Imkb8uT5Eyvy1h7xNekPL3PSWh3ZJyNrMW6jnNQBg== - dependencies: - "@types/concat-stream" "^2.0.0" - "@types/debug" "^4.0.0" - "@types/is-empty" "^1.0.0" - "@types/node" "^20.0.0" - "@types/unist" "^3.0.0" - concat-stream "^2.0.0" - debug "^4.0.0" - extend "^3.0.0" - glob "^10.0.0" - ignore "^5.0.0" - is-empty "^1.0.0" - is-plain-obj "^4.0.0" - load-plugin "^6.0.0" - parse-json "^7.0.0" - trough "^2.0.0" - unist-util-inspect "^8.0.0" - vfile "^6.0.0" - vfile-message "^4.0.0" - vfile-reporter "^8.0.0" - vfile-statistics "^3.0.0" - yaml "^2.0.0" - -unified-lint-rule@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/unified-lint-rule/-/unified-lint-rule-3.0.1.tgz#6edcf195533739be69c043560f5917a6c9e2b5f7" - integrity sha512-HxIeQOmwL19DGsxHXbeyzKHBsoSCFO7UtRVUvT2v61ptw/G+GbysWcrpHdfs5jqbIFDA11MoKngIhQK0BeTVjA== - dependencies: - "@types/unist" "^3.0.0" - trough "^2.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -unified-message-control@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unified-message-control/-/unified-message-control-5.0.0.tgz#7268a9a5d695c2591149ebe35e37eb200b852d7e" - integrity sha512-B2cSAkpuMVVmPP90KCfKdBhm1e9KYJ+zK3x5BCa0N65zpq1Ybkc9C77+M5qwR8FWO7RF3LM5QRRPZtgjW6DUCw== - dependencies: - "@types/unist" "^3.0.0" - devlop "^1.0.0" - space-separated-tokens "^2.0.0" - unist-util-is "^6.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - vfile-location "^5.0.0" - vfile-message "^4.0.0" - -unified@^11.0.0, unified@^11.0.3, unified@^11.0.4: - version "11.0.5" - resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" - integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== - dependencies: - "@types/unist" "^3.0.0" - bail "^2.0.0" - devlop "^1.0.0" - extend "^3.0.0" - is-plain-obj "^4.0.0" - trough "^2.0.0" - vfile "^6.0.0" - -unique-string@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" - integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== - dependencies: - crypto-random-string "^4.0.0" - -unist-util-inspect@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/unist-util-inspect/-/unist-util-inspect-8.1.0.tgz#ff2729b543c483041b3c29cbe04c5460a406ee25" - integrity sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-is@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.1.tgz#d0a3f86f2dd0db7acd7d8c2478080b5c67f9c6a9" - integrity sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position-from-estree@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz#d94da4df596529d1faa3de506202f0c9a23f2200" - integrity sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" - integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-stringify-position@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" - integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-visit-parents@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz#777df7fb98652ce16b4b7cd999d0a1a40efa3a02" - integrity sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - -unist-util-visit@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz#9a2a28b0aa76a15e0da70a08a5863a2f060e2468" - integrity sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -universalify@^0.1.0, universalify@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -update-browserslist-db@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" - integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== - dependencies: - escalade "^3.1.2" - picocolors "^1.0.1" - -update-browserslist-db@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz#a71c28dd22f505481dbc4689087b18d933e90afd" - integrity sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.1" - -update-notifier@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-6.0.2.tgz#a6990253dfe6d5a02bd04fbb6a61543f55026b60" - integrity sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og== - dependencies: - boxen "^7.0.0" - chalk "^5.0.1" - configstore "^6.0.0" - has-yarn "^3.0.0" - import-lazy "^4.0.0" - is-ci "^3.0.1" - is-installed-globally "^0.4.0" - is-npm "^6.0.0" - is-yarn-global "^0.4.0" - latest-version "^7.0.0" - pupa "^3.1.0" - semver "^7.3.7" - semver-diff "^4.0.0" - xdg-basedir "^5.1.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-loader@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - -utility-types@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" - integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -validate-npm-package-license@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validate-npm-package-name@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" - integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== - -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vfile-location@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.3.tgz#cb9eacd20f2b6426d19451e0eafa3d0a846225c3" - integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg== - dependencies: - "@types/unist" "^3.0.0" - vfile "^6.0.0" - -vfile-message@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.3.tgz#87b44dddd7b70f0641c2e3ed0864ba73e2ea8df4" - integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-stringify-position "^4.0.0" - -vfile-reporter@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-8.1.1.tgz#ac06a5a68f1b480609c443062dffea1cfa2d11b1" - integrity sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g== - dependencies: - "@types/supports-color" "^8.0.0" - string-width "^6.0.0" - supports-color "^9.0.0" - unist-util-stringify-position "^4.0.0" - vfile "^6.0.0" - vfile-message "^4.0.0" - vfile-sort "^4.0.0" - vfile-statistics "^3.0.0" - -vfile-sort@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-4.0.0.tgz#fa1929065b62fe5311e5391c9434f745e8641703" - integrity sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ== - dependencies: - vfile "^6.0.0" - vfile-message "^4.0.0" - -vfile-statistics@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-3.0.0.tgz#0f5cd00c611c1862b13a9b5bc5599efaf465f2cf" - integrity sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w== - dependencies: - vfile "^6.0.0" - vfile-message "^4.0.0" - -vfile@^6.0.0, vfile@^6.0.1: - version "6.0.3" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" - integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== - dependencies: - "@types/unist" "^3.0.0" - vfile-message "^4.0.0" - -walk-up-path@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" - integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== - -watchpack@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.2.tgz#e12e82d84674266fc1c6dbfe38891b92ff0522ec" - integrity sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg== - dependencies: - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -web-namespaces@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" - integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webpack-bundle-analyzer@^4.10.2: - version "4.10.2" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz#633af2862c213730be3dbdf40456db171b60d5bd" - integrity sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw== - dependencies: - "@discoveryjs/json-ext" "0.5.7" - acorn "^8.0.4" - acorn-walk "^8.0.0" - commander "^7.2.0" - debounce "^1.2.1" - escape-string-regexp "^4.0.0" - gzip-size "^6.0.0" - html-escaper "^2.0.2" - opener "^1.5.2" - picocolors "^1.0.0" - sirv "^2.0.3" - ws "^7.3.1" - -webpack-dev-middleware@^7.4.2: - version "7.4.5" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz#d4e8720aa29cb03bc158084a94edb4594e3b7ac0" - integrity sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA== - dependencies: - colorette "^2.0.10" - memfs "^4.43.1" - mime-types "^3.0.1" - on-finished "^2.4.1" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-server@^5.2.2: - version "5.2.6" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-5.2.6.tgz#3a5d41233cbb7504f814d19e59a59173fb8ae23d" - integrity sha512-HNLRmamRvVavZQ+avceZifmv8hmdUjg43t6MI4SqJDwFdW7RPQwH5vzGhDRZSX59SgfbeHhLnq3g+uooWo7pVw== - dependencies: - "@types/bonjour" "^3.5.13" - "@types/connect-history-api-fallback" "^1.5.4" - "@types/express" "^4.17.25" - "@types/express-serve-static-core" "^4.17.21" - "@types/serve-index" "^1.9.4" - "@types/serve-static" "^1.15.5" - "@types/sockjs" "^0.3.36" - "@types/ws" "^8.5.10" - ansi-html-community "^0.0.8" - bonjour-service "^1.2.1" - chokidar "^3.6.0" - colorette "^2.0.10" - compression "^1.8.1" - connect-history-api-fallback "^2.0.0" - express "^4.22.1" - graceful-fs "^4.2.6" - http-proxy-middleware "^2.0.9" - ipaddr.js "^2.1.0" - launch-editor "^2.14.1" - open "^10.0.3" - p-retry "^6.2.0" - schema-utils "^4.2.0" - selfsigned "^5.5.0" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^7.4.2" - ws "^8.18.0" - -webpack-merge@^5.9.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" - integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== - dependencies: - clone-deep "^4.0.1" - flat "^5.0.2" - wildcard "^2.0.0" - -webpack-merge@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-6.0.1.tgz#50c776868e080574725abc5869bd6e4ef0a16c6a" - integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== - dependencies: - clone-deep "^4.0.1" - flat "^5.0.2" - wildcard "^2.0.1" - -webpack-sources@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.5.1.tgz#76c2418486dcc02b2aa0694c104176c2858fe84a" - integrity sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw== - -webpack@^5.88.1, webpack@^5.94.0, webpack@^5.95.0: - version "5.109.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.109.2.tgz#b58dc289561c3282db35c210a99379a836a4c28d" - integrity sha512-U9/cvLzxObKNEZ9+TtdqrHM5/9z3lgl2c+c4BzbqGxFQvQvBAq87yql5A8pQ+rrMbS496MZJeF5enVBndIy2hw== - dependencies: - "@types/estree" "^1.0.8" - "@types/json-schema" "^7.0.15" - "@webassemblyjs/ast" "^1.14.1" - "@webassemblyjs/wasm-edit" "^1.14.1" - "@webassemblyjs/wasm-parser" "^1.14.1" - acorn "^8.16.0" - browserslist "^4.28.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.24.4" - es-module-lexer "^2.1.0" - eslint-scope "5.1.1" - events "^3.2.0" - graceful-fs "^4.2.11" - mime-db "^1.54.0" - minimizer-webpack-plugin "^5.6.1" - neo-async "^2.6.2" - schema-utils "^4.3.3" - tapable "^2.3.0" - watchpack "^2.5.2" - webpack-sources "^3.5.1" - -webpackbar@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-7.0.0.tgz#7228d32881af2392381b6514499ddea73cdf218a" - integrity sha512-aS9soqSO2iCHgqHoCrj4LbfGQUboDCYJPSFOAchEK+9psIjNrfSWW4Y0YEz67MKURNvMmfo0ycOg9d/+OOf9/Q== - dependencies: - ansis "^3.2.0" - consola "^3.2.3" - pretty-time "^1.1.0" - std-env "^3.7.0" - -websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.5" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.5.tgz#569d22764ab21f2de20af0e74b411e8ae5a0fa46" - integrity sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -whatwg-encoding@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" - integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== - dependencies: - iconv-lite "0.6.3" - -whatwg-mimetype@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" - integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -which@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" - integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== - dependencies: - isexe "^3.1.1" - -widest-line@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" - integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== - dependencies: - string-width "^5.0.1" - -wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== - -wildcard@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.0.1.tgz#2101e861777fec527d0ea90c57c6b03aac56a5b3" - integrity sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.3.1: - version "7.5.10" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" - integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== - -ws@^8.18.0: - version "8.21.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.21.3.tgz#660b4faddb6a3e575c86e078126919961f4de4fc" - integrity sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw== - -wsl-utils@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/wsl-utils/-/wsl-utils-0.1.0.tgz#8783d4df671d4d50365be2ee4c71917a0557baab" - integrity sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw== - dependencies: - is-wsl "^3.1.0" - -xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-5.1.0.tgz#1efba19425e73be1bc6f2a6ceb52a3d2c884c0c9" - integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== - -xml-js@^1.6.11: - version "1.6.11" - resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" - integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== - dependencies: - sax "^1.2.4" - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yallist@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" - integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== - -yaml@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" - integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== - -yarn@^1.22.22: - version "1.22.22" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.22.tgz#ac34549e6aa8e7ead463a7407e1c7390f61a6610" - integrity sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg== - -yauzl@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-3.4.0.tgz#88b2a21455f37ca7dccf2eeb33bacb4392322719" - integrity sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw== - dependencies: - pend "~1.2.0" - -yocto-queue@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.2.tgz#3e09c95d3f1aa89a58c114c99223edf639152c00" - integrity sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ== - -zwitch@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" - integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== diff --git a/zensical.toml b/zensical.toml new file mode 100644 index 00000000..ed073f52 --- /dev/null +++ b/zensical.toml @@ -0,0 +1,141 @@ +[project] +site_url = "https://guide.pycord.dev/" +site_name = "Pycord Guide" +site_description = "Your project description" +site_author = "Pycord-Development" + +copyright = "Copyright © 2026 Pycord-Development" + +repo_url = "https://github.com/Pycord-Development/pycord/" +repo_name = "Pycord-Development/pycord" + +# Different repo for guide so we override here +edit_uri = "https://github.com/Pycord-Development/guide/edit/main/docs/" +docs_dir = "docs" + +nav = [ + { "Get started" = "index.md" }, + { "Markdown in 5min" = "markdown.md" }, +] + +# extra_css = ["stylesheets/extra.css"] +# extra_javascript = ["javascripts/extra.js"] + +[project.theme] +language = "en" +features = [ + # Announcements + "announce.dismiss", + # Content + "content.action.edit", + "content.action.view", + "content.code.annotate", + "content.code.copy", + "content.code.select", + "content.footnote.tooltips", + "content.tabs.link", + "content.tooltips", + # Navigation + "navigation.expand", + "navigation.footer", + "navigation.indexes", + "navigation.instant", + "navigation.instant.prefetch", + "navigation.path", + "navigation.sections", + "navigation.top", + "navigation.tracking", + # Search + "search.highlight", + # Table of contents + "toc.follow", + # "toc.integrate", + # Footer + "navigation.footer", +] + +favicon = "images/favicon.png" +logo = "assets/logo.png" + +[project.theme.icon] +repo = "fontawesome/brands/github" + +[project.theme.font] +text = "Geist" +code = "Jetbrains Mono" + +[[project.theme.palette]] +media = "(prefers-color-scheme)" +toggle.icon = "lucide/sun-moon" +toggle.name = "Switch to light mode" +primary = "deep purple" +accent = "deep purple" + +[[project.theme.palette]] +media = "(prefers-color-scheme: light)" +scheme = "default" +toggle.icon = "lucide/sun" +toggle.name = "Switch to dark mode" +primary = "deep purple" +accent = "deep purple" + +[[project.theme.palette]] +media = "(prefers-color-scheme: dark)" +scheme = "slate" +toggle.icon = "lucide/moon" +toggle.name = "Switch to system preference" +primary = "deep purple" +accent = "deep purple" + +[[project.extra.social]] +icon = "fontawesome/brands/github" +link = "https://github.com/Pycord-Development/pycord" + +[[project.extra.social]] +icon = "lucide/globe" +link = "https://pycord.dev" + +[[project.extra.social]] +icon = "fontawesome/brands/discord" +link = "https://pycord.dev/discord" + +[project.validation] +unresolved_references = true +unresolved_footnotes = true +unused_definitions = true +unused_footnotes = true +shadowed_definitions = true +shadowed_footnotes = true + +[project.markdown_extensions] +abbr = {} +admonition = {} +attr_list = {} +def_list = {} +footnotes = {} +md_in_html = {} +toc.permalink = true +pymdownx.arithmatex.generic = true +pymdownx.betterem = { + smart_enable = "all" +} +pymdownx.caret = {} +pymdownx.details = {} +pymdownx.emoji.emoji_generator = "zensical.extensions.emoji.to_svg" +pymdownx.emoji.emoji_index = "zensical.extensions.emoji.twemoji" +pymdownx.highlight.anchor_linenums = true +pymdownx.highlight.line_spans = "__span" +pymdownx.highlight.pygments_lang_class = true +pymdownx.inlinehilite = {} +pymdownx.keys = {} +pymdownx.magiclink = {} +pymdownx.mark = {} +pymdownx.smartsymbols = {} +# pymdownx.snippets.base_path = "includes" +pymdownx.superfences.custom_fences = [ + { name = "mermaid", class = "mermaid", format = "pymdownx.superfences.fence_code_format" }, +] +pymdownx.tabbed.alternate_style = true +pymdownx.tabbed.combine_header_slug = true +pymdownx.tasklist.custom_checkbox = true +pymdownx.tilde = {} From 310d6f608d212c1c3f3218f2dd814bd3e73b2c23 Mon Sep 17 00:00:00 2001 From: Paillat-dev Date: Fri, 21 Aug 2026 21:39:27 +0200 Subject: [PATCH 2/8] feat: Move over content pages --- docs/assets/interactions/button-styles.png | Bin 0 -> 40520 bytes .../interactions/groups-and-subcommands.jpg | Bin 0 -> 78518 bytes docs/assets/interactions/modal-example.png | Bin 0 -> 15094 bytes .../interactions/select-menus-example.png | Bin 0 -> 39618 bytes docs/extensions/bridge.md | 110 +++++ docs/extensions/commands/groups.md | 56 +++ docs/extensions/commands/help-command.md | 456 ++++++++++++++++++ docs/extensions/commands/prefixed-commands.md | 219 +++++++++ docs/extensions/index.md | 24 + docs/extensions/pages/paginator-basics.md | 175 +++++++ docs/extensions/pages/paginator-faq.md | 24 + docs/extensions/tasks/tasks.md | 233 +++++++++ .../creating-your-first-bot.md | 237 +++++++++ docs/getting-started/hosting-your-bot.md | 101 ++++ docs/getting-started/index.md | 13 + docs/getting-started/more-features.md | 324 +++++++++++++ .../rules-and-common-practices.md | 185 +++++++ docs/index.md | 176 ------- docs/installation.md | 80 +++ .../application-commands/context-menus.md | 58 +++ .../application-commands/localizations.md | 53 ++ .../application-commands/slash-commands.md | 254 ++++++++++ docs/interactions/index.md | 186 +++++++ docs/interactions/ui-components/buttons.md | 297 ++++++++++++ docs/interactions/ui-components/dropdowns.md | 330 +++++++++++++ .../ui-components/modal-dialogs.md | 89 ++++ docs/introduction.md | 50 ++ docs/markdown.md | 111 ----- docs/more/community-resources.md | 23 + docs/more/contributing.md | 211 ++++++++ docs/more/git.md | 47 ++ docs/more/index.md | 13 + docs/more/virtual-environments.md | 62 +++ .../bridge/bye-prefixed-response.json | 49 ++ .../bridge/bye-prefixed-user-msg.json | 32 ++ .../extensions/bridge/bye-slash-response.json | 47 ++ .../bridge/hello-prefixed-response.json | 49 ++ .../bridge/hello-prefixed-user-msg.json | 32 ++ .../bridge/hello-slash-response.json | 47 ++ .../bridge/sum-prefixed-response.json | 49 ++ .../bridge/sum-prefixed-user-msg.json | 32 ++ .../extensions/bridge/sum-slash-response.json | 47 ++ .../commands/help-default-response.json | 34 ++ .../extensions/commands/help-error-embed.json | 41 ++ .../commands/help-error-user-msg.json | 32 ++ .../commands/help-minimal-embed.json | 40 ++ .../commands/help-minimal-response.json | 34 ++ .../commands/prefixed-announce-response.json | 34 ++ .../commands/prefixed-announce-user-msg.json | 32 ++ .../commands/prefixed-help-response.json | 34 ++ .../prefixed-help-unknown-command.json | 34 ++ .../commands/prefixed-help-user-msg.json | 32 ++ .../commands/prefixed-ping-response.json | 34 ++ .../commands/prefixed-ping-user-msg.json | 32 ++ .../creating-first-bot-hello.json | 47 ++ .../getting-started/more-features-embed.json | 90 ++++ .../more-features-pycord-guide-embed.json | 85 ++++ .../context-menus-account-creation.json | 47 ++ ...context-menus-get-message-id-response.json | 47 ++ ...context-menus-get-message-id-user-msg.json | 32 ++ .../slash-commands-add.json | 47 ++ .../slash-commands-animal.json | 47 ++ .../slash-commands-join.json | 47 ++ .../slash-commands-ping.json | 47 ++ .../interactions/index/buttons-example.json | 50 ++ .../interactions/index/modal-button.json | 46 ++ .../interactions/index/ping-response.json | 47 ++ .../index/reverse-message-response.json | 47 ++ .../index/reverse-message-user-msg.json | 32 ++ .../index/select-menu-example.json | 131 +++++ .../index/user-age-bob-response.json | 47 ++ .../index/user-age-dorukyum-msg.json | 32 ++ .../index/user-age-dorukyum-response.json | 47 ++ .../index/user-age-dorukyum-thinking.json | 32 ++ .../buttons-button-response.json | 63 +++ .../contributing/paillat-example-msg.json | 52 ++ .../error-handling/avatar-dm-response.json | 51 ++ .../error-handling/avatar-dm-user-msg.json | 24 + .../error-handling/avatar-guild-error.json | 49 ++ .../error-handling/avatar-guild-user-msg.json | 32 ++ .../error-handling/feedback-response.json | 47 ++ .../error-handling/feedback-thanks.json | 34 ++ .../feedback-timeout-error.json | 34 ++ .../feedback-timeout-response.json | 47 ++ .../error-handling/feedback-user-message.json | 32 ++ .../error-handling/ping-cooldown-error.json | 47 ++ .../error-handling/ping-cooldown-first.json | 47 ++ .../secret-non-owner-response.json | 47 ++ .../error-handling/secret-owner-response.json | 47 ++ docs/payloads/voice/playing-now-playing.json | 47 ++ .../voice/receiving-finished-recording.json | 42 ++ .../voice/receiving-record-response.json | 47 ++ docs/popular-topics/cogs.md | 144 ++++++ docs/popular-topics/error-handling.md | 325 +++++++++++++ docs/popular-topics/index.md | 15 + docs/popular-topics/intents.md | 47 ++ docs/popular-topics/sharding.md | 46 ++ docs/popular-topics/subclassing-bots.md | 124 +++++ docs/popular-topics/threads.md | 102 ++++ docs/voice/index.md | 25 + docs/voice/playing.md | 132 +++++ docs/voice/receiving.md | 118 +++++ zensical.toml | 10 +- 103 files changed, 7629 insertions(+), 289 deletions(-) create mode 100644 docs/assets/interactions/button-styles.png create mode 100644 docs/assets/interactions/groups-and-subcommands.jpg create mode 100644 docs/assets/interactions/modal-example.png create mode 100644 docs/assets/interactions/select-menus-example.png create mode 100644 docs/extensions/bridge.md create mode 100644 docs/extensions/commands/groups.md create mode 100644 docs/extensions/commands/help-command.md create mode 100644 docs/extensions/commands/prefixed-commands.md create mode 100644 docs/extensions/index.md create mode 100644 docs/extensions/pages/paginator-basics.md create mode 100644 docs/extensions/pages/paginator-faq.md create mode 100644 docs/extensions/tasks/tasks.md create mode 100644 docs/getting-started/creating-your-first-bot.md create mode 100644 docs/getting-started/hosting-your-bot.md create mode 100644 docs/getting-started/index.md create mode 100644 docs/getting-started/more-features.md create mode 100644 docs/getting-started/rules-and-common-practices.md delete mode 100644 docs/index.md create mode 100644 docs/installation.md create mode 100644 docs/interactions/application-commands/context-menus.md create mode 100644 docs/interactions/application-commands/localizations.md create mode 100644 docs/interactions/application-commands/slash-commands.md create mode 100644 docs/interactions/index.md create mode 100644 docs/interactions/ui-components/buttons.md create mode 100644 docs/interactions/ui-components/dropdowns.md create mode 100644 docs/interactions/ui-components/modal-dialogs.md create mode 100644 docs/introduction.md delete mode 100644 docs/markdown.md create mode 100644 docs/more/community-resources.md create mode 100644 docs/more/contributing.md create mode 100644 docs/more/git.md create mode 100644 docs/more/index.md create mode 100644 docs/more/virtual-environments.md create mode 100644 docs/payloads/extensions/bridge/bye-prefixed-response.json create mode 100644 docs/payloads/extensions/bridge/bye-prefixed-user-msg.json create mode 100644 docs/payloads/extensions/bridge/bye-slash-response.json create mode 100644 docs/payloads/extensions/bridge/hello-prefixed-response.json create mode 100644 docs/payloads/extensions/bridge/hello-prefixed-user-msg.json create mode 100644 docs/payloads/extensions/bridge/hello-slash-response.json create mode 100644 docs/payloads/extensions/bridge/sum-prefixed-response.json create mode 100644 docs/payloads/extensions/bridge/sum-prefixed-user-msg.json create mode 100644 docs/payloads/extensions/bridge/sum-slash-response.json create mode 100644 docs/payloads/extensions/commands/help-default-response.json create mode 100644 docs/payloads/extensions/commands/help-error-embed.json create mode 100644 docs/payloads/extensions/commands/help-error-user-msg.json create mode 100644 docs/payloads/extensions/commands/help-minimal-embed.json create mode 100644 docs/payloads/extensions/commands/help-minimal-response.json create mode 100644 docs/payloads/extensions/commands/prefixed-announce-response.json create mode 100644 docs/payloads/extensions/commands/prefixed-announce-user-msg.json create mode 100644 docs/payloads/extensions/commands/prefixed-help-response.json create mode 100644 docs/payloads/extensions/commands/prefixed-help-unknown-command.json create mode 100644 docs/payloads/extensions/commands/prefixed-help-user-msg.json create mode 100644 docs/payloads/extensions/commands/prefixed-ping-response.json create mode 100644 docs/payloads/extensions/commands/prefixed-ping-user-msg.json create mode 100644 docs/payloads/getting-started/creating-first-bot-hello.json create mode 100644 docs/payloads/getting-started/more-features-embed.json create mode 100644 docs/payloads/getting-started/more-features-pycord-guide-embed.json create mode 100644 docs/payloads/interactions/application-commands/context-menus-account-creation.json create mode 100644 docs/payloads/interactions/application-commands/context-menus-get-message-id-response.json create mode 100644 docs/payloads/interactions/application-commands/context-menus-get-message-id-user-msg.json create mode 100644 docs/payloads/interactions/application-commands/slash-commands-add.json create mode 100644 docs/payloads/interactions/application-commands/slash-commands-animal.json create mode 100644 docs/payloads/interactions/application-commands/slash-commands-join.json create mode 100644 docs/payloads/interactions/application-commands/slash-commands-ping.json create mode 100644 docs/payloads/interactions/index/buttons-example.json create mode 100644 docs/payloads/interactions/index/modal-button.json create mode 100644 docs/payloads/interactions/index/ping-response.json create mode 100644 docs/payloads/interactions/index/reverse-message-response.json create mode 100644 docs/payloads/interactions/index/reverse-message-user-msg.json create mode 100644 docs/payloads/interactions/index/select-menu-example.json create mode 100644 docs/payloads/interactions/index/user-age-bob-response.json create mode 100644 docs/payloads/interactions/index/user-age-dorukyum-msg.json create mode 100644 docs/payloads/interactions/index/user-age-dorukyum-response.json create mode 100644 docs/payloads/interactions/index/user-age-dorukyum-thinking.json create mode 100644 docs/payloads/interactions/ui-components/buttons-button-response.json create mode 100644 docs/payloads/more/contributing/paillat-example-msg.json create mode 100644 docs/payloads/popular-topics/error-handling/avatar-dm-response.json create mode 100644 docs/payloads/popular-topics/error-handling/avatar-dm-user-msg.json create mode 100644 docs/payloads/popular-topics/error-handling/avatar-guild-error.json create mode 100644 docs/payloads/popular-topics/error-handling/avatar-guild-user-msg.json create mode 100644 docs/payloads/popular-topics/error-handling/feedback-response.json create mode 100644 docs/payloads/popular-topics/error-handling/feedback-thanks.json create mode 100644 docs/payloads/popular-topics/error-handling/feedback-timeout-error.json create mode 100644 docs/payloads/popular-topics/error-handling/feedback-timeout-response.json create mode 100644 docs/payloads/popular-topics/error-handling/feedback-user-message.json create mode 100644 docs/payloads/popular-topics/error-handling/ping-cooldown-error.json create mode 100644 docs/payloads/popular-topics/error-handling/ping-cooldown-first.json create mode 100644 docs/payloads/popular-topics/error-handling/secret-non-owner-response.json create mode 100644 docs/payloads/popular-topics/error-handling/secret-owner-response.json create mode 100644 docs/payloads/voice/playing-now-playing.json create mode 100644 docs/payloads/voice/receiving-finished-recording.json create mode 100644 docs/payloads/voice/receiving-record-response.json create mode 100644 docs/popular-topics/cogs.md create mode 100644 docs/popular-topics/error-handling.md create mode 100644 docs/popular-topics/index.md create mode 100644 docs/popular-topics/intents.md create mode 100644 docs/popular-topics/sharding.md create mode 100644 docs/popular-topics/subclassing-bots.md create mode 100644 docs/popular-topics/threads.md create mode 100644 docs/voice/index.md create mode 100644 docs/voice/playing.md create mode 100644 docs/voice/receiving.md diff --git a/docs/assets/interactions/button-styles.png b/docs/assets/interactions/button-styles.png new file mode 100644 index 0000000000000000000000000000000000000000..7480e1da90a413f8dfe8e13b66a9a2a8c5dc2bb2 GIT binary patch literal 40520 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 CfS#QI literal 0 HcmV?d00001 diff --git a/docs/assets/interactions/groups-and-subcommands.jpg b/docs/assets/interactions/groups-and-subcommands.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce6b5110ab3b4285f55402fb88c1b8a8f6ba9900 GIT binary patch literal 78518 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 literal 0 HcmV?d00001 diff --git a/docs/assets/interactions/select-menus-example.png b/docs/assets/interactions/select-menus-example.png new file mode 100644 index 0000000000000000000000000000000000000000..32a47d0424f1ab420ca363682a12460aff040c91 GIT binary patch literal 39618 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 aeS&BlM7jQ%=K2BnBlKRJKmVP^m;VLX8_o0p literal 0 HcmV?d00001 diff --git a/docs/extensions/bridge.md b/docs/extensions/bridge.md new file mode 100644 index 00000000..ba53a321 --- /dev/null +++ b/docs/extensions/bridge.md @@ -0,0 +1,110 @@ +--- +title: Bridge +--- + +## Concept + +Let's say that you want to make a command that is both a Slash Command and a Prefixed Command. Now, you could just copy and paste the code from the first command callback to the other and make some adjustments, but that's not very efficient. + +This is where the `ext.bridge` module comes in. It allows you to use one callback to make both a Slash Command and a Prefixed Command. + +### Example Usage + +```python +import discord +from discord.ext import bridge + +intents = discord.Intents() +intents.message_content = True + +bot = bridge.Bot(command_prefix="!", intents=intents) + + +@bot.bridge_command() +async def hello(ctx): + await ctx.respond("Hello!") + + +bot.run("TOKEN") +``` + +``` +# link with hello-slash-response.json +# link with hello-prefixed-user-msg.json +# link with hello-prefixed-response.json +``` + +## Syntax + +First, instead of using `discord.Bot` or `commands.Bot`, we use `bridge.Bot`. `bridge.Bot` does inherit from `commands.Bot`, so you can do anything with `bridge.Bot` that `commands.Bot` can do. +Then, we define a command with `@bot.bridge_command()`. This makes a Bridge Command, which has both a Prefixed Command counterpart and a Slash Command counterpart. +Next, the callback has access to a `ctx` object, which is the context of the command. This context is either of `BridgeApplicationContext` type or `BridgeExtContext`. Because of that, it makes detecting how the function was called easier. + +### Using Bridge Commands in a Cog + +Like Slash Commands and Prefixed Commands, you can use Bridge Commands in a Cog. You can do this by using the `bridge_command` decorator. Here's an example: + +```python +import discord +from discord.ext import bridge, commands + + +class Greetings(commands.Cog): + def __init__(self, bot): + self.bot = bot + + @bridge.bridge_command() + async def hello(self, ctx): + await ctx.respond("Hello!") + + @bridge.bridge_command() + async def bye(self, ctx): + await ctx.respond("Bye!") + + +def setup(bot): + bot.add_cog(Greetings(bot)) +``` + +The cog will automatically split the Bridge Command into their Slash Command and Prefixed Command counterparts. + +``` +# link with hello-slash-response.json +# link with hello-prefixed-user-msg.json +# link with hello-prefixed-response.json +# link with bye-slash-response.json +# link with bye-prefixed-user-msg.json +# link with bye-prefixed-response.json +``` + +### Deferring + +You can defer if you want to communicate to the user that your bot is busy processing the command. This is done by using `ctx.defer()`. For the Slash Command implementation, `ctx.defer()` calls the function that gives out a "Bot is thinking" message. For the Prefixed Command implementation, `ctx.defer()` enables the typing indicator. + +### Options + +Options are pretty straightforward. You just specify them like you do with prefixed commands, and you're all set! + +```python +import discord +from discord.ext import bridge + +intents = discord.Intents() +intents.message_content = True + +bot = bridge.Bot(command_prefix="!", intents=intents) + + +@bot.bridge_command() +async def sum(ctx, a: int, b: int): + await ctx.respond(a + b) + + +bot.run("TOKEN") +``` + +``` +# link with sum-slash-response.json +# link with sum-prefixed-user-msg.json +# link with sum-prefixed-response.json +``` diff --git a/docs/extensions/commands/groups.md b/docs/extensions/commands/groups.md new file mode 100644 index 00000000..0e5cc869 --- /dev/null +++ b/docs/extensions/commands/groups.md @@ -0,0 +1,56 @@ +--- +title: Command Groups +--- + +Command groups are a way to create subcommands for your commands. For example, `!afk set` or `!afk remove`. + +## Syntax + +Creating a command group is very simple. + +```python title="Command Groups Example" +import discord +from discord.ext import commands + +bot = commands.Bot(command_prefix="!") + + +@bot.group() +async def afk(): + pass + + +@afk.command() +async def set(): ... + + +@afk.command() +async def remove(): ... + + +# Another command group + + +@bot.group( + invoke_without_command=True +) # Indicates if the group callback should begin parsing and invocation only if no subcommand was found. +async def math(ctx): + await ctx.send("Subcommand not found") + + +@math.command() +async def add(ctx, a: int, b: int): ... + + +@math.command() +async def subtract(ctx, a: int, b: int): ... +``` + +To create a command group, the command's decorator must be `@bot.group`. Once you have a command with +that decorator, you can use `@function.command()`, such as `@math.command()`. Now, you have subcommand +groups! + +!!! info "Related Topics" + + - [Prefixed Commands](prefixed-commands.md) + - [Cogs](../../popular-topics/cogs.md) diff --git a/docs/extensions/commands/help-command.md b/docs/extensions/commands/help-command.md new file mode 100644 index 00000000..3e3cb899 --- /dev/null +++ b/docs/extensions/commands/help-command.md @@ -0,0 +1,456 @@ +--- +title: Help Command +--- + +Pycord's `commands` extension comes with a built-in help command. In this guide, we will take a look at them as well as learn how to create your own. Let's dive in! + +!!! note + + This guide demonstrates using object-oriented programming and subclassing to make a help command for your + Pycord bot. It is important to understand these two concepts before continuing. + + **Learning Resources**: + + - [W3Schools - Python Subclassing](https://www.w3schools.com/python/python_classes.asp) + - [W3Schools - Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) + +## The Wrong Way + +A popular way to create a help command is to disable the built-in help command and create your own. This is not recommended as it will lead to a lot of confusion. + +```python title="The Wrong Way" +bot = commands.Bot(command_prefix="!", help_command=None) +# OR +bot.help_command = None +# OR +bot.remove_command("help") + + +@bot.command() +async def help(ctx, *, argument=None): ... +``` + +While it's possible to create a help command this way, doing so does not utilize the full capabilities +of making one with Pycord. Making a help command with subclassing and OOP will save time and effort. + +## Types of Help Commands + +There are two types of built-in help commands: + +- [`DefaultHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.DefaultHelpCommand) +- [`MinimalHelpCommand`](https://docs.pycord.dev/en/stable/ext/commands/api.html#discord.ext.commands.MinimalHelpCommand) + +`DefaultHelpCommand` is the command enabled by default. It isn't the best looking, but `MinimalHelpCommand` can help make it look a bit better. + +=== "Default Help Command" + + ```python title="Default Help Command" + import discord + from discord.ext import commands + + bot = commands.Bot( + command_prefix="!", help_command=commands.DefaultHelpCommand() + ) # help_command is DefaultHelpCommand by default so it isn't necessary to enable it like this + # We enable it here for the sake of understanding + + ... + + bot.run("token") + ``` + + ``` + # link with help-default-response.json + ``` + +=== "Minimal Help Command" + + ```python title="Minimal Help Command" + import discord + from discord.ext import commands + + bot = commands.Bot(command_prefix="!", help_command=commands.MinimalHelpCommand()) + + ... + + bot.run("token") + ``` + + ``` + # link with help-minimal-response.json + ``` + +## Updating Built-in Help Commands + +Let's try to make the `MinimalHelpCommand` look better. We can do this by putting its content in an +embed. + +```python title="Minimal Help Command Example" +bot = commands.Bot(command_prefix="!") + + +class MyNewHelp(commands.MinimalHelpCommand): + async def send_pages(self): + destination = self.get_destination() + for page in self.paginator.pages: + emby = discord.Embed(description=page) + await destination.send(embed=emby) + + +bot.help_command = MyNewHelp() +``` + +Let's go through the code. + +First, we create a new class called `MyNewHelp`. This class is a subclass of `MinimalHelpCommand`. + +Next, we override the `send_pages` method. This method is responsible for sending the help command to +the user. We override this method because we don't want to change the content of the pages, just how +they are sent. + +We use the `get_destination` method to get the destination of the message. This is the channel or use that the help +command is to be sent to. + +We use the `paginator.pages` property to get the different pages of the help command. We put the page +in an embed, and then send the embed to the destination channel. + +Finally, we set this as our new help command using `bot.help_command = MyNewHelp()`. + +``` +# link with help-minimal-embed.json +``` + +## Creating Your Help Command + +Not satisfied with the built-in help commands? You can create your own! + +For this, we will subclass the `HelpCommand` class. + +There are 4 methods that we need to override: + +- `HelpCommand.send_bot_help(mapping)` that gets called with `help` +- `HelpCommand.send_command_help(command)` that gets called with `help ` +- `HelpCommand.send_group_help(group)` that gets called with `help ` +- `HelpCommand.send_cog_help(cog)` that gets called with `help ` + +### Bot Help + +```python title="Bot Help Example" +class MyHelp(commands.HelpCommand): + async def send_bot_help(self, mapping): + embed = discord.Embed(title="Help") + for cog, commands in mapping.items(): + command_signatures = [self.get_command_signature(c) for c in commands] + if command_signatures: + cog_name = getattr(cog, "qualified_name", "No Category") + embed.add_field( + name=cog_name, value="\n".join(command_signatures), inline=False + ) + + channel = self.get_destination() + await channel.send(embed=embed) + + +bot.help_command = MyHelp() +``` + +Let's go through the code. + +- First, we create a new class called `MyHelp`. This class is a subclass of `HelpCommand`. + +- Next, we override the `send_bot_help` method. This method is responsible for sending the main help + command to the user. + +- We create an embed with the title "Help". + +- We iterate through `mapping.items()`, which returns a list of tuples, the first element being the + cog and the second element being a list of commands. + +- By using `self.get_command_signature(c)` we get the signature of the command, also known as the + `parameters` or `arguments`. + +- There is a chance that the cog is empty, so we use `if command_signatures:`. + +- We get the name of the cog using `getattr(cog, "qualified_name", "No Category")`. This calls the + cog's attribute `qualified_name` which returns "No Category" if the cog has no name. + +- We add a field to the embed with the name of the cog and the value of the command signatures. + +- Finally, we send the embed to the channel. + +Let's improve the code a little. + +```python title="Improved Bot Help Example" +class MyHelp(commands.HelpCommand): + def get_command_signature(self, command): + return "%s%s %s" % ( + self.context.clean_prefix, + command.qualified_name, + command.signature, + ) + + async def send_bot_help(self, mapping): + embed = discord.Embed(title="Help", color=discord.Color.blurple()) + + for cog, commands in mapping.items(): + filtered = await self.filter_commands(commands, sort=True) + command_signatures = [self.get_command_signature(c) for c in filtered] + + if command_signatures: + cog_name = getattr(cog, "qualified_name", "No Category") + embed.add_field( + name=cog_name, value="\n".join(command_signatures), inline=False + ) + + channel = self.get_destination() + await channel.send(embed=embed) + + +bot.help_command = MyHelp() +``` + +Now the help command won't show commands that the user can't use, as well as aliases for commands. +Let's get the help command to show command aliases. + +### Command Help + +This function is called when the user uses `help `. + +```python title="Command Help Example" +class MyHelp(commands.HelpCommand): + async def send_command_help(self, command): + embed = discord.Embed( + title=self.get_command_signature(command), color=discord.Color.random() + ) + if command.help: + embed.description = command.help + if alias := command.aliases: + embed.add_field(name="Aliases", value=", ".join(alias), inline=False) + + channel = self.get_destination() + await channel.send(embed=embed) + + +bot.help_command = MyHelp() +``` + +Let's quickly go through the code we haven't discussed yet. + +- In line 3, we create an embed with a title the signature of the command (so that the title of the + embed looks like ` [parameter]`), and a random color. + +- In lines 4 and 5, we get the command's `help` description and add it to the embed. The help description + of a command can be specified in the docstrings of a command function. For example: + + ```python + @bot.command() + async def ping(ctx): + """Returns the latency of the bot.""" + await ctx.send(f"Pong! {round(bot.latency * 1000)}ms") + ``` + +- Line 6 is shorthand for + + ```python + alias = command.aliases + if alias: + ... + + # is the same as + + if alias := command.aliases: + ... + ``` + + A very helpful (but not well-known) Python shorthand! + +- In line 7, we get the aliases of the command and add them to the embed. + +### Cog Help + +This is pretty easy! + +```python title="Custom Cog Help Example" +class MyHelp(commands.HelpCommand): + def get_command_signature(self, command): + return "%s%s %s" % ( + self.context.clean_prefix, + command.qualified_name, + command.signature, + ) + + async def send_cog_help(self, cog): + embed = discord.Embed( + title=cog.qualified_name or "No Category", + description=cog.description, + color=discord.Color.blurple(), + ) + + if filtered_commands := await self.filter_commands(cog.get_commands()): + for command in filtered_commands: + embed.add_field( + name=self.get_command_signature(command), + value=command.help or "No Help Message Found... ", + ) + + await self.get_destination().send(embed=embed) +``` + +Once again, we create an embed, get the commands that the user can use, and add them to the embed. + +### Group Help + +Similar to the cog help, this is pretty easy! + +```python title = "Custom Group Help Example" +class MyHelp(commands.HelpCommand): + def get_command_signature(self, command): + return "%s%s %s" % ( + self.context.clean_prefix, + command.qualified_name, + command.signature, + ) + + async def send_group_help(self, group): + embed = discord.Embed( + title=self.get_command_signature(group), + description=group.help, + color=discord.Color.blurple(), + ) + + if filtered_commands := await self.filter_commands(group.commands): + for command in filtered_commands: + embed.add_field( + name=self.get_command_signature(command), + value=command.help or "No Help Message Found... ", + ) + + await self.get_destination().send(embed=embed) +``` + +Add all of these methods together, and you have a fully functioning help command! + +

+ Click to see the final code for this section + +
+ +!!! note + + The following code has been slightly edited from the tutorial version. + + ```python title="Custom Help Command Example" + class SupremeHelpCommand(commands.HelpCommand): + def get_command_signature(self, command): + return "%s%s %s" % ( + self.context.clean_prefix, + command.qualified_name, + command.signature, + ) + + async def send_bot_help(self, mapping): + embed = discord.Embed(title="Help", color=discord.Color.blurple()) + for cog, commands in mapping.items(): + filtered = await self.filter_commands(commands, sort=True) + if command_signatures := [self.get_command_signature(c) for c in filtered]: + cog_name = getattr(cog, "qualified_name", "No Category") + embed.add_field( + name=cog_name, value="\n".join(command_signatures), inline=False + ) + + channel = self.get_destination() + await channel.send(embed=embed) + + async def send_command_help(self, command): + embed = discord.Embed( + title=self.get_command_signature(command), color=discord.Color.blurple() + ) + if command.help: + embed.description = command.help + if alias := command.aliases: + embed.add_field(name="Aliases", value=", ".join(alias), inline=False) + + channel = self.get_destination() + await channel.send(embed=embed) + + async def send_help_embed( + self, title, description, commands + ): # a helper function to add commands to an embed + embed = discord.Embed( + title=title, description=description or "No help found..." + ) + + if filtered_commands := await self.filter_commands(commands): + for command in filtered_commands: + embed.add_field( + name=self.get_command_signature(command), + value=command.help or "No help found...", + ) + + await self.get_destination().send(embed=embed) + + async def send_group_help(self, group): + title = self.get_command_signature(group) + await self.send_help_embed(title, group.help, group.commands) + + async def send_cog_help(self, cog): + title = cog.qualified_name or "No" + await self.send_help_embed( + f"{title} Category", cog.description, cog.get_commands() + ) + + + bot.help_command = SupremeHelpCommand() + ``` + +
+
+ +## Command Attributes + +How can you add cooldowns, set aliases, and change the name of help commands? Command attributes can +help you do all of that, and more! + +```python title="Help Command Attributes" +attributes = { + "name": "help", + "aliases": ["helpme"], + "cooldown": commands.CooldownMapping.from_cooldown(3, 5, commands.BucketType.user), +} + +# You need to use CooldownMapping.from_cooldown(rate, per, type) + +bot.help_command = MyHelp(command_attrs=attributes) +``` + +## Error Handling + +When a user attempts to use a command that does not exist, we need to inform the user. +We can do this by overriding the `send_error_message` function. + +```python title="Custom Help Error Example" +class MyHelp(commands.HelpCommand): + async def send_error_message(self, error): + embed = discord.Embed( + title="Error", description=error, color=discord.Color.red() + ) + channel = self.get_destination() + + await channel.send(embed=embed) +``` + +``` +# link with help-error-user-msg.json +# link with help-error-embed.json +``` + +## Credits + +Most of the content from this guide is from +[InterStella0's walkthrough guide on subclassing HelpCommand](https://gist.github.com/InterStella0/b78488fb28cadf279dfd3164b9f0cf96). +Thanks to InterStella0 for making this guide amazing. + +!!! info "Related Topics" + + - [Subclassing Bots](../../popular-topics/subclassing-bots.md) + - [Prefixed Commands](prefixed-commands.md) + - [Cogs](../../popular-topics/cogs.md) diff --git a/docs/extensions/commands/prefixed-commands.md b/docs/extensions/commands/prefixed-commands.md new file mode 100644 index 00000000..d72101b9 --- /dev/null +++ b/docs/extensions/commands/prefixed-commands.md @@ -0,0 +1,219 @@ +--- +title: Prefixed Commands +description: Learn how to use the commands extension for Pycord. +--- + +Before Discord added slash commands, all bots had prefixed commands. A user would type the bot's prefix +followed by a word or phrase to invoke a command, such as `?help` or `!help`. +However, this prefixed commands system isn't native to Discord! Developers made use of an `on_message` +event to check if the message began with a certain character, then invoke the command. Every time a +message was sent, the bot would see the message and check for its "prefix" + +The syntax becomes a little more complicated when you want to have multiple commands. There are several +disadvantages to this system. This is where the commands extension comes in. `ext.commands` has +various advantages, such as: + +- Simpler syntax +- Easier to use +- Easier to parse user input +- Comes with built-in help commands +- Comes with a built-in system for categorizing commands + +=== "Using Events to Create Prefixed Commands" + + ```python title="Prefixed Commands with Events" + import discord + + client = discord.Client() + + + @client.event + async def on_message(message): + if message.content.startswith("!ping"): + await message.channel.send("Pong!") + + elif message.content.startswith("!announce"): + if len(message.content.split(" ")) < 3: + await message.channel.send( + "You need to specify a title and a message. Correct usage: `!announce Hello Hello everyone!`" + ) + return + + msg = message.content.split(" ", 2) + title = msg[1] + content = msg[2] + + await message.channel.send("**{}**\n{}".format(title, content)) + + elif message.content.startswith("!"): + await message.channel.send("Unknown command.") + ``` + + ``` + # link with prefixed-ping-user-msg.json + # link with prefixed-ping-response.json + # link with prefixed-announce-user-msg.json + # link with prefixed-announce-response.json + # link with prefixed-help-unknown-command.json + ``` + +=== "Using the Commands Extension" + + ```python title="The Commands Extension" + import discord + from discord.ext import commands + + intents = discord.Intents.default() + intents.message_content = True + + bot = commands.Bot(command_prefix="!", intents=intents) + + + @bot.command() + async def ping(ctx): + await ctx.send("Pong!") + + + @bot.command() + async def announce(ctx, title, *, message): + await ctx.send("**{}**\n{}".format(title, message)) + + + @bot.event + async def on_command_error(ctx, error): + if isinstance(error, commands.CommandNotFound): + await ctx.send("Unknown command.") + ``` + + ``` + # link with prefixed-ping-user-msg.json + # link with prefixed-ping-response.json + # link with prefixed-announce-user-msg.json + # link with prefixed-announce-response.json + # link with prefixed-help-user-msg.json + # link with prefixed-help-response.json + # link with prefixed-help-unknown-command.json + ``` + +
+ + !!! tip + + The commands extension has many more uses. This example only showcases the basic features mentioned + in the previous example. Other things you can do with the commands extension include using a different + built-in help command and creating your own. The following tutorials showcase these. + +## Syntax + +Before we check out the syntax, let's take a look at the bot classes. + +> `discord.Client` - Contains only events. +> +> `discord.Bot` - Subclasses `discord.Client`, adds commands. +> +> `discord.ext.commands.Bot` - Subclasses `discord.Bot`, adds prefixed commands, cogs, and more. + +This means that `discord.ext.commands.Bot` has both slash commands and prefixed commands, as well as +events, cogs and more. + +Now let's look at the syntax. + +```python title="A Simple Prefixed Bot" +import discord +from discord.ext import commands # Import the commands extension +# discord.ext.commands are not the same as discord.commands! + +intents = discord.Intents.default() # Defining intents +intents.message_content = ( + True # Adding the message_content intent so that the bot can read user messages +) + +bot = commands.Bot( + command_prefix="!", intents=intents +) # You can change the command prefix to whatever you want. + + +@bot.command() # This is the decorator we use to create a prefixed command. +async def ping(ctx): # This is the function we will use to create the command. + await ctx.send("Pong!") # This is the response the bot will send. + + +bot.run("token") # Run the bot with your token. +``` + +``` +# link with prefixed-ping-user-msg.json +# link with prefixed-ping-response.json +``` + +
+ +!!! tip + + The help command is a built-in command and is enabled by default. You will learn more about it in the + following guides. + +## Parameters + +Prefixed commands can take parameters, just like slash commands. You can specify the parameters in +the function itself. + +```python title="Parameters Example 1" +@bot.command() +async def echo(ctx, *, message): + await ctx.send(message) +``` + +`ctx` is the context of the message. `*` means that the parameter can be any number of words. `message` +is the parameter. If you had not passed `*`, `message` would only have been one word. + +For example, if a user had used `!echo hello world`, `message` would have been `hello`. Since we +passed `*`, `message` is `hello world`, or the rest of the message. + +We can pass multiple parameters too! + +```python title="Parameters Example 2" +@bot.command() +async def echo(ctx, channel: discord.TextChannel, title, *, message): + await channel.send("**{}**\n{}".format(title, message)) +``` + +In the example above, `channel` is a parameter that is of type `discord.TextChannel`. When you +specify the type of the parameter, Pycord will automatically try to convert the parameter to that type. +That is why you can use `channel.send` directly without needing to convert it first. + +We also have a new parameter, `title`. This does not have a type, so it will be a string. `*` means +that the rest of the message belongs to the next parameter, in this case, `message`. + +When a user types `!echo #general Greetings! Hello World!`, `channel` will be the text channel +`#general`, `title` will be `Greetings!` and `message` will be `Hello World!`. + +Let's take an example where the user passes `!echo #general Holiday Greetings! Greetings to you all!`. +Here, the user wants the title to be "Holiday Greetings!" and the message to be "Greetings to you all!". +However, since Pycord parses the message at whitespaces, the title will end up being "Holiday" and the +message "Greetings! Greetings to you all!". The user can prevent this by typing `!echo "Holiday Greetings!" Greetings to you all!`. + +Let's check out another example for parameters and parameter types. + +```python title="Parameters Example 3" +import random + + +@bot.command() +async def gtn(ctx, guess: int): + number = random.randint(1, 10) + if guess == number: + await ctx.send("You guessed it!") + else: + await ctx.send("Nope! Better luck next time :)") +``` + +If you had not specified the type of the parameter, it would have been a string. And since `"5"` is not +the same as `5` in python, the bot would have responded with "Nope! Better luck next time :)". +Even if you do not specify the type of the parameter, you can still convert it later on, in this case, +with `int(guess)`. + +!!! info "Related Topics" + + - [Command Groups](groups.md) + - [Rules and Common Practices](../../getting-started/rules-and-common-practices.md) diff --git a/docs/extensions/index.md b/docs/extensions/index.md new file mode 100644 index 00000000..3f4186cd --- /dev/null +++ b/docs/extensions/index.md @@ -0,0 +1,24 @@ +--- +title: Extensions +icon: lucide/puzzle +--- + +# Extensions + +Pycord ships with several extensions that add extra functionality on top of the core library. + +## Commands + +- [Prefixed Commands](commands/prefixed-commands.md) +- [Command Groups](commands/groups.md) +- [Help Command](commands/help-command.md) + +## Pages + +- [Paginator Basics](pages/paginator-basics.md) +- [Paginator FAQ](pages/paginator-faq.md) + +## Other + +- [Bridge](bridge.md) +- [Tasks](tasks/tasks.md) diff --git a/docs/extensions/pages/paginator-basics.md b/docs/extensions/pages/paginator-basics.md new file mode 100644 index 00000000..6e207005 --- /dev/null +++ b/docs/extensions/pages/paginator-basics.md @@ -0,0 +1,175 @@ +--- +title: Paginator Basics +--- + +# Paginator Basics + +## [Page](https://docs.pycord.dev/en/stable/ext/pages/index.html#page) + +This class contains two attributes: `content` and `embeds`, which correspond to the attributes of the same name on the +`discord.Message` class. +To create a new Page, use the following syntax: + +```py +import discord + +page = Page( + content="My Page Content", embeds=[discord.Embed(title="My First Embed Title")] +) +``` + +## [PageGroup](https://docs.pycord.dev/en/stable/ext/pages/index.html#pagegroup) + +This class represents a group of pages. It uses most of the same parameters as `Paginator`, which allows each +`PageGroup` to effectively have its own settings and behaviours. + +## [Paginator](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator) + +This is the main class for `ext.pages`, and is used to control most of the functionality of the extension. + +In its most basic form, with no arguments provided (default values listed below), a paginator can be created like so: + +```py title="Paginator Example" +import discord +from discord.ext.pages import Paginator, Page + +my_pages = [ + Page( + content="This is my first page. It has a list of embeds and message content.", + embeds=[ + discord.Embed(title="My First Embed Title"), + discord.Embed(title="My Second Embed Title"), + ], + ), + Page( + content="This is my second page. It only has message content.", + ), + Page( + embeds=[ + discord.Embed( + title="This is my third page.", + description="It has no message content, and one embed.", + ) + ], + ), +] +paginator = Paginator(pages=my_pages) +``` + +The only required parameter for `Paginator` is the `pages` parameter, which is usually a list of `Page` objects. + +You can also pass in a list of `PageGroup` objects, a list of strings, a list of embeds, or a list of lists of embeds. + +Once the `Paginator` instance is created, you can call either +[`Paginator.send()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.send) +or [`Paginator.respond()`](https://docs.pycord.dev/en/stable/ext/pages/index.html#discord.ext.pages.Paginator.respond) +to send a message or response with the paginator's contents. + +#### Depending on what's being passed to the `pages` parameter, the behaviour of the paginator may differ: + +- Passing a list of `PageGroup` objects will essentially treat each `PageGroup` as its own Paginator, with most + `Paginator` attributes able to be set independently for each `PageGroup`. + - Each `PageGroup` accepts its own `pages` parameter, which inherits the same behaviour as the `pages` parameter + of `Paginator`, except it cannot contain other `PageGroup` objects. +- If a page is a `Page` object, this will allow you to specify both the `discord.Message.content` and + `discord.Message.embeds` attributes for a page. + - **This is the preferred method of defining a page.** +- If a page is a string, this will be used for the `discord.Message.content` attribute. This type of page cannot have + any embeds. +- If a page is a list of embeds, this will be used for the `discord.Message.embeds` attribute. This type of page + cannot have any message content. +- If a page is a list of lists of embeds, each parent list item will create a page containing all embeds from its + child list. This type of page cannot have any message content. + +#### Parameters for the `Paginator` class which have default values: + +- `show_disabled` **:** `True` + - Show buttons that are disabled (i.e. can't be clicked) +- `author_check` **:** `True` + - Only the author can interact with the paginator. +- `timeout` **:** `180` *(seconds)* + - The paginator will time out and become inactive after this many seconds. +- `disable_on_timeout` **:** `True` + - If the paginator times out, it will be automatically disabled and all buttons will be unusable. +- `use_default_buttons` **:** `True` + - Use the default set of 4 buttons and a page indicator. +- `show_indicator` **:** `True` + - When using the default buttons, shows a middle 5th button with the current/total page numbers. + +**For other parameters that can be set on initialization, please check the +[API Reference](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginator)** + +## [PaginatorButton](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatorbutton) + +This class represents a button used to navigate between the pages of a paginator. It's also used to create the page +indicator. + +When creating your own custom buttons, you can either use this class directly or subclass it to add any additional +functionality you may need. + +To add custom buttons to the paginator instead of the default navigation buttons, you have two options to do so: + +1. **Using the `custom_buttons` parameter of `Paginator`:** + ```py + import discord + from discord.ext.pages import PaginatorButton, Paginator + + buttons = [ + PaginatorButton("first", label="<<-", style=discord.ButtonStyle.green), + PaginatorButton("prev", label="<-", style=discord.ButtonStyle.green), + PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True), + PaginatorButton("next", label="->", style=discord.ButtonStyle.green), + PaginatorButton("last", label="->>", style=discord.ButtonStyle.green), + ] + paginator = Paginator( + pages=["Page 1", "Page 2", "Page 3"], + show_indicator=True, + use_default_buttons=False, + custom_buttons=buttons, + ) + ``` +1. **Using `Paginator.add_button()`:** + ```py + import discord + from discord.ext.pages import PaginatorButton, Paginator + + paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"], use_default_buttons=False) + paginator.add_button( + PaginatorButton("prev", label="<", style=discord.ButtonStyle.green) + ) + paginator.add_button( + PaginatorButton("page_indicator", style=discord.ButtonStyle.gray, disabled=True) + ) + paginator.add_button( + PaginatorButton("next", label=">", style=discord.ButtonStyle.green) + ) + ``` + +If you want to use the default navigation buttons, but not all of them, you can also use `Paginator.remove_button()` to +selectively remove them: + +```py +from discord.ext.pages import Paginator + +paginator = Paginator(pages=["Page 1", "Page 2", "Page 3"]) +paginator.remove_button("first") +paginator.remove_button("last") +``` + +## [PaginatorMenu](https://docs.pycord.dev/en/stable/ext/pages/index.html#paginatormenu) + +This class represents the `discord.Select` menu used to navigate between `PageGroup` instances. In most situations, you +will not need to interact with this class directly. + +If you do subclass it, you'll likely want to call `super()` in your `__init__` method to ensure that the `PageGroup` +navigation functionality is retained. + +## Usage Examples + +For a comprehensive list of examples showing all `Paginator` functionality, please see the +[example in cog form](https://github.com/Pycord-Development/pycord/blob/master/examples/views/paginator.py) in the repo. + +## Support and Feedback + +If you have any questions, suggestions, or feedback for `ext.pages`, please join the +[Discord server](https://discord.gg/pycord). diff --git a/docs/extensions/pages/paginator-faq.md b/docs/extensions/pages/paginator-faq.md new file mode 100644 index 00000000..5220c76b --- /dev/null +++ b/docs/extensions/pages/paginator-faq.md @@ -0,0 +1,24 @@ +--- +title: Paginator FAQ +--- + +# Paginator FAQ + +- **What's the difference between `Paginator.send()` and `Paginator.respond()`?** + + - `Paginator.send()` is used to send a channel message (DMChannel or TextChannel) with the paginator. + - `Paginator.respond()` is used to send an interaction response (or followup) message with the paginator. + +- **How can the bot send a paginator to a different destination than where it was invoked?** + + - Use the `target` parameter in `Paginator.send()` or `Paginator.respond()`. + - You can also set the `target_message` parameter to control what's shown as a response where the paginator was originally invoked. + - For `Paginator.respond()`, this parameter is required if `target` is set, as an interaction requires being responded to. + +- **How can I change the paginator's behavior without re-creating and re-sending it?** + + - Use the `Paginator.update()` method. + +- **How can I make the bot actually do something with the contents of a page?** + + - Use the (upcoming) `Paginator.page_action()` method. diff --git a/docs/extensions/tasks/tasks.md b/docs/extensions/tasks/tasks.md new file mode 100644 index 00000000..aa6c433b --- /dev/null +++ b/docs/extensions/tasks/tasks.md @@ -0,0 +1,233 @@ +--- +title: Tasks +--- + +## Concept + +So you want to run a background task running at some specified interval? Thankfully, that's a common thing to do, whether you're working with some API or handling some background logic don't worry, the Pycord tasks extension is here to make life easier for you! + +With the tasks extension, you can make background tasks without worrying about the asyncio hell and mind bogglers like "what if my internet dies" and "how do I handle reconnecting" with the added benefit of a lot of useful additions that are one line of code away! + +### Example Usage + +```py +import discord +from discord.ext import tasks + +bot = discord.Bot() + + +@bot.event +async def on_ready(): + very_useful_task.start() + + +@tasks.loop(seconds=5) +async def very_useful_task(): + print("doing very useful stuff.") + + +bot.run("TOKEN") +``` + +If you do run this code in your terminal you should see something like this after about 15 seconds: + +``` +doing very useful stuff. +doing very useful stuff. +doing very useful stuff. +``` + +For a more useful example here's a task in a cog context ripped straight from the [docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#recipes): + +```py +from discord.ext import tasks, commands + + +class MyCog(commands.Cog): + def __init__(self): + self.index = 0 + self.printer.start() + + def cog_unload(self): + self.printer.cancel() + + @tasks.loop(seconds=5) + async def printer(self): + print(self.index) + self.index += 1 +``` + +As you'd expect this will increment a number and print it out every 5 seconds like so: + +```sh +0 +# 5 seconds later +1 +# 5 more seconds later +2 +# ... +``` + +## [Tasks](https://docs.pycord.dev/en/stable/ext/tasks/index.html) + +Now let's get into the nitty-gritty of tasks. + +As you've seen tasks can work in both outer scope and class contexts and the handle is roughly the same, you define a task using the `tasks.loop` decorator and use the `start` method to start it, the difference is you add the `self` argument when in a class context so since most people have all their bot's code in Cogs all the following code blocks will be in a Cog context to make it easy to copy it then apply whatever modifications you might need! + +### [Creating a task](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop) + +A look at `discord.ext.tasks.loop`'s definition in the documentation reveals that: + +1. As you've seen before it expects the time between each execution, that however doesn't have to be in seconds as + there are `seconds`, `minutes` and `hours` parameters to make it easier for us, they can also be floats in case you want + ultra-precision. +1. You can also pass in a `datetime.time` object or a sequence of them in the `time` parameter which will make it run + at the specified time(s). +1. You can pass in how many times a loop runs before it stops by passing in the `count` parameter, you can use `None` + to make it run forever which is also the default. +1. The loop function ***must*** be a coroutine. + +These are all really useful, and they aren't the only parameters so if you want to know more about them check out the +[docs](https://docs.pycord.dev/en/stable/ext/tasks/index.html#discord.ext.tasks.loop)! + +### Attributes + +A task has the following attributes: + +- `current_loop`: The current loop the task is on. +- `hours`, `minutes`, `seconds`: attributes that represent the time between each execution. +- `time`: A list of datetime.time objects that represent the times the task will run, returns `None` if no datetime + objects were passed. +- `next_iteration`: A `datetime.datetime` object that represents the next time the next iteration of the task will + run, can return `None` if the task stopped running. + +These attributes serve as a really powerful asset to get info about your loop. + +### Example + +Now let's create a cog that handles a leaderboard we have in our bot using Tasks then explain what we did after that and +also provide a refresher of how slash commands groups work in cogs. + +For the sake of this example let's pretend that we have a leaderboard module that does all the leaderboard handling for +us and that computing the leaderboard is very expensive computationally wise, so we want to store one version of it that +gets regularly updated instead of generating it every time someone calls the `/leaderboard view` command. + +```py +from discord.ext import tasks, commands +from discord.commands import SlashCommandGroup, CommandPermissions + +from leaderboard import * # Mock leaderboard module. + + +class LeaderboardCog(commands.Cog): + def __init__(self, bot): + self.bot = bot + self.update_leaderboard.start() + self.leaderboard_embed = generate_leaderboard_embed() + + leaderboard = SlashCommandGroup( + name="leaderboard", description="Leaderboard commands." + ) + + @tasks.loop(minutes=10) + async def update_leaderboard(self): + print("Updating leaderboard...") + await update_leaderboard() + self.leaderboard_embed = generate_leaderboard_embed() + + @update_leaderboard.before_loop + async def before_update_leaderboard(self): + await self.bot.wait_until_ready() + print("About to start updating leaderboard.") + + @update_leaderboard.after_loop + async def after_update_leaderboard(self): + leaderboard_cleanup() + print("Stopped updating leaderboard.") + + @update_leaderboard.error + async def update_leaderboard_error(self, error): + print( + f"Oh no, an error occurred while updating the leaderboard. Error: {error}" + ) + + @leaderboard.command() + async def view(self, ctx): + await ctx.respond(embed=self.leaderboard_embed) + + @leaderboard.command() + async def update_info(self, ctx): + await ctx.respond( + f"""***Leaderboard Info***\n + Last update: {(600 - self.update_leaderboard.next_iteration.timestamp()) // 60} minutes ago.\n + Next update: in {self.update_leaderboard.next_iteration.timestamp() // 60} minutes.\n + Time between loops: {self.update_leaderboard.minutes} minutes.\n + Times updated this session: {self.update_leaderboard.current_loop}. + Running? {self.update_leaderboard.is_running()} + Failed? {self.update_leaderboard.failed()}""", + ephemeral=True, + ) + + # Now for the owner only commands: + + leaderboard_config = SlashCommandGroup( + name="leaderboard_config", + description="Leaderboard configuration commands", + permission=[CommandPermissions("owner", 2, True)], + ) + + @leaderboard_config.command() + async def set_time_between_updates(self, ctx, minutes: int): + self.update_leaderboard.change_interval(minutes=minutes) + await ctx.respond(f"Set time between updates to {minutes} minutes.") + + @leaderboard_config.command() + async def stop(self, ctx): + self.update_leaderboard.stop() + await ctx.respond("Stopped the leaderboard update.") + + @leaderboard_config.command() + async def restart(self, ctx): + self.update_leaderboard.restart() + await ctx.respond("Restarted the leaderboard update.") + + +def setup(bot): + bot.add_cog(LeaderboardCog(bot)) +``` + +Phew, that was quite a bit of code. + +Now to explain what's going on: + +First things first we create a cog and in its `__init__` function we start the `update_leaderboard` task and generate +the first instance of our leaderboard's embed. + +After that, we define the `update_leaderboard` task using the `loop` decorator, and we make it run every ten minutes by +passing 10 to the `minutes` parameter. + +Then that we define the `before_update_leaderboard` task using the `before_loop` decorator, and we make it wait until the +bot is ready before starting the task. + +Next up we define the `after_update_leaderboard` task using the `after_loop` decorator, and we make it clean up the +leaderboard when the loop finally stops running. + +Then we define the `update_leaderboard_error` task using the `error` decorator, and we make it print any errors that may +occur while we update our leaderboard to the console. + +Then we get into the fun stuff, we create a slash command group using the `SlashCommandGroup` class and name it +`leaderboard`, we then create the `view` sub-command which sends the embed generated when the leaderboard is updated and +`update_info` which shows a lot of data about the task using some attributes and functions available to us. + +We also create a slash command group called `leaderboard_config` which is only available to the owner of the bot. + +Then we create the `set_time_between_updates` sub-command which takes in the time in minutes and changes the time +between updates of the leaderboard using the `change_interval` method, the `stop` sub-command which stops the task using +the `stop` method and `restart` which restarts the task using the `restart` method. + +Finally, we add the `LeaderboardCog` cog to the bot, and we're done! + +I'd highly recommend you check the tasks extension +[documentation](https://docs.pycord.dev/en/stable/ext/tasks/index.html) for more info on how to use them and what other +functions they have. diff --git a/docs/getting-started/creating-your-first-bot.md b/docs/getting-started/creating-your-first-bot.md new file mode 100644 index 00000000..e53a2e44 --- /dev/null +++ b/docs/getting-started/creating-your-first-bot.md @@ -0,0 +1,237 @@ +--- +title: Creating Your First Bot +--- + +Excited to create your first bot? Once you [install Pycord](../installation.md), you can start right +away! + +## Creating the Bot Application + +Just like how you need to sign up to use Discord, your bot also has to be signed up. To do this, +you should: + +1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click + on . +1. Give your bot a name, and click . +1. Now, you should see a page like this. + ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdW3OQnwUhacopqSWw%2F-Mjd_-mxrJCrzmaXrAg8%2Fimage.png?alt=media&token=b8e2ae6c-2290-4d37-ad7c-eb412f3fb00e) +1. Click on the tab on the left side of the screen. +1. Click on . +1. You can give it a name, change the Avatar, etc. + +## Inviting the bot + +Now, lets get the bot added to some servers. Go to the tab +in the left pane and select `bot` and `applications.commands` as scopes. + +You may want your bot to have application commands, which is what the `application.commands` scope +allows your bot to make. + +Next, you want to choose what permissions the bot will have and select them. For now, you can just +give your bot the `administrator` permission, which gives your bot every permission. Once you select +your bot's permissions, click on to get the bot invite link. + +!!! tip + + When your bot is all ready to go, make sure that administrator permissions aren't selected unless + your bot truly needs them. Try selecting only permissions the bot will need. For testing, + Administrator permissions are fine. + +![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-Mk6tNY3LfDkjd6pqdpL%2F-Mk6tkdpddEWoa2jczZk%2Fimage.png?alt=media&token=52c8a29f-a798-48f8-a8c7-4ecca2681f79) + +You can use this link to invite the bot. + +## Tokens + +Now that you have an account for your bot, you need to log in. To log in, we need the bot's +password. All users and bots have a "token." You may think of this token as a password, as this allows +us to log our bot into Discord. + +Tokens are "snowflakes." Not actual snowflakes, though. Just like how no two snowflakes in real life have the same +pattern, snowflakes in computers are unique things - no two bots have the same token - so a token is +considered a snowflake. A Discord user ID is also a snowflake. + +Now, lets get your bot's token. To do this, you want to: + +1. Go back to the tab. +1. Click on the button in the "Token" section. + ![image](https://gblobscdn.gitbook.com/assets%2F-MjPk-Yu4sOq8KGrr_yG%2F-MjdbU12JISJorAZxrKH%2F-MjdbpUsapzb5n15Po5P%2Fimage.png?alt=media&token=118e259f-940a-4f6c-b3a3-c29f3a54100d) + +Now, you have your bot's token copied to your clipboard. + +!!! danger + + Do not, under any circumstances, give your token to anyone. Even if you are contacted by someone + claiming to be Discord staff, do not give them your bot's token. They are lying to you to try and + gain access to your bot. If an unauthorized user gains access to your bot's token, they can access + your bot and use it in malicious ways. + + Never push your token to GitHub or include it in your code. One way to prevent your token from + getting leaked is to store it in `.env` files. + +### Protecting Tokens + +#### Using dotenv + +You can store your tokens in `.env` files. This is a simple way to store sensitive information. + +1. Create a file with the name `.env` (only the extension, with a dot/period at the start and without a name before it). +1. Define the token in the `.env` file (replace the example value with your token). + ```env title=".env" + TOKEN = NzkyNzE1NDU0MTk2MDg4ODQy.X-hvzA.Ovy4MCQywSkoMRRclStW4xAYK7I + ``` +1. Install [`python-dotenv`](https://pypi.org/project/python-dotenv/). + ```bash + python -m pip install python-dotenv + ``` +1. Load the token from the `.env` file. + ```python + import dotenv + + dotenv.load_dotenv() + token = str(os.getenv("TOKEN")) + ``` +1. Pass your token as parameter when running the bot. + ```python + client.run(token) + ``` + +!!! tip + + If you are using Git to track your bot's changes, you should create a file called `.gitignore` and add + `.env` to it. This stops your `.env` file from getting tracked along with the rest of your code, and + will not be pushed to a remote Git repository. As a consequence, it will stay secure on your local machine. + +## Coding the Basics + +Here's an example of code you'll write with Pycord: + +```py +import discord +import os # default module +from dotenv import load_dotenv + +load_dotenv() # load all the variables from the env file +bot = discord.Bot() + + +@bot.event +async def on_ready(): + print(f"{bot.user} is ready and online!") + + +@bot.slash_command(name="hello", description="Say hello to the bot") +async def hello(ctx: discord.ApplicationContext): + await ctx.respond("Hey!") + + +bot.run(os.getenv("TOKEN")) # run the bot with the token +``` + +``` +# link with creating-first-bot-hello.json +``` + +
+ +Let's go through the code. First, the imports. + +```py +import discord +import os +from dotenv import load_dotenv +``` + +In the first line, `import discord`, we import Pycord. Although you install Pycord with `pip install py-cord`, you +import it with `import discord`. This is so it's as easy as possible when switching from Discord.py to Pycord. + +We then import `os` and `dotenv`. `os` is a default module that we will use to get the token from the env file. `dotenv` +is a module that we will use to load the env file. You installed this with `pip install python-dotenv`. + +Next, we load the env file with `load_dotenv()`. + +```py +bot = discord.Bot() +``` + +In this line, we create a new instance of [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). +In this object, we can pass various parameters for configuration purposes, such as `owner_ids` +and [`intents`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). + +```py +@bot.event +async def on_ready(): + print(f"{bot.user} is ready and online!") +``` + +We use the [`event`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) decorator to override +the [`on_ready`](https://docs.pycord.dev/en/stable/api/events.html#discord.on_ready) function to define an +event that is automatically called when the bot is ready to use. + +```py +@bot.slash_command(name="hello", description="Say hello to the bot") +async def hello(ctx: discord.ApplicationContext): + await ctx.respond("Hey!") +``` + +Here, we use the [`slash_command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.slash_command) +decorator to define a slash command. We specify the `name` and `description` arguments. If not +specified, the name of the slash command would be the function name and the command description would +be empty. + +Optional: We type-hint the context parameter (`ctx`) as [`discord.ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext). In modern IDEs, type-hinting allows access to autocompletion and docstrings. You can read more about type-hinting [here](https://docs.python.org/3/library/typing.html). + +Finally, you want to run the bot using the token specified in the `.env` file. + +Now you have finished creating your first Pycord bot! What we have shown you is just the basic structure +of a bot. You can do a lot more with Python and Pycord knowledge, as well as your imagination! Pycord +will not limit your bot's abilities. + +!!! note + + The part where we load the token from the environmental variables is not required. You may use another way to keep your token secure, or, although not recommended, simply specify the token normally as a string, as shown below. + + ??? example "A Basic Bot without securing the token" + + ```py + import discord + + bot = discord.Bot() + + + @bot.event + async def on_ready(): + print(f"{bot.user} is ready and online!") + + + @bot.slash_command(name="hello", description="Say hello to the bot") + async def hello(ctx: discord.ApplicationContext): + await ctx.send("Hey!") + + + bot.run("TOKEN") + ``` + +## FAQ + +### How do I make prefixed commands? + +Prefixed commands are an older method of creating bot commands that listen for messages and replies +if the message starts with a certain character. You can read [this page](../extensions/commands/prefixed-commands.md) +to learn more about prefixed commands. + +### How do I setup modules/cogs? + +[Cogs](../popular-topics/cogs.md) are a great way to organize your commands by putting them into +groups called cogs. Cogs are separate files that your bot loads to get the commands inside. +You can read more about cogs, as well as learn how to use them and their benefits, +[here](../popular-topics/cogs.md). + +### How do I add components, such as buttons and dropdown menus, to my bot? + +Pycord makes it very easy to use Message Commands with your bot by using the `discord.ui` module. +To learn more, read about Message Commands in our [interactions directory](../interactions/index.md). + +!!! info "Related Topics" + + - [Prefixed Commands](../extensions/commands/prefixed-commands.md) diff --git a/docs/getting-started/hosting-your-bot.md b/docs/getting-started/hosting-your-bot.md new file mode 100644 index 00000000..82388ad7 --- /dev/null +++ b/docs/getting-started/hosting-your-bot.md @@ -0,0 +1,101 @@ +--- +title: Hosting Your Pycord Bot +--- + +# Hosting Your Pycord Bot + +If you're completely new to this, you might have thought something along the lines of "Yay! I got my +bot working," after following our [Creating your First Bot](creating-your-first-bot.md) guide, only +to close your IDE or shut down your computer to find your bot offline. + +The reason for this is that programs have to be hosted somewhere, meaning some machine somewhere has +to constantly run your bot. There are tons of hosting services that can help you host your bot for +little to no cost. + +## Can I get a Clear Explanation? + +Sure thing. When you run your bot, it first makes a connection to Discord's API. Once that's done, +Pycord sends "heartbeats" to Discord. "heartbeats" are small packets sent at a set interval telling +Discord that your bot is indeed still alive. If Discord doesn't receive a heartbeat after a certain +amount of time, your bot is pronounced dead and buried in the graveyard (not really). It is, though, +taken offline and its connection with Discord is terminated. + +Once you close the terminal that you've run your program on, the program is no longer running, and +the bot stops sending heartbeats and can no longer process commands. This is why you have to constantly +keep the process running. + +This goes for all programs, in a different nature. If the code isn't compiled/built/assembled/interpreted, +it can't be running. + +## What is a Host? + +A host is a server or container for running code offered by a **hosting provider.** There are a lot +of hosting providers, such as bigger ones like Amazon Web Services (AWS) and Google Cloud, and smaller +ones like GalaxyGate and DigitalOcean. + +There are three types of hosts. + +=== "Shared Hosting" + + Shared hosting is a type of hosting where multiple people share one VPS. Getting a spot on + a shared host is usually cheap, sometimes even free. Shared hosts do not give you a lot of + resources, from less than a gigabyte of RAM (usually 512MB on free hosts) and half of a CPU + with very little storage. Shared hosting is usually used for website hosting and is not + recommended for hosting a Discord bot. + +=== "VPS" + + A virtual private server (VPS) is a virtual computer (virtual machine) that is rented out to + customers. Most people use a VPS for hosting their projects such as Discord bots. You can get + anywhere from less than a gigabyte of RAM and a less powerful CPU to just under one hundred + gigabytes of RAM, a (or multiple) powerful CPU(s), and a fair amount of storage. A VPS is the + best choice for most users and can be fairly cheap. + +=== "Dedicated" + + A dedicated host is a physical computer. You can buy these yourself or rent one from a hosting + provider. Dedicated hosts are often very expensive, but are also very powerful, having a + few hundred gigabytes of RAM and a few very powerful CPUs, along with a good amount of storage. + Dedicated hosts are usually used for very large projects and are overkill for something like + a Discord bot. + +
+ +!!! danger + + Make sure you choose a hosting provider you trust. Also make + sure the hosting provider you're looking at has good reviews on public forums. Googling along the + lines of "`[host]` review" should do the trick. A provider you don't trust can compromise your token. + +Most hosting providers rent their services to you for a monthly or yearly fee. These can be anywhere +from a few dollars to hundreds or thousands of dollars. + +## How to Host Your Bot + +Once you rent or buy a VPS, you can get to work. Most hosting providers allow you to choose from a +wide range of operating systems, most allow you to choose one but some allow you to choose +multiple. Once that's ready, you have to SSH into the system. We won't get into SSH here, but you can +read [this article from DigitalOcean](https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys). +You can also use VNC, which is remote desktop software. If you are using an OS that does not have a +GUI, and is only a command line (a "server" OS), such as Ubuntu Server or most Linux Server Operating Servers, you will most +likely use SSH. If you are using an OS that has a GUI, such as Windows Server, you will most likely use VNC. + +Once you've decided on your operating system, you'll want to set it up and install Python. Once that's +done, you can copy your bot's files to your remote system, install the required packages, and run +the bot. + +!!! warning + + If you are using SSH to run the file, your bot will not stay running. This is because the file is + only told to run during your session. You can use a command like [nohup](https://en.wikipedia.org/wiki/Nohup) + to make sure your file stays running after you disconnect. + +Now your bot is hosted, but that doesn't mean it can't go offline. If your bot encounters an error, +it can often go offline or stop its process. For this, make sure you have proper error handling. +Also be sure to pay attention to your hosting provider's updates or news, as they usually notify +users of when they plan on doing maintenance to their servers, making their services unavailable for +a short time. + +!!! info "Related Topics" + + - [Creating Your First Bot](creating-your-first-bot.md) diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md new file mode 100644 index 00000000..a5f8fd8f --- /dev/null +++ b/docs/getting-started/index.md @@ -0,0 +1,13 @@ +--- +title: Getting Started +icon: lucide/rocket +--- + +# Getting Started + +New to Pycord? These pages walk you through building and running your first bot. + +- [Creating Your First Bot](creating-your-first-bot.md) +- [Rules and Common Practices](rules-and-common-practices.md) +- [More Features](more-features.md) +- [Hosting Your Pycord Bot](hosting-your-bot.md) diff --git a/docs/getting-started/more-features.md b/docs/getting-started/more-features.md new file mode 100644 index 00000000..3b436507 --- /dev/null +++ b/docs/getting-started/more-features.md @@ -0,0 +1,324 @@ +--- +title: More Features +description: More features to make your bot cool and snazzy. +--- + +So, you just created your first Pycord bot! Now, let's add some more features to it. This will include adding event handlers, waiting for user response, styling the messages, and more. + +## Events + +### Event Handlers + +Events in Discord are a way to listen for certain actions. For example, if you want to know when a user joins your server, so you could send a welcome message, you can use the `on_member_join` event. + +First, you need to ask Discord to send you events. This is done via "Intents". Read up the [Intents](../popular-topics/intents.md) page for more information. + +Once you understand what intents are, you can enable the events you need, or just use the default ones with `discord.Intents.all()`. + +Now that that's done, let's add an event handler for when a user joins the server. We will use the [`on_member_join` event](https://docs.pycord.dev/en/stable/api/events.html#discord.on_member_join). We will send a private message to the user welcoming them to the server. + +```python +@bot.event +async def on_member_join(member): + await member.send(f"Welcome to the server, {member.mention}! Enjoy your stay here.") +``` + +We use the [`discord.Bot.event` decorator](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.event) to add the event handler. + +The `on_member_join` event is called when a user joins the server. The `member` parameter is the user that joined. Different events have different names and parameters. You can find all of them [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). + +So, that's how you add event handlers! + +### Waiting for User Response + +Let's say you want to create a Guess-the-Number game (where the user has to guess a number between 1-10). You need to send a message to a user and wait for them to respond. You can do this with the [`wait_for`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.wait_for) method. + +```python +@bot.command() +async def gtn(ctx): + """A Slash Command to play a Guess-the-Number game.""" + + await ctx.respond("Guess a number between 1 and 10.") + guess = await bot.wait_for( + "message", check=lambda message: message.author == ctx.author + ) + + if int(guess.content) == 5: + await ctx.send("You guessed it!") + else: + await ctx.send("Nope, try again.") +``` + +`wait_for` takes one argument, which is the event type. The event type is the name of the event you want to wait for. In this case, it's `message`. It could also be `reaction` to wait for a reaction to be added. + +We pass a keyword argument to `wait_for` called `check`. The function may look complicated if you're a beginner. We pass a `lambda` function, which simplifies the code a bit. + +The lambda function takes one parameter, `message`. When Pycord receives a message, it passes it to the `check` function. If the function returns `True`, the message is returned. If the function returns `False`, the message is ignored and the bot waits for another message. + +Here, we check if the message is from the user that sent the command. We simply use `message.author == ctx.author`. This will check if the author of the message was the person who invoked the command. + +## Styling Messages + +### Embeds + +Embeds are a Discord feature that allows applications to format their messages in cool embedded format, +enabling your bot to lay out messages with a lot of text into neat fields. + +``` +# link with more-features-pycord-guide-embed.json +``` + +
+ +Creating embeds is simple! Just create an instance of [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) and edit it to your liking. Once you're done, send it! + +```python +import discord + +bot = discord.Bot() + + +@bot.command() +async def hello(ctx): + embed = discord.Embed( + title="My Amazing Embed", + description="Embeds are super easy, barely an inconvenience.", + color=discord.Colour.blurple(), # Pycord provides a class with default colors you can choose from + ) + embed.add_field( + name="A Normal Field", + value="A really nice field with some information. **The description as well as the fields support markdown!**", + ) + + embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) + embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) + embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) + + embed.set_footer(text="Footer! No markdown here.") # footers can have icons too + embed.set_author( + name="Pycord Team", icon_url="https://example.com/link-to-my-image.png" + ) + embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") + embed.set_image(url="https://example.com/link-to-my-banner.png") + + await ctx.respond( + "Hello! Here's a cool embed.", embed=embed + ) # Send the embed with some text + + +bot.run("TOKEN") +``` + +``` +# link with more-features-embed.json +``` + +
+ +This simple command sends replies to a [slash command](../interactions/application-commands/slash-commands.md) with an embed. +Let's break it down: + +```py +embed = discord.Embed( + title="My Amazing Embed", + description="Embeds are super easy, barely an inconvenience.", + color=discord.Colour.blurple(), +) +``` + +This command creates an embed. We use the [`Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) +class to create an embed object with the title "My Amazing Embed", the description "Embeds are super easy, barely an inconvenience.", and the color `blurple`, Discord's main theme color. + +[discord.Colour](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Colour) is a class full of [classmethods](https://docs.python.org/3/library/functions.html#classmethod) +that return color values. While the official, documented name of this is `discord.Colour`, `discord.Color` +works as well. + +```py +embed.add_field( + name="A Normal Field", + value="A really nice field with some information. **The description as well as the fields support markdown!**", +) +embed.add_field(name="Inline Field 1", value="Inline Field 1", inline=True) +embed.add_field(name="Inline Field 2", value="Inline Field 2", inline=True) +embed.add_field(name="Inline Field 3", value="Inline Field 3", inline=True) +``` + +This small section shows off embed fields. You can add fields to embeds with the [`add_field` method](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.add_field) +of the [`discord.Embed`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed) class. These consist of three +keyword arguments: `title`, `value`, and `inline`. `title` and `value` are both required arguments, which inline defaults to `False` if it's not defined. The `inline` argument specifies whether space will be divided among the inline fields. There could be a mix of fields where inline has different values too. + +```py +embed.set_footer(text="Footer! No markdown here.") # footers can have icons too +embed.set_author( + name="Pycord Team", icon_url="https://example.com/link-to-my-image.png" +) +embed.set_thumbnail(url="https://example.com/link-to-my-thumbnail.png") +embed.set_image(url="https://example.com/link-to-my-banner.png") +``` + +In this section, we're adding unique items to the embed. These items are: + +- Footer - With the [`set_footer()`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_footer) + method, you can set a small footer that holds a message. This has `text` and `icon_url` kwargs. +- Author - With the [`set_author`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_author) + method, you can set an author for the embed. This is a small text field at the top of the embed. This + includes `name`, `url` and `icon_url` kwargs. +- Thumbnail - With the [`set_thumbnail`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_thumbnail) + method, you can set a small image to reside at the top-right of the embed. This has a single `url` kwarg. +- Image - With the [`set_image`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Embed.set_image) + method, you can set an image to sit at the bottom of an embed. This has a single `url` kwarg. + +There are a lot more methods and attributes you can use to configure embeds. Here, we just covered the basics. Also, remember that all of these values are not necessary in an embed. An embed may only contain a few of these. For example, only a description, a title and a description, and so on. + +### Markdown + +Markdown is a type of markup language that's limited in terms of formatting yet simple. Discord allows +for a watered-down version of markdown to be in their messages. + +#### Text Markdown + +Text formatting can be used in messages and in most embed parts, +as explained in the dedicated section below. + + + + + + + + + + + + + + + + + + + + + +
*italics****underlined italics***
**bold******underlined bold****
***bold italics********underlined bold italics*****
**underlined**~~strikethrough~~
+ +#### Code Markdown + +To create a single-line code block without syntax highlight, wrap the text between single backticks. +This code block will only add a dark background to the text. + +``` +`print("Hello world!")` +``` + +To create a multi-line code block without syntax highlight, wrap the text between triple backticks +on first and last line. This type of code block will encase the code inside a box. + +```` +``` +message = "Hello world!" +print(message) +``` +```` + +To create a multi-line block with syntax highlight, add the name of the language you are using right after +the triple backticks on the first line. For example, for Python you can write either "python" or "py". + +```` +```python +message = "Hello world!" +print(message) +``` +```` + +If you want to use syntax highlight for a single line of code, you still have to format it +like a multi-line block but the code must be on a separate line than the triple backticks. + +#### Quote Markdown + +To create a single-line quote block, start the line with `>` followed by a space. + +``` +> This is a single-line quote. +``` + +To create a multi-line quote block, write `>>>` followed by a space. All text +from that point onwards will be included in that quote block. + +``` +>>> This is a +multi-line quote. +``` + +#### Spoiler Markdown + +To hide a spoiler, encase the text between double pipes. The users +will have to click on it before being able to see the text contained in it. + +``` +||spoiler|| +``` + +#### Link Markdown + +Link formatting only works in embeds and messages sent through webhooks, +by using the following syntax: + +``` +[Pycord](https://pycord.dev/) +``` + +Inside the supported elements that have just been mentioned, +the example above will look like this: [`Pycord`](https://pycord.dev/) + +Outside them, the link will still be clickable but the formatting will be ignored, +therefore the example above will look similarly to this: `[Pycord](https://pycord.dev/)` + +#### Embed Markdown + +Adding markdown to your embeds or messages will give your bot the sparkle it needs, +however, markdown is limited inside embeds. Use the following table as a reference +and keep in mind that embed title and filed names will always show in **bold**. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PartTextLink
Embed AuthorNoNo
Embed TitleYesNo
Embed DescriptionYesYes
Field NameYesNo
Field ValueYesYes
Embed FooterNoNo
diff --git a/docs/getting-started/rules-and-common-practices.md b/docs/getting-started/rules-and-common-practices.md new file mode 100644 index 00000000..a8f69939 --- /dev/null +++ b/docs/getting-started/rules-and-common-practices.md @@ -0,0 +1,185 @@ +--- +title: Rules and Common Practices +description: All about the rules and common practices for coding a Discord bot +--- + +# Rules and Common Practices of Creating a Bot + +When creating almost anything, there's always a certain set of rules to follow or common practices, +such as [PEP8](https://www.python.org/dev/peps/pep-0008/) for Python. This applies to creating bots +with Pycord as well. + +!!! note + + Most of these rules and common practices are only applicable for + [verified bots](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting), + but it's good to follow them nonetheless. + +## Rules + +There are rules for creating bots, and most of these are required by Discord themselves, not us at +Pycord. Not following these rules may get your bot denied for verification. + +### Terms of Service and Privacy Policy + +Starting at some point in time, Discord has made providing a privacy policy with your bot a requirement. +This is so that Discord knows exactly what you are doing with its users' data. + +!!! tip + + You don't need a lawyer or anyone special to write out a privacy policy for you, nor do you need + it approved by some official entity. Simply writing out how you are going to use Discord user + information neatly is all you need to do. + +Providing a Terms of Service for your bot is optional, though usually a best practice. It tells users +what they can and cannot do with your service, and makes it easier to settle disputes if someone +disagrees with you. + +Read more in Discord's official [Legal Docs](https://discord.com/developers/docs/legal). + +### Developer Policy + +We could list almost every rule about using Discord's API here. *Or* we could simply link Discord's +Developer Policy to make it easier on us. You can find Discord's Developer Policy +[here](https://discord.com/developers/docs/policy). This outlines what you can and cannot do with +Discord's Developer API. And, don't worry, it's completely readable and understandable. + +## Best Practices + +Now, here's something we *can't* simply link an article for. We're going to discuss the best practices +of creating a Discord bot with Pycord. + +### Bot Sharding + +To any new or maybe even experienced bot developer, sharding a bot sounds beneficial once you hear +about it. I'm here to tell you that it isn't a good idea to shard your bot. + +*Wait a minute, why would it be an option if it wasn't a good idea?* It's simple. I lied. Sort of. +I'm not going to go into the details of sharding a bot, so you can read about it on +[this page](../popular-topics/sharding.md). Sharding is the process of taking your bot +and breaking it up into small pieces, so it's easier to perform tasks. This is very useful for large +bots, as it makes them faster and more reliable. Sharding is not a good practice for small bots. + +!!! note + + Discord will notify you once it is time to shard your bot, and will eventually force you to do so. + +At the very least, wait for one thousand servers to shard your bot. If you shard your bot while it's +small, you'll just be wasting resources and possibly making your bot slower. + +### [Verification](https://support.discord.com/hc/en-us/articles/360040720412-Bot-Verification-and-Data-Whitelisting) + +Verifying your Discord bot is something every developer would like to achieve. It shows that your bot +is in more than 75 servers. It's generally a good idea to try to get your bot verified as soon as +possible. We're talking at 76 servers soon. This is because Discord can be somewhat slow in terms of +bot verification, so verifying as soon as possible gives them enough time to verify before your bot +reaches the 100 server cap. If a bot is not verified, it cannot grow beyond 100 servers. + +It's also a good idea to only apply for the privileged intents that you need. Applying for intents +your bot doesn't use wastes both your time and Discord's time, as your privileged intent request +will be denied simply because you applied for an intent you didn't need. + +### Subclassing + +While it may take some time, subclassing a bot is very worth it. Once again, this was explained +elsewhere, so I won't go into the details, but I felt it fit here, so I put it here. + +Subclassing a bot makes it more flexible and allows it to do a lot more. Read more about subclassing +bots [here](../popular-topics/subclassing-bots.md) + +### Your Bot's Token + +Your bot is only able to be run for one reason: its token. If you followed the +[guide for creating your first bot](creating-your-first-bot.md), you should already know a bit about +keeping that token safe. That's exactly what you want to do. + +Sharing your token is never good. If someone evil gets a hold of your token, they can do terrible things, +such as making your bot leave all of its servers, spamming all the members the bot has contact with, +and even manipulating the servers the bot is in, if given the permissions. That's why it's very important +to keep your token safe. To learn how to do so, read [this part](creating-your-first-bot.md#tokens) of +the Creating Your First Bot guide. + +### Backups + +You always want to back up your bot's data. This includes both its code *and* its databases. This way, +if something tragic happens, such as your host failing a data migration or you breaking your Raspberry +Pi's SD card that held your bot, you'll still have its precious user data. I have a small program for +my bot that uploads its databases to a remote GitHub repository periodically to not lose any data. +It may be smarter to find a bit more of a reliable way to do so, though. + +Public or private, having a local Git repository connected to a remote one is a good idea for making +almost any application. For a lot of developers, it's like saving your work. If you do this, all of +your bot's code won't be lost if your computer spontaneously combusts, or you smash it to bits from +anger. You can simply grab the backup computer that everyone has lying around, and you're back +in business. + +### Organization and Cleanliness + +It is *extremely* important to have organized code. This includes commands, objects, functions, +and classes. If you don't have organized code, it will get progressively harder for you to recognize +it, and others won't be able to decipher it. + +Make sure you utilize indents and spaces, as these are very important in making your code readable. + +```py title="Bad Spacing" +class MyClass: + async def add(self, num1, num2): + return num1 + num2 + + async def sub(self, num1, num2): + return num1 - num2 +``` + +```py title="Good Spacing" +class MyClass: + async def add(self, num1, num2): + return num1 + num2 + + async def sub(self, num1, num2): + return num1 - num2 +``` + +See the difference? Now, which one looks more readable? Hopefully, you answered the second example. +Python's [PEP8](https://www.python.org/dev/peps/pep-0008/) is a PEP (**Python Enhancement Proposal**) +style guide for Python. It is the style guide that is used by most Python developers and programmers, +providing a universal way to write and read code. + +### Databases + +As your bot grows, you'll inevitably have to store data for your bot. Now, most people would probably just load up some +JSON file on boot into a `dict`, modify it in memory then write to the file. However, JSON files aren't the solution. +When you write to a JSON file, it rewrites the entire file instead of just rewriting the section that changed. It's also +a configuration file format, not a storage file format. + +Instead of using a JSON file or some other related format, you should instead use a database. There are many databases +out there, like MongoDB, SQLite, and PostgreSQL to name a few. + +All of these databases I named do the job well, and which one you use depends on what features you want out of a database. + +\<> +{/\* Maybe clarify these/add more options \*/} +\ + +#### MongoDB + +MongoDB is a JSON-like format and if you already use JSON files, it shouldn't be too hard to migrate over to. + +#### SQLite + +SQLite is based on SQL, a common relational data model. It's a lightweight, easy-to-use, portable database solution that +works entirely on files. However, if for some reason you cannot read/write to and from a file, and you need to manage +lots of data, SQLite might not be for you. + +While SQLite is a part of the Python Standard Library as the `sqlite3` package, we recommend not using it as it is +synchronous and blocking. You should use an asynchronous alternative, such as [`aiosqlite`](https://pypi.org/project/aiosqlite/). + +#### PostgreSQL + +PostgreSQL is also based on SQL, but it also has more features than SQLite. It's compliant with the SQL standard, +open-source, and extensible. However, it's not that fast or simple compared to SQLite. + +#### MariaDB + +MariaDB is also based on SQL and is a fork of the MySQL project. It's compliant with the SQL standard, it's also open +source and is a complete drop-in replacement for any code with MySQL. You don't even need to change what package you're +using! diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 06b8a6b6..00000000 --- a/docs/index.md +++ /dev/null @@ -1,176 +0,0 @@ ---- -icon: lucide/rocket ---- - -# Get started - -For full documentation visit [zensical.org](https://zensical.org/docs/). - -## Commands - -- [`zensical new`][new] - Create a new project - -- [`zensical serve`][serve] - Start local web server - -- [`zensical build`][build] - Build your site - -## Examples - -### Admonitions - -> Go to [documentation](https://zensical.org/docs/authoring/admonitions/) - -!!! note - - This is a **note** admonition. Use it to provide helpful information. - -!!! warning - - This is a **warning** admonition. Be careful! - -### Details - -> Go to [documentation](https://zensical.org/docs/authoring/admonitions/#collapsible-blocks) - -??? info "Click to expand for more info" - - This content is hidden until you click to expand it. - Great for FAQs or long explanations. - -## Code Blocks - -> Go to [documentation](https://zensical.org/docs/authoring/code-blocks/) - -```python hl_lines="2" title="Code blocks" -def greet(name): - print(f"Hello, {name}!") # (1)! - - -greet("Python") -``` - -1. > Go to [documentation](https://zensical.org/docs/authoring/code-blocks/#code-annotations) - - Code annotations allow to attach notes to lines of code. - -Code can also be highlighted inline: `#!python print("Hello, Python!")`. - -## Content tabs - -> Go to [documentation](https://zensical.org/docs/authoring/content-tabs/) - -=== "Python" - - ```python - print("Hello from Python!") - ``` - -=== "Rust" - - ```rs - println!("Hello from Rust!"); - ``` - -## Diagrams - -> Go to [documentation](https://zensical.org/docs/authoring/diagrams/) - -```mermaid -graph LR - A[Start] --> B{Error?}; - B -->|Yes| C[Hmm...]; - C --> D[Debug]; - D --> B; - B ---->|No| E[Yay!]; -``` - -## Footnotes - -> Go to [documentation](https://zensical.org/docs/authoring/footnotes/) - -Here's a sentence with a footnote.[^1] - -Hover it, to see a tooltip. - -## Formatting - -> Go to [documentation](https://zensical.org/docs/authoring/formatting/) - -- ==This was marked (highlight)== -- ^^This was inserted (underline)^^ -- ~~This was deleted (strikethrough)~~ -- H~2~O -- A^T^A -- ++ctrl+alt+del++ - -## Icons, Emojis - -> Go to [documentation](https://zensical.org/docs/authoring/icons-emojis/) - -- :sparkles: `:sparkles:` -- :rocket: `:rocket:` -- :tada: `:tada:` -- :memo: `:memo:` -- :eyes: `:eyes:` - -## Maths - -> Go to [documentation](https://zensical.org/docs/authoring/math/) - -$$ -\cos x=\sum_{k=0}^{\infty}\frac{(-1)^k}{(2k)!}x^{2k} -$$ - -!!! warning "Needs configuration" - - Note that MathJax is included via a `script` tag on this page and is not - configured in the generated default configuration to avoid including it - in a pages that do not need it. See the documentation for details on how - to configure it on all your pages if they are more Maths-heavy than these - simple starter pages. - - - - - -## Task Lists - -> Go to [documentation](https://zensical.org/docs/authoring/lists/#using-task-lists) - -- [x] Install Zensical -- [x] Configure `zensical.toml` -- [x] Write amazing documentation -- [ ] Deploy anywhere - -## Tooltips - -> Go to [documentation](https://zensical.org/docs/authoring/tooltips/) - -[Hover me][example] - -[^1]: This is the footnote. - -[build]: https://zensical.org/docs/usage/build/ -[example]: https://example.com "I'm a tooltip!" -[new]: https://zensical.org/docs/usage/new/ -[serve]: https://zensical.org/docs/usage/preview/ diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 00000000..cf0eca0b --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,80 @@ +--- +title: Installation +icon: lucide/download +--- + +Before you can start using Pycord, you need to install the library. + +!!! note + + Python **3.9 or above** is required to use Pycord. + +!!! tip + + Before you start installing python packages globally, it's recommended you set up a virtual environment. + You can find instructions for that [here](more/virtual-environments.md). + +## Fresh Installation + +To install Pycord, you can use the following command in your terminal: + +```bash +pip install py-cord +``` + +!!! tip + + Remember that you need to install `py-cord`, not `pycord`. + Also, the `pip` command varies depending on your installation. For example, it might be `python3 -m pip` on macOS/Linux or `py3 -m pip` on some versions of Windows. + +If you need voice support for your bot, you should run: + +```bash +pip install "py-cord[voice]" +``` + +## Migration + +### Updating Pycord + +If you are upgrading from a previous version of Pycord, you can use the following command in your terminal to upgrade to the latest version: + +```bash +pip install -U py-cord +``` + +### Migrating from other libraries + +If you are migrating from another library, say, `discord.py`, first of all, you need to uninstall it. + +```bash +pip uninstall discord.py +``` + +Then, you can install Pycord, it's as simple as that!: + +```bash +pip install py-cord +``` + +!!! caution + + Uninstalling `discord.py` *after* installing `py-cord` can cause issues. Make sure to uninstall it first! + +## Installing Other Builds + +### Development Build + +!!! caution + + The development build comes with cutting edge features and new functionality, but as it isn't a stable build you may encounter bugs. + +To install the development build, you can use the following command in your terminal: + +```bash +pip install -U git+https://github.com/Pycord-Development/pycord +``` + +!!! important + + Git is required to install this build. [Learn how you can install Git](more/git.md). diff --git a/docs/interactions/application-commands/context-menus.md b/docs/interactions/application-commands/context-menus.md new file mode 100644 index 00000000..d8773559 --- /dev/null +++ b/docs/interactions/application-commands/context-menus.md @@ -0,0 +1,58 @@ +--- +title: Context Menus +description: Learn all about Context Menus (User Commands & Message Commands) and how to implement them into your Discord Bot with Pycord! +--- + +When you right-click a message, you may see an option called "Apps". Hover over it, and you can see +commands a bot can run with that message. These are called message commands. + +When you right-click a user in the user list, you can once again see an option called "Apps". +Hover over it, and you can see commands a bot can run with that message. These are called user commands. + +Together, these two are called Context Menus or Context Menu Commands. These commands work very much like normal commands, except they take a member or message. + +!!! note + + A bot can have up to 5 global Context Menus of each type. + +## User Commands + +Creating a user command is very simple. + +```python +@bot.user_command( + name="Account Creation Date", guild_ids=[...] +) # create a user command for the supplied guilds +async def account_creation_date( + ctx, member: discord.Member +): # user commands return the member + await ctx.respond(f"{member.name}'s account was created on {member.created_at}") +``` + +``` +# link with context-menus-account-creation.json +``` + +## Message Commands + +```python +@bot.message_command( + name="Get Message ID" +) # creates a global message command. use guild_ids=[] to create guild-specific commands. +async def get_message_id( + ctx, message: discord.Message +): # message commands return the message + await ctx.respond(f"Message ID: `{message.id}`") +``` + +``` +# link with context-menus-get-message-id-user-msg.json +# link with context-menus-get-message-id-response.json +``` + +
+ +!!! info "Related Topics" + + - [Slash Commands](slash-commands.md) + - [Interactions Index](../index.md) diff --git a/docs/interactions/application-commands/localizations.md b/docs/interactions/application-commands/localizations.md new file mode 100644 index 00000000..7c300382 --- /dev/null +++ b/docs/interactions/application-commands/localizations.md @@ -0,0 +1,53 @@ +--- +title: Localizations +description: Localizations are a way to make your bot more accessible to your users. Learn all about localizations now! +--- + +Localizations are a way to make your bot more accessible to your users. You can localize the command +name, the names of any arguments, and any text that is displayed to the user. + +## Syntax + +```python +@bot.slash_command( + name="ping", + name_localizations={"en-GB": "British_Ping"}, + description="Ping the bot", + description_localizations={"en-GB": "British ping the bot"}, + options=[ + Option( + name="Example", + name_localizations={"en-GB": "British Example"}, + description="Example option that does nothing", + description_localizations={ + "en-GB": "British example option that does nothing" + }, + ) + ], +) +async def ping(ctx, example): + responses = {"en-US": "Pong!", "en-GB": "British Pong!"} + await ctx.respond(responses.get(ctx.interaction.locale, responses["en-US"])) + + +@bot.slash_command( + name="ping2", + name_localizations={"en-GB": "British_Ping"}, + description="Ping the bot", + description_localizations={"en-GB": "British ping the bot"}, +) +async def ping2( + ctx, + example: Option( + str, + "example", + name_localizations={"en-GB": "British Example"}, + description="Example option that does nothing", + description_localizations={"en-GB": "British example option that does nothing"}, + ), +): + responses = {"en-US": "Pong2!", "en-GB": "British Pong2!"} + await ctx.respond(responses.get(ctx.interaction.locale, responses["en-US"])) +``` + +- [`Locales`](https://discord.com/developers/docs/reference#locales) - List of valid locales recognized by Discord diff --git a/docs/interactions/application-commands/slash-commands.md b/docs/interactions/application-commands/slash-commands.md new file mode 100644 index 00000000..84f9954e --- /dev/null +++ b/docs/interactions/application-commands/slash-commands.md @@ -0,0 +1,254 @@ +--- +title: Slash Commands +description: Learn all about Slash Commands and how to implement them into your Discord Bot with Pycord! +--- + +On March 24, 2021, Discord added Slash Commands to Discord as an easier, more efficient, and better way of using bot commands. Pycord has implemented Slash Commands into the library, so it's simple, efficient, and familiar. + +!!! important + + Remember that Slash Commands require your bot to be invited with the `application.commands` scope or Slash Commands will not show up. Bots already in the guild can simply be invited again with the scope; there is no need to kick the bot. + +## Syntax + +Let's create a simple Slash Command. + +```py +import discord + +bot = discord.Bot() + +# we need to limit the guilds for testing purposes +# so other users wouldn't see the command that we're testing + + +@bot.command( + description="Sends the bot's latency." +) # this decorator makes a slash command +async def ping(ctx): # a slash command will be created with the name "ping" + await ctx.respond(f"Pong! Latency is {bot.latency}") + + +bot.run("TOKEN") +``` + +``` +# link with slash-commands-ping.json +``` + +
+ +Let's go through the code. + +First, we import Pycord's `discord` package. + +Next, we create a [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot) object and assign it to a variable `bot`. + +We then go ahead and use the [`@bot.command`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot.command) decorator, which registers a new Slash Command. We pass a `description` parameter to give a description to the Slash Command. We can also pass a `name` parameter to change the Slash Command's name. By default, the name of the Slash Command will be the name of the function, in this case, `/ping`. + +We create an async function called `ping` with parameters `ctx`, which, when called, sends the bot's ping/latency using [`ctx.respond`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext.respond). + +## Subcommand Groups + +You might want to group certain commands together to make them more organised. A command group is exactly what it sounds like, a group of individual Slash Commands together. + +In order to make a Slash Command group, you can use the `bot.create_group` function. + +```python +import discord + +bot = discord.Bot() + +# create Slash Command group with bot.create_group +greetings = bot.create_group("greetings", "Greet people") + + +@greetings.command() +async def hello(ctx): + await ctx.respond(f"Hello, {ctx.author}!") + + +@greetings.command() +async def bye(ctx): + await ctx.respond(f"Bye, {ctx.author}!") + + +bot.run("TOKEN") +``` + +Or, you can instead manually make a `SlashCommandGroup` class like so: + +```python +import discord + +math = discord.SlashCommandGroup("math", "Math related commands") + + +@math.command() +async def add(ctx, num1: int, num2: int): + sum = num1 + num2 + await ctx.respond(f"{num1} plus {num2} is {sum}.") + + +@math.command() +async def subtract(ctx, num1: int, num2: int): + sum = num1 - num2 + await ctx.respond(f"{num1} minus {num2} is {sum}.") + + +# you'll have to manually add the manually created Slash Command group +bot.add_application_command(math) +``` + +Here's what the registered subcommands will look like in the Slash Command Menu: + +![Picture of the subcommands in the Slash Command Menu](../../assets/interactions/groups-and-subcommands.jpg) + +You'll notice that there's the name of the Slash Command Group and then the name of the subcommand separated by a space. + +!!! info "Cogs" + + If you are looking to add Slash Command Groups to cogs, please look at our [Cogs page](../../popular-topics/cogs.md)! + +## Sub-groups + +We've made a subcommand group, but did you know that you could create a group inside another? + +```python +from discord import SlashCommandGroup +from math import sqrt + +math = SlashCommandGroup("math", "Math related commands") +advanced = math.create_subgroup("advanced", "Advanced math commands") + + +@advanced.command() +async def square_root(ctx, x: int): + await ctx.respond(sqrt(x)) + + +bot.add_application_command(math) +``` + +The command created above can be invoked by typing `/math advanced square_root`. + +## Options & Option Types + +Whenever you're using Slash Commands, you might notice that you can specify parameters that the user has to set or can optionally set. These are called Options. + +Options can also include a description to provide more information. [You can learn more about Options in our documentation!](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.Option) + +Since you want different inputs from Options, you'll have to specify the type for that Option; there are a few ways of doing this. + +=== "Using Type Annotations" + + You could use Type Annotations and let Pycord figure out the option type or explicitly specified using the [`SlashCommandOptionType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.SlashCommandOptionType) enum. + + ```python + import discord + + bot = discord.Bot() + + + @bot.command() + # pycord will figure out the types for you + async def add(ctx, first: discord.Option(int), second: discord.Option(int)): + # you can use them as they were actual integers + sum = first + second + await ctx.respond(f"The sum of {first} and {second} is {sum}.") + + + @bot.command() + # this explicitly tells pycord what types the options are instead + async def join( + ctx, + first: discord.Option(discord.SlashCommandOptionType.string), + second: discord.Option(discord.SlashCommandOptionType.string), + ): + joined = first + second + await ctx.respond(f'When you join "{first}" and "{second}", you get: "{joined}".') + + + bot.run("TOKEN") + ``` + + ``` + # link with slash-commands-add.json + # link with slash-commands-join.json + ``` + +=== "Using option decorator" + + Instead of Type Annotations, you can also use the option decorator. This is usually done to have type-hinting. + + ```python title="Slash Command Type" + import discord + + bot = discord.Bot() + + + @bot.command() + @discord.option( + "first", type=discord.SlashCommandOptionType.string + ) # type = str also works + @discord.option( + "second", type=discord.SlashCommandOptionType.string + ) # type = str also works + async def join( + ctx, + first: str, + second: str, + ): + joined = first + second + await ctx.respond(f'When you join "{first}" and "{second}", you get: "{joined}".') + + + bot.run("TOKEN") + ``` + + ``` + # link with slash-commands-join.json + ``` + +## Autocomplete + +Discord's autocomplete allows developers to determine option choices that are used in a slash command option. You can do this by defining a function: + +```py +async def get_animal_types(ctx: discord.AutocompleteContext): + """ + Here we will check if 'ctx.options['animal_type']' is a marine or land animal and return respective option choices + """ + animal_type = ctx.options["animal_type"] + if animal_type == "Marine": + return ["Whale", "Shark", "Fish", "Octopus", "Turtle"] + else: # is land animal + return ["Snake", "Wolf", "Lizard", "Lion", "Bird"] + + +@bot.slash_command(name="animal") +async def animal_command( + ctx: discord.ApplicationContext, + animal_type: discord.Option(str, choices=["Marine", "Land"]), + animal: discord.Option( + str, autocomplete=discord.utils.basic_autocomplete(get_animal_types) + ), +): + await ctx.respond( + f"You picked an animal type of `{animal_type}` that led you to pick `{animal}`!" + ) +``` + +``` +# link with slash-commands-animal.json +``` + +!!! warning + + Autocomplete can **only** be used with slash commands. + +!!! info "Related Topics" + + - [Interactions Index](../index.md) + - [Rules and Common Practices](../../getting-started/rules-and-common-practices.md) + - [Cogs](../../popular-topics/cogs.md) diff --git a/docs/interactions/index.md b/docs/interactions/index.md new file mode 100644 index 00000000..ed9bccd7 --- /dev/null +++ b/docs/interactions/index.md @@ -0,0 +1,186 @@ +--- +title: Discord Interactions +icon: lucide/mouse-pointer-click +--- + +In December 2020, Discord released their first Interaction: the +[Slash Command](https://discord.com/developers/docs/interactions/application-commands#slash-commands). +Since then, Discord has added many types of Interactions, including: + +[**Application Commands**](https://discord.com/developers/docs/interactions/application-commands) + +- [**Slash Commands**](https://discord.com/developers/docs/interactions/application-commands#slash-commands): + Commands that can be used with the `/` prefix. +- **Context Menu Commands**: Commands that can be used from the right-click menu. + - [**User Commands**](https://discord.com/developers/docs/interactions/application-commands#user-commands): + Commands that can be used on a user by alt-clicking/selecting them. + - [**Message Commands**](https://discord.com/developers/docs/interactions/application-commands#message-commands): + Commands that can be used on a message by alt-clicking/selecting it. + +[**UI Components**](https://discord.com/developers/docs/interactions/message-components) + +- [**Buttons**](https://discord.com/developers/docs/interactions/message-components#buttons): + Buttons are attached to a message and can be clicked on to perform an action. +- [**Select Menus**](https://discord.com/developers/docs/interactions/message-components#select-menus): + Drop-down menus are used to select a number of options from a list. +- [**Modals**](https://discord.com/developers/docs/interactions/message-components#text-inputs): + Form-like modals can be used to ask for input from a user. + +## Application Commands + +Application Commands are another set of new features that are intended to avoid compromising users' safety and privacy. +They're relatively easy to add to your bot, and give people a simpler and safer way to use commands. + +### [Slash Commands](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.SlashCommand) + +Slash Commands were the first Interaction added to Discord. They're easy to use and create, and +is the only prefix commands alternative that does not need Message Content intent. + +!!! note + + Preferring prefix commands over Application Commands is **not** a valid reason to apply for the + Message Content intent. Using that as a reason will get your application denied. + +``` +# link with ping-response.json +``` + +
+ +This is what a Slash Command looks like. Not too different from a prefix command, +apart from the note telling you who invoked it. A Slash Command's fields can accept any of the following: + +- Members +- Roles +- Channels +- Attachments +- Text + +Just about as good as it gets. + +### [Message](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.MessageCommand) and [User](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.UserCommand) Commands + +Message Commands and User Commands were both introduced at around the same time, and are very similar to each other, so we'll be +introducing them together. These commands can be found in the `Apps` tab when alt-clicking. The only difference between the two is that +Message Commands only appear in the `Apps` tab of a message, while User Commands are found in the `Apps` tab of a user. Message Commands +can be used to quickly report a message, warn a user for a message, and other functions. Likewise, User Commands can be used to add a +user to a ticket, warn a user, and more. + +Here's an example of a Message Command: + +``` +# link with reverse-message-user-msg.json +# link with reverse-message-response.json +``` + +
+ +And here's an example of a User Command: + +``` +# link with user-age-bob-response.json +``` + +
+ +Pretty cool, right? To learn more about these two, please read the [Context Menus guide](application-commands/context-menus.md). + +## [Application Commands](#application-commands) vs. [Prefix Commands](../extensions/commands/prefixed-commands.md) + +Ever since Discord was created, apps on it have used prefix commands. Using prefixes meant that you would have to put a +certain character (or string of characters) in front of your command, such as the exclamation mark in `!ping`. The way this +worked was that your bot would listen for messages, pick out the ones that had their specific prefix, and then respond to the command. +Now, Discord is encouraging developers to switch their bots over to Application Commands, which is a new system meant to preserve the +privacy and safety of their users. But why exactly is Discord making us switch? What's the better option, Application Commands or prefix +commands? Below, we'll discuss everything you need to know. + +### Discord's Decision + +Application Commands were conceptualized partly due to privacy concerns. When Discord first began, they weren't entirely concerned about bots +having access to the content of every message that was being sent. However, as Discord grew, this became more of a problem. Hypothetically, bots +could simply log every message they're able to receive via the Discord API and hand their contents over to a company or other third party. This is +a problem, since that data is meant to be used only by Discord. As such, they locked down Message Content, and introduced Application Commands for +bot developers to use instead. + +Prefix commands work by reading messages, as described before. Application Commands, however, don't +work this way; instead, they work by having your bot get information from Discord about when a command was used. This way, Discord can limit +Message Content only to bots that *absolutely* depend on it, such as auto-moderation bots. + +### Who has to Use Application Commands + +Any verified bot that does not have the Message Content intent must use Application Commands. Discord is allowing developers to submit +applications for the ability to use the intent; however, since they don't want to keep supporting prefix commands due to privacy concerns, +they will automatically decline any application that includes only that as a reason. So, if your bot doesn't have an auto-moderation feature +(or any other functionality that requires Message Content), you're out of luck. + +Unverified bots, however, don't have to use Application Commands. This is because the Message Content intent is a `Privileged Intent`, meaning that +it must be applied for only if your bot is verified or about to be verified. Unverified bots don't have to apply for Privileged Intents, so they can +use them freely. + +So, if your bot is made only for a couple of servers, you can choose between prefix commands and Application Commands. However, if you plan on expanding +your bot's reach, it'll have to use Application Commands. + +### What's the Better Option + +Choosing which is the better option is up to you, if you're starting small. If +you plan on growing your bot, however, you will have to use Application Commands. Since prefix commands are slowly being phased out by Discord, +there isn't much of a choice for developers of larger bots. + +## Message Components + +Message Components are fairly new features in Discord, allowing developers to give their bots a fast +and understandable user interface. Message Components are easy to use and make your bot look modern, +sleek, and downright awesome. + +### [Views](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View) + +Views are not an Application Command nor are they a Message Component. Views are the invisible placeholders, or grid, +that Message Components lie in. Views can have up to 5 [`Action Rows`](https://docs.pycord.dev/en/stable/api/models.html#discord.ActionRow), +and Action Rows can have a maximum of 5 slots. Below, you can find a table showing how many slots a Message Interaction takes up. + +| Component | Slots | +| ------------ | ---------------------------- | +| Buttons | 1 Slot | +| Select Menus | 5 Slots | +| Text Modals | 1 Slot (opened via a Button) | + +So, based on this, you could have a maximum of 25 Buttons in a View with no Select Menus, and 5 Select +Menus in a View with no Buttons. This doesn't mean you can't have them both in a View, however. You can have +a combination of them, such as 20 Buttons and a Select Menu or 10 Buttons and 3 Select Menus. + +### [Buttons](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button) + +Buttons are the first of the Message Components. They allow for quick responses to prompts, such as for canceling or continuing an action. +Of course, these aren't their only uses; people have created awesome things with Buttons, such as calculators, games, and more! + +``` +# link with buttons-example.json +``` + +
+ +This is what a Button looks like, very simple and modern. To learn more about Buttons, refer to our +[Buttons page](ui-components/buttons.md). + +### [Select Menus](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Select) + +Select Menus are the second of Discord's Message Components. They allow users to select from a list of choices, which your bot can then use. +Select Menus are good for things such as choosing features, pages of a help menu, and more. + +![Select Menu Example Image](../assets/interactions/select-menus-example.png) + +This is what a Select Menu looks like. While not looking as good as Buttons, they still look great +and have even greater possibilities. To learn more about Select Menus, please refer to our [Select +Menus page](ui-components/dropdowns.md). + +### [Modal Dialogs](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal) + +Text Modals are the most recently added Message Component in Discord. They're useful for text input and filling out forms, such as a +sign-up for your bot's service. These are meant to replace long bot setup processes by allowing users to fill out multiple text fields, +which avoids having the user send multiple messages for the bot. Modals can be accessed by either invoking an Application Command or by +interacting with another UI Component. + +![Text Modal Example Image](../assets/interactions/modal-example.png) + +This is what a Text Modal looks like, easy to use and one of the most useful Message Components yet. To learn more about Text Modals, +please visit our [Modal Dialogs page](ui-components/modal-dialogs.md). diff --git a/docs/interactions/ui-components/buttons.md b/docs/interactions/ui-components/buttons.md new file mode 100644 index 00000000..f4a7c3bd --- /dev/null +++ b/docs/interactions/ui-components/buttons.md @@ -0,0 +1,297 @@ +--- +title: Buttons +description: Learn all about implementing buttons in your Discord Bot using Pycord. +--- + +On May 26, 2021, Discord added a new interaction called buttons. Instead of reactions, bots could now +send buttons and users could use them to interact with bots. This opened up a whole new world of +possibilities for bots. Soon after, developers made calculators, polls, and games like blackjack, UNO, +and even Minecraft! Buttons provided a clear and easy to use interface for interacting with bots. + +So, let's learn how you can add buttons to your bot! + +## Concept + +Buttons weren't the only update to the interactions system in Discord. Discord also added [Select Menus](dropdowns.md) and [Modal Dialogs](modal-dialogs.md), both of which work very similarly to buttons. + +These UI elements reside in a "view". To learn more about views, please refer to the +[interactions page](../index.md). + +## Usage Syntax + +Let's see how to create a simple responsive button. + +```python +import discord + +bot = discord.Bot() # Create a bot object + + +class MyView( + discord.ui.View +): # Create a class called MyView that subclasses discord.ui.View + @discord.ui.button( + label="Click me!", style=discord.ButtonStyle.primary, emoji="😎" + ) # Create a button with the label "😎 Click me!" with color Blurple + async def button_callback(self, button, interaction): + await interaction.response.send_message( + "You clicked the button!" + ) # Send a message when the button is clicked + + +@bot.slash_command() # Create a slash command +async def button(ctx): + await ctx.respond( + "This is a button!", view=MyView() + ) # Send a message with our View class that contains the button + + +bot.run("TOKEN") # Run the bot +``` + +Using this command should return the following message: + +``` +# link with buttons-button-response.json +``` + +
+ +As you can see, we create a class called `MyView` that [subclasses](#oop) +[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). + +Then, we add a function called `button_callback` to the `MyView` class with the decorator +[`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Button). +This decorator adds a button to a component. This function takes two arguments: the button that was +clicked and the interaction. These arguments are passed to the function when the button is clicked +by the module. We use the [`interaction.response.send_message`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse.send_message) +function to send a message to the channel where the interaction was sent. + +Finally, we create a global slash command called `button` that sends the message, along with the view +that contains a button. + +This is the basic syntax of creating a button. What you create with it is up to you. You can worry +about making your button do amazing things, while Pycord handles the rest! + +## Button Styles + +| Name | Usage | Color | +| --------- | ----------------------------------------------------------------------------------------- | ------- | +| Primary | `discord.ButtonStyle.primary` / `discord.ButtonStyle.blurple` | Blurple | +| Secondary | `discord.ButtonStyle.secondary` / `discord.ButtonStyle.grey` / `discord.ButtonStyle.gray` | Grey | +| Success | `discord.ButtonStyle.success` / `discord.ButtonStyle.green` | Green | +| Danger | `discord.ButtonStyle.danger` / `discord.ButtonStyle.red` | Red | +| Link | `discord.ButtonStyle.link` / `discord.ButtonStyle.url` | Grey | + +Check out the [`discord.ButtonStyle`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ButtonStyle) class for more information. + +![Different Button Styles](../../assets/interactions/button-styles.png) + +You can set a button's style by adding the `style` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) decorator. + +```python +class MyView(discord.ui.View): + @discord.ui.button(label="Click me!", style=discord.ButtonStyle.success) + async def button_callback(self, button, interaction): + await interaction.response.send_message("You clicked the button!") +``` + +## Action Rows + +We have discussed that Views can have 5 rows. Each row has 5 slots, and each button takes up 1 slot. +So, how do we move the buttons to another row? + +This can be done by specifying the `row` argument in the [`discord.ui.button`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.button) +decorator. + +!!! info "The `row` argument" + + The row argument specifies the relative row this button belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). + +```python +class MyView(discord.ui.View): + @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) + async def first_button_callback(self, button, interaction): + await interaction.response.send_message("You pressed me!") + + @discord.ui.button(label="Button 2", row=1, style=discord.ButtonStyle.primary) + async def second_button_callback(self, button, interaction): + await interaction.response.send_message("You pressed me!") +``` + +## Disabling Buttons + +### Pre-Disabled Buttons + +```python +class MyView(discord.ui.View): + @discord.ui.button( + label="A button", style=discord.ButtonStyle.primary, disabled=True + ) # pass `disabled=True` to make the button pre-disabled + async def button_callback(self, button, interaction): ... + + +@bot.command() +async def button(ctx): + await ctx.send("Press the button!", view=MyView()) +``` + +### Disabling Buttons on Press + +=== "Disabling a single component" + + ```python + class MyView(discord.ui.View): + @discord.ui.button(label="A button", style=discord.ButtonStyle.primary) + async def button_callback(self, button, interaction): + button.disabled = True # set button.disabled to True to disable the button + button.label = ( + "No more pressing!" # change the button's label to something else + ) + await interaction.response.edit_message(view=self) # edit the message's view + ``` + +=== "Disabling all the components of a view" + + ```python + class MyView(discord.ui.View): + @discord.ui.button(emoji="😀", label="Button 1", style=discord.ButtonStyle.primary) + async def button_callback(self, button, interaction): + self.disable_all_items() + await interaction.response.edit_message(view=self) + + @discord.ui.button(label="Button 2", style=discord.ButtonStyle.primary) + async def second_button_callback(self, button, interaction): + self.disable_all_items() + await interaction.response.edit_message(view=self) + ``` + +## Timeouts + +Sometimes, you want to have a button that is disabled after a certain amount of time. This is where timeouts come in. + +=== "Specifying time when creating a view object" + + ```python + class MyView(discord.ui.View): + async def on_timeout(self): + self.disable_all_items() + await self.message.edit( + content="You took too long! Disabled all the components.", view=self + ) + + @discord.ui.button() + async def button_callback(self, button, interaction): ... + + + @bot.command() + async def button(ctx): + await ctx.send("Press the button!", view=MyView(timeout=30)) + ``` + +=== "Specifying the time when subclassing" + + ```python + class MyView(discord.ui.View): + def __init__(self): + super().__init__(timeout=10) # specify the timeout here + + async def on_timeout(self): + self.disable_all_items() + await self.message.edit( + content="You took too long! Disabled all the components.", view=self + ) + + @discord.ui.button() + async def button_callback(self, button, interaction): ... + ``` + +Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. + +!!! note + + If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. + +## Persistent Views + +Sometimes, instead of a button that is disabled after a certain amount of time, you want to have a +button that is always working. + +Normally, when the bot goes offline, all of its buttons stop working. You will be able to see the +buttons, but nothing will happen when you press them. This is a problem +if you are trying to create a self-role system with buttons, for example. This is where persistent views come in. + +Persistent views work forever. When the bot goes offline, the buttons will stop working. When the bot comes back online, however, the buttons will start working again. + +In a Persistent View, the timeout must be set to `None` and all the children in the view must have a `custom_id` attribute set. + +```python +@bot.event +async def on_ready(): + bot.add_view(MyView()) # Registers a View for persistent listening + + +class MyView(discord.ui.View): + def __init__(self): + super().__init__(timeout=None) # timeout of the view must be set to None + + @discord.ui.button( + label="A button", + custom_id="button-1", + style=discord.ButtonStyle.primary, + emoji="😎", + ) # the button has a custom_id set + async def button_callback(self, button, interaction): + await interaction.response.send_message("Button was pressed", ephemeral=True) + + +@bot.command() +async def button(ctx): + await ctx.send( + f"Press the button! View persistence status: {MyView.is_persistent(MyView())}", + view=MyView(), + ) +``` + +## FAQ + +#### How many buttons can I have in a message? + +Each message can have a maximum of 25 buttons. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. + +#### Can I add more than one view to a message? + +No. As a Discord limitation, you can only have one view per message. + +#### Why are UI Components so confusing? + +They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. + +UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). + +#### What is OOP? What is subclassing? { #oop } + +OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have +their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. + +Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. + +We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. + +**Resources**: + +- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) +- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) + +#### Do buttons need any special permissions? + +No new permissions are needed for either the bot or the server to allow bots to use buttons. + +#### Should I replace reactions with buttons for my bot? + +That is up to you. Buttons do provide a cleaner interface for your bot and are easier to use. + +!!! info "Related Topics" + + - [Slash Commands](../application-commands/slash-commands.md) + - [Interactions Index](../index.md) diff --git a/docs/interactions/ui-components/dropdowns.md b/docs/interactions/ui-components/dropdowns.md new file mode 100644 index 00000000..a7bc84b2 --- /dev/null +++ b/docs/interactions/ui-components/dropdowns.md @@ -0,0 +1,330 @@ +--- +title: Select Menus +description: Learn all about implementing Select Menus or Dropdowns in your Discord Bot with Pycord. +--- + +Shortly after the buttons were added, Discord added their second message component: Select Menus. Select Menus allow users to choose from a list of items sent by a bot. These are a great substitute for having a user send a number that corresponds to an option. You can even allow users to select multiple options from the Select Menus. This guide will show you the easy and painless ways of using them with Pycord. + +## Concept + +Select Menus aren't the only message component in Discord. There's also [Buttons](buttons.md) and [Modal Dialogs](modal-dialogs.md). Select Menus make it easy for users to pick one or multiple options from a list provided by a bot. + +These UI elements reside in a "view". To learn more about views, please refer to the +[interactions page](../index.md). + +## Usage Syntax + +Let's see how to create a simple responsive select menu. + +```python +import discord + +bot = discord.Bot() + + +class MyView(discord.ui.View): + @discord.ui.select( # the decorator that lets you specify the properties of the select menu + placeholder="Choose a Flavor!", # the placeholder text that will be displayed if nothing is selected + min_values=1, # the minimum number of values that must be selected by the users + max_values=1, # the maximum number of values that can be selected by the users + options=[ # the list of options from which users can choose, a required field + discord.SelectOption( + label="Vanilla", description="Pick this if you like vanilla!" + ), + discord.SelectOption( + label="Chocolate", description="Pick this if you like chocolate!" + ), + discord.SelectOption( + label="Strawberry", description="Pick this if you like strawberry!" + ), + ], + ) + async def select_callback( + self, select, interaction + ): # the function called when the user is done selecting options + await interaction.response.send_message( + f"Awesome! I like {select.values[0]} too!" + ) + + +@bot.command() +async def flavor(ctx): + await ctx.respond("Choose a flavor!", view=MyView()) + + +bot.run("TOKEN") +``` + +There's a lot going on over here! Don't worry, we will go over the code and explain it. + +As you can see, we create a class called `MyView` that subclasses +[`discord.ui.View`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.View). + +Then, we add a function called `select_callback` to the `View` class with the decorator +[`discord.ui.select`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.select). +This decorator adds a select menu to the view. This decorator takes a few arguments to customize your select menu. Read them in the [Customization section](#customization). + +That was the decorator. Now, the function itself is pretty simple. It takes two parameters, not including `self`. The parameters are `select`: The select menu, and `interaction`: a [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object. Both of these are passed by Pycord, so you just need to specify them in the function! + +In the callback, you could do anything you want. You get the two parameters `select` and `interaction` to play around with. Here, we send a message using `await interaction.response.send_message` (where interaction is [`discord.InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse)) with content `select.values[0]`, which sends the label of the first/only option the user selected. Obviously, this is only an example, and you could do just about anything you want. + +Finally, we create a global slash command called `flavour` that sends a message "Choose a flavor!" along with the view +that contains our select menu. + +This is the basic syntax of creating a select menu. What you create with it is up to you. You can worry +about making your code do amazing things, while Pycord handles the rest! + +## Customization + +#### Select Menu Properties + +- `select_type`: The type of select to create. This must be a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. +- `channel_types`: A list of channel types that can be selected in the menu. This is only valid for selects of `select_type` [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType). +- `options`: A list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. These are the options that can be selected in this menu. +- `placeholder` is the placeholder text shown in the select menu if no option is selected. +- `custom_id`: The ID of the select menu that gets received during an interaction. It is recommended not to set this to anything unless you are trying to create a persistent view. +- `row`: The relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero indexed). +- `min_values`: The minimum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. +- `max_values`: The maximum number of items that must be chosen for this select menu. Defaults to 1 and must be between 1 and 25. +- `disabled`: Whether the select is disabled or not. Defaults to False. + +#### Select Option Properties + +In the `options` parameter, you pass a list of [`discord.SelectOption`](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.SelectOption) values. This class also has a few parameters: + +- `default` (whether the option is selected by default) +- `description` (an additional description, if any) +- `emoji` (a string or an emoji object, if any) +- `label` (the name displayed to users, can be up to 100 characters) +- `value` (a special value of the option, defaults to the label). + +## Select Types + +In addition to regular string selects, you can also have your select menu contain users, roles, mentionables, and channels as its options. You can use these alternative select types by passing a [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value for the `select_type` parameter when creating the Select. + +```python +class MyView(discord.ui.View): + @discord.ui.select(select_type=discord.ComponentType.user_select) + async def select_callback(self, select, interaction): + await interaction.response.send_message(f"Hello, {select.values[0].mention}") +``` + +Additionally, you can use shortcut decorators to create a [`discord.ui.Select`](https://docs.pycord.dev/en/master/api/ui_kit.html#discord.ui.select) with a predetermined [`discord.ComponentType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType) value. Using a shortcut decorator, the above code can be rewritten like this: + +```python +class MyView(discord.ui.View): + @discord.ui.user_select() + async def select_callback(self, select, interaction): + await interaction.response.send_message(f"Hello, {select.values[0].mention}") +``` + +### Specifying Channel Types + +When using a [`discord.ComponentType.channel_select`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ComponentType.channel_select) type select menu, you can pass in a list of [`discord.ChannelType`](https://docs.pycord.dev/en/stable/api/enums.html#discord.ChannelType) values to limit which types of channels users can choose when interacting with the select menu. + +```python +class MyView(discord.ui.View): + @discord.ui.select( + select_type=discord.ComponentType.channel_select, + channel_types=[discord.ChannelType.text, discord.ChannelType.voice], + ) + async def select_callback(self, select, interaction): + await interaction.response.send_message( + f"You selected {select.values[0].mention}" + ) +``` + +## Action Rows + +We have discussed that Views can have 5 rows. Each row has 5 slots. A button takes a single slot, while a select menu takes up all 5 of them. This means a view can have a maximum of 5 select menus, or any possible combination of select menus and buttons. + +The arrangement of buttons and select menus is generally adjusted by Pycord. However, it is possible to move them to specific relative rows. This is done by specifying the `row` argument. + +!!! info "The `row` argument" + + The row argument specifies the relative row this select menu belongs to. A Discord component can only have 5 rows. By default, items are arranged automatically into those 5 rows. If you’d like to control the relative positioning of the row then passing an index is advised. For example, row=1 will show up before row=2. Defaults to None, which is automatic ordering. The row number must be between 0 and 4 (i.e. zero-indexed). + +```python +class MyView(discord.ui.View): + @discord.ui.button(label="Button 1", row=0, style=discord.ButtonStyle.primary) + async def first_button_callback(self, button, interaction): + await interaction.response.send_message("You pressed me!") + + @discord.ui.button(label="Button 2", row=0, style=discord.ButtonStyle.primary) + async def second_button_callback(self, button, interaction): + await interaction.response.send_message("You pressed me!") + + @discord.ui.select(row=1, options=[...]) + async def select_callback(self, select, interaction): + await interaction.response.send_message( + f"Awesome! I like {select.values[0]} too!" + ) +``` + +## Disabling Select Menus + +### Pre-Disabled Menus + +```python +class MyView(discord.ui.View): + @discord.ui.select( + disabled=True, # pass disabled=True to set the menu as disabled + options=[...], + ) + async def select_callback(self, select, interaction): ... + + +@bot.command() +async def select_menu(ctx): + await ctx.send("Select and option from the menu!", view=MyView()) +``` + +### Disabling Menus on Press + +=== "Disabling a single component" + + ```python + class MyView(discord.ui.View): + @discord.ui.select(options=[...]) + async def select_callback(self, select, interaction): + select.disabled = True # set the status of the select as disabled + await interaction.response.edit_message( + view=self + ) # edit the message to show the changes + ``` + +=== "Disabling all the components of a view" + + ```python + class MyView(discord.ui.View): + @discord.ui.select(options=[...]) + async def first_select_callback(self, select, interaction): + self.disable_all_items() + await interaction.response.edit_message( + view=self + ) # edit the message to show the changes + + @discord.ui.select(options=[...]) + async def second_select_callback(self, select, interaction): + self.disable_all_items() + await interaction.response.edit_message(view=self) + ``` + +## Timeouts + +You may want a select menu to automatically stop working after a certain amount of time. This is where timeouts come in. + +=== "Specifying time when creating a view object" + + ```python + class MyView(discord.ui.View): + async def on_timeout(self): + self.disable_all_items() + await self.message.edit( + content="You took too long! Disabled all the components.", view=self + ) + + @discord.ui.select(options=[...]) + async def select_callback(self, select, interaction): ... + + + @bot.command() + async def select(ctx): + await ctx.send(view=MyView(timeout=30)) # specify the timeout here + ``` + +=== "Specifying the time when subclassing" + + ```python + class MyView(discord.ui.View): + def __init__(self): + super().__init__(timeout=10) # specify the timeout here + + async def on_timeout(self): + self.disable_all_items() + await self.message.edit( + content="You took too long! Disabled all the components.", view=self + ) + + @discord.ui.select(options=[...]) + async def select_callback(self, select, interaction): ... + ``` + +Here, we disable all buttons and select menus in the view. Then, we edit the message to show that the timeout was reached. + +!!! note + + If the `on_timeout` coroutine is not present, the components will simply stop working after the specified time. + +## Persistent Views + +Sometimes, instead of a select menu that is disabled after a certain amount of time, you want to have a +select menu that is always working. + +Normally, when the bot goes offline, all of its views stop working, even if they don't have a timeout. You will be able to see the +views, but nothing will happen when you try to interact with them. This is a problem +if you are trying to create a self-role system, for example. This is where persistent views come in. + +Persistent views work forever. When the bot goes offline, the buttons and select menus will stop working. However, when the bot comes back online, the buttons and select menus will start working again. + +In a Persistent View, the timeout must be set to `None` and all the children in the view much have a `custom_id` attribute set. + +```python +@bot.event +async def on_ready(): + bot.add_view(MyView()) # Registers a View for persistent listening + + +class MyView(discord.ui.View): + def __init__(self): + super().__init__(timeout=None) # timeout of the view must be set to None + + @discord.ui.select(custom_id="select-1", options=[...]) # a custom_id must be set + async def select_callback(self, select, interaction): ... + + +@bot.command() +async def select_menu(ctx): + await ctx.send( + f"View persistence status: {MyView.is_persistent(MyView())}", view=MyView() + ) +``` + +## FAQ + +#### How many select menus can I have in a message? + +Each message can have a maximum of 5 select menus. Views can have up to 5 rows, and each row has 5 slots. A button takes up one slot, while a select menu takes up all five slots. + +#### Can I add more than one view to a message? + +No. As a Discord limitation, you can only have one view per message. + +#### Why are UI Components so confusing? + +They cannot be simple like commands. This system makes them flexible and doesn't limit your imagination. There are loads of different ways you can use UI Components. For example, you could subclass Buttons or Select Menus and add them to a view using the view's `add_item` function. + +UI Components aren't hard to use if you know Python. We recommend learning [Object-Oriented Programming with Python](#oop). + +#### What is OOP? What is subclassing? + +OOP (object-oriented programming) is a programming paradigm that allows you to create objects that have +their own properties and methods. Almost everything in python is an object or a class. `discord.Embed` and `discord.ui.View` are both classes. When you use `view = discord.ui.View()` to create a view, you are actually creating an object of type `discord.ui.View`. + +Subclassing is a Python OOP concept. It means that you can create a class that inherits from another class. In other words, the class that subclasses another class can inherit all the methods and attributes of that class. + +We highly recommend you learn about basic Python concepts like classes and inheritance before you start learning Pycord. + +**Resources**: + +- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) +- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) + +#### Do select menus need any special permissions? + +No new permissions are needed in the bot or in the server. + +!!! info "Related Topics" + + - [Slash Commands](../application-commands/slash-commands.md) + - [Interactions Index](../index.md) diff --git a/docs/interactions/ui-components/modal-dialogs.md b/docs/interactions/ui-components/modal-dialogs.md new file mode 100644 index 00000000..8eec6ca0 --- /dev/null +++ b/docs/interactions/ui-components/modal-dialogs.md @@ -0,0 +1,89 @@ +--- +title: Modal Dialogs +description: Learn how you can implement Modals in your Discord Bot with Pycord! +--- + +Modal Dialogs, also known as "modals", provide a form-like structure for bots to receive input from users. No extra permissions are needed for bots to send modal dialogs, so it becomes a convenient workaround for bots to receive longer input without needing the Message Content [intent](../../popular-topics/intents.md). + +## Concept + +Modal Dialogs consist of a title, custom ID, and up to 5 [`discord.ui.InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) components. While creating modals, we generally subclass [`discord.ui.Modal`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.Modal), as we'll see later. + +Unlike other UI Components, Modals cannot be sent with messages. They must be invoked by an Application Command or another UI Component. + +## Usage Syntax + +```py +class MyModal(discord.ui.Modal): + def __init__(self, *args, **kwargs) -> None: + super().__init__(*args, **kwargs) + + self.add_item(discord.ui.InputText(label="Short Input")) + self.add_item( + discord.ui.InputText(label="Long Input", style=discord.InputTextStyle.long) + ) + + async def callback(self, interaction: discord.Interaction): + embed = discord.Embed(title="Modal Results") + embed.add_field(name="Short Input", value=self.children[0].value) + embed.add_field(name="Long Input", value=self.children[1].value) + await interaction.response.send_message(embeds=[embed]) +``` + +=== "Sending Modals through Application Commands" + + The `ctx` parameter we define in Application Commands receives an [`ApplicationContext`](https://docs.pycord.dev/en/stable/api/application_commands.html#discord.ApplicationContext) object. Using its `send_modal()` coroutine, you can send a Modal dialog to the user invoking the Application Command. + + ```py + @bot.slash_command() + async def modal_slash(ctx: discord.ApplicationContext): + """Shows an example of a modal dialog being invoked from a slash command.""" + modal = MyModal(title="Modal via Slash Command") + await ctx.send_modal(modal) + ``` + +=== "Sending Modals through UI Components" + + The `interaction` parameter we define in UI Components receives an [`Interaction`](https://docs.pycord.dev/en/stable/api/models.html#discord.Interaction) object. The `response` attribute of the object contains an [`InteractionResponse`](https://docs.pycord.dev/en/stable/api/models.html#discord.InteractionResponse) object, with various coroutines such as `send_message()` and `send_modal()`, which we utilize. + + ```py + class MyView(discord.ui.View): + @discord.ui.button(label="Send Modal") + async def button_callback(self, button, interaction): + await interaction.response.send_modal(MyModal(title="Modal via Button")) + + + @bot.slash_command() + async def send_modal(ctx): + await ctx.respond(view=MyView()) + ``` + +The above example uses an embed to display the results of the modal submission, but you can do anything you want with the text provided by the user. +Each input field can be accessed in the order it was added to the modal dialog, via `Modal.children`. + +## Customization + +A Modal can have up to 5 [`InputText`](https://docs.pycord.dev/en/stable/api/ui_kit.html#discord.ui.InputText) fields. These fields offer some customization. + +Each field has a label which is shown to the user. This is defined with `label`. + +The `style` parameter is used to determine whether it should be a short (single-line) or long (multi-line) input field. + +There are a number of aliases that can be used: + +```x title="Single-line InputTextStyle values:" +short +singleline +``` + +```x title="Multi-line InputTextStyle values:" +paragraph = 2 +multiline = 2 +long = 2 +``` + +!!! info "Related Topics" + + - [Slash Commands](../application-commands/slash-commands.md) + - [Buttons](buttons.md) + - [Interactions Index](../index.md) diff --git a/docs/introduction.md b/docs/introduction.md new file mode 100644 index 00000000..6b44de2c --- /dev/null +++ b/docs/introduction.md @@ -0,0 +1,50 @@ +--- +title: Introduction +description: Pycord Guide is a complete guide for Pycord. Learn how to create Discord Bots today! +icon: lucide/book-open +--- + +Pycord is a modern, easy to use, feature-rich, and async ready API wrapper for Discord, written in Python. Pycord is a maintained fork of [discord.py](https://github.com/Rapptz/discord.py). + +## Before you begin + +Pycord is an advanced and complex Python library. To take advantage of the full capabilities of Pycord, you will need to have a good understanding of Python. You should know the basics of Python and have an understanding of the following concepts: + +- Variables +- Data Types +- Functions +- Packages +- Conditionals +- Loops +- Classes +- Object-Oriented Programming +- Inheritance +- Exception Handling +- Iterators +- Coroutines +- Async/Await + +This list is not exhaustive, but it should give you a good idea of what you need to know to get started. + +When you see an ellipsis - that's the three dots - in this guide, it is a placeholder for code that you need to fill in. Sometimes, it may be code for a command, while other times it could be something simple like a Guild ID. Make sure to replace them before running your bot! + +## Learning Resources + +Here are some good resources to get started or to freshen up your Python knowledge: + +- [Official Beginner's Guide](https://wiki.python.org/moin/BeginnersGuide) +- [Official Tutorial](https://docs.python.org/3/tutorial/) +- [Automate the Boring Stuff, a free online book for complete beginners to programming](https://automatetheboringstuff.com/) +- [Learn Python in y Minutes, complete cheat sheet for people who know programming already](https://learnxinyminutes.com/docs/python3/) +- [Swaroopch's free Python book](http://python.swaroopch.com/) +- [Codeabbey, exercises for beginners](http://www.codeabbey.com/) + +## Credits + +First of all, we would like to thank [Rapptz](https://github.com/Rapptz) for the original [discord.py](https://pypi.org/project/discord.py) library. Pycord is a maintained fork of this library. + +We would also like to thank the [discord.js guide](https://discordjs.guide), which inspired this guide style-wise, and the now defunct [original Pycord Guide](https://web.archive.org/web/20220813041929/https://namantech.me/pycord/), which inspired some of the content of the previous Pycord Guide that this guide is, in turn, based on. + +This current guide is built with [Zensical](https://zensical.org). We would also like to thank Danktuary for his [`@discord-message-components/react`](https://www.npmjs.com/package/@discord-message-components/react) package, from which the previous guide took its Discord message components. + +And finally, we would like to thank the amazing and loving community of Pycord users, contributors and developers. diff --git a/docs/markdown.md b/docs/markdown.md deleted file mode 100644 index 94e3b5a3..00000000 --- a/docs/markdown.md +++ /dev/null @@ -1,111 +0,0 @@ ---- -icon: simple/markdown ---- - -# Markdown in 5min - -## Headers - -``` -# H1 Header -## H2 Header -### H3 Header -#### H4 Header -##### H5 Header -###### H6 Header -``` - -## Text formatting - -``` -**bold text** -*italic text* -***bold and italic*** -~~strikethrough~~ -`inline code` -``` - -## Links and images - -``` -[Link text](https://example.com) -[Link with title](https://example.com "Hover title") -![Alt text](image.jpg) -![Image with title](image.jpg "Image title") -``` - -## Lists - -``` -Unordered: - -- Item 1 -- Item 2 - - Nested item - -Ordered: - -1. First item -2. Second item -3. Third item -``` - -## Blockquotes - -``` -> This is a blockquote -> Multiple lines ->> Nested quote -``` - -## Code blocks - -```` -```javascript -function hello() { - console.log("Hello, world!"); -} -``` -```` - -## Tables - -``` -| Header 1 | Header 2 | Header 3 | -|----------|----------|----------| -| Row 1 | Data | Data | -| Row 2 | Data | Data | -``` - -## Horizontal rule - -``` ---- -or -*** -or -___ -``` - -## Task lists - -``` -- [x] Completed task -- [ ] Incomplete task -- [ ] Another task -``` - -## Escaping characters - -``` -Use backslash to escape: \* \_ \# \` -``` - -## Line breaks - -``` -End a line with two spaces -to create a line break. - -Or use a blank line for a new paragraph. -``` diff --git a/docs/more/community-resources.md b/docs/more/community-resources.md new file mode 100644 index 00000000..ed3075bd --- /dev/null +++ b/docs/more/community-resources.md @@ -0,0 +1,23 @@ +--- +title: Community Resources +--- + +This page showcases the amazing things created by the Pycord community, including bots, Plugins, and more. + +## Plugins + +| Name | Type | GitHub | +| --------------- | ------------ | --------------------------------------------------------------- | +| Music Cord | Music | [NixonXC/cord-music](https://github.com/NixonXC/cord-music) | +| pycord-i18n | Localization | [Dorukyum-pycord-i18n](https://github.com/Dorukyum/pycord-i18n) | +| pycord-multicog | Cogs | [pycord-multicog](https://github.com/Dorukyum/pycord-multicog) | +| EzCord | Utilities | [EzCord](https://github.com/tibue99/ezcord) | + +## Bots + +| Name | Type | Link | +| ------------------------ | ------------ | ----------------------------------------------------------------------------------- | +| Discord-Multipurpose-Bot | Multipurpose | [github](https://github.com/pogrammar/Discord-multipurpose-bot/tree/master/Python) | +| inconnu | Fun & QOL | [github](https://github.com/tiltowait/inconnu) | +| Mai | Multipurpose | [github](https://github.com/TeamMai/Mai) & [website](https://xfghoul.github.io/Mai) | +| Toolkit | Multipurpose | [github](https://github.com/Dorukyum/Toolkit) | diff --git a/docs/more/contributing.md b/docs/more/contributing.md new file mode 100644 index 00000000..292185bf --- /dev/null +++ b/docs/more/contributing.md @@ -0,0 +1,211 @@ +--- +title: Contributing to the Guide +description: Learn how to contribute to the Pycord Guide. +--- + +This page outlines some of the basic syntax you need to know to contribute to the guide. We recommend you also check out: + +- [Contributing Rules](https://github.com/Pycord-Development/guide/blob/master/.github/CONTRIBUTING.md) + + + +## Markdown Syntax + +This page quickly outlines some of the syntax that is used in markdown. + +````mdx +Markdown syntax is pretty easy. You can add **bold**, _italic_ and _underline_ text. You can use ~~strikethrough~~. You can use `inline code blocks`. + + ```python + print("We can use code blocks like this.") + ``` + +You can add [links to other websites](https://pycord.dev). You can add images like this: ![alternate text that describes the image](https://pycord.dev/image.png). + +- You can create +- unordered lists like this + +1. Or ordered lists +2. Like this + +3. If you want markdown to automatically detect what number you are on, you can use `1.` +4. Like this + +# Headers + +## Go + +### Like + +#### This + +You can even use HTML in Markdown. + +This text is monospaced +Use
to add a break line. + +> We can use blockquotes too. + +2 ways to create tables: + + + + + + + + + + +
HeaderHeader
CellCell
+ +| Header | Header | +| ------ | ------ | +| Cell | Cell | + +Here's a line for us to start with. + +This line is separated from the one above by two new lines, so it will be a _separate paragraph_. + +This line is also a separate paragraph, but... +This line is only separated by a single newline, so it's a separate line in the _same paragraph_. + +We can use emojis too! :joy: + +- [x] We can have task lists too +- [ ] This is a task +- [ ] That's not done yet +```` + +
+ Preview + +
+ Markdown syntax is pretty easy. You can add **bold**, *italic* and *underline* text. You can use ~~strikethrough~~. You can use `inline code blocks`. + +```` +```python +print("We can use code blocks like this.") +``` + +You can add [links to other websites](https://pycord.dev). You can add images by adding ![alt text](@site/static/img/favicon.ico). + +* You can create +* unordered lists like this + +1. Or ordered lists + +2. Like this + +3. If you want markdown to automatically detect what number you are on, you can use `1.` + +4. Like this + + # Headers + + ## Go + + ### Like + + #### This + +You can even use HTML in Markdown. + +This text is monospaced +Use
to add a break line. + +> We can use blockquotes too. + +2 ways to create tables: + + + + + + + + + + + +
HeaderHeader
CellCell
+ +| Header | Header | +| ------ | ------ | +| Cell | Cell | + +Here's a line for us to start with. + +This line is separated from the one above by two new lines, so it will be a *separate paragraph*. + +This line is also a separate paragraph, but... +This line is only separated by a single newline, so it's a separate line in the *same paragraph*. + +We can use emojis too! :joy: + +* [x] We can have task lists too +* [ ] This is a task +* [ ] That's not done yet +```` + +
+
+ + + + + +## Page Format + +There are a few things you need to take care of: + +1. Make sure that the spelling and grammar is perfect. We have a GitHub action configured that will warn you about spelling errors when you start a pull request. Make sure to commit your changes accordingly. + + As for the grammar, you should try reading the changes you have done and wait for reviews from others. + +1. A common mistake people make is incorrect header style. People often think that the less the important the topic is, the lower it's heading style should be. + + ```md + [PAGE STARTS] + # Topic + ## Less Important Topic + ## Subtopic + ``` + + ```md + [PAGE STARTS] + # About + [Introduction] + + ## Installation + [Content] + + ### Windows + [Content] + ``` + + That's VERY wrong. Here's the correct example: + + ```md + [PAGE STARTS] + [Introduction] + ## Topic + ## Less Important Topic + ### Subtopic + ``` + + ```md + [PAGE STARTS] + [Introduction] + + ## About + [More Information] + + ## Installation + [Content] + + ### Windows + [Content] + ``` + + Note that the `---`s at the beginning have been skipped here. diff --git a/docs/more/git.md b/docs/more/git.md new file mode 100644 index 00000000..b60fb0c0 --- /dev/null +++ b/docs/more/git.md @@ -0,0 +1,47 @@ +--- +title: Installing Git +description: Learn how you can install Git on your system. +--- + +Git is software for tracking changes in any set of files (also known as a "version control" software), usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems). + +Let's see how to install Git on different platforms. + +## Windows + +On Windows, Git can be installed via: + +- [Git for Windows](https://gitforwindows.org) +- [Git Scm](https://git-scm.com/download/windows) + +## Linux + +On Linux, Git is probably already installed in your distribution's repository. If not, you can install it via [Git for Linux](https://git-scm.com/download/linux). You can also install it via the built-in package manager on your Linux distro. + +## Mac + +You can install Git for your macOS computer via [Git for Mac](https://git-scm.com/download/mac). Alternatively, it can be also be installed from the Xcode Command Line Tools by installing Xcode from the App Store, or by running this: + +xcode-select --install + +## Using Package Managers + +You can also install Git using package managers. + +### Chocolatey + +If you use the Chocolatey package manager, you can install Git using: + +choco install git + +### Scoop + +If you use Scoop, you can install Git using: + +scoop install git + +### Brew + +If you're on macOS or Linux, you can install Git using: + +brew install git diff --git a/docs/more/index.md b/docs/more/index.md new file mode 100644 index 00000000..a6521731 --- /dev/null +++ b/docs/more/index.md @@ -0,0 +1,13 @@ +--- +title: More +icon: lucide/ellipsis +--- + +# More + +Additional resources and references for working with Pycord and the guide. + +- [Community Resources](community-resources.md) +- [Contributing to the Guide](contributing.md) +- [Installing Git](git.md) +- [Virtual Environments](virtual-environments.md) diff --git a/docs/more/virtual-environments.md b/docs/more/virtual-environments.md new file mode 100644 index 00000000..b0b8c7ea --- /dev/null +++ b/docs/more/virtual-environments.md @@ -0,0 +1,62 @@ +--- +title: Virtual Environments +description: Learn how to set up a virtual environment for Pycord. +--- + +## Setup + +Sometimes you want to keep libraries from polluting system installs or use a different version of libraries than the ones installed on the system. You might also not have permissions to install libraries system-wide. For this purpose, the standard library as of Python 3.3 comes with a concept called “Virtual Environment”s to help maintain these separate versions. + +A more in-depth tutorial is found on [Virtual Environments and Packages](https://docs.python.org/3/tutorial/venv.html). + +However, for the quick and dirty: + +Go to your project’s working directory: + +```bash +$ cd your-bot-source +$ python3 -m venv venv +``` + +Activate the virtual environment: + +```bash +$ source venv/bin/activate +``` + +On Windows you activate it with: + +```batch +$ venv\Scripts\activate.bat +``` + +Use pip like usual: + +```bash +$ pip install -U py-cord +``` + +Congratulations. You now have a virtual environment all set up. + +## Additional info + +It can be useful to set up a requirements.txt, so you can just put all of your dependencies in there and have pip install it. +For instance, if you wanted to have the latest 2.0 version of pycord and [pytz](https://github.com/stub42/pytz/blob/master/src/README.rst), just create a file named requirements.txt with the following contents: + +``` +py-cord>=2.0.0 +pytz +``` + +And then (in your virtual environment) you can just execute + +```bash +pip install -r requirements.txt +``` + +To keep from committing your virtual environment to git, you can set up a .gitignore file with the following line +(assuming you named your virtual environment venv like the above example): + +``` +venv/ +``` diff --git a/docs/payloads/extensions/bridge/bye-prefixed-response.json b/docs/payloads/extensions/bridge/bye-prefixed-response.json new file mode 100644 index 00000000..b77dd9bc --- /dev/null +++ b/docs/payloads/extensions/bridge/bye-prefixed-response.json @@ -0,0 +1,49 @@ +{ + "id": "1234567890123456854", + "type": 0, + "content": "Bye!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:26:02.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "message_reference": { + "channel_id": "9876543210987654321", + "message_id": "1234567890123456853" + }, + "referenced_message": { + "id": "1234567890123456853", + "type": 0, + "content": "!bye", + "author": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0" + } + }, + "application_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/bridge/bye-prefixed-user-msg.json b/docs/payloads/extensions/bridge/bye-prefixed-user-msg.json new file mode 100644 index 00000000..46bd34a7 --- /dev/null +++ b/docs/payloads/extensions/bridge/bye-prefixed-user-msg.json @@ -0,0 +1,32 @@ +{ + "id": "1234567890123456853", + "type": 0, + "content": "!bye", + "channel_id": "9876543210987654321", + "author": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + }, + "member": { + "nick": null, + "roles": ["6666666666666666666"], + "joined_at": "2024-01-10T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:26:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/extensions/bridge/bye-slash-response.json b/docs/payloads/extensions/bridge/bye-slash-response.json new file mode 100644 index 00000000..75151317 --- /dev/null +++ b/docs/payloads/extensions/bridge/bye-slash-response.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456851", + "type": 20, + "content": "Bye!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:24:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456852", + "type": 2, + "name": "bye", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/bridge/hello-prefixed-response.json b/docs/payloads/extensions/bridge/hello-prefixed-response.json new file mode 100644 index 00000000..e9133f96 --- /dev/null +++ b/docs/payloads/extensions/bridge/hello-prefixed-response.json @@ -0,0 +1,49 @@ +{ + "id": "1234567890123456850", + "type": 0, + "content": "Hello!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:22:02.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "message_reference": { + "channel_id": "9876543210987654321", + "message_id": "1234567890123456849" + }, + "referenced_message": { + "id": "1234567890123456849", + "type": 0, + "content": "!hello", + "author": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0" + } + }, + "application_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/bridge/hello-prefixed-user-msg.json b/docs/payloads/extensions/bridge/hello-prefixed-user-msg.json new file mode 100644 index 00000000..975289f4 --- /dev/null +++ b/docs/payloads/extensions/bridge/hello-prefixed-user-msg.json @@ -0,0 +1,32 @@ +{ + "id": "1234567890123456849", + "type": 0, + "content": "!hello", + "channel_id": "9876543210987654321", + "author": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + }, + "member": { + "nick": null, + "roles": ["6666666666666666666"], + "joined_at": "2024-01-10T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:22:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/extensions/bridge/hello-slash-response.json b/docs/payloads/extensions/bridge/hello-slash-response.json new file mode 100644 index 00000000..5edb7351 --- /dev/null +++ b/docs/payloads/extensions/bridge/hello-slash-response.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456847", + "type": 20, + "content": "Hello!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:20:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456848", + "type": 2, + "name": "hello", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/bridge/sum-prefixed-response.json b/docs/payloads/extensions/bridge/sum-prefixed-response.json new file mode 100644 index 00000000..6ded036f --- /dev/null +++ b/docs/payloads/extensions/bridge/sum-prefixed-response.json @@ -0,0 +1,49 @@ +{ + "id": "1234567890123456858", + "type": 0, + "content": "4", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:30:02.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "message_reference": { + "channel_id": "9876543210987654321", + "message_id": "1234567890123456857" + }, + "referenced_message": { + "id": "1234567890123456857", + "type": 0, + "content": "!sum 2 2", + "author": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0" + } + }, + "application_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/bridge/sum-prefixed-user-msg.json b/docs/payloads/extensions/bridge/sum-prefixed-user-msg.json new file mode 100644 index 00000000..b972fbcd --- /dev/null +++ b/docs/payloads/extensions/bridge/sum-prefixed-user-msg.json @@ -0,0 +1,32 @@ +{ + "id": "1234567890123456857", + "type": 0, + "content": "!sum 2 2", + "channel_id": "9876543210987654321", + "author": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + }, + "member": { + "nick": null, + "roles": ["6666666666666666666"], + "joined_at": "2024-01-10T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:30:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/extensions/bridge/sum-slash-response.json b/docs/payloads/extensions/bridge/sum-slash-response.json new file mode 100644 index 00000000..42474e78 --- /dev/null +++ b/docs/payloads/extensions/bridge/sum-slash-response.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456855", + "type": 20, + "content": "4", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:28:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456856", + "type": 2, + "name": "sum", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/commands/help-default-response.json b/docs/payloads/extensions/commands/help-default-response.json new file mode 100644 index 00000000..bae87b58 --- /dev/null +++ b/docs/payloads/extensions/commands/help-default-response.json @@ -0,0 +1,34 @@ +{ + "id": "1234567890123456843", + "type": 0, + "content": "No Category:\n !help Shows this message\n !ping\n\nType !help command for more info on a command.\nYou can also type !help category for more info on a category.", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:08:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/commands/help-error-embed.json b/docs/payloads/extensions/commands/help-error-embed.json new file mode 100644 index 00000000..ba456c4e --- /dev/null +++ b/docs/payloads/extensions/commands/help-error-embed.json @@ -0,0 +1,41 @@ +{ + "id": "1234567890123456846", + "type": 0, + "content": "", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [ + { + "type": "rich", + "title": "Error", + "description": "Command 'update_pycord' not found.", + "color": 16711680 + } + ], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:14:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/commands/help-error-user-msg.json b/docs/payloads/extensions/commands/help-error-user-msg.json new file mode 100644 index 00000000..6c423270 --- /dev/null +++ b/docs/payloads/extensions/commands/help-error-user-msg.json @@ -0,0 +1,32 @@ +{ + "id": "1234567890123456840", + "type": 0, + "content": "!help update_pycord", + "channel_id": "9876543210987654321", + "author": { + "id": "543397958197182464", + "username": "Dorukyum", + "avatar": "db6e0450e03259908791b1e2af42b271", + "discriminator": "0", + "public_flags": 0 + }, + "member": { + "nick": null, + "roles": ["5555555555555555555"], + "joined_at": "2024-01-15T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:04:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/extensions/commands/help-minimal-embed.json b/docs/payloads/extensions/commands/help-minimal-embed.json new file mode 100644 index 00000000..9a879f8c --- /dev/null +++ b/docs/payloads/extensions/commands/help-minimal-embed.json @@ -0,0 +1,40 @@ +{ + "id": "1234567890123456845", + "type": 0, + "content": "", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [ + { + "type": "rich", + "description": "Use `!help [command]` for more info on a command.\nYou can also use `!help [category]` for more info on a category.\n\n**__No Category__**\nhelp ping", + "color": 0 + } + ], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:12:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/commands/help-minimal-response.json b/docs/payloads/extensions/commands/help-minimal-response.json new file mode 100644 index 00000000..1d27f0f9 --- /dev/null +++ b/docs/payloads/extensions/commands/help-minimal-response.json @@ -0,0 +1,34 @@ +{ + "id": "1234567890123456844", + "type": 0, + "content": "Use `!help [command]` for more info on a command.\nYou can also use `!help [category]` for more info on a category.\n\n**__No Category__**\nhelp ping", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:10:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/commands/prefixed-announce-response.json b/docs/payloads/extensions/commands/prefixed-announce-response.json new file mode 100644 index 00000000..004fe27d --- /dev/null +++ b/docs/payloads/extensions/commands/prefixed-announce-response.json @@ -0,0 +1,34 @@ +{ + "id": "1234567890123456839", + "type": 0, + "content": "**Hello**\nHello World!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:02:02.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/commands/prefixed-announce-user-msg.json b/docs/payloads/extensions/commands/prefixed-announce-user-msg.json new file mode 100644 index 00000000..921e728b --- /dev/null +++ b/docs/payloads/extensions/commands/prefixed-announce-user-msg.json @@ -0,0 +1,32 @@ +{ + "id": "1234567890123456838", + "type": 0, + "content": "!announce Hello Hello World!", + "channel_id": "9876543210987654321", + "author": { + "id": "543397958197182464", + "username": "Dorukyum", + "avatar": "db6e0450e03259908791b1e2af42b271", + "discriminator": "0", + "public_flags": 0 + }, + "member": { + "nick": null, + "roles": ["5555555555555555555"], + "joined_at": "2024-01-15T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:02:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/extensions/commands/prefixed-help-response.json b/docs/payloads/extensions/commands/prefixed-help-response.json new file mode 100644 index 00000000..232c5844 --- /dev/null +++ b/docs/payloads/extensions/commands/prefixed-help-response.json @@ -0,0 +1,34 @@ +{ + "id": "1234567890123456842", + "type": 0, + "content": "No Category:\n !help Shows this message\n !ping\n !announce\n\nType !help command for more info on a command.\nYou can also type !help category for more info on a category.", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:06:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/commands/prefixed-help-unknown-command.json b/docs/payloads/extensions/commands/prefixed-help-unknown-command.json new file mode 100644 index 00000000..00dc9c6c --- /dev/null +++ b/docs/payloads/extensions/commands/prefixed-help-unknown-command.json @@ -0,0 +1,34 @@ +{ + "id": "1234567890123456841", + "type": 0, + "content": "Unknown command.", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:04:02.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/commands/prefixed-help-user-msg.json b/docs/payloads/extensions/commands/prefixed-help-user-msg.json new file mode 100644 index 00000000..0062b28d --- /dev/null +++ b/docs/payloads/extensions/commands/prefixed-help-user-msg.json @@ -0,0 +1,32 @@ +{ + "id": "1234567890123456840", + "type": 0, + "content": "!help", + "channel_id": "9876543210987654321", + "author": { + "id": "543397958197182464", + "username": "Dorukyum", + "avatar": "db6e0450e03259908791b1e2af42b271", + "discriminator": "0", + "public_flags": 0 + }, + "member": { + "nick": null, + "roles": ["5555555555555555555"], + "joined_at": "2024-01-15T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:04:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/extensions/commands/prefixed-ping-response.json b/docs/payloads/extensions/commands/prefixed-ping-response.json new file mode 100644 index 00000000..2076a4b2 --- /dev/null +++ b/docs/payloads/extensions/commands/prefixed-ping-response.json @@ -0,0 +1,34 @@ +{ + "id": "1234567890123456837", + "type": 0, + "content": "Pong!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:00:02.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/extensions/commands/prefixed-ping-user-msg.json b/docs/payloads/extensions/commands/prefixed-ping-user-msg.json new file mode 100644 index 00000000..9307fed0 --- /dev/null +++ b/docs/payloads/extensions/commands/prefixed-ping-user-msg.json @@ -0,0 +1,32 @@ +{ + "id": "1234567890123456836", + "type": 0, + "content": "!ping", + "channel_id": "9876543210987654321", + "author": { + "id": "543397958197182464", + "username": "Dorukyum", + "avatar": "db6e0450e03259908791b1e2af42b271", + "discriminator": "0", + "public_flags": 0 + }, + "member": { + "nick": null, + "roles": ["5555555555555555555"], + "joined_at": "2024-01-15T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T18:00:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/getting-started/creating-first-bot-hello.json b/docs/payloads/getting-started/creating-first-bot-hello.json new file mode 100644 index 00000000..5b91db27 --- /dev/null +++ b/docs/payloads/getting-started/creating-first-bot-hello.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456782", + "type": 20, + "content": "Hey!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T14:20:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456792", + "type": 2, + "name": "hello", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/getting-started/more-features-embed.json b/docs/payloads/getting-started/more-features-embed.json new file mode 100644 index 00000000..a01ac895 --- /dev/null +++ b/docs/payloads/getting-started/more-features-embed.json @@ -0,0 +1,90 @@ +{ + "id": "1234567890123456783", + "type": 20, + "content": "Hello! Here's a cool embed.", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [ + { + "type": "rich", + "title": "My Amazing Embed", + "description": "Embeds are super easy, barely an inconvenience.", + "color": 5793266, + "fields": [ + { + "name": "A Normal Field", + "value": "A really nice field with some information. **The description as well as the fields support markdown!**", + "inline": false + }, + { + "name": "Inline Field 1", + "value": "Inline Field 1", + "inline": true + }, + { + "name": "Inline Field 2", + "value": "Inline Field 2", + "inline": true + }, + { + "name": "Inline Field 3", + "value": "Inline Field 3", + "inline": true + } + ], + "author": { + "name": "Pycord Team", + "icon_url": "https://guide.pycord.dev/logo.webp" + }, + "footer": { + "text": "Footer! No markdown here.", + "icon_url": "https://guide.pycord.dev/logo.webp" + }, + "thumbnail": { + "url": "https://guide.pycord.dev/logo.webp" + }, + "image": { + "url": "https://guide.pycord.dev/logo.webp" + } + } + ], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T14:25:30.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456793", + "type": 2, + "name": "count", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/getting-started/more-features-pycord-guide-embed.json b/docs/payloads/getting-started/more-features-pycord-guide-embed.json new file mode 100644 index 00000000..0e46ebff --- /dev/null +++ b/docs/payloads/getting-started/more-features-pycord-guide-embed.json @@ -0,0 +1,85 @@ +{ + "id": "1234567890123456784", + "type": 0, + "content": "", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [ + { + "type": "rich", + "title": "Pycord Guide", + "description": "The Pycord Guide is a detailed guide that explains how to use Pycord and all of its features.", + "url": "https://guide.pycord.dev", + "color": 5793266, + "fields": [ + { + "name": "Getting Started", + "value": "The Getting Started section explains how you can get a brand new bot created and running from scratch.", + "inline": false + }, + { + "name": "Interactions", + "value": "Interactions with Pycord", + "inline": true + }, + { + "name": "Extensions", + "value": "Pycord's various Extensions", + "inline": true + }, + { + "name": "Popular Topics", + "value": "Other Popular Topics", + "inline": true + }, + { + "name": "And More!", + "value": "We have so much more! Just explore, and you will find everything you need. If you want another page added, open an issue on the GitHub.", + "inline": false + } + ], + "author": { + "name": "Pycord Team", + "url": "https://github.com/Pycord-Development/guide", + "icon_url": "https://guide.pycord.dev/logo.webp" + }, + "footer": { + "text": "Created with 💖 by the Pycord Team & Contributors", + "icon_url": "https://guide.pycord.dev/logo.webp" + }, + "thumbnail": { + "url": "https://guide.pycord.dev/logo.webp" + }, + "image": { + "url": "https://guide.pycord.dev/logo.webp" + }, + "timestamp": "2021-01-09T00:00:00.000000+00:00" + } + ], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T14:30:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/application-commands/context-menus-account-creation.json b/docs/payloads/interactions/application-commands/context-menus-account-creation.json new file mode 100644 index 00000000..9b964ebf --- /dev/null +++ b/docs/payloads/interactions/application-commands/context-menus-account-creation.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456813", + "type": 20, + "content": "User's account was created on 2020-01-01", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T16:20:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456814", + "type": 2, + "name": "Account Creation Date", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/application-commands/context-menus-get-message-id-response.json b/docs/payloads/interactions/application-commands/context-menus-get-message-id-response.json new file mode 100644 index 00000000..ae3483c0 --- /dev/null +++ b/docs/payloads/interactions/application-commands/context-menus-get-message-id-response.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456815", + "type": 20, + "content": "Message ID: `930650407917748286`", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T16:25:05.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456816", + "type": 3, + "name": "Get Message ID", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/application-commands/context-menus-get-message-id-user-msg.json b/docs/payloads/interactions/application-commands/context-menus-get-message-id-user-msg.json new file mode 100644 index 00000000..d67bf5c3 --- /dev/null +++ b/docs/payloads/interactions/application-commands/context-menus-get-message-id-user-msg.json @@ -0,0 +1,32 @@ +{ + "id": "930650407917748286", + "type": 0, + "content": "Do. Or do not. There is no try.", + "channel_id": "9876543210987654321", + "author": { + "id": "543397958197182464", + "username": "Dorukyum", + "avatar": "db6e0450e03259908791b1e2af42b271", + "discriminator": "0", + "public_flags": 0 + }, + "member": { + "nick": null, + "roles": ["5555555555555555555"], + "joined_at": "2024-01-15T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T16:25:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/interactions/application-commands/slash-commands-add.json b/docs/payloads/interactions/application-commands/slash-commands-add.json new file mode 100644 index 00000000..7fbbf688 --- /dev/null +++ b/docs/payloads/interactions/application-commands/slash-commands-add.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456807", + "type": 20, + "content": "The sum of 1 and 1 is 2.", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T16:05:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456808", + "type": 2, + "name": "add", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/application-commands/slash-commands-animal.json b/docs/payloads/interactions/application-commands/slash-commands-animal.json new file mode 100644 index 00000000..ae6765ab --- /dev/null +++ b/docs/payloads/interactions/application-commands/slash-commands-animal.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456811", + "type": 20, + "content": "You picked an animal type of `Marine` that led you to pick `Shark`!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T16:15:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456812", + "type": 2, + "name": "animal", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/application-commands/slash-commands-join.json b/docs/payloads/interactions/application-commands/slash-commands-join.json new file mode 100644 index 00000000..ec574858 --- /dev/null +++ b/docs/payloads/interactions/application-commands/slash-commands-join.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456809", + "type": 20, + "content": "When you join \"Py\" and \"cord\", you get: \"Pycord\".", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T16:10:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456810", + "type": 2, + "name": "join", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/application-commands/slash-commands-ping.json b/docs/payloads/interactions/application-commands/slash-commands-ping.json new file mode 100644 index 00000000..666f8c2a --- /dev/null +++ b/docs/payloads/interactions/application-commands/slash-commands-ping.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456805", + "type": 20, + "content": "Pong! Latency is 335ms.", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T16:00:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456806", + "type": 2, + "name": "ping", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/index/buttons-example.json b/docs/payloads/interactions/index/buttons-example.json new file mode 100644 index 00000000..4195c936 --- /dev/null +++ b/docs/payloads/interactions/index/buttons-example.json @@ -0,0 +1,50 @@ +{ + "id": "1234567890123456802", + "type": 0, + "content": "Discord Buttons are awesome!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T15:25:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [ + { + "type": 1, + "components": [ + { + "type": 2, + "style": 1, + "label": "Click me!", + "emoji": { + "id": null, + "name": "😎" + }, + "custom_id": "button_click_two" + } + ] + } + ], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/index/modal-button.json b/docs/payloads/interactions/index/modal-button.json new file mode 100644 index 00000000..dfc99f95 --- /dev/null +++ b/docs/payloads/interactions/index/modal-button.json @@ -0,0 +1,46 @@ +{ + "id": "1234567890123456804", + "type": 0, + "content": "You can spawn a modal by clicking a button!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T15:35:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [ + { + "type": 1, + "components": [ + { + "type": 2, + "style": 1, + "label": "Click me for a modal", + "custom_id": "modal_button" + } + ] + } + ], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/index/ping-response.json b/docs/payloads/interactions/index/ping-response.json new file mode 100644 index 00000000..af525f62 --- /dev/null +++ b/docs/payloads/interactions/index/ping-response.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456786", + "type": 20, + "content": "Pong! Latency is 335ms.", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T15:10:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456795", + "type": 2, + "name": "ping", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/index/reverse-message-response.json b/docs/payloads/interactions/index/reverse-message-response.json new file mode 100644 index 00000000..81cac8b6 --- /dev/null +++ b/docs/payloads/interactions/index/reverse-message-response.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456787", + "type": 20, + "content": "Message 930650407917748286 reversed is \"!dlroW olleH\"", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T15:15:05.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456796", + "type": 3, + "name": "Reverse Message", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/index/reverse-message-user-msg.json b/docs/payloads/interactions/index/reverse-message-user-msg.json new file mode 100644 index 00000000..bed19a21 --- /dev/null +++ b/docs/payloads/interactions/index/reverse-message-user-msg.json @@ -0,0 +1,32 @@ +{ + "id": "9305650407917748286", + "type": 0, + "content": "Hello World!", + "channel_id": "9876543210987654321", + "author": { + "id": "543397958197182464", + "username": "Dorukyum", + "avatar": "db6e0450e03259908791b1e2af42b271", + "discriminator": "0", + "public_flags": 0 + }, + "member": { + "nick": null, + "roles": ["5555555555555555555"], + "joined_at": "2024-01-15T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T15:15:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/interactions/index/select-menu-example.json b/docs/payloads/interactions/index/select-menu-example.json new file mode 100644 index 00000000..6f325b6d --- /dev/null +++ b/docs/payloads/interactions/index/select-menu-example.json @@ -0,0 +1,131 @@ +{ + "id": "1234567890123456803", + "type": 0, + "content": "", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T15:30:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [ + { + "type": 1, + "components": [ + { + "type": 3, + "custom_id": "select_menu_1", + "options": [ + { + "label": "Label", + "value": "option_1", + "description": "Description", + "emoji": { + "id": null, + "name": "👀" + } + }, + { + "label": "Label no Emoji", + "value": "option_2", + "description": "Description no Emoji" + } + ], + "placeholder": "Select an option", + "min_values": 1, + "max_values": 1 + } + ] + }, + { + "type": 1, + "components": [ + { + "type": 3, + "custom_id": "select_menu_2", + "options": [ + { + "label": "Test", + "value": "test_option", + "description": "Test", + "emoji": { + "id": null, + "name": "🔥" + } + } + ], + "placeholder": "Disabled Select Menu", + "disabled": true, + "min_values": 1, + "max_values": 1 + } + ] + }, + { + "type": 1, + "components": [ + { + "type": 3, + "custom_id": "select_menu_3", + "options": [ + { + "label": "BobDotCom", + "value": "bob", + "description": "Hi there 👋, I'm BobDotCom" + }, + { + "label": "Dorukyum", + "value": "dorukyum", + "description": "Hi there 👋, I'm Dorukyum" + }, + { + "label": "Lala Sabathil", + "value": "lala", + "description": "Hi there, I'm Lala Sabathil" + }, + { + "label": "Paillat", + "value": "paillat", + "description": ":3" + }, + { + "label": "Swayam", + "value": "swayam", + "description": "Hi 👋, I'm Swayam" + }, + { + "label": "Robocord", + "value": "robocord", + "description": "Nvm I'm a silly robot" + } + ], + "placeholder": "Overflow", + "min_values": 1, + "max_values": 1 + } + ] + } + ], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/index/user-age-bob-response.json b/docs/payloads/interactions/index/user-age-bob-response.json new file mode 100644 index 00000000..c36330fc --- /dev/null +++ b/docs/payloads/interactions/index/user-age-bob-response.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456789", + "type": 20, + "content": "User is 1 week old.", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T15:20:05.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456797", + "type": 2, + "name": "User Age", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/index/user-age-dorukyum-msg.json b/docs/payloads/interactions/index/user-age-dorukyum-msg.json new file mode 100644 index 00000000..17d9e890 --- /dev/null +++ b/docs/payloads/interactions/index/user-age-dorukyum-msg.json @@ -0,0 +1,32 @@ +{ + "id": "1234567890123456788", + "type": 0, + "content": "User has been on Discord for a long time", + "channel_id": "9876543210987654321", + "author": { + "id": "543397958197182464", + "username": "Dorukyum", + "avatar": "db6e0450e03259908791b1e2af42b271", + "discriminator": "0", + "public_flags": 0 + }, + "member": { + "nick": null, + "roles": ["5555555555555555555"], + "joined_at": "2024-01-15T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T15:20:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/interactions/index/user-age-dorukyum-response.json b/docs/payloads/interactions/index/user-age-dorukyum-response.json new file mode 100644 index 00000000..c14c69df --- /dev/null +++ b/docs/payloads/interactions/index/user-age-dorukyum-response.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456800", + "type": 20, + "content": "User is 40 years old.", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T15:20:10.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456798", + "type": 2, + "name": "User Age", + "user": { + "id": "543397958197182464", + "username": "Dorukyum", + "avatar": "db6e0450e03259908791b1e2af42b271", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/interactions/index/user-age-dorukyum-thinking.json b/docs/payloads/interactions/index/user-age-dorukyum-thinking.json new file mode 100644 index 00000000..9f9518f9 --- /dev/null +++ b/docs/payloads/interactions/index/user-age-dorukyum-thinking.json @@ -0,0 +1,32 @@ +{ + "id": "1234567890123456801", + "type": 0, + "content": "🤔", + "channel_id": "9876543210987654321", + "author": { + "id": "543397958197182464", + "username": "Dorukyum", + "avatar": "db6e0450e03259908791b1e2af42b271", + "discriminator": "0", + "public_flags": 0 + }, + "member": { + "nick": null, + "roles": ["5555555555555555555"], + "joined_at": "2024-01-15T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T15:20:15.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/interactions/ui-components/buttons-button-response.json b/docs/payloads/interactions/ui-components/buttons-button-response.json new file mode 100644 index 00000000..a6602191 --- /dev/null +++ b/docs/payloads/interactions/ui-components/buttons-button-response.json @@ -0,0 +1,63 @@ +{ + "id": "1234567890123456785", + "type": 20, + "content": "This is a button!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T15:00:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [ + { + "type": 1, + "components": [ + { + "type": 2, + "style": 1, + "label": "Click me!", + "emoji": { + "id": null, + "name": "😎" + }, + "custom_id": "button_click_one" + } + ] + } + ], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456794", + "type": 2, + "name": "button", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/more/contributing/paillat-example-msg.json b/docs/payloads/more/contributing/paillat-example-msg.json new file mode 100644 index 00000000..cdeb0450 --- /dev/null +++ b/docs/payloads/more/contributing/paillat-example-msg.json @@ -0,0 +1,52 @@ +{ + "type": 0, + "tts": false, + "timestamp": "2025-10-02T16:50:34.029000+00:00", + "pinned": false, + "mentions": [], + "mention_roles": [], + "mention_everyone": false, + "id": 1423351465761706064, + "flags": 0, + "embeds": [], + "edited_timestamp": null, + "content": "Hello, I am an example message !", + "components": [], + "channel_id": "1317208024682725426", + "author": { + "username": "paillat", + "public_flags": 4194368, + "primary_guild": { + "tag": "CAP", + "identity_guild_id": "1317206872763404478", + "identity_enabled": true, + "badge": "d7234d6824ca9ead59ffdcd76be30277" + }, + "id": "707196665668436019", + "global_name": "Paillat", + "display_name_styles": null, + "discriminator": "0", + "collectibles": { + "nameplate": { + "sku_id": "1382845914225442886", + "palette": "bubble_gum", + "label": "COLLECTIBLES_NAMEPLATES_VOL_3_BONSAI_A11Y", + "expires_at": null, + "asset": "nameplates/nameplates_v3/bonsai/" + } + }, + "clan": { + "tag": "CAP", + "identity_guild_id": "1317206872763404478", + "identity_enabled": true, + "badge": "d7234d6824ca9ead59ffdcd76be30277" + }, + "avatar_decoration_data": { + "sku_id": "1409898407874531328", + "expires_at": null, + "asset": "a_34f162fc767aeb087d8d54a6f1ce697b" + }, + "avatar": "186cec21194b515a264c6be8ebac252f" + }, + "attachments": [] +} diff --git a/docs/payloads/popular-topics/error-handling/avatar-dm-response.json b/docs/payloads/popular-topics/error-handling/avatar-dm-response.json new file mode 100644 index 00000000..05e9a03e --- /dev/null +++ b/docs/payloads/popular-topics/error-handling/avatar-dm-response.json @@ -0,0 +1,51 @@ +{ + "id": "1234567890123456829", + "type": 0, + "content": "", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "attachments": [], + "embeds": [ + { + "type": "rich", + "title": "Avatar", + "description": "Here's your enlarged avatar, BobDotCom!", + "color": 5793266, + "image": { + "url": "https://cdn.discordapp.com/avatars/690420846774321221/4810eacf552fcbaf2e5541885b753705.png" + } + } + ], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T17:15:02.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "message_reference": { + "channel_id": "9876543210987654321", + "message_id": "1234567890123456828" + }, + "referenced_message": { + "id": "1234567890123456828", + "type": 0, + "content": "!avatar", + "author": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0" + } + }, + "application_id": "882743264564875285" +} diff --git a/docs/payloads/popular-topics/error-handling/avatar-dm-user-msg.json b/docs/payloads/popular-topics/error-handling/avatar-dm-user-msg.json new file mode 100644 index 00000000..1ac0412d --- /dev/null +++ b/docs/payloads/popular-topics/error-handling/avatar-dm-user-msg.json @@ -0,0 +1,24 @@ +{ + "id": "1234567890123456828", + "type": 0, + "content": "!avatar", + "channel_id": "9876543210987654321", + "author": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T17:15:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/popular-topics/error-handling/avatar-guild-error.json b/docs/payloads/popular-topics/error-handling/avatar-guild-error.json new file mode 100644 index 00000000..301978d9 --- /dev/null +++ b/docs/payloads/popular-topics/error-handling/avatar-guild-error.json @@ -0,0 +1,49 @@ +{ + "id": "1234567890123456831", + "type": 0, + "content": "Sorry, you can only use this in private messages!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T17:18:02.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "message_reference": { + "channel_id": "9876543210987654321", + "message_id": "1234567890123456830" + }, + "referenced_message": { + "id": "1234567890123456830", + "type": 0, + "content": "!avatar", + "author": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0" + } + }, + "application_id": "882743264564875285" +} diff --git a/docs/payloads/popular-topics/error-handling/avatar-guild-user-msg.json b/docs/payloads/popular-topics/error-handling/avatar-guild-user-msg.json new file mode 100644 index 00000000..ac644abd --- /dev/null +++ b/docs/payloads/popular-topics/error-handling/avatar-guild-user-msg.json @@ -0,0 +1,32 @@ +{ + "id": "1234567890123456830", + "type": 0, + "content": "!avatar", + "channel_id": "9876543210987654321", + "author": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + }, + "member": { + "nick": null, + "roles": ["6666666666666666666"], + "joined_at": "2024-01-10T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T17:18:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/popular-topics/error-handling/feedback-response.json b/docs/payloads/popular-topics/error-handling/feedback-response.json new file mode 100644 index 00000000..5d9d97e6 --- /dev/null +++ b/docs/payloads/popular-topics/error-handling/feedback-response.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456817", + "type": 20, + "content": "Hey, Dorukyum! Send your feedback within the next 30 seconds please!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T17:00:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456818", + "type": 2, + "name": "feedback", + "user": { + "id": "543397958197182464", + "username": "Dorukyum", + "avatar": "db6e0450e03259908791b1e2af42b271", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/popular-topics/error-handling/feedback-thanks.json b/docs/payloads/popular-topics/error-handling/feedback-thanks.json new file mode 100644 index 00000000..422a30ad --- /dev/null +++ b/docs/payloads/popular-topics/error-handling/feedback-thanks.json @@ -0,0 +1,34 @@ +{ + "id": "1234567890123456820", + "type": 0, + "content": "Thanks for the feedback!\nReceived feedback: `Great bot!`", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T17:00:20.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/popular-topics/error-handling/feedback-timeout-error.json b/docs/payloads/popular-topics/error-handling/feedback-timeout-error.json new file mode 100644 index 00000000..c7d335bf --- /dev/null +++ b/docs/payloads/popular-topics/error-handling/feedback-timeout-error.json @@ -0,0 +1,34 @@ +{ + "id": "1234567890123456823", + "type": 0, + "content": "Timed out, please try again!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T17:05:35.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/popular-topics/error-handling/feedback-timeout-response.json b/docs/payloads/popular-topics/error-handling/feedback-timeout-response.json new file mode 100644 index 00000000..11702903 --- /dev/null +++ b/docs/payloads/popular-topics/error-handling/feedback-timeout-response.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456821", + "type": 20, + "content": "Hey, Dorukyum! Send your feedback within the next 30 seconds please!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T17:05:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456822", + "type": 2, + "name": "feedback", + "user": { + "id": "543397958197182464", + "username": "Dorukyum", + "avatar": "db6e0450e03259908791b1e2af42b271", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/popular-topics/error-handling/feedback-user-message.json b/docs/payloads/popular-topics/error-handling/feedback-user-message.json new file mode 100644 index 00000000..f5351dc3 --- /dev/null +++ b/docs/payloads/popular-topics/error-handling/feedback-user-message.json @@ -0,0 +1,32 @@ +{ + "id": "1234567890123456819", + "type": 0, + "content": "Great bot!", + "channel_id": "9876543210987654321", + "author": { + "id": "543397958197182464", + "username": "Dorukyum", + "avatar": "db6e0450e03259908791b1e2af42b271", + "discriminator": "0", + "public_flags": 0 + }, + "member": { + "nick": null, + "roles": ["5555555555555555555"], + "joined_at": "2024-01-15T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T17:00:15.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [] +} diff --git a/docs/payloads/popular-topics/error-handling/ping-cooldown-error.json b/docs/payloads/popular-topics/error-handling/ping-cooldown-error.json new file mode 100644 index 00000000..f50604d2 --- /dev/null +++ b/docs/payloads/popular-topics/error-handling/ping-cooldown-error.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456834", + "type": 20, + "content": "This command is currently on cooldown!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T17:20:05.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456835", + "type": 2, + "name": "ping", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/popular-topics/error-handling/ping-cooldown-first.json b/docs/payloads/popular-topics/error-handling/ping-cooldown-first.json new file mode 100644 index 00000000..14cd6a45 --- /dev/null +++ b/docs/payloads/popular-topics/error-handling/ping-cooldown-first.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456832", + "type": 20, + "content": "Pong! `49 ms`.", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T17:20:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456833", + "type": 2, + "name": "ping", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/popular-topics/error-handling/secret-non-owner-response.json b/docs/payloads/popular-topics/error-handling/secret-non-owner-response.json new file mode 100644 index 00000000..8b8d70dd --- /dev/null +++ b/docs/payloads/popular-topics/error-handling/secret-non-owner-response.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456826", + "type": 20, + "content": "Sorry, only the bot owner can use this command!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T17:12:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456827", + "type": 2, + "name": "secret", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/popular-topics/error-handling/secret-owner-response.json b/docs/payloads/popular-topics/error-handling/secret-owner-response.json new file mode 100644 index 00000000..78ac814b --- /dev/null +++ b/docs/payloads/popular-topics/error-handling/secret-owner-response.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456824", + "type": 20, + "content": "Hey Dorukyum! This is a secret command!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T17:10:00.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456825", + "type": 2, + "name": "secret", + "user": { + "id": "543397958197182464", + "username": "Dorukyum", + "avatar": "db6e0450e03259908791b1e2af42b271", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/voice/playing-now-playing.json b/docs/payloads/voice/playing-now-playing.json new file mode 100644 index 00000000..c3a55db4 --- /dev/null +++ b/docs/payloads/voice/playing-now-playing.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456781", + "type": 20, + "content": "Now playing: `Never Gonna Give You Up`", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T13:15:30.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456791", + "type": 2, + "name": "play", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/payloads/voice/receiving-finished-recording.json b/docs/payloads/voice/receiving-finished-recording.json new file mode 100644 index 00000000..8083b6ca --- /dev/null +++ b/docs/payloads/voice/receiving-finished-recording.json @@ -0,0 +1,42 @@ +{ + "id": "1234567890123456780", + "type": 0, + "content": "finished recording audio for: <@690420846774321221>", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [ + { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + ], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T12:31:15.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285" +} diff --git a/docs/payloads/voice/receiving-record-response.json b/docs/payloads/voice/receiving-record-response.json new file mode 100644 index 00000000..d7fbf51d --- /dev/null +++ b/docs/payloads/voice/receiving-record-response.json @@ -0,0 +1,47 @@ +{ + "id": "1234567890123456789", + "type": 20, + "content": "Started recording!", + "channel_id": "9876543210987654321", + "author": { + "id": "882743264564875285", + "username": "Robocord", + "avatar": "e1fb97ca1fe3466357e39a7be5f274f1", + "discriminator": "0", + "public_flags": 65536, + "bot": true + }, + "member": { + "nick": null, + "roles": ["2222222222222222222"], + "joined_at": "2024-01-01T00:00:00.000000+00:00", + "premium_since": null, + "deaf": false, + "mute": false + }, + "attachments": [], + "embeds": [], + "mentions": [], + "mention_roles": [], + "pinned": false, + "mention_everyone": false, + "tts": false, + "timestamp": "2024-10-01T12:30:45.123456+00:00", + "edited_timestamp": null, + "flags": 0, + "components": [], + "application_id": "882743264564875285", + "interaction": { + "id": "1234567890123456790", + "type": 2, + "name": "record", + "user": { + "id": "690420846774321221", + "username": "BobDotCom", + "avatar": "4810eacf552fcbaf2e5541885b753705", + "discriminator": "0", + "public_flags": 0 + } + }, + "webhook_id": "882743264564875285" +} diff --git a/docs/popular-topics/cogs.md b/docs/popular-topics/cogs.md new file mode 100644 index 00000000..2275722e --- /dev/null +++ b/docs/popular-topics/cogs.md @@ -0,0 +1,144 @@ +--- +title: Cogs +--- + +Cogs, often known as modules or extensions, are used to organize commands into groups. This is useful +for grouping commands that have the same general idea (such as moderation commands). This also helps +to avoid making your bot's files messy and cluttered. + +## Getting Started + +First, you'll need to create a folder to store your cogs, e.g. `cogs/`. + +Then, create a file inside the folder, e.g. `cogs/greetings.py`. By convention, the file name should +be the same as the name of the cog or module. + +We can then create the cog. + +```python title="./cogs/greetings.py" +import discord +from discord.ext import commands + + +class Greetings( + commands.Cog +): # create a class for our cog that inherits from commands.Cog + # this class is used to create a cog, which is a module that can be added to the bot + + def __init__( + self, bot + ): # this is a special method that is called when the cog is loaded + self.bot = bot + + @commands.command() # creates a prefixed command + async def hello( + self, ctx + ): # all methods now must have both self and ctx parameters + await ctx.send("Hello!") + + @discord.slash_command() # we can also add application commands + async def goodbye(self, ctx): + await ctx.respond("Goodbye!") + + @discord.user_command() + async def greet(self, ctx, member: discord.Member): + await ctx.respond(f"{ctx.author.mention} says hello to {member.mention}!") + + math = discord.SlashCommandGroup( + "math", "Spooky math stuff" + ) # create a Slash Command Group called "math" + advanced_math = math.create_subgroup("advanced", "super hard math commands!") + + @math.command() + async def add(self, ctx, a: int, b: int): + c = a + b + await ctx.respond(f"{a} + {b} is {c}.") + + @advanced_math.command() + async def midpoint(self, ctx, x1: float, y1: float, x2: float, y2: float): + mid_x = (x1 + x2) / 2 + mid_y = (y1 + y2) / 2 + await ctx.respond( + f"The midpoint between those coordinates is ({mid_x}, {mid_y})." + ) + + @commands.Cog.listener() # we can add event listeners to our cog + async def on_member_join( + self, member + ): # this is called when a member joins the server + # you must enable the proper intents + # to access this event. + # See the Popular-Topics/Intents page for more info + await member.send("Welcome to the server!") + + +def setup(bot): # this is called by Pycord to setup the cog + bot.add_cog(Greetings(bot)) # add the cog to the bot +``` + +You can add any number of commands to your cog, as well as event listeners. However, this code will +not work on its own. In your main bot file, you must add the following code: + +```python +bot.load_extension("cogs.greetings") +``` + +This loads the file `cogs/greetings.py` and adds it to the bot. +The argument of `load_extension` should be your cog's path (e.g. cogs/greetings.py) without the file +extension and with the `/` replaced with `.` + +If you have multiple cogs, you can add them all at once by adding the following code: + +```python +cogs_list = ["greetings", "moderation", "fun", "owner"] + +for cog in cogs_list: + bot.load_extension(f"cogs.{cog}") +``` + +## Cog Rules + +When using a cog instead of the main file, there are some changes you have to make to your code. This +is because cogs work slightly different from a regular file. + +### The `self` variable + +The self variable is a variable that represents a class. In the case of cogs, `self` represents +the cog. In the `__init__` function, you can see that we have `self.bot = bot`. `bot` represents your +`discord.Bot` or `discord.ext.commands.Bot` instance, which is used for some functions. + +This means that instead of using functions that would usually be accessed via `bot`, you now need +to access them via `self.bot` + +Because we're in a class, all of our commands are methods of that class. Because of this, all of our +functions need to have `self` as the first parameter, where `self` is the cog. Without this, we +wouldn't be able to access our bot instance. + +### Creating Commands + +When creating prefixed commands, your decorator would usually be something like `@bot.command()`. If you're using +cogs, this isn't the case. In a cog, you can't access the bot instance outside of functions, so to +register a function as a command, you must instead use `@commands.command()`. + +Similar to prefixed commands, you'll have to use either the `@discord.slash_command()`, `@discord.user_command()`, +or `@discord.message_command()` decorators for Application Commands. + +Also, when creating a command, make sure that it is indented. If we want a command to be actually +inside a cog, it has to be inside your cog's class. If the command is not inside the cog, +your command becomes useless. + +### Events + +When creating events, you can no longer use `@bot.event` as a decorator. This is because we cannot +access the `bot` variable outside a function. To make an event, you have to use the `ext.commands` +method, `@commands.Cog.listener()`. Events also need `self` as their first parameter. + +And that's it! Cogs are a simple and easy way of organizing your code. Now you can check out how to +create a help command [here](../extensions/commands/help-command.md). + +!!! info "Related Topics" + + - [Creating a Help Command](../extensions/commands/help-command.md) + - [Rules and Common Practices](../getting-started/rules-and-common-practices.md) + - [Prefixed Commands](../extensions/commands/prefixed-commands.md) + - [Application Commands](../interactions/index.md#application-commands) diff --git a/docs/popular-topics/error-handling.md b/docs/popular-topics/error-handling.md new file mode 100644 index 00000000..09f045c5 --- /dev/null +++ b/docs/popular-topics/error-handling.md @@ -0,0 +1,325 @@ +--- +title: Error Handling +description: All about handling errors. +--- + +## About + +When using the library, errors are frequently raised due to various reasons. These reasons range from the Discord API +failing your bot's request due to missing permissions or an invalid syntax error. + +Before going into error handling, it's best that you learn the basic ways of handling errors. A good resource is: + +- [W3Schools' Guide to Python Try-Except Statements](https://www.w3schools.com/python/python_try_except.asp) + +## Basic Handling { #basic } + +The most basic way to handle errors is to tackle it at the source. This can be done like so: + +```python title="./main.py" +# This code requires the `message_content` privileged intent for prefixed commands. + +import asyncio + +import discord + +intents = discord.Intents.default() +intents.message_content = True + +bot = discord.Bot(intents=intents) + + +@bot.slash_command(description="Gets some feedback.") +@discord.option("name", description="Enter your name.") +async def feedback(ctx: discord.ApplicationContext, name: str): + try: + await ctx.respond( + f"Hey, {name}! Send your feedback within the next 30 seconds please!" + ) + + def is_author(m: discord.Message): + return m.author.id == ctx.author.id + + feedback_message = await bot.wait_for("message", check=is_author, timeout=30.0) + await ctx.send( + f"Thanks for the feedback!\nReceived feedback: `{feedback_message.content}`" + ) + except asyncio.TimeoutError: + await ctx.send("Timed out, please try again!") + + +bot.run("TOKEN") +``` + +If you respond within 30 seconds, the interaction will look like so: + +``` +# link with feedback-response.json +# link with feedback-user-message.json +# link with feedback-thanks.json +``` + +
+ +Otherwise, if you don't respond in time, the interaction will go as follows: + +``` +# link with feedback-timeout-response.json +# link with feedback-timeout-error.json +``` + +
+ +This basic method of error handling can be extended to handle +many other errors including ones raised directly by py-cord. + +## Per-Command Handling { #percommand } + +This type of error handling allows you to handle errors per each command you have on your bot. +Each and every command can have it's own error handler made to handle specific errors that each command may raise! + +An example of per-command error handling is as follows: + +!!! note "Bridge Commands" + + As of writing this guide page, bridge commands do not currently support per-command error handling. + + For these types of commands, it is recommended to utilize global error handling + until [the feature](https://github.com/Pycord-Development/pycord/issues/1388) is added. + +```python title="./main.py" +import discord +from discord.ext import commands + +bot = discord.Bot(owner_id=...) # Your Discord user ID goes in owner_id + + +@bot.slash_command(description="A private command...") +@commands.is_owner() # This decorator will raise commands.NotOwner if the invoking user doesn't have the owner_id +async def secret(ctx: discord.ApplicationContext): + await ctx.respond(f"Hey {ctx.author.name}! This is a secret command!") + + +@secret.error +async def on_application_command_error( + ctx: discord.ApplicationContext, error: discord.DiscordException +): + if isinstance(error, commands.NotOwner): + await ctx.respond("Sorry, only the bot owner can use this command!") + else: + raise error # Here we raise other errors to ensure they aren't ignored + + +bot.run("TOKEN") +``` + +If your ID is registered as the owner ID, you'll get the following: + +``` +# link with secret-owner-response.json +``` + +
+ +Any other user whose ID doesn't match the bot owner's will get the following: + +``` +# link with secret-non-owner-response.json +``` + +
+ +This local (per-command) error handler can also be used to handle the same types of errors that standard try-except +statements can handle. This is done by using the same method as above with the `isinstance` built-in function. + +## Per-Cog Handling { #percog } + +Adding error handlers per-command can be quite the task in terms of work if you have a lot. If you have happened to +group your commands in cogs, then you're in luck! You can create an error handler that is specific to a cog and +handles all errors raised by commands inside that cog. + +Here's an example of a bot with a cog that implements its own error handling: + +```python title="./cogs/dm.py" +# This cog is for DM only commands! Sadly, we only have 1 command here right now... + +import discord +from discord.ext import commands + + +class DM(commands.Cog): + def __init__(self, bot: commands.Bot): + self.bot = bot + + @commands.command() + @commands.dm_only() # This decorator will raise commands.PrivateMessageOnly if invoked in a guild context. + async def avatar(self, ctx: commands.Context): + embed = discord.Embed( + title="Avatar", + description=f"Here's your enlarged avatar, {ctx.author.name}!", + color=ctx.author.top_role.color, + ) + embed.set_image(url=ctx.author.display_avatar.url) + await ctx.send(embed=embed, reference=ctx.message) + + async def cog_command_error( + self, ctx: commands.Context, error: commands.CommandError + ): + if isinstance(error, commands.PrivateMessageOnly): + await ctx.send( + "Sorry, you can only use this in private messages!", + reference=ctx.message, + ) + else: + raise error # Here we raise other errors to ensure they aren't ignored + + +def setup(bot: commands.Bot): + bot.add_cog(DM(bot)) +``` + +```python title="./main.py" +# This code requires the `message_content` privileged intent for prefixed commands. + +# This is the main file where we load the DM cog and run the bot. + +import discord +from discord.ext import commands + +intents = discord.Intents.default() +intents.message_content = True + +bot = commands.Bot(command_prefix=commands.when_mentioned_or("!")) +bot.load_extension("cogs.dm") +bot.run("TOKEN") +``` + +If you use this command in a DM context, you'll get the following: + +``` +# link with avatar-dm-user-msg.json +# link with avatar-dm-response.json +``` + +
+ +Otherwise, if used in a guild context: + +``` +# link with avatar-guild-user-msg.json +# link with avatar-guild-error.json +``` + +
+ +Per-cog error handling comes in very handy as you can relegate all of your error handling to a single function instead +of spreading it out across several per-command error handlers or inside the commands themselves. + +## Global Handling { #global } + +If separating your error handling is not how you would like to handle errors, then global error handling is the way to +go. This method of handling allows you to relegate all handling to a single function that resides within your bot +instance. + +A non-subclassed bot would implement this like so: + +```python title="./main.py" +import discord +from discord.ext import commands + +bot = discord.Bot() + + +@bot.slash_command(description="Get the bot's current latency!") +@commands.cooldown(1, 30, commands.BucketType.user) +# ^ This decorator allows one usage of the command every 30 seconds and raises commands.CommandOnCooldown if exceeded +async def ping(ctx: discord.ApplicationContext): + await ctx.respond(f"Pong! `{int(bot.latency * 1000)} ms`.") + + +@bot.event +async def on_application_command_error( + ctx: discord.ApplicationContext, error: discord.DiscordException +): + if isinstance(error, commands.CommandOnCooldown): + await ctx.respond("This command is currently on cooldown!") + else: + raise error # Here we raise other errors to ensure they aren't ignored + + +bot.run("TOKEN") +``` + +If you've subclassed your bot, the `on_application_command_error` event will be placed inside the subclass without a +`bot.event` decorator and `bot.slash_command` will be replaced with `discord.slash_command`. + +The error handling used above will yield this interaction if the command is used again too quickly: + +``` +# link with ping-cooldown-first.json +# link with ping-cooldown-error.json +``` + +
+ +The only issue regarding global error handling is that, if you have a large amount of commands, the global handler may +start to get crammed with a lot of code. This is where all the previously mentioned handlers can take their place! + +## FAQ + +#### Why does the example in per-cog handling have self at the start of its function signatures? + +This is a feature of classes and allows you to reference the cog object as `self` and get access to the bot object +passed at initialization through `self.bot`. + +If this is new to you, we recommend checking out these helpful resources to learn more about classes and cogs: + +- [W3Schools' Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) +- [Our Cogs Guide Page](cogs.md) + +#### How many errors can I handle in a single error handler? + +While all the examples in this guide page only handle one specific error and re-raise all others, all of these +error handlers can be extended to catch many errors. + +In [basic handling](#basic) (i.e. try/except statements) you can do one of two things: + +- Explicitly handle the errors you know might get raised and then have a broad `except Exception as exc:` statement + as a catch-all. +- Catch any and all errors via the catch-all statement mentioned above. + +In [per-command](#percommand), [per-cog](#percog), and [global handling](#global), you can use elif clauses with the +built-in isinstance function to catch specific errors. Atop of this, an else clause can be used to catch any other +errors you either don't want to handle or want to relegate to a different error handler. + +#### Can I use more than one type of error handler at once? + +Thankfully, all of these different ways of error handling can be mixed together, so you don't have to pick just one! +For commands that raise specific errors that no other commands will raise, you can use [per-command](#percommand). +For cogs that raise specific errors that no other cogs will raise, use [per-cog](#percog)! Lastly, for errors that +occur frequently across all commands and cogs, use [global handling](#global)! + +However, one important note to remember is that you should always raise the error again in an error handler if it +isn't handled there! If you don't do this, the error will go ignored and your other handlers won't have a chance to +do their work! + +#### What's the difference between slash and prefixed command error handling? + +Although most examples shown here use slash commands, the [per-cog handling](#percog) section presents a prefixed +command. The main difference you may notice is the change in command signature. + +To make the distinguishing features apparent: + +- Slash commands use `on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException)` + as presented in the [per-command](#percommand) and [global handling](#global) examples. +- Prefixed commands use `on_command_error(ctx: commands.Context, error: commands.CommandError)` as presented in the + [per-cog handling](#percog) example. + +This distinction is made as both types of commands need their own system for handling errors that are specific to +themselves. + +!!! info "Related Topics" + + - [Slash Commands](../interactions/application-commands/slash-commands.md) + - [Prefixed Commands](../extensions/commands/prefixed-commands.md) + - [Cogs](cogs.md) diff --git a/docs/popular-topics/index.md b/docs/popular-topics/index.md new file mode 100644 index 00000000..5095a353 --- /dev/null +++ b/docs/popular-topics/index.md @@ -0,0 +1,15 @@ +--- +title: Popular Topics +icon: lucide/flame +--- + +# Popular Topics + +Common topics and patterns that come up when building Discord bots with Pycord. + +- [Cogs](cogs.md) +- [Error Handling](error-handling.md) +- [Intents](intents.md) +- [Sharding](sharding.md) +- [Subclassing Bots](subclassing-bots.md) +- [Threads](threads.md) diff --git a/docs/popular-topics/intents.md b/docs/popular-topics/intents.md new file mode 100644 index 00000000..64b7032c --- /dev/null +++ b/docs/popular-topics/intents.md @@ -0,0 +1,47 @@ +--- +title: Intents +description: All about intents in Discord. +--- + +## What are Intents? + +Intents allow bot developers to "subscribe" to specific events in Discord. This is useful for bots that need to respond to specific events, such as when a user joins a server or sends a message. You could choose to enable all intents or to enable only specific intents that your bot requires. + +## How do I enable intents? + +!!! important + + Remember that [Privileged Intents](#what-are-privileged-intents) require you to enable them in the Discord Developer Portal. Verified Discord Bots that don't already have access to them will need to request Discord to allow access. + +=== "Enabling all intents" + + ```python + import discord + + bot = discord.Bot(intents=discord.Intents.all()) + ``` + +=== "Enabling specific intents" + + You can view a list of intents and the events they subscribe to [here](https://docs.pycord.dev/en/stable/api/data_classes.html#discord.Intents). + + ```python title="Enabling Intents" + import discord + + bot = discord.Bot(intents=discord.intents.members(bans=True, guilds=True)) + ``` + +## What are Privileged Intents? + +Discord defines some intents as "privileged" because of the sensitive information they contain. Currently, there are three privileged intents: `members`, `presences`, and `message_content`. These intents must be enabled in your bot's Developer Portal. Once your bot reaches 100 servers, you will need to verify your bot for these intents to keep working and for your bot to be able to be invited to more guilds. + +!!! tip + + Only enable these intents if you need them. These intents give your bot access to quite sensitive information about the users in your guild. These intents are privileged to respect the privacy of users, and you should do that as well. + + Not enabling these intents doesn't mean you won't be able to ban users, but you will be unable to detect when a new user joins a guild, or what game they are playing. The majority of bots won't need all intents. + +!!! info "Related Topics" + + - [Sharding Bots](sharding.md) + - [Rules and Common Practices](../getting-started/rules-and-common-practices.md) diff --git a/docs/popular-topics/sharding.md b/docs/popular-topics/sharding.md new file mode 100644 index 00000000..e9f1c319 --- /dev/null +++ b/docs/popular-topics/sharding.md @@ -0,0 +1,46 @@ +--- +title: Sharding +description: All about Sharding Discord Bots. +--- + +# Sharding + +## What is Sharding? + +Sharding is the process of breaking up your bot into smaller pieces so that it has a better time handling +events. As [Discord's Documentation](https://discord.com/developers/docs/topics/gateway#sharding) puts +it, sharding is "a method of user-controlled guild sharding which allows for splitting events across +several gateway connections." + +Sharding is used only for large bots and takes up additional resources for managing the new processes. +Pycord automatically shards your bot, so the only thing you need to do is use an `AutoShardedClient` +or `AutoShardedBot` class instead of a plain `Client` or `Bot` class. Pretty cool, right? + +Just because you *can* shard your bot doesn't mean you *should*. While Pycord makes it easy to shard +your bot, it isn't necessary to shard unless your bot is large. Sharding a small bot isn't +just useless, but *harmful*, as it uses extra resources and may slow down your bot. Discord +themselves will let you know when your bot needs sharding, so you won't need to worry about this until they contact you. + +## How Do I Shard in Pycord? + +Sharding in Pycord is straightforward. + +Just replace your `discord.Client`, `discord.Bot`, `commands.Bot` objects +with `discord.AutoShardedClient`, `discord.AutoShardedBot`, `commands.AutoShardedBot` respectively. + +These new objects have been inherited from the original objects, so all the functions from those other types should be present. + +If you want to specify the number of shards your bot uses, +just add the `shards` parameter, along with the number of shards you want. + +## Why Should I Shard my Bot? + +Sharding is very necessary for big bots. While your bot grows, it gets harder for your bot to control +how many guilds it is in and what parts of your code should do what. This is exactly what sharding +handles, it makes all of this easier for your bot. Remember, though, only shard your bot once it's +big enough, and that's at *least* 1,000 guilds. + +!!! info "Related Topics" + + - [Hosting your Bot](../getting-started/hosting-your-bot.md) + - [Rules and Common Practices](../getting-started/rules-and-common-practices.md) diff --git a/docs/popular-topics/subclassing-bots.md b/docs/popular-topics/subclassing-bots.md new file mode 100644 index 00000000..aac20026 --- /dev/null +++ b/docs/popular-topics/subclassing-bots.md @@ -0,0 +1,124 @@ +--- +title: Subclassing Bots +description: Subclassing is a popular way of creating Discord Bots. Explore how you can create a Discord bot by subclassing. +--- + +## About + +Subclassing is another popular way of creating Discord Bots. Here, you create a bot by extending a bot class. To some advanced users, this is preferable to creating a bot instance with `bot = discord.Bot()`. + +Subclassing is an intermediate python concept, so we recommend you learn about it before continuing. Some good resources are: + +- [W3Schools's Guide to Python Classes & Objects](https://www.w3schools.com/python/python_classes.asp) +- [W3Schools's Guide to Python Inheritance](https://www.w3schools.com/python/python_inheritance.asp) + +## Why Subclassing? + +Many developers prefer to subclass their bots for many reasons, some of them being: + +#### Skeletal Frameworks for Bots + +Developers often share their bots code on open-source platforms, mostly GitHub, and allow users to self-host the bot (running their own instance of the bot with the code provided by the developer. Permissions vary in accordance to licences). Here, users find it easier and more convenient to have a small file that imports the custom bot class and runs it, rather than having to go through the code of the bot and find out which file to run. This makes it easier for people not familiar with programming to run and customize the bot, since it often brings down the code to: + +```python title="./main.py" +from src import Bot + +bot = Bot() + +bot.run("TOKEN") +``` + +Here, all the commands are inside the `/src` folder that the user need not bother with. + +#### Running Multiple Instances + +Some developers may need to run multiple instances of their bot (perhaps on different bot accounts). For example, a developer might have a second bot for testing alpha features. This system makes it simpler for the developer, and allows them to maintain multiple versions of the bot in the same directory: + +```python title="./alpha_bot.py" +from src import Bot + + +class AlphaBot(Bot): # subclasses Bot + ... # insert any custom configuration + + +bot = AlphaBot() + + +@bot.slash_command() # adds a new slash command to this subclassed bot +async def alpha_feature(ctx): + await ctx.respond("Alpha Feature!") + + +bot.run("TOKEN") +``` + +There are many more reasons to subclass! It's not required, and won't affect the speed of the bot, but it may affect your development process, for the good or for the worse. You don't miss out on any features when you subclass, either. Some developers want the OOP feel, while some just prefer that method and find it easier. + +## Basic Example + +```python +import discord + + +class MyBot(discord.Bot): # subclass discord.Bot + async def on_ready(self): # override the on_ready event + print("Logged in as") + print(self.user.name) + print(self.user.id) + print("------") + + +bot = MyBot() + + +@bot.slash_command() # create a slash command +async def ping(ctx): + await ctx.respond("Pong!") + + +bot.run("token") +``` + +As you can see, instead of creating a bot object with `bot = discord.Bot()`, we subclass [`discord.Bot`](https://docs.pycord.dev/en/stable/api/clients.html#discord.Bot). We then create an instance of our new bot class and run it. Notice how we don't need to use the `@event` decorator. + +Here's another example: + +```python title="./src/bot.py" +import discord + + +class MyBot(discord.Bot): # subclass discord.Bot + async def on_ready(self): # override on_ready + print("Logged in as") + print(self.user.name) + print(self.user.id) + print("------") +``` + +```python title="./src/__init__.py" +from .bot import MyBot # import the MyBot class from the bot.py file +``` + +```python title="./main.py" +from src import MyBot # import MyBot from /src + +bot = MyBot() # create an instance of MyBot + + +@bot.slash_command() +async def ping(ctx): + await ctx.respond("Pong!") + + +bot.run("TOKEN") # run the bot +``` + +These are just two ways you could do it. There are ton of other structures you can implement. It's up to you. + +So, should you subclass? There are no limitations you face if you decide to subclass your bot, but, once again, it's up to you. + +!!! info "Related Topics" + + - [Making a Help Command](../extensions/commands/help-command.md) + - [Rules and Common Practices](../getting-started/rules-and-common-practices.md) diff --git a/docs/popular-topics/threads.md b/docs/popular-topics/threads.md new file mode 100644 index 00000000..9afa74db --- /dev/null +++ b/docs/popular-topics/threads.md @@ -0,0 +1,102 @@ +--- +title: Threads +description: Threads with Pycord +--- + +In programming, threads are a way to run multiple processes at the same time. In Discord, threads are +a way to keep multiple conversations going at the same time. Let's take a brief look at how to use threads in Pycord. + +!!! tip + + Not all the methods and attributes will be covered in this guide, but you can find them in our documentation! + [Check it out!](https://docs.pycord.dev/en/stable/api/models.html#discord.Thread) + +## Creating a thread + +With a few simple lines of code, we can create threads in Pycord. + +!!! important + + All public threads need a starting message. This message will start the thread. However, private threads + (which are unlocked with having your server boosted to Level 2), do not require a starting message. + +### Creating thread from a message + +```python title="Creating a Thread from a Message" +message = await ctx.send("My Starting Message") +await message.create_thread(name="thread name", auto_archive_duration=60) +``` + +You may also use other ways to create the thread, for example, by using `on_message` events or by commands. + +### Creating thread in a channel + +```python title="Creating a Thread from a Channel" +channel = bot.get_channel(...) # define this! +await channel.create_thread( + name="Thread Name", message=None, auto_archive_duration=60, type=None, reason=None +) +``` + +A thread type could be `news_thread`, `public_thread`, `private_thread`. You may use it by passing `type=discord.ChannelType.news_thread`. + +## Deleting Threads + +Deleting Threads is simple. You need to get a thread and then use the `delete` method. + +```python title="Deleting a Thread" +thread = bot.get_channel(thread_id) # you could use other ways to get a thread +await thread.delete() +``` + +## Editing Threads + +**Parameters** + +- `name` (str) – The new name of the thread + +- `archived` (bool) – Whether to archive the thread or not. + +- `locked` (bool) – Whether to lock the thread or not. + +- `invitable` (bool) – Whether non-moderators can add other non-moderators to this thread. Only available for private threads. + +- `auto_archive_duration` (int) – The new duration in minutes before a thread gets automatically archived for inactivity. Must be one of 60, 1440, 4320, or 10080. + +- `slowmode_delay` (int) – Specifies the slow-mode rate limit for users in the thread, in seconds. A value of 0 disables slow-mode. The maximum value possible is 21600. + +```python title="Editing a Thread" +thread = bot.get_channel(id) +await thread.edit( + name="New Name", + archived=True, + locked=True, + slowmode_delay=10, + auto_archive_duration=60, +) +``` + +As you can see, threads are very simple. Once you learn how to use them, it's easy to create whatever you want. + +## FAQ + +### Why am I getting a `Forbidden` error when I try to create a thread? + +A `Forbidden` error occurs when the bot does not have the correct permissions to create threads. + +### Why am I getting an Unknown Message error when I try to create a thread? + +Getting an error looking something like `discord.ext.commands.errors.CommandInvokeError: Command raised an exception: HTTPException: 400 Bad Request (error code: 10008): Unknown Message`? + +There could be multiple reasons, some of them being: + +- The message does not exist +- The message already has a thread +- The message is in channel x, you are trying to start a thread in channel y. +- The message was deleted. + +!!! info "Related Topics" + + \<> + {/\* I can't think of any related topics for this at the moment. \*/} + \ diff --git a/docs/voice/index.md b/docs/voice/index.md new file mode 100644 index 00000000..88b27eba --- /dev/null +++ b/docs/voice/index.md @@ -0,0 +1,25 @@ +--- +title: Voice +icon: lucide/mic +--- + +Welcome to the guide for voice features in Pycord. + +!!! caution + + This guide requires previous experience with Pycord and Python. + +## Requirements + +The only requirement which is required for voice features is [`PyNaCl`](https://pypi.org/project/PyNaCl/). +The following features are optional: + +!!! tip + + Opus is also a required library, but this comes with Pycord. + Some hosts may not come with it, though, so remember to always check if required dependencies are installed. + +- [`FFmpeg`](https://ffmpeg.org) - used for sending/receiving files other than `.pcm` and `.wav` +- [`Pycord.Wavelink`](https://github.com/Pycord-Development/Pycord.Wavelink), + [`Lavalink.py`](https://github.com/Devoxin/Lavalink.py), + [`Wavelink`](https://github.com/PythonistaGuild/Wavelink) or any other Python LavaLink library for music playback. diff --git a/docs/voice/playing.md b/docs/voice/playing.md new file mode 100644 index 00000000..839ea115 --- /dev/null +++ b/docs/voice/playing.md @@ -0,0 +1,132 @@ +--- +title: Wavelink Audio Player +--- + +# About + +Pycord and Wavelink try to keep the playing of audio as simple and easy as possible, to keep making Discord +bots of any kind easy for all audiences. This guide provides simple and easy examples of using the +audio playing feature. + +For users that want extra examples, you can find some in Pycord's +[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/). + +## Starting out + +First you need to run a [Lavalink Server](https://github.com/freyacodes/Lavalink) to connect with. +There a multiple documentations to do this, so we are not covering that here. + +You also need to install the [wavelink](https://github.com/PythonistaGuild/Wavelink) library. + +```py title="Installing wavelink" +python3 -m pip install wavelink +``` + +You will now want to connect to your server via a node. + +```py title="Connect Node with Lavalink" +import discord +import wavelink + +bot = discord.Bot() + + +async def connect_nodes(): + """Connect to our Lavalink nodes.""" + await bot.wait_until_ready() # wait until the bot is ready + + nodes = [ + wavelink.Node( + identifier="Node1", # This identifier must be unique for all the nodes you are going to use + uri="http://0.0.0.0:443", # Protocol (http/s) is required, port must be 443 as it is the one lavalink uses + password="youshallnotpass", + ) + ] + + await wavelink.Pool.connect(nodes=nodes, client=bot) # Connect our nodes +``` + +
+ +Now you are finished making your node! Next, you will want to: + +1. Making a play command +1. Adding connect events + +### Making a play command + +To make a play command, you will need to make a function to connect and play audio in a voice channel. + +```py title="Play Command Example" +import typing + + +@bot.slash_command(name="play") +async def play(ctx, search: str): + # First we may define our voice client, + # for this, we are going to use typing.cast() + # function just for the type checker know that + # `ctx.voice_client` is going to be from type + # `wavelink.Player` + vc = typing.cast(wavelink.Player, ctx.voice_client) + + if not vc: # We firstly check if there is a voice client + vc = await ctx.author.voice.channel.connect( + cls=wavelink.Player + ) # If there isn't, we connect it to the channel + + # Now we are going to check if the invoker of the command + # is in the same voice channel than the voice client, when defined. + # If not, we return an error message. + if ctx.author.voice.channel.id != vc.channel.id: + return await ctx.respond("You must be in the same voice channel as the bot.") + + # Now we search for the song. You can optionally + # pass the "source" keyword, of type "wavelink.TrackSource" + song = await wavelink.Playable.search(search) + + if not song: # In case the song is not found + return await ctx.respond("No song found.") # we return an error message + + await vc.play(song) # Else, we play it + await ctx.respond(f"Now playing: `{song.title}`") # and return a success message +``` + +``` +# link with playing-now-playing.json +``` + +
+ +Now that you've done this, the only thing left to do is make your connect events. + +### Adding connect events + +The final step to this guide is connecting the node to your server when the bot goes online. + +To make it, you will want to do the following: + +```py title="Adding connect events" +@bot.event +async def on_ready(): + await connect_nodes() # connect to the server + + +@bot.event +async def on_wavelink_node_ready(payload: wavelink.NodeReadyEventPayload): + # Everytime a node is successfully connected, we + # will print a message letting it know. + print(f"Node with ID {payload.session_id} has connected") + print(f"Resumed session: {payload.resumed}") + + +bot.run("token") +``` + +Congratulations! You have now implemented voice playing into your bot! Most bots and Discord API +wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes +it easy to make complex bots so that you can get even the most advanced of ideas down. + +!!! info "Related Topics" + + - [Rules and Common Practices](../getting-started/rules-and-common-practices.md) diff --git a/docs/voice/receiving.md b/docs/voice/receiving.md new file mode 100644 index 00000000..570f65e9 --- /dev/null +++ b/docs/voice/receiving.md @@ -0,0 +1,118 @@ +--- +title: Receiving Voice Samples +--- + +# About + +Pycord tries to keep the recording of audio as simple and easy as possible, to keep making Discord +bots of any kind easy for all audiences. This guide provides simple and easy examples of using the +audio recording feature. + +For users that want extra examples, you can find some in Pycord's +[GitHub repository](https://github.com/Pycord-Development/pycord/blob/master/examples/audio_recording.py). + +## Starting out + +The first thing you want to do is make a cache of your voice connections. This is fairly easy; as +it's just putting a variable with an empty dictionary in our code, such as `connections = {}`. + +You will now want to create your command for recording. + +```py title="Record Command Example" +import discord + +bot = discord.Bot() +connections = {} + + +@bot.command() +async def record(ctx): # If you're using commands.Bot, this will also work. + voice = ctx.author.voice + + if not voice: + await ctx.respond("You aren't in a voice channel!") + + vc = await voice.channel.connect() # Connect to the voice channel the author is in. + connections.update( + {ctx.guild.id: vc} + ) # Updating the cache with the guild and channel. + + vc.start_recording( + discord.sinks.WaveSink(), # The sink type to use. + once_done, # What to do once done. + ctx.channel, # The channel to disconnect from. + ) + await ctx.respond("Started recording!") +``` + +``` +# link with receiving-record-response.json +``` + +
+ +Now you are finished making your command for voice receiving! Next, you will want to: + +1. Make your finished callback +1. Make a stop command + +### Making a Callback + +To make a callback, you will want to define the currently undefined `once_done` function inside +our command, like so: + +```py title="Recorder Callback" +async def once_done( + sink: discord.sinks, channel: discord.TextChannel, *args +): # Our voice client already passes these in. + recorded_users = [ # A list of recorded users + f"<@{user_id}>" for user_id, audio in sink.audio_data.items() + ] + await sink.vc.disconnect() # Disconnect from the voice channel. + files = [ + discord.File(audio.file, f"{user_id}.{sink.encoding}") + for user_id, audio in sink.audio_data.items() + ] # List down the files. + await channel.send( + f"finished recording audio for: {', '.join(recorded_users)}.", files=files + ) # Send a message with the accumulated files. +``` + +``` +# link with receiving-finished-recording.json +``` + +
+ +Now that you've done this, the only thing left to do is make your stop command. + +### Making a Stop Command + +The final step to this guide is stopping the audio recording. This is the easiest step by far. + +To make it, you will want to do the following: + +```py title="Stop Recording Command" +@bot.command() +async def stop_recording(ctx): + if ctx.guild.id in connections: # Check if the guild is in the cache. + vc = connections[ctx.guild.id] + vc.stop_recording() # Stop recording, and call the callback (once_done). + del connections[ctx.guild.id] # Remove the guild from the cache. + await ctx.delete() # And delete. + else: + await ctx.respond( + "I am currently not recording here." + ) # Respond with this if we aren't recording. + + +bot.run("token") +``` + +Congratulations! You have now implemented voice recording into your bot! Most bots and Discord API +wrappers don't have this as a feature, so this is quite an accomplishment. Thankfully, Pycord makes +it easy to make complex bots so that you can get even the most advanced of ideas down. + +!!! info "Related Topics" + + - [Rules and Common Practices](../getting-started/rules-and-common-practices.md) diff --git a/zensical.toml b/zensical.toml index ed073f52..84807f6e 100644 --- a/zensical.toml +++ b/zensical.toml @@ -14,8 +14,14 @@ edit_uri = "https://github.com/Pycord-Development/guide/edit/main/docs/" docs_dir = "docs" nav = [ - { "Get started" = "index.md" }, - { "Markdown in 5min" = "markdown.md" }, + { "Introduction" = "introduction.md" }, + { "Installation" = "installation.md" }, + { "Getting Started" = ["getting-started/index.md", { "Creating Your First Bot" = "getting-started/creating-your-first-bot.md" }, { "Rules and Common Practices" = "getting-started/rules-and-common-practices.md" }, { "More Features" = "getting-started/more-features.md" }, { "Hosting Your Pycord Bot" = "getting-started/hosting-your-bot.md" }] }, + { "Interactions" = ["interactions/index.md", { "Application Commands" = [{ "Slash Commands" = "interactions/application-commands/slash-commands.md" }, { "Context Menus" = "interactions/application-commands/context-menus.md" }, { "Localizations" = "interactions/application-commands/localizations.md" }] }, { "UI Components" = [{ "Buttons" = "interactions/ui-components/buttons.md" }, { "Select Menus" = "interactions/ui-components/dropdowns.md" }, { "Modal Dialogs" = "interactions/ui-components/modal-dialogs.md" }] }] }, + { "Extensions" = ["extensions/index.md", { "Commands" = [{ "Prefixed Commands" = "extensions/commands/prefixed-commands.md" }, { "Command Groups" = "extensions/commands/groups.md" }, { "Help Command" = "extensions/commands/help-command.md" }] }, { "Pages" = [{ "Paginator Basics" = "extensions/pages/paginator-basics.md" }, { "Paginator FAQ" = "extensions/pages/paginator-faq.md" }] }, { "Bridge" = "extensions/bridge.md" }, { "Tasks" = "extensions/tasks/tasks.md" }] }, + { "Voice" = ["voice/index.md", { "Wavelink Audio Player" = "voice/playing.md" }, { "Receiving Voice Samples" = "voice/receiving.md" }] }, + { "Popular Topics" = ["popular-topics/index.md", { "Cogs" = "popular-topics/cogs.md" }, { "Error Handling" = "popular-topics/error-handling.md" }, { "Intents" = "popular-topics/intents.md" }, { "Sharding" = "popular-topics/sharding.md" }, { "Subclassing Bots" = "popular-topics/subclassing-bots.md" }, { "Threads" = "popular-topics/threads.md" }] }, + { "More" = ["more/index.md", { "Community Resources" = "more/community-resources.md" }, { "Contributing to the Guide" = "more/contributing.md" }, { "Installing Git" = "more/git.md" }, { "Virtual Environments" = "more/virtual-environments.md" }] }, ] # extra_css = ["stylesheets/extra.css"] From eb830ae3c0b8eb6e1fcedb0f4e417346543e1ccf Mon Sep 17 00:00:00 2001 From: Paillat-dev Date: Fri, 21 Aug 2026 22:20:24 +0200 Subject: [PATCH 3/8] feat: Custom landing --- README.md | 26 ++++++++++---- docs/index.md | 16 +++++++++ docs/stylesheets/home.css | 72 ++++++++++++++++++++++++++++++++++++++ docs/stylesheets/theme.css | 8 +++++ overrides/home.html | 41 ++++++++++++++++++++++ zensical.toml | 18 +++++----- 6 files changed, 166 insertions(+), 15 deletions(-) create mode 100644 docs/index.md create mode 100644 docs/stylesheets/home.css create mode 100644 docs/stylesheets/theme.css create mode 100644 overrides/home.html diff --git a/README.md b/README.md index be235941..d7b373c7 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ it will either be refactored, or redone. For contributing rules, please visit [this page](./CONTRIBUTING.md). -The Guide is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. +The Guide is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. [`/src`](./src) contains styling (`.scss`) and the index (`.tsx`/`jsx`). @@ -23,19 +23,25 @@ The Guide is built using [Docusaurus 2](https://docusaurus.io/), a modern static First, you need to clone the repository: - git clone https://github.com/Pycord-Development/guide +``` +git clone https://github.com/Pycord-Development/guide +``` ### Installing Requirements You need to install the requirements for the guide, which you may do by running the following command: - yarn +``` +yarn +``` ### Starting the Server Then, you can start the server by running the following command: - yarn start +``` +yarn start +``` This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. @@ -43,7 +49,9 @@ This command starts a local development server and opens up a browser window. Mo Then, you can build the website by running the following command: - yarn build +``` +yarn build +``` This command generates static content into the `build` directory and can be served using any static contents hosting service. @@ -51,11 +59,15 @@ This command generates static content into the `build` directory and can be serv Using SSH: - USE_SSH=true yarn deploy +``` +USE_SSH=true yarn deploy +``` Without SSH: - GIT_USER= yarn deploy +``` +GIT_USER= yarn deploy +``` If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..75c1e885 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,16 @@ +--- +description: The official guide for Pycord. Learn how to create Discord bots with Pycord today! +template: home.html +hide: + - navigation + - toc +--- + +Whether you are a newbie or an experienced developer, you will find everything you need to know about Pycord here. This guide will teach you: + +- How to get a brand new bot running from scratch; +- How to create Interactions, Context Menus and Commands; +- In-depth concepts such as Embeds, Reactions, Help Commands, Paginators, etc; +- Popular Topics such as working with Databases, Sharding, etc; +- Ways to handle and manage common errors and best practices for bots; +- And Much More! diff --git a/docs/stylesheets/home.css b/docs/stylesheets/home.css new file mode 100644 index 00000000..7e7e7ea7 --- /dev/null +++ b/docs/stylesheets/home.css @@ -0,0 +1,72 @@ +.pyc-hero { + display: flex; + align-items: center; + padding: 4rem 0; + min-height: min(72vh, 640px); + background: radial-gradient( + 58% 78% at 82% 32%, + color-mix(in srgb, var(--md-primary-fg-color) 16%, transparent), + transparent 70% + ); +} + +.pyc-hero__inner { + display: grid; + gap: 2.5rem; + align-items: center; + grid-template-columns: 1fr; + text-align: center; +} + +.pyc-hero__content h1 { + margin: 0; + font-weight: 700; + line-height: 1.1; + font-size: clamp(2rem, 5vw, 3rem); +} + +.pyc-hero__subtitle { + margin: 0.7rem 0 0; + font-weight: 300; + font-size: clamp(1rem, 2.5vw, 1.25rem); + color: var(--md-default-fg-color--light); +} + +.pyc-hero__actions { + display: flex; + flex-wrap: wrap; + gap: 0.8rem; + justify-content: center; + margin-top: 2rem; +} + +.pyc-hero__visual { + display: grid; + place-items: center; +} + +.pyc-hero__logo { + width: min(70%, 300px); + height: auto; + user-select: none; + filter: drop-shadow( + 0 0.75rem 2rem color-mix(in srgb, var(--md-primary-fg-color) 30%, transparent) + ); +} + +body:has(.pyc-hero) .md-content__inner { + max-width: 42rem; + margin-inline: auto; +} + +@media screen and (min-width: 60em) { + .pyc-hero__inner { + grid-template-columns: 1.05fr 0.95fr; + gap: 3.5rem; + text-align: left; + } + + .pyc-hero__actions { + justify-content: flex-start; + } +} diff --git a/docs/stylesheets/theme.css b/docs/stylesheets/theme.css new file mode 100644 index 00000000..d353d400 --- /dev/null +++ b/docs/stylesheets/theme.css @@ -0,0 +1,8 @@ +:root > * { + --md-primary-fg-color: #7A85F5; + --md-primary-fg-color--light: #5966f2; + --md-primary-fg-color--dark: #4752C2; + --md-accent-fg-color: #7A85F5; + --md-accent-fg-color--light: #5966f2; + --md-accent-fg-color--dark: #4752C2; +} \ No newline at end of file diff --git a/overrides/home.html b/overrides/home.html new file mode 100644 index 00000000..6819d2dd --- /dev/null +++ b/overrides/home.html @@ -0,0 +1,41 @@ +{% extends "main.html" %} + +{% block htmltitle %} + {{ config.site_name }} +{% endblock %} + +{% block tabs %} + {{ super() }} + +{% endblock %} + +{% block content %} + {{ page.content }} +{% endblock %} diff --git a/zensical.toml b/zensical.toml index 84807f6e..14bb97f3 100644 --- a/zensical.toml +++ b/zensical.toml @@ -14,6 +14,7 @@ edit_uri = "https://github.com/Pycord-Development/guide/edit/main/docs/" docs_dir = "docs" nav = [ + { "Home" = "index.md" }, { "Introduction" = "introduction.md" }, { "Installation" = "installation.md" }, { "Getting Started" = ["getting-started/index.md", { "Creating Your First Bot" = "getting-started/creating-your-first-bot.md" }, { "Rules and Common Practices" = "getting-started/rules-and-common-practices.md" }, { "More Features" = "getting-started/more-features.md" }, { "Hosting Your Pycord Bot" = "getting-started/hosting-your-bot.md" }] }, @@ -24,10 +25,11 @@ nav = [ { "More" = ["more/index.md", { "Community Resources" = "more/community-resources.md" }, { "Contributing to the Guide" = "more/contributing.md" }, { "Installing Git" = "more/git.md" }, { "Virtual Environments" = "more/virtual-environments.md" }] }, ] -# extra_css = ["stylesheets/extra.css"] -# extra_javascript = ["javascripts/extra.js"] +extra_css = ["stylesheets/home.css", "stylesheets/code-license.css", "stylesheets/theme.css"] +extra_javascript = ["javascripts/code-license.js"] [project.theme] +custom_dir = "overrides" language = "en" features = [ # Announcements @@ -74,24 +76,24 @@ code = "Jetbrains Mono" media = "(prefers-color-scheme)" toggle.icon = "lucide/sun-moon" toggle.name = "Switch to light mode" -primary = "deep purple" -accent = "deep purple" +primary = "custom" +accent = "custom" [[project.theme.palette]] media = "(prefers-color-scheme: light)" scheme = "default" toggle.icon = "lucide/sun" toggle.name = "Switch to dark mode" -primary = "deep purple" -accent = "deep purple" +primary = "custom" +accent = "custom" [[project.theme.palette]] media = "(prefers-color-scheme: dark)" scheme = "slate" toggle.icon = "lucide/moon" toggle.name = "Switch to system preference" -primary = "deep purple" -accent = "deep purple" +primary = "custom" +accent = "custom" [[project.extra.social]] icon = "fontawesome/brands/github" From 207dc7d10a7653316572e1510bb296865cd0e1dc Mon Sep 17 00:00:00 2001 From: Paillat-dev Date: Sat, 22 Aug 2026 01:06:35 +0200 Subject: [PATCH 4/8] feat: Licenses --- CONTRIBUTING.md | 118 ++++++++ LICENSE | 9 + LICENSES/CC-BY-NC-SA-4.0.txt | 437 ++++++++++++++++++++++++++++++ LICENSES/Unlicense.txt | 24 ++ docs/javascripts/code-license.js | 37 +++ docs/licenses/cc-by-nc-sa-4.0.txt | 1 + docs/licenses/unlicense.txt | 1 + docs/stylesheets/code-license.css | 33 +++ zensical.toml | 4 +- 9 files changed, 662 insertions(+), 2 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 LICENSES/CC-BY-NC-SA-4.0.txt create mode 100644 LICENSES/Unlicense.txt create mode 100644 docs/javascripts/code-license.js create mode 120000 docs/licenses/cc-by-nc-sa-4.0.txt create mode 120000 docs/licenses/unlicense.txt create mode 100644 docs/stylesheets/code-license.css diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..32afcdd6 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,118 @@ +# Contributing to the Pycord Guide + +First off, thank you for taking the time to contribute. Contributions help keep the +guide accurate, up-to-date, and easy to follow. They are always welcome. + +The following is a set of guidelines for contributing to the guide. These are +guidelines, not hard rules. + +## Reporting a Problem + +Found something wrong? Please be aware of the following when filing an issue. + +1. Don't open duplicate issues. Search first to see if it has already been reported. + Duplicate issues will be closed. +1. Point us to **where** the problem is (page, section, or link). +1. Tell us **what's wrong** and, where relevant, **what it should say instead**. +1. If a code sample doesn't work, include what you ran and what happened (the + complete error or traceback, with any token removed). + Duplicate issues will be closed. +1. Point us to **where** the problem is (page, section, or link). +1. Tell us **what's wrong** and, where relevant, **what it should say instead**. +1. If a code sample doesn't work, include what you ran and what happened (the + complete error or traceback, with any token removed). + +The clearer the report, the faster it gets fixed. + +## Submitting a Pull Request + +1. Make sure you are up to date with the latest changes. It is recommended you pull + the latest changes from the master branch before working on your own. +1. Preview your changes locally and make sure the guide builds before submitting. +1. Explain everything in a way that is easy to understand. If it's an advanced topic + that requires some expertise, say so in a note admonition. +1. Follow proper grammar and spelling. +1. Try to follow the guide's style, and keep each pull request focused on a single + aspect — avoid scope creep. + the latest changes from the master branch before working on your own. +1. Preview your changes locally and make sure the guide builds before submitting. +1. Explain everything in a way that is easy to understand. If it's an advanced topic + that requires some expertise, say so in a note admonition. +1. Follow proper grammar and spelling. +1. Try to follow the guide's style, and keep each pull request focused on a single + aspect. + +## Git Commit Styling + +Not following this guideline could lead to your pull request being squashed for a +cleaner commit history. + +Some style guides we recommend: + +- The [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) style is + widely used and a good place to start. + widely used and a good place to start. +- The [gitmoji](https://gitmoji.dev) style makes your pull request look more lively. + +We don't limit or deny pull requests using another style — just make sure it is +appropriate and makes sense for this guide. + +## Licensing + +By submitting a contribution (including but not limited to a pull request, patch, suggested edit, or any other +content) you agree to and accept the following: + +1. You hold the copyright on everything in your contribution, or you have permission + to submit it under the terms below. +1. Your contribution is licensed under the terms described in [`LICENSE`](./LICENSE), + matching the location and nature of the material. +1. You understand your contribution and can explain its purpose, meaning, and impact + when requested. +1. If you are found to be in fault with any of the above, we shall not be held + responsible in any way after the pull request has been merged. + to submit it under the terms below. +1. Your contribution is licensed under the terms described in [`LICENSE`](./LICENSE), + matching the location and nature of the material. +1. You understand your contribution and can explain its purpose, meaning, and impact + when requested. +1. If you are found to be in fault with any of the above, we shall not be held + responsible in any way after the pull request has been merged. + +## AI Usage Policy + +The use of LLMs or other AI tools to directly write, author, or generate guide content +is **strictly forbidden**. Guide content must be written by a human. AI tools may still +be used in a purely assistive capacity: for example, spellchecking, grammar +suggestions, or feedback on your own writing, provided that such use is disclosed as +described below. + +The use of LLMs or other AI tools must be disclosed at all times. Disclosure is +required for any interaction or contribution including, but not limited to, the +following: + +- Modifying content +- Modifying documentation +- Discussion with maintainers +- Issue bodies and comments +- Pull request bodies and comments + +The disclosure must specify the tools used and the scope of their application. The +primary location of disclosure should be in the body of issues and pull requests. + +If you are not a native English speaker, using LLMs or other AI tools for translation +is discouraged. It can distort your intended meaning and make a human-written +contribution look AI-generated. Please use a non-LLM-based translation tool such as +[DeepL](https://deepl.com) instead. + +The use of fully autonomous LLMs or other AI tools to open issues or pull requests is +strictly forbidden. + +Failure to follow this policy may result in a temporary or permanent ban from our +organization. + +The use of LLMs or AI tools by new contributors is highly discouraged, and will likely +result in the direct closure of your issue or pull request. + +Furthermore, as outlined earlier in §"Licensing", by submitting a pull request you +agree that you hold the copyright on your contribution, and that you understand it and +are able to explain its purpose, meaning, and impact when requested. diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..1354d90d --- /dev/null +++ b/LICENSE @@ -0,0 +1,9 @@ +Copyright (c) 2026-present Pycord-Development + +Every fenced code block embedded in the documentation files under +the docs/ directory is exclusively licensed under the license provided in +LICENSES/Unlicense.txt. + +Any other content provided under the docs/ directory not already covered by +the license(s) provided above is exclusively licensed under the license +provided in LICENSES/CC-BY-NC-SA-4.0.txt instead. diff --git a/LICENSES/CC-BY-NC-SA-4.0.txt b/LICENSES/CC-BY-NC-SA-4.0.txt new file mode 100644 index 00000000..cbe5ad16 --- /dev/null +++ b/LICENSES/CC-BY-NC-SA-4.0.txt @@ -0,0 +1,437 @@ +Attribution-NonCommercial-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International +Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial-ShareAlike 4.0 International Public License +("Public License"). To the extent this Public License may be +interpreted as a contract, You are granted the Licensed Rights in +consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the +Licensor receives from making the Licensed Material available under +these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-NC-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution, NonCommercial, and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. NonCommercial means not primarily intended for or directed towards + commercial advantage or monetary compensation. For purposes of + this Public License, the exchange of the Licensed Material for + other material subject to Copyright and Similar Rights by digital + file-sharing or similar means is NonCommercial provided there is + no payment of monetary compensation in connection with the + exchange. + + l. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + m. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + n. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part, for NonCommercial purposes only; and + + b. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-NC-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database for NonCommercial purposes + only; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/LICENSES/Unlicense.txt b/LICENSES/Unlicense.txt new file mode 100644 index 00000000..efb98088 --- /dev/null +++ b/LICENSES/Unlicense.txt @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/docs/javascripts/code-license.js b/docs/javascripts/code-license.js new file mode 100644 index 00000000..6e74e16e --- /dev/null +++ b/docs/javascripts/code-license.js @@ -0,0 +1,37 @@ +/* + * Appends a "Licensed under the Unlicense license" footer to every Python code + * block. + */ +(function () { + var LICENSE_URL = "/licenses/unlicense.txt"; + var LINK_TEXT = "the Unlicense license"; + var SELECTOR = ".language-python.highlight, .language-py.highlight"; + + function decorate() { + var blocks = document.querySelectorAll(SELECTOR); + for (var i = 0; i < blocks.length; i++) { + var block = blocks[i]; + if (block.dataset.pycLicense) continue; + block.dataset.pycLicense = "1"; + + var bar = document.createElement("div"); + bar.className = "pyc-code-license"; + bar.appendChild(document.createTextNode("Licensed under ")); + + var link = document.createElement("a"); + link.href = LICENSE_URL; + link.textContent = LINK_TEXT; + link.target = "_blank"; + link.rel = "noopener"; + bar.appendChild(link); + + block.appendChild(bar); + } + } + + if (window.document$ && typeof window.document$.subscribe === "function") { + window.document$.subscribe(decorate); + } else { + document.addEventListener("DOMContentLoaded", decorate); + } +})(); diff --git a/docs/licenses/cc-by-nc-sa-4.0.txt b/docs/licenses/cc-by-nc-sa-4.0.txt new file mode 120000 index 00000000..90b83ddd --- /dev/null +++ b/docs/licenses/cc-by-nc-sa-4.0.txt @@ -0,0 +1 @@ +../../LICENSES/CC-BY-NC-SA-4.0.txt \ No newline at end of file diff --git a/docs/licenses/unlicense.txt b/docs/licenses/unlicense.txt new file mode 120000 index 00000000..afe9e605 --- /dev/null +++ b/docs/licenses/unlicense.txt @@ -0,0 +1 @@ +../../LICENSES/Unlicense.txt \ No newline at end of file diff --git a/docs/stylesheets/code-license.css b/docs/stylesheets/code-license.css new file mode 100644 index 00000000..b7b7550d --- /dev/null +++ b/docs/stylesheets/code-license.css @@ -0,0 +1,33 @@ +/* Styles for javascripts/code-license.js. +*/ + +.highlight > pre:has(+ .pyc-code-license) { + margin-bottom: 0; +} + +.highlight > pre:has(+ .pyc-code-license) > code { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.pyc-code-license { + margin: 0 0 1em; + padding: 0.4em 0.9rem; + font-size: 0.68rem; + line-height: 1.5; + text-align: right; + color: var(--md-default-fg-color--light); + background-color: var(--md-code-bg-color); + border-top: 0.05rem solid var(--md-default-fg-color--lightest); + border-radius: 0 0 0.4rem 0.4rem; +} + +.pyc-code-license a { + color: var(--md-typeset-a-color); + text-underline-offset: 0.15em; +} + +.pyc-code-license a:hover, +.pyc-code-license a:focus { + color: var(--md-accent-fg-color); +} diff --git a/zensical.toml b/zensical.toml index 14bb97f3..d3a7fecc 100644 --- a/zensical.toml +++ b/zensical.toml @@ -4,7 +4,7 @@ site_name = "Pycord Guide" site_description = "Your project description" site_author = "Pycord-Development" -copyright = "Copyright © 2026 Pycord-Development" +copyright = 'Copyright © 2026 Pycord-Development
Guide content licensed under CC BY-NC-SA 4.0' repo_url = "https://github.com/Pycord-Development/pycord/" repo_name = "Pycord-Development/pycord" @@ -25,7 +25,7 @@ nav = [ { "More" = ["more/index.md", { "Community Resources" = "more/community-resources.md" }, { "Contributing to the Guide" = "more/contributing.md" }, { "Installing Git" = "more/git.md" }, { "Virtual Environments" = "more/virtual-environments.md" }] }, ] -extra_css = ["stylesheets/home.css", "stylesheets/code-license.css", "stylesheets/theme.css"] +extra_css = ["stylesheets/home.css", "stylesheets/code-license.css"] extra_javascript = ["javascripts/code-license.js"] [project.theme] From d82b363cf24477b82abacc00250754007fe70074 Mon Sep 17 00:00:00 2001 From: Paillat-dev Date: Sun, 23 Aug 2026 15:42:11 +0200 Subject: [PATCH 5/8] feat: CI --- .github/workflows/ci.yml | 31 +++++++++++++++++++++++++++++++ .github/workflows/docs.yml | 29 ----------------------------- CONTRIBUTING.md | 20 -------------------- 3 files changed, 31 insertions(+), 49 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .github/workflows/docs.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..32f518e9 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,31 @@ +name: CI +on: + pull_request: + branches: + - main + - master + - next + - production +permissions: + contents: read +jobs: + format: + name: mdformat + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 + with: + enable-cache: true + - run: uv sync --frozen + - run: uv run --frozen mdformat --check . + build: + name: build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + - uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1 + with: + enable-cache: true + - run: uv sync --frozen + - run: uv run --frozen zensical build --strict \ No newline at end of file diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml deleted file mode 100644 index 5c33c5f8..00000000 --- a/.github/workflows/docs.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Documentation -on: - push: - branches: - - master - - main -permissions: - contents: read - pages: write - id-token: write -jobs: - deploy: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - steps: - - uses: actions/configure-pages@v6 - - uses: actions/checkout@v7 - - uses: actions/setup-python@v6 - with: - python-version: 3.x - - run: pip install zensical - - run: zensical build --clean - - uses: actions/upload-pages-artifact@v5 - with: - path: site - - uses: actions/deploy-pages@v5 - id: deployment diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 32afcdd6..a8ea3b97 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,11 +14,6 @@ Found something wrong? Please be aware of the following when filing an issue. Duplicate issues will be closed. 1. Point us to **where** the problem is (page, section, or link). 1. Tell us **what's wrong** and, where relevant, **what it should say instead**. -1. If a code sample doesn't work, include what you ran and what happened (the - complete error or traceback, with any token removed). - Duplicate issues will be closed. -1. Point us to **where** the problem is (page, section, or link). -1. Tell us **what's wrong** and, where relevant, **what it should say instead**. 1. If a code sample doesn't work, include what you ran and what happened (the complete error or traceback, with any token removed). @@ -32,13 +27,6 @@ The clearer the report, the faster it gets fixed. 1. Explain everything in a way that is easy to understand. If it's an advanced topic that requires some expertise, say so in a note admonition. 1. Follow proper grammar and spelling. -1. Try to follow the guide's style, and keep each pull request focused on a single - aspect — avoid scope creep. - the latest changes from the master branch before working on your own. -1. Preview your changes locally and make sure the guide builds before submitting. -1. Explain everything in a way that is easy to understand. If it's an advanced topic - that requires some expertise, say so in a note admonition. -1. Follow proper grammar and spelling. 1. Try to follow the guide's style, and keep each pull request focused on a single aspect. @@ -51,7 +39,6 @@ Some style guides we recommend: - The [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) style is widely used and a good place to start. - widely used and a good place to start. - The [gitmoji](https://gitmoji.dev) style makes your pull request look more lively. We don't limit or deny pull requests using another style — just make sure it is @@ -68,13 +55,6 @@ content) you agree to and accept the following: matching the location and nature of the material. 1. You understand your contribution and can explain its purpose, meaning, and impact when requested. -1. If you are found to be in fault with any of the above, we shall not be held - responsible in any way after the pull request has been merged. - to submit it under the terms below. -1. Your contribution is licensed under the terms described in [`LICENSE`](./LICENSE), - matching the location and nature of the material. -1. You understand your contribution and can explain its purpose, meaning, and impact - when requested. 1. If you are found to be in fault with any of the above, we shall not be held responsible in any way after the pull request has been merged. From b6c71cc59b42e43b2f639724b90d0fa7aed9b85f Mon Sep 17 00:00:00 2001 From: Paillat-dev Date: Sun, 23 Aug 2026 15:50:30 +0200 Subject: [PATCH 6/8] fix: mdformat config --- .mdformat.toml | 3 +++ pyproject.toml | 3 ++- uv.lock | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .mdformat.toml diff --git a/.mdformat.toml b/.mdformat.toml new file mode 100644 index 00000000..a63a83f7 --- /dev/null +++ b/.mdformat.toml @@ -0,0 +1,3 @@ +exclude = [ + ".venv/**/*" +] \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 6c9f483e..b118cc9b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,4 +14,5 @@ dev = [ "zensical~=0.0.56", "mdformat~=1.0", "mdformat-mkdocs[recommended]~=5.2", -] \ No newline at end of file + "mdformat-ruff>=0.1.3", +] diff --git a/uv.lock b/uv.lock index 7065dc11..f26056ff 100644 --- a/uv.lock +++ b/uv.lock @@ -89,6 +89,7 @@ source = { virtual = "." } dev = [ { name = "mdformat" }, { name = "mdformat-mkdocs", extra = ["recommended"] }, + { name = "mdformat-ruff" }, { name = "zensical" }, ] @@ -98,6 +99,7 @@ dev = [ dev = [ { name = "mdformat", specifier = "~=1.0" }, { name = "mdformat-mkdocs", extras = ["recommended"], specifier = "~=5.2" }, + { name = "mdformat-ruff", specifier = ">=0.1.3" }, { name = "zensical", specifier = "~=0.0.56" }, ] From e969a719349c29cf7874968e3f9fe5e762033bf0 Mon Sep 17 00:00:00 2001 From: Paillat-dev Date: Sun, 23 Aug 2026 15:57:53 +0200 Subject: [PATCH 7/8] fix: gitignore --- .gitignore | 16 +++++----------- .python-version | 1 - 2 files changed, 5 insertions(+), 12 deletions(-) delete mode 100644 .python-version diff --git a/.gitignore b/.gitignore index 3153a6ff..8d931864 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,3 @@ -# Dependencies -/node_modules - -# Production -/build - -# Generated files -.docusaurus -.cache-loader - # Misc .DS_Store .env.local @@ -27,4 +17,8 @@ yarn-error.log* bot_tests/ # Zensical out dir -site/ \ No newline at end of file +site/ + +# Python +.venv/ +.python-version \ No newline at end of file diff --git a/.python-version b/.python-version deleted file mode 100644 index 24ee5b1b..00000000 --- a/.python-version +++ /dev/null @@ -1 +0,0 @@ -3.13 From e743e31c559869999150e98bede07d23f1b8817e Mon Sep 17 00:00:00 2001 From: Paillat-dev Date: Sun, 23 Aug 2026 15:59:14 +0200 Subject: [PATCH 8/8] feat: Add back renovate.json --- renovate.json | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..c6adfb13 --- /dev/null +++ b/renovate.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "local>Pycord-Development/renovate-config", + ":semanticPrefixFixDepsChoreOthers", + ":dependencyDashboard" + ], + "pinDigests": true +} \ No newline at end of file
+ +

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 UCy8cAiqi>1DF{Lt235`f0;?-f=Kufz diff --git a/static/fonts/whitney/whitney600.woff b/static/fonts/whitney/whitney600.woff deleted file mode 100644 index 598a6f8c2ce6124af6d0187e11d2f33ff22bf43e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82688 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 diff --git a/static/fonts/whitney/whitney700.woff b/static/fonts/whitney/whitney700.woff deleted file mode 100644 index 50565a3e03ed3bdb1494ea5972760c97f00da3a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80000 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