Ответы пользователя по тегу discord.py
  • Куда указывает ошибка AttributeError: 'Bot' object has no attribute 'row' (Pycord)?

    Vindicar
    @Vindicar
    RTFM!
    Да, ты чего-то не понимаешь. Почему у тебя не вызвал вопросов вот этот код?
    def __init__(self, bot):  # раз конструктор
        self.bot: commands.Bot = bot
    
    def __init__(self, *args, **kwargs):  # два конструктор ?!?!?!
        super().__init__(*args, **kwargs, title="Подача запроса")
    Ответ написан
  • Как записать в переменную упоминание пользователя(в Python)?

    Vindicar
    @Vindicar
    RTFM!
    Упоминание где, блин?

    Если в параметрах команды, то достаточно поставить типом параметра discord.Member.
    Ответ написан
  • Как получить содержимое сообщения и ответа?

    Vindicar
    @Vindicar
    RTFM!
    Просто реагируешь на сообщение. В объекте сообщения есть свойство reference, которое может содержать ссылку на отвечаемое сообщение (или None, если это не ответ).

    Читай доки, там много интересного.
    Ответ написан
    Комментировать
  • Disnake непонятная ошибка. Кто может помочь?

    Vindicar
    @Vindicar
    RTFM!
    Какие интенты ты задаёшь боту?
    Если приложить волевое усилие и открыть документацию, то можно увидеть, что для работы on_raw_reaction_add требуется интент reactions.
    Ответ написан
    Комментировать
  • Disnake не находит команду. как решить?

    Vindicar
    @Vindicar
    RTFM!
    На полноценную глобальную регистрацию команды бота в дискорде уходит время. Кто-то называл срок около часа что ли, я сам не пробовал.
    В доках написано, как тестировать в рамках одного сервера. Попробуй сначала так.
    from disnake.ext import commands
    
    command_sync_flags = commands.CommandSyncFlags.default()
    command_sync_flags.sync_commands_debug = True  # чтобы бот писал в лог ход регистрации
    
    bot = commands.Bot(
        command_prefix='!',
        test_guilds=[123456789], # локальная регистрация для одного сервера
        command_sync_flags=command_sync_flags,
    )
    Ответ написан
  • Что делать если выдаёт ошибка с модулем Discord?

    Vindicar
    @Vindicar
    RTFM!
    Ну так у тебя библиотека для работы с discord не установлена. Почитай в документации, как её установить.
    Мне лениво
    В командной строке pip install discord.py. Это если ты используешь именно discord.py, а не один из его клонов.
    Ответ написан
    Комментировать
  • Не происходит on_connect сообщения, что делать?

    Vindicar
    @Vindicar
    RTFM!
    async def on_connect(self):
            if self.persistents_views_added:
               retrun


    retrun? Может, всё-таки return?
    Ответ написан
  • Я пишу музыкального бота для Discorda, но выводит ошибки. Не могу понять в чем именно проблема?

    Vindicar
    @Vindicar
    RTFM!
    Ну тебе же прямым английским текстом написано: ты обращаешься к объекту, описывающему сервер(гильду), и пытаешься у него добыть свойство voice, а такого свойства нет.
    server.voice.channels - получить у объекта сервер свойство voice, а у объекта в этом свойстве - свойство channels.
    И в документации свойства voice у объектов класса Guild тоже нет. Зато есть voice_channels.
    Ответ написан
    Комментировать
  • Что делать при данной ошибке?

    Vindicar
    @Vindicar
    RTFM!
    Вместо
    member_full = bot.get_user(id=id)
    banned_users = await ctx.guild.bans()
    for ban in banned_users: ...

    Нужно
    member_full = bot.get_user(id=id)
    async for ban in ctx.guild.bans(): ...

    async for x in y - это не то же самое, что и for x in await y. Асинхронный генератор (первый случай) каждый элемент запрашивает асинхронно, а во втором случае - асинхронно запрашивается вся коллекция, которая потом синхронно итерируется. Разные подходы, разные методы, так что объект вполне может поддерживать только один из них.
    Ответ написан
    Комментировать
  • Не запускается бот в дискорд, что делать?

    Vindicar
    @Vindicar
    RTFM!
    Всё, что начиная с
    @bot.event 
    async def on_ready():

    нужно подвинуть влево (уменьшить отступ). В питоне отступы значимы!
    Советую ненадолго отложить бота и поучить язык на более простых примерах, во избежание подобных ошибок.
    Ответ написан
    Комментировать
  • Что делать если не загружается кога discord.py?

    Vindicar
    @Vindicar
    RTFM!
    for filename in os.listdir("./cogs"):
    Ты ищешь подкаталог cogs в текущем рабочем каталоге программы.
    Это не то же самое, что и каталог, где находится программа.
    Ты уверен, что у тебя путь к нужному каталогу?
    from pathlib import Path
    import sys
    # каталог скрипта
    SCRIPT_DIR = Path(sys.argv[0]).parent.resolve()
    # каталог с когами
    COGS_DIR = SCRIPT_DIR / 'cogs'
    # список имён когов
    COGS = [f.stem for f in COGS_DIR.glob('*.py')]
    Ответ написан
    Комментировать
  • Почему Discord бот перестает отвечать?

    Vindicar
    @Vindicar
    RTFM!
    Может, уже неакутально, но отвечу.

    asyncio.create_task(bot.start(TOKEN))
    Созданный объект-таск может быть тут же собран garbage collector'ом, так как ты не хранишь ссылку на него. Разумеется, при этом сам таск (в твоём случае бот) прибьётся.
    Сохрани возвращаемый create_task() объект хотя бы в локальную переменную.
    Ответ написан
    Комментировать
  • Дискорд бот на питон не видет команды, почему это может быть?

    Vindicar
    @Vindicar
    RTFM!
    Выглядит так, словно ты выдрал кусок кода, который был оформлен как класс-Cog, тупо воткнул его в основной код бота и ожидаешь, что оно волшебным образом само поймёт. Даже отступы не поправил.

    Вот что тут скажешь кроме "выучи язык сначала"?
    Почитай документацию, как пользоваться когами.
    Ответ написан
    Комментировать
  • Как сделать команду которую может использовать только владелец сервера?

    Vindicar
    @Vindicar
    RTFM!
    Читаем доки на has_guild_permissions().
    Similar to has_permissions(), but operates on guild wide permissions instead of the current channel permissions.


    "Работает похоже на has_permissions()"? Окей, тыц по ссылке.
    A check() that is added that checks if the member has all of the permissions necessary.
    Note that this check operates on the current channel permissions, not the guild wide permissions.
    The permissions passed in must be exactly like the properties shown under discord.Permissions.

    И пример кода
    @bot.command()
    @commands.has_permissions(manage_messages=True)  # имя параметра должно быть взято из discord.Permissions
    async def test(ctx):
        await ctx.send('You can manage messages.')

    Тыц по ссылке discord.Permissions, видим большоооой список разрешений. Читаем внимательно, owner нет, но в самом верху есть administrator.
    Значит, нужно has_guild_permissions(administrator=True).

    Делов на две минуты.
    Ответ написан
    1 комментарий
  • Не работают кнопки в discord.py, что делать?

    Vindicar
    @Vindicar
    RTFM!
    @Code.bot.command()
    На момент выполнения этого декоратора класс ещё не закончил создаваться, а значит, не был присвоен имени Code.
    Почитай документацию на либу, как правильно создавать коги и каким декоратором в них отмечать команды.
    Для discord.py это @commands.command().
    Ответ написан
  • Python discord bot, выдача роли по команде пользователю, как сделать?

    Vindicar
    @Vindicar
    RTFM!
    async def role(ctx, target: discord.Member):
    А дальше работаешь с target вместо ctx.message.author, это будет объект-пользователь.
    Причем указывать его можно будет пингом, по id или просто по нику, discord.py (и его клоны) сам разберётся.
    Почитай доку, она полезная.
    Ответ написан
    3 комментария
  • Не понимаю, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    Вообще задумайся: если у тебя два многословных ника простым текстом подряд, как программа поймёт, где начинается первый ник, и где кончается второй?
    Я бы или упростил команду (убрал механизм "ответ на сообщение"), или наоборот, опирался бы на этот механизм в первую очередь.

    Вообще discord.py позволяет указывать тип аргумента. Почитай секции "Basic converters", "Discord Converters" и "typing.Union".

    Используя это, ты можешь попробовать схитрить вот так:
    # discord.py попытается сначала интерпретировать первый аргумент как пользователя. 
    # Если не получится - будет просто строка
    async def nick(ctx, arg1: typing.Union[discord.Member, str], *, arg2: str = None):
        if ctx.message.reference is not None and isintance(arg1, str):  # сообщение - это ответ
            member = ctx.message.reference.resolved.author
            # arg1 будет содержать первое слово ника - доклеиваем к нему остальные.
            newnick = f'{arg1} {arg2}' if arg2 is not None else arg1  
        elif ctx.message.reference is None and isintance(arg1, discord.Member) and arg2 is not None:  # сообщение - не ответ
            member, newnick = arg1, arg2
        else:
            ...  # выводим сообщение о неправильном использовании команды
        await member.edit(nick = newnick)


    Не факт что сработает. В этом случае либо требуй ввода упоминания, либо вообще сделай слэш-команду и не парься.
    Ответ написан
  • Что не так с кодом?

    Vindicar
    @Vindicar
    RTFM!
    @bot.event
    async def on_raw_reaction_add(payload):

    Вложенные обработчики событий - очень плохая идея. Это не будет работать так, как ты ожидаешь. Просто не делай так.
    Вместо этого опиши один обработчик on_raw_reaction_add(), и в нём уже определяй, для которого сообщения пришла реакция, и что с этим сообщением делать.
    Ответ написан
    3 комментария
  • Как поставить дискорд бота на питоне на бесплатный хостинг?

    Vindicar
    @Vindicar
    RTFM!
    А тебе супер-принципиально бесплатный? Можно найти хостинг за 40 рублей в месяц, у той же RuVDS. Конечно, всегда есть риск, что за что платишь, то и получишь...
    Ответ написан
    Комментировать
  • Как исправить ошибку взаемодействия Дискорд бота и окна?

    Vindicar
    @Vindicar
    RTFM!
    #
        loop = asyncio.get_event_loop()
        loop.create_task(process_bot_queue())
        loop.run_forever()

    Что вообще вот этот код делает в теле программы, если у тебя вызов create_window() не вернёт управление, пока окно GUI не будет закрыто?
    Ответ написан
    Комментировать