Make Discord bot send picture with message with NodeJS

ClientUser.sendMessage is deprecated, as is the file parameter in its options. You should be using Channel.send(message, options), with files as an array of strings or FileOptions.

bot.on('message' message => {
    message.channel.send("My Bot's message", {files: ["https://i.imgur.com/XxxXxXX.jpg"]});
});

If you want to stick to your deprecated methods, ClientUser.sendFile might be something of interest to you, though I do recommend you move over to the stuff that's more current.


You can send local files in v11.2 like this:

var Discord = require('discord.js');
var bot = new Discord.Client();

bot.on('message', message => {
    var prefix = '!'
    var msg = message.content;

    if (msg === prefix + 'image') {
        message.channel.send('Message that goes above image', {
            files: [
                "./image-to-send.png"
            ]
        });
    }
});

bot.login('TOKEN');

Since this is one of the top results on google in 2019, I'm adding the new method of how to upload files with discord.io

First thing that's different is the on() function takes some additional parameters.

Next is that there's a new method called uploadFile that takes an uploadFileOpts object. the file can take a string that is a local path from your bot file to the image.

uploadFileOpts = {
  to: string,
  file: string|Buffer,
  filename?: string,
  message?: string
}

So, if you place your image next to your bot script, your code should look like this

bot.on('message', function (user, userID, channelID, message, evt) {
 bot.uploadFile({
            to: channelID,
            file: 'myImage.jpg'
        });
}

If you still want to snag that image from the internet, you'll need to convert it into a Buffer object. However, storing the file locally is simpler.