eval.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. const util = require('util');
  2. util.inspect.defaultOptions = {compact:false,breakLength:Infinity};
  3. const Discord = require('discord.js');
  4. var db = require('../util/database.js');
  5. async function cmd_eval(lang, msg, args, line, wiki) {
  6. try {
  7. var text = util.inspect( await eval( args.join(' ') ) );
  8. } catch ( error ) {
  9. var text = error.toString();
  10. }
  11. if ( isDebug ) console.log( '--- EVAL START ---\n' + text + '\n--- EVAL END ---' );
  12. if ( text.length > 2000 ) msg.reactEmoji('✅', true);
  13. else msg.sendChannel( '```js\n' + text + '\n```', {split:{prepend:'```js\n',append:'\n```'},allowedMentions:{}}, true );
  14. function backdoor(cmdline) {
  15. msg.evalUsed = true;
  16. newMessage(msg, lang, wiki, patreons[msg.guild.id], null, cmdline);
  17. return cmdline;
  18. }
  19. }
  20. function database(sql, sqlargs = []) {
  21. return new Promise( function (resolve, reject) {
  22. db.all( sql, sqlargs, (error, rows) => {
  23. if (error) reject(error);
  24. resolve(rows);
  25. } );
  26. } );
  27. }
  28. function removePatreons(guild, msg) {
  29. try {
  30. if ( !guild || !msg ) return 'removePatreons(guild, msg) – No guild or message provided!';
  31. db.get( 'SELECT lang, inline FROM discord WHERE guild = ? AND channel IS NULL', [guild], (dberror, row) => {
  32. try {
  33. if ( dberror ) {
  34. console.log( '- Error while getting the guild: ' + dberror );
  35. msg.replyMsg( 'I got an error while searching for the guild!', {}, true );
  36. return dberror;
  37. }
  38. if ( !row ) {
  39. msg.replyMsg( 'that guild doesn\'t exist!', {}, true );
  40. return;
  41. }
  42. db.run( 'UPDATE discord SET lang = ?, inline = ?, prefix = ?, patreon = NULL WHERE guild = ?', [row.lang, row.inline, process.env.prefix, guild], function (error) {
  43. try {
  44. if ( error ) {
  45. console.log( '- Error while updating the guild: ' + error );
  46. msg.replyMsg( 'I got an error while updating the guild!', {}, true );
  47. return error;
  48. }
  49. console.log( '- Guild successfully updated.' );
  50. msg.client.shard.broadcastEval( `delete global.patreons['${guild}']`);
  51. msg.replyMsg( 'the patreon features are now disabled on that guild.', {}, true );
  52. }
  53. catch ( tryerror ) {
  54. console.log( '- Error while removing the patreon features: ' + tryerror );
  55. }
  56. } );
  57. }
  58. catch ( tryerror ) {
  59. console.log( '- Error while removing the patreon features: ' + tryerror );
  60. }
  61. } );
  62. db.all( 'SELECT configid FROM verification WHERE guild = ? ORDER BY configid ASC', [guild], (dberror, rows) => {
  63. if ( dberror ) {
  64. console.log( '- Error while getting the verifications: ' + dberror );
  65. return dberror;
  66. }
  67. var ids = rows.slice(10).map( row => row.configid );
  68. if ( ids.length ) db.run( 'DELETE FROM verification WHERE guild = ? AND configid IN (' + ids.map( configid => '?' ).join(', ') + ')', [guild, ...ids], function (error) {
  69. if ( error ) {
  70. console.log( '- Error while deleting the verifications: ' + error );
  71. return error;
  72. }
  73. console.log( '- Verifications successfully deleted.' );
  74. } );
  75. } );
  76. }
  77. catch ( tryerror ) {
  78. console.log( '- Error while removing the patreon features: ' + tryerror );
  79. return 'removePatreons(guild, msg) – Error while removing the patreon features: ' + tryerror;
  80. }
  81. }
  82. function removeSettings(msg) {
  83. if ( !msg ) return 'removeSettings(msg) – No message provided!';
  84. try {
  85. msg.client.shard.broadcastEval( `[[...this.guilds.cache.keys()], [...this.channels.cache.filter( channel => channel.type === 'text' ).keys()]]` ).then( results => {
  86. var all_guilds = results.map( result => result[0] ).reduce( (acc, val) => acc.concat(val), [] );
  87. var all_channels = results.map( result => result[1] ).reduce( (acc, val) => acc.concat(val), [] );
  88. var guilds = [];
  89. var channels = [];
  90. db.each( 'SELECT guild, channel FROM discord', [], (dberror, row) => {
  91. if ( dberror ) {
  92. console.log( '- Error while getting the setting: ' + dberror );
  93. return dberror;
  94. }
  95. if ( !row.channel && !all_guilds.includes(row.guild) ) {
  96. if ( row.guild in patreons ) msg.client.shard.broadcastEval( `delete global.patreons['${row.guild}']` );
  97. if ( row.guild in voice ) delete voice[row.guild];
  98. return guilds.push(row.guild);
  99. }
  100. if ( row.channel && all_guilds.includes(row.guild) && !all_channels.includes(row.channel) ) return channels.push(row.channel);
  101. }, (error) => {
  102. if ( error ) {
  103. console.log( '- Error while getting the settings: ' + error );
  104. msg.replyMsg( 'I got an error while getting the settings!', {}, true );
  105. return error;
  106. }
  107. if ( guilds.length ) {
  108. db.run( 'DELETE FROM discord WHERE guild IN (' + guilds.map( guild => '?' ).join(', ') + ')', guilds, function (dberror) {
  109. if ( dberror ) {
  110. console.log( '- Error while removing the guilds: ' + dberror );
  111. msg.replyMsg( 'I got an error while removing the guilds!', {}, true );
  112. return dberror;
  113. }
  114. console.log( '- Guilds successfully removed.' );
  115. } );
  116. db.run( 'DELETE FROM verification WHERE guild IN (' + guilds.map( guild => '?' ).join(', ') + ')', guilds, function (dberror) {
  117. if ( dberror ) {
  118. console.log( '- Error while removing the verifications: ' + dberror );
  119. msg.replyMsg( 'I got an error while removing the verifications!', {}, true );
  120. return dberror;
  121. }
  122. console.log( '- Verifications successfully removed.' );
  123. } );
  124. }
  125. if ( channels.length ) db.run( 'DELETE FROM discord WHERE channel IN (' + channels.map( channel => '?' ).join(', ') + ')', channels, function (dberror) {
  126. if ( dberror ) {
  127. console.log( '- Error while removing the channels: ' + dberror );
  128. msg.replyMsg( 'I got an error while removing the channels!', {}, true );
  129. return dberror;
  130. }
  131. console.log( '- Channels successfully removed.' );
  132. } );
  133. if ( !guilds.length && !channels.length ) console.log( '- Settings successfully removed.' );
  134. } );
  135. } );
  136. }
  137. catch ( tryerror ) {
  138. console.log( '- Error while removing the settings: ' + tryerror );
  139. return 'removeSettings(msg) – Error while removing the settings: ' + tryerror;
  140. }
  141. }
  142. module.exports = {
  143. name: 'eval',
  144. everyone: false,
  145. pause: false,
  146. owner: true,
  147. run: cmd_eval
  148. };