如何从用户中删除角色?

时间:2018-02-21 12:52:22

标签: python discord.py

我尝试使用命令从用户中删除角色,但我不太确定该命令的工作原理。

以下是代码:

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

4 个答案:

答案 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))