index.js 4.3 KB

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