Replit平台开发白名单管理bot 移除白名单功能报错求助
问题原因&修复方案
一、权限校验失败的排查点
- 首先确认你代码里填写的角色ID
893143464781422612是服务器内对应操作权限角色的正确ID,需要开启Discord开发者模式后右键对应角色复制,手动输入容易出现输入错误 - 确认Bot自身的角色顺位高于你用于校验的权限角色,Discord角色顺位优先级高于权限配置,若Bot角色顺位低于校验角色,会出现角色读取异常导致校验失败
二、代码逻辑错误修复
你现有代码存在2处明显逻辑问题:
if len(db[str(user)]) != -1是无效判断:len()函数返回值最小为0,永远不可能等于-1,这行判断没有任何作用可直接删除- 你给出的DB结构是集合格式,而你代码中是按照字典键值对的方式读取DB,二者逻辑不匹配:如果你的白名单是直接将用户标识作为集合元素存储,判断逻辑需要改为判断用户是否在DB集合内
修正后参考代码
@client.command() async def unwhitelist(ctx, user): role = ctx.guild.get_role(893143464781422612) if role in ctx.author.roles: user_str = str(user) try: # 如果你添加白名单是用db[user_str] = 某某值的字典存储逻辑,保留del写法 # 如果是集合存储逻辑,替换为db.remove(user_str) del db[user_str] await ctx.send(f'Successfully deleted {user_str} from V.I.P') except: await ctx.send(f'{user_str} is not V.I.P') else: await ctx.send('U dont have Permission')
内容的提问来源于stack exchange,提问作者user15430859
相关产品推荐
相关产品推荐

