如何将音频文件播放到频道中?
How to Play Audio File Into Channel?
如何播放来自 Discord 机器人的音频文件?需要播放本地文件,在JS中,发送某条消息后,它会加入输入消息的用户,并将文件播放到该频道。
GitHub 项目:LINK
要做到这一点,您必须首先确定几件事。
- 已安装 FFMPEG 并在 Windows [link]
中为其设置了环境路径
- 安装了 Microsoft Visual Studio (VS) [link]
- 已安装 Node.js。[link]
- 在 VS 中安装了 Discord.js。
从那里开始,步骤非常简单。完成项目 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');
全部完成后,请务必检查是否有任何未闭合的括号或圆括号。我做这个是因为我花了很多时间才终于找到一个好的解决方案,所以我只想与任何正在寻找类似东西的人分享它。
非常感谢!
我要说的一件事是为了帮助其他人,比如在第 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);
};
我继续将 Nicholas Johnson 的 Github bot code 包含在此处,但我做了一些细微的修改。
- 他似乎在创建一把锁;所以我创建了一个扩展 Discord
Client
. 的 LockableClient
- 永远不要在代码中包含授权令牌
auth.json
{
"token" : "your-token-here"
}
可锁定-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)
更新:如果要检测音频是否停止,必须订阅speaking
事件。
voiceChannel
.join()
.then((connection) => {
const dispatcher = connection.play("./audio_files/file.mp3");
dispatcher.on("speaking", (speaking) => {
if (!speaking) {
voiceChannel.leave();
}
});
})
这是一个半旧的线程,但我将在此处添加代码,希望能帮助人们解决问题并节省他们的时间。我花了很长时间才弄清楚这一点,但 dispatcher.on('end')
对我不起作用。我认为在 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);
请注意,fileName 是一个字符串路径,例如:fileName = "/example.mp3"。希望这可以帮助那里的人 :)
如何播放来自 Discord 机器人的音频文件?需要播放本地文件,在JS中,发送某条消息后,它会加入输入消息的用户,并将文件播放到该频道。
GitHub 项目:LINK
要做到这一点,您必须首先确定几件事。
- 已安装 FFMPEG 并在 Windows [link] 中为其设置了环境路径
- 安装了 Microsoft Visual Studio (VS) [link]
- 已安装 Node.js。[link]
- 在 VS 中安装了 Discord.js。
从那里开始,步骤非常简单。完成项目 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');
全部完成后,请务必检查是否有任何未闭合的括号或圆括号。我做这个是因为我花了很多时间才终于找到一个好的解决方案,所以我只想与任何正在寻找类似东西的人分享它。
非常感谢!
我要说的一件事是为了帮助其他人,比如在第 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);
};
我继续将 Nicholas Johnson 的 Github bot code 包含在此处,但我做了一些细微的修改。
- 他似乎在创建一把锁;所以我创建了一个扩展 Discord
Client
. 的 - 永远不要在代码中包含授权令牌
LockableClient
auth.json
{
"token" : "your-token-here"
}
可锁定-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)
更新:如果要检测音频是否停止,必须订阅speaking
事件。
voiceChannel
.join()
.then((connection) => {
const dispatcher = connection.play("./audio_files/file.mp3");
dispatcher.on("speaking", (speaking) => {
if (!speaking) {
voiceChannel.leave();
}
});
})
这是一个半旧的线程,但我将在此处添加代码,希望能帮助人们解决问题并节省他们的时间。我花了很长时间才弄清楚这一点,但 dispatcher.on('end')
对我不起作用。我认为在 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);
请注意,fileName 是一个字符串路径,例如:fileName = "/example.mp3"。希望这可以帮助那里的人 :)