mirror of
				https://github.com/musix-org/musix-oss
				synced 2025-11-04 03:39:32 +00:00 
			
		
		
		
	updated video search
This commit is contained in:
		@@ -43,8 +43,8 @@
 | 
				
			|||||||
    "soundcloud-api-client": "0.0.9",
 | 
					    "soundcloud-api-client": "0.0.9",
 | 
				
			||||||
    "spotify-web-api-node": "^4.0.0",
 | 
					    "spotify-web-api-node": "^4.0.0",
 | 
				
			||||||
    "utf-8-validate": "^5.0.2",
 | 
					    "utf-8-validate": "^5.0.2",
 | 
				
			||||||
    "yt-search": "^1.1.2",
 | 
					 | 
				
			||||||
    "ytdl-core": "^3.1.0",
 | 
					    "ytdl-core": "^3.1.0",
 | 
				
			||||||
 | 
					    "ytsr": "^0.1.15",
 | 
				
			||||||
    "zlib-sync": "^0.1.6"
 | 
					    "zlib-sync": "^0.1.6"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,8 @@
 | 
				
			|||||||
const YouTube = require("simple-youtube-api");
 | 
					const YouTube = require("simple-youtube-api");
 | 
				
			||||||
const SpotifyApi = require("spotify-web-api-node");
 | 
					const SpotifyApi = require("spotify-web-api-node");
 | 
				
			||||||
const search = require("yt-search");
 | 
					const ytdl = require("ytdl-core");
 | 
				
			||||||
const ytdl = require("ytdl-core")
 | 
					const ytsr = require("ytsr");
 | 
				
			||||||
 | 
					const ms = require("ms");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
  name: "play",
 | 
					  name: "play",
 | 
				
			||||||
@@ -43,25 +44,18 @@ module.exports = {
 | 
				
			|||||||
    if (!voiceChannel.speakable)
 | 
					    if (!voiceChannel.speakable)
 | 
				
			||||||
      return msg.channel.send(client.messages.noPermsSpeak);
 | 
					      return msg.channel.send(client.messages.noPermsSpeak);
 | 
				
			||||||
    if (ytdl.validateURL(url)) {
 | 
					    if (ytdl.validateURL(url)) {
 | 
				
			||||||
      client.funcs.handleVideo({
 | 
					      client.funcs.handleVideo(url, msg, voiceChannel, client, false, "ytdl");
 | 
				
			||||||
          url: 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)(.*)$/)) {
 | 
				
			||||||
      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)
 | 
					            searchVideos(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 (
 | 
					    } else if (
 | 
				
			||||||
      url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)
 | 
					      url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)
 | 
				
			||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
@@ -71,7 +65,7 @@ module.exports = {
 | 
				
			|||||||
      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(
 | 
					        await client.funcs.handleVideo(
 | 
				
			||||||
          video2,
 | 
					          video2.url,
 | 
				
			||||||
          msg,
 | 
					          msg,
 | 
				
			||||||
          voiceChannel,
 | 
					          voiceChannel,
 | 
				
			||||||
          client,
 | 
					          client,
 | 
				
			||||||
@@ -85,19 +79,24 @@ module.exports = {
 | 
				
			|||||||
      );
 | 
					      );
 | 
				
			||||||
      return lmsg.edit(message);
 | 
					      return lmsg.edit(message);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      search(searchString, function (err, res) {
 | 
					      ytsr(
 | 
				
			||||||
        if (err) return console.log(err);
 | 
					        searchString, {
 | 
				
			||||||
        if (res.videos.length === 0)
 | 
					          limit: 5,
 | 
				
			||||||
          return msg.channel.send(client.messages.noResults);
 | 
					        },
 | 
				
			||||||
        client.funcs.handleVideo(
 | 
					        function (err, res) {
 | 
				
			||||||
          res.videos[0],
 | 
					          if (err) console.log(err);
 | 
				
			||||||
          msg,
 | 
					          if (!res.items[0]) return msg.channel.send(client.messages.noResults);
 | 
				
			||||||
          voiceChannel,
 | 
					          const videoResults = res.items.filter(item => item.type === "video");
 | 
				
			||||||
          client,
 | 
					          client.funcs.handleVideo(
 | 
				
			||||||
          false,
 | 
					            videoResults[0].link,
 | 
				
			||||||
          "ytdl"
 | 
					            msg,
 | 
				
			||||||
        );
 | 
					            voiceChannel,
 | 
				
			||||||
      });
 | 
					            client,
 | 
				
			||||||
 | 
					            false,
 | 
				
			||||||
 | 
					            "ytdl"
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -108,38 +107,45 @@ async function searchVideos(data, client, msg, voiceChannel) {
 | 
				
			|||||||
  for (let i = 0; data.body.tracks.items.length > i; i++) {
 | 
					  for (let i = 0; data.body.tracks.items.length > i; i++) {
 | 
				
			||||||
    const track = await data.body.tracks.items[i].track;
 | 
					    const track = await data.body.tracks.items[i].track;
 | 
				
			||||||
    await client.funcs.sleep(250);
 | 
					    await client.funcs.sleep(250);
 | 
				
			||||||
    search(
 | 
					    ytsr(
 | 
				
			||||||
      `${track.artists[0].name} ${track.name} audio`,
 | 
					      `${track.artists[0].name} ${track.name} audio`, {
 | 
				
			||||||
 | 
					        limit: 5,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
      async function (err, res) {
 | 
					      async function (err, res) {
 | 
				
			||||||
        if (err) return console.log(err);
 | 
					        if (err) return console.log(err);
 | 
				
			||||||
        if (res.videos.length === 0) {
 | 
					        if (!res.items[0]) {
 | 
				
			||||||
          search(
 | 
					          ytsr(
 | 
				
			||||||
            `${track.artists[0].name} ${track.name} lyrics`,
 | 
					            `${track.artists[0].name} ${track.name} lyrics`, {
 | 
				
			||||||
 | 
					              limit: 5,
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            async function (err, res) {
 | 
					            async function (err, res) {
 | 
				
			||||||
              if (err) return console.log(err);
 | 
					              if (err) return console.log(err);
 | 
				
			||||||
              if (res.videos.length === 0) {
 | 
					              if (!res.items[0]) {
 | 
				
			||||||
                search(
 | 
					                ytsr(
 | 
				
			||||||
                  `${track.artists[0].name} ${track.name}`,
 | 
					                  `${track.artists[0].name} ${track.name}`, {
 | 
				
			||||||
 | 
					                    limit: 5,
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
                  async function (err, res) {
 | 
					                  async function (err, res) {
 | 
				
			||||||
                    if (err) return console.log(err);
 | 
					                    if (err) console.log(err);
 | 
				
			||||||
                    if (res.videos.length === 0) {
 | 
					                    if (!res.items[0]) {
 | 
				
			||||||
                      failed++;
 | 
					                      failed++;
 | 
				
			||||||
                      return;
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    await client.funcs.handleVideo(
 | 
					                    const videoResults = res.items.filter(item => item.type === "video");
 | 
				
			||||||
                      res.videos[0],
 | 
					                    client.funcs.handleVideo(
 | 
				
			||||||
 | 
					                      videoResults[0].link,
 | 
				
			||||||
                      msg,
 | 
					                      msg,
 | 
				
			||||||
                      voiceChannel,
 | 
					                      voiceChannel,
 | 
				
			||||||
                      client,
 | 
					                      client,
 | 
				
			||||||
                      true,
 | 
					                      false,
 | 
				
			||||||
                      "ytdl"
 | 
					                      "ytdl"
 | 
				
			||||||
                    );
 | 
					                    );
 | 
				
			||||||
                  }
 | 
					                  }
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
 | 
					              const videoResults = res.items.filter(item => item.type === "video");
 | 
				
			||||||
              await client.funcs.handleVideo(
 | 
					              await client.funcs.handleVideo(
 | 
				
			||||||
                res.videos[0],
 | 
					                videoResults[0].link,
 | 
				
			||||||
                msg,
 | 
					                msg,
 | 
				
			||||||
                voiceChannel,
 | 
					                voiceChannel,
 | 
				
			||||||
                client,
 | 
					                client,
 | 
				
			||||||
@@ -151,8 +157,9 @@ async function searchVideos(data, client, msg, voiceChannel) {
 | 
				
			|||||||
          failed++;
 | 
					          failed++;
 | 
				
			||||||
          return;
 | 
					          return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        const videoResults = res.items.filter(item => item.type === "video");
 | 
				
			||||||
        await client.funcs.handleVideo(
 | 
					        await client.funcs.handleVideo(
 | 
				
			||||||
          res.videos[0],
 | 
					          videoResults[0].link,
 | 
				
			||||||
          msg,
 | 
					          msg,
 | 
				
			||||||
          voiceChannel,
 | 
					          voiceChannel,
 | 
				
			||||||
          client,
 | 
					          client,
 | 
				
			||||||
@@ -164,15 +171,12 @@ async function searchVideos(data, client, msg, voiceChannel) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  let message;
 | 
					  let message;
 | 
				
			||||||
  if (failed === 0) {
 | 
					  if (failed === 0) {
 | 
				
			||||||
    message = client.messages.playlistAdded.replace(
 | 
					    message = client.messages.playlistAdded.replace("%TITLE%", data.body.name);
 | 
				
			||||||
      "%TITLE%",
 | 
					 | 
				
			||||||
      data.body.name
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    message = `${client.messages.playlistAdded.replace(
 | 
					    message = `${client.messages.playlistAdded.replace(
 | 
				
			||||||
              "%TITLE%",
 | 
					      "%TITLE%",
 | 
				
			||||||
              data.body.name
 | 
					      data.body.name
 | 
				
			||||||
            )}\n${client.messages.failedToLoad + failed}`;
 | 
					    )}\n${client.messages.failedToLoad + failed}`;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  lmsg.edit(message);
 | 
					  lmsg.edit(message);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
const yts = require('yt-search');
 | 
					const ytsr = require('ytsr');
 | 
				
			||||||
const he = require('he');
 | 
					const he = require('he');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
@@ -22,10 +22,13 @@ module.exports = {
 | 
				
			|||||||
        if (voiceChannel.full) return msg.channel.send(client.messages.channelFull);
 | 
					        if (voiceChannel.full) return msg.channel.send(client.messages.channelFull);
 | 
				
			||||||
        if (!voiceChannel.joinable) return msg.channel.send(client.messages.noPermsConnect);
 | 
					        if (!voiceChannel.joinable) return msg.channel.send(client.messages.noPermsConnect);
 | 
				
			||||||
        if (!voiceChannel.speakable) return msg.channel.send(client.messages.noPermsSpeak);
 | 
					        if (!voiceChannel.speakable) return msg.channel.send(client.messages.noPermsSpeak);
 | 
				
			||||||
        yts(searchString, async function (err, res) {
 | 
					        ytsr(searchString, {
 | 
				
			||||||
 | 
					            limit: 20,
 | 
				
			||||||
 | 
					        }, async function (err, res) {
 | 
				
			||||||
            if (err) return console.log(err);
 | 
					            if (err) return console.log(err);
 | 
				
			||||||
            if (res.videos.length === 0) return msg.channel.send(client.messages.noResults);
 | 
					            if (!res.items[0]) return msg.channel.send(client.messages.noResults);
 | 
				
			||||||
            const videos = res.videos.slice(0, 10);
 | 
					            const videoResults = res.items.filter(item => item.type === "video");
 | 
				
			||||||
 | 
					            const videos = videoResults.slice(0, 10);
 | 
				
			||||||
            let index = 0;
 | 
					            let index = 0;
 | 
				
			||||||
            const embed = new Discord.MessageEmbed()
 | 
					            const embed = new Discord.MessageEmbed()
 | 
				
			||||||
                .setTitle(client.messages.songSelection)
 | 
					                .setTitle(client.messages.songSelection)
 | 
				
			||||||
@@ -44,7 +47,7 @@ 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;
 | 
				
			||||||
            return client.funcs.handleVideo(videos[videoIndex], msg, voiceChannel, client, false, "ytdl");
 | 
					            return client.funcs.handleVideo(videos[videoIndex].link, msg, voiceChannel, client, false, "ytdl");
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -49,9 +49,8 @@ module.exports = {
 | 
				
			|||||||
                if (songs.length !== 0) {
 | 
					                if (songs.length !== 0) {
 | 
				
			||||||
                    const lmsg = await msg.channel.send(client.messages.loadingSongs);
 | 
					                    const lmsg = await msg.channel.send(client.messages.loadingSongs);
 | 
				
			||||||
                    for (let i = 0; i < songs.length; i++) {
 | 
					                    for (let i = 0; i < songs.length; i++) {
 | 
				
			||||||
                        client.funcs.handleVideo({
 | 
					                        client.funcs.handleVideo(
 | 
				
			||||||
                            url: `https://www.youtube.com/watch?v=${songs[i].youtubeId}`
 | 
					                            `https://www.youtube.com/watch?v=${songs[i].youtubeId}`, msg, voiceChannel, client, true, "ytdl");
 | 
				
			||||||
                        }, msg, voiceChannel, client, true, "ytdl");
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    const message = client.messages.songsAdded.replace(
 | 
					                    const message = client.messages.songsAdded.replace(
 | 
				
			||||||
                        "%AMOUNT%",
 | 
					                        "%AMOUNT%",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,10 +9,10 @@ module.exports = async function (
 | 
				
			|||||||
  playlist,
 | 
					  playlist,
 | 
				
			||||||
  type
 | 
					  type
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
  const songInfo = await ytdl.getInfo(resource.url).catch(err => console.log(err));
 | 
					  const songInfo = await ytdl.getInfo(resource).catch(err => console.log(err));
 | 
				
			||||||
  const song = {
 | 
					  const song = {
 | 
				
			||||||
    title: Discord.Util.escapeMarkdown(songInfo.videoDetails.title),
 | 
					    title: Discord.Util.escapeMarkdown(songInfo.videoDetails.title),
 | 
				
			||||||
    url: resource.url,
 | 
					    url: resource,
 | 
				
			||||||
    author: msg.author,
 | 
					    author: msg.author,
 | 
				
			||||||
    type: type,
 | 
					    type: type,
 | 
				
			||||||
    info: songInfo.videoDetails
 | 
					    info: songInfo.videoDetails
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ module.exports = async function (client, msg, youtube, voiceChannel, url) {
 | 
				
			|||||||
        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(video2, msg, voiceChannel, client, true);
 | 
					            await client.funcs.handleVideo(video2.url, msg, voiceChannel, client, true);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        let message;
 | 
					        let message;
 | 
				
			||||||
        message = client.messages.playlistAdded.replace("%TITLE%", playlist.title);
 | 
					        message = client.messages.playlistAdded.replace("%TITLE%", playlist.title);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user