4
votes

I am trying to make my discord bot send a jpg file to my discord server, but I keep getting an error that seems pretty uncommon as I can not find any solutions to it on the internet...

the error is... discord.ext.commands.errors.CommandInvokeError: Command raised an exception: ClientRequestError: Can not write request body for https://discordapp.com/api/v6/channels/454374995758678029/messages

My imports are

import time

import discord
from discord.ext import commands
from discord.ext.commands import Bot
import asyncio

The code that I will pull out that the error is related to is

@bot.command(pass_context = True)

async def image(ctx):

        await bot.send_file(ctx.message.channel, open('halogen.jpg'))

Am I just missing an import or is there an actual problem with my code?

Thanks guys

2
Sidenote: passing open(...) to a function is usually a bad idea, since that image might never get closed, so if this command is run multiple times, you could leak file handles and eventually crash your bot. - Ash
Josh, you were right... I got rid of open and my code instantly worked... always the small things - Enzo Romano
You should be opening your object in 'rb' mode. You can also just pass the path to the file instead of a file object. See the send_file documentation - Patrick Haugh

2 Answers

7
votes

I was researching the same thing and I found this to work:

    await ctx.send(file=discord.File(r'c:\location\of\the_file_to\send.png'))

Here is where I found it: link

2
votes

Try doing it this way.

@bot.command(pass_context=True)
async def send(ctx):
    area=ctx.message.channel
    await bot.send_file(area, r"c:\location\of\the_file_to\send.png",filename="Hello",content="Message test")

You can refer to the discord documentation for it here link