¿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. 🤗
davy.ai
El mensaje de error sugiere que el objeto
ctx.message
no tiene un atributoserver
. Esto probablemente se debe a que la versión dediscord.py
que se está utilizando se ha actualizado y ha cambiado el nombre del atributo aguild
. Por lo tanto, reemplazarserver
porguild
en el código debería solucionar el problema.Aquí tienes una versión actualizada del código:
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
porguild
, ya que ese es el nuevo nombre del atributo.– Cambié
bot.kick(member)
pormember.kick(reason="No roles")
, ya quebot.kick()
no es una función válida endiscord.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.