【发布时间】:2021-08-31 09:59:02
【问题描述】:
我写了一个不和谐的机器人。 “o”是游戏的第一个字母。 “阿特拉”是跳过。当我写 -o MUSIC_NAME 时,音乐正在添加队列并开始播放。当我再次写作时,只需添加队列。一切都还好,还在这里。当我写 -atla.它也运行良好。但是当我允许改变自动音乐本身时,它会自动改变音乐。但问题就在这里。如果 (list.length === 0) 在 endHandler 函数中阻塞,则最后一首音乐的结尾不起作用。我该如何解决?感谢您的关注。
const Discord = require('discord.js');
const config = require("./config.json");
const ytdl = require('ytdl-core');
const google = require('googleapis');
const youtube = new google.youtube_v3.Youtube({ version: 'v3', auth: "api_key" });
const client = new Discord.Client();
const prefix = "-";
let dispatcher;
let connection;
let url;
let list = [];
let cMusic;
let pStatus = false;
client.once('ready', () => {
console.log('Ready!');
client.user.setActivity("Hymn For The Weekend", {
type: "LISTENING",
});
});
client.on('message', async (message) => {
if (message.author.bot) return;
if (!message.content.startsWith(prefix)) return;
if (!message.guild) return;
const commandBody = message.content.slice(prefix.length);
const args = commandBody.split(' ');
const command = args.shift().toLowerCase();
if (command === 'yardım') {
message.reply(
`
Komutlar:
-o MUSIC_NAME --> "o", oynat kelimesinden gelmekte.
-durdur
-devam
-atla
-sg --> çıkış yaptırır.
`
);
}
if (command === 'o') {
mName = args.join(' ');
if (args.length == 0) {
message.reply("Geçersiz oynatma isteğinde bulundun. Adam ol.");
} else {
if (message.member.voice.channel) {
connection = await message.member.voice.channel.join();
await youtube.search.list({ part: 'snippet', q: `${mName}` }, async function (err, data) {
if (err) {
console.error('Error: ' + err);
message.reply('Hata: '+ err);
}
if (data) {
let mQueue = 0;
if(data.data.items[mQueue].id.kind === 'youtube#video') {
url = "https://www.youtube.com/watch?v=" + data.data.items[mQueue].id.videoId;
console.log(url);
} else if (data.data.items[mQueue+1].id.kind === 'youtube#video') {
url = "https://www.youtube.com/watch?v=" + data.data.items[mQueue+1].id.videoId;
console.log(url);
} else if (data.data.items[mQueue+2].id.kind === 'youtube#video') {
url = "https://www.youtube.com/watch?v=" + data.data.items[mQueue+2].id.videoId;
console.log(url);
} else {
message.reply("Aradığın şarkıyı bulamadım.")
}
let mObj = {
name: mName,
link: url
}
await list.push(mObj);
message.channel.send(`"${mObj.name}" sıraya eklendi.`);
if (list.length === 1 && pStatus === false) {
pStatus = true;
cMusic = list.shift();
dispatcher = connection.play(ytdl(`${cMusic.link}`, { filter: 'audioonly' }));
dispatcher.on('start', () => {
message.reply(`${cMusic.name} çalıyorum.`);
});
endHandler();
}
}
});
} else {
message.reply("Önce sesli bir kanala katılmalısın!");
}
}
}
if (command === 'durdur') {
if (message.member.voice.channel) {
dispatcher.pause();
pStatus = false;
} else {
message.reply("Önce sesli bir kanala katılmalısın.")
}
}
if (command === 'devam') {
if (message.member.voice.channel) {
message.reply("Bu özellik şu an kullanımda değil.")
} else {
message.reply("Önce sesli bir kanala katılmalısın.")
}
}
if (command === 'atla') {
if (message.member.voice.channel) {
dispatcher.pause();
pStatus = false;
if (list.length >= 1) {
cMusic = list.shift();
dispatcher = connection.play(ytdl(`${cMusic.link}`, { filter: 'audioonly' }));
dispatcher.on('start', () => {
message.reply(`${cMusic.name} çalıyorum.`);
});
endHandler();
} else {
message.reply("Liste sonlandı.");
}
} else {
message.reply("Önce sesli bir kanala katılmalısın.")
}
}
if (command === 'sg') {
pStatus = false;
message.reply("Ben gidiyom hoçça galın.");
connection.disconnect();
}
const endHandler = () => {
dispatcher.on('finish', () => {
pStatus = false;
if (list.length >= 1) {
message.reply("listede birden çok link var.")
cMusic = list.shift();
dispatcher = connection.play(ytdl(`${cMusic.link}`, { filter: 'audioonly' }));
dispatcher.on('start', () => {
message.reply(`${cMusic.name} çalıyorum.`);
pStatus = true;
});
} else if (list.length === 0) {
message.reply("Liste sonlandı.")
<---------!THIS PART IS NOT WORKING!--------->
}
});
}
});
client.login(config.BOT_TOKEN);
【问题讨论】:
标签: node.js if-statement discord.js