我知道如何禁止会员,我知道如何踢他们,但我不知道如何解除他们的禁令。我有下面的代码输出的错误:
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!")
3条答案
按热度按时间e0bqpujr1#
要取消禁止一个用户,你需要他们的user对象。你似乎是这样做的:在你的命令中传递一个user_id,然后在此基础上创建一个user对象。你也可以使用get_bans()来实现,下面将对此进行解释,但我会先回答你的问题。
在命令中传递user_id
在代码中,
mseg
是用户ID,banned
是用户对象。编辑:正如squaswin所指出的,您需要等待
get_user_info()
您将user_id定义为
ctx.message.content[8:]
,在本例中,它是消息中从第8个字符开始的文本,第一个字符为0。根据您的代码,应该可以执行以下操作:
(The以下数字仅用于显示字符位置)
这样做的问题是,如果您的命令名或前缀更改了长度,那么您必须更改
ctx.message.content[8:]
中的索引,使其与消息中的user_id一致。更好的方法是将user_id作为参数传递给命令:
现在您可以直接将其用于
client.get_user_info()
。使用get_bans()函数
您可以改为使用get_bans()获取禁止用户的列表,然后使用该列表获取有效的用户对象。例如:
要将其转换为一个工作命令集,您可以创建一个命令来显示已禁止用户的索引列表,并创建另一个命令来根据列表索引取消禁止用户。
hfsqlsce2#
get_user_info
是一个协程,这意味着它必须像unban
和say
一样进行await
艾德。根据经验,除非您实际使用生成器,否则您得到的任何生成器错误都可能是由于没有等待协程而导致的。
哦,文档中还写到,这个函数可能会抛出错误,所以可能值得确保也不会出错。
2eafrhcq3#
消息= ctx.消息.内容[8:]禁止=等待客户端.获取用户信息(消息)
148978391295820384 012345678联合国银行
异步定义取消禁止(ctx,用户ID):禁止=等待客户端。获取用户信息(用户ID)
异步定义unban(ctx):ban_list =等待自身.机器人.get_bans(ctx.消息.服务器)