Mi controlador de errores dejó de funcionar cuando lo moví a un engranaje.
Moví la función de expulsión (kick) y el manejador de errores de expulsión (kick_error) desde la función principal a un cog pero ahora arroja un error.
Archivo principal
from discord import client
from discord.ext import commands
import discord
from dotenv import load_dotenv
import os
load_dotenv()
TOKEN = os.getenv('token')
client = commands.Bot(command_prefix=".")
@client.event
async def on_ready():
print(f"Iniciado como {client.user}")
# Cargando los cogs
for filename in os.listdir('./cogs'):
if filename.endswith('.py'):
client.load_extension(f'cogs.{filename[:-3]}')
client.run(TOKEN)
Cog
import discord
from discord.ext import commands
class Moderation(commands.Cog):
def __init__(self, client):
self.client = client
@commands.Cog.listener()
async def on_ready(self):
print('Moderation está en línea')
@commands.command()
async def kick(ctx, member : discord.Member = None, *, reson=None):
if member is None:
await ctx.reply("Uso: .kick @usuario motivo", mention_author=False)
else:
await member.kick(reason=reson)
await ctx.reply("hecho",mention_author=False)
# Esto dejó de funcionar
#------------------------
@kick.error()
async def kick_error(ctx, error):
if isinstance(error, commands.errors.MemberNotFound):
await ctx.reply("Usuario no encontrado", mention_author=False)
#------------------------
def setup(client):
client.add_cog(Moderation(client))
Mensaje de error: discord.ext.commands.errors.CommandInvokeError: El comando generó una excepción: TypeError: Moderation.kick_error() toma 2 argumentos posicionales pero se proporcionaron 3.
davy.ai
El mensaje de error indica que la función
kick_error
en el cogModeration
está recibiendo dos argumentos posicionales, pero se dieron tres. Esto probablemente se debe a que el manejador de errores no fue definido correctamente dentro del cog cuando se movió desde la función principal.Para solucionar este problema, la función
kick_error
debería incluir el parámetroself
, de la siguiente manera:Al agregar el parámetro
self
a la funciónkick_error
, esto permitirá que la función reciba los tres argumentos necesarios y resuelva el error.