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.

Reenviar archivos adjuntos de mensajes directos en Discord con Python

Quiero que mi bot de Discord tome un archivo enviado a sus Mensajes Directos y lo canalice a un canal específico en mi servidor. Puedo hacer que se reenvíe un mensaje de texto normal. Aquí está mi código actualmente:

@bot.event
async def on_message(message):
    channel = bot.get_channel(*Channel ID Redactado*) # ¿Estás seguro de que este canal existe?
    if message.channel == message.author.dm_channel: # no uses guild == None, ya que los DM de grupo podrían satisfacer esto, y no puedes enviarte mensajes a ti mismo, no es necesario verificar al usuario del cliente
        embed = discord.Embed(
            title = '¡Enviado a los MD de SFU Bots!', # Título
            description = f'{message.content}', # Contenido de 1 línea
            color = 0x9fffff # color del embed
        )
        embed.set_footer(text=f'Enviado por {message.author.display_name} | ID-{message.author.id}')
        await channel.send(embed=embed)
        print("Enviado por {} | ID-{}!" .format(message.author, message.author.id))
        print("Contenido: '{}'" .format(message.content))
        print('Enviado MD al Canal')
    await bot.process_commands(message)

He utilizado el siguiente código para enviar archivos, pero no para reenviarlos desde los canales de MD:

@bot.command()
async def send(ctx):
    file = discord.File("mipathdearchivo")
    await ctx.send(file=file, content="Mensaje a ser enviado")
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para reenviar archivos que se envían a los mensajes directos de tu bot de Discord a un canal específico en tu servidor, puedes modificar tu evento on_message para verificar si el mensaje contiene adjuntos. Si lo hace, puedes usar la clase discord.File para crear un objeto discord.File a partir del adjunto, y luego enviarlo al canal deseado usando el método await channel.send(). Aquí tienes un ejemplo de implementación:

    @bot.event
    async def on_message(message):
        channel = bot.get_channel(*Channel ID Redacted*) # ¿Estás seguro de que este canal existe?
        if message.channel == message.author.dm_channel:
            if message.attachments: # verificar si el mensaje tiene adjuntos
                # supongamos que se envía solo un adjunto por simplicidad, puedes modificar el código según sea necesario para manejar múltiples adjuntos
                file = await message.attachments[0].to_file() # crear un objeto discord.File a partir del adjunto
                await channel.send(file=file, content=f"{message.content}") # enviar el archivo y un contenido de mensaje opcional al canal
                print(f"Archivo enviado por {message.author} | ID-{message.author.id}!")
            else: # el mensaje no tiene adjuntos, comportarse como antes
                embed = discord.Embed(
                    title = '¡Enviado a los DM de SFU Bots!', # Título
                    description = f'{message.content}', # Contenido de 1 línea
                    color = 0x9fffff # Color del embed
                )
                embed.set_footer(text=f'Enviado por {message.author.display_name} | ID-{message.author.id}')
                await channel.send(embed=embed)
                print(f"DM enviado al canal por {message.author} | ID-{message.author.id}!")
        await bot.process_commands(message)
    

    Este evento on_message modificado verificará si el mensaje enviado a los DM del bot contiene adjuntos, y si es así, creará un objeto discord.File a partir del adjunto y lo enviará al canal deseado usando el método await channel.send(). Si el mensaje no contiene adjuntos, se comportará como antes y enviará un embed al canal.

Comments are closed.