19

Discord ボットからオーディオ ファイルを再生するにはどうすればよいですか? JS でローカル ファイルを再生する必要があり、特定のメッセージが送信されると、メッセージを入力したユーザーに参加し、そのチャネルでファイルを再生します。

4

5 に答える 5

33

GitHub プロジェクト:リンク

これを行うには、最初に確認しなければならないことがいくつかあります。

  1. FFMPEG をインストールし、Windows に環境パスを設定する [リンク]
  2. Microsoft Visual Studio (VS) がインストールされている [リンク]
  3. Node.js をインストールします。[リンク]
  4. Discord.js を VS にインストールします。

そこからの手順は非常に簡単です。プロジェクトを作成したらindex.js、コードの入力を開始します。手順は次のとおりです。

  1. Discord.js 依存関係をプロジェクトに追加します。

var Discord = require('discord.js');

  1. botというクライアント変数を作成します。

var bot = new Discord.Client(); 3. ブール変数を作成して、システムが要求を過負荷にしないようにします。

var isReady = true;

  1. 次に、正しいメッセージをインターセプトする関数を作成します。

bot.on('message', message =>{ENTER CODE HERE});

  1. メッセージが正しいかどうか、およびボットの準備ができているかどうかを確認するif ステートメントを作成します。

if (isReady && message.content === 'MESSAGE'){ENTER CODE HERE}

  1. ボットが終了するまでイベントを処理できないように、ボットを準備完了に設定します。

isReady = false;

  1. メッセージ送信者が現在いるチャネルの変数を作成します。

var voiceChannel = message.member.voice.channel;

  1. そのチャンネルに参加して、すべてのエラーを追跡してください。

voiceChannel.join().then(connection =>{ENTER CODE HERE}).catch(err => console.log(err));

  1. 参照を作成し、オーディオ ファイルを再生します。

const dispatcher = connection.play('./audiofile.mp3');

  1. オーディオ ファイルの再生が完了するまで待機するスロット。

dispatcher.on("end", end => {ENTER CODE HERE});

  1. オーディオの再生が終了したらチャンネルを離れます。

voiceChannel.leave();

  1. アプリケーションにログインします。

bot.login('CLIENT TOKEN HERE');

これがすべて完了したら、閉じていない括弧や括弧がないかどうかを確認してください。最終的に良い解決策を見つけるまでに何時間もかかったので、このようなものを探している人と共有したかったので、これを作成しました.

于 2017-01-11T00:24:55.767 に答える
3

ここに含まれている Nicholas Johnson のGithub ボット コードを先に進めましたが、わずかな変更を加えました。

  1. 彼はロックを作成しているようです。だから私LockableClientは Discord を拡張するを作成しましたClient
  2. コードに認証トークンを含めないでください

auth.json

{
  "token" : "your-token-here"
}

lockable-client.js

const { Client } = require('discord.js')

/**
 * A lockable client that can interact with the Discord API.
 * @extends {Client}
 */
class LockableClient extends Client {
  constructor(options) {
    super(options)
    this.locked = false
  }
  lock() {
    this.setLocked(true)
  }
  unlock() {
    this.setLocked(false)
  }
  setLocked(locked) {
    return this.locked = locked
  }
  isLocked {
    return this.locked
  }
}

module.exports = LockableClient;

index.js

const auth = require('./auth.json')
const { LockableClient } = require('./lockable-client.js')

const bot = new LockableClient()

bot.on('message', message => {
  if (!bot.isLocked() && message.content === 'Gotcha Bitch') {
    bot.lock()
    var voiceChannel = message.member.voiceChannel
    voiceChannel.join().then(connection => {
      const dispatcher = connection.playFile('./assets/audio/gab.mp3')
      dispatcher.on('end', end => voiceChannel.leave());
    }).catch(err => console.log(err))
    bot.unlock()
  }
})

bot.login(auth.token)
于 2019-11-15T16:02:52.957 に答える
2

これはやや古いスレッドですが、誰かを助けて時間を節約できるようにコードをここに追加します。これを理解するのに時間がかかりすぎましたが、dispatcher.on('end')うまくいきませんでした。endそれ以降のバージョンのdiscord.jsでは、からに変更されたと思いますfinish

var voiceChannel = msg.member.voice.channel;
    voiceChannel.join()
        .then(connection => {
            const dispatcher = connection.play(fileName);
            dispatcher.on("finish", end => {
                voiceChannel.leave();
                deleteFile(fileName);
            });
        })
        .catch(console.error);

fileName は、fileName = "/example.mp3" などの文字列パスであることに注意してください。うまくいけば、誰かがそこに役立ちます:)

于 2020-12-31T21:29:22.873 に答える