我尝试使用命令从用户中删除角色,但我不太确定该命令的工作原理。
以下是代码:
@bot.command(pass_context=True)
@commands.has_role('staff')
async def mute(ctx, user: discord.Member):
await bot.remove_roles(user, 'member')
await bot.say("{} has been muted from chat".format(user.name))
答案 0 :(得分:1)
要删除角色,您需要使用 remove role 方法,我测试过它的工作原理如下: member.remove_roles(角色) “角色”是一个角色对象,而不是名称,所以应该是:
role_get = get(member.guild.roles, id=role_id)
await member.remove_roles(role_get)
使用您的代码:
@bot.command(pass_context=True)
@commands.has_role('staff')
async def mute(ctx, user: discord.Member):
role_get = get(member.guild.roles, id=role_id)
await member.remove_roles(role_get)
await bot.say("{} has been muted from chat".format(user.name))
答案 1 :(得分:0)
看起来remove_roles
需要一个Role
对象,而不仅仅是角色的名称。我们可以使用discord.utils.get
来获取角色
from discord.utils import get
@bot.command(pass_context=True)
@commands.has_role('staff')
async def mute(ctx, user: discord.Member):
role = get(ctx.message.server.roles, name='member')
await bot.remove_roles(user, role)
await bot.say("{} has been muted from chat".format(user.name))
我不知道如果您尝试删除目标成员没有的角色会发生什么,所以您可能想要进行一些检查。如果您尝试从服务器管理员中删除角色,这也可能会失败,因此您可能也想检查它。
答案 2 :(得分:0)
尝试:
import discord
from discord.ext import commands
@bot.command()
@commands.has_role('staff')
async def mute(ctx, user: discord.Member):
role = discord.utils.get(ctx.guild, name='member')
await user.remove_roles(role)
await ctx.send(f'{user.name} has been muted from chat')
答案 3 :(得分:0)
Remove_roles函数具有两个参数,第一个参数是从中删除角色和角色本身的用户。可以在函数参数中不写“ user:discord .Member”,而仅保留“ ctx”。您还需要删除角色。角色=获取(ctx.author.guild.roles,名称=“您要删除的角色的名称”(还包括'from discord.utils import get'),然后调用函数:'await ctx.author.remove_roles (角色)
from discord.utils import get
@bot.command(pass_context=True)
@commands.has_role('staff')
async def mute(ctx):
await ctx.author..remove_roles(role)
await ctx.send("{} has been muted from chat".format(user.name))