web-dev-qa-db-ja.com

DiscordボットにNodeJSでメッセージ付きの画像を送信させる

私はいくつかの写真を持っていますが、すべて画像に直接リンクしていて(形式: https://i.imgur.com/XXXXXX.jpg )、NodeJSで作成したDiscordボットです。

次のようなメッセージを送信します。

bot.sendMessage({
    to: channelID,
    message: "My Bot's message"
});

私はこれを試しました:

bot.sendMessage({
    to: channelID,
    message: "My Bot's message",
    file: "https://i.imgur.com/XxxXxXX.jpg"
});

しかし、私はテキストのみを取得します。私はそれを調べたところ、- この質問 は私が何をする必要があるかを言うことにも近づいた唯一の人でした、そしてそれはうまくいきませんでした。

それで、私はこれをどのように行うべきですか?

これがボットの作成方法です。

var bot = new Discord.Client({
   token: auth.token,
   autorun: true
});
bot.on('ready', function (evt) {
    logger.info('Connected');
    logger.info('Logged in as: ');
    logger.info(bot.username + ' - (' + bot.id + ')');
});
bot.on('message', function (user, userID, channelID, message, evt) {
    // My code
}
3
Kaito Kid

_ClientUser.sendMessage_は非推奨 であり、オプションのfileパラメータも同様です。文字列の配列としてのfilesまたは FileOptions を使用して、Channel.send(message, options)を使用する必要があります。

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

廃止されたメソッドを使い続けたい場合は、 _ClientUser.sendFile_ が興味を引くかもしれませんが、それ以上のものに移動することをお勧めしますcurrent

7
Caleb

次のように、v11.2でローカルファイルを送信できます。

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');
2
koubi

これは2019年のGoogleでの上位の結果の1つなので、discord.ioでファイルをアップロードする方法の新しい方法を追加します

最初に異なるのは、on()関数がいくつかの追加パラメーターを取ることです。

次に、uploadFileオブジェクトを受け取るuploadFileOptsという新しいメソッドがあります。 fileには、ボットファイルからイメージへのローカルパスである文字列を指定できます。

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

したがって、ボットスクリプトの横に画像を配置すると、コードは次のようになります。

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

それでもインターネットからそのイメージを取得したい場合は、Bufferオブジェクトに変換する必要があります。ただし、ファイルをローカルに保存する方が簡単です。

1