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.

Recargar bot de Discord después de cambiar el prefijo (Discord.py)

El problema es que quiero cambiar dinámicamente mi prefijo con un comando. El prefijo se actualiza en el archivo JSON, pero el único problema es que el bot necesita recargar para aceptar el nuevo prefijo. Así que necesito una forma de hacer que el bot lea el nuevo prefijo instantáneamente después de actualizarlo en el archivo config.json.

ARCHIVO JSON:
"command_prefix": "."

CMD DE ACTUALIZACIÓN DE PREFIJO: (El comando está en mi cog de núcleo)

CAMBIO DE PREFIJO DE COMANDO

@commands.group(name="prefix", invoke_without_command=True)
@commands.has_permissions(administrator=True)
async def prefix(self, ctx):
    current_prefix = get_config_file("command_prefix")

    await ctx.channel.send(f'El prefijo actual es: **{current_prefix}** \n Si quieres cambiar el prefijo usa el subcomando: _set_')

@prefix.command(name="set")
@commands.has_permissions(administrator=True)
async def set(self, ctx, mode):
    mode != None

    with open('config.json', 'r') as f:
        config = json.load(f)

    config["command_prefix"] = mode

    with open('config.json', 'w') as f:
        json.dump(config, f, indent=4)

    f.close()

    await ctx.channel.send(f'El prefijo ha sido cambiado a `{mode}`')

“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para hacer que el bot lea el nuevo prefijo instantáneamente después de actualizarlo en el archivo config.json, simplemente puedes actualizar el atributo prefix del bot utilizando el atributo bot.command_prefix.

    Aquí tienes un ejemplo de cómo hacerlo:

    # COMANDO PARA CAMBIAR EL PREFIJO
    @commands.group(name="prefix", invoke_without_command=True)
    @commands.has_permissions(administrator=True)
    async def prefix(self, ctx):
        current_prefix = get_config_file("command_prefix")
    
        await ctx.channel.send(f'El prefijo actual es: **{current_prefix}** \n Si desea cambiar el prefijo, utilice el subcomando: _set_')
    
    @prefix.command(name="set")
    @commands.has_permissions(administrator=True)
    async def set(self, ctx, mode):
        mode != None
    
        with open('config.json', 'r') as f:
            config = json.load(f)
    
        config["command_prefix"] = mode
    
        with open('config.json', 'w') as f:
            json.dump(config, f, indent=4)
    
        f.close()
    
        # Actualizar el atributo prefix del bot
        self.bot.command_prefix = mode
    
        await ctx.channel.send(f'El prefijo se ha cambiado a `{mode}`')
    

    En este código actualizado, simplemente estamos actualizando el atributo self.bot.command_prefix con el nuevo valor de prefijo, inmediatamente después de escribirlo en el archivo config.json. De esta manera, el bot comenzará a utilizar el nuevo prefijo instantáneamente sin necesidad de recargar.

Comments are closed.