discord.ext.commands.errors.MissingRequiredArgument: гильдия является обязательным аргументом, который отсутствует - PullRequest
0 голосов
/ 21 февраля 2020

Я хотел бы сделать команду для установки разрешений для всех текстовых каналов, но у меня есть несколько сложностей, чтобы сделать эту команду

Я пытался много раз, но я не помню, что я должен, пожалуйста, помогите мне , мне нужен код

мой код:

@bot.command()
async def close_all(ctx, *, guild: discord.Guild):
    for chan in guild.channels:
      await guild.channels.set_permissions(ctx.guild.default_role, send_messages=False)

ошибка: guild is a required argument that is missing.

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

То, что вы делаете прямо сейчас, - это , требующий от гильдии аргумента вашей команды , поэтому бот на самом деле ищет сообщение

close_all <guild>

guild: discord.Guild - это конвертер для гильдии, поэтому он должен каким-то образом преобразовать строку в объект гильдии. Поскольку это на самом деле невозможно, ваша команда не будет работать.

Простое решение: Просто всегда используйте гильдию, в которую было отправлено сообщение

@bot.command()
async def close_all(ctx):
    for chan in ctx.guild.channels:
        await guild.channels.set_permissions(ctx.guild.default_role, send_messages=False)

Более гибкое решение: В функцию передается дополнительный аргумент, который является идентификатором гильдии, в которой должна быть выполнена команда

@bot.command()
async def close_all(ctx, guild_id: int):
    # finding the guild according to the id passed
    guild = discord.utils.find(lambda g: g.id == guild_id, ctx.bot.guilds)
    for chan in guild.channels:
        await guild.channels.set_permissions(ctx.guild.default_role, send_messages=False)
1 голос
/ 21 февраля 2020

Попробуйте

@bot.command()
async def close_all(ctx):
    for chan in ctx.guild.channels:
      await chan.set_permissions(ctx.guild.default_role, send_messages=False)

Глядя на полученную ошибку, мне кажется, что вы не передаете объект гильдии. Кроме того, ваш for-l oop фактически не использует свой индекс, за исключением того, что он работает определенное количество раз.

Пока разрешения гильдии, которые вы пытаетесь изменить, являются гильдией, Вы отправляете это сообщение, это должно работать.

...