Browse Source

Added dump function

Leone25 5 years ago
parent
commit
902b870c1d
2 changed files with 82 additions and 12 deletions
  1. 1 0
      config.json.example
  2. 81 12
      index.js

+ 1 - 0
config.json.example

@@ -1,5 +1,6 @@
 {
 	"token": "DISCORD_TOKEN",
+	"prefix": "!",
 	"servers": [
 		{
 			"channel": "DISCORD_CHANNEL",

+ 81 - 12
index.js

@@ -7,12 +7,13 @@ var urlRegex = /^(ftp|http|https):\/\/[^ "]+$/;
 
 client.on('ready', () => {
 	console.log(`Logged in as ${client.user.tag}!`);
+	console.log(`To send missing messages run ${config.prefix}dump`);	
 });
 
 client.on('message', message => {
 
 	if (message.author.bot==true) return;
-
+	
 	var serverData = undefined;
 
 	config.servers.forEach(function(server) {
@@ -20,7 +21,84 @@ client.on('message', message => {
 	});
 
 	if (serverData==undefined) return;
+	
+	if (message.content.startsWith(`${config.prefix}dump`)) {
+		console.log('Warning, dump in progress! May cause slowdows.');
+		
+		message.delete(2);
+		
+		var channel = message.channel;
+		
+		async function run() {
+			var fetched = await channel.fetchMessages({limit: 99});
+			//console.log(fetched);
+			
+			var connection = mysql.createConnection({
+				host     : serverData.dbHost,
+				user     : serverData.dbUser,
+				password : serverData.dbPassword,
+				database : serverData.db
+			});
+			
+			var sql = 'SELECT * FROM `messages`';
+			connection.connect();
+
+			connection.query(sql, function (error, results, fields) {
+				if (error) throw error;
+				console.log('Data recived from db. Result: ', results);
+				var messages = [];
+				fetched.forEach(messageNow => {
+					
+					var found = null;
+					
+					results.forEach(function (msg){
+						if (messageNow.id == msg.Id || messageNow.id == message.id) {
+							found = 'yep';
+						}
+					});
+					
+					if (found==null) {
+						messages.push(message);
+					}
+				});
+				sendLoop(messages, serverData, 1000);
+			});
+
+			connection.end();
+		}
+		
+		run();
+	} else {
+		sendToDB(message, serverData);
+	}
+
+});
+
+client.login(config.token);
 
+function sendLoop(messages, serverData, delay) {
+	
+	if (messages.length == 0) {
+		return;
+	}
+	
+	sendToDB(messages[0], serverData);
+	
+	messages.shift();
+	
+	setTimeout(sendLoop, delay, messages, serverData, delay);
+	
+}
+
+function sendToDB(message, serverData) {
+	
+	var connection = mysql.createConnection({
+		host     : serverData.dbHost,
+		user     : serverData.dbUser,
+		password : serverData.dbPassword,
+		database : serverData.db
+	});
+	
 	var l = [];
 
 	var msgCopy = message.content;
@@ -35,12 +113,7 @@ client.on('message', message => {
 		i.push(attachment.url);
 	});
 
-	var connection = mysql.createConnection({
-		host     : serverData.dbHost,
-		user     : serverData.dbUser,
-		password : serverData.dbPassword,
-		database : serverData.db
-	});
+	
 
 	var mentions = [];
 	message.mentions.users.forEach(user => {
@@ -81,8 +154,4 @@ client.on('message', message => {
 	});
 
 	connection.end();
-
-
-});
-
-client.login(config.token);
+}