Ответы пользователя по тегу discord.py
  • Embed сообщение discord.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Используйте поиск по сайту, например тут или тут дан нужный вам код.

    Решение в общем виде:
    - Используете событие on_member_join, оно срабатывает когда собственно кто-то присоединяется к серверу
    - Создаете объект discord.Embed
    - Достаете канал в который нужно отправить сообщение и делаете channel.send(embed=embed)
    Ответ написан
    Комментировать
  • Как настроить у бота ожидание события взаимодействия(меню выбора)?

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

    Проверяйте и обрабатывайте только нажатия от вводившего команду или делайте команду эфемерной чтобы только вводивший ее видел.
    Ответ написан
  • Как скрыть сообщение «ошибка взаимодействия» в боте?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Суть взаимодействий в том, что вы обязаны на них ответить. Как минимум выдать эфемерное сообщение в духе "я сделаль".

    Судя по приложенному коду возможно логичнее написать этот функционал как Application Command, которая вызывается из профиля пользователя
    Ответ написан
    1 комментарий
  • Как сделать чтобы инвайт считался тому кто по своей ссылке пригласил человека?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Исправить опечатки в коде.
    Ты не для того человека считаешь и не того человека выводишь в Embed
    Ответ написан
    Комментировать
  • Как сделать Билдер JSON в боте дискорд?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Embed.from_dict из словаря создает объект Embed.
    Формат словаря у тебя похоже есть, но все же приведу официальную документацию
    Ответ написан
    3 комментария
  • Как сделать задержку на выполнение функции при реагировании на сообщения, а не на команды?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    await asyncio.sleep(seconds)
    Если это не то, что нужно, разворачивайте вопрос более подробно, что вы пытаетесь сделать, зачем и как пытались.

    Кроме того лучше вообще не пихать логику в on_message, это ивент, который срабатывает на каждое сообщение, а сообщений в секунду бывает очень много.
    Ответ написан
  • Как исправить AttributeError: 'Context' object has no attribute 'edit'?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Давайте мы переведем за вас.
    Объект "контекст" не имеет атрибута "edit"

    В контексте хранится Message, который в свою очередь имеет метод Message.edit().
    Обратите внимание, что он принимает только именованные аргументы.
    Ответ написан
    Комментировать
  • Почему Бот выдаёт ошибку, но в консоли она не отображается (disnake.py)?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Сообщение "Приложение не отвечает" говорит о том, что твой бот за 3 секунды не выдал какой-либо ответ.
    Оно не означает что в коде есть ошибки.

    Они там определенно есть, но другого характера. Ваш код выдает ответ не в любом случае, а только при выполнении ряда условий, причем настолько специфичных, что можно было сразу на фазы луны завязываться, было бы надежнее. Для начала постарайтесь не пытаться выдать ответ посреди цикла, а для веток if добавлять else. К примеру сейчас если не выполняется if counter==4: не произойдет ничего.

    А лучше отложите бота и перечитайте теорию с самого начала.
    Ответ написан
    1 комментарий
  • Ошибка при установки discord.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Ошибка при установки discord.py?
    да ошибка, попробуйте переводчик

    error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-buil...
    Ответ написан
    1 комментарий
  • Как решить проблему с объектом который не имеет атрибута 'send_modal'?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    1) Узнайте что такое self, является ли это ключевым словом или просто переменной и что туда передается, где обычно пишут self.

    2) Узнайте в чем отличие класса от экземпляра класса. Подумайте над 8 строчкой, должен ли туда передаваться класс или его экземпляр.

    3) Узнайте что такое ctx, чем отличается Context от Interation. Тот же вопрос другим боком: чем отличаются команды от слеш-команд.

    4) Определитесь вам нужен send_model или send_modal (перечитайте заголовок вопроса и сам вопрос и исправьте)

    5) Когда разберетесь с вопросом 4, нужный метод доступен для класса InteractionMessage. Найдите его среди ваших объектов, используя функцию type(some_object)
    Ответ написан
    Комментировать
  • Что делать, если Не появляются slash команды?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    В guld_id значение должно быть меньше или равно 9223372036854775807

    Ошибка происходит внутри кода библиотеки и связана с тем, что передается слишком большое значение id сервера.

    Или вы где-нибудь в конфиге или бд прописали слишком большой id. Их мы не видим так что ищите.
    Или это баг в самой библиотеке и в этом случае открывайте issue на github'e
    Ответ написан
    Комментировать
  • Как сделать чтобы бот выдавал обратную связь если была ошибка со стороны пользователя, В чём была моя ошибка при коде?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Не стоит привязываться к ошибкам библиотеки. Создаете кастомную ошибку и вызываете в месте возникновения.
    Сейчас вы привязываете к стандартным ошибкам текст, который в реальности не отражает проблему: скажем отсутствие разрешений это MissingPermissions или BotMissingPermissions. BadArgument это ошибка разбора аргументов.

    Ну и не нужно дергать вызов ошибок в событии предназначенном для их обработки.
    async def on_command_error(error, ctx):
        if isinstance(error, commands.BadArgument):
            await ctx.send("Запрос команды с ошибочным аргументом")
        elif isinstance(error, commands.CommandNotFound):
            await Client.send_message(ctx.message.channel, "Команда не найдена")
        ... # вставлять новые проверки сюда
        else:
            await Client.send_message(ctx.message.channel, "Неизвестная ошибка")
    Ответ написан
    Комментировать
  • Как сделать чтобы кнопка работала даже после перезапуска бота?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    При старте бота в событии on_ready нужно регистрировать обработчик.
    Официальный пример с комментариями.
    Ответ написан
    1 комментарий
  • Бот не высвечивает кто пригласил, как исправить?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Потому что при result is None and chann is not None inviter_id будет None.
    inviter_id = None
    if result is not None:
       ... 
    
    if chann:
        embed = nextcord.Embed(
            title='Leafy InviteLogger',
            description=f'{member.mention} join the server!\n\n Invited by <@{inviter_id}>\n Total invitations {total_invites}',
            colour=0x2b2d31
        )


    P.S. Отредактируйте вопрос в соответствии с правилами ресурса. Используйте спойлер для портянок и изображений.
    Ответ написан
  • Что делать ошибка после возрата?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Переводим ошибку
    coroutine 'ApplicationContext.respond' was never awaited

    Смотрим на строку, которая эту ошибку вызывает
    ctx.respond(f'Вы уже использовали {us} из {kyp}',ephemeral=True)

    Сравниваем с вашим же кодом на 10 строк нижe
    await ctx.respond(embed=embedvar,ephemeral=True)
    Играем в игру "найди одно ключевое отличие", добавляем в код await

    С учетом того, что у библиотеки discord.py нет объектов ApplicationContext, похоже код использует какой-то форк и такие вещи стоит указывать.
    Ответ написан
    Комментировать
  • Guild.members не возвращает список всех участников сервера. Что делать?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Вам не дадут всех участников всех серверов. А если вы расчитываете когда-то получить верификацию, учитывайте что вам могут вообще не дать смотреть участников.
    650aa23f17855437585678.png
    1. Никогда не пишите в БД в on_ready. Вы миллион раз будете запускать бота и он миллион раз будет писать миллион пользователей
    2. Не храните пустых пользователей. 99% участников серверов не воспользуются вашим ботом никогда, зачем вы их храните?
    3. Добавляйте запись когда в ней есть необходимость, используйте INSERT ... ON CONFLICT ... UPDATE
    Ответ написан
    Комментировать
  • Как убрать строку между name и value в embed.add_field - disnake.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Никак.
    Name и Value всегда на разные строках так же как Title и Description.
    Если текст должен быть в одной строке просто положите его в одно поле.

    P.S. поправьте текст вопроса.
    Ответ написан
    Комментировать
  • Не работает on_member_join Как исправить?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Не работает on_member_join?

    on_member_join работает, не работает ваш код. Вероятно channel is None, поскольку этой ветки у вас нет вам об этом и не сообщается.

    1. Поправьте вопрос как описано в сообщении модератора

    2. Проверяйте типы объектов, которыми оперируете и делайте все возможные ветвления, если код работает не как ожидается.

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

    4. Для приветственных сообщений есть системный канал, который рекомендуется под это использовать.
    Хардкод это плохая практика.

    import discord
    
    class MyClient(discord.Client):
        async def on_member_join(self, member):
            guild = member.guild
            if guild.system_channel is not None:
                msg = f'{member.mention} добро пожаловать на сервер {guild.name}!'
                await guild.system_channel.send(msg)
    
    
    intents = discord.Intents.default()
    intents.members = True
    
    client = MyClient(intents=intents)
    client.run('token')
    Ответ написан
    Комментировать
  • Приложение не отвечает?

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

    Без отступов нельзя сказать на 100%, но вероятно дело в том, что у вас в середине функции что-то забыл return, после которого ничего не выполнится.
    Ответ написан
    1 комментарий
  • Как настроить использование слэш-команды в конкретном канале (disnake)?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Это можно сделать, только не в параметрах.
    Можно либо где-нибудь в БД хранить разрешенные id каналов и повесить check на команду (предпочительно, если бот на много серверов)
    Или собственно в настройках сервера -> Интеграция выставить в каких каналах она должна быть доступна (если бот на одном сервере). В этом случае в коде вообще ничего делать не нужно.
    Ответ написан
    Комментировать