Update SocialMediaBot.js

Reduced verbosity in logging to reduce memory consumption
Fixed logging of edited and deleted messages
Fixed broken Mixer logo on embeds
Added logging for when a member leaves a server
Removed unnecessary print() calls used for debugging
This commit is contained in:
Kalakoi
2019-07-23 13:19:57 -04:00
committed by GitHub
parent 50a7f888b7
commit f62cb17ac9

View File

@@ -25,15 +25,16 @@ function print(msg, err) {
var s = leadingZero(date.getSeconds()); var s = leadingZero(date.getSeconds());
var timestamp = "[" + h + ":" + m + ":" + s + "]"; var timestamp = "[" + h + ":" + m + ":" + s + "]";
console.log(timestamp, msg); if(msg) {
console.log(timestamp, msg);
newLog = {time: timestamp, message: msg}; //newLog = {time: timestamp, message: msg};
logs.push(newLog); //logs.push(newLog);
}
if(err) { if(err) {
console.log(err); console.log(timestamp, err);
errLog = {time: timestamp, message: err}; //errLog = {time: timestamp, message: err};
logs.push(errLog); //logs.push(errLog);
} }
} }
@@ -48,7 +49,10 @@ function indexOfObjectByName(array, value) {
function exitHandler(opt, err) { function exitHandler(opt, err) {
if(err) { if(err) {
print(err); print(`Exception: ${err}`);
print(`Message: ${err.message}`);
print(`File: ${err.fileName}`);
print(`Line: ${err.lineNumber}`);
} }
if(opt.save) { if(opt.save) {
print("Saving channels to " + channelPath + " before exiting"); print("Saving channels to " + channelPath + " before exiting");
@@ -66,7 +70,7 @@ function exitHandler(opt, err) {
process.on("exit", exitHandler.bind(null, {save:true})); process.on("exit", exitHandler.bind(null, {save:true}));
process.on("SIGINT", exitHandler.bind(null, {exit:true})); process.on("SIGINT", exitHandler.bind(null, {exit:true}));
process.on("SIGTERM", exitHandler.bind(null, {exit:true})); process.on("SIGTERM", exitHandler.bind(null, {exit:true}));
process.on("uncaughtException", exitHandler.bind(null, {exit:true})); process.on("uncaughtException", (err) => {exitHandler.bind(null, {exit:true}, err);});
function callTwitchApi(server, twitchChannel, callback, getStreamInfo) { function callTwitchApi(server, twitchChannel, callback, getStreamInfo) {
var opt; var opt;
@@ -533,15 +537,21 @@ function mixerApiCallback(server, mixerChannel, res) {
} }
var embed = new Discord.RichEmbed() var embed = new Discord.RichEmbed()
.setColor("#1fbaed") .setColor("#1fbaed")
.setAuthor(res.user.username, res.user.avatarUrl, "https://mixer.com/" + res.token)
.setTitle(res.name) .setTitle(res.name)
.setURL("https://mixer.com/" + res.token) .setURL("https://mixer.com/" + res.token)
.setDescription("**" + res.type.parent + "**\n" + res.type.name) .setDescription("**" + res.type.parent + "**\n" + res.type.name)
.setImage(res.type.backgroundUrl) .setImage(res.type.backgroundUrl)
.setThumbnail(res.thumbnail.url)
.addField("Followers", res.numFollowers, true) .addField("Followers", res.numFollowers, true)
.addField("Views", res.viewersTotal, true) .addField("Views", res.viewersTotal, true)
.setFooter("Mixer", "https://firebottle.tv/projects/mixiversary/images/logo-ball.png"); .setFooter("Mixer", "https://raw.githubusercontent.com/mixer/branding-kit/master/png/MixerMerge_Light.png");
if (res.thumbnail && res.thumbnail.url) {
embed.setThumbnail(res.thumbnail.url);
}
if (res.user.avatarUrl) {
embed.setAuthor(res.user.username, res.user.avatarUrl, "https://mixer.com/" + res.token);
} else {
embed.setAuthor(res.user.username, "", "https://mixer.com/" + res.token);
}
if(channels.length !== 0) { if(channels.length !== 0) {
for(let i = 0; i < channels.length; i++) { for(let i = 0; i < channels.length; i++) {
@@ -676,13 +686,8 @@ function sendBirthday(server, userInfo) {
} }
var embed = new Discord.RichEmbed() var embed = new Discord.RichEmbed()
//.setColor("#3b5998")
.setTitle("Happy Birthday!") .setTitle("Happy Birthday!")
//.setURL(res.link) .setDescription(birthdayMessage);
.setDescription(birthdayMessage)
//.setImage(res.cover.source)
//.setThumbnail(res.picture.data.url)
//.setFooter("Facebook", "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c2/F_icon.svg/200px-F_icon.svg.png");
if(channels.length !== 0) { if(channels.length !== 0) {
for(let i = 0; i < channels.length; i++) { for(let i = 0; i < channels.length; i++) {
@@ -705,7 +710,6 @@ function tick() {
let day = d.getDate(); let day = d.getDate();
let hour = d.getHours() + 1; let hour = d.getHours() + 1;
let sendBirthdays = false; let sendBirthdays = false;
//print("Checking if send");
if (hour < 12) { if (hour < 12) {
sentBirthdays = false; sentBirthdays = false;
sendBirthdays = false; sendBirthdays = false;
@@ -715,7 +719,6 @@ function tick() {
} else { } else {
sendBirthdays = false; sendBirthdays = false;
} }
//print("Enter Tick Loop");
for(let i = 0; i < servers.length; i++) { for(let i = 0; i < servers.length; i++) {
for(let k = -1; k < servers[i].discordChannels.length; k++) { for(let k = -1; k < servers[i].discordChannels.length; k++) {
for(let j = 0; j < servers[i].twitchChannels.length; j++) { for(let j = 0; j < servers[i].twitchChannels.length; j++) {
@@ -749,22 +752,18 @@ function tick() {
} }
} }
} }
//print("Start Birthday");
if (sendBirthdays) { if (sendBirthdays) {
//print("Enter For Loop");
for(let j = 0; j < servers[i].userInfos.length; j++) { for(let j = 0; j < servers[i].userInfos.length; j++) {
//print("Check Birthday");
if (servers[i].userInfos[j] && servers[i].userInfos[j].birthMonth == month && servers[i].userInfos[j].birthDay == day) { if (servers[i].userInfos[j] && servers[i].userInfos[j].birthMonth == month && servers[i].userInfos[j].birthDay == day) {
//print("Send Birthday Function");
sendBirthday(servers[i], servers[i].userInfos[j]); sendBirthday(servers[i], servers[i].userInfos[j]);
} }
} }
} }
} }
//print("End Tick"); print("End Tick");
} }
/*bot.on("messageDelete", (message) => { bot.on("messageDelete", (message) => {
var server; var server;
if(!message.guild){ if(!message.guild){
return; return;
@@ -781,11 +780,74 @@ function tick() {
} else { } else {
var guild = bot.guilds.find("name", server.name); var guild = bot.guilds.find("name", server.name);
var channel = guild.channels.find("name", server.logChannel); var channel = guild.channels.find("name", server.logChannel);
var msg = "Message Deleted" + "\nSent At: " + message.createdAt + "\nChannel: " + message.channel.name + "\nAuthor: " + message.author.tag + "\nMessage:\n" + message.content; var embed = new Discord.RichEmbed()
channel.send(msg); .setColor("#C70000")
.setTitle("Message Deleted");
if(message.channel.name) {
embed.addField("Channel", message.channel.name, false); }
if(message.author.tag) {
embed.addField("Author", message.author.tag, false); }
if(message.cleanContent) {
embed.addField("Message", message.cleanContent, false); }
channel.send(embed);
} }
} }
});*/ });
bot.on("guildMemberRemove", (member) => {
var server;
let index = indexOfObjectByName(servers, member.guild.name);
if(index == -1) {
return;
}
server = servers[index];
if(server.leavingChannel == ""){
return;
} else {
var guild = bot.guilds.find("name", server.name);
var channel = guild.channels.find("name", server.leavingChannel);
var embed = new Discord.RichEmbed()
.setColor("#C70000")
.setTitle("Member Left")
.addField("Member", member.displayName, false)
.addField("Tag", member.user.tag, false);
channel.send(embed);
}
});
bot.on("messageUpdate", (oldMessage, newMessage) => {
var server;
if(!oldMessage.guild){
return;
} else if(oldMessage.author.bot) {
return;
} else {
let index = indexOfObjectByName(servers, oldMessage.guild.name);
if(index == -1) {
return;
}
server = servers[index];
if(server.logChannel == "" || oldMessage.cleanContent == newMessage.cleanContent){
return;
} else {
var guild = bot.guilds.find("name", server.name);
var channel = guild.channels.find("name", server.logChannel);
var embed = new Discord.RichEmbed()
.setColor("#C70000");
if(newMessage.author.tag) {
embed.setTitle("Message Edited By: " + newMessage.author.tag);
} else {
embed.setTitle("Message Edited"); }
if(newMessage.channel.name) {
embed.addField("Channel", newMessage.channel.name, false); }
if(oldMessage.cleanContent) {
embed.addField("Old Message", oldMessage.cleanContent, false); }
if(newMessage.cleanContent) {
embed.addField("New Message", newMessage.cleanContent, false); }
channel.send(embed);
}
}
});
bot.on("message", (message) => { bot.on("message", (message) => {
var server, twitchChannels, twitterFeeds, youTubeChannels, blogSites, customLinks, mixerChannels, bannedWords, facebookPages, userInfos; var server, twitchChannels, twitterFeeds, youTubeChannels, blogSites, customLinks, mixerChannels, bannedWords, facebookPages, userInfos;
@@ -804,7 +866,8 @@ bot.on("message", (message) => {
youTubeChannels: [], blogSites: [], youTubeChannels: [], blogSites: [],
customLinks: [], mixerChannels: [], customLinks: [], mixerChannels: [],
bannedWords: [], facebookPages: [], bannedWords: [], facebookPages: [],
userInfos: [], logChannel: "" userInfos: [], logChannel: "",
leavingChannel: ""
}); });
index = servers.length - 1; index = servers.length - 1;
} }
@@ -851,7 +914,25 @@ bot.on("message", (message) => {
var tweeter; var tweeter;
var page; var page;
if (message.content.substring(1,5) == "info") { if (message.content.substring(1,5) == "roll") {
let numDice = message.content.slice(6).trim();
let replyMsg = "";
if (numDice == undefined || numDice == "") {
let diceRoll = Math.floor((Math.random() * 6) + 1);
let diceEmote = diceRoll + "die";
diceEmote = bot.emojis.find("name", diceEmote);
replyMsg += diceEmote.toString();
} else {
var numRolls = parseInt(numDice);
for (let a = 0; a < numRolls; a++) {
let diceRoll = Math.floor((Math.random() * 6) + 1);
let diceEmote = diceRoll + "die";
diceEmote = bot.emojis.find("name", diceEmote);
replyMsg += diceEmote.toString();
}
}
message.reply(replyMsg);
} else if (message.content.substring(1,5) == "info") {
var discordTag = message.author.id; var discordTag = message.author.id;
if (message.content.substring(6,9) == "set") { if (message.content.substring(6,9) == "set") {
var userInfo; var userInfo;
@@ -903,13 +984,10 @@ bot.on("message", (message) => {
if (index == -1) { if (index == -1) {
userInfos.push(userInfo); userInfos.push(userInfo);
} }
//message.reply("Successfully set " + message.content.substring(10,14).trim() + " for " + discordTag + ".");
} else if (message.content.substring(6,9) == "get") { } else if (message.content.substring(6,9) == "get") {
var tag = ""; var tag = "";
if (message.mentions.users.array().length > 0) { if (message.mentions.users.array().length > 0) {
let calledUser = message.mentions.users.first(); let calledUser = message.mentions.users.first();
//tag = calledUser.username + "#" + calledUser.discriminator;
tag = calledUser.id; tag = calledUser.id;
} else { } else {
//tag = message.content.slice(10).trim().replace("@",""); //tag = message.content.slice(10).trim().replace("@","");
@@ -935,7 +1013,6 @@ bot.on("message", (message) => {
var tag = ""; var tag = "";
if (message.mentions.users.array().length > 0) { if (message.mentions.users.array().length > 0) {
let calledUser = message.mentions.users.first(); let calledUser = message.mentions.users.first();
//tag = calledUser.username + "#" + calledUser.discriminator;
tag = calledUser.id; tag = calledUser.id;
} else { } else {
tag = message.content.slice(13).trim(); tag = message.content.slice(13).trim();
@@ -943,10 +1020,6 @@ bot.on("message", (message) => {
if (tag == undefined || tag == "") { if (tag == undefined || tag == "") {
tag = discordTag; tag = discordTag;
} }
/*let tag = message.content.slice(13).trim().replace("@","");
if (tag == "") {
tag = discordTag;
}*/
if (tag != discordTag && !permission) { if (tag != discordTag && !permission) {
message.reply("you're lacking the role _" + server.role + "_."); message.reply("you're lacking the role _" + server.role + "_.");
return; return;
@@ -1322,7 +1395,6 @@ bot.on("message", (message) => {
.setColor('GOLD') .setColor('GOLD')
.setTitle(bot.user.tag) .setTitle(bot.user.tag)
.setAuthor("KSI Discord Bot") .setAuthor("KSI Discord Bot")
//.setURL("https://discordapp.com/oauth2/authorize?client_id=335397266997248000&scope=bot")
.setURL("https://discordapp.com/oauth2/authorize?client_id=" + bot.user.id + "&scope=bot") .setURL("https://discordapp.com/oauth2/authorize?client_id=" + bot.user.id + "&scope=bot")
.setDescription("A custom made bot to help push social media updates and allows custom, easy-access links to be created.") .setDescription("A custom made bot to help push social media updates and allows custom, easy-access links to be created.")
.setThumbnail(bot.user.displayAvatarURL) .setThumbnail(bot.user.displayAvatarURL)
@@ -1419,16 +1491,26 @@ bot.on("message", (message) => {
} }
} else if(message.content.substring(11,14) == "log") { } else if(message.content.substring(11,14) == "log") {
let channel = message.content.substring(15); let channel = message.content.substring(15);
if(channel.replace(/\s/g, '').length === 0){ if(channel.replace(/\s/g, '').length === 0){
msg += "Please specify a channel name"; msg += "Please specify a channel name";
}else if(message.guild.channels.exists("name", channel)){ }else if(message.guild.channels.exists("name", channel)){
server.logChannel = channel; server.logChannel = channel;
msg += "Set " + channel + " as the log channel."; msg += "Set " + channel + " as the log channel.";
}else{ }else{
msg += channel + " is not a channel on this server."; msg += channel + " is not a channel on this server.";
} }
} else if(message.content.substring(11,18) == "banlist"){ } else if (message.content.substring(11,18) == "leaving"){
let channel = message.content.substring(19);
if(channel.replace(/\s/g, '').length === 0){
msg += "Please specify a channel name";
}else if(message.guild.channels.exists("name", channel)){
server.leavingChannel = channel;
msg += "Set " + channel + " as the log channel.";
}else{
msg += channel + " is not a channel on this server.";
}
} else if(message.content.substring(11,18) == "banlist"){
if(message.content.substring(19, 22) == "add"){ if(message.content.substring(19, 22) == "add"){
let word = message.content.substring(23); let word = message.content.substring(23);
server.bannedWords.push(word); server.bannedWords.push(word);
@@ -1535,6 +1617,8 @@ bot.on("message", (message) => {
" list List current configuration\n" + " list List current configuration\n" +
" prefix Character to use in front of commands\n" + " prefix Character to use in front of commands\n" +
" role Role permitting usage of add and remove options on commands\n" + " role Role permitting usage of add and remove options on commands\n" +
" log Set channel to post edited and deleted messages\n" +
" leaving Set channel to post whenever a member leaves the server\n" +
" channel Channel(s) to post in, empty list will use the first text channel\n" + " channel Channel(s) to post in, empty list will use the first text channel\n" +
" add Add a discord channel to post in\n" + " add Add a discord channel to post in\n" +
" remove Remove a discord channel from the list\n" + " remove Remove a discord channel from the list\n" +
@@ -1655,6 +1739,7 @@ bot.on("message", (message) => {
}); });
bot.on("ready", () => { bot.on("ready", () => {
print("Setting Rich Presence");
bot.user.setPresence({game:{name:"Knowledge, Strength, Integrity", type:"WATCHING"}}); bot.user.setPresence({game:{name:"Knowledge, Strength, Integrity", type:"WATCHING"}});
}); });
@@ -1667,6 +1752,11 @@ var settingsFile = fs.readFileSync(settingsPath, {encoding:"utf-8"});
settings = JSON.parse(settingsFile); settings = JSON.parse(settingsFile);
print("File read successfully."); print("File read successfully.");
print("Reading file " + channelPath + ".");
var channelsFile = fs.readFileSync(channelPath, {encoding:"utf-8"});
servers = JSON.parse(channelsFile);
print("File read successfully.");
bot.login(settings.token).then((token) => { bot.login(settings.token).then((token) => {
if(token) { if(token) {
print("Logged in as " + bot.user.tag); print("Logged in as " + bot.user.tag);
@@ -1687,11 +1777,23 @@ bot.login(settings.token).then((token) => {
print("Serving " + guildArray[i].name + " with " + guildArray[i].memberCount + " users"); print("Serving " + guildArray[i].name + " with " + guildArray[i].memberCount + " users");
} }
print(""); print("");
print("Reading file " + channelPath + ".");
var file = fs.readFileSync(channelPath, {encoding:"utf-8"}); print("Generating Message Cache");
servers = JSON.parse(file);
print("File read successfully."); guildArray.forEach(function(fguild) {
let channelArray = fguild.channels.array();
channelArray.forEach(function(fchannel) {
if (fchannel.type == "text") {
//print("Caching " + fchannel.name + " in " + fguild.name);
fchannel.fetchMessages({ limit: 50 })
.then(messages => print("Successfully cached " + messages.size + " from " + fchannel.name + " in " + fguild.name))
.catch(console.error);
}
});
});
print("Message Cache Generated Successfully");
tick(); tick();
setInterval(tick, settings.interval); setInterval(tick, settings.interval);
} else { } else {