Просмотрев несколько сайтов, включая оф.документацию дискорда — у меня было несколько вариантов.
1 — json. Я пробовал добавить слэш команду, через библиотеку requests . Но получив ни ошибки, ни результата, я забросил json
2- discord-py-slash-command . аналогичный результат с json.
После окончательного провала, я пошел на stackoverflow , ну и сейчас задаю вопрос.
import requests url=’https://discord.com/api/v8/applications/#id_application/guilds/#guild_id/commands’ json= < «name»:»test», «description»:»Super test», >headers = < «Authorization»: «Bot #токен» >r= requests.post(url, headers= headers, json=json)
Источник: husl.ru
discord-py-slash-command 4.2.1
Easy, simple, scalable and modular: a Python API wrapper for interactions.
Навигация
Ссылки проекта
Статистика
Метаданные
Лицензия: MIT License (GPL-3.0 License)
[Part 1] Discord bot — создание слэш команд
Требует: Python >=3.8.6
Сопровождающие
Классификаторы
Описание проекта
Easy, simple, scalable and modular: a Python API wrapper for interactions.
Ever since December 2019, this open-source project has become the culmination of dedication and research towards figuring out the best way to bring interactions from Discord to you: we are an easy, simple, scalable and modular library for Discord interactions.
- Tired of using numerous module dependencies for slash commands and buttons?
- Looking for a compatible library that implements all interactions?
- Itching to get your hands on slash commands, but in a simple manner?
Look no more! The goal of this library is to make all three of these questions go from possibilities to trivial matters.
Our library—inside and out, offers numerous benefits and presents itself as a worthy module in your bot’s dependencies:
The base features of our library, built with our API include:
- Dynamic object data generation: all event data dispatched from the Gateway is dynamically transformed and generated into two-way serializable JSON objects.
- Sane rate limiting: our HTTP client implements pre-emptive rate limit avoidance, so your bot is guaranteed to never hit HTTP 429 .
- On-demand cache: every HTTP request and Gateway event made is cached when needed, so you never have to save information yourself.
- Simplified data models: every object presented is accessible as either a raw dictionary/ application/json or list of recursive attributes.
Some more unique features that are exclusive to our interactions include:
- Event-triggered callbacks: whether a component, application command or interaction response, you’ll never need to worry about bridging responses.
- Dual-way decorator logic: a decorator can act as both a constructor for an interaction, as well as a callback.
- API-strict naming: no more confusion with the naming approach of many libraries; we follow the naming style of interactions from the officially curated Discord Developers documentation.
- Extensive framework structure: (pending in 4.1.0 ) build your own tools and technologies for our library to develop and integrate community creations.
What do we not offer?
ДИСКОРД БОТ #2 | СЛЭШ КОМАНДЫ | DISNAKE/DISCORDPY | DISCORD BOT PYTHON
While we certainly offer a lot of benefits, we unfortunately have our own downsides:
This list is subject to change as time goes on:
some of these items may be added to the core of
the library in the future.
- No native cooldown decorator/method.
- Lack of automatic sharding and voice clients.
Where do I start?
Please check out our quickstart guide for some basic examples.
How can I contribute?
Please read up on our contribution requirements for the project. This open-source project also enforces the MIT License.
This open-source project utilizes the following workflows for development:
- pre-commit 2.16.0 : the architecture uses this before every commit to format and check for severity/QOL-breaking changes.
- black 21.11b1
- flake8 3.9.2
- isort 5.9.3
When can I start?
We also have some extra ground rules about making any specific contributions involving:
- We do not accept abstraction-based requests. (e.g. colour for color )
- A request has to be approved by at least one developer.
- You must be willing to change/adhere to reviews from participants where necessary.
I think I’m all ready!
Feel free to begin making Pull Requests and Issues on our GitHub!
Источник: pypi.org
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
discord-py-guide / slash-commands.md
- Go to file T
- Go to line L
- Copy path
- Copy permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cannot retrieve contributors at this time
239 lines (170 sloc) 15.4 KB
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents Copy raw contents
Copy raw contents
Если вы только начали изучать работу с библиотекой, то рекомендую сначала изучить основное руководство или хотя бы основы prefix-команд
На этом этапе надо отметить, что discord-py — устаревшая библиотека, которая не обновляется под новые фишки дискорда. Поэтому для работы со slash-командами, кнопками и выпадающими списками стоит удалить старую библиотеку и установить ее форк PyCord :
pip install py-cord==2.4.1
В целом, вся структура классов, их свойств и методов в PyCord осталась такой же как в discord-py , поэтому ничего менять и переписывать не нужно. Поэтому к PyCord подойдет документация от discord-py , но я все же рекомендую пользоваться документацией именно от PyCord
Для реализации slash-команд, в качестве объекта бота можно использвать все тот же класс discord.ext.commands.Bot .
- name : название команды
- description : описание команды
- guild_ids : список id серверов, на которых эта команда будет доступна. Поскольку slash-команды синхронизируются с дискордом, данный параметр также имеет смысл указывать для ускорения процесса синхронизации. (Подробный разбор проблемы)
Теперь приступим к созданию команды. В декоратор можно сразу передать параметры названия и описания:
Конечно, там есть много других параметров, описание которых можно найти в документации по discord.SlashCommand
Далее создаем функцию команды. Поскольку дискорд обрабатывает команды интерактивно,
необходимо что-то делать с контекстом выполнения команды:
Либо его можно удалить ( await ctx.delete() ):
Результат:
Либо отправить ответ сразу ( await ctx.respond() ):
Результат:
Если не сделать что-то с конекстом, то дискорд не дождавшись ответа от бота, выдаст ошибку. Например, вот такая команда, которая ничего не возвращает, а просто осуществляет вывод в консоль
Действительно выведет сообщение в консоль, но вот обработка команды в дискорде будет выглядеть так:
Выглядит так, будто при выполнении произошла ошибка, но на деле это просто дискорд не получил ответа от бота. Однако это может произойти даже если команда подразумевает ответ. Например, если идут какие-то долгие вычисления, дискорд может просто не дождаться ответа и команда не выполнится. В таких случаях контекст стоит либо удалять, как показано в примере выше, либо использовать метод контекста defer() .
Из описания следует, что он нужен как раз для таких ситуаций: «Откладывает ответ на взаимодействие. Обычно это используется, когда взаимодействие подтверждено, а дополнительное действие будет выполнено позже.»
Результат:
Разумеется, использовать метод await ctx.defer() имеет смысл только если вы собираетесь что-то отвечать на команду. Если же никакого ответа не подразумевается, то лучше просто удалять контекст. Иначе бот просто бесконечно будет «думать» как на скрине выше.
Работа с аргументами
Работа с аргументами у slash-команд устроена иначе, нежели у prefix-команд. Чтобы PyCord распознал аргумент и передал его в дискорд, нужно в качестве аннотации типа аргумента команды указать экземпляр класса discord.Option
Для начала импортируем класс в код
from discord import Option
Конструктор класса Option принимает некоторые параметры. В основном указывают следующие:
- тип аргумента
- name : название аргумента (Наследуется от имени переменной, если оно не указано в качестве параметра.)
- description : описание аргумента
- required : обязательно ли указывать этот аргумент при вызове команды ( True / False )
- default : стандартное значение аргумента, если он не был указан
Также есть следующие:
- min_value : минимальное число, которое пользователь может ввести в качестве аргумента (если тип аргумента — int / float )
- max_value : тоже самое, что и min_value , только это верхняя граница — максимальное число
- choices : список ( list ) значений аргумента, которые пользователь может выбрать
- min_length : минимальная длина строки, которую пользователь должен ввести в качестве значения аргумента
Есть и другие параметры, про которые все также можно почитать в документации к discord.Option . Некоторые из них будут разобраны позже.
Таким образом, получение любого аргумента будет выглядеть так:
Теперь давайте попробуем получить от пользователя следующие аргументы:
- Число в диапазоне от 1 до 10
- Значение типа bool
- Участника сервера ( discord.Member )
- Текст из нескольких слов
- Слово из списка для выбора
Реализация аргументов будет выглядеть так:
Результат:
- Аргументы можно указывать в разном порядке
- Встроенная проверка не даст ввести некорректное значение
- Необязательные ( required=False ) параметры можно не указывать
На выходе получаем:
5 (int) False (bool) dennys#0000 (Member) Текст с пробелами (str) Яблоко (str)
Пользовательские типы аргументов
Предположим, вам нужно получить от пользователя bool -значение. Чтобы не указывать в описании аргумента за что отвечает True , а за что False , можно написать свой тип аргумента, который будет предлагать пользователю выбор Да / Нет (Вместо True / False ), затем автоматически конвертировать выбор в bool .
Для этого создадим новый класс, который будет наследоваться от discord.ext.commands.Converter .
Класс должен переопределять метод convert , принимающий аргументы:
- cls — объект этого класса
- ctx — контекст выполнения команды
- arg — значение аргумента