Advertisement
IT2Game

Untitled

Dec 16th, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const Discord = require('discord.js');
  2. const express = require('express');
  3. const winston = require('winston');
  4. const path = require('path');
  5. const url = require('url');
  6. const request = require('request');
  7. const fs = require('fs');
  8. var admin_ids = [
  9.     '289768005448237057'
  10. ];
  11. var app = express();    // initialisize express
  12. app.set('views', path.join(__dirname, 'views'))
  13. app.set('view engine','pug');
  14. var entrys = JSON.parse(fs.readFileSync(path.join(__dirname, 'saves/entrys.json'),'utf-8'));
  15. var lastID = 0;
  16. // read command list
  17. const commands = require('./commands'); //TODO: replace with fs
  18. //gets the http body from url
  19. function getBodyFromURL(uri, callback){
  20.     request(uri.toString(), (error, response, body)=>{
  21.         if(!error && response.statusCode == 200)
  22.             callback(body);
  23.         else
  24.             callback(null);
  25.     });
  26. }
  27.  
  28. var config = JSON.parse(fs.readFileSync('config.json', 'utf-8')); // load config
  29. var client = new Discord.Client();  // init discord bot user
  30.  
  31. console.log(config);
  32.  
  33. var bot_msg = null;
  34.  
  35. client.on('ready', ()=>winston.log('info','discord client is ready!'));
  36. client.on('message',(msg)=>{
  37.     if(msg.author.id == '391255226528563202' && msg.channel.id == '369501028695015444'){
  38.         if(bot_msg != null){
  39.             bot_msg.delete();
  40.         }
  41.         bot_msg = msg;
  42.     }
  43.     if(msg.author.bot) return; // returns if user is bot
  44.     var isMember = false;
  45.     var isAdmin = false;
  46.     for(let i = 0; i < config.cp_ids.length; i++){
  47.         if(msg.author.id == config.cp_ids[i]){
  48.             isAdmin =  true;
  49.             break;
  50.         }
  51.     }
  52.     for(let i = 0; i < config.cp_ids.length; i++){
  53.         if(msg.member.roles.get(config.cp_roles[i])){
  54.             isAdmin =  true;
  55.             break;
  56.         }
  57.     }
  58.     for(let i = 0; i < config.admin_ids.length; i++){
  59.         if(msg.author.id == config.admin_ids[i]){
  60.             isAdmin =  true;
  61.             break;
  62.         }
  63.     }
  64.  
  65.     if(isMember || isAdmin){
  66.         var api_url = new url.URL('http://127.0.0.1:3000/'); // url for the api
  67.         if(commands.help.regex.test(msg.content)){ // help command
  68.             api_url.pathname = commands.help.pathname;  // load pathname from commandlist
  69.             getBodyFromURL(api_url, (embed)=>{ // load body from api command help
  70.                 msg.author.sendEmbed(JSON.parse(embed)); // send the embed to discord
  71.             });
  72.         }
  73.         else if(commands.add.regex.test(msg.content)){ // add command
  74.             while(entrys[lastID] != null || entrys[lastID] != undefined){ // go foward if needed
  75.                 lastID += 1;
  76.             }
  77.    
  78.             var text =  '';
  79.             for(let i = 0;  i < msg.content.length; i++){
  80.                 if(msg.content[i] == '"'){
  81.                     while(msg.content[++i] != '"' && i < msg.content.length){
  82.                         text += msg.content[i];
  83.                     }
  84.                 }
  85.             }
  86.    
  87.             if(text){
  88.                 entrys.push({
  89.                     content: text,
  90.                     author: msg.author.tag
  91.                 });
  92.    
  93.                 //@ts-ignore
  94.                 fs.writeFileSync(path.join(__dirname, 'saves/entrys.json'), JSON.stringify(entrys, null, 4));
  95.                 //@ts-ignore
  96.                 var outputmsg = '';
  97.                 for(let i = 0; i < entrys.length; i++){
  98.                     outputmsg+=`**$${i}** *${entrys[i].content}* - ${entrys[i].author}\n`;
  99.                 }
  100.                 setTimeout(()=>client.channels.get(config.target_channel).send(outputmsg), 500);
  101.             }else{
  102.                 var embed = new Discord.RichEmbed()
  103.                     .addField(commands.add.command, commands.add.description)
  104.                     .setColor(config.embed_color);
  105.                 msg.author.sendEmbed(embed);
  106.             }
  107.             msg.delete();
  108.         }else if(commands.start.regex.test(msg.content) && msg.author.id == '289768005448237057'){
  109.             //@ts-ignore
  110.             client.channels.get(config.target_channel).send('Post liste auf: http://134.255.220.72:3000/entrys\nLater visible in this Channel');
  111.             msg.delete();
  112.         }else if(commands.reset.regex.test(msg.content) && msg.author.id == '289768005448237057'){
  113.             entrys = [];
  114.             fs.writeFileSync(path.join(__dirname, 'saves/entrys.json'), '[]');
  115.             var outputmsg = '';
  116.             for(let i = 0; i < entrys.length; i++){
  117.                 outputmsg+=`**$${i}** *${entrys[i].content}* - ${entrys[i].author}\n`;
  118.             }
  119.             //@ts-ignore
  120.             setTimeout(()=>client.channels.get(config.target_channel).send(outputmsg), 500);
  121.             msg.delete();
  122.         }else if(commands.roleadd.regex.test(msg.content)&& isAdmin){
  123.             var text =  '';
  124.             for(let i = 0;  i < msg.content.length; i++){
  125.                 if(msg.content[i] == '"'){
  126.                     while(msg.content[++i] != '"' && i < msg.content.length){
  127.                         text += msg.content[i];
  128.                     }
  129.                 }
  130.             }
  131.             config.cp_roles.push(text);
  132.             fs.writeFileSync('config.json', JSON.stringify(config, null, 4));
  133.         }else if(commands.useradd.regex.test(msg.content)&& isAdmin){
  134.             var text =  '';
  135.             for(let i = 0;  i < msg.content.length; i++){
  136.                 if(msg.content[i] == '"'){
  137.                     while(msg.content[++i] != '"' && i < msg.content.length){
  138.                         text += msg.content[i];
  139.                     }
  140.                 }
  141.             }
  142.             config.cp_ids.push(text);
  143.             fs.writeFileSync('config.json', JSON.stringify(config, null, 4));
  144.         }else if(commands.del.regex.test(msg.content)){
  145.             var text =  '';
  146.             for(let i = 0;  i < msg.content.length; i++){
  147.                 if(msg.content[i] == '"'){
  148.                     while(msg.content[++i] != '"' && i < msg.content.length){
  149.                         text += msg.content[i];
  150.                     }
  151.                 }
  152.             }
  153.             if(parseInt(text) < entrys.length && parseInt(text) >= 0)
  154.                 entrys.splice(parseInt(text), 1);
  155.  
  156.                 var outputmsg = '';
  157.                 for(let i = 0; i < entrys.length; i++){
  158.                     outputmsg+=`**$${i}** *${entrys[i].content}* - ${entrys[i].author}\n`;
  159.                 }
  160.             //@ts-ignore
  161.             setTimeout(()=>client.channels.get(config.target_channel).send(outputmsg), 500);
  162.         }
  163.     }
  164. });
  165.  
  166. app.get('/api/entrys', (req, res)=>{
  167.     res.send(entrys);
  168. });
  169.  
  170. app.get('/api/ids/users', (req, res)=>{
  171.     res.send(config.cp_ids);
  172. });
  173.  
  174. app.get('/api/ids/user/roles', (req, res)=>{
  175.     res.send(config.cp_roles);
  176. });
  177.  
  178. app.get('/api/ids/admins', (req, res)=>{
  179.     res.send(config.admin_ids);
  180. });
  181.  
  182. app.get('/api/ids/admin/roles', (req, res)=>{
  183.     res.send(config.admin_roles);
  184. });
  185.  
  186. // api entry for help command
  187. const help = require('./routes/help');
  188. app.use('/api/help', help);
  189.  
  190. const entry_route = require('./routes/entrys');
  191. app.use('/entrys', entry_route);
  192.  
  193. // catch 404 and forward to error handler
  194. app.use(function (req, res, next) {
  195.     var err = new Error('Not Found');
  196.     //@ts-ignore
  197.     err.status = 404;
  198.     next(err);
  199. });
  200.  
  201. // development error handler
  202. if (app.get('env') === 'development') {
  203.     app.use(function (err, req, res, next) {
  204.         res.status(err.status || 500);
  205.         res.render('error', {
  206.             content: err.message,
  207.             error: err
  208.         });
  209.     });
  210. }
  211.  
  212. // production error handler
  213. // no stacktraces leaked to user
  214. app.use(function (err, req, res, next) {
  215.     res.status(err.status || 500);
  216.     res.render('error', {
  217.         message: err.message,
  218.         error: {}
  219.     });
  220. });
  221.  
  222. app.set('port', process.env.PORT || 3000);
  223.  
  224. var server = app.listen(app.get('port'), function () {
  225.     winston.log('info','Express server listening on port ' + server.address().port);
  226. });
  227.  
  228. client.login(config.token);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement