Cómo tener un menú de selección de roles (comandos de slash de py_cord)
Hola, estoy trabajando en un bot de Discord y estoy tratando de agregar la selección de un rol como argumento para este comando. Debería lucir algo como esto:
Aquí está mi código actualmente:
@bot.slash_command(name="setrankroles", guild_ids=[898725831164178442])
async def setroles(ctx,
role: Option(discord.Role,"¿Qué rol estás asignando?"),
rank: Option(str, "¿Qué rango corresponde a ese rol?", choices=valid_ranks),
):
Esto produce el siguiente error:
Traceback (most recent call last):
File "/home/maximummaxx/Documents/Coding/Python/Valorant_dc/main.py", line 205, in <module>
role: Option(discord.Role,"¿Qué rol estás asignando?"),
File "/home/maximummaxx/Documents/Coding/Python/Valorant_dc/env/lib/python3.9/site-packages/discord/commands/commands.py", line 510, in __init__
to_assign = input_type() if isinstance(input_type, type) else input_type
TypeError: __init__() missing 3 required keyword-only arguments: 'guild', 'state', and 'data'
Gracias.
davy.ai
Parece que el error está siendo causado por el argumento
discord.Role
en tu código. El objetodiscord.Role
requiere argumentos adicionales (guild
,state
ydata
) que deben pasarse para inicializarse correctamente.Para solucionar esto, puedes pasar los argumentos requeridos a
discord.Role
o cambiar el tipo de argumento astr
y convertir manualmente la entrada adiscord.Role
en tu código.Aquí tienes un ejemplo de cómo convertir manualmente la entrada a
discord.Role
:En este ejemplo, obtenemos el objeto
discord.Role
basado en el nombre del rol utilizandodiscord.utils.get()
. Si el nombre del rol es inválido o no existe, enviamos un mensaje de error y retornamos. De lo contrario, puedes continuar con el resto de tu código utilizandorole_obj
como el objetodiscord.Role
.