Задать вопрос
  • Почему бот не отправляет сообщение в определенный канал?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Функция add_experience нигде не вызывается.
    Соответственно опыт не начисляется, соответственно уровни не выдаются.

    Ставьте принты или дебажте, смотрите какие функции у вас вообще вызываются.

    Так же соблюдайте правила ресурса, публикуйте код в спойлере и присылайте код, который относится к вопросу, а не гигантскую портянку со всем подряд.
    Ответ написан
    Комментировать
  • Как сделать применение кнопок и выпадающего списка к одному сообщению на disnake.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Так же как по отдельности.

    Помимо декоратора @button, никто не запрещает их передавать в View как компоненты
    components=[
                disnake.ui.Button(label="Yes", style=disnake.ButtonStyle.success, custom_id="yes"),
                disnake.ui.Button(label="No", style=disnake.ButtonStyle.danger, custom_id="no"),
            ],


    Открывайте примеры и документацию.

    Что до ошибки по строчке view = DropdownView(), EditStatus() видно, что вы пытаетесь передать кортеж в inter.send() вместо disnake.ui.View, о чем вам явно указано в ошибке.

    На будущее прикладывайте полные логи, а изображения и портянку кода убирайте в спойлер.
    Ответ написан
    Комментировать
  • Как сделать удаление "начинает ветку"?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    При создании ветки (они зовутся Thread's) вызывается событие on_thread_create. В нем прописываете свою логику.

    Ценность подобной логики мне не понятна, ведь удаление сообщения не удаляет тред, поэтому рекомендую еще посмотреть методы объекта Thread
    Ответ написан
  • Как правильно написать slash-команду в disnake вместе с Option?

    fenrir1121
    @fenrir1121
    Начни с документации
    Переводим ошибку, получаем примерно "имя опции должно быть строкой, а получен тип".
    Ищем где в этой строке единственный параметр, который мог быть распознан как тип.
    Option(int, description='Количество', required=True, min_value=1, max_value=100)

    Похоже первый параметр Option это имя, а вы попытались передать тип. Идем в исходники и подтверждаем эту гипотезу.

    Исправляем
    Option(name='count', description='Количество', type=int, required=True, min_value=1, max_value=100)
    Ответ написан
    Комментировать
  • Не могу подключиться к голосовому каналу discord.py. В чём проблема?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Проблема в том, что это невалидный код, который вероятнее всего писал chatGPT.
    Исправлять такой код помогают тут
    Ответ написан
    Комментировать
  • Qr code на python?

    fenrir1121
    @fenrir1121
    Начни с документации
    Потому что если попросить chatGPT написать код, который "генерит qr и добавляет на него изображение" он сделает все точно по ТЗ, не обращая внимания на то, что изображение перекрыло половину qr.
    Бред на входе -> бред на выходе, все честно.
    Ответ написан
    1 комментарий
  • Disnake.py, как сделать начисление разных предметов в 1 команду?

    fenrir1121
    @fenrir1121
    Начни с документации
    как сделать начисление разных предметов в 1 команду

    Сделат одну функцию для всех предметов и ередавать предмет в качестве параметра, так же как вы делаете с количеством. Вы же не делаете отдельную команду чтобы передавать 1 или 2 предмета.

    Для того чтобы ввод был удобным для параметров существует autocomplete. Как им пользоваться описано в примере.
    В примере дано упрощенное использование, где варианты берутся из списка, но в функции для autocomplete может быть любая логика в том числе и запросы к БД.
    Ответ написан
    Комментировать
  • Почему у меня ошибка discord.ui?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    In components.0.components.0.emoji.name: Invalid emoji

    Как сказано в сообщении потому что нет такого эмодзи.
    Стандартные эмодзи передаются юникод-символом (можно взять например тут), кастомные строкой в формате <name:id>
    Ответ написан
    1 комментарий
  • Как сделать так чтобы мой бот работал только на моём сервере?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Достаточно просто не публиковать ссылку-приглашение.
    Но если нужно именно решение кодом проверяйте сервер в on_message
    Ответ написан
    Комментировать
  • Как получать значение атрибута, обращаясь к экзмепляру класса?

    fenrir1121
    @fenrir1121
    Начни с документации
    Берете и реализуете
    class Menu:
        storage: list = [1, 2, 3]
    
        def __str__(self):
            return f'[{", ".join(map(str, self.storage))}]'
    
        def append(self, value):
            self.storage.append(value)


    In [2]: menu = Menu()
    
    In [3]: menu.append(4)
    
    In [4]: print(menu)
    [1, 2, 3, 4]
    Ответ написан
    Комментировать
  • Что делать с AttributeError: module 'discord' has no attribute 'Intents'?

    fenrir1121
    @fenrir1121
    Начни с документации
    Или разобраться с инструментом или не пользоваться им.
    Пайчарм делает за пользователя много отличных вещей, но не все они явны для начинающего разработчика, например создание виртуальной среды.
    Возьмите обычный системный терминал, один раз руками создайте venv и научитесь с ними работать и понимать где именно у вас установлены библиотеки
    Ответ написан
    2 комментария
  • Почему не работает лимит?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Потому что нет никакого лимита.
    Поставь принт с каким-нибудь текстом первой строчкой каждой функции и убедись что вызывается всегда только одна из трёх функций. Почему так оставлю тебе на подумать.

    В официальной документации есть примеры работы с кнопками, ссылку на документацию я давал в прошлом твоём вопросе. Учись по документации, а не каким-то устаревшим гайдам из которых ты это взял.
    Ответ написан
    Комментировать
  • Как сделать запрос текста disnake?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Буквально весь смысл ботов, брать какой-то запрос пользователя, класть его в переменные и что-нибудь с ним делать. В примере ниже number запрашивается у пользователя
    @bot.slash_command(description=Умножить число на 42")
    async def multiply(inter, number: int):
        await inter.response.send_message(number * 42)
    Ответ написан
  • Почему переменная изменяет значение?

    fenrir1121
    @fenrir1121
    Начни с документации
    Потому что
    1) Любые объекты передаются в функции по ссылке, так что если вы изменяете объект, он изменится
    2) Вы не копируете объект, а ссылаетесь на него
    In [15]: a = [1, 2, 3]
    
    In [16]: b = a
    
    In [17]: c = a[:]
    
    In [18]: a is b
    Out[18]: True  # переменные ссылаются на один и тот же объект
    
    In [19]: a is c 
    Out[19]: False # в c лежит плоская копия a
    Ответ написан
  • Как получить содержимое поле не в on_modal_submit?

    fenrir1121
    @fenrir1121
    Начни с документации
    inter: disnake.ModalInteraction

    inter: disnake.MessageInteraction


    Тайпхинты в примере явно показывают, что вы в двух разных случаях зовете две разных сущности одним и тем же именем inter. Это не делает их одинаковыми объектами, у MessageInteraction отсутствуют атрибуты text_values и custom_id.
    Если вы хотите что-то повесить на кнопку у нее как раз custom_id есть.
    И listener для работы с кнопками не нужен, посмотрите документацию по View и Button
    Ответ написан
  • Как залить бота на вебхуках на сервер?

    fenrir1121
    @fenrir1121
    Начни с документации
    как выбрать хостинг
    Любой, цена на который вас устраивает. Исходите из специфики своего бота, но в 99% случаев подходит самый минимальный тариф. Не учитывая статику и возможные сложные вычисления в бизнес логике нужны где-то 40Мб RAM и 1% мощности любого проца.

    как залить бота
    git clone url

    какой домен использовать
    Какой купите такой и подходит. Главное нужен SSL, для этого есть certbot
    Ответ написан
    Комментировать
  • Что делать, если не выходит отправить личное сообщение боту Discord?

    fenrir1121
    @fenrir1121
    Начни с документации
    не выходит отправить личное сообщение боту Discord

    отправка сообщения пользователю невозможна


    Вы определитесь для начала кому вы что пытаетесь отправить.
    - Если боту, вероятно Вы копировали чужой код, в котором есть запрет получения личных сообщений. Так иногда делают, если логика требует наличия информации о сервере.
    - Если человеку то Вы ничего с этим не сделаете. Некоторые люди устанавливают запрет на личные сообщения и это нормально, а вот бот, спамящий в личку, наоборот не нормально. Если вы верифицируете пользователя на сервере и общайтесь с ним на сервере. Чтобы сообщение не было видно другим участникам есть эфемерные сообщения.
    Ответ написан
  • Как исправить ошибку TypeError: DataBase.get_max_cash() missing 1 required positional argument: 'cash'?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Научиться пользоваться переводчиком.
    Вот объявление Вашей функции:
    async def get_max_cash(self, ctx, cash, *, all_data: bool=False):


    Вот как вы пытаетесь ее вызвать:
    data = await self.db.get_max_cash(cash)

    Если глядя на последнюю строчку и текст ошибки не приходит никаких идей, попробуйте начать с учебника для начинающих.
    Ответ написан
    Комментировать
  • Как лучше сделать одобрение/отклонение заявок через pycord (discord.py)?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Потому что Bot.wait_for это гигантский костыль. С тех пор как появились взаимодействия его не следует использовать в принципе. В вашем случае у вас все открытые заявки ждут события raw_reaction_add, а check не проверяет на каком сообщении реакция поставлена.
    Путей исправления 3:

    1 (оптимальный). Разобраться как работают события. В идеале создавать сообщение с 2 кнопками, которые хранят данные от кого они были созданы.

    2 (простой). Не использовать события. Создать отдельную команду для подтверждения, куда передается пользователь и статус.

    3 (кривой). Оставить все как есть. В сообщении наверняка есть строка от кого оно. Парсить текст сообщения, добавить в check проверку по конкретному пользователю.
    Ответ написан
    Комментировать
  • Как сделать одновременно слэш команду и команду через префикс дискорд бота на Disnake?

    fenrir1121
    @fenrir1121
    Начни с документации
    Средствами библиотеки - никак. Слеш команды концептуально отличаются и получают данные отличные от префиксных. Рекомендуемый способ это для префиксов показывать слеш-команду чтобы люди переходили на них.

    Альтернатива запихнуть вашу логику в отдельную функцию и из двух команд вызывать эту функцию.

    Советую выбирать первый вариант и отказываться от префиксов. Если дойдете до верификации бота вам их не согласуют.
    Ответ написан
    Комментировать