Browse Source

Added god mode and leave command

Enrico 4 years ago
parent
commit
2742eb7afe
3 changed files with 45 additions and 32 deletions
  1. 3 2
      README.md
  2. 0 2
      config.json.example
  3. 42 28
      index.js

+ 3 - 2
README.md

@@ -28,13 +28,14 @@ The purpose of this bot is to dump the messages sent in a chat channel of discor
   |--|--|
   |`token`|Discord API bot token (found on the developer portal)|
   |`prefix`|The prefix that will be used to trigger commands|
-  |`servers`|Arrays of configured servers|
+  |`playing`|Sets the playing status|
+  |`godMode`|Array of user IDs who will be able to use the special commands|
+  |`servers`|Array of configured servers|
   |`servers.channel`|ID of Discord channel to listen to|
   |`servers.userMentionsMode`| Conversion settings for user mentions in Discord messages. 0 will set as the user ID, e.g. `@182925154211332097`. 1 will set as just the username, e.g. `@Owen`. 2 will set as just the in-server nickname, e.g. `@Not Owen`. 3 will set as the username + discriminator, e.g. `@Owen#1111` 4 will set as the user ID plus end marker, e.g. `@182925154211332097@`. 5 will set as just the username plus end marker, e.g. `@Owen@`. Anything else will set as just the in-server nickname plus end marker e.g. `@Not Owen@`.|
   |`servers.channelMentionsMode`| Conversion settings for channel mentions in Discord messages. 0 will set as the channel ID, e.g. `#224558110868635658`. 1 will set as the name, e.g. `#rules`. 2 will set the id in between two hastag, e.g. `#224558110868635658#`. Anything else will the channel name between two hastag, e.g. `#rules#`.|
   |`servers.roleMentionsMode`| Conversion settings for role mentions in Discord messages. 0 will set as the role ID, e.g. `&677081843086000128`. 1 will set as just the name of the role, e.g. `&foo`. Anything else will set as the name + color in hex, e.g. `&foo#ffffff`|
   |`servers.authorMode`|Conversion settings for the author of the message. 0 will set as the user ID, e.g. `@182925154211332097`. 1 will set as just the username, e.g. `@Owen`. 2 will set as the username + discriminator, e.g. `@Owen#1111`. Anything will set just the in-server nickname, e.g. `@Not Owen`.|
-  |`servers.allowDump`|Enables and disables the dump command (bolean)|
   |`servers.allowBots`|Filters bots messages if setted to false (bolean)|
   |`servers.prefix`(optional)|This sets a custom prefix for the channel for the dump command and overwrites the `prefix` on for that particular channel|
   |`servers.dbHost`|MySQL database host|

+ 0 - 2
config.json.example

@@ -10,9 +10,7 @@
 			"channelMentionsMode":"1",
 			"roleMentionsMode": "2",
 			"authorMode": "2",
-			"allowDump": true,
 			"allowBots": false,
-			"godMode": [],
 			"dbHost": "MYSQL_HOST",
 			"dbPort": "3306",
 			"dbUser": "MYSQL_USER",

+ 42 - 28
index.js

@@ -11,43 +11,54 @@ client.on('ready', () => {
 		client.user.setPresence({ status: 'online', game: { name: config.playing } });
 	}
 	console.log(getTimestamp(), `Logged in as ${client.user.tag}!`);
-	console.log(getTimestamp(), `To send missing messages run ${config.prefix}dump [quantity(default and limited to 99)]`);	
+	console.log(getTimestamp(), `To send missing messages run ${config.prefix}dump [quantity]`);	
 });
 
-client.on('message', message => {
+client.on('message', async message => {
 
-	
-	
 	var serverData = undefined;
 
-	config.servers.forEach(function(server) {
+	config.servers.forEach((server) => {
 		if (message.channel.id==server.channel) serverData = server;
 	});
 
-	if (serverData==undefined) return;
+	let godMode = config.godMode.includes(message.author.id);
+
+	if (serverData==undefined && !godMode) return;
 	
 	if (message.author.bot== true && serverData.allowBots != true) return;
 	
-	if (message.content.startsWith(`${serverData.prefix||config.prefix}ping`)) {
+	if (godMode && message.content.startsWith(`${(serverData||config).prefix}ping`)) {
 		message.channel.send('Pong! :ping_pong:');
 		return;
-	} else if (message.content.startsWith(`${serverData.prefix||config.prefix}dump`) && serverData.allowDump == true) {
+	} else if (godMode && message.content.startsWith(`${(serverData||config).prefix}dump`)) {
 		
 		console.log(getTimestamp(), 'Warning, dump in progress! May cause slowdows.');
 		
-		number = message.content.slice(6);
-		
-		if (number=='') number = 99;
+		let args = message.content.split(' ');
+
+		let channel = null;
+
+		try {
+			if (message.channel.id != args[1]) {
+				config.servers.forEach((server) => {
+					if (args[1]==server.channel) serverData = server;
+				});
+			}
+			channel = await client.channels.fetch(args[1]);
+		} catch (e) {
+			return;
+		}
+
+		number = Number(args[2]);
 		
 		//console.log(number);
 		
-		message.delete(2);
-		
-		var channel = message.channel;
+		message.delete({});
 		
-		async function run() {
-			var fetched = await channel.fetchMessages({limit: number});
-			//console.log(fetched);
+		async function run(last) {
+			var fetched = await channel.messages.fetch({limit: isNaN(number) ? 100 : Math.min(100, number), before: last}).then(res => res.array());
+			if (!isNaN(number)) number -= fetched.length;
 			
 			var connection = mysql.createConnection({
 				host     : serverData.dbHost,
@@ -70,7 +81,7 @@ client.on('message', message => {
 					controlled[i] = false;
 				}
 				
-				fetched.forEach(messageNow => {
+				fetched.forEach((messageNow) => {
 					
 					var found = false;
 					var edited = true;
@@ -98,17 +109,25 @@ client.on('message', message => {
 				});
 				//console.log(messages);
 				
-				while(true) {
-					break;
-				}
-				
-				sendLoop(messages, serverData, 1000);
+				sendLoop(messages, serverData, 100);
+				if (isNaN(number) || number >= 0) setTimeout(run, 10000, (fetched[fetched.length-1] || {id:null}).id);
 			});
 
 			connection.end();
 		}
 		
 		run();
+	} else if (godMode && message.content.startsWith(`${(serverData||config).prefix}leave`)) {
+		let args = message.content.split(' ');
+
+		let guild = await client.guilds.fetch(args[1]);
+
+		console.log(getTimestamp(), `Left guild "${guild.name}" id:${guild.id}`);
+
+		guild.leave();
+		return;
+	} else if (godMode && serverData == undefined) {
+		return;
 	} else {
 		sendToDB(message, serverData);
 	}
@@ -144,8 +163,6 @@ client.on('messageUpdate', async (messageOld, messageNew) => {
 	});
 
 	if (serverData==undefined) return;
-	
-	var channel = messageNew.channel;
 		
 	var connection = mysql.createConnection({
 		host     : serverData.dbHost,
@@ -227,7 +244,6 @@ async function updateDB(message, serverData) {
 
 	connection.query(sql, post, function (error, results, fields) {
 		if (error) throw error;
-		console.log(getTimestamp(), 'Data updated in db. Result: ', results);
 	});
 
 	connection.end();
@@ -249,7 +265,6 @@ async function sendToDB(message, serverData) {
 
 	connection.query(sql, post, function (error, results, fields) {
 		if (error) throw error;
-		console.log(getTimestamp(), 'Data sent to db. Result: ', results);
 	});
 
 	connection.end();
@@ -269,7 +284,6 @@ function deleteFromDB(message, serverData) {
 
 	connection.query(sql, function (error, results, fields) {
 		if (error) throw error;
-		console.log(getTimestamp(), 'Data deleted in db. Result: ', results);
 	});
 
 	connection.end();