web-dev-qa-db-ja.com

オーディオファイルをチャンネルに再生する方法は?

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

5

GitHubプロジェクト: [〜#〜] link [〜#〜]

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

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

そこから手順は非常に簡単です。プロジェクトを作成したら_index.js_いくつかのコードを入力し始めます。手順は次のとおりです。

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

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

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

    var bot = new Discord.Client();

  3. ブール変数を作成して、システムがリクエストを過負荷にしないようにします。

    _var isReady = true;_

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

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

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

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

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

    _isReady = false;_

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

    _var voiceChannel = message.member.voiceChannel;_

  8. そのチャネルに参加して、すべてのエラーを追跡します。

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

  9. オーディオファイルへの参照を作成して再生します。

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

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

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

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

    voiceChannel.leave();

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

    bot.login('CLIENT TOKEN HERE');

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

17

Visual Studioの肥大化の必要はありません..やり過ぎです.npmを介してnode.jsと依存関係が必要なだけです。

4
Bill Kervaski

本当にありがとう!

他の誰かを助けるために私が言うことの1つは、ステップ10でコードを入力するというようなものです、ステップ11 IEからコードを入れます:

dispatcher.on("end", end => voiceChannel.leave());

完全な例として、これはメッセージコマンドのIFブロックで使用した方法です。

if (command === "COMMAND") {
        var VC = message.member.voiceChannel;
        if (!VC)
            return message.reply("MESSAGE IF NOT IN A VOICE CHANNEL")
    VC.join()
        .then(connection => {
            const dispatcher = connection.playFile('c:/PAtH/TO/MP3/FILE.MP3');
            dispatcher.on("end", end => {VC.leave()});
        })
        .catch(console.error);
};
2

付属のNicholas Johnsonの Githubボットコード を進めましたが、少し変更を加えました。

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

auth.js

{
  "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.js')
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)
0
Mr. Polywhirl