mirror of
https://github.com/musix-org/musix-oss
synced 2024-11-10 05:10:17 +00:00
Chore update 3.7
This commit is contained in:
parent
0e25ac5752
commit
2353262322
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "musix",
|
"name": "musix",
|
||||||
"version": "3.6.2",
|
"version": "3.7.0",
|
||||||
"description": "V3 for Musix the discord music bot",
|
"description": "V3 for Musix the discord music bot",
|
||||||
"main": "./index.js",
|
"main": "./index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -2,7 +2,6 @@ const YouTube = require("simple-youtube-api");
|
|||||||
const SpotifyApi = require("spotify-web-api-node");
|
const SpotifyApi = require("spotify-web-api-node");
|
||||||
const ytdl = require("ytdl-core");
|
const ytdl = require("ytdl-core");
|
||||||
const ytsr = require("ytsr");
|
const ytsr = require("ytsr");
|
||||||
const ms = require("ms");
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: "play",
|
name: "play",
|
||||||
@ -46,16 +45,39 @@ module.exports = {
|
|||||||
if (ytdl.validateURL(url)) {
|
if (ytdl.validateURL(url)) {
|
||||||
client.funcs.handleVideo(url, msg, voiceChannel, client, false, "ytdl");
|
client.funcs.handleVideo(url, msg, voiceChannel, client, false, "ytdl");
|
||||||
} else if (url.match(/^https?:\/\/(open.spotify.com|spotify.com)(.*)$/)) {
|
} else if (url.match(/^https?:\/\/(open.spotify.com|spotify.com)(.*)$/)) {
|
||||||
|
if (url.includes("playlist")) {
|
||||||
const playlistId = url.split("/playlist/")[1].split("?")[0];
|
const playlistId = url.split("/playlist/")[1].split("?")[0];
|
||||||
spotify.getPlaylist(playlistId).then(
|
spotify.getPlaylist(playlistId).then(
|
||||||
async function (data) {
|
async function (data) {
|
||||||
searchVideos(data, client, msg, voiceChannel);
|
searchPlaylist(data, client, msg, voiceChannel);
|
||||||
},
|
},
|
||||||
function (err) {
|
function (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
msg.channel.send(client.messages.noResultsSpotify);
|
msg.channel.send(client.messages.noResultsSpotify);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
} else if (url.includes("album")) {
|
||||||
|
const albumId = url.split("/album/")[1].split("?")[0];
|
||||||
|
spotify.getAlbumTracks(albumId)
|
||||||
|
.then(
|
||||||
|
async function (data) {
|
||||||
|
searchAlbum(data, client, msg, voiceChannel);
|
||||||
|
},
|
||||||
|
function (err) {
|
||||||
|
console.log(err);
|
||||||
|
msg.channel.send(client.messages.noResultsSpotify);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else if (url.includes("track")) {
|
||||||
|
return msg.channel.send(client.messages.disabledSpotifySongs);
|
||||||
|
/*const trackId = url.split("/track/")[1].split("?")[0];
|
||||||
|
spotify.searchTracks(trackId)
|
||||||
|
.then(function (data) {
|
||||||
|
console.log(data.body)
|
||||||
|
}, function (err) {
|
||||||
|
console.log('Something went wrong!', err);
|
||||||
|
});*/
|
||||||
|
} else msg.channel.send(client.messages.invalidSpotifyUrl)
|
||||||
} else if (
|
} else if (
|
||||||
url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)
|
url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)
|
||||||
) {
|
) {
|
||||||
@ -64,14 +86,21 @@ module.exports = {
|
|||||||
const videos = await playlist.getVideos();
|
const videos = await playlist.getVideos();
|
||||||
for (const video of Object.values(videos)) {
|
for (const video of Object.values(videos)) {
|
||||||
const video2 = await youtube.getVideoByID(video.id);
|
const video2 = await youtube.getVideoByID(video.id);
|
||||||
await client.funcs.handleVideo(
|
spotify.searchTracks(`track:${video2.name}`)
|
||||||
|
.then(function (data) {
|
||||||
|
client.funcs.handleVideo(
|
||||||
video2.url,
|
video2.url,
|
||||||
msg,
|
msg,
|
||||||
voiceChannel,
|
voiceChannel,
|
||||||
client,
|
client,
|
||||||
true,
|
true,
|
||||||
"ytdl"
|
"ytdl",
|
||||||
|
data.body.tracks.items[0]
|
||||||
);
|
);
|
||||||
|
}, function (err) {
|
||||||
|
console.log('Something went wrong!', err);
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
const message = client.messages.playlistAdded.replace(
|
const message = client.messages.playlistAdded.replace(
|
||||||
"%TITLE%",
|
"%TITLE%",
|
||||||
@ -87,21 +116,27 @@ module.exports = {
|
|||||||
if (err) console.log(err);
|
if (err) console.log(err);
|
||||||
if (!res.items[0]) return msg.channel.send(client.messages.noResults);
|
if (!res.items[0]) return msg.channel.send(client.messages.noResults);
|
||||||
const videoResults = res.items.filter(item => item.type === "video");
|
const videoResults = res.items.filter(item => item.type === "video");
|
||||||
|
spotify.searchTracks(`track:${searchString}`)
|
||||||
|
.then(function (data) {
|
||||||
client.funcs.handleVideo(
|
client.funcs.handleVideo(
|
||||||
videoResults[0].link,
|
videoResults[0].link,
|
||||||
msg,
|
msg,
|
||||||
voiceChannel,
|
voiceChannel,
|
||||||
client,
|
client,
|
||||||
false,
|
false,
|
||||||
"ytdl"
|
"ytdl",
|
||||||
|
data.body.tracks.items[0]
|
||||||
);
|
);
|
||||||
|
}, function (err) {
|
||||||
|
console.log('Something went wrong!', err);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
async function searchVideos(data, client, msg, voiceChannel) {
|
async function searchPlaylist(data, client, msg, voiceChannel) {
|
||||||
const lmsg = await msg.channel.send(client.messages.loadingSongs);
|
const lmsg = await msg.channel.send(client.messages.loadingSongs);
|
||||||
let failed = 0;
|
let failed = 0;
|
||||||
for (let i = 0; data.body.tracks.items.length > i; i++) {
|
for (let i = 0; data.body.tracks.items.length > i; i++) {
|
||||||
@ -137,7 +172,8 @@ async function searchVideos(data, client, msg, voiceChannel) {
|
|||||||
voiceChannel,
|
voiceChannel,
|
||||||
client,
|
client,
|
||||||
false,
|
false,
|
||||||
"ytdl"
|
"spotify",
|
||||||
|
track
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -150,7 +186,8 @@ async function searchVideos(data, client, msg, voiceChannel) {
|
|||||||
voiceChannel,
|
voiceChannel,
|
||||||
client,
|
client,
|
||||||
true,
|
true,
|
||||||
"ytdl"
|
"spotify",
|
||||||
|
track
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -164,7 +201,174 @@ async function searchVideos(data, client, msg, voiceChannel) {
|
|||||||
voiceChannel,
|
voiceChannel,
|
||||||
client,
|
client,
|
||||||
true,
|
true,
|
||||||
"ytdl"
|
"spotify",
|
||||||
|
track
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
let message;
|
||||||
|
if (failed === 0) {
|
||||||
|
message = client.messages.playlistAdded.replace("%TITLE%", data.body.name);
|
||||||
|
} else {
|
||||||
|
message = `${client.messages.playlistAdded.replace(
|
||||||
|
"%TITLE%",
|
||||||
|
data.body.name
|
||||||
|
)}\n${client.messages.failedToLoad + failed}`;
|
||||||
|
}
|
||||||
|
lmsg.edit(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function searchAlbum(data, client, msg, voiceChannel) {
|
||||||
|
const lmsg = await msg.channel.send(client.messages.loadingSongs);
|
||||||
|
let failed = 0;
|
||||||
|
for (let i = 0; data.body.items.length > i; i++) {
|
||||||
|
const track = await data.body.items[i];
|
||||||
|
await client.funcs.sleep(250);
|
||||||
|
ytsr(
|
||||||
|
`${track.artists[0].name} ${track.name} audio`, {
|
||||||
|
limit: 5,
|
||||||
|
},
|
||||||
|
async function (err, res) {
|
||||||
|
if (err) return console.log(err);
|
||||||
|
if (!res.items[0]) {
|
||||||
|
ytsr(
|
||||||
|
`${track.artists[0].name} ${track.name} lyrics`, {
|
||||||
|
limit: 5,
|
||||||
|
},
|
||||||
|
async function (err, res) {
|
||||||
|
if (err) return console.log(err);
|
||||||
|
if (!res.items[0]) {
|
||||||
|
ytsr(
|
||||||
|
`${track.artists[0].name} ${track.name}`, {
|
||||||
|
limit: 5,
|
||||||
|
},
|
||||||
|
async function (err, res) {
|
||||||
|
if (err) console.log(err);
|
||||||
|
if (!res.items[0]) {
|
||||||
|
failed++;
|
||||||
|
}
|
||||||
|
const videoResults = res.items.filter(item => item.type === "video");
|
||||||
|
client.funcs.handleVideo(
|
||||||
|
videoResults[0].link,
|
||||||
|
msg,
|
||||||
|
voiceChannel,
|
||||||
|
client,
|
||||||
|
false,
|
||||||
|
"spotify",
|
||||||
|
track
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const videoResults = res.items.filter(item => item.type === "video");
|
||||||
|
await client.funcs.handleVideo(
|
||||||
|
videoResults[0].link,
|
||||||
|
msg,
|
||||||
|
voiceChannel,
|
||||||
|
client,
|
||||||
|
true,
|
||||||
|
"spotify",
|
||||||
|
track
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
failed++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const videoResults = res.items.filter(item => item.type === "video");
|
||||||
|
await client.funcs.handleVideo(
|
||||||
|
videoResults[0].link,
|
||||||
|
msg,
|
||||||
|
voiceChannel,
|
||||||
|
client,
|
||||||
|
true,
|
||||||
|
"spotify",
|
||||||
|
track
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
let message;
|
||||||
|
if (failed === 0) {
|
||||||
|
message = client.messages.albumAdded.replace("%TITLE%", "yes taht palylist");
|
||||||
|
} else {
|
||||||
|
message = `${client.messages.albumAdded.replace(
|
||||||
|
"%TITLE%",
|
||||||
|
"yes taht palylist"
|
||||||
|
)}\n${client.messages.failedToLoad + failed}`;
|
||||||
|
}
|
||||||
|
lmsg.edit(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function searchSong(data, client, msg, voiceChannel) {
|
||||||
|
const lmsg = await msg.channel.send(client.messages.loadingSongs);
|
||||||
|
let failed = 0;
|
||||||
|
for (let i = 0; data.body.tracks.items.length > i; i++) {
|
||||||
|
const track = await data.body.tracks.items[i].track;
|
||||||
|
await client.funcs.sleep(250);
|
||||||
|
ytsr(
|
||||||
|
`${track.artists[0].name} ${track.name} audio`, {
|
||||||
|
limit: 5,
|
||||||
|
},
|
||||||
|
async function (err, res) {
|
||||||
|
if (err) return console.log(err);
|
||||||
|
if (!res.items[0]) {
|
||||||
|
ytsr(
|
||||||
|
`${track.artists[0].name} ${track.name} lyrics`, {
|
||||||
|
limit: 5,
|
||||||
|
},
|
||||||
|
async function (err, res) {
|
||||||
|
if (err) return console.log(err);
|
||||||
|
if (!res.items[0]) {
|
||||||
|
ytsr(
|
||||||
|
`${track.artists[0].name} ${track.name}`, {
|
||||||
|
limit: 5,
|
||||||
|
},
|
||||||
|
async function (err, res) {
|
||||||
|
if (err) console.log(err);
|
||||||
|
if (!res.items[0]) {
|
||||||
|
failed++;
|
||||||
|
}
|
||||||
|
const videoResults = res.items.filter(item => item.type === "video");
|
||||||
|
client.funcs.handleVideo(
|
||||||
|
videoResults[0].link,
|
||||||
|
msg,
|
||||||
|
voiceChannel,
|
||||||
|
client,
|
||||||
|
false,
|
||||||
|
"spotify",
|
||||||
|
track
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const videoResults = res.items.filter(item => item.type === "video");
|
||||||
|
await client.funcs.handleVideo(
|
||||||
|
videoResults[0].link,
|
||||||
|
msg,
|
||||||
|
voiceChannel,
|
||||||
|
client,
|
||||||
|
true,
|
||||||
|
"spotify",
|
||||||
|
track
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
failed++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const videoResults = res.items.filter(item => item.type === "video");
|
||||||
|
await client.funcs.handleVideo(
|
||||||
|
videoResults[0].link,
|
||||||
|
msg,
|
||||||
|
voiceChannel,
|
||||||
|
client,
|
||||||
|
true,
|
||||||
|
"spotify",
|
||||||
|
track
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
const ytsr = require('ytsr');
|
const ytsr = require('ytsr');
|
||||||
|
const SpotifyApi = require("spotify-web-api-node");
|
||||||
const he = require('he');
|
const he = require('he');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
@ -10,6 +11,12 @@ module.exports = {
|
|||||||
permission: 'none',
|
permission: 'none',
|
||||||
category: 'music',
|
category: 'music',
|
||||||
async execute(msg, args, client, Discord, command) {
|
async execute(msg, args, client, Discord, command) {
|
||||||
|
const spotify = new SpotifyApi({
|
||||||
|
id: client.config.spotify_client_id,
|
||||||
|
secret: client.config.spotify_client_secret,
|
||||||
|
});
|
||||||
|
spotify.setAccessToken(client.config.spotify_access_key);
|
||||||
|
|
||||||
const searchString = args.slice(1).join(" ");
|
const searchString = args.slice(1).join(" ");
|
||||||
const queue = client.queue.get(msg.guild.id);
|
const queue = client.queue.get(msg.guild.id);
|
||||||
const voiceChannel = msg.member.voice.channel;
|
const voiceChannel = msg.member.voice.channel;
|
||||||
@ -47,6 +54,20 @@ module.exports = {
|
|||||||
return msg.channel.send(client.messages.cancellingVideoSelection);
|
return msg.channel.send(client.messages.cancellingVideoSelection);
|
||||||
}
|
}
|
||||||
const videoIndex = parseInt(response.first().content) - 1;
|
const videoIndex = parseInt(response.first().content) - 1;
|
||||||
|
spotify.searchTracks(`track:${videos[videoIndex].title}`)
|
||||||
|
.then(function (data) {
|
||||||
|
client.funcs.handleVideo(
|
||||||
|
videoResults[0].link,
|
||||||
|
msg,
|
||||||
|
voiceChannel,
|
||||||
|
client,
|
||||||
|
false,
|
||||||
|
"ytdl",
|
||||||
|
data.body.tracks.items[0]
|
||||||
|
);
|
||||||
|
}, function (err) {
|
||||||
|
console.log('Something went wrong!', err);
|
||||||
|
});
|
||||||
return client.funcs.handleVideo(videos[videoIndex].link, msg, voiceChannel, client, false, "ytdl");
|
return client.funcs.handleVideo(videos[videoIndex].link, msg, voiceChannel, client, false, "ytdl");
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -1,64 +0,0 @@
|
|||||||
const similarSongs = require("similar-songs");
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
name: "searchsimilar",
|
|
||||||
alias: ["none"],
|
|
||||||
usage: "<song name>, <artist>",
|
|
||||||
description: "a command to search similar songs (in developement)",
|
|
||||||
onlyDev: false,
|
|
||||||
permission: "none",
|
|
||||||
category: "music",
|
|
||||||
async execute(msg, args, client, Discord, command) {
|
|
||||||
const searchString = args.slice(1).join(" ");
|
|
||||||
const query = searchString.split(",");
|
|
||||||
const queue = client.queue.get(msg.guild.id);
|
|
||||||
const voiceChannel = msg.member.voice.channel;
|
|
||||||
if (
|
|
||||||
client.global.db.guilds[msg.guild.id].blacklist.includes(
|
|
||||||
msg.member.voice.channelID
|
|
||||||
)
|
|
||||||
)
|
|
||||||
return msg.channel.send(client.messages.blackListedVC);
|
|
||||||
if (!queue) {
|
|
||||||
if (!msg.member.voice.channel)
|
|
||||||
return msg.channel.send(client.messages.noVoiceChannel);
|
|
||||||
} else {
|
|
||||||
if (voiceChannel !== queue.voiceChannel)
|
|
||||||
return msg.channel.send(client.messages.wrongVoiceChannel);
|
|
||||||
}
|
|
||||||
if (!query[0] || !query[1]) {
|
|
||||||
const message = client.messages.searchSimilarUsage.replace("%USAGE%", command.usage);
|
|
||||||
return msg.channel.send(message);
|
|
||||||
|
|
||||||
}
|
|
||||||
if (voiceChannel.full) return msg.channel.send(client.messages.channelFull);
|
|
||||||
if (!voiceChannel.joinable)
|
|
||||||
return msg.channel.send(client.messages.noPermsConnect);
|
|
||||||
if (!voiceChannel.speakable)
|
|
||||||
return msg.channel.send(client.messages.noPermsSpeak);
|
|
||||||
similarSongs.find({
|
|
||||||
title: query[0],
|
|
||||||
artist: query[1].slice(1),
|
|
||||||
limit: 10,
|
|
||||||
lastfmAPIKey: client.config.lastfm_api_key,
|
|
||||||
lastfmAPISecret: client.config.lastfm_secret,
|
|
||||||
youtubeAPIKey: client.config.api_key,
|
|
||||||
},
|
|
||||||
async function (err, songs) {
|
|
||||||
if (err) return msg.channel.send(err.message);
|
|
||||||
if (songs.length !== 0) {
|
|
||||||
const lmsg = await msg.channel.send(client.messages.loadingSongs);
|
|
||||||
for (let i = 0; i < songs.length; i++) {
|
|
||||||
client.funcs.handleVideo(
|
|
||||||
`https://www.youtube.com/watch?v=${songs[i].youtubeId}`, msg, voiceChannel, client, true, "ytdl");
|
|
||||||
}
|
|
||||||
const message = client.messages.songsAdded.replace(
|
|
||||||
"%AMOUNT%",
|
|
||||||
songs.length
|
|
||||||
);
|
|
||||||
return lmsg.edit(message);
|
|
||||||
} else return msg.channel.send(client.messages.noSimilarResults);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
},
|
|
||||||
};
|
|
@ -48,6 +48,12 @@ module.exports = {
|
|||||||
client.messages.settingsBassDesc,
|
client.messages.settingsBassDesc,
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
|
.addField(
|
||||||
|
client.messages.settingsAutoPlay,
|
||||||
|
client.messages.settingsAutoPlayDesc,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
.addField()
|
||||||
.setFooter(footer)
|
.setFooter(footer)
|
||||||
.setAuthor(client.user.username, client.user.displayAvatarURL)
|
.setAuthor(client.user.username, client.user.displayAvatarURL)
|
||||||
.setColor(client.config.embedColor);
|
.setColor(client.config.embedColor);
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
name: 'announcesongs',
|
name: 'announcesongs',
|
||||||
async execute(msg, args, client) {
|
async execute(msg, args, client) {
|
||||||
if (!args[2]) return msg.channel.send(`${client.messages.announceSongs} \`${client.global.db.guilds[msg.guild.id].permissions}\``);
|
if (!args[2]) return msg.channel.send(`${client.messages.announceSongs} \`${client.global.db.guilds[msg.guild.id].announceSongs}\``);
|
||||||
if (args[2] === 'true') {
|
if (args[2] === 'true') {
|
||||||
if (!client.global.db.guilds[msg.guild.id].announceSongs) {
|
if (!client.global.db.guilds[msg.guild.id].announceSongs) {
|
||||||
client.global.db.guilds[msg.guild.id].announceSongs = true;
|
client.global.db.guilds[msg.guild.id].announceSongs = true;
|
||||||
msg.channel.send(client.messages.permissionsSetTrue);
|
msg.channel.send(client.messages.announceSongsTrue);
|
||||||
} else return msg.channel.send(client.messages.announceSongsTrue);
|
} else return msg.channel.send(client.messages.announceSongsTrue);
|
||||||
} else if (args[2] === 'false') {
|
} else if (args[2] === 'false') {
|
||||||
if (client.global.db.guilds[msg.guild.id].announceSongs) {
|
if (client.global.db.guilds[msg.guild.id].announceSongs) {
|
||||||
|
17
src/commands/settings/autoPlay.js
Normal file
17
src/commands/settings/autoPlay.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
module.exports = {
|
||||||
|
name: 'autoplay',
|
||||||
|
async execute(msg, args, client) {
|
||||||
|
if (!args[2]) return msg.channel.send(`${client.messages.autoPlay} \`${client.global.db.guilds[msg.guild.id].autoPlay}\``);
|
||||||
|
if (args[2] === 'true') {
|
||||||
|
if (!client.global.db.guilds[msg.guild.id].autoPlay) {
|
||||||
|
client.global.db.guilds[msg.guild.id].autoPlay = true;
|
||||||
|
msg.channel.send(client.messages.autoPlayTrue);
|
||||||
|
} else return msg.channel.send(client.messages.autoPlayTrue);
|
||||||
|
} else if (args[2] === 'false') {
|
||||||
|
if (client.global.db.guilds[msg.guild.id].autoPlay) {
|
||||||
|
client.global.db.guilds[msg.guild.id].autoPlay = false;
|
||||||
|
msg.channel.send(client.messages.autoPlayFalse);
|
||||||
|
} else return msg.channel.send(client.messages.autoPlayFalse);
|
||||||
|
} else return msg.channel.send(client.messages.boolean);
|
||||||
|
}
|
||||||
|
};
|
@ -1,13 +1,17 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
name: 'reset',
|
name: 'reset',
|
||||||
async execute(msg, args, client) {
|
async execute(msg, args, client) {
|
||||||
client.global.db.guilds[msg.guild.id] = {
|
client.global.db.guilds[guild.id] = {
|
||||||
prefix: client.config.prefix,
|
prefix: client.config.prefix,
|
||||||
defaultVolume: 5,
|
defaultVolume: client.config.defaultVolume,
|
||||||
permissions: false,
|
permissions: client.config.permissions,
|
||||||
|
dj: client.config.dj,
|
||||||
|
djrole: client.config.djrole,
|
||||||
|
startPlaying: client.config.startPlaying,
|
||||||
|
bass: client.config.bass,
|
||||||
|
blacklist: [],
|
||||||
premium: false,
|
premium: false,
|
||||||
dj: false,
|
playSimilar: client.config.playSimilar,
|
||||||
djrole: null
|
|
||||||
};
|
};
|
||||||
msg.channel.send(client.messages.reset);
|
msg.channel.send(client.messages.reset);
|
||||||
}
|
}
|
||||||
|
@ -16,12 +16,13 @@ module.exports = {
|
|||||||
let point = parseInt(args[1]);
|
let point = parseInt(args[1]);
|
||||||
point = point - 1;
|
point = point - 1;
|
||||||
if (isNaN(point)) return msg.channel.send(client.messages.validNumber);
|
if (isNaN(point)) return msg.channel.send(client.messages.validNumber);
|
||||||
if (point > queue.songs.size)
|
if (point > queue.songs.length - 1)
|
||||||
return msg.channel.send(client.messages.noSongs);
|
return msg.channel.send(client.messages.noSongs);
|
||||||
if (point < 0) return msg.channel.send(client.messages.cantSkipToCurrent);
|
if (point < 0) return msg.channel.send(client.messages.cantSkipToCurrent);
|
||||||
for (let i = 0; i < point; i++) {
|
for (let i = 0; i < point; i++) {
|
||||||
queue.prevSongs.push(queue.songs.shift());
|
queue.prevSongs.push(queue.songs.shift());
|
||||||
}
|
}
|
||||||
|
msg.channel.send(client.messages.skipped);
|
||||||
queue.endReason = "skipto";
|
queue.endReason = "skipto";
|
||||||
queue.time = 0;
|
queue.time = 0;
|
||||||
queue.connection.dispatcher.end();
|
queue.connection.dispatcher.end();
|
||||||
|
@ -11,6 +11,7 @@ module.exports = {
|
|||||||
bass: client.config.bass,
|
bass: client.config.bass,
|
||||||
blacklist: [],
|
blacklist: [],
|
||||||
premium: false,
|
premium: false,
|
||||||
|
playSimilar: client.config.playSimilar,
|
||||||
});
|
});
|
||||||
client.global.db.guilds[guild.id] = {
|
client.global.db.guilds[guild.id] = {
|
||||||
prefix: client.config.prefix,
|
prefix: client.config.prefix,
|
||||||
@ -22,6 +23,7 @@ module.exports = {
|
|||||||
bass: client.config.bass,
|
bass: client.config.bass,
|
||||||
blacklist: [],
|
blacklist: [],
|
||||||
premium: false,
|
premium: false,
|
||||||
|
playSimilar: client.config.playSimilar,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
@ -21,6 +21,7 @@ module.exports = {
|
|||||||
bass: client.config.bass,
|
bass: client.config.bass,
|
||||||
blacklist: [],
|
blacklist: [],
|
||||||
premium: true,
|
premium: true,
|
||||||
|
playSimilar: client.config.playSimilar,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
const similarSongs = require("similar-songs");
|
||||||
|
const ytdl = require("ytdl-core");
|
||||||
|
const Discord = require("discord.js");
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
async execute(client, guild) {
|
async execute(client, guild) {
|
||||||
const queue = client.queue.get(guild.id);
|
const queue = client.queue.get(guild.id);
|
||||||
@ -17,8 +21,50 @@ module.exports = {
|
|||||||
if (queue.endReason !== "replay") {
|
if (queue.endReason !== "replay") {
|
||||||
if (queue.endReason === "previous") queue.songs.unshift(queue.prevSongs.pop())
|
if (queue.endReason === "previous") queue.songs.unshift(queue.prevSongs.pop())
|
||||||
if (queue.endReason !== "previous") queue.prevSongs.push(queue.songs.shift());
|
if (queue.endReason !== "previous") queue.prevSongs.push(queue.songs.shift());
|
||||||
|
if (client.global.db.guilds[guild.id].playSimilar && !queue.songs[0] && queue.endReason !== "stop") {
|
||||||
|
const prevSongs = queue.prevSongs.filter(song => song.type == "spotify");
|
||||||
|
if (prevSongs.length >= 0) return findSimilar(client, queue, prevSongs, guild);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
client.funcs.play(guild, queue.songs[0], client, 0, true);
|
client.funcs.play(guild, queue.songs[0], client, 0, true);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function findSimilar(client, queue, prevSongs, guild) {
|
||||||
|
let retries = 0;
|
||||||
|
const query = prevSongs[Math.floor(Math.random() * Math.floor(prevSongs.length))];
|
||||||
|
if (!query) return client.funcs.play(guild, queue.songs[0], client, 0, true);
|
||||||
|
similarSongs.find({
|
||||||
|
title: query.track.name,
|
||||||
|
artist: query.track.artists[0].name,
|
||||||
|
limit: 10,
|
||||||
|
lastfmAPIKey: client.config.lastfm_api_key,
|
||||||
|
lastfmAPISecret: client.config.lastfm_secret,
|
||||||
|
youtubeAPIKey: client.config.api_key,
|
||||||
|
},
|
||||||
|
async function (err, songs) {
|
||||||
|
if (err) return queue.textChannel.send(err.message);
|
||||||
|
if (songs[0]) {
|
||||||
|
const random = Math.floor(Math.random() * Math.floor(songs.length))
|
||||||
|
const songInfo = await ytdl.getInfo(`https://www.youtube.com/watch?v=${songs[random].youtubeId}`);
|
||||||
|
queue.songs.push({
|
||||||
|
title: Discord.Util.escapeMarkdown(songInfo.videoDetails.title),
|
||||||
|
url: `https://www.youtube.com/watch?v=${songs[random].youtubeId}`,
|
||||||
|
author: {},
|
||||||
|
type: "ytdl",
|
||||||
|
info: songInfo.videoDetails
|
||||||
|
});
|
||||||
|
client.funcs.play(guild, queue.songs[0], client, 0, true);
|
||||||
|
} else {
|
||||||
|
if (prevSongs.length > 4 && retries < 6) {
|
||||||
|
findSimilar(client, queue, prevSongs, guild);
|
||||||
|
retries++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
queue.textChannel.send(client.messages.noSimilarResults);
|
||||||
|
client.funcs.play(guild, queue.songs[0], client, 0, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
@ -22,7 +22,8 @@ module.exports = {
|
|||||||
secondary_test_channel: "570531724002328577",
|
secondary_test_channel: "570531724002328577",
|
||||||
devId: "360363051792203779",
|
devId: "360363051792203779",
|
||||||
embedColor: "#b50002",
|
embedColor: "#b50002",
|
||||||
invite: "https://discordapp.com/oauth2/authorize?client_id=607266889537945605&permissions=3427328&scope=bot",
|
invite:
|
||||||
|
"https://discordapp.com/oauth2/authorize?client_id=607266889537945605&permissions=3427328&scope=bot",
|
||||||
supportServer: "https://discord.gg/rvHuJtB",
|
supportServer: "https://discord.gg/rvHuJtB",
|
||||||
devMode: false,
|
devMode: false,
|
||||||
api: false,
|
api: false,
|
||||||
@ -40,6 +41,7 @@ module.exports = {
|
|||||||
djrole: null,
|
djrole: null,
|
||||||
startPlaying: true,
|
startPlaying: true,
|
||||||
bass: 1,
|
bass: 1,
|
||||||
|
playSimilar: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.streamConfig = {
|
module.exports.streamConfig = {
|
||||||
@ -48,8 +50,8 @@ module.exports.streamConfig = {
|
|||||||
highWaterMark: 1 << 25,
|
highWaterMark: 1 << 25,
|
||||||
volume: false,
|
volume: false,
|
||||||
requestOptions: {
|
requestOptions: {
|
||||||
maxRedirects: 4
|
maxRedirects: 4,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
options: {
|
options: {
|
||||||
seek: null,
|
seek: null,
|
||||||
@ -57,7 +59,7 @@ module.exports.streamConfig = {
|
|||||||
volume: 1,
|
volume: 1,
|
||||||
type: "converted",
|
type: "converted",
|
||||||
},
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
module.exports.queueConfig = {
|
module.exports.queueConfig = {
|
||||||
textChannel: null,
|
textChannel: null,
|
||||||
@ -76,7 +78,7 @@ module.exports.queueConfig = {
|
|||||||
votesNeeded: null,
|
votesNeeded: null,
|
||||||
time: 0,
|
time: 0,
|
||||||
endReason: null,
|
endReason: null,
|
||||||
}
|
};
|
||||||
|
|
||||||
module.exports.emojis = {
|
module.exports.emojis = {
|
||||||
garbage: "🗑️ ",
|
garbage: "🗑️ ",
|
||||||
@ -98,4 +100,4 @@ module.exports.emojis = {
|
|||||||
stop: "<:stop:674685626108477519> ",
|
stop: "<:stop:674685626108477519> ",
|
||||||
stopWatch: ":stopwatch: ",
|
stopWatch: ":stopwatch: ",
|
||||||
volumeHigh: "<:volumehigh:674685637626167307> ",
|
volumeHigh: "<:volumehigh:674685637626167307> ",
|
||||||
}
|
};
|
||||||
|
@ -4,11 +4,16 @@ const {
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
emojis: emojis,
|
emojis: emojis,
|
||||||
|
albumAdded: emojis.green_check_mark +
|
||||||
|
"Album: **%TITLE%** has been added to the queue!",
|
||||||
alreadyPaused: emojis.redx + "The music is already paused!",
|
alreadyPaused: emojis.redx + "The music is already paused!",
|
||||||
alreadyVoted: emojis.redx + "You have already voted to skip!",
|
alreadyVoted: emojis.redx + "You have already voted to skip!",
|
||||||
announceSongs: emojis.megaPhone + "Current setting:",
|
announceSongs: emojis.megaPhone + "Current setting:",
|
||||||
announceSongsFalse: emojis.green_check_mark + "announcesongs now set to `false`!",
|
announceSongsFalse: emojis.green_check_mark + "announcesongs now set to `false`!",
|
||||||
announceSongsTrue: emojis.green_check_mark + "announcesongs now set to `true`!",
|
announceSongsTrue: emojis.green_check_mark + "announcesongs now set to `true`!",
|
||||||
|
autoPlay: "Current setting:",
|
||||||
|
autoPlayFalse: emojis.green_check_mark + "autoplay now set to `false`!",
|
||||||
|
autoPlayTrue: emojis.green_check_mark + "autoplay now set to `true`!",
|
||||||
bassApplied: emojis.volumeHigh + "The bass level **%BASS%** has been applied!",
|
bassApplied: emojis.volumeHigh + "The bass level **%BASS%** has been applied!",
|
||||||
bassFalse: emojis.green_check_mark + "Bass is now false!",
|
bassFalse: emojis.green_check_mark + "Bass is now false!",
|
||||||
bassLevel: emojis.green_check_mark + "Bass level is now",
|
bassLevel: emojis.green_check_mark + "Bass level is now",
|
||||||
@ -41,6 +46,7 @@ module.exports = {
|
|||||||
defaultVolumeSet: emojis.green_check_mark + "Default volume set to:",
|
defaultVolumeSet: emojis.green_check_mark + "Default volume set to:",
|
||||||
devMode: emojis.redx +
|
devMode: emojis.redx +
|
||||||
"Dev mode has been turned on! Commands are only available to developer(s)!",
|
"Dev mode has been turned on! Commands are only available to developer(s)!",
|
||||||
|
disabledSpotifySongs: emojis.redx + "Spotify songs cannot be played currently!",
|
||||||
disableNigthCore: emojis.redx + "Please disable nigthCore in order to use this command!",
|
disableNigthCore: emojis.redx + "Please disable nigthCore in order to use this command!",
|
||||||
dispatcherError: "Error with the dispatcher: ",
|
dispatcherError: "Error with the dispatcher: ",
|
||||||
djFalse: emojis.green_check_mark + "`DJ` now set to `false`",
|
djFalse: emojis.green_check_mark + "`DJ` now set to `false`",
|
||||||
@ -62,6 +68,7 @@ module.exports = {
|
|||||||
helpTitle: "help",
|
helpTitle: "help",
|
||||||
idOrMentionChannel: emojis.redx + "Please provide a channel id or mention a channel!",
|
idOrMentionChannel: emojis.redx + "Please provide a channel id or mention a channel!",
|
||||||
invalidGuild: emojis.redx + "Invalid guild id!",
|
invalidGuild: emojis.redx + "Invalid guild id!",
|
||||||
|
invalidSpotifyUrl: emojis.redx + "That url cannot be played! If you believe this is a mistake please contact support!",
|
||||||
inviteTitle: "Invite Musix to your Discord server!",
|
inviteTitle: "Invite Musix to your Discord server!",
|
||||||
joined: emojis.green_check_mark + "Joined",
|
joined: emojis.green_check_mark + "Joined",
|
||||||
joinSupport: "Join the musix support server: ",
|
joinSupport: "Join the musix support server: ",
|
||||||
@ -152,6 +159,8 @@ module.exports = {
|
|||||||
"The lenght of this song is %LENGTH% seconds! You can't seek further than that!",
|
"The lenght of this song is %LENGTH% seconds! You can't seek further than that!",
|
||||||
settingsAnnounceSongs: "announcesongs",
|
settingsAnnounceSongs: "announcesongs",
|
||||||
settingsAnnounceSongsDesc: "Whether to announce songs that start playing or not.",
|
settingsAnnounceSongsDesc: "Whether to announce songs that start playing or not.",
|
||||||
|
settingsAutoPlay: "autoplay",
|
||||||
|
settingsAutoPlayDesc: "When the queue ends similar songs will be played.",
|
||||||
settingsBass: "bass",
|
settingsBass: "bass",
|
||||||
settingsBassDesc: "Change the default bass level.",
|
settingsBassDesc: "Change the default bass level.",
|
||||||
settingsBlacklist: "blacklist",
|
settingsBlacklist: "blacklist",
|
||||||
|
@ -11,6 +11,7 @@ module.exports = async function (client) {
|
|||||||
bass: client.config.bass,
|
bass: client.config.bass,
|
||||||
blacklist: [],
|
blacklist: [],
|
||||||
premium: false,
|
premium: false,
|
||||||
|
playSimilar: client.config.playSimilar,
|
||||||
});
|
});
|
||||||
client.global.db.guilds[guild.id] = {
|
client.global.db.guilds[guild.id] = {
|
||||||
prefix: client.config.prefix,
|
prefix: client.config.prefix,
|
||||||
@ -22,28 +23,30 @@ module.exports = async function (client) {
|
|||||||
bass: client.config.bass,
|
bass: client.config.bass,
|
||||||
blacklist: [],
|
blacklist: [],
|
||||||
premium: false,
|
premium: false,
|
||||||
|
playSimilar: client.config.playSimilar,
|
||||||
};
|
};
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (client.global.db.guilds[guild.id].prefix === undefined)
|
if (!client.global.db.guilds[guild.id].prefix)
|
||||||
client.global.db.guilds[guild.id].prefix = client.config.prefix;
|
client.global.db.guilds[guild.id].prefix = client.config.prefix;
|
||||||
if (client.global.db.guilds[guild.id].defaultVolume === undefined)
|
if (!client.global.db.guilds[guild.id].defaultVolume)
|
||||||
client.global.db.guilds[guild.id].defaultVolume =
|
client.global.db.guilds[guild.id].defaultVolume =
|
||||||
client.config.defaultVolume;
|
client.config.defaultVolume;
|
||||||
if (client.global.db.guilds[guild.id].permissions === undefined)
|
if (!client.global.db.guilds[guild.id].permissions)
|
||||||
client.global.db.guilds[guild.id].permissions = client.config.permissions;
|
client.global.db.guilds[guild.id].permissions = client.config.permissions;
|
||||||
if (client.global.db.guilds[guild.id].dj === undefined)
|
if (!client.global.db.guilds[guild.id].dj)
|
||||||
client.global.db.guilds[guild.id].dj = client.config.dj;
|
client.global.db.guilds[guild.id].dj = client.config.dj;
|
||||||
if (client.global.db.guilds[guild.id].djrole === undefined)
|
if (!client.global.db.guilds[guild.id].djrole)
|
||||||
client.global.db.guilds[guild.id].djrole = client.config.djrole;
|
client.global.db.guilds[guild.id].djrole = client.config.djrole;
|
||||||
if (client.global.db.guilds[guild.id].startPlaying === undefined)
|
if (!client.global.db.guilds[guild.id].startPlaying)
|
||||||
client.global.db.guilds[guild.id].startPlaying =
|
client.global.db.guilds[guild.id].startPlaying =
|
||||||
client.config.startPlaying;
|
client.config.startPlaying;
|
||||||
if (client.global.db.guilds[guild.id].bass === undefined)
|
if (!client.global.db.guilds[guild.id].bass)
|
||||||
client.global.db.guilds[guild.id].bass = client.config.bass;
|
client.global.db.guilds[guild.id].bass = client.config.bass;
|
||||||
if (client.global.db.guilds[guild.id].blacklsit === undefined)
|
if (!client.global.db.guilds[guild.id].blacklsit)
|
||||||
client.global.db.guilds[guild.id].blacklist = [];
|
client.global.db.guilds[guild.id].blacklist = [];
|
||||||
if (client.global.db.guilds[guild.id].premium === undefined)
|
if (!client.global.db.guilds[guild.id].premium)
|
||||||
client.global.db.guilds[guild.id].premium = false;
|
client.global.db.guilds[guild.id].premium = false;
|
||||||
|
if (!client.global.db.guilds[guild.id].playSimilar) client.global.db.guilds[guild.id].playSimilar = client.config.playSimilar
|
||||||
});
|
});
|
||||||
};
|
};
|
@ -7,7 +7,8 @@ module.exports = async function (
|
|||||||
voiceChannel,
|
voiceChannel,
|
||||||
client,
|
client,
|
||||||
playlist,
|
playlist,
|
||||||
type
|
type,
|
||||||
|
spotifyTrackData
|
||||||
) {
|
) {
|
||||||
const songInfo = await ytdl.getInfo(resource).catch(err => console.log(err));
|
const songInfo = await ytdl.getInfo(resource).catch(err => console.log(err));
|
||||||
const song = {
|
const song = {
|
||||||
@ -15,7 +16,8 @@ module.exports = async function (
|
|||||||
url: resource,
|
url: resource,
|
||||||
author: msg.author,
|
author: msg.author,
|
||||||
type: type,
|
type: type,
|
||||||
info: songInfo.videoDetails
|
info: songInfo.videoDetails,
|
||||||
|
track: spotifyTrackData
|
||||||
};
|
};
|
||||||
|
|
||||||
const queue = client.queue.get(msg.guild.id);
|
const queue = client.queue.get(msg.guild.id);
|
||||||
|
@ -22,12 +22,12 @@ module.exports = async function (guild, song, client, seek, play) {
|
|||||||
client.queue.delete(guild.id);
|
client.queue.delete(guild.id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}, 10000);
|
}, 30000);
|
||||||
|
|
||||||
streamConfig.options.seek = seek;
|
streamConfig.options.seek = seek;
|
||||||
|
|
||||||
let input = song.url;
|
let input = song.url;
|
||||||
if (song.type === "ytdl")
|
if (song.type === "ytdl" || song.type === "spotify")
|
||||||
input = ytdl(song.url, streamConfig.ytdlOptions)
|
input = ytdl(song.url, streamConfig.ytdlOptions)
|
||||||
//.on('info', (info, format) => console.log(format))
|
//.on('info', (info, format) => console.log(format))
|
||||||
.on("error", (error) => console.log(error));
|
.on("error", (error) => console.log(error));
|
||||||
@ -69,7 +69,7 @@ module.exports = async function (guild, song, client, seek, play) {
|
|||||||
dispatcher.setVolume(queue.volume / 100);
|
dispatcher.setVolume(queue.volume / 100);
|
||||||
require("../../events/dispatcherEvents/handler")(client, dispatcher, queue, guild);
|
require("../../events/dispatcherEvents/handler")(client, dispatcher, queue, guild);
|
||||||
if ((client.global.db.guilds[guild.id].startPlaying && play) || play) {
|
if ((client.global.db.guilds[guild.id].startPlaying && play) || play) {
|
||||||
if (song.type !== "ytdl") return;
|
if (song.type !== "ytdl" && song.type !== "spotify") return;
|
||||||
const embed = new Discord.MessageEmbed()
|
const embed = new Discord.MessageEmbed()
|
||||||
.setTitle(`${client.messages.startPlaying}**${song.title}**`)
|
.setTitle(`${client.messages.startPlaying}**${song.title}**`)
|
||||||
.setDescription(
|
.setDescription(
|
||||||
|
@ -12,6 +12,7 @@ module.exports = async function (client) {
|
|||||||
bass: client.global.db.guilds[guild.id].bass,
|
bass: client.global.db.guilds[guild.id].bass,
|
||||||
blacklist: client.global.db.guilds[guild.id].blacklist,
|
blacklist: client.global.db.guilds[guild.id].blacklist,
|
||||||
premium: client.global.db.guilds[guild.id].premium,
|
premium: client.global.db.guilds[guild.id].premium,
|
||||||
|
playSimilar: client.global.db.guilds[guild.id].playSimilar
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user