我正在开发一个通用的 discord 机器人,我一直在努力使用 unban 命令。我用python编码了这个。代码如下:
@client.command()
@commands.has_permissions(administrator = True)
async def unban(ctx, *, member):
if member == None:
await ctx.send("Please enter a username")
return
banned_users = await ctx.guild.bans()
member_name, member_discriminator = member.split("#")
for ban_entry in banned_users:
user = ban_entry.user
if (user.name, user.discriminator) == (member_name, member_discriminator):
message2 = f"You have been unbanned from {ctx.guild.name}"
await member.send(message2)
await ctx.guild.unban(member)
await ctx.send(f"{member} has been unbanned!")
这是它给出的例外:
Ignoring exception in command unban:
Traceback (most recent call last):
File
"C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\discord\ext\commands\core.py", line 85, in wrapped
ret = await coro(*args, **kwargs)
File "C:\Users\OneDrive\Desktop\Bot\Bot.py", line 40, in unban
member_name, member_discriminator = member.split("#")
ValueError: not enough values to unpack (expected 2, got 1)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\discord\ext\commands\bot.py", line 939, in invoke
await ctx.command.invoke(ctx)
File "C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\discord\ext\commands\core.py", line 863, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "C:\Users\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\discord\ext\commands\core.py", line 94, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: ValueError: not enough values to unpack (expected 2, got 1)
答案 0 :(得分:2)
commands.MemberConverter
将成员参数转换为成员对象。这个成员对象也是你需要解禁的。你不能解禁一个字符串...member
是否为 None,因为如果没有给出参数,该命令将返回错误。实施后,代码更短、更简单。
@client.command()
@commands.has_permissions(administrator = True)
async def unban(ctx, member:commands.MemberConverter):
banned_users = await ctx.guild.bans()
for ban_entry in banned_users:
user = ban_entry.user
if user.id == member.id:
message2 = f"You have been unbanned from {ctx.guild.name}"
await ctx.guild.unban(member)
await member.send(message2)
await ctx.send(f"{member} has been unbanned!")
答案 1 :(得分:0)
#unban
@client.command(aliases=['ub'])
@commands.has_permissions(ban_members = True)
async def unban(ctx, *, member):
banned_users = await ctx.guild.bans()
member_name, member_discriminator = member.split("#")
for ban_entry in banned_users:
user = ban_entry.user
if (user.name, user.discriminator) == (member_name, member_discriminator):
await ctx.guild.unban(user)
await ctx.send(f'**{user}** has been unbanned!')
return
这个解除对我有用,你说[前缀]解除用户名和鉴别器
<块引用>取消禁鸟#7893