用于取消白名单的机器人

bot for unwhitelisting people

我正在尝试制作一个用于将人员列入白名单和取消白名单的机器人。我使用 replit 因为它有简单的数据库 - 代码将 运行 在他们的数据库中。所以我开始制作机器人白名单,这很容易。当我开始取消白名单时出现错误...... 当我是 V.I.P 机器人时,它说我不是。请帮我... 代码:

@client.command()
async def unwhitelist(ctx, user):
    role = ctx.guild.get_role(893143464781422612)
    if role in ctx.author.roles:
        try:
            if len(db[str(user)]) != -1:
                del db[str(user)]
                await ctx.send(f'Succesfult deleted {str(user)} from V.I.P')
        except:
            await ctx.send(f'{str(user)} is not V.I.P')
    else:
        await ctx.send('U dont have Permission')

数据库看起来像这样:

{'user', 'user1', 'user2'}

DB 是 replit 的插件所以...不要混淆

TLDR

替换

try:
    if len(db[str(user)]) != -1:
        del db[str(user)]
        await ctx.send(f'Succesfult deleted {str(user)} from V.I.P')
except:
    await ctx.send(f'{str(user)} is not V.I.P')

if str(user) in db:
    db.remove(str(user))
    await ctx.send(f'Succesfult deleted {str(user)} from V.I.P')
else:
    await ctx.send(f'{str(user)} is not V.I.P')

说明

既然你有

db = {'user', 'user1', 'user2'}

变量db是一个set,不可下标。因此,当您的代码运行 db[str(user)](作为 if 条件的一部分)时,您会收到错误

TypeError: 'set' object is not subscriptable

此错误在您的 except 块中被捕获,因此您的程序发送消息说您不是 VIP。