es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comando de Discord.py que otorga y elimina un rol al autor.

Estoy intentando codificar un bot de Discord con Python que tenga un comando donde puedas obtener/eliminar un rol escribiendo algo como ;me. Entonces, si ya tienes el rol, lo eliminará, y si no tienes el rol, te lo dará, pero no funciona. No habría ningún error en la consola, mi bot simplemente no responde al comando y no da/quita el rol. ¿Alguien puede ayudar?

@client.command()
async def me(ctx):
  role = client.get_role(123456789)
  if role in ctx.author.roles:
    em1 = discord.Embed(description="He eliminado el rol <@&123456789> de ti.")
    em1.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
    await ctx.author.remove_roles(role)
    await ctx.channel.purge(limit=1)
    await ctx.send(embed=em1, delete_after=5)
  else:
    em1 = discord.Embed(description="Te he dado el rol <@&123456789>.")
    em1.set_author(name=ctx.author.name, icon_url=ctx.author.avatar_url)
    await ctx.author.add_roles(role)
    await ctx.channel.purge(limit=1)
    await ctx.send(embed=em1, delete_after=5)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Existen algunos problemas potenciales con el código proporcionado. En primer lugar, client.get_role() debería cambiarse por discord.utils.get() para buscar el rol en el servidor. Además, se necesita convertir el ID del rol a un entero. El código corregido debería lucir así:

    @client.command()
    async def me(ctx):
        role = discord.utils.get(ctx.guild.roles, id=123456789)
        if role in ctx.author.roles:
            em1=discord.Embed(description="Te he eliminado el rol <@&123456789>.")
            em1.set_author(name=ctx.author.name,icon_url=ctx.author.avatar_url)
            await ctx.author.remove_roles(role)
            await ctx.channel.purge(limit=1)
            await ctx.send(embed=em1,delete_after=5)
        else:
            em1=discord.Embed(description="Te he otorgado el rol <@&123456789>.")
            em1.set_author(name=ctx.author.name,icon_url=ctx.author.avatar_url)
            await ctx.author.add_roles(role)
            await ctx.channel.purge(limit=1)
            await ctx.send(embed=em1,delete_after=5)
    

    Si esto no resuelve el problema, es posible que el bot no tenga los permisos necesarios para administrar roles o que el rol en cuestión no sea visible para el bot. Puede ser necesario verificar los permisos del bot y la visibilidad del rol para resolver el problema.

Comments are closed.