aboutsummaryrefslogtreecommitdiff
path: root/bot.js
blob: 9dfaa469287e0ca465c5613e7866406e5b969e1f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*********************************************
 * 
 *  DLMP3 Bot
 *  Programmed by Andrew Lee 
 * 
 *  (C) Copyright 2020
 *  Licensed with GPL-3.0
 * 
 *********************************************/
const Discord = require('discord.js');
const fs = require('fs');
const client = new Discord.Client();
const config = require('./config.json');
let dispatcher;
let audio;

client.login(config.token);

function playAudio() {
  const channel = client.channels.cache.get(config.voiceChannel);
  if (!channel) return console.error('The channel does not exist!');
  
  channel.join().then(connection => {
    let files = fs.readdirSync('./music');

    while (true) {
      audio = files[Math.floor(Math.random() * files.length)];
      console.log('Searching .mp3 file...');
      if (audio.endsWith('.mp3')) {
        break;
      }
    }

    dispatcher = connection.play('./music/' + audio);
    
    dispatcher.on('start', () => {
      console.log('Now playing ' + audio);
      let statusChannel = client.channels.cache.get(config.statusChannel);
      if (!statusChannel) return console.error('The channel does not exist!');
      statusChannel.send('**Music Bot Status:**\nNow playing ' + audio);
    });
    
    dispatcher.on('error', console.error);

    dispatcher.on('finish', () => {
      playAudio();
    });
    
  }).catch(e => {
    console.error(e);
  });
  
}
client.on('ready', () => {
  console.log('Bot is ready!');
  console.log(`Logged in as ${client.user.tag}!`);
  console.log(`Prefix: ${config.prefix}`);
  console.log(`Owner ID: ${config.botOwner}`);
  console.log(`Voice Channel: ${config.voiceChannel}`);
  console.log(`Status Channel: ${config.statusChannel}\n`);

  client.user.setStatus('invisible');
  console.log('Connected to the voice channel.');
  playAudio();
});

client.on('message', async msg => {
  if (msg.author.bot) return;
  if (!msg.guild) return;
  if (!msg.content.startsWith(config.prefix)) return;
  let command = msg.content.split(' ')[0];
  command = command.slice(config.prefix.length);

  // Public allowed commands

  if (command == 'help') {
    const helpEmbed = new Discord.MessageEmbed()
    .addField('Bot Help', `${config.prefix}help\n${config.prefix}ping\n${config.prefix}git\n${config.prefix}about`)
    .setFooter('© Copyright 2020, Andrew Lee. Licensed with GPL-3.0.')
    .setColor('#0066ff')

    msg.channel.send(helpEmbed);
  }

  if (command == 'ping') {
    msg.reply('Pong!');
  }

  if (command == 'git') {
    msg.reply('This is the source code of this project.\nhttps://github.com/Alee14/PJ2020-Discord-Bot');
  }
  
  if (command == 'about') {
    msg.channel.send('This bot was created by Andrew Lee. Written in Discord.JS and licensed with GPL-3.0.');
  }

  if (![config.botOwner].includes(msg.author.id)) return;

  // Bot owner exclusive

  if (command == 'join') {
    msg.reply('Joining voice channel.');
    console.log('Connected to the voice channel.');
    playAudio();
  }

  if (command == 'skip') {
    msg.reply('Skipping `' + audio + '`...');
    dispatcher.pause();
    dispatcher = null;
    playAudio();
  }

  if (command == 'leave') {
    const channel = client.channels.cache.get(config.voiceChannel);
    if (!channel) return console.error('The channel does not exist!');
    msg.reply('Leaving voice channel.');
    console.log('Leaving voice channel.');
    dispatcher.destroy();
    channel.leave();
  }

  if (command == 'stop') {
    await msg.reply('Powering off...');
    console.log('Powering off...');
    client.destroy();
    process.exit(0);
  }

});