Discord ボットからオーディオ ファイルを再生するにはどうすればよいですか? JS でローカル ファイルを再生する必要があり、特定のメッセージが送信されると、メッセージを入力したユーザーに参加し、そのチャネルでファイルを再生します。
5 に答える
GitHub プロジェクト:リンク
これを行うには、最初に確認しなければならないことがいくつかあります。
- FFMPEG をインストールし、Windows に環境パスを設定する [リンク]
- Microsoft Visual Studio (VS) がインストールされている [リンク]
- Node.js をインストールします。[リンク]
- Discord.js を VS にインストールします。
そこからの手順は非常に簡単です。プロジェクトを作成したらindex.js
、コードの入力を開始します。手順は次のとおりです。
- Discord.js 依存関係をプロジェクトに追加します。
var Discord = require('discord.js');
- botというクライアント変数を作成します。
var bot = new Discord.Client();
3. ブール変数を作成して、システムが要求を過負荷にしないようにします。
var isReady = true;
- 次に、正しいメッセージをインターセプトする関数を作成します。
bot.on('message', message =>{ENTER CODE HERE});
- メッセージが正しいかどうか、およびボットの準備ができているかどうかを確認するif ステートメントを作成します。
if (isReady && message.content === 'MESSAGE'){ENTER CODE HERE}
- ボットが終了するまでイベントを処理できないように、ボットを準備完了に設定します。
isReady = false;
- メッセージ送信者が現在いるチャネルの変数を作成します。
var voiceChannel = message.member.voice.channel;
- そのチャンネルに参加して、すべてのエラーを追跡してください。
voiceChannel.join().then(connection =>{ENTER CODE HERE}).catch(err => console.log(err));
- 参照を作成し、オーディオ ファイルを再生します。
const dispatcher = connection.play('./audiofile.mp3');
- オーディオ ファイルの再生が完了するまで待機するスロット。
dispatcher.on("end", end => {ENTER CODE HERE});
- オーディオの再生が終了したらチャンネルを離れます。
voiceChannel.leave();
- アプリケーションにログインします。
bot.login('CLIENT TOKEN HERE');
これがすべて完了したら、閉じていない括弧や括弧がないかどうかを確認してください。最終的に良い解決策を見つけるまでに何時間もかかったので、このようなものを探している人と共有したかったので、これを作成しました.
ここに含まれている Nicholas Johnson のGithub ボット コードを先に進めましたが、わずかな変更を加えました。
- 彼はロックを作成しているようです。だから私
LockableClient
は Discord を拡張するを作成しましたClient
。 - コードに認証トークンを含めないでください
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)
これはやや古いスレッドですが、誰かを助けて時間を節約できるようにコードをここに追加します。これを理解するのに時間がかかりすぎましたが、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" などの文字列パスであることに注意してください。うまくいけば、誰かがそこに役立ちます:)