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.

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.
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que la función kick_error en el cog Moderation 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ámetro self, de la siguiente manera:

    @commands.command()
    async def kick(self, ctx, member : discord.Member = None, *, reson=None):
        ...
    
    @kick.error
    async def kick_error(self, ctx, error):
        ...
    

    Al agregar el parámetro self a la función kick_error, esto permitirá que la función reciba los tres argumentos necesarios y resuelva el error.

Comments are closed.