index.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. const Discord = require('discord.js');
  2. const client = new Discord.Client();
  3. const config = require('./config.json');
  4. var mysql = require('mysql');
  5. var urlRegex = /^(ftp|http|https):\/\/[^ "]+$/;
  6. client.on('ready', () => {
  7. console.log(`Logged in as ${client.user.tag}!`);
  8. console.log(`To send missing messages run ${config.prefix}dump`);
  9. });
  10. client.on('message', message => {
  11. if (message.author.bot==true) return;
  12. var serverData = undefined;
  13. config.servers.forEach(function(server) {
  14. if (message.channel.id==server.channel) serverData = server;
  15. });
  16. if (serverData==undefined) return;
  17. if (message.content.startsWith(`${config.prefix}dump`)) {
  18. console.log('Warning, dump in progress! May cause slowdows.');
  19. message.delete(2);
  20. var channel = message.channel;
  21. async function run() {
  22. var fetched = await channel.fetchMessages({limit: 99});
  23. //console.log(fetched);
  24. var connection = mysql.createConnection({
  25. host : serverData.dbHost,
  26. user : serverData.dbUser,
  27. password : serverData.dbPassword,
  28. database : serverData.db
  29. });
  30. var sql = 'SELECT * FROM `messages`';
  31. connection.connect();
  32. connection.query(sql, function (error, results, fields) {
  33. if (error) throw error;
  34. console.log('Data recived from db. Result: ', results);
  35. var messages = [];
  36. fetched.forEach(messageNow => {
  37. var found = null;
  38. results.forEach(function (msg){
  39. if (messageNow.id == msg.Id || messageNow.id == message.id) {
  40. found = 'yep';
  41. }
  42. });
  43. if (found==null) {
  44. messages.push(message);
  45. }
  46. });
  47. sendLoop(messages, serverData, 1000);
  48. });
  49. connection.end();
  50. }
  51. run();
  52. } else {
  53. sendToDB(message, serverData);
  54. }
  55. });
  56. client.login(config.token);
  57. function sendLoop(messages, serverData, delay) {
  58. if (messages.length == 0) {
  59. return;
  60. }
  61. sendToDB(messages[0], serverData);
  62. messages.shift();
  63. setTimeout(sendLoop, delay, messages, serverData, delay);
  64. }
  65. function sendToDB(message, serverData) {
  66. var connection = mysql.createConnection({
  67. host : serverData.dbHost,
  68. user : serverData.dbUser,
  69. password : serverData.dbPassword,
  70. database : serverData.db
  71. });
  72. var l = [];
  73. var msgCopy = message.content;
  74. msgCopy.replace(urlRegex, function(url) {
  75. l.push(url);
  76. });
  77. var i = [];
  78. message.attachments.forEach(attachment => {
  79. i.push(attachment.url);
  80. });
  81. var mentions = [];
  82. message.mentions.users.forEach(user => {
  83. mentions.push({"userId": user.id, "username": user.username, "discriminator": user.discriminator});
  84. });
  85. var messageContent = message.content;
  86. for (mention of mentions) {
  87. if(messageContent.includes(mention.userId)) {
  88. if (serverData.mentionsMode == 0) {
  89. messageContent = messageContent.replace(new RegExp("<@"+mention.userId+">", 'g'), "@"+mention.userId);
  90. messageContent = messageContent.replace(new RegExp("<@!"+mention.userId+">", 'g'), "@"+mention.userId);
  91. } else if (serverData.mentionsMode == 1) {
  92. messageContent = messageContent.replace(new RegExp("<@"+mention.userId+">", 'g'), "@"+mention.username);
  93. messageContent = messageContent.replace(new RegExp("<@!"+mention.userId+">", 'g'), "@"+mention.username);
  94. } else {
  95. messageContent = messageContent.replace(new RegExp("<@"+mention.userId+">", 'g'), "@"+mention.username+"#"+mention.discriminator);
  96. messageContent = messageContent.replace(new RegExp("<@!"+mention.userId+">", 'g'), "@"+mention.username+"#"+mention.discriminator);
  97. }
  98. }
  99. }
  100. if (serverData.authorMode == 0) {
  101. var author = message.author.id;
  102. } else if (serverData.authorMode == 1) {
  103. var author = message.author.username;
  104. } else {
  105. var author = message.author.tag;
  106. }
  107. var post = {message:messageContent, id:message.id, time:message.createdTimestamp, user:author, links:JSON.stringify(l), images:JSON.stringify(i)};
  108. var sql = 'INSERT INTO '+serverData.dbTable+' SET ?';
  109. connection.connect();
  110. connection.query(sql, post, function (error, results, fields) {
  111. if (error) throw error;
  112. console.log('Data sent to db. Result: ', results);
  113. });
  114. connection.end();
  115. }