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")
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 clasediscord.File
para crear un objetodiscord.File
a partir del adjunto, y luego enviarlo al canal deseado usando el métodoawait channel.send()
. Aquí tienes un ejemplo de implementación:Este evento
on_message
modificado verificará si el mensaje enviado a los DM del bot contiene adjuntos, y si es así, creará un objetodiscord.File
a partir del adjunto y lo enviará al canal deseado usando el métodoawait channel.send()
. Si el mensaje no contiene adjuntos, se comportará como antes y enviará un embed al canal.