· 6 years ago · Jan 03, 2020, 01:36 PM
1
2var PREFIX = "=";
3client.on('message', async msg => { // eslint-disable-line
4 if (msg.author.bot) return undefined;
5 if (!msg.content.startsWith(PREFIX)) return undefined;
6 const args = msg.content.split(' ');
7 const searchString = args.slice(1).join(' ');
8 const url = args[1];
9 const serverQueue = queue.get(msg.guild.id);
10
11 if(msg.content.startsWith(`${PREFIX}play`)){
12 const voiceChannel = msg.member.voiceChannel;
13 if(!voiceChannel){
14 var embedplay1 = new Discord.RichEmbed()
15 .setTitle(`Please Connect To A Voice Channel To Play Something!`)
16 .setColor(['#f9fcfc'])
17 return msg.channel.sendEmbed(embedplay1);
18 }
19 const permissions = voiceChannel.permissionsFor(msg.client.user);
20 if(!permissions.has('CONNECT')){
21 var embedplay2 = new Discord.RichEmbed()
22 .setTitle(`I lack the right CONNECT to connect in these Voice Channel!`)
23 .setColor(['#f9fcfc'])
24 return msg.channel.sendEmbed(embedplay2);
25 }
26 if (!permissions.has('SPEAK')){
27 var embedplay3 = new Discord.RichEmbed()
28 .setTitle(`I do not have the right to SPEAK to connect in these Voice Channel!`)
29 .setColor(['#f9fcfc'])
30 return msg.channel.sendEmbed(embedplay3);
31 }
32
33
34
35 if(url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)){
36 const playlist = await youtube.getPlaylist(url);
37 const videos = await playlist.getVideos();
38 for(const video of Object.values(videos)){
39 const video2 = await youtube.getVideoByID(video.id);
40 await handleVideo(video2, msg, voiceChannel, true);
41 }
42 var embedplay4 = new Discord.RichEmbed()
43 .setTitle(`Playlist: ${playlist.title} queued!`)
44 .setColor(['#f9fcfc'])
45 return msg.channel.sendEmbed(embedplay4);
46 }else{
47 try{
48 var video = await youtube.getVideo(url);
49 }catch(error){
50 try{
51 var videos = await youtube.searchVideos(searchString, 10);
52 let index = 0;
53 var embedqueue5 = new Discord.RichEmbed()
54 .setTitle(`Song Play list`)
55 .setDescription(`
56${videos.map(video2 => `${++index}- ${video2.title}`).join('\n')}
57
58Please enter a number between 1-10 on,a Song select!`)
59 .setColor(['#f9fcfc'])
60 msg.channel.sendEmbed(embedqueue5);
61
62 try{
63 var response = await msg.channel.awaitMessages(msg2 => msg2.content > 0 && msg2.content < 11, {
64 maxMatches: 1,
65 time: 100000,
66 errors: ['time']
67 });
68 }catch(err){
69 console.error(err);
70 var embedplay6 = new Discord.RichEmbed()
71 .setTitle(`no or invalid number was entered. Demolition of the song selection!`)
72 .setColor(['#f9fcfc'])
73 return msg.channel.sendEmbed(embedplay6);
74 }
75 const videoIndex = parseInt(response.first().content);
76 var video = await youtube.getVideoByID(videos[videoIndex - 1].id);
77 }catch(err){
78 console.error(err);
79 var embedplay7 = new Discord.RichEmbed()
80 .setTitle(`I could find no video!`)
81 .setColor(['#f9fcfc'])
82 return msg.channel.sendEmbed(embedplay7);
83 }
84 }
85 return handleVideo(video, msg, voiceChannel);
86 }
87
88 } else if(msg.content.startsWith(`${PREFIX}skip`)) {
89 if(!msg.member.voiceChannel){
90 var embedskip1 = new Discord.RichEmbed()
91 .setTitle(`You are in not in the Voice Channel!`)
92 .setColor(['#f9fcfc'])
93 return msg.channel.sendEmbed(embedskip1);
94 }
95 if(!serverQueue){
96 var embedskip2 = new Discord.RichEmbed()
97 .setTitle(`There is nothing to Skip!`)
98 .setColor(['#f9fcfc'])
99 return msg.channel.sendEmbed(embedskip2);
100 }
101 serverQueue.connection.dispatcher.end('Skip command has been used!');
102 var embedskip3 = new Discord.RichEmbed()
103 .setTitle(`⏩Skipped?`)
104 .setColor(['#f9fcfc'])
105 return msg.channel.sendEmbed(embedskip3);
106 }
107
108 else if (msg.content.startsWith(`${PREFIX}stop`)){
109 if(!msg.member.voiceChannel){
110 var embedstop1 = new Discord.RichEmbed()
111 .setTitle(`you're not in the voice channel!`)
112 .setColor(['#f9fcfc'])
113 return msg.channel.sendEmbed(embedstop1);
114 }
115 if(!serverQueue){
116 var embedstop2 = new Discord.RichEmbed()
117 .setTitle(`There is nothing to stop!`)
118 .setColor(['#f9fcfc'])
119 return msg.channel.sendEmbed(embedstop2);
120 }
121 serverQueue.songs = [];
122 serverQueue.connection.dispatcher.end('Stop command has been used!');
123 var embedstop3 = new Discord.RichEmbed()
124 .setTitle(`⏩Skipped?`)
125 .setColor(['#f9fcfc'])
126 return msg.channel.sendEmbed(embedstop3);
127 }
128 else if(msg.content.startsWith(`${PREFIX}song`)){
129 if(!serverQueue){
130 var embedsong1 = new Discord.RichEmbed()
131 .setTitle(`It does nothing at the moment!`)
132 .setColor(['#f9fcfc'])
133 return msg.channel.sendEmbed(embedsong1);
134 }
135 var embedsong2 = new Discord.RichEmbed()
136 .setTitle(`${serverQueue.songs[0].title}`)
137 .setThumbnail(serverQueue.songs[0].thumbnail)
138 .setDescription(`
139Von: ${serverQueue.songs[0].channel}
140Dauer: ${serverQueue.songs[0].duration}
141Link: ${serverQueue.songs[0].url}
142`)
143 .setColor(['#f9fcfc'])
144 return msg.channel.sendEmbed(embedsong2);
145 }
146 else if(msg.content.startsWith(`${PREFIX}volume`)){
147 if(!serverQueue){
148 var embedvolume1 = new Discord.RichEmbed()
149 .setTitle(`It does nothing at the moment!`)
150 .setColor(['#f9fcfc'])
151 return msg.channel.sendEmbed(embedvolume1);}
152 if(!args[1]){
153 var embedvolume2 = new Discord.RichEmbed()
154 .setTitle(`The current volume is: ${serverQueue.volume}`)
155 .setColor(['#f9fcfc'])
156 return msg.channel.sendEmbed(embedvolume2);
157 }
158
159 if(args[1]>0){
160 serverQueue.volume = args[1];
161 serverQueue.connection.dispatcher.setVolume(args[1] / 2000);
162 serverQueue.mute = false;
163 var embedvolume3 = new Discord.RichEmbed()
164 .setTitle(`The volume is on ${args[1]} set`)
165 .setColor(['#f9fcfc'])
166 return msg.channel.sendEmbed(embedvolume3);
167 } else{
168 var embedvolume4 = new Discord.RichEmbed()
169 .setTitle(`Please enter a number >0 on!`)
170 .setColor(['#f9fcfc'])
171 return msg.channel.sendEmbed(embedvolume4);
172 }
173 }
174 else if(msg.content.startsWith(`${PREFIX}queue`)){
175 if(!serverQueue){
176 var embedqueue1 = new Discord.RichEmbed()
177 .setTitle(`It does nothing at the moment!`)
178 .setColor(['#f9fcfc'])
179 return msg.channel.sendEmbed(embedqueue1);
180 }
181 var embedqueue2 = new Discord.RichEmbed()
182 .setTitle(`Song Queue`)
183 .setDescription(`
184${serverQueue.songs.map(song => `- ${song.title}`).join('\n')}
185
186Playing: ${serverQueue.songs[0].title}`)
187 .setColor(['#f9fcfc'])
188 return msg.channel.sendEmbed(embedqueue2);
189 }
190 else if(msg.content.startsWith(`${PREFIX}pause`)){
191 if(serverQueue && serverQueue.playing) {
192 serverQueue.playing = false;
193 serverQueue.connection.dispatcher.pause();
194 var embedpause1 = new Discord.RichEmbed()
195 .setTitle(`The song is stopped!`)
196 .setColor(['#f9fcfc'])
197 return msg.channel.sendEmbed(embedpause1);
198 }
199 var embedpause2 = new Discord.RichEmbed()
200 .setTitle(`It does nothing at the moment!`)
201 .setColor(['#f9fcfc'])
202 return msg.channel.sendEmbed(embedpause2);
203 }
204 else if(msg.content.startsWith(`${PREFIX}resume`)){
205 if(serverQueue && !serverQueue.playing){
206 serverQueue.playing = true;
207 serverQueue.connection.dispatcher.resume();
208 var embedresume1 = new Discord.RichEmbed()
209 .setTitle(`The song keeps playing on!`)
210 .setColor(['#f9fcfc'])
211 return msg.channel.sendEmbed(embedresume1);
212 }
213 var embedresume2 = new Discord.RichEmbed()
214 .setTitle(`It does nothing at the moment!`)
215 .setColor(['#f9fcfc'])
216 return msg.channel.sendEmbed(embedresume2);
217 }
218 else if(msg.content.startsWith(`${PREFIX}mutebot`)){
219 if(!serverQueue){
220 var embedmute1 = new Discord.RichEmbed()
221 .setTitle(`It does nothing at the moment!`)
222 .setColor(['#f9fcfc'])
223 return msg.channel.sendEmbed(embedmute1);
224 }
225 if(serverQueue.mute){
226 var embedmute2 = new Discord.RichEmbed()
227 .setTitle(`The music Bot is already muted!`)
228 .setColor(['#f9fcfc'])
229 return msg.channel.sendEmbed(embedmute2);
230 }
231 else{
232 serverQueue.mute = true;
233 serverQueue.connection.dispatcher.setVolume(0 / 2000);
234 var embedmute3 = new Discord.RichEmbed()
235 .setTitle(`The music Bot was muted!`)
236 .setColor(['#f9fcfc'])
237 return msg.channel.sendEmbed(embedmute3);
238 }
239 }
240 else if(msg.content.startsWith(`${PREFIX}unmutebot`)){
241 if(!serverQueue){
242 var embedunmute1 = new Discord.RichEmbed()
243 .setTitle(`It does nothing at the moment!`)
244 .setColor(['#f9fcfc'])
245 return msg.channel.sendEmbed(embedunmute1);
246 }
247 if(!serverQueue.mute){
248 var embedunmute2 = new Discord.RichEmbed()
249 .setTitle(`The Music Bot is already unmuted!`)
250 .setColor(['#f9fcfc'])
251 return msg.channel.sendEmbed(embedunmute2);
252 }
253 else{
254 serverQueue.mute = false;
255 serverQueue.connection.dispatcher.setVolume(serverQueue.volume / 2000);
256 var embedunmute3 = new Discord.RichEmbed()
257 .setTitle(`The Music Bot has been unmuted!`)
258 .setColor(['#f9fcfc'])
259 return msg.channel.sendEmbed(embedunmute3);
260 }
261 }
262 else if(msg.content.startsWith(`${PREFIX}helpmusic`)){
263 var embedhelp = new Discord.RichEmbed()
264 .setTitle(`marcos-MusicBot Commands`)
265 .addField("play", "Usage: `play`<song name> Description: To play Music.", false)
266 .addField("skip", "Usage: `skip` Description: To skip music.", false)
267 .addField("stop", "Usage: `stop` Description: To Bot disconnected.", false)
268 .addField("song", "Usage: `song` Description: To Check The Current playing song.", false)
269 .addField("queue", "Usage: `queue` Description: To Check The Queue List.", false)
270 .addField("volume", "Usage: `volume` Description: To See Volume.", false)
271 .addField("pause", "Usage: `pause` Description: To pause The Current Playing Song.", false)
272 .addField("resume", "Usage: `resume` Description: To Resume The Paused Song.", false)
273 .addField("mutebot", "Usage: `mutebot` Description: To mute Bot.", false)
274 .addField("unmutebot", "Usage: `unmutebot` Description: To unmute Bot.", false)
275 .setColor(['#f9fcfc'])
276 .setThumbnail(client.user.avatarURL)
277 return msg.channel.sendEmbed(embedhelp);
278 }
279 return undefined;
280});
281
282
283async function handleVideo(video, msg, voiceChannel, playlist=false){
284 const serverQueue = queue.get(msg.guild.id);
285
286 const song = {
287 id: video.id,
288 title: Util.escapeMarkdown(video.title),
289 url: `https://www.youtube.com/watch?v=${video.id}`,
290 thumbnail: video.thumbnails.default.url,
291 channel: video.channel.title,
292 duration: `${video.duration.hours}hrs : ${video.duration.minutes}min : ${video.duration.seconds}sec`
293 };
294 if(!serverQueue){
295 const queueConstruct = {
296 textChannel: msg.channel,
297 voiceChannel: voiceChannel,
298 connection: null,
299 songs: [],
300 volume: 2100,
301 mute: false,
302 playing: true
303 };
304 queue.set(msg.guild.id, queueConstruct);
305
306 queueConstruct.songs.push(song);
307
308 try{
309 var connection = await voiceChannel.join();
310 queueConstruct.connection = connection;
311 play(msg.guild, queueConstruct.songs[0]);
312 }catch(error){
313 console.log(error);
314 queue.delete(msg.guild.id);
315 var embedfunc1 = new Discord.RichEmbed()
316 .setTitle(`Bot could not VoiceChannel the join!`)
317 .setColor(['#f9fcfc'])
318 return msg.channel.sendEmbed(embedfunc1);
319 }
320 } else {
321 serverQueue.songs.push(song);
322 console.log(serverQueue.songs);
323 if(playlist) return undefined;
324 else{
325 var embedfunc2 = new Discord.RichEmbed()
326 .setTitle(`${song.title} queued!`)
327 .setColor(['#f9fcfc'])
328 return msg.channel.sendEmbed(embedfunc2);
329 }
330 }
331 return undefined;
332}
333
334function play(guild, song){
335 const serverQueue = queue.get(guild.id);
336
337 if(!song){
338 serverQueue.voiceChannel.leave();
339 queue.delete(guild.id);
340 return;
341 }
342 console.log(serverQueue.songs);
343
344 const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
345 .on('end', reason => {
346 if(reason === 'Stream is not generating quickly enough.') console.log('Song ended');
347 else console.log(reason);
348 serverQueue.songs.shift();
349 setTimeout(() => {
350 play(guild, serverQueue.songs[0]);
351 }, 250);
352 })
353 .on('error', error => console.log(error));
354
355 dispatcher.setVolume(serverQueue.volume / 2000);
356
357 var messagefunction1 = new Discord.RichEmbed()
358 .setTitle(`Playing ? ${song.title} -now`)
359 .setColor(['#f9fcfc'])
360 return serverQueue.textChannel.sendEmbed(messagefunction1);
361}
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378let sfa = JSON.parse(fs.readFileSync('./sfa.json', 'utf8')); // الملف الي بتحط به الحسابات الفل داتا
379let nfa = JSON.parse(fs.readFileSync('./nfa.json', 'utf8')); // الملف الي بتحط به الحسابات العاديه
380let SFAP = 10;/*سعر الحساب الواحد الفل داتا*/let NFAP = 12;/*سعر الحساب الواحد العادي*/let URID = '523816752396632065'//مين بيتحوله الكريديت// ahmeD_Hossam
381client.on('message',async message => {// ahmeD_Hossam
382if(message == prefix+'stock') {let ahmed = 0;let hossam = 0;// ahmeD_Hossam
383 sfa.forEach(acc =>{if(!acc.email) return;ahmed++;});// ahmeD_Hossam
384 nfa.forEach(acc =>{if(!acc.email) return;hossam++;});// ahmeD_Hossam
385 message.channel.send(new Discord.RichEmbed().setAuthor('✅ متجر الحسابات')// ahmeD_Hossam
386 .addField('SFA [فل داتا]:',`${ahmed} Account(s)`,true) .addField('NFA [عادي]:',`${hossam} Account(s)`,true).setColor('GREEN')// ahmeD_Hossam
387.addField('معلومه:',`[SFA] => بمعني فل داتا - يمكن تغير الاسم والرمز والسكن فقط
388[NFA] => يعني حسابات عاديه - لا يمكن تغير اي شئ فقط اللعب بها`)// ahmeD_Hossam
389.addField('الاسعار:',`[1xSFA] => ${SFAP} Credits ProBot\n[1xNFA] => ${NFAP} Credits ProBot`)// ahmeD_Hossam
390.setFooter(`${prefix}buy [SFA/NFA] [الحسابات لا يوجد عليها ضمان | لشراء حساب الرجاء كتابه الامر التالي [الكميه`) )}// ahmeD_Hossam
391if(message.content.startsWith(prefix+'buy')){// ahmeD_Hossam
392let cmd = message.content.split(" ")[1];// ahmeD_Hossam
393let args = message.content.split(" ")[2];// ahmeD_Hossam
394if(!cmd || !args || isNaN(args)) return message.channel.send(`**USE: ${prefix}buy [SFA/NFA] [الكميه]**`);// ahmeD_Hossam
395if(cmd == 'SFA') {// ahmeD_Hossam
396message.author.send('✅ Nothing.. Just Check If Your DM open or no').then(()=>{// ahmeD_Hossam
397let P = Math.floor(args*(SFAP))// ahmeD_Hossam
398message.channel.send(new Discord.RichEmbed().setAuthor(message.author.tag,message.author.avatarURL).setColor('GREEN')// ahmeD_Hossam
399.setDescription(`**اكتب الامر التالي لأكمال عمليه الشراء
400\`#credits <@${URID}> ${P}\`
401لديك 3 دقائق قبل الالغاء.**`));// ahmeD_Hossam
402let P2 = Math.floor(P-(P*(5/100)));// ahmeD_Hossam
403let filter = response => response.author.id == "282859044593598464" && response.mentions._content.includes(`:moneybag: | ${message.author.username}, has transferred \`$${P2}\` to <@${URID}>`);// ahmeD_Hossam// ahmeD_Hossam
404message.channel.awaitMessages(filter, { maxMatches: 1, time: 240000, errors: ['time'] })// ahmeD_Hossam
405.then( collected =>{// ahmeD_Hossam
406let C = 0;let Accs = [];// ahmeD_Hossam
407sfa.forEach(acc =>{if(!acc.email) return;if(C == args)return;;Accs.push(`Email: ${acc.email} | pass: ${acc.pass}`);C++;// ahmeD_Hossam// ahmeD_Hossam
408delete acc.email;delete acc.pass;// ahmeD_Hossam// ahmeD_Hossam// ahmeD_Hossam// ahmeD_Hossam// ahmeD_Hossam// ahmeD_Hossam// ahmeD_Hossam
409fs.writeFile("./sfa.json", JSON.stringify(sfa), (err) => {if (err) console.error(err)})// ahmeD_Hossam// ahmeD_Hossam// ahmeD_Hossam
410});message.channel.send('**Done,,\nNow Check Your DM**!')
411message.author.send(`Your Accs :)\`\`\`json\n${Accs.join("\n")}\n\`\`\`سيتم خذف الرساله بعد 5 دقائق !`).then(M =>M.delete(5*60*1000))
412});}).catch(err=>{return message.channel.send('**:x: Please Open Your DM**!')}) }
413if(cmd == 'NFA') {
414 message.author.send('✅ Nothing.. Just Check If Your DM open or no').then(()=>{
415 let P = Math.floor(args*(NFAP))
416 message.channel.send(new Discord.RichEmbed().setAuthor(message.author.tag,message.author.avatarURL).setColor('GREEN')
417 .setDescription(`**اكتب الامر التالي لأكمال عمليه الشراء
418 \`#credits <@${URID}> ${P}\`
419 لديك 3 دقائق قبل الالغاء.**`));
420 let P2 = Math.floor(P-(P*(5/100)));
421 let filter = response => response.author.id == "282859044593598464" && response.mentions._content.includes(`:moneybag: | ${message.author.username}, has transferred \`$${P2}\` to <@${URID}>`);
422 message.channel.awaitMessages(filter, { maxMatches: 1, time: 240000, errors: ['time'] })
423 .then( collected =>{
424 let C = 0;let Accs = [];
425 nfa.forEach(acc =>{if(!acc.email) return;if(C == args)return;;Accs.push(`Email: ${acc.email} | pass: ${acc.pass}`);C++;
426 delete acc.email;delete acc.pass;
427 fs.writeFile("./nfa.json", JSON.stringify(nfa), (err) => {if (err) console.error(err)})
428 });message.channel.send('**Done,,\nNow Check Your DM**!')
429 message.author.send(`Your Accs :)\`\`\`json\n${Accs.join("\n")}\n\`\`\`سيتم خذف الرساله بعد 5 دقائق !`).then(M =>M.delete(5*60*1000))
430 });}).catch(err=>{return message.channel.send('**:x: Please Open Your DM**!')}) } }
431})
432
433
434
435
436
437
438
439var timess = require("./vip-time.json")
440client.on('message', message => {
441if(message.content === prefix + "vip") {
442 if (!message.member.hasPermission('ADMINISTRATOR')) return;
443let time = 260000;
444let last = timess[client.user.id]
445if (last !== null && time - (Date.now() - last) > 0) {
446let times = (time - (Date.now() - last));
447let embed = new Discord.RichEmbed()
448 .setColor("#00FF00")
449.setDescription(`Purchased By : <@387107653148475393>`)
450.setTitle(`Number Bot : 1
451Time left: ${ms(times, {verbose:true})}`);
452message.channel.send(embed)
453} else {
454timess[client.user.id] = Date.now();
455fs.writeFile("./vip-time.json", JSON.stringify(timess), function(e) {
456if (e) throw e;
457})
458}
459}
460});
461
462
463
464
465
466 const prefix = "-"
467
468client.on('warn', console.warn);
469
470client.on('error', console.error);
471
472client.on('ready', () => console.log('Yo this ready!'));
473
474client.on('disconnect', () => console.log('I just disconnected, making sure you know, I will reconnect now...'));
475
476client.on('reconnecting', () => console.log('I am reconnecting now!'));
477
478client.on('message', async msg => { // eslint-disable-line
479 if (msg.author.bot) return undefined;
480 if (!msg.content.startsWith(PREFIX)) return undefined;
481
482 const args = msg.content.split(' ');
483 const searchString = args.slice(1).join(' ');
484 const url = args[1] ? args[1].replace(/<(.+)>/g, '$1') : '';
485 const serverQueue = queue.get(msg.guild.id);
486
487 let command = msg.content.toLowerCase().split(' ')[0];
488 command = command.slice(PREFIX.length)
489
490 if (command === 'play') {
491 const voiceChannel = msg.member.voiceChannel;
492 if (!voiceChannel) return msg.channel.send('? - يجب تواجدك في روم صوتي');
493 const permissions = voiceChannel.permissionsFor(msg.client.user);
494 if (!permissions.has('CONNECT')) {
495 return msg.channel.send('⚠️ - لا أستطيع الدخول إلى الروم الصوتي الذي تتواجد به ، تاكد من الاذونات الخاصة بي');
496 }
497 if (!permissions.has('SPEAK')) {
498 return msg.channel.send('⚠️ لا استطيع التحدث في هذا الروم الصوتي - تاكد من الاذونات الخاصة بي');
499 }
500
501 if (url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)) {
502 const playlist = await youtube.getPlaylist(url);
503 const videos = await playlist.getVideos();
504 for (const video of Object.values(videos)) {
505 const video2 = await youtube.getVideoByID(video.id); // eslint-disable-line no-await-in-loop
506 await handleVideo(video2, msg, voiceChannel, true); // eslint-disable-line no-await-in-loop
507 }
508 return msg.channel.send(`✅ Playlist: **${playlist.title}** تمت إضافته للائحة الإنتظار!`);
509 } else {
510 try {
511 var video = await youtube.getVideo(url);
512 } catch (error) {
513 try {
514 var videos = await youtube.searchVideos(searchString, 10);
515 let index = 0;
516 msg.channel.send(`
517__**Song selection:**__
518${videos.map(video2 => `**${++index} -** ${video2.title}`).join('\n')}
519Please provide a value to select one of the search results ranging from 1-10.
520 `);
521 // eslint-disable-next-line max-depth
522 try {
523 var response = await msg.channel.awaitMessages(msg2 => msg2.content > 0 && msg2.content < 11, {
524 maxMatches: 1,
525 time: 10000,
526 errors: ['time']
527 });
528 } catch (err) {
529 console.error(err);
530 return msg.channel.send('No or invalid value entered, cancelling video selection.');
531 }
532 const videoIndex = parseInt(response.first().content);
533 var video = await youtube.getVideoByID(videos[videoIndex - 1].id);
534 } catch (err) {
535 console.error(err);
536 return msg.channel.send('**? - لم أستطع إيجاد المقطع المطلوب.');
537 }
538 }
539 return handleVideo(video, msg, voiceChannel);
540 }
541 } else if (command === 'skip') {
542 if (!msg.member.voiceChannel) return msg.channel.send('You are not in a voice channel!');
543 if (!serverQueue) return msg.channel.send('There is nothing playing that I could skip for you.');
544 serverQueue.connection.dispatcher.end('Skip command has been used!');
545 return undefined;
546 } else if (command === 'stop') {
547 if (!msg.member.voiceChannel) return msg.channel.send('You are not in a voice channel!');
548 if (!serverQueue) return msg.channel.send('There is nothing playing that I could stop for you.');
549 serverQueue.songs = [];
550 serverQueue.connection.dispatcher.end('Stop command has been used!');
551 return undefined;
552 } else if (command === 'volume') {
553 if (!msg.member.voiceChannel) return msg.channel.send('You are not in a voice channel!');
554 if (!serverQueue) return msg.channel.send('There is nothing playing.');
555 if (!args[1]) return msg.channel.send(`? - مستوي الصوت الحالي : **${serverQueue.volume}**`);
556 serverQueue.volume = args[1];
557 serverQueue.connection.dispatcher.setVolumeLogarithmic(args[1] / 5);
558 return msg.channel.send(`I set the volume to: **${args[1]}**`);
559 } else if (command === 'np') {
560 if (!serverQueue) return msg.channel.send('?? لايوجد شئ شغال.');
561 return msg.channel.send(`? يتم تشغيل: **${serverQueue.songs[0].title}**`);
562 } else if (command === 'queue') {
563 if (!serverQueue) return msg.channel.send('?? - لا يوجد شئ شغال');
564 return msg.channel.send(`
565__**Song queue:**__
566${serverQueue.songs.map(song => `**-** ${song.title}`).join('\n')}
567**Now playing:** ${serverQueue.songs[0].title}
568 `);
569 } else if (command === 'pause') {
570 if (serverQueue && serverQueue.playing) {
571 serverQueue.playing = false;
572 serverQueue.connection.dispatcher.pause();
573 return msg.channel.send('⏸ تم إيقاف المقطع!');
574 }
575 return msg.channel.send('?? لايوجد شئ شغال.');
576 } else if (command === 'resume') {
577 if (serverQueue && !serverQueue.playing) {
578 serverQueue.playing = true;
579 serverQueue.connection.dispatcher.resume();
580 return msg.channel.send('▶ تم استكمال المقطع الصوتي!');
581 }
582 return msg.channel.send('?? لايوجد شئ شغال.');
583 }
584
585 return undefined;
586});
587
588async function handleVideo(video, msg, voiceChannel, playlist = false) {
589 const serverQueue = queue.get(msg.guild.id);
590 console.log(video);
591 const song = {
592 id: video.id,
593 title: Util.escapeMarkdown(video.title),
594 url: `https://www.youtube.com/watch?v=${video.id}`
595 };
596 if (!serverQueue) {
597 const queueConstruct = {
598 textChannel: msg.channel,
599 voiceChannel: voiceChannel,
600 connection: null,
601 songs: [],
602 volume: 5,
603 playing: true
604 };
605 queue.set(msg.guild.id, queueConstruct);
606
607 queueConstruct.songs.push(song);
608
609 try {
610 var connection = await voiceChannel.join();
611 queueConstruct.connection = connection;
612 play(msg.guild, queueConstruct.songs[0]);
613 } catch (error) {
614 console.error(`I could not join the voice channel: ${error}`);
615 queue.delete(msg.guild.id);
616 return msg.channel.send(`I could not join the voice channel: ${error}`);
617 }
618 } else {
619 serverQueue.songs.push(song);
620 console.log(serverQueue.songs);
621 if (playlist) return undefined;
622 else return msg.channel.send(`✅ **${song.title}** تمت إضافته إلى لائحة الانتظار!`);
623 }
624 return undefined;
625}
626
627function play(guild, song) {
628 const serverQueue = queue.get(guild.id);
629
630 if (!song) {
631 serverQueue.voiceChannel.leave();
632 queue.delete(guild.id);
633 return;
634 }
635 console.log(serverQueue.songs);
636
637 const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
638 .on('end', reason => {
639 if (reason === 'Stream is not generating quickly enough.') console.log('Song ended.');
640 else console.log(reason);
641 serverQueue.songs.shift();
642 play(guild, serverQueue.songs[0]);
643 })
644 .on('error', error => console.error(error));
645 dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
646
647 serverQueue.textChannel.send(`? جاري تشغيل: **${song.title}**`);
648}
649
650
651
652
653
654
655
656
657
658
659
660
661/*
662// By : ! Abdu. (228401267263668224) (Codes)
663
664// Packages:
665const { User, MessageMentions } = require('discord.js') // Disocrd Package Classes
666const Jimp = require('jimp'); // Jimp Package to get User's Avatar
667const SQLite = require('sqlite'); // SQLite Package to read & write to sql files and databases
668const path = require('path'); // Path Package to get paths easily
669
670// Bot Configs:
671const config = require(path.join(__dirname, 'config.json')); // Bot Config
672const {
673 token,
674 prefix,
675 ids
676} = config;
677// Clients:
678Client.commands = new Discord.Collection() // Discord Collection For Commands
679Client.aliases = new Discord.Collection() // Discord Collection For Aliases
680
681// SQLite And Databases:
682SQLite.open(path.join(__dirname, 'profile.sql')) // Read SQL file
683.then(() => {
684 console.log('Opened')
685 SQLite.run(`CREATE TABLE IF NOT EXISTS profileSystem (id VARCHAR(30), credits BIGINT, lastDaily BIGINT, xp BIGINT, level BIGINT, rep BIGINT, lastRep BIGINT, info TEXT, inventory JSON, profileData JSON)`)
686})
687.catch(err => console.error(err))
688
689// Commands Here
690let cmds = {
691 profile: { cmd: 'بروفايل', a: ['بروفايلي'] },
692 setinfo: { cmd: 'معلوماتي', a: ['معلوماتي تعديل'] },
693 rep: { cmd: 'لايك', a: ['اعجاب'] },
694 credits: { cmd: 'فلوسي', a: ['رصيدي'] },
695 daily: { cmd: 'هدية', a: ['هديه'] },
696 transfer: { cmd: 'تحويل' },
697 add: { cmd: 'فلوس' },
698 buy: { cmd: 'شراء' },
699 set: { cmd: 'خلفية', a: ['خلفيه'] },
700 preview: { cmd: 'تجربة', a: ['تجربه'] },
701 mywalls: { cmd: 'خلفياتي' }
702}
703
704// Register Commands
705Object.keys(cmds).forEach(key => {
706var value = cmds[key];
707 var command = value.cmd;
708 Client.commands.set(command, command);
709
710 if(value.a) {
711 value.a.forEach(alias => {
712 Client.aliases.set(alias, command)
713 })
714 }
715})
716
717// Functions
718let funcs = {
719
720 generateInt: (low, high) => {
721 return Math.floor(Math.random() * (high - low + 1) + low);
722 },
723 getLevelFromExp: (exp) => {
724 let level = 0;
725
726 while (exp >= funcs.getLevelExp(level)) {
727 exp -= funcs.getLevelExp(level);
728 level++;
729 }
730
731 return level;
732 },
733 getLevelExp: (level) => {
734 return 5 * (Math.pow(level, 2)) + 50 * level + 100;
735 }
736
737}
738
739// Code Begin Here ..
740
741client.on('ready', () => { // When Bot is ready
742 console.log(`Bot is launched.`);
743})
744
745client.on('message', async msg => { // When Bot is recived message
746 if(msg.author.bot) return; // If Message author is bot dont reply to it .
747
748 SQLite.get(`SELECT * FROM profileSystem WHERE id = '${msg.author.id}'`).then(res => {
749
750 var s;
751
752 let xp = funcs.generateInt(1, 5); // Generate XP
753
754 if(!res) s = `INSERT INTO profileSystem VALUES ('${msg.author.id}', 200, 0, ${xp}, 0, 0, 0, "Type ${prefix}setinfo to set info", '{}', '{"wallSrc": "/walls/p2.png"}')`
755
756 if(res) {
757
758 xp = res.xp + xp;
759
760 console.log(xp);
761
762 let level = funcs.getLevelFromExp(xp);
763 console.log(level);
764 let lvl = res.level;
765
766 if(res.level != level) {
767 lvl++;
768 msg.channel.send('Level UP!, ' + msg.author + ' just reached level ' + level)
769 }
770
771 s = `UPDATE profileSystem SET xp = ${xp}, level = ${lvl} WHERE id = '${msg.author.id}'`
772
773 }
774
775 SQLite.run(s);
776
777 }).catch(err => console.error(err))
778
779 const prefixMention = new RegExp(`^<@!?${client.user.id}>( |)$`);
780 if (msg.content.match(prefixMention)) {
781 return msg.reply(`My prefix is \`${prefix}\``);
782 }
783
784 if(!msg.content.startsWith(prefix)) return undefined;
785
786 let args = msg.content.slice(prefix.length).trim().split(/ +/g);
787 let command = args.shift().toLowerCase();
788
789 let cmd = Client.commands.get(command) || Client.commands.get(Client.aliases.get(command))
790
791 if(msg.content.startsWith(prefix + 'test')) {
792
793 let res = await SQLite.get(`SELECT * FROM profileSystem WHERE id = '${msg.author.id}'`)
794
795 if(args[0] == 'delete') {
796 SQLite.run(`DELETE * FROM profileSystem`)
797 msg.channel.send('Deleted !')
798 } else if(args[0] == 'reps') {
799
800 msg.channel.send(`Reps: ${res.rep}`)
801
802 } else {
803
804 msg.channel.send(`XP:${res.xp}, Level:${res.level}`)
805 }
806 }
807
808 if(cmd == 'فلوسي') {
809
810 let user = msg.mentions.users.first() || msg.author;
811
812 let res = await SQLite.get(`SELECT * FROM profileSystem WHERE id = '${user.id}'`)
813 if(!res) SQLite.run(`INSERT INTO profileSystem VALUES ('${msg.author.id}', 200, 0, ${xp}, 0, 0, 0, "Type ${prefix}setinfo to set info", "{}", "{wallSrc: '/walls/p2.png'}"`)
814
815 let credits;
816
817 if(!res) credits = 0;
818 else credits = res.credits;
819
820 if(!msg.mentions.users.first()) {
821
822 msg.channel.send(`**Your ? balance is: **\`$${credits}\``)
823
824 } else {
825
826 if(msg.mentions.users.first().bot) return msg.channel.send('The Bots doesn\'t have credits.')
827
828
829 msg.channel.send(`**${user.tag} ? balance is: **\`$${credits}\``)
830
831 }
832
833 } else if(cmd == 'هدية') {
834
835 let daily = 86400000;
836 let amount = funcs.generateInt(100, 300)
837
838 let res = await SQLite.get(`SELECT * FROM profileSystem WHERE id = '${msg.author.id}'`)
839 if(!res) SQLite.run(`INSERT INTO profileSystem VALUES ('${msg.author.id}', 200, 0, ${xp}, 0, 0, 0, "Type ${prefix}setinfo to set info", "{}", "{wallSrc: '/walls/p2.png'}"`)
840
841 let curDaily = res.lastDaily;
842
843 let credits = res.credits;
844
845 if(curDaily != null && daily - (Date.now() - curDaily) > 0) {
846
847 let timeObj = ms(daily - (Date.now() - curDaily));
848
849 msg.channel.send(`You already collected your daily, try again after ${timeObj.hours} Hours, ${timeObj.minutes} Minutes and ${timeObj.seconds} Seconds.`)
850
851 } else {
852
853 msg.channel.send(`You have successfully collected your daily reward: \`${amount}\``);
854
855 SQLite.run(`UPDATE profileSystem SET credits = ${credits + amount}, lastDaily = ${Date.now()} WHERE id = '${msg.author.id}'`);
856
857 }
858
859 } else if(cmd == 'لايك') {
860
861 let rep = 86400000;
862
863 let men = msg.mentions.users.first();
864
865 if(!men) return msg.channel.send('Please mention the user you want to give him rep.');
866
867 if(men.id === msg.author.id) return msg.channel.send('You can\'t give yourself.');
868
869 if(men.bot) return msg.channel.send('You can\'t give bots rep, but you can give me a rep.')
870
871 let resOfMen = await SQLite.get(`SELECT * FROM profileSystem WHERE id = '${men.id}'`);
872 let resOfAuthor = await SQLite.get(`SELECT * FROM profileSystem WHERE id = '${msg.author.id}'`)
873 if(!resOfMen) SQLite.run(`INSERT INTO profileSystem VALUES ('${men.id}', 200, 0, 0, 0, 0, 0, "Type ${prefix}setinfo to set info", "")`)
874 if(!resOfAuthor) SQLite.run(`INSERT INTO profileSystem VALUES ('${msg.author.id}', 200, 0, ${xp}, 0, 0, 0, "Type ${prefix}setinfo to set info", "{}", "{wallSrc: '/walls/p2.png'}"`)
875
876 let curRep = resOfAuthor.lastRep;
877 msg.channel.send(curRep);
878 msg.channel.send("==");
879 msg.channel.send(resOfAuthor);
880 if(curRep != null && rep - (Date.now() - curRep) > 0) {
881
882 let timeObj = ms(rep - (Date.now() - curRep));
883
884 msg.channel.send(`You already gived your reputation point to someone, try again after ${timeObj.hours} Hours, ${timeObj.minutes} Minutes and ${timeObj.seconds} Seconds.`)
885
886 } else {
887
888 msg.channel.send(`You have successfully gived ${men} a reputation point!`)
889
890 SQLite.run(`UPDATE profileSystem SET lastRep = ${Date.now()} WHERE id = '${msg.author.id}'`)
891 SQLite.run(`UPDATE profileSystem SET rep = ${resOfMen.rep + 1} WHERE id = '${men.id}'`)
892
893 }
894
895 } else if(cmd == 'تحويل') {
896
897 let men = msg.mentions.users.first();
898
899 if(!men) return msg.channel.send('Please mention the user you want to transfer credits to him.');
900
901 if(men.id === msg.author.id) return msg.channel.send('You can\'t transfer to yourself.');
902
903 if(men.bot && men.id !== Client.user.id) return msg.channel.send('You can\'t transfer credits to bots.')
904
905 let resOfMen = await SQLite.get(`SELECT * FROM profileSystem WHERE id = '${men.id}'`);
906 let resOfAuthor = await SQLite.get(`SELECT * FROM profileSystem WHERE id = '${msg.author.id}'`)
907 if(!resOfMen) SQLite.run(`INSERT INTO profileSystem VALUES ('${men.id}', 200, 0, 0, 0, 0, 0, "Type ${prefix}setinfo to set info", "")`)
908 if(!resOfAuthor) SQLite.run(`INSERT INTO profileSystem VALUES ('${msg.author.id}', 200, 0, ${xp}, 0, 0, 0, "Type ${prefix}setinfo to set info", "{}", "{wallSrc: '/walls/p2.png'}"`)
909
910 let creditsOfMen = resOfMen.credits;
911 let creditsOfAuthor = resOfAuthor.credits;
912
913 if(!args[1] || isNaN(args[1])) return msg.channel.send('Please input number of credits to transfer it.');
914
915 if(parseInt(args[1]) > creditsOfAuthor) return msg.channel.send('You don\'t have enough credits to do this.');
916
917 let newAuthorCredits = (creditsOfAuthor - parseInt(args[1]));
918 let newMenCredits = (creditsOfMen + parseInt(args[1]));
919
920 SQLite.run(`UPDATE profileSystem SET credits = ${newAuthorCredits} WHERE id = '${msg.author.id}'`);
921 SQLite.run(`UPDATE profileSystem SET credits = ${newMenCredits} WHERE id = '${men.id}'`);
922
923
924
925
926
927 msg.channel.send(`${msg.author} has tranfered \`$${args[1]}\` to ${men}.`)
928
929
930
931 var mentioned = msg.mentions.users.first() || msg.guild.members.get(args[0]);
932mentioned.send(`:atm: | Transfer Receipt
933\`\`\`You have received $ ${args[1]} from user ${msg.author.username} (ID: ${msg.author.id}) Server ${msg.guild.name}\`\`\``);
934
935
936
937 } else if(cmd == 'فلوس') {
938
939 if(!ids.includes(msg.author.id)) return;
940
941 let men = msg.mentions.users.first() || msg.author;
942
943 if(men.bot) return msg.channel.send('Bots dosen\'t have credits.');
944
945 let res = await SQLite.get(`SELECT * FROM profileSystem WHERE id = '${men.id}'`);
946 if(!res) SQLite.run(`INSERT INTO profileSystem VALUES ('${men.id}', 200, 0, 0, 0, 0, 0, "Type ${prefix}setinfo to set info", "")`)
947
948 let resu;
949
950 if(men.id === msg.author.id && !msg.mentions.users.first()) resu = args[0];
951 else resu = args[1];
952
953 if(!resu || isNaN(resu)) return msg.channel.send('Please input number to add it.');
954
955 SQLite.run(`UPDATE profileSystem SET credits = ${res.credits + parseInt(resu)} WHERE id = '${men.id}'`)
956
957 msg.channel.send('Added!')
958
959 } else if(cmd == 'معلوماتي') {
960
961 let res = await SQLite.get(`SELECT * FROM profileSystem WHERE id = '${msg.author.id}'`);
962 if(!res) SQLite.run(`INSERT INTO profileSystem VALUES ('${msg.author.id}', 200, 0, ${xp}, 0, 0, 0, "Type ${prefix}setinfo to set info", "{}", "{wallSrc: '/walls/p2.png'}"`)
963
964 if(!args[0]) return msg.channel.send('Please input info to set it.');
965
966 SQLite.run(`UPDATE profileSystem SET info = "${args.join(' ')}" WHERE id = '${msg.author.id}'`)
967
968 msg.channel.send('Your info set to: **' + args.join(' ') + '**')
969
970 } else if(cmd == 'شراء') {
971
972 let res = await SQLite.get(`SELECT * FROM profileSystem WHERE id = '${msg.author.id}'`);
973 if(!res) SQLite.run(`INSERT INTO profileSystem VALUES ('${msg.author.id}', 200, 0, ${xp}, 0, 0, 0, "Type ${prefix}setinfo to set info", "{}", "{wallSrc: '/walls/p2.png'}"`)
974
975 let hisWalls = res.inventory;
976
977 let wallsShop = config.wallpapers;
978
979 let credits = res.credits;
980
981 if(!args[0] || isNaN(args[0])) return msg.channel.send('Please Select Wallpaper Number.');
982
983 let json = JSON.parse(hisWalls);
984
985 if(!json.walls) json = {
986 walls: {}
987 };
988
989 if(!wallsShop[args[0]]) return msg.channel.send('There is no wallpaper with this number.')
990
991 if(json.walls[args[0]] == wallsShop[args[0]]) return msg.channel.send('You already bought this wallpaper.');
992
993 if(credits < wallsShop[args[0]].price) return msg.channel.send('You don\'t have enough credits to buy this wallpaper');
994
995 json.walls[args[0]] = wallsShop[args[0]];
996
997 let updatedJson = JSON.stringify(json);
998
999 SQLite.run(`UPDATE profileSystem SET inventory = json('${updatedJson}'), credits = ${credits - wallsShop[args[0]].price} WHERE id = '${msg.author.id}'`)
1000
1001 msg.channel.send(`You have successfully purchased wallpaper No.${args[0]} With Price: \`$${wallsShop[args[0]].price}\``)
1002
1003 } else if(cmd == 'خلفية') {
1004
1005 let res = await SQLite.get(`SELECT * FROM profileSystem WHERE id = '${msg.author.id}'`)
1006 if(!res) SQLite.run(`INSERT INTO profileSystem VALUES ('${msg.author.id}', 200, 0, ${xp}, 0, 0, 0, "Type ${prefix}setinfo to set info", "{}", "{wallSrc: '/walls/p2.png'}"`)
1007
1008 let hisWalls = res.inventory;
1009
1010 if(!args[0] || isNaN(args[0])) return msg.channel.send('Please Select Wallpaper Number.');
1011
1012 let json = JSON.parse(hisWalls)
1013
1014 if(!json.walls[args[0]]) return msg.channel.send('You don\'t have this wallpaper in your inventory.');
1015
1016 let proData = res.profileData;
1017
1018 let data = JSON.parse(proData);
1019
1020 data.wallSrc = json.walls[args[0]].src;
1021
1022 SQLite.run(`UPDATE profileSystem SET profileData = json('${JSON.stringify(data)}') WHERE id = '${msg.author.id}'`);
1023
1024 msg.channel.send(`Your profile image has been set.`);
1025
1026 } else if(cmd == 'تجربة') {
1027
1028 let wallpapers = config.wallpapers;
1029
1030 if(!args[0] || isNaN(args[0])) return msg.channel.send('Please Select Wallpaper Number.');
1031
1032 if(!wallpapers[args[0]]) return msg.channel.send('There is no wallpaper with this number.')
1033
1034 let Image = Canvas.Image,
1035 canvas = Canvas.createCanvas(300, 300),
1036 ctx = canvas.getContext('2d');
1037fs.readFile(__dirname + `/${wallpapers[args[0]].src}`, function (err, Background) {
1038 fs.readFile(__dirname + `/walls/p1.png`, function (err, Background) {
1039 if (err) return console.log(err);
1040 let BG = Canvas.Image;
1041 let ground = new Image;
1042 ground.src = Background;
1043 ctx.drawImage(ground, 0, 0, 297, 305);
1044});
1045 if (err) return console.log(err);
1046 let BG = Canvas.Image;
1047 let ground = new Image;
1048 ground.src = Background;
1049 ctx.drawImage(ground, 0, 0, 300, 305);
1050});
1051
1052 setTimeout(() => {
1053 msg.channel.send({file:canvas.toBuffer()})
1054}, 2000)
1055 } else if(cmd == 'خلفياتي') {
1056
1057 let res = await SQLite.get(`SELECT * FROM profileSystem WHERE id = '${msg.author.id}'`);
1058
1059 let data = JSON.parse(res.inventory);
1060
1061 if(!data.walls) return msg.channel.send('You don\'t have any wallpapers in your inventory');
1062
1063 let wallsArray = [];
1064
1065 for (const [key, value] of Object.entries(data.walls)) {
1066 console.log(`${key} ${JSON.stringify(value)}`);
1067
1068 wallsArray.push({number: key, s: value.src, p: value.price});
1069
1070 }
1071
1072 let embed = new Discord.RichEmbed()
1073 .setAuthor(`${msg.author.username}`, msg.author.displayAvatarURL)
1074 .setDescription(`Your Wallpapers:`)
1075 .setFooter(`Tip: To preview wallpaper try \`${prefix}تجربة\``)
1076
1077 for (var wall in wallsArray) {
1078 embed.addField(`Wallpaper No.${wallsArray[wall].number}`, `Price: ${wallsArray[wall].p}`, true)
1079 }
1080
1081 msg.channel.send(embed)
1082
1083 } else if(cmd == 'بروفايل') {
1084
1085 let getvalueof = msg.mentions.users.first() || msg.author;
1086
1087 let res = await SQLite.get(`SELECT * FROM profileSystem WHERE id = ${getvalueof.id}`)
1088
1089 if(!res) SQLite.run(`INSERT INTO profileSystem VALUES ('${msg.author.id}', 200, 0, ${xp}, 0, 0, 0, "Type ${prefix}setinfo to set info", "{}", "{wallSrc: '/walls/p2.png'}"`)
1090
1091
1092 let Image = Canvas.Image,
1093 canvas = Canvas.createCanvas(300, 300),
1094 ctx = canvas.getContext('2d');
1095fs.readFile(__dirname + `/${JSON.parse(res.profileData).wallSrc}`, function (err, Background) {
1096 fs.readFile(__dirname + `/walls/p1.png`, function (err, Background) {
1097 if (err) return console.log(err);
1098 let BG = Canvas.Image;
1099 let ground = new Image;
1100 ground.src = Background;
1101 ctx.drawImage(ground, 0, 0, 297, 305);
1102});
1103 if (err) return console.log(err);
1104 let BG = Canvas.Image;
1105 let ground = new Image;
1106 ground.src = Background;
1107 ctx.drawImage(ground, 0, 0, 300, 305);
1108});
1109
1110
1111let url = getvalueof.displayAvatarURL.endsWith(".webp") ? getvalueof.displayAvatarURL.slice(5, -20) + ".png" : getvalueof.displayAvatarURL;
1112Jimp.read(url, (err, ava) => {
1113 if (err) return console.log(err);
1114 ava.getBuffer(Jimp.MIME_PNG, async (err, buf) => {
1115 if (err) return console.log(err);
1116
1117
1118 //Avatar
1119 let Avatar = Canvas.Image;
1120 let ava = new Avatar;
1121 ava.src = buf;
1122 ctx.drawImage(ava, 8, 43, 80, 85); // احداثيات صورتك
1123
1124 //ur name
1125 ctx.font = 'bold 16px profile'; // حجم الخط و نوعه
1126 ctx.fontSize = '40px'; // عرض الخط
1127 ctx.fillStyle = "#FFFFFF"; // لون الخط
1128 ctx.textAlign = "left"; // محاذا ة النص
1129 ctx.fillText(`${getvalueof.username}`, 100, 125) // احداثيات اسمك
1130
1131 //bord
1132 let leaderboard = await SQLite.all(`SELECT * FROM profileSystem ORDER BY xp DESC, credits DESC`);
1133 ctx.font = "regular 12px profile" // نوع الخط وحجمه
1134 ctx.fontSize = '50px'; // عرض الخط
1135 ctx.fillStyle = "#FFFFFF" // لون الخط
1136 ctx.textAlign = "left"; // محاذا ة
1137 for(var i = 0;i<leaderboard.length;i++) {
1138 if(leaderboard[i].id == getvalueof.id) {
1139 ctx.fillText(`#${i+1}`, 173, 200)
1140 }
1141 }
1142
1143
1144 //credit
1145 ctx.font = "bold 10px profile" // نوع الخط وحجمه
1146 ctx.fontSize = '10px'; // عرض الخط
1147 ctx.fillStyle = '#FFFFFF' // لون الخط
1148 ctx.textAlign = "left"; // محاذا ة النص
1149 ctx.fillText(`$ ${res.credits}`, 156, 163) // احداثيات المصاري
1150
1151 //poits
1152 ctx.font = "bold 13px profile" // ن
1153 ctx.fontSize = '10px'; // عرض الخطوع الخط وحجمه
1154 ctx.fillStyle = "#FFFFFF" // لون الخط
1155 ctx.textAlign = "left"; // محاذا ة النص
1156 ctx.fillText(`${res.xp}`, 173, 182) // احداثيات النقاط
1157
1158 //Level
1159 ctx.font = "bold 27px profile" // نوع الخط و حجمه
1160 ctx.fontSize = '50px'; // عرض الخط
1161 ctx.fillStyle = "#FFFFFF" // لون الخط
1162 ctx.textAlign = "left"; // محاذا ة النص
1163 ctx.fillText(`${res.level}`, 30, 200) // احداثيات اللفل
1164
1165 //info
1166 ctx.font = "blod 13px profile" // ن
1167 ctx.fontSize = '10px'; // عرض الخطوع الخط وحجمه
1168 ctx.fillStyle = "#FFFFFF" // لون الخط
1169 ctx.textAlign = "left"; // محاذا ة النص
1170 ctx.fillText(`${res.info}`, 118, 40) // احداثيات النقاط
1171
1172 // REP
1173 ctx.font = "bold 27px profile";
1174 ctx.fontSize = "100px";
1175 ctx.fillStyle = "#FFFFFF";
1176 ctx.textAlign = "left";
1177 ctx.fillText(`+${res.rep}`, 18,270)
1178
1179msg.channel.send("**:white_check_mark: `Show Profile` ➤**" + `${msg.author}`, {
1180file: canvas.toBuffer()
1181})
1182})
1183})
1184
1185
1186 }
1187
1188});
1189*/
1190
1191
1192
1193
1194
1195/*
1196هذا كود ميوزك شغال في جلتش ميه ميه
1197بس في بكجات مهمه لازم ثتبتها عشان يشتغل
1198npm i simple-youtube-api
1199npm i ytdl-core
1200npm i ffmpeg
1201npm install discord.js node-opus
1202ذولا الاثنين اهم بكجات عشان يشتغل الميوزك وشكرآ
1203Alpha Codes ,
1204*/
1205
1206
1207
1208var servers = {};
1209client.on("message", async message => {
1210 var args = message.content.substring(prefix.length).split(" ");
1211 if (!message.content.startsWith(prefix)) return;
1212 var searchString = args.slice(1).join(' ');
1213 var url = args[1] ? args[1].replace(/<(.+)>/g, '$1') : '';
1214 var serverQueue = queue.get(message.guild.id);
1215 switch (args[0].toLowerCase()) {
1216 case "play":
1217 var voiceChannel = message.member.voiceChannel;
1218 if (!voiceChannel) return message.channel.send('I\'m sorry but you need to be in a voice channel to play music!');
1219 var permissions = voiceChannel.permissionsFor(message.client.user);
1220 if (!permissions.has('CONNECT')) {
1221 return message.channel.send('I cannot connect to your voice channel, make sure I have the proper permissions!');
1222 }
1223 if (!permissions.has('SPEAK')) {
1224 return message.channel.send('I cannot speak in this voice channel, make sure I have the proper permissions!');
1225 }
1226 if (url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)) {
1227 var playlist = await youtube.getPlaylist(url);
1228 var videos = await playlist.getVideos();
1229 for (const video of Object.values(videos)) {
1230 var video2 = await youtube.getVideoByID(video.id); // eslint-disable-line no-await-in-loop
1231 await handleVideo(video2, message, voiceChannel, true); // eslint-disable-line no-await-in-loop
1232 }
1233 return message.channel.send(`✅ Playlist: **${playlist.title}** has been added to the queue!`);
1234 } else {
1235 try {
1236 var video = await youtube.getVideo(url);
1237 } catch (error) {
1238 try {
1239 var videos = await youtube.searchVideos(searchString, 10);
1240 var index = 0;
1241 message.channel.send(`
1242__**Song selection:**__
1243${videos.map(video2 => `**${++index} -** ${video2.title}`).join('\n')}
1244Please provide a value to select one of the search results ranging from 1-10.
1245 `);
1246 // eslint-disable-next-line max-depth
1247 try {
1248 var response = await message.channel.awaitMessages(message2 => message2.content > 0 && message2.content < 11, {
1249 maxMatches: 1,
1250 time: 10000,
1251 errors: ['time']
1252 });
1253 } catch (err) {
1254 console.error(err);
1255 return message.channel.send('No or invalid value entered, cancelling video selection.');
1256 }
1257 var videoIndex = parseInt(response.first().content);
1258 var video = await youtube.getVideoByID(videos[videoIndex - 1].id);
1259 } catch (err) {
1260 console.error(err);
1261 return message.channel.send('? I could not obtain any search results.');
1262 }
1263 }
1264 return handleVideo(video, message, voiceChannel);
1265 }
1266 break;
1267 case "skip":
1268 if (!message.member.voiceChannel) return message.channel.send('You are not in a voice channel!');
1269 if (!serverQueue) return message.channel.send('There is nothing playing that I could skip for you.');
1270 serverQueue.connection.dispatcher.end('Skip command has been used!');
1271 return undefined;
1272 break;
1273 case "stop":
1274 if (!message.member.voiceChannel) return message.channel.send('You are not in a voice channel!');
1275 if (!serverQueue) return message.channel.send('There is nothing playing that I could stop for you.');
1276 serverQueue.songs = [];
1277 serverQueue.connection.dispatcher.end('Stop command has been used!');
1278 return undefined;
1279break;
1280 case "volume":
1281 if (!message.member.voiceChannel) return message.channel.send('You are not in a voice channel!');
1282 if (!serverQueue) return message.channel.send('There is nothing playing.');
1283 if (!args[1]) return message.channel.send(`The current volume is: **${serverQueue.volume}**`);
1284 serverQueue.volume = args[1];
1285 serverQueue.connection.dispatcher.setVolumeLogarithmic(args[1] / 5);
1286 return message.channel.send(`I set the volume to: **${args[1]}**`);
1287break;
1288 case "np":
1289 if (!serverQueue) return message.channel.send('There is nothing playing.');
1290 return message.channel.send(`? Now playing: **${serverQueue.songs[0].title}**`);
1291break;
1292 case "queue":
1293 if (!serverQueue) return message.channel.send('There is nothing playing.');
1294 return message.channel.send(`
1295__**Song queue:**__
1296${serverQueue.songs.map(song => `**-** ${song.title}`).join('\n')}
1297**Now playing:** ${serverQueue.songs[0].title}
1298 `);
1299break;
1300 case "pause":
1301 if (serverQueue && serverQueue.playing) {
1302 serverQueue.playing = false;
1303 serverQueue.connection.dispatcher.pause();
1304 return message.channel.send('⏸ Paused the music for you!');
1305 }
1306 return message.channel.send('There is nothing playing.');
1307break;
1308 case "resume":
1309 if (serverQueue && !serverQueue.playing) {
1310 serverQueue.playing = true;
1311 serverQueue.connection.dispatcher.resume();
1312 return message.channel.send('▶ Resumed the music for you!');
1313 }
1314 return message.channel.send('There is nothing playing.');
1315
1316
1317 return undefined;
1318break;
1319}
1320async function handleVideo(video, message, voiceChannel, playlist = false) {
1321 var serverQueue = queue.get(message.guild.id);
1322 console.log(video);
1323 var song = {
1324 id: video.id,
1325 title: video.title,
1326 url: `https://www.youtube.com/watch?v=${video.id}`
1327 };
1328 if (!serverQueue) {
1329 var queueConstruct = {
1330 textChannel: message.channel,
1331 voiceChannel: voiceChannel,
1332 connection: null,
1333 songs: [],
1334 volume: 5,
1335 playing: true
1336 };
1337 queue.set(message.guild.id, queueConstruct);
1338
1339 queueConstruct.songs.push(song);
1340
1341 try {
1342 var connection = await voiceChannel.join();
1343 queueConstruct.connection = connection;
1344 play(message.guild, queueConstruct.songs[0]);
1345 } catch (error) {
1346 console.error(`I could not join the voice channel: ${error}`);
1347 queue.delete(message.guild.id);
1348 return message.channel.send(`I could not join the voice channel: ${error}`);
1349 }
1350 } else {
1351 serverQueue.songs.push(song);
1352 console.log(serverQueue.songs);
1353 if (playlist) return undefined;
1354 else return message.channel.send(`✅ **${song.title}** has been added to the queue!`);
1355 }
1356 return undefined;
1357}
1358 function play(guild, song) {
1359 var serverQueue = queue.get(guild.id);
1360
1361 if (!song) {
1362 serverQueue.voiceChannel.leave();
1363 queue.delete(guild.id);
1364 return;
1365 }
1366 console.log(serverQueue.songs);
1367
1368 const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
1369 .on('end', reason => {
1370 message.channel.send('``The queue of song is end.``');
1371 if (reason === 'Stream is not generating quickly enough.') console.log('Song ended.');
1372 else console.log(reason);
1373 serverQueue.songs.shift();
1374 play(guild, serverQueue.songs[0]);
1375 })
1376 .on('error', error => console.error(error));
1377 dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
1378
1379 serverQueue.textChannel.send(`? Start playing: **${song.title}**`);
1380}
1381});
1382
1383client.on('ready', () => {
1384 console.log('music ready');
1385 });
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399/// un mute
1400
1401
1402client.on('message', async message => {
1403 let mention = message.mentions.members.first();
1404let command = message.content.split(" ")[0];
1405 command = command.slice(prefix.length);
1406 let args = message.content.split(" ").slice(1); //kinggamer حقوق الفا كودز و
1407if(command === `u`) {2
1408 if(!message.member.hasPermission("MUTE_MEMBERS")) return message.channel.sendMessage("**You Donot HavePermission Mute_Members**").then(m => m.delete(5000));
1409if(!message.guild.member(client.user).hasPermission("MUTE_MEMBERS")) return message.reply("**I donot Have Permission Mute_Members**").then(msg => msg.delete(6000))
1410 if (message.mentions.users.size < 1) return message.reply('** :information_source: منشن شخص **').catch(console.error);
1411 let kinggamer = message.guild.member(message.mentions.users.first()) || message.guild.members.get(args[0]);
1412 if(!kinggamer) return message.channel.send('').then(msg => {
1413 msg.delete(3500);
1414 message.delete(3500); //kinggamer حقوق الفا كودز و
1415 });
1416
1417 let role = message.guild.roles.find (r => r.name === "Muted");
1418
1419 if(!role || !kinggamer.roles.has(role.id)) return message.channel.sendMessage(`**:information_source: | ${mention.user.username} is all ready unmuted**`)
1420
1421 await kinggamer.removeRole(role) //kinggamer حقوق الفا كودز و
1422 message.channel.sendMessage(`**:ballot_box_with_check: | ${mention.user.username} UnMuted !**`);
1423
1424 return;
1425
1426 }
1427
1428});
1429
1430
1431
1432/*
1433
1434client.on('message', function(message) {//Toxic Codes n3k4a is one
1435 if(!message.channel.guild) return;
1436 if (message.author.bot) return;
1437 if (message.author.id === client.user.id) return;
1438 if (message.author.equals(client.user)) return;
1439 if (!message.content.startsWith(prefix)) return;
1440
1441 var args = message.content.substring(prefix.length).split(' ');//Toxic Codes n3k4a is one
1442 switch (args[0].toLocaleLowerCase()) {//Toxic Codes n3k4a is one
1443 case "clear" :
1444 message.delete()
1445 if(!message.channel.guild) return
1446 if(message.member.hasPermissions(0x2000)){ if (!args[1]) {//Toxic Codes n3k4a is one
1447 message.channel.fetchMessages()
1448 .then(messages => {
1449 message.channel.bulkDelete(messages);
1450 var messagesDeleted = messages.array().length;
1451 message.channel.sendMessage(' '+ "**```fix\n" + messagesDeleted + " " + ': عدد الرسائل التي تم مسحها' + "```**").then(m => m.delete(5000));
1452 })
1453 } else {
1454 let messagecount = parseInt(args[1]);
1455 message.channel.fetchMessages({limit: messagecount}).then(messages => message.channel.bulkDelete(messages));
1456 message.channel.sendMessage(' '+ "**```fix\n" + args[1] + " " + ': عدد الرسائل التي تم مسحها' + "```**").then(m => m.delete(5000));
1457 message.delete(60000);
1458 }
1459 } else {
1460 var manage = new Discord.RichEmbed()
1461 .setDescription('You Do Not Have Permission MANAGE_MESSAGES :(')
1462 .setColor("RANDOM")
1463 message.channel.sendEmbed(manage)
1464 return;
1465 }
1466 }
1467 });
1468
1469
1470
1471
1472let vojson = JSON.parse(fs.readFileSync('vojson.json', 'utf8'))
1473client.on('message', message => {
1474 if(message.content.startsWith(prefix + "setvc")) {
1475let channel = message.content.split(" ").slice(1).join(" ")
1476let channelfind = message.guild.channels.find('name', `${channel}`)
1477if(!channel) return message.channel.send('**الرجاء كتابة اسم الروم**')
1478if(!channelfind) return message.channel.send('**الرجاء كتابة اسم الروم**')
1479vojson[message.guild.id] = {
1480stats: 'enable',
1481chid: channelfind.id,
1482guild: message.guild.id
1483
1484}
1485message.channel.send('**Done**')
1486}
1487
1488}
1489
1490
1491)
1492
1493client.on('voiceStateUpdate', (oldMember , newMember) => {
1494 if(!vojson[oldMember.guild.id]) vojson[oldMember.guild.id] = {
1495 stats: 'disable',
1496 chid: 'undefined',
1497 guild: 'undefined'
1498 }
1499 if (vojson[oldMember.guild.id].stats === 'enable') {
1500 let ch = vojson[oldMember.guild.id].chid
1501 let channel = oldMember.guild.channels.get(ch)
1502 let guildid = vojson[oldMember.guild.id].guild
1503 channel.setName(`Voice Online: [${oldMember.guild.members.filter(m => m.voiceChannel).size}]`)
1504 };
1505 if (vojson[oldMember.guild.id].stats === 'disable') {
1506 return;
1507 }
1508 });
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521client.on('message', message => {
1522 if (message.content ==prefix + "minecraftacc") {
1523
1524 var x =
1525["1",
1526"2",
1527"3",
1528"4",
1529"5",
1530"6",
1531"7",
1532
1533];
1534 message.channel.send("** :white_check_mark:! تم ارسال الحساب خاص**")
1535 var x3 = Math.floor(Math.random()*x.length)
1536 message.author.send(`**${x[x3]}**`)
1537
1538
1539 }
1540
1541
1542})
1543
1544
1545
1546
1547
1548/*
1549client.on('message', async msg => {
1550 if (msg.author.bot) return undefined;
1551 if (!msg.content.startsWith(prefix)) return undefined;
1552 const args = msg.content.split(' ');
1553 const searchString = args.slice(1).join(' ');
1554 const url = args[1] ? args[1] .replace(/<(.+)>/g, '$1') : '';
1555 const serverQueue = queue.get(msg.guild.id);
1556 let command = msg.content.toLowerCase().split(" ")[0];
1557 command = command.slice(prefix.length)
1558 if (command === `play`) {
1559
1560 const voiceChannel = msg.member.voiceChannel;
1561 if (!voiceChannel) return msg.channel.send('**يجب ان تتواجد في روم صوتي**');
1562 const permissions = voiceChannel.permissionsFor(msg.client.user);
1563 if (!permissions.has('CONNECT')) {
1564 return msg.channel.send('**ليث معي صلاحية ,CONNECT**');
1565 }
1566 if (!permissions.has('SPEAK')) {
1567 return msg.channel.send('**ليث معي صلاحية ,SPEAK**');
1568 }
1569
1570 if (!permissions.has('EMBED_LINKS')) {
1571 return msg.channel.sendMessage("**ليث معي صلاحية ,EMBED_LINKS**")
1572 }
1573
1574 if (url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)) {
1575 const playlist = await youtube.getPlaylist(url);
1576 const videos = await playlist.getVideos();
1577 for (const video of Object.values(videos)) {
1578 const video2 = await youtube.getVideoByID(video.id);
1579 await handleVideo(video2, msg, voiceChannel, true);
1580 }
1581 return msg.channel.send(`**تم الاضافة الي قائمة التشغيل : ${playlist.title}**`);
1582 } else {
1583 try {
1584
1585 var video = await youtube.getVideo(url);
1586
1587 } catch (error) {
1588 try {
1589 var fast = {};
1590 var videos = await youtube.searchVideos(searchString, 5);
1591 let index = 0;
1592 const embed1 = new Discord.RichEmbed()
1593 .setDescription(`**اختر رقم المقطع الان** :
1594
1595${videos.map(video2 => `**${++index}**- **${video2.title}**`).join('\n')}`)
1596 .setFooter(`${msg.guild.name}`)
1597 msg.channel.sendEmbed(embed1).then(message =>{
1598
1599 message.delete(20000)
1600
1601 });
1602 try {
1603 var response = await msg.channel.awaitMessages(msg2 => msg2.content > 0 && msg2.content < 11, {
1604 maxMatches: 1,
1605 time: 20003,
1606 errors: ['time']
1607 })
1608
1609 }catch(err) {
1610 console.error(err);
1611 return msg.channel.send('**لم يتم اختيار مقطع**');
1612 }
1613 const videoIndex = parseInt(response.first().content);
1614 var video = await youtube.getVideoByID(videos[videoIndex - 1].id);
1615 } catch (err) {
1616 console.error(err);
1617 return msg.channel.send('**لا يتوفر نتآئج بحث**');
1618 }
1619 }
1620
1621 return handleVideo(video, msg, voiceChannel);
1622 }
1623 } else if (command === `skip`) {
1624 if (!msg.member.voiceChannel) return msg.channel.send('**انت لست موجود بروم صوتي**');
1625 if (!serverQueue) return msg.channel.send('**لا يتوفر مقطع لتجآوزه**');
1626 serverQueue.connection.dispatcher.end('**تم تجآوز هذآ المقطع**');
1627 return undefined;
1628 } else if (command === `stop`) {
1629 if (!msg.member.voiceChannel) return msg.channel.send('**أنت لست بروم صوتي**');
1630 if (!serverQueue) return msg.channel.send('**لا يتوفر مقطع لإيقآفه**');
1631 serverQueue.songs = [];
1632 serverQueue.connection.dispatcher.end('**تم إيقآف هذآ المقطع**');
1633 return undefined;
1634 } else if (command === `vol`) {
1635 if (!msg.member.voiceChannel) return msg.channel.send('**أنت لست بروم صوتي**');
1636 if (!serverQueue) return msg.channel.send('**لا يوجد مقطع شغآل**');
1637 if (!args[1]) return msg.channel.send(`**:loud_sound: مستوى الصوت : ${serverQueue.volume}**`);
1638 serverQueue.volume = args[1];
1639 serverQueue.connection.dispatcher.setVolumeLogarithmic(args[1] / 50);
1640 return msg.channel.send(`**:speaker: تم تغير الصوت الي : ${args[1]}**`);
1641
1642
1643 } else if (command === `np`) {
1644 if (!serverQueue) return msg.channel.send('**لا يوجد شيء حالي فـ العمل**');
1645 const embedNP = new Discord.RichEmbed()
1646 .setDescription(`**:notes: الان يتم تشغيل : ${serverQueue.songs[0].title}**`)
1647 return msg.channel.sendEmbed(embedNP);
1648
1649 } else if (command === `queue`) {
1650 if (!serverQueue) return msg.channel.send('**لا يوجد شيء حالي فـ العمل**');
1651 let index = 0;
1652 const embedqu = new Discord.RichEmbed()
1653.setDescription(`**Songs Queue**
1654${serverQueue.songs.map(song => `**${++index} -** ${song.title}`).join('\n')}
1655**الان يتم تشغيل** ${serverQueue.songs[0].title}`)
1656 return msg.channel.sendEmbed(embedqu);
1657 } else if (command === `pause`) {
1658 if (serverQueue && serverQueue.playing) {
1659 serverQueue.playing = false;
1660 serverQueue.connection.dispatcher.pause();
1661 return msg.channel.send('**تم إيقاف المقطع مؤقتا**');
1662 }
1663 return msg.channel.send('**لا يوجد شيء حالي ف العمل**');
1664 } else if (command === "resume") {
1665 if (serverQueue && !serverQueue.playing) {
1666 serverQueue.playing = true;
1667 serverQueue.connection.dispatcher.resume();
1668 return msg.channel.send('**تم استئناف المقطع**');
1669 }
1670 return msg.channel.send('**لا يوجد شيء حالي فـ العمل**');
1671 }
1672
1673 return undefined;
1674async function handleVideo(video, msg, voiceChannel, playlist = false) {
1675 const serverQueue = queue.get(msg.guild.id);
1676 const song = {
1677 id: video.id,
1678 title: Util.escapeMarkdown(video.title),
1679 url: `https://www.youtube.com/watch?v=${video.id}`,
1680 time:`${video.duration.hours}:${video.duration.minutes}:${video.duration.seconds}`,
1681 eyad:`${video.thumbnails.high.url}`,
1682 best:`${video.channel.title}`,
1683 bees:`${video.raw.snippet.publishedAt}`,
1684 shahd:`${video.raw.kind}`,
1685 zg:`${video.raw.snippet.channelId}`,
1686 views:`${video.raw.views}`,
1687 like:`${video.raw.likeCount}`,
1688 dislike:`${video.raw.dislikeCount}`,
1689 hi:`${video.raw.id}`
1690 };
1691 if (!serverQueue) {
1692 const queueConstruct = {
1693 textChannel: msg.channel,
1694 voiceChannel: voiceChannel,
1695 connection: null,
1696 songs: [],
1697 volume: 5,
1698 playing: true
1699 };
1700 queue.set(msg.guild.id, queueConstruct);
1701 queueConstruct.songs.push(song);
1702 try {
1703 var connection = await voiceChannel.join();
1704 queueConstruct.connection = connection;
1705 play(msg.guild, queueConstruct.songs[0]);
1706 } catch (error) {
1707 console.error(`I could not join the voice channel: ${error}`);
1708 queue.delete(msg.guild.id);
1709 return msg.channel.send(`لا أستطيع دخول هذآ الروم ${error}`);
1710 }
1711 } else {
1712 serverQueue.songs.push(song);
1713 console.log(serverQueue.songs);
1714 if (playlist) return undefined;
1715 else return msg.channel.send(`**تم اضافة الاغنية الي قائمة : ${song.title}**`);
1716 }
1717 return undefined;
1718}
1719
1720function play(guild, song) {
1721 const serverQueue = queue.get(guild.id);
1722
1723 if (!song) {
1724 serverQueue.voiceChannel.leave();
1725 queue.delete(guild.id);
1726 return;
1727 }
1728 console.log(serverQueue.songs);
1729 const dispatcher = serverQueue.connection.playStream(ytdl(song.url))
1730 .on('end', reason => {
1731 if (reason === 'Stream is not generating quickly enough.') console.log('Song ended.');
1732 else console.log(reason);
1733 serverQueue.songs.shift();
1734 play(guild, serverQueue.songs[0]);
1735 })
1736 .on('error', error => console.error(error));
1737 dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
1738 fetchVideoInfo(`${song.hi}`, function (err, fuck) {
1739 if (err) throw new Error(err);
1740 console.log(fuck);
1741 const yyyy = {}
1742 if(!yyyy[msg.guild.id]) yyyy[msg.guild.id] = {
1743 like: `${fuck.likeCount}`,
1744 dislike: `${fuck.dislikeCount}`
1745 }
1746 serverQueue.textChannel.send({embed : new Discord.RichEmbed()
1747 .setTitle(`**${fuck.title}**`)
1748 .setURL(fuck.url)
1749 .addField('Time The Video :' , `${song.time}`, true)
1750 .addField('Channel Name :' , `${song.best}`, true)
1751 .addField('Video Created at :' , `${fuck.datePublished}`, true)
1752 .addField('Views :' , `${fuck.views}`, true)
1753 .addField('Like :' , `${fuck.likeCount}`, true)
1754 .addField('Dislike :' , `${fuck.dislikeCount}`, true)
1755 .setImage(`${song.eyad}`)
1756 .setThumbnail('https://pbs.twimg.com/profile_images/1148327441527689217/1QpS06D6.png')
1757 .setColor('RANDOM')
1758 .setTimestamp()
1759
1760});
1761})
1762
1763
1764
1765
1766}
1767});
1768
1769*/
1770
1771
1772////////////////////////////////////////////////////////////////
1773
1774
1775
1776client.on('message', message => {
1777 if(message.content.startsWith(`<@${client.user.id}>`)) {
1778 if(message.author.bot || message.channel.type == "dm") return
1779 let mention = new Discord.RichEmbed()
1780 .setColor('RANDOM')
1781 .setDescription(`**Hey There,\nSee my all commands by \`${prefix}help\`**`)
1782 message.channel.send(mention)
1783 }
1784});
1785
1786
1787
1788
1789
1790client.on('message' , async message => {
1791 if(message.content.startsWith(prefix + "ads")) { //Toxic Codes
1792 await message.channel.send("`ارسال الرساله .`").then(e => { //Toxic Codes
1793 let filter = m => m.author.id === message.author.id
1794 let tests = '';
1795 let time = '';
1796 let channel = '';
1797 let chaTests = message.channel.awaitMessages(filter, { max: 1, time: 30000, errors: ['time'] })
1798 .then(collected => {
1799 tests = collected.first().content
1800 collected.first().delete()
1801e.edit("`تكرار الرساله كل ....... دقائق`")
1802let chaTime = message.channel.awaitMessages(filter, { max: 1, time: 30000, errors: ['time'] })//Toxic Codes
1803.then(co => {
1804if(isNaN(co.first().content)) return message.reply("`الوقت بالدقائق ! ارقام فقطٍ`");//Toxic Codes
1805if(co.first().content > 1500 || co.first().content < 1) return message.channel.send("`لا اقل من دقيقه ولا اكثر من يوم`") //Toxic Codes
1806 time = co.first().content
1807co.first().delete()
1808 e.edit("`ادخل اسم الروم`") //Toxic Codes
1809 let chaChannel = message.channel.awaitMessages(filter, { max: 1, time: 30000, errors: ['time'] }) //Toxic Codes
1810.then(col => { //Toxic Codes
1811 channel = col.first().content
1812col.first().delete()
1813 e.edit("`جاري اعداد المعلومات الرجاء الانتظاار...`").then(b => { //Toxic Codes
1814 setTimeout(() => {
1815 b.edit(`** تم اعداد المعلومات بنجاح .**`)
1816 },2000);
1817 })
1818 var room = message.guild.channels.find('name' , channel) //Toxic Codes
1819 if(!room) return;
1820 if (room) {
1821setInterval(() => {
1822room.send(tests);
1823}, time*60000)
1824 }
1825}) //Toxic Codes
1826})
1827}) //Toxic Codes
1828
1829})
1830}
1831});
1832
1833
1834
1835
1836
1837
1838
1839
1840const bot = client
1841bot.mutes = require("./mutes.json")
1842client.on('ready', () => {
1843 console.log(`Logged in as ${bot.user.tag}`)
1844 bot.setInterval(() => {
1845 for (let i in bot.mutes) {
1846 let time = bot.mutes[i].time;
1847 let member = bot.mutes[i].muted
1848 let mutereason = "تم انتهاء وقت الميوت"
1849 if (Date.now() > time) {
1850 bot.guilds.get(bot.mutes[i].guildid).members.get(`${member}`).removeRole(bot.mutes[i].roleid, mutereason)
1851 delete bot.mutes[i];
1852 fs.writeFile("./mutes.json", JSON.stringify(bot.mutes, null, 4), (err) => {
1853 if (err) throw err;
1854 console.log(`${bot.users.get(member).username} has been unmuted`)
1855 })
1856 }
1857 }
1858 }, 5000)
1859})
1860bot.on("guildMemberAdd", async (member) => {
1861 for (let i in bot.mutes) {
1862 let data = bot.mutes[i];
1863 if (data === undefined) return;
1864 if (data.guildid !== member.guild.id) return;
1865 let mutereason = "تم اعطائك ميوت بسبب كان عندك ميوت من قبل ما تخرج من السيرفر"
1866 let guildID = bot.mutes[i].guildid;
1867 if (member.id === bot.mutes[i].muted) {
1868 bot.guilds.get(`${guildID}`).members.get(`${member.id}`).addRole(`${bot.mutes[i].roleid}`, mutereason)
1869 } else {
1870 return;
1871 }
1872 }
1873})
1874client.on('message', async message => {
1875 let messageArray = message.content.split(' ')
1876 let args = messageArray.slice(1)
1877 let cmd = messageArray[0]
1878 if (cmd === `${prefix}m`) {
1879
1880 // هنا يمديك تحط الرولات الي يمديها تستعمل الكوماند
1881 if(!message.guild.member(message.author).hasPermission("MANAGE_ROLES")) return message.channel.send('**ليث معك صلاحية ,MANAGE_ROLES**');
1882 let themuteguy = message.guild.member(message.mentions.users.first() || message.guild.members.get(args[0]));
1883 if (!themuteguy) return message.channel.send("**منشن شخص**").then(msg => msg.delete(8000))
1884 if (themuteguy.id == message.author.id) return message.reply('**لا يمكن اعطاء ميوت لنفسك**')
1885 let roleid = message.guild.roles.find(c => c.name === "Muted")
1886 if (!roleid) return message.reply(`Please use \`${prefix}setup\` first`)
1887 let mutereason = args.join(" ").slice(25)
1888 if (!mutereason) return message.reply(`**\`Usage: ${prefix}mute mention time reason\`**`)
1889 let time = args[1]
1890 if (ms(time) > 2.592e+9) return message.reply('**يجب أن يكون أقل أو يساوي 30 يومًا**')
1891 if (themuteguy.roles.has(roleid.id)) return message.channel.send("This guy already is muted")
1892 bot.mutes.count++ + 1
1893 if (isNaN(bot.mutes.count)) bot.mutes.count = 0 + 1;
1894 bot.mutes[bot.mutes.count] = {
1895 time: Date.now() + ms(time),
1896 muted: themuteguy.id,
1897 roleid: roleid.id,
1898 guildid: message.guild.id
1899 }
1900 await message.guild.member(themuteguy.id).addRole(roleid.id, mutereason)
1901 fs.writeFile("./mutes.json", JSON.stringify(bot.mutes, null, 4), err => {
1902 if (err) throw err;
1903 message.channel.send(`**Done <@!${themuteguy.id}> Has been muted!**`)
1904 let muteembed = new Discord.RichEmbed()//اللوق
1905 .setAuthor("Mute log!")
1906 .setColor("RANDOM")
1907 .setTimestamp()
1908 .addField("For:", `${themuteguy} \`(${themuteguy.id})\``)
1909 .addField("By:", `${message.author} \`(${message.author.id})\``)
1910 .addField("Reason:", mutereason)
1911 .addField("Time", `${ms(ms(time), { long: true })}`)
1912 let mutechannel = bot.channels.find(c => c.name === "log")
1913 if (!mutechannel) return;
1914 mutechannel.send(muteembed)
1915 })
1916 }
1917
1918
1919 if (cmd == `${prefix}setup`) { // الكوماند هذا لو انت سويت كاتقوري جديد وسويت فيه شانلات جديدة مو موجود فيها منع للميوت اكتب الكوماند ذا
1920 if(!message.guild.member(message.author).hasPermission("MANAGE_ROLES")) return message.channel.send('**ليث معك صلاحية ,MANAGE_ROLES**');
1921 let role = message.guild.roles.find(c => c.name === "Muted")
1922 if (!role) {
1923 muterole = await message.guild.createRole({
1924 name: "Muted",
1925 permissions: []
1926 });
1927 }
1928 message.guild.channels.forEach(async (channel) => {
1929 await channel.overwritePermissions(role.id, {
1930 SEND_MESSAGES: false,
1931 ADD_REACTIONS: false
1932 });
1933 });
1934 message.channel.send('Done.')
1935 }
1936})
1937
1938
1939
1940
1941
1942
1943///////////////////////////////////////////////////////////////////////////
1944
1945const log = JSON.parse(fs.readFileSync('./log.json' , 'utf8'));
1946
1947client.on('message', message => {
1948 if (!message.channel.guild) return;
1949
1950 let room = message.content.split(" ").slice(1);
1951 let findroom = message.guild.channels.find('name', `${room}`)
1952 if(message.content.startsWith(prefix + "setlog")) {
1953 if(!message.channel.guild) return message.reply('**This Command Only For Servers**');
1954 if(!message.member.hasPermission('MANAGE_GUILD')) return message.channel.send('**Sorry But You Dont Have Permission** `MANAGE_GUILD`' );
1955if(!room) return message.channel.send('Please Type The Channel Name')
1956if(!findroom) return message.channel.send('Please Type The Log Channel Name')
1957let embed = new Discord.RichEmbed()
1958.setTitle('**Done**')
1959.addField('Channel:', `${room}`)
1960.addField('Requested By:', `${message.author}`)
1961.setThumbnail(message.author.avatarURL)
1962.setFooter(`${client.user.username}`)
1963message.channel.sendEmbed(embed)
1964log[message.guild.id] = {
1965channel: room,
1966onoff: 'On'
1967}
1968fs.writeFile("./log.json", JSON.stringify(log), (err) => {
1969if (err) console.error(err)
1970})
1971 }})
1972
1973client.on('message', message => {
1974
1975 if(message.content.startsWith(prefix + "togglelog")) {
1976 if(!message.channel.guild) return message.reply('**This Command Only For Servers**');
1977 if(!message.member.hasPermission('MANAGE_GUILD')) return message.channel.send('**Sorry But You Dont Have Permission** `MANAGE_GUILD`' );
1978 if(!log[message.guild.id]) log[message.guild.id] = {
1979 onoff: 'Off'
1980 }
1981 if(log[message.guild.id].onoff === 'Off') return [message.channel.send(`**The log Is __??__ !**`), log[message.guild.id].onoff = 'On']
1982 if(log[message.guild.id].onoff === 'On') return [message.channel.send(`**The log Is __???__ !**`), log[message.guild.id].onoff = 'Off']
1983 fs.writeFile("./log.json", JSON.stringify(log), (err) => {
1984 if (err) console.error(err)
1985 .catch(err => {
1986 console.error(err);
1987 });
1988 });
1989 }
1990
1991 })
1992
1993
1994client.on('messageDelete', message => {
1995
1996 if(message.author.bot) return;
1997 if(message.channel.type === 'dm') return;
1998 if(!message.guild.member(client.user).hasPermission('EMBED_LINKS')) return;
1999 if(!message.guild.member(client.user).hasPermission('MANAGE_MESSAGES')) return;
2000 if(!log[message.guild.id]) log[message.guild.id] = {
2001 onoff: 'Off'
2002 }
2003 if(log[message.guild.id].onoff === 'Off') return;
2004 var logChannel = message.guild.channels.find(c => c.name === `${log[message.guild.id].channel}`);
2005 if(!logChannel) return;
2006
2007 let messageDelete = new Discord.RichEmbed()
2008 .setTitle('**:wastebasket: MESSAGE DELETE**')
2009 .setColor('RANDOM')
2010 .setThumbnail(message.author.avatarURL)
2011 .setDescription(`**\n**Message Deleted In Channel ${message.channel}\n\n**Channel Name:** ${message.channel.name} ID: ${message.channel.id}\n**Channel Message ID:** ${message.id}\n**Sent By:** <@${message.author.id}> ID: ${message.author.id}\n**Message:**\n\`\`\`${message}\`\`\``)
2012 .setTimestamp()
2013 .setFooter(message.guild.name, message.guild.iconURL)
2014
2015 logChannel.send(messageDelete);
2016});
2017client.on('messageUpdate', (oldMessage, newMessage) => {
2018
2019 if(oldMessage.author.bot) return;
2020 if(!oldMessage.channel.type === 'dm') return;
2021 if(!oldMessage.guild.member(client.user).hasPermission('EMBED_LINKS')) return;
2022 if(!oldMessage.guild.member(client.user).hasPermission('MANAGE_MESSAGES')) return;
2023 if(!log[oldMessage.guild.id]) log[oldMessage.guild.id] = {
2024 onoff: 'Off'
2025 }
2026 if(log[oldMessage.guild.id].onoff === 'Off') return;
2027 var logChannel = oldMessage.guild.channels.find(c => c.name === `${log[oldMessage.guild.id].channel}`);
2028 if(!logChannel) return;
2029
2030 if(oldMessage.content.startsWith('https://')) return;
2031
2032 let messageUpdate = new Discord.RichEmbed()
2033 .setTitle('**:wrench: MESSAGE EDIT**')
2034 .setThumbnail(oldMessage.author.avatarURL)
2035 .setColor('RANDOM')
2036 .setDescription(`**\n**Message EDIT In Channel ${oldMessage.channel}\n\n**Channel Name:** ${oldMessage.channel.name} ID: ${oldMessage.channel.id}\n**Channel Message ID:** ${oldMessage.id}\n**Sent By:** <@${oldMessage.author.id}> ID: ${oldMessage.author.id}\n\n**Old Message:**\`\`\`${oldMessage}\`\`\`\n**New Message:**\`\`\`${newMessage}\`\`\``)
2037 .setTimestamp()
2038 .setFooter(oldMessage.guild.name, oldMessage.guild.iconURL)
2039
2040 logChannel.send(messageUpdate);
2041});
2042
2043
2044client.on('roleCreate', role => {
2045
2046 if(!role.guild.member(client.user).hasPermission('EMBED_LINKS')) return;
2047 if(!role.guild.member(client.user).hasPermission('VIEW_AUDIT_LOG')) return;
2048 if(!log[role.guild.id]) log[role.guild.id] = {
2049 onoff: 'Off'
2050 }
2051 if(log[role.guild.id].onoff === 'Off') return;
2052 var logChannel = role.guild.channels.find(c => c.name === `${log[role.guild.id].channel}`);
2053 if(!logChannel) return;
2054
2055 role.guild.fetchAuditLogs().then(logs => {
2056 var userID = logs.entries.first().executor.id;
2057 var userAvatar = logs.entries.first().executor.avatarURL;
2058
2059 let roleCreate = new Discord.RichEmbed()
2060 .setTitle('**:white_check_mark: ROLE CREATE**')
2061 .setThumbnail(userAvatar)
2062 .setDescription(`**\n**Done Create Role.\n\n**Role Name:** ${role.name} ID: ${role.id}\n**By:** <@${userID}> ID: ${userID}`)
2063 .setColor('RANDOM')
2064 .setTimestamp()
2065 .setFooter(role.guild.name, role.guild.iconURL)
2066
2067 logChannel.send(roleCreate);
2068 })
2069});
2070client.on('roleDelete', role => {
2071
2072 if(!role.guild.member(client.user).hasPermission('EMBED_LINKS')) return;
2073 if(!role.guild.member(client.user).hasPermission('VIEW_AUDIT_LOG')) return;
2074 if(!log[role.guild.id]) log[role.guild.id] = {
2075 onoff: 'Off'
2076 }
2077 if(log[role.guild.id].onoff === 'Off') return;
2078 var logChannel = role.guild.channels.find(c => c.name === `${log[role.guild.id].channel}`);
2079 if(!logChannel) return;
2080
2081 role.guild.fetchAuditLogs().then(logs => {
2082 var userID = logs.entries.first().executor.id;
2083 var userAvatar = logs.entries.first().executor.avatarURL;
2084
2085 let roleDelete = new Discord.RichEmbed()
2086 .setTitle('**:white_check_mark: ROLE DELETE**')
2087 .setThumbnail(userAvatar)
2088 .setDescription(`**\n**Done Delete Role.\n\n**Role Name:** ${role.name} ID: ${role.id}\n**By:** <@${userID}> ID: ${userID}`)
2089 .setColor('RANDOM')
2090 .setTimestamp()
2091 .setFooter(role.guild.name, role.guild.iconURL)
2092
2093 logChannel.send(roleDelete);
2094 })
2095});
2096client.on('roleUpdate', (oldRole, newRole) => {
2097
2098 if(!oldRole.guild.member(client.user).hasPermission('EMBED_LINKS')) return;
2099 if(!oldRole.guild.member(client.user).hasPermission('VIEW_AUDIT_LOG')) return;
2100 if(!log[oldRole.guild.id]) log[oldRole.guild.id] = {
2101 onoff: 'Off'
2102 }
2103 if(log[oldRole.guild.id].onoff === 'Off') return;
2104 var logChannel = oldRole.guild.channels.find(c => c.name === `${log[oldRole.guild.id].channel}`);
2105 if(!logChannel) return;
2106
2107 oldRole.guild.fetchAuditLogs().then(logs => {
2108 var userID = logs.entries.first().executor.id;
2109 var userAvatar = logs.entries.first().executor.avatarURL;
2110
2111 if(oldRole.name !== newRole.name) {
2112 if(log[oldRole.guild.id].onoff === 'Off') return;
2113 let roleUpdateName = new Discord.RichEmbed()
2114 .setTitle('**:white_check_mark: ROLE NAME UPDATE**')
2115 .setThumbnail(userAvatar)
2116 .setColor('RANDOM')
2117 .setDescription(`**\n**Done Edit Role Name.\n\n**Old Name:** \`\`${oldRole.name}\`\`\n**New Name:** \`\`${newRole.name}\`\`\n**Role ID:** ${oldRole.id}\n**By:** <@${userID}> ID: ${userID}`)
2118 .setTimestamp()
2119 .setFooter(oldRole.guild.name, oldRole.guild.iconURL)
2120
2121 logChannel.send(roleUpdateName);
2122 }
2123 if(oldRole.hexColor !== newRole.hexColor) {
2124 if(oldRole.hexColor === '#000000') {
2125 var oldColor = '`Default`';
2126 }else {
2127 var oldColor = oldRole.hexColor;
2128 }
2129 if(newRole.hexColor === '#000000') {
2130 var newColor = '`Default`';
2131 }else {
2132 var newColor = newRole.hexColor;
2133 }
2134 if(log[oldRole.guild.id].onoff === 'Off') return;
2135 let roleUpdateColor = new Discord.RichEmbed()
2136 .setTitle('**:white_check_mark: ROLE COLOR UPDATE**')
2137 .setThumbnail(userAvatar)
2138 .setColor('RANDOM')
2139 .setDescription(`**\n**Done Edit Role Color Name.**${oldRole.name}** \n\n**Old Color:** ${oldColor}\n**New Color:** ${newColor}\n**Role ID:** ${oldRole.id}\n**By:** <@${userID}> (ID: ${userID})`)
2140 .setTimestamp()
2141 .setFooter(oldRole.guild.name, oldRole.guild.iconURL)
2142
2143 logChannel.send(roleUpdateColor);
2144 }
2145 })
2146});
2147 ///////////////////////////////////////////////////////////////
2148client.on('channelCreate', channel => {
2149
2150 if(!channel.guild) return;
2151 if(!channel.guild.member(client.user).hasPermission('EMBED_LINKS')) return;
2152 if(!channel.guild.member(client.user).hasPermission('VIEW_AUDIT_LOG')) return;
2153 if(!log[channel.guild.id]) log[channel.guild.id] = {
2154 onoff: 'Off'
2155 }
2156 if(log[channel.guild.id].onoff === 'Off') return;
2157 var logChannel = channel.guild.channels.find(c => c.name === `${log[channel.guild.id].channel}`);
2158 if(!logChannel) return;
2159
2160 if(channel.type === 'text') {
2161 var roomType = 'Text';
2162 }else
2163 if(channel.type === 'voice') {
2164 var roomType = 'Voice';
2165 }else
2166 if(channel.type === 'category') {
2167 var roomType = 'Category';
2168 }
2169
2170 channel.guild.fetchAuditLogs().then(logs => {
2171 var userID = logs.entries.first().executor.id;
2172 var userAvatar = logs.entries.first().executor.avatarURL;
2173
2174 let channelCreate = new Discord.RichEmbed()
2175 .setTitle('**[CHANNEL CREATE]**')
2176 .setThumbnail(userAvatar)
2177 .setDescription(`**\n**:white_check_mark: Successfully \`\`CREATE\`\` **${roomType}** channel.\n\n**Channel Name:** \`\`${channel.name}\`\` (ID: ${channel.id})\n**By:** <@${userID}> (ID: ${userID})`)
2178 .setColor('GREEN')
2179 .setTimestamp()
2180 .setFooter(channel.guild.name, channel.guild.iconURL)
2181
2182 logChannel.send(channelCreate);
2183 })
2184});
2185client.on('channelDelete', channel => {
2186 if(!channel.guild) return;
2187 if(!channel.guild.member(client.user).hasPermission('EMBED_LINKS')) return;
2188 if(!channel.guild.member(client.user).hasPermission('VIEW_AUDIT_LOG')) return;
2189 if(!log[channel.guild.id]) log[channel.guild.id] = {
2190 onoff: 'Off'
2191 }
2192 if(log[channel.guild.id].onoff === 'Off') return;
2193 var logChannel = channel.guild.channels.find(c => c.name === `${log[channel.guild.id].channel}`);
2194 if(!logChannel) return;
2195
2196 if(channel.type === 'text') {
2197 var roomType = 'Text';
2198 }else
2199 if(channel.type === 'voice') {
2200 var roomType = 'Voice';
2201 }else
2202 if(channel.type === 'category') {
2203 var roomType = 'Category';
2204 }
2205
2206 channel.guild.fetchAuditLogs().then(logs => {
2207 var userID = logs.entries.first().executor.id;
2208 var userAvatar = logs.entries.first().executor.avatarURL;
2209
2210 let channelDelete = new Discord.RichEmbed()
2211 .setTitle('**[CHANNEL DELETE]**')
2212 .setThumbnail(userAvatar)
2213 .setDescription(`**\n**:white_check_mark: Successfully \`\`DELETE\`\` **${roomType}** channel.\n\n**Channel Name:** \`\`${channel.name}\`\` (ID: ${channel.id})\n**By:** <@${userID}> (ID: ${userID})`)
2214 .setColor('RED')
2215 .setTimestamp()
2216 .setFooter(channel.guild.name, channel.guild.iconURL)
2217
2218 logChannel.send(channelDelete);
2219 })
2220});
2221client.on('channelUpdate', (oldChannel, newChannel) => {
2222 if(!oldChannel.guild) return;
2223 if(!log[oldChannel.guild.id]) log[oldChannel.guild.id] = {
2224 onoff: 'Off'
2225 }
2226 if(log[oldChannel.guild.id].onoff === 'Off') return;
2227 var logChannel = oldChannel.guild.channels.find(c => c.name === `${log[oldChannel.guild.id].channel}`);
2228 if(!logChannel) return;
2229
2230 if(oldChannel.type === 'text') {
2231 var channelType = 'Text';
2232 }else
2233 if(oldChannel.type === 'voice') {
2234 var channelType = 'Voice';
2235 }else
2236 if(oldChannel.type === 'category') {
2237 var channelType = 'Category';
2238 }
2239
2240 oldChannel.guild.fetchAuditLogs().then(logs => {
2241 var userID = logs.entries.first().executor.id;
2242 var userAvatar = logs.entries.first().executor.avatarURL;
2243
2244 if(oldChannel.name !== newChannel.name) {
2245 let newName = new Discord.RichEmbed()
2246 .setTitle('**[CHANNEL EDIT]**')
2247 .setThumbnail(userAvatar)
2248 .setColor('BLUE')
2249 .setDescription(`**\n**:wrench: Successfully Edited **${channelType}** Channel Name\n\n**Old Name:** \`\`${oldChannel.name}\`\`\n**New Name:** \`\`${newChannel.name}\`\`\n**Channel ID:** ${oldChannel.id}\n**By:** <@${userID}> (ID: ${userID})`)
2250 .setTimestamp()
2251 .setFooter(oldChannel.guild.name, oldChannel.guild.iconURL)
2252
2253 logChannel.send(newName);
2254 }
2255 if(oldChannel.topic !== newChannel.topic) {
2256 if(log[oldChannel.guild.id].onoff === 'Off') return;
2257 let newTopic = new Discord.RichEmbed()
2258 .setTitle('**[CHANNEL EDIT]**')
2259 .setThumbnail(userAvatar)
2260 .setColor('BLUE')
2261 .setDescription(`**\n**:wrench: Successfully Edited **${channelType}** Channel Topic\n\n**Old Topic:**\n\`\`\`${oldChannel.topic || 'NULL'}\`\`\`\n**New Topic:**\n\`\`\`${newChannel.topic || 'NULL'}\`\`\`\n**Channel:** ${oldChannel} (ID: ${oldChannel.id})\n**By:** <@${userID}> (ID: ${userID})`)
2262 .setTimestamp()
2263 .setFooter(oldChannel.guild.name, oldChannel.guild.iconURL)
2264
2265 logChannel.send(newTopic);
2266 }
2267 })
2268});
2269
2270
2271client.on('guildBanAdd', (guild, user) => {
2272
2273 if(!guild.member(client.user).hasPermission('EMBED_LINKS')) return;
2274 if(!guild.member(client.user).hasPermission('VIEW_AUDIT_LOG')) return;
2275 if(!log[user.guild.id]) log[guild.guild.id] = {
2276 onoff: 'Off'
2277 }
2278 if(log[user.guild.id].onoff === 'Off') return;
2279 var logChannel = guild.channels.find(c => c.name === `${log[guild.guild.id].channel}`);
2280 if(!logChannel) return;
2281
2282 guild.fetchAuditLogs().then(logs => {
2283 var userID = logs.entries.first().executor.id;
2284 var userAvatar = logs.entries.first().executor.avatarURL;
2285
2286 if(userID === client.user.id) return;
2287
2288 let banInfo = new Discord.RichEmbed()
2289 .setTitle('**[BANNED]**')
2290 .setThumbnail(userAvatar)
2291 .setColor('DARK_RED')
2292 .setDescription(`**\n**:airplane: Successfully \`\`BANNED\`\` **${user.username}** From the server!\n\n**User:** <@${user.id}> (ID: ${user.id})\n**By:** <@${userID}> (ID: ${userID})`)
2293 .setTimestamp()
2294 .setFooter(guild.name, guild.iconURL)
2295
2296 logChannel.send(banInfo);
2297 })
2298});
2299client.on('guildBanRemove', (guild, user) => {
2300 if(!guild.member(client.user).hasPermission('EMBED_LINKS')) return;
2301 if(!guild.member(client.user).hasPermission('VIEW_AUDIT_LOG')) return;
2302 if(!log[guild.guild.id]) log[guild.guild.id] = {
2303 onoff: 'Off'
2304 }
2305 if(log[guild.guild.id].onoff === 'Off') return;
2306 var logChannel = guild.channels.find(c => c.name === `${log[guild.guild.id].channel}`);
2307 if(!logChannel) return;
2308
2309 guild.fetchAuditLogs().then(logs => {
2310 var userID = logs.entries.first().executor.id;
2311 var userAvatar = logs.entries.first().executor.avatarURL;
2312
2313 if(userID === client.user.id) return;
2314
2315 let unBanInfo = new Discord.RichEmbed()
2316 .setTitle('**[UNBANNED]**')
2317 .setThumbnail(userAvatar)
2318 .setColor('GREEN')
2319 .setDescription(`**\n**:unlock: Successfully \`\`UNBANNED\`\` **${user.username}** From the server\n\n**User:** <@${user.id}> (ID: ${user.id})\n**By:** <@${userID}> (ID: ${userID})`)
2320 .setTimestamp()
2321 .setFooter(guild.name, guild.iconURL)
2322
2323 logChannel.send(unBanInfo);
2324 })
2325});
2326
2327client.on('guildMemberUpdate', (oldMember, newMember) => {
2328 if(!oldMember.guild) return;
2329 if(!log[oldMember.guild.id]) log[oldMember.guild.id] = {
2330 onoff: 'Off'
2331 }
2332 if(log[oldMember.guild.id].onoff === 'Off') return;
2333 var logChannel = oldMember.guild.channels.find(c => c.name === `${log[oldMember, newMember.guild.id].channel}`);
2334 if(!logChannel) return;
2335
2336 oldMember.guild.fetchAuditLogs().then(logs => {
2337 var userID = logs.entries.first().executor.id;
2338 var userAvatar = logs.entries.first().executor.avatarURL;
2339 var userTag = logs.entries.first().executor.tag;
2340
2341 if(oldMember.nickname !== newMember.nickname) {
2342 if(oldMember.nickname === null) {
2343 var oldNM = '`اسمه الاصلي`';
2344 }else {
2345 var oldNM = oldMember.nickname;
2346 }
2347 if(newMember.nickname === null) {
2348 var newNM = '`اسمه الاصلي`';
2349 }else {
2350 var newNM = newMember.nickname;
2351 }
2352
2353 let updateNickname = new Discord.RichEmbed()
2354 .setTitle('**[UPDATE MEMBER NICKNAME]**')
2355 .setThumbnail(userAvatar)
2356 .setColor('BLUE')
2357 .setDescription(`**\n**:spy: Successfully \`\`CHANGE\`\` Member Nickname.\n\n**User:** ${oldMember} (ID: ${oldMember.id})\n**Old Nickname:** ${oldNM}\n**New Nickname:** ${newNM}\n**By:** <@${userID}> (ID: ${userID})`)
2358 .setTimestamp()
2359 .setFooter(oldMember.guild.name, oldMember.guild.iconURL)
2360
2361 logChannel.send(updateNickname);
2362 }
2363 if(oldMember.roles.size < newMember.roles.size) {
2364 let role = newMember.roles.filter(r => !oldMember.roles.has(r.id)).first();
2365 if(!log[oldMember.guild.id]) log[oldMember.guild.id] = {
2366 onoff: 'Off'
2367 }
2368 if(log[oldMember.guild.id].onoff === 'Off') return;
2369 let roleAdded = new Discord.RichEmbed()
2370 .setTitle('**[ADDED ROLE TO MEMBER]**')
2371 .setThumbnail(oldMember.guild.iconURL)
2372 .setColor('GREEN')
2373 .setDescription(`**\n**:white_check_mark: Successfully \`\`ADDED\`\` Role to **${oldMember.user.username}**\n\n**User:** <@${oldMember.id}> (ID: ${oldMember.user.id})\n**Role:** \`\`${role.name}\`\` (ID: ${role.id})\n**By:** <@${userID}> (ID: ${userID})`)
2374 .setTimestamp()
2375 .setFooter(userTag, userAvatar)
2376
2377 logChannel.send(roleAdded);
2378 }
2379 if(oldMember.roles.size > newMember.roles.size) {
2380 let role = oldMember.roles.filter(r => !newMember.roles.has(r.id)).first();
2381 if(!log[oldMember.guild.id]) log[oldMember.guild.id] = {
2382 onoff: 'Off'
2383 }
2384 if(log[oldMember, newMember.guild.id].onoff === 'Off') return;
2385 let roleRemoved = new Discord.RichEmbed()
2386 .setTitle('**[REMOVED ROLE FROM MEMBER]**')
2387 .setThumbnail(oldMember.guild.iconURL)
2388 .setColor('RED')
2389 .setDescription(`**\n**:negative_squared_cross_mark: Successfully \`\`REMOVED\`\` Role from **${oldMember.user.username}**\n\n**User:** <@${oldMember.user.id}> (ID: ${oldMember.id})\n**Role:** \`\`${role.name}\`\` (ID: ${role.id})\n**By:** <@${userID}> (ID: ${userID})`)
2390 .setTimestamp()
2391 .setFooter(userTag, userAvatar)
2392
2393 logChannel.send(roleRemoved);
2394 }
2395 })
2396 if(oldMember.guild.owner.id !== newMember.guild.owner.id) {
2397 if(!log[oldMember.guild.id]) log[oldMember.guild.id] = {
2398 onoff: 'Off'
2399 }
2400 if(log[oldMember, newMember.guild.id].onoff === 'Off') return;
2401 let newOwner = new Discord.RichEmbed()
2402 .setTitle('**[UPDATE GUILD OWNER]**')
2403 .setThumbnail(oldMember.guild.iconURL)
2404 .setColor('GREEN')
2405 .setDescription(`**\n**:white_check_mark: Successfully \`\`TRANSFER\`\` The Owner Ship.\n\n**Old Owner:** <@${oldMember.user.id}> (ID: ${oldMember.user.id})\n**New Owner:** <@${newMember.user.id}> (ID: ${newMember.user.id})`)
2406 .setTimestamp()
2407 .setFooter(oldMember.guild.name, oldMember.guild.iconURL)
2408
2409 logChannel.send(newOwner);
2410 }
2411});
2412
2413
2414client.on('voiceStateUpdate', (voiceOld, voiceNew) => {
2415
2416 if(!voiceOld.guild.member(client.user).hasPermission('EMBED_LINKS')) return;
2417 if(!voiceOld.guild.member(client.user).hasPermission('VIEW_AUDIT_LOG')) return;
2418 if(!log[voiceOld.guild.id]) log[voiceOld.guild.id] = {
2419 onoff: 'Off'
2420 }
2421 if(log[voiceOld, voiceOld.guild.id].onoff === 'Off') return;
2422 var logChannel = voiceOld.guild.channels.find(c => c.name === `${log[voiceOld, voiceNew.guild.id].channel}`);
2423 if(!logChannel) return;
2424
2425 voiceOld.guild.fetchAuditLogs().then(logs => {
2426 var userID = logs.entries.first().executor.id;
2427 var userTag = logs.entries.first().executor.tag;
2428 var userAvatar = logs.entries.first().executor.avatarURL;
2429
2430 if(voiceOld.serverMute === false && voiceNew.serverMute === true) {
2431 let serverMutev = new Discord.RichEmbed()
2432 .setTitle('**[VOICE MUTE]**')
2433 .setThumbnail('https://images-ext-1.discordapp.net/external/pWQaw076OHwVIFZyeFoLXvweo0T_fDz6U5C9RBlw_fQ/https/cdn.pg.sa/UosmjqDNgS.png')
2434 .setColor('RED')
2435 .setDescription(`**User:** ${voiceOld} (ID: ${voiceOld.id})\n**By:** <@${userID}> (ID: ${userID})\n**Channel:** \`\`${voiceOld.voiceChannel.name}\`\` (ID: ${voiceOld.voiceChannel.id})`)
2436 .setTimestamp()
2437 .setFooter(userTag, userAvatar)
2438
2439 logChannel.send(serverMutev);
2440 }
2441 if(voiceOld.serverMute === true && voiceNew.serverMute === false) {
2442 if(!log[voiceOld.guild.id]) log[voiceOld.guild.id] = {
2443 onoff: 'Off'
2444 }
2445 if(log[voiceOld, voiceOld.guild.id].onoff === 'Off') return;
2446 let serverUnmutev = new Discord.RichEmbed()
2447 .setTitle('**[VOICE UNMUTE]**')
2448 .setThumbnail('https://images-ext-1.discordapp.net/external/u2JNOTOc1IVJGEb1uCKRdQHXIj5-r8aHa3tSap6SjqM/https/cdn.pg.sa/Iy4t8H4T7n.png')
2449 .setColor('GREEN')
2450 .setDescription(`**User:** ${voiceOld} (ID: ${voiceOld.id})\n**By:** <@${userID}> (ID: ${userID})\n**Channel:** \`\`${voiceOld.voiceChannel.name}\`\` (ID: ${voiceOld.voiceChannel.id})`)
2451 .setTimestamp()
2452 .setFooter(userTag, userAvatar)
2453
2454 logChannel.send(serverUnmutev);
2455 }
2456 if(voiceOld.serverDeaf === false && voiceNew.serverDeaf === true) {
2457 if(!log[voiceOld.guild.id]) log[voiceOld.guild.id] = {
2458 onoff: 'Off'
2459 }
2460 if(log[voiceOld, voiceOld.guild.id].onoff === 'Off') return;
2461 let serverDeafv = new Discord.RichEmbed()
2462 .setTitle('**[VOICE DEAF]**')
2463 .setThumbnail('https://images-ext-1.discordapp.net/external/7ENt2ldbD-3L3wRoDBhKHb9FfImkjFxYR6DbLYRjhjA/https/cdn.pg.sa/auWd5b95AV.png')
2464 .setColor('RED')
2465 .setDescription(`**User:** ${voiceOld} (ID: ${voiceOld.id})\n**By:** <@${userID}> (ID: ${userID})\n**Channel:** \`\`${voiceOld.voiceChannel.name}\`\` (ID: ${voiceOld.voiceChannel.id})`)
2466 .setTimestamp()
2467 .setFooter(userTag, userAvatar)
2468
2469 logChannel.send(serverDeafv);
2470 }
2471 if(voiceOld.serverDeaf === true && voiceNew.serverDeaf === false) {
2472 if(!log[voiceOld.guild.id]) log[voiceOld.guild.id] = {
2473 onoff: 'Off'
2474 }
2475 if(log[voiceOld, voiceOld.guild.id].onoff === 'Off') return;
2476 let serverUndeafv = new Discord.RichEmbed()
2477 .setTitle('**[VOICE UNDEAF]**')
2478 .setThumbnail('https://images-ext-2.discordapp.net/external/s_abcfAlNdxl3uYVXnA2evSKBTpU6Ou3oimkejx3fiQ/https/cdn.pg.sa/i7fC8qnbRF.png')
2479 .setColor('GREEN')
2480 .setDescription(`**User:** ${voiceOld} (ID: ${voiceOld.id})\n**By:** <@${userID}> (ID: ${userID})\n**Channel:** \`\`${voiceOld.voiceChannel.name}\`\` (ID: ${voiceOld.voiceChannel.id})`)
2481 .setTimestamp()
2482 .setFooter(userTag, userAvatar)
2483
2484 logChannel.send(serverUndeafv);
2485 }
2486 })
2487
2488 if(voiceOld.voiceChannelID !== voiceNew.voiceChannelID && voiceNew.voiceChannel && voiceOld.voiceChannel != null) {
2489 if(!log[voiceOld.guild.id]) log[voiceOld.guild.id] = {
2490 onoff: 'Off'
2491 }
2492 if(log[voiceOld, voiceOld.guild.id].onoff === 'Off') return;
2493 let voiceLeave = new Discord.RichEmbed()
2494 .setTitle('**[CHANGED VOICE ROOM]**')
2495 .setColor('GREEN')
2496 .setThumbnail(voiceOld.user.avatarURL)
2497 .setDescription(`**\n**:repeat: Successfully \`\`CHANGED\`\` The Voice Channel.\n\n**From:** \`\`${voiceOld.voiceChannel.name}\`\` (ID: ${voiceOld.voiceChannelID})\n**To:** \`\`${voiceNew.voiceChannel.name}\`\` (ID: ${voiceNew.voiceChannelID})\n**User:** ${voiceOld} (ID: ${voiceOld.id})`)
2498 .setTimestamp()
2499 .setFooter(voiceOld.user.tag, voiceOld.user.avatarURL)
2500
2501 logChannel.send(voiceLeave);
2502 }
2503});