[英]How to Play Audio File Into Channel?
How do you play an audio file from a Discord bot?如何从 Discord 机器人播放音频文件? Needs to play a local file, be in JS, and upon a certain message being sent it will join the user who typed the message, and will play the file to that channel.
需要播放一个本地文件,在JS中,当某条消息被发送时,它会加入输入消息的用户,并将文件播放到该频道。
GitHub Project: LINK GitHub 项目:链接
In order to do this there are a few things you have to make sure of first.为了做到这一点,您必须首先确保一些事情。
From there the steps are quite simple.从那里开始的步骤非常简单。 After making your project
index.js
you will start typing some code.创建项目
index.js
您将开始键入一些代码。 Here are the steps:以下是步骤:
var Discord = require('discord.js');
var bot = new Discord.Client();
3. Create a Boolean variable to make sure that the system doesn't overload of requests; 3. 创建一个布尔变量,确保系统不会超载请求;
var isReady = true;
bot.on('message', message =>{ENTER CODE HERE});
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');
After you are all finished with this, make sure to check for any un-closed brackets or parentheses.完成此操作后,请确保检查任何未关闭的括号或圆括号。 i made this because it took my hours until I finally found a good solution so I just wanted to share it with anybody who is out there looking for something like this.
我之所以这样做是因为我花了好几个小时才终于找到了一个好的解决方案,所以我只是想与任何在那里寻找类似问题的人分享它。
不需要膨胀的 Visual Studio .. 方式矫枉过正.. 你只需要 node.js 和通过 npm 的依赖项。
thanks so much!非常感谢!
One thing I will say to help anyone else, is things like where it says ENTER CODE HERE on step 10, you put the code from step 11 IE:为了帮助其他人,我要说的一件事是,在第 10 步中显示在此处输入代码的地方,您将第 11 步中的代码放入 IE:
dispatcher.on("end", end => voiceChannel.leave());
As a complete example, this is how I have used it in my message command IF block:作为一个完整的例子,这是我在我的消息命令 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);
};
I went ahead an included Nicholas Johnson's Github bot code here, but I made slight modifications.我在这里继续使用包含 Nicholas Johnson 的Github 机器人代码,但我做了一些小修改。
LockableClient
that extends the Discord Client
.LockableClient
来扩展 Discord Client
。{
"token" : "your-token-here"
}
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;
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)
This is an semi old thread but I'm going to add code here that will hopefully help someone out and save them time.这是一个半旧的线程,但我将在这里添加代码,希望能帮助某人并节省他们的时间。 It took me way too long to figure this out but
dispatcher.on('end')
didn't work for me.我花了很长时间才弄清楚这一点,但
dispatcher.on('end')
对我不起作用。 I think in later versions of discord.js they changed it from end
to finish
我想在discord.js的后续版本,他们改变它从
end
到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);
Note that fileName is a string path for example: fileName = "/example.mp3".请注意,fileName 是一个字符串路径,例如:fileName = "/example.mp3"。 Hopefully that helps someone out there :)
希望这可以帮助那里的人:)
Update: If you want to detect if the Audio has stopped, you must subscribe to the speaking
event.更新:如果您想检测音频是否已停止,您必须订阅
speaking
事件。
voiceChannel
.join()
.then((connection) => {
const dispatcher = connection.play("./audio_files/file.mp3");
dispatcher.on("speaking", (speaking) => {
if (!speaking) {
voiceChannel.leave();
}
});
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.