我想创建一个命令来设置所有文本通道的权限,但是我很难创建该命令
我已经尝试了很多次,但是我不记得我必须做什么 请帮助我,我需要一个代码
我的代码:
@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.
答案 0 :(得分:1)
尝试
@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循环实际上并没有使用它的索引,除非确保它运行一定的次数。
只要您要更改的公会权限是您要向其中发送此消息的公会的权限,这应该可以工作。
答案 1 :(得分:1)
您现在正在做的是要求公会作为命令的参数,所以机器人实际上正在寻找的是消息
close_all <guild>
guild: discord.Guild
是公会的Converter,因此应以某种方式将字符串转换为公会对象。由于这实际上是不可能的,因此您的命令将无法正常工作。
简便的解决方案:只需始终使用已发送邮件的公会即可
@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)
更灵活的解决方案:一个额外的参数传递给该函数,该参数是应在其中执行命令的行会的ID
@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)