Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const Discord = require('discord.js');
- const client = new Discord.Client();
- const ytdl = require('ytdl-core');
- const request = require('request');
- const fs = require('fs');
- const getYoutubeID = require('get-youtube-id');
- //.
- const yt_api_key = "AIzaSyDeoIH0u1e72AtfpwSKKOSy3IPp2UHzqi4";
- const Canvas = require("canvas");
- const jimp = require("jimp");
- const moment = require("moment")
- //const ytdl = require("ytdl-core");
- const { Client, Util } = require('discord.js');
- //const getYoutubeID = require('get-youtube-id');
- const fetchVideoInfo = require('youtube-info');
- const YouTube = require('simple-youtube-api');
- const youtube = new YouTube("AIzaSyAdORXg7UZUo7sePv97JyoDqtQVi3Ll0b8");
- const queue = new Map();
- //const YouTube = require('simple-youtube-api');
- var prefix = "!";
- //const config = require('./config.json');
- //const { Client, Util} = require('discord.js');
- client.on('ready', () => {
- console.log(`Logged in as ${client.user.tag}!`);
- });
- var prefix = '!'
- var color = new Discord.RichEmbed().setColor('#000000').setColor('#36393e')
- function e(message, args) {
- var embed = new Discord.RichEmbed()
- .setColor(color.color)
- .setDescription(args)
- .setFooter(`By Request of ${message.author.username}`);
- message.channel.sendEmbed(embed);
- };
- //Errors [ function ]
- function err(message, args) {
- var embed = new Discord.RichEmbed()
- .setColor(color.color)
- .setAuthor(args, "https://upload.wikimedia.org/wikipedia/commons/thumb/7/74/Feedbin-Icon-error.svg/1000px-Feedbin-Icon-error.svg.png")
- message.channel.sendEmbed(embed);
- };
- //Requested by [ function ]
- function ee(message, args) {
- var embed = new Discord.RichEmbed()
- .setColor(color.color)
- .setAuthor(args)
- .setFooter(`Requested by ${message.author.username}`);
- message.channel.sendEmbed(embed);
- };
- //Left the voice channel [ function ] ,-,
- function L(message, args) {
- var embed = new Discord.RichEmbed()
- .setColor(color.color)
- .setDescription(args)
- .setFooter(`By Request of ${message.author.username}`);
- message.channel.sendEmbed(embed);
- }
- //Current [ function ]
- function V(message, args) {
- var embed = new Discord.RichEmbed()
- .setColor(color.color)
- .setAuthor(args, "https://www.iconsdb.com/icons/preview/red/volume-up-4-xxl.png")
- message.channel.sendEmbed(embed);
- }
- // For the skip command
- function S(message, args) {
- var embed = new Discord.RichEmbed()
- .setColor(color.color)
- .setDescription(args)
- message.channel.sendEmbed(embed);
- };
- function VS(message, args) {
- var embed = new Discord.RichEmbed()
- .setColor(color.color)
- .setDescription(args)
- .setFooter("Requires Another Vote.")
- message.channel.sendEmbed(embed);
- };
- function Vs(message, args) {
- var embed = new Discord.RichEmbed()
- .setColor(color.color)
- .setAuthor(args, "https://www.iconsdb.com/icons/preview/red/volume-up-4-xxl.png")
- message.channel.sendEmbed(embed);
- };
- const qs = require('querystring');
- const cool = [];
- const ms = require('ms')
- const fetch = require('node-fetch');
- //const request = require('request')
- client.on('warn', console.warn);
- client.on('error', console.error);
- client.on('ready', () => console.log('I am ready!'));
- client.on('disconnect', () => console.log('I disconnected!'));
- client.on('reconnecting', () => console.log('I am disconnecting!'));
- client.on('voiceStateUpdate', (oldMember, newMember) => {
- let newUserChannel = newMember.voiceChannel
- let oldUserChannel = oldMember.voiceChannel
- const serverQueue = queue.get(oldMember.guild.id);
- if(oldUserChannel === undefined && newUserChannel !== undefined) {
- // User joines a voice channel
- } else if(newUserChannel === undefined){
- // User leaves a voice channel
- if(oldMember.id === '61633413272888954896'){
- return console.log("BOT");
- }
- else{
- if(client.guilds.get(oldMember.guild.id).voiceConnection != null){
- if(client.guilds.get(oldMember.guild.id).voiceConnection.channel.id === oldUserChannel.id){
- if(oldUserChannel.members.size < 2){
- serverQueue.songs = [];
- serverQueue.connection.dispatcher.end('No members left in the channel!')
- }
- }else{
- return console.log('not in the same voice channel');
- }
- }else{
- return undefined;
- }
- }
- }
- })
- //)//
- var PREFIX = 'r'
- client.on('message', async msg => { // eslint-disable-line
- if (msg.author.bot) return undefined;
- var PREFIX = 'r'
- if (!msg.content.startsWith(PREFIX)) return undefined;
- const args = msg.content.split(' ');
- const searchString = args.slice(1).join(' ');
- const url = args[1];
- const serverQueue = queue.get(msg.guild.id);
- if(msg.content.startsWith(`${PREFIX}play`)){
- // const perm = voiceChannel.permissionFor(msg.author.id)
- // if(!perm.has('CONNECT')); //return msg.channel.send(
- // `**This Command Protéction**`)
- const voiceChannel = msg.member.voiceChannel;
- // if(!msg voiceChannel.permissionFor(msg.author.id)
- if(!voiceChannel){
- var embedplay1 = new Discord.RichEmbed()
- .setTitle(`**Please Connect To A Voice Channel To Play Something!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedplay1);
- }
- const permissions = voiceChannel.permissionsFor(msg.client.user);
- if(!permissions.has('CONNECT')){
- var embedplay2 = new Discord.RichEmbed()
- .setTitle(`**I lack the right CONNECT to connect in these Voice Channel!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedplay2);
- }
- if (!permissions.has('SPEAK')){
- var embedplay3 = new Discord.RichEmbed()
- .setTitle(`**I do not have the right to SPEAK to connect in these Voice Channel!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedplay3);
- }
- if(url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)){
- const playlist = await youtube.getPlaylist(url);
- const videos = await playlist.getVideos();
- for(const video of Object.values(videos)){
- const video2 = await youtube.getVideoByID(video.id);
- await handleVideo(video2, msg, voiceChannel, true);
- }
- var embedplay4 = new Discord.RichEmbed()
- .setTitle(`**Playlist: ${playlist.title} queued!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedplay4);
- }else{
- try{
- var video = await youtube.getVideo(url);
- }catch(error){
- try{
- var videos = await youtube.searchVideos(searchString, 10);
- let index = 0;
- var embedqueue5 = new Discord.RichEmbed()
- .setTitle(`__**Song Play **__`)
- .setDescription(`
- ${videos.map(video2 => `**${++index}-** ${video2.title}`).join('\n')}
- **Please enter a number between 1-10 on,a Song select!**`)
- .setColor([226, 50, 41])
- msg.channel.sendEmbed(embedqueue5);
- try{
- var response = await msg.channel.awaitMessages(msg2 => msg2.content > 0 && msg2.content < 11, {
- maxMatches: 1,
- time: 10000,
- errors: ['time']
- });
- }catch(err){
- console.error(err);
- var embedplay6 = new Discord.RichEmbed()
- .setTitle(`**no or invalid number was entered. Demolition of the song selection!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedplay6);
- }
- const videoIndex = parseInt(response.first().content);
- var video = await youtube.getVideoByID(videos[videoIndex - 1].id);
- }catch(err){
- console.error(err);
- var embedplay7 = new Discord.RichEmbed()
- .setTitle(`**I could find no video!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedplay7);
- }
- }
- return handleVideo(video, msg, voiceChannel);
- }
- } else if (msg.content.startsWith(`${PREFIX}loop`)) {
- if (!serverQueue) return err(msg, `You Should Play Something To Use This Command.`);
- if (serverQueue && serverQueue.playing) {
- if (!msg.member.voiceChannel) return err(msg,`You Should Be in A Voice Channel To Use This Command.`);
- if (msg.guild.members.get(msg.member.id).voiceChannel.id !== msg.guild.members.get(client.user.id).voiceChannel.id) return err(msg , `You Should Be in My Voice Channel To Use My Commands.`)
- if (serverQueue.loop == false) {
- serverQueue.loop = true;
- e(msg, `**${serverQueue.songs[0].title}**, will be looped`)
- } else if (serverQueue.loop == true) {
- serverQueue.loop = false;
- e(msg, `**${serverQueue.songs[0].title}**, will not be looped again`)
- };
- }
- } else if(msg.content.startsWith(`${PREFIX}skip`)) {
- if(!msg.member.voiceChannel){
- var embedskip1 = new Discord.RichEmbed()
- .setTitle(`**You are in not in the Voice Channel!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedskip1);
- }
- if(!serverQueue){
- var embedskip2 = new Discord.RichEmbed()
- .setTitle(`**There is nothing to Skip!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedskip2);
- }
- serverQueue.connection.dispatcher.end('Skip command has been used!');
- var embedskip3 = new Discord.RichEmbed()
- .setTitle(`**The Bot has been Skipped!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedskip3);
- }
- else if (msg.content.startsWith(`${PREFIX}stop`)){
- if(!msg.member.voiceChannel){
- var embedstop1 = new Discord.RichEmbed()
- .setTitle(`**you're not in the voice channel!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedstop1);
- }
- if(!serverQueue){
- var embedstop2 = new Discord.RichEmbed()
- .setTitle(`**There is nothing to stop!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedstop2);
- }
- serverQueue.songs = [];
- serverQueue.connection.dispatcher.end('Stop command has been used!');
- var embedstop3 = new Discord.RichEmbed()
- .setTitle(`**The Bot has been Skipped!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedstop3);
- }
- else if(msg.content.startsWith(`${PREFIX}song`)){
- if(!serverQueue){
- var embedsong1 = new Discord.RichEmbed()
- .setTitle(`**It does nothing at the moment!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedsong1);
- }
- var embedsong2 = new Discord.RichEmbed()
- .setTitle(`__**${serverQueue.songs[0].title}**__`)
- .setThumbnail(serverQueue.songs[0].thumbnail)
- .setDescription(`
- Von: ${serverQueue.songs[0].channel}
- Dauer: ${serverQueue.songs[0].duration}
- Link: ${serverQueue.songs[0].url}
- `)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedsong2);
- }
- else if (msg.content.startsWith(`${PREFIX}volume`)) {
- if (!serverQueue) return err(msg,`You Should Play Something To Use This Command.`);
- if (!msg.member.voiceChannel) return err(msg,`You Should Be in A Voice Channel To Use This Command.`);
- if (msg.guild.members.get(msg.member.id).voiceChannel.id !== msg.guild.members.get(client.user.id).voiceChannel.id) return err(msg , `You Should Be in My Voice Channel To Use My Commands.`)
- if (!args[1]) return V(msg,`The current volume is ${serverQueue.volume}%`);
- args[1] = parseInt(args[1]);
- if (args[1] > 300 || args[1]<2) return err(msg, `Only allowed from 2 - 300`)
- if (isNaN(args[1])) return err(msg, `Only numbers are allowed.`)
- if (args[1] == serverQueue.volume) return err(msg, `My Volume is already ${serverQueue.volume}%`)
- serverQueue.volume = args[1];
- serverQueue.connection.dispatcher.setVolumeLogarithmic(args[1] / 250);
- return Vs(msg, `Volume Successfully Changed to ${args[1]}%`);
- } else if (msg.content.startsWith(`${PREFIX}repeat`) || msg.content.startsWith(`${PREFIX}rpt`)) {
- if (!serverQueue) return err(msg,`You Should Play Something To Use This Command.`);
- if (serverQueue) {
- if (msg.guild.members.get(msg.member.id).voiceChannel.id !== msg.guild.members.get(client.user.id).voiceChannel.id) return err(msg , `You Should Be in My Voice Channel To Use My Commands.`)
- if (!msg.member.voiceChannel) return ee(msg,`You Should Be in A Voice Channel To Use This Command.`);
- serverQueue.songs.splice(7, 3, serverQueue.songs[0])
- e(msg, `**${serverQueue.songs[0].title}**, Will be repeated`);
- return undefined;
- }//
- if(args[1]>0){
- serverQueue.volume = args[1];
- serverQueue.connection.dispatcher.setVolume(args[1] / 2000);
- serverQueue.mute = false;
- var embedvolume3 = new Discord.RichEmbed()
- .setTitle(`**The volume is on ${args[1]} set**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedvolume3);
- } else{
- var embedvolume4 = new Discord.RichEmbed()
- .setTitle(`**Please enter a number >0 on!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedvolume4);
- }
- }
- else if(msg.content.startsWith(`${PREFIX}queue`)){
- if(!serverQueue){
- var embedqueue1 = new Discord.RichEmbed()
- .setTitle(`**It does nothing at the moment!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedqueue1);
- }
- var embedqueue2 = new Discord.RichEmbed()
- .setTitle(`__**Song Queue**__`)
- .setDescription(`
- ${serverQueue.songs.map(song => `**-** ${song.title}`).join('\n')}
- **Playing:** ${serverQueue.songs[0].title}`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedqueue2);
- }
- else if(msg.content.startsWith(`${PREFIX}pause`)){
- if(serverQueue && serverQueue.playing) {
- serverQueue.playing = false;
- serverQueue.connection.dispatcher.pause();
- var embedpause1 = new Discord.RichEmbed()
- .setTitle(`**The song is stopped!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedpause1);
- }
- var embedpause2 = new Discord.RichEmbed()
- .setTitle(`**It does nothing at the moment!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedpause2);
- }
- else if(msg.content.startsWith(`${PREFIX}resume`)){
- if(serverQueue && !serverQueue.playing){
- serverQueue.playing = true;
- serverQueue.connection.dispatcher.resume();
- var embedresume1 = new Discord.RichEmbed()
- .setTitle(`**The song keeps playing on!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedresume1);
- }
- var embedresume2 = new Discord.RichEmbed()
- .setTitle(`**It does nothing at the moment!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedresume2);
- }
- else if(msg.content.startsWith(`${PREFIX}mutemusic`)){
- if(!serverQueue){
- var embedmute1 = new Discord.RichEmbed()
- .setTitle(`**It does nothing at the moment!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedmute1);
- }
- if(serverQueue.mute){
- var embedmute2 = new Discord.RichEmbed()
- .setTitle(`**The music Bot is already muted!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedmute2);
- }
- else{
- serverQueue.mute = true;
- serverQueue.connection.dispatcher.setVolume(0 / 2000);
- var embedmute3 = new Discord.RichEmbed()
- .setTitle(`**The music Bot was muted!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedmute3);
- }
- }
- else if(msg.content.startsWith(`${PREFIX}unmutemusic`)){
- /
- if(!serverQueue){
- var embedunmute1 = new Discord.RichEmbed()
- .setTitle(`**It does nothing at the moment!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedunmute1);
- }
- if(!serverQueue.mute){
- var embedunmute2 = new Discord.RichEmbed()
- .setTitle(`**The Music Bot is already unmuted!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedunmute2);
- }
- else{
- serverQueue.mute = false;
- serverQueue.connection.dispatcher.setVolume(serverQueue.volume / 2000);
- var embedunmute3 = new Discord.RichEmbed()
- .setTitle(`**The Music Bot has been unmuted!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedunmute3);
- }
- }
- else if(msg.content.startsWith(`${PREFIX}help`)){
- var embedhelp = new Discord.RichEmbed()
- .setTitle(`__**${msg.guild.name} Commands**__`)
- .addField(`${PREFIX}play [رابط المقطع / PlayList ]`, `Usage: **${PREFIX}play** الوصف : لتشغيل مقطع يوتيوب / قائمة تشغيل.`, false)
- .addField(`${PREFIX}play اسم المقطع`, `Usage: **${PREFIX}play** لـتشغيل مقطع عبر اسمه.`, false)
- .addField(`${PREFIX}skip`, `Usage: **${PREFIX}skip** لتـخطي مقطـع.`, false)
- .addField(`${PREFIX}stop`, `Usage: **${PREFIX}stop** لأيقـاف مقطع.`, false)
- .addField(`${PREFIX}song`, `Usage: **${PREFIX}song** احصائيات المقطع.`, false)
- .addField(`${PREFIX}queue`, `Usage: **${PREFIX}queue** لرؤية قائمة المقاطع المراد تشغيلها.`, false)
- .addField(`${PREFIX}volume`, `Usage: **${PREFIX}volume** لكشف حجم الصوت. ***[ Premium Only ]***`, false)
- .addField(`${PREFIX}volume [Wert]`, `Usage: **${PREFIX}volume** لتحديد حجم الصوت. ***[ Premium Only ]***`, false)
- .addField(`${PREFIX}pause`, `Usage: **${PREFIX}pause** لأيقاف مقطع مؤقتًا.`, false)
- .addField(`${PREFIX}resume`, `Usage: **${PREFIX}resume** لاستئناف المقطع المتوقف مؤقتًا.`, false)
- .addField(`${PREFIX}mutemusic`, `Usage: **${PREFIX}mutemusic** لكتم البوت.`, false)
- .addField(`${PREFIX}unmutemusic`, `Usage: **${PREFIX}unmutemusic** لفك الكتم عن البوت.`, false)
- .setColor([226, 50, 41])
- .setThumbnail(client.user.avatarURL)
- return msg.channel.sendEmbed(embedhelp);
- }
- return undefined;
- });
- async function handleVideo(video, msg, voiceChannel, playlist=false){
- const serverQueue = queue.get(msg.guild.id);
- const song = {
- id: video.id,
- title: Util.escapeMarkdown(video.title),
- url: `https://www.youtube.com/watch?v=${video.id}`,
- thumbnail: video.thumbnails.default.url,
- channel: video.channel.title,
- duration: `${video.duration.hours}hrs : ${video.duration.minutes}min : ${video.duration.seconds}sec`
- };
- if(!serverQueue){
- const queueConstruct = {
- textChannel: msg.channel,
- voiceChannel: voiceChannel,
- connection: null,
- songs: [],
- volume: 100,
- mute: false,
- playing: true
- };
- queue.set(msg.guild.id, queueConstruct);
- queueConstruct.songs.push(song);
- try{
- var connection = await voiceChannel.join();
- queueConstruct.connection = connection;
- play(msg.guild, queueConstruct.songs[0]);
- }catch(error){
- console.log(error);
- queue.delete(msg.guild.id);
- var embedfunc1 = new Discord.RichEmbed()
- .setTitle(`**Bot could not VoiceChannel the joinen!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedfunc1);
- }
- } else {
- serverQueue.songs.push(song);
- console.log(serverQueue.songs);
- if(playlist) return undefined;
- else{
- var embedfunc2 = new Discord.RichEmbed()
- .setTitle(`**${song.title} queued!**`)
- .setColor([226, 50, 41])
- return msg.channel.sendEmbed(embedfunc2);
- }
- }
- return undefined;
- }
- function play(guild, song){
- const serverQueue = queue.get(guild.id);
- if(!song){
- serverQueue.voiceChannel.leave();
- queue.delete(guild.id);
- return;
- }
- console.log(serverQueue.songs);
- const repeat = {};
- const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
- .on('end', reason => {
- if(reason === 'Stream is not generating quickly enough.') console.log('Song ended');
- else console.log(reason);
- serverQueue.songs.shift();
- setTimeout(() => {
- play(guild, serverQueue.songs[0]);
- }, 250);
- })
- .on('error', error => console.log(error));
- // const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
- dispatcher.setVolume(serverQueue.volume / 2000);
- serverQueue.textChannel.send(`**Now Playing ${song.title} :notes: **`)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement