• Как сделать регистрацию команд из базы данных Disnake.py?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В документации disnake (впрочем, и в discord.py тоже) какая-то ерунда написана. Вот как выглядит описание Command.__init__ в коде:

    def __init__(
            self,
            func: CommandCallback[CogT, ContextT, P, T],
            **kwargs: Any,
        ) -> None:
    
        ...
    
        self.callback = func


    То есть callback на самом деле это обязательный позиционный параметр.
    Ответ написан
    2 комментария
  • Не получается сохранить текст в базу данных sqlite3 через discord.py, что делать?

    @alekssamos
    Программист любитель
    В SQL есть свои функции форматирования / подстановки, а не .format!
    Указывай там знаки вопроса ? вместо {}, а переменные передай следующими за запросом аргументами.
    Ответ написан
    Комментировать
  • Как в discord.py сделать чтобы создатель сервера мог указывать роли для команд?

    Vindicar
    @Vindicar
    RTFM!
    Нужна база данных, так как эту информацию нужно будет сохранять при перезапуске бота.
    Если задача стоит как "укажите, какая роль будет модератором", то тогда в базе должна быть таблица, где сопоставляется ID сервера и ID роли.
    Тогда алгоритм задания роли будет такой:
    1. Проверяем, что отправивший команду является владельцем сервера.
    2. Определяем ID сервера.
    3. Вытаскиваем из параметров команды название роли.
    4. Перебираем роли на сервере, ищем роль с таким названием, запоминаем её ID.
    5. Помещаем пару сервер-роль в таблицу БД. Для обычной базы данных на основе SQL (вроде строенной питоновской sqlite) хорошо использовать запрос вида INSERT ... ON CONFLICT UPDATE ... - это позволит не париться, была ли уже задана роль модератора для этого сервера.

    Алгоритм проверки роли будет такой:
    1. Получаем ID сервера, на котором была отправлена команда.
    2. Получаем ID роли отправителя команды.
    3. Проверяем, есть ли в таблице строка с такой парой сервер-роль.
    4. Если есть, разрешаем выполнить команду.

    В качестве упражнения для обучения это хорошая идея.
    С практической точки зрения - это абсолютно бесполезно, потому что роль с правами модератора может кикать и банить по правому щелчку мыши по юзеру, безо всяких ботов.
    Ответ написан
    Комментировать