python - discord.py 试图删除用户的所有角色
问题描述
我有一个问题,我试图删除用户对某种静音角色的所有角色,但它给了我这个错误discord.ext.commands.errors.CommandInvokeError: Command raised an exception: NotFound: 404 Not Found (error code: 10011): Unknown Role
这是我的代码
@client.command(aliases=['m'])
@commands.has_permissions(kick_members = True)
async def mute(ctx,member : discord.Member):
muteRole = ctx.guild.get_role(728203394673672333)
for i in member.roles:
await member.remove_roles(i)
await member.add_roles(muteRole)
await ctx.channel.purge(limit = 1)
await ctx.send(str(member)+' has been muted!')
我知道这种问题已经在这里问过:如何一次删除所有角色(Discord.py 1.4.1)。但它没有回答,根本没有帮助我
解决方案
问题是所有用户都有一个“隐形角色”,@everyone
. 如果你尝试,你会看到它出现
for i in member.roles:
print(i)
remove_roles
是一个高级功能,它会尝试删除@everyone
,这会导致你的错误。
要清除用户的所有当前角色,您可以执行以下操作:
@client.command(aliases=['m'])
@commands.has_permissions(kick_members = True)
async def mute(ctx, member : discord.Member):
muteRole = ctx.guild.get_role(775449115022589982)
await member.edit(roles=[muteRole]) # Replaces all current roles with roles in list
await ctx.channel.purge(limit = 1)
await ctx.send(str(member)+' has been muted!')
await member.edit(roles=[])
将所有当前角色替换为您在列表中拥有的角色。将列表留空以删除用户的所有角色。
虽然如果你想用 a 来做for loop
,你可以使用try
@client.command(aliases=['m'])
@commands.has_permissions(kick_members = True)
async def mute(ctx, member : discord.Member):
muteRole = ctx.guild.get_role(775449115022589982)
for i in member.roles:
try:
await member.remove_roles(i)
except:
print(f"Can't remove the role {i}")
await member.add_roles(muteRole)
await ctx.channel.purge(limit = 1)
await ctx.send(str(member)+' has been muted!')
推荐阅读
- html - 水平标签栏响应式引导程序/ blazor
- oracle - 使用 EXECUTE IMMEDIATE 时 PL/SQL 块不执行结束
- r - R 中的 unnest_tokens() 创建单词列,但无法在 dplyr 命令中选择单词列
- c++ - 检查数组中是否有来自字符串的值,如果没有,则添加它
- firebase - firebase react-native auth 总是要求进行身份验证
- javascript - 为什么 new Date(yyyy-mm-dd) 显示过去的日期?
- angular - 如何忽略 TypeScript 错误 TS2339 - 类型上不存在属性
- php - 本地主机 MAMP 不从外部网页获取文件内容
- sql - 如何使用 SQL Server 将“01020304”更改为“01,02,03,04”?
- google-cloud-platform - 谷歌云函数部署失败