Advertisement
gaber-elsayed

simple music bot

Oct 6th, 2021
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.10 KB | None | 0 0
  1. const express = require("express");
  2. const app = express();
  3. app.listen(() => console.log("Server started"));
  4.  
  5. app.use('/ping', (req, res) => {
  6. res.send(new Date());
  7. });
  8. const Discord = require('discord.js');
  9. const client = new Discord.Client();
  10. let prefix = '-'//بريفكس البوت مهم
  11. const db = require('quick.db')
  12. const DisTube = require('distube');
  13. const { SoundCloudPlugin } = require("@distube/soundcloud");
  14. const distube = new DisTube.DisTube(client, {
  15. youtubeDL: true,
  16. emitNewSongOnly: false,
  17. savePreviousSongs: true,
  18. leaveOnFinish: false,
  19. leaveOnStop: false,
  20. leaveOnEmpty :false,
  21. plugins: [new SoundCloudPlugin()]});
  22. const DisTubeVoice = require('distube')
  23. client.on('ready', async() => {
  24. console.log('im online')
  25. client.user.setActivity(`${prefix}help`, { type : 'PLAYING', status: "dnd"})
  26. var fs = require('fs');
  27. setInterval(() => {
  28. fs.readFile('json.sqlite', 'utf8', function(err, contents) {
  29. });
  30. }, 10000)
  31.  
  32. })
  33.  
  34.  
  35.  
  36. client.on("message", async (message) => {
  37. if (message.author.bot) return;
  38. if(message.channel.type === 'dm') return;
  39. if (!message.content.startsWith(prefix)) return;
  40. const args = message.content.slice(prefix.length).trim().split(/ +/g);
  41. const command = args.shift();
  42. if(command === 'help') {
  43. message.channel.send(new Discord.MessageEmbed()
  44. .setColor('#056608')
  45. .setAuthor(message.member.user.tag,message.member.user.displayAvatarURL())
  46. .setDescription(`**${prefix}play \| ${prefix}p :** to play a song. \n **${prefix}pause \| ${prefix}pa:** to pause the song. \n **${prefix}resume \| ${prefix}re :** to resume the song.\n **${prefix}stop \| ${prefix}st :** to stop the songs. \n **${prefix}volume \| ${prefix}vol:** to see and set volume.\n **${prefix}jump :** to jump to a song in the queue using the number. \n **${prefix}nowplaying \| ${prefix}np :** see the current song name.\n **${prefix}skip \| ${prefix}s :** to skip the current song.`)
  47. .setTimestamp())
  48. }
  49. if (["play", "p"].includes(command)) {
  50. const cc = distube.getQueue(message)
  51. let player = args.join(" ")
  52. if(!message.member.voice.channel) return
  53. if(message.guild.me.voice.channel && !cc) {distube.voices.leave(message.guild.id)}
  54. try {
  55.  
  56. distube.play(message, player);
  57.  
  58. } catch (e) {
  59. message.channel.send(` Error: \`${e}\``)
  60. }
  61. }
  62. if (["skip", "s"].includes(command)) {
  63. if(!message.member.voice.channel) return
  64. let queue = distube.getQueue(message);
  65. if(!queue) return message.channel.send('no more songs in queue to skip.')
  66. if(queue.songs.length === 1) return message.channel.send('no more songs in queue to skip.')
  67. try{
  68. const queueskip = distube.getQueue(message);
  69. distube.skip(message)
  70. message.channel.send('skipping....')
  71. } catch(err) { message.channel.send('no songs to skip') }
  72. }
  73.  
  74. if (["nowplaying", "np"].includes(command)) {
  75. if(!message.member.voice.channel) return
  76. let queue = distube.getQueue(message);
  77. if(!queue) return message.channel.send('no song playing.')
  78. if(queue.songs.length === 0) return message.channel.send('no songs are playing.')
  79. message.channel.send(new Discord.MessageEmbed()
  80. .setColor('#056608')
  81. .setDescription('Current song :\n' + queue.songs.map((song, id) =>
  82. `⭐- [${song.name}](${song.url}) - \`${song.formattedDuration}\` added by : \`${song.user.tag}\``
  83. ).slice(0, 1).join("\n")));
  84. }
  85. if (["pause", "pa"].includes(command)) {
  86. let queue = distube.getQueue(message);
  87. if(!queue) return message.channel.send('no song playing to pause.')
  88. if(queue.songs.length === 0) return message.channel.send('no songs to pause.')
  89. const pausable = distube.getQueue(message);
  90. if(!message.member.voice.channel) return;
  91.  
  92. try{
  93. distube.pause(message);
  94. message.channel.send('paused!')
  95. } catch(err) {message.channel.send('already paused or the bot not playing.')}
  96. }
  97. if (["resume", "re"].includes(command)) {
  98. if(!message.member.voice.channel) return;
  99. let queue = distube.getQueue(message);
  100. if(!queue) return message.channel.send('no song paused to resume')
  101. if(queue.songs.length === 0) return message.channel.send('no songs to resume.')
  102. try{
  103. distube.resume(message);
  104. message.channel.send('resuming!!')
  105. } catch(err) {message.channel.send('the queue not paused or the bot not playing.')}
  106. }
  107. if (["volume", "vol"].includes(command)) {
  108. if(!message.member.voice.channel) return;
  109.  
  110. let vol = args.join(" ")
  111. const volume = db.fetch(`${message.guild.id}_volume`)||75
  112. if(!vol) return message.channel.send(`current volume is: ${volume}%`)
  113. if (isNaN(vol)) return message.channel.send('only numbers!')
  114. if (vol > 100 || vol <= 0) return message.channel.send('allowed volume => 0 to 100')
  115.  
  116. message.channel.send(`new volume: **${vol}%**`)
  117. db.set(`${message.guild.id}_volume`, vol)
  118. distube.setVolume(message, parseInt(vol))
  119. }
  120. if (["repeat", "loop"].includes(command)) {
  121. if(!message.member.voice.channel) return;
  122. let queue = distube.getQueue(message);
  123. if(!queue) return message.channel.send('no songs to repeat.')
  124. if(queue.songs.length === 0) return message.channel.send('no songs to repeat.')
  125. let repeat = db.fetch('repeat')
  126. if(!args[0]) return message.channel.send(`${prefix}repeat (0/1/2)\n 1 = repeat current song. \n 2 = repeat queue. \n 0 = off.\n current repeat mode \`${repeat}\``)
  127. let mode = distube.setRepeatMode(message, parseInt(args[0]));
  128. mode = mode ? mode == 2 ? "Repeat queue" : "Repeat song" : "Off";
  129. db.set("repeat", args[0])
  130. message.channel.send("Set repeat mode to `" + mode + "`");
  131. }
  132. if (["stop", "st"].includes(command)) {
  133. if(!message.member.voice.channel) return;
  134.  
  135. if(!distube.getQueue(message)) return message.channel.send('no songs playing to stop!')
  136. if(queue.songs.length === 0) return message.channel.send('no songs playing to stop.')
  137. distube.stop(message);
  138. message.channel.send(new Discord.MessageEmbed()
  139. .setColor('#056608')
  140. .setAuthor(message.author.tag,message.author.displayAvatarURL())
  141. .setDescription("Stopped the music!"))
  142. }
  143.  
  144. if(command === "previous") {
  145. if(!message.member.voice.channel) return;
  146. try {
  147. distube.previous(message)
  148. message.channel.send('playing previous song!.')
  149. }catch(err) { message.channel.send('no song is playing!!')}
  150.  
  151. }
  152. if (command == "queue") {
  153. if(!message.member.voice.channel) return;
  154.  
  155. let queue = distube.getQueue(message);
  156. if(!queue) return message.channel.send('you didnt add songs to queue in this server!')
  157. message.channel.send(new Discord.MessageEmbed()
  158. .setColor('#056608')
  159. .setDescription('Current queue:\n' + queue.songs.map((song, id) =>
  160. `⭐-**${id + 0}**. ${song.name} - \`${song.formattedDuration}\``
  161. ).slice(0, 11).join("\n"))
  162. .addField('songs:', queue.songs.length));
  163. }
  164. if(command === "jump") {
  165. if(!message.member.voice.channel) return;
  166.  
  167. let queue = distube.getQueue(message);
  168. if (!queue) return message.channel.send(new Discord.MessageEmbed()
  169. .setColor('#850101')
  170. .setDescription(`❌ | There is nothing in the queue right now!`))
  171. if(queue.songs.length === 1) return message.channel.send('no more songs to jump.')
  172. let queuenumber = args.join(" ")
  173. if(queuenumber === "0") return message.channel.send('this song already playing!')
  174. if(queuenumber > 10) return message.channel.send('max number is 10')
  175. distube.jump(message, parseInt(args[0]))
  176. }
  177. });
  178.  
  179.  
  180. distube.on("addSong", (queue, song) =>{
  181. queue.textChannel.send(new Discord.MessageEmbed()
  182. .setColor('#056608')
  183. .setAuthor(song.user.tag,song.user.displayAvatarURL())
  184. .setDescription(`Added ${song.name} - \`${song.formattedDuration}\` to the queue by ${song.user.tag}`)
  185. )
  186. }).on("playList", (queue, playlist, song) => queue.textChannel.send(new Discord.MessageEmbed()
  187. .setColor('#056608')
  188. .setAuthor(playlist.user.tag,playlist.user.displayAvatarURL())
  189. .setDescription(`Play \`${playlist.name}\` playlist (${playlist.songs.length} songs).\nRequested by: ${song.user.tag}\nNow playing \`${song.name}\` - \`${song.formattedDuration}\``)
  190. ))
  191. .on("addList", (queue, playlist) => queue.textChannel.send(new Discord.MessageEmbed()
  192. .setColor('#056608')
  193. .setAuthor(playlist.user.tag,playlist.user.displayAvatarURL())
  194. .setDescription(`Added \`${playlist.name}\` playlist (${playlist.songs.length} songs) to queue`)
  195. ))
  196. distube.on("error", (channel, error) => { console.log(error)
  197. });
  198.  
  199. distube.on("playSong", (queue, song) => { queue.textChannel.send(new Discord.MessageEmbed()
  200. .setColor('#056608')
  201. .setDescription(`Playing- ${song.name}`)
  202. .addField('likes:', song.likes)
  203. .addField(`duration:`, song.formattedDuration)
  204. .addField('views:', song.views)
  205. )
  206. let repeat = db.fetch('repeat') || 0
  207. let mode = distube.setRepeatMode(queue.textChannel.guild.id, parseInt(repeat));
  208. mode = mode ? mode == 2 ? "Repeat queue" : "Repeat song" : "Off";
  209. let vols = db.get(`${queue.textChannel.guild.id}_volume`) || 75
  210. distube.setVolume(queue.textChannel.guild.id, parseInt(vols))
  211. })
  212. distube.on("finish", (queue) => { queue.textChannel.send("No more songs in queue")});
  213.  
  214. distube.on("noRelated", (queue) => queue.textChannel.send("Can't find related video to play. Stop playing music."));
  215.  
  216.  
  217. client.on("message", async message => {
  218. if (message.content.startsWith(prefix + "setname")) {
  219. let args = message.content.split(" ");
  220. let botnameee = args.slice(1).join(" ");
  221. if (!message.member.hasPermission('MANAGE_GUILD'))
  222. return message.channel.send(
  223. `** :x: Only Owners Can Use this Command **`
  224. );
  225. if (!botnameee)
  226. return message.channel.send(
  227. `** :x: Please Provide me a name for the bot !**`
  228. );
  229. client.user.setUsername(`${botnameee}`);
  230. message.channel.send(`Changing The bot's Name ...`).then(me => {
  231. me.edit(` Done !`);
  232. });
  233. }
  234. if (message.content.startsWith(prefix + "setavatar")) {
  235. let args = message.content.split(" ");
  236. let botnameee = args.slice(1).join(" ");
  237. if (!message.member.hasPermission('MANAGE_GUILD'))
  238. return message.channel.send(
  239. `** :x: Only Owners Can Use this Command **`
  240. );
  241. if (!botnameee)
  242. return message.channel.send(
  243. `** :x: Please Provide me an avatar for the bot !**`
  244. );
  245. client.user.setAvatar(`${botnameee}`);
  246. message.channel.send(`Changing The bot's Avatar ...`).then(me => {
  247. me.edit(` Done !`);
  248. });
  249. }
  250. });
  251. client.login(process.env.token);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement