const Discord = require('discord.js');
const client = new Discord.Client();
const config = require("./config.json");
const random = require('random');
const fs = require('fs');
const jsonfile = require('jsonfile');
const bot = new Discord.Client();
client.on("ready", () => {
console.log(`Bot has started, with ${client.users.size} users, in ${client.channels.size} channels of ${client.guilds.size} guilds.`);
client.user.setActivity(`Serving ${client.guilds.size} servers`);
client.setInterval(() => {
for(let i in client.mutes) {
let time = client.mutes[i].time;
let guildID = client.mutes[i].guild;
let guild = bclient.guilds.get(guildId);
let mutedRole = guild.roles.find(r => r.name === "Muted");
if (!mutedRole) continue;
if (Date.now() > time) {
console.log(`${i}, may now be unmuted!`)
}
}
}, 5000)
});
client.on("guildCreate", guild => {
console.log(`New guild joined: ${guild.name} (id: ${guild.id}). This guild has ${guild.memberCount} members!`);
client.user.setActivity(`Serving ${client.guilds.size} servers`);
});
client.on("guildDelete", guild => {
console.log(`I have been removed from: ${guild.name} (id: ${guild.id})`);
client.user.setActivity(`Serving ${client.guilds.size} servers`);
});
client.on("message", async message => {
if(message.author.bot) return;
if(message.content.indexOf(config.prefix) !== 0) return;
const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
//PING
if(command === "ping") {
const m = await message.channel.send("Ping?");
m.edit(`Pong! Latency is ${m.createdTimestamp - message.createdTimestamp}ms. API Latency is ${Math.round(client.ping)}ms`);
}
//SAY
if(command === "say") {
if(!message.member.roles.some(r=>["Full Staff"].includes(r.name)) )
return message.reply("Sorry, you don't have permissions to use this!");
const sayMessage = args.join(" ");
message.delete().catch(O_o=>{});
message.channel.send(sayMessage);
}
//KICK
if(command === "kick") {
if(!message.member.roles.some(r=>["Full Staff"].includes(r.name)) )
return message.reply("Sorry, you don't have permissions to use this!");
let member = message.mentions.members.first() || message.guild.members.get(args[0]);
if(!member)
return message.reply("Please mention a valid member of this server");
if(!member.kickable)
return message.reply("I cannot kick this user! Do they have a higher role? Do I have kick permissions?");
let reason = args.slice(1).join(' ');
if(!reason) reason = "No reason provided";
await member.kick(reason)
.catch(error => message.reply(`Sorry ${message.author} I couldn't kick because of : ${error}`));
message.reply(`${member.user.tag} has been kicked by ${message.author.tag} because: ${reason}`);
}
//BAN
if(command === "ban") {
if(!message.member.roles.some(r=>["Full Staff"].includes(r.name)) )
return message.reply("Sorry, you don't have permissions to use this!");
let member = message.mentions.members.first();
if(!member)
return message.reply("Please mention a valid member of this server");
if(!member.bannable)
return message.reply("I cannot ban this user! Do they have a higher role? Do I have ban permissions?");
let reason = args.slice(1).join(' ');
if(!reason) reason = "No reason provided";
await member.ban(reason)
.catch(error => message.reply(`Sorry ${message.author} I couldn't ban because of : ${error}`));
message.reply(`${member.user.tag} has been banned by ${message.author.tag} because: ${reason}`);
}
//PURGE
if(command === "purge") {
if(!message.member.roles.some(r=>["Full Staff"].includes(r.name)) )
return message.reply("Sorry, you don't have permissions to use this!");
const deleteCount = parseInt(args[0], 10);
if(!deleteCount || deleteCount < 2 || deleteCount > 100)
return message.reply("Please provide a number between 2 and 100 for the number of messages to delete");
const fetched = await message.channel.fetchMessages({limit: deleteCount});
message.channel.bulkDelete(fetched)
.catch(error => message.reply(`Couldn't delete messages because of: ${error}`));
}
//MUTE
});
//Join Message
client.on('guildMemberAdd', member => {
const channel = member.guild.channels.find(ch => ch.name === 'welcome');
if (!channel) return;
channel.send(`${member} Welcome to the server! `);
});
//Leave message
client.on('guildMemberRemove', member => {
const channel = member.guild.channels.find(ch => ch.name === 'bye');
if (!channel) return;
channel.send(`${member} I miss you already! `);
});
//auto roles
client.on('guildMemberAdd', (guildMember) => {
guildMember.addRole(guildMember.guild.roles.find(role => role.name === "Member"));
});
//bot status
client.on("ready", () =>{
console.log(`Logged in as ${client.user.tag}!`);
client.user.setPresence({
status: "online", //You can show online, idle....
game: {
name: "Minecraft", //The message shown
type: "Playing" //PLAYING: WATCHING: LISTENING: STREAMING:
}
});
});
//Leveling
var stats = {};
if (fs.existsSync('stats.json')) {
stats = jsonfile.readFileSync('stats.json');
}
bot.on('message', (message) => {
if (message.author.id == bot.user.id)
return;
if (message.guild.id in stats === false) {
stats[message.guild.id] = {};
}
const guildStats = stats[message.guild.id];
if (message.author.id in guildStats === false) {
guildStats[message.author.id] = {
xp: 0,
level: 0,
last_message: 0
};
}
const userStats = guildStats[message.author.id];
if (Date.now() - userStats.last_message > 60000) {
userStats.xp += random.int(15, 25);
userStats.last_message = Date.now();
const xpToNextLevel = 5 * Math.pow(userStats.level, 2) + 50 * userStats.level + 100;
if (userStats.xp >= xpToNextLevel) {
userStats.level++;
userStats.xp = userStats.xp - xpToNextLevel;
message.channel.send(message.author + ' has reached level ' + userStats.level);
}
jsonfile.writeFileSync('stats.json', stats);
console.log(message.author.username + ' now has ' + userStats.xp);
console.log(xpToNextLevel + ' XP needed for next level.');
}
const parts = message.content.split(' ');
if(parts[0] === 'Hello') {
message.reply('Hi!');
}
if(parts[0] === 'Bye') {
message.reply('Cya!');
}
if(parts[0] === 'gn') {
message.reply('Night!');
}
if(parts[0] === 'gm') {
message.reply('Good morning!');
}
});
//Help command
bot.login('NzIxMDk1NjE1MzM3MDcwNjQy.XuP6UQ.rOkoeTkRK9yboUk-hOCB2Qr0r2I');
//away
client.mutes = require("./mutes.json");
client.login(config.token)