python-3.x 如何取消禁止用户?

gmxoilav  于 2023-01-27  发布在  Python
关注(0)|答案(3)|浏览(172)

我知道如何禁止会员,我知道如何踢他们,但我不知道如何解除他们的禁令。我有下面的代码输出的错误:
discord.ext.commands.errors.CommandInvokeError:命令引发异常:属性错误:"generator"对象没有属性"id"
代码:

@bot.command(pass_context=True)
@commands.has_role("Moderator")
async def unban2(ctx):
    mesg = ctx.message.content[8:]
    banned = client.get_user_info(mesg)
    await bot.unban(ctx.message.server, banned)
    await bot.say("Unbanned!")
e0bqpujr

e0bqpujr1#

要取消禁止一个用户,你需要他们的user对象。你似乎是这样做的:在你的命令中传递一个user_id,然后在此基础上创建一个user对象。你也可以使用get_bans()来实现,下面将对此进行解释,但我会先回答你的问题。

在命令中传递user_id

在代码中,mseg用户IDbanned用户对象

mesg = ctx.message.content[8:]
banned = await client.get_user_info(mesg)

编辑:正如squaswin所指出的,您需要等待get_user_info()
您将user_id定义为ctx.message.content[8:],在本例中,它是消息中从第8个字符开始的文本,第一个字符为0
根据您的代码,应该可以执行以下操作:
(The以下数字仅用于显示字符位置)

!unban2 148978391295820384
012345678...

这样做的问题是,如果您的命令名或前缀更改了长度,那么您必须更改ctx.message.content[8:]中的索引,使其与消息中的user_id一致。
更好的方法是将user_id作为参数传递给命令:

async def unban(ctx, user_id):
    banned = await client.get_user_info(user_id)

现在您可以直接将其用于client.get_user_info()

使用get_bans()函数

您可以改为使用get_bans()获取禁止用户的列表,然后使用该列表获取有效的用户对象。例如:

async def unban(ctx):
    ban_list = await self.bot.get_bans(ctx.message.server)

    # Show banned users
    await bot.say("Ban list:\n{}".format("\n".join([user.name for user in ban_list])))

    # Unban last banned user
    if not ban_list:
        await bot.say("Ban list is empty.")
        return
    try:
        await bot.unban(ctx.message.server, ban_list[-1])
        await bot.say("Unbanned user: `{}`".format(ban_list[-1].name))
    except discord.Forbidden:
        await bot.say("I do not have permission to unban.")
        return
    except discord.HTTPException:
        await bot.say("Unban failed.")
        return

要将其转换为一个工作命令集,您可以创建一个命令来显示已禁止用户的索引列表,并创建另一个命令来根据列表索引取消禁止用户。

hfsqlsce

hfsqlsce2#

get_user_info是一个协程,这意味着它必须像unbansay一样进行await艾德。
根据经验,除非您实际使用生成器,否则您得到的任何生成器错误都可能是由于没有等待协程而导致的。

banned = await bot.get_user_info(mesg)

哦,文档中还写到,这个函数可能会抛出错误,所以可能值得确保也不会出错。

try:
    banned = await bot.get_user_info(mesg)
except discord.errors.NotFound:
    await bot.say("User not found")
2eafrhcq

2eafrhcq3#

消息= ctx.消息.内容[8:]禁止=等待客户端.获取用户信息(消息)
148978391295820384 012345678联合国银行
异步定义取消禁止(ctx,用户ID):禁止=等待客户端。获取用户信息(用户ID)
异步定义unban(ctx):ban_list =等待自身.机器人.get_bans(ctx.消息.服务器)

# Show banned users
await bot.say("Ban list:\n{}".format("\n".join([user.name for user in ban_list])))

# Unban last banned user
if not ban_list:
    await bot.say("Ban list is empty.")
    return
try:
    await bot.unban(ctx.message.server, ban_list[-1])
    await bot.say("Unbanned user: `{}`".format(ban_list[-1].name))
except discord.Forbidden:
    await bot.say("I do not have permission to unban.")
    return
except discord.HTTPException:
    await bot.say("Unban failed.")
    return

相关问题