【问题标题】:Why won't my discord bot unban correctly?为什么我的不和谐机器人无法正确解禁?
【发布时间】:2021-08-03 09:30:03
【问题描述】:

我正在开发一个通用的不和谐机器人,我一直在努力使用 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)

【问题讨论】:

    标签: python python-3.x discord discord.py


    【解决方案1】:
    #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
    

    这个unban对我有用,你说[prefix]unban username and discriminator

    解禁鸟#7893

    【讨论】:

    • 欢迎来到 Stack Overflow!仅代码的答案并不是特别有用。请添加一些关于此代码如何解决问题的描述。
    【解决方案2】:
    • 您正在尝试拆分字符串并将其解压缩为两个变量。但是,当您拆分字符串时,该字符串没有任何“#”实例,并且只返回一个包含一个字符串(它是成员)的列表。无法解压。
    • 您应该使用commands.MemberConverter 立即将成员参数转换为成员对象。这个成员对象也是你需要解禁的。你不能解禁字符串...
    • 您不需要检查member 是否为None,因为如果没有给出参数,该命令将返回错误。
    • 您不必检查用户名和鉴别符是否相等,而应使用 ID。
    • 正如@justhalf 所建议的,您应该在发送消息之前放置 unban 方法。这是解禁失败的预防措施,但仍会向会员发送消息。

    实现后,代码更短更简单。

    @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!")
    

    【讨论】:

    • 好一个。如果你把ctx.guild.unban(member)放在member.send(message2)之前会更好
    • @justhalf 啊,很好。不想给虚假的希望:P
    • 所以我尝试了这个,我觉得我可能缺少导入。使用命令 if user.id == member.id: 它似乎在与 .id 作斗争。我错过了进口吗?我有 import discord 和 from discord.ext import 命令。
    • 不,没有缺少导入。你是什​​么意思它正在与.id 斗争?
    猜你喜欢
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2021-07-31
    • 2021-09-24
    • 2021-11-29
    • 2022-01-09
    • 2019-10-03
    • 2021-02-25
    相关资源
    最近更新 更多