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.

¿Cómo puedo expulsar a todos los miembros sin un rol en mi servidor de Discord? (discord.py)

Estoy tratando de encontrar un comando para expulsar a todos los miembros sin un rol en mi servidor de Discord. Busqué en Google + este sitio web y encontré soluciones que no parecen funcionar para mí. Esto es lo que intenté.

import discord
from discord.ext import commands
from discord.ext.commands import has_permissions

bot = commands.Bot(command_prefix='$')

@bot.command(pass_context=True)
async def noroleskick(ctx):
    server=ctx.message.server
    for member in tuple(server.members):
        if len(member.roles)==1:
            await bot.kick(member)

bot.run(token)

Sin embargo, esto no funcionó y aquí está el error:

File "main.py", line 111, in noroleskick
    server=ctx.message.server
AttributeError: 'Message' object has no attribute 'server'

Encontré esto en Reddit. Si esto es sencillo, pido disculpas sinceramente. Soy principiante en programación, así que si pudieras entrar en detalle, lo agradecería mucho. 🤗

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que el objeto ctx.message no tiene un atributo server. Esto probablemente se debe a que la versión de discord.py que se está utilizando se ha actualizado y ha cambiado el nombre del atributo a guild. Por lo tanto, reemplazar server por guild en el código debería solucionar el problema.

    Aquí tienes una versión actualizada del código:

    import discord
    from discord.ext import commands
    from discord.ext.commands import has_permissions
    
    bot = commands.Bot(command_prefix='$')
    
    @bot.command(pass_context=True)
    @has_permissions(kick_members=True)
    async def noroleskick(ctx):
        guild = ctx.message.guild
        for member in tuple(guild.members):
            if len(member.roles) == 1: # Esto significa que el miembro solo tiene el rol @everyone
                await member.kick(reason="No roles")
        await ctx.send("Todos los miembros sin roles han sido expulsados.")
    
    bot.run(token)
    

    Realicé los siguientes cambios en el código:
    – Agregué una verificación de permisos kick_members para asegurarme de que el comando solo se ejecute por usuarios con este permiso.
    – Reemplacé server por guild, ya que ese es el nuevo nombre del atributo.
    – Cambié bot.kick(member) por member.kick(reason="No roles"), ya que bot.kick() no es una función válida en discord.py.
    – Agregué un mensaje para indicar que el comando se ha ejecutado correctamente.

    Además, es importante tener en cuenta que este comando puede expulsar a miembros que tienen roles pero que no son visibles para el bot. Esto se debe a que len(member.roles) solo cuenta el número de roles que el bot puede ver, así que tenlo en cuenta al usar este comando.

Comments are closed.