Контакты
Местоположение
Россия, Самарская обл., Самара

Достижения

Все достижения (3)

Наибольший вклад в теги

Все теги (23)

Лучшие ответы пользователя

Все ответы (148)
  • Discord.py, как сделать автовыдачу ролей?

    >on_member_join(member)<
    @Bot.event
    async def on_member_join(member):
        if role := member.guild.get_role(418187634689139935):
            await member.add_roles(role)
    Ответ написан
  • Как отреагировать на реакцию пользователя?

    bot.wait_for("reaction_add"): https://discordpy.readthedocs.io/en/v1.3.4/api.htm...

    @bot.command(ctx):
    async def test(ctx):
        accept_decline = await ctx.send('Test')
        await accept_decline.add_reaction('one')
        try:
            reaction = await bot.wait_for("reaction_add", timeout=60, check = lambda r, u: r=='one' )
        except asyncio.TimeoutError:
            await channel.send("\N{THUMBS DOWN SIGN}")
        else:
            await channel.send("\N{THUMBS UP SIGN}")
    Ответ написан
  • Выдача прав доступа?

    Две основные проблемы:
    1. Переменная guild не определена. В данном случае Вы, скорее всего, хотите получить её из контекста - ctx.guild
    2. Guild.voice_channels и Guild.text_channels - "списки" (list) с каналами соответствующего типа. Списки не имеют атрибута set_permissions. Данный атрибут есть у каналов в списке. Для установки прав для каждого канала нужно данный список итерировать.


    @client.command()
    async def set_permissions(сtx, role: discord.Role):
        for textchannel in ctx.guild.text_channels:
            await alltext.set_permissions(
                role,
                read_messages=True,
                send_messages=True,
                manage_channels=True,
                manage_roles=True,
            )
        for voicechannel in ctx.guild.voice_channels:
            await allvoice.set_permissions(
                role, connect=True, manage_channels=True, manage_roles=True
            )
        await ctx.send(
            f"{ctx.author.mention}, вы успешно установили {role.mention} права доступа во всех текстовых/голосовых каналах"
        )
    Ответ написан
  • Как получить объект Member, зная id?

    Help on function fetch_member in module discord.guild:
    async fetch_member(self, member_id)


    Guild - класс, и вы пытаетесь вызвать его метод. Посмотрите в сторону ООП в питоне.
    Кратко: Классы - типы объектов, Объекты - определённые объекты указанного типа
    class Horse:  # тип - лошадь
         ...
         def send_to_space(self, encapsulate: bool):
             # Функция позволяющая отправить лошадь в космос
             self.move(Place("Space"))
    
    special_horse_in_vacuum = Horse(...) # Один определенный сферический конь
    special_horse_in_vacuum.send_to_space(True) # Отправляем определенного коня в вакуум
    
    special_horse_in_vacuum = Horse # Определение лошади
    special_horse_in_vacuum.send_to_space(True) # Пытаемся отправить определение "лошадь" в космос
    # Получаем TypeError: send_to_space() missing 1 required positional argument: 'encapsulate'


    Вы пытаетесь взять слово "Сервер", и получить конкретного участника из определения "Сервер", не конкретного сервера.

    Вам необходимо получать сервер из контекста: https://discordpy.readthedocs.io/en/stable/ext/com...
    @bot.command()
    async def test(ctx, member_id: int):
        print(await ctx.guild.fetch_member(member_id))  # Получить пользователя через API
        print(ctx.guild.get_member(member_id))  # Получить пользователя из кэша бота


    Но в данном случае всё может быть намного проще, не нужно изобретать велосипед, достаточно разок почитать документацию, а не устаревшие туториалы (привет pass_context): https://discordpy.readthedocs.io/en/stable/ext/com...

    В discord.py существует понятие "конвертеры", которые значительно упрощают написание команд:
    @bot.command()
    async def info(ctx, *, member: discord.Member):
        await ctx.send(f"Вас называют: {member.display_name}. Ваш ID: {member.id}. etc...")


    Это, к слову, позволит вызывать команду не только по упоминанию пользователя, но и по его никнейму, ID, и полному тегу: https://discordpy.readthedocs.io/en/stable/ext/com...
    9rL1N4x.png

    Получать объект пользователя (User) нет смысла в данном случае, так как класс Member все методы класса User путём наследования.
    Ответ написан
  • Discord py не работает help, почему?

    Аргумент arg у вас не имеет стандартного значения. Аргументы без стандартного значения считаются обязательными аргументами.

    Добавьте стандартное значение аргумента или сделайте аргумент типа Optional.

    @bot.command()  # pass_context НЕ существует в текущей версии discord.py: https://discordpy.readthedocs.io/en/v1.4.1/migrating.html#context-changes
    async def help(ctx, arg = None):
        emb = discord.Embed(title = 'Помощь', colour = 0x2e2d2d)
    
        if arg == 'poll':
            emb.add_field(name = f"{ctx.prefix}poll", value = f"Использовать:\nder poll (название голосования), (первый параметр), (второй параметр), (и так до 9 раз)\nПример создания голосования:\npoll test, 1, 2")
            await ctx.send(embed = emb)
    
        else:
            emb.add_field(name = f"{ctx.prefix}poll", value = f"Создание голосовния.")
            await ctx.send(embed = emb)


    или

    from typing import Optional
    
    @commands.command()
    async def cmd(ctx, arg: Optional[str]): ...
    Ответ написан