UNPKG

mubot-server

Version:
72 lines (71 loc) 2.56 kB
// Description: // Logs all messages and pretty prints them in html with express using mubot's server. // // Author: // leathan // (function(){ const mongoose = require('mongoose'); mongoose.Promise = global.Promise; mongoose.connect('mongodb://localhost/bitmark-api', { useMongoClient: true }) .then(() => console.log('[MONGOOSE] Connection succesful.')) .catch((err) => console.error("[MONGOOSE ERROR] " + err)); // Set up database. const LogsSchema = new mongoose.Schema({ "date": { type: Date, default: Date.now }, "author": String, "message": String, "channel": String, "server": String, }, { id: false }); // Instruct this schema to ifgnore mongoose hidden fields. LogsSchema.set('toJSON', { transform: (doc, ret, options) => { delete ret._id; delete ret.__v; return ret; } }); // Beautiful hack to allow hotreloading when models already exists. const Logs = mongoose.models.Logs || mongoose.model('Logs', LogsSchema) // Debug awesomeness //global.obj = global.obj || {} //global.obj.r = [] // MAIN module.exports = (robot) => { robot.hear(/.*/, r => { //global.obj.r[global.obj.r.length] = r // Debug awesomeness var message, channel, server, author, client; client = robot.adapter.client; author = r.message.user.name if(robot.adapterName === 'discord') { message = r.message.text.replace(/<@!?(\d{18})>/, (_, match1) => { var id = robot.brain.userForId(match1); if(id == null) return; if(id.name === robot.client.user.id) return '@'+robot.name; return '@'+id.name; }) let obj = client.channels.find('id', r.message.room) if(obj.type === 'dm') return; // Don't log private messages. channel = obj.name server = obj.guild.name } else if(robot.adapterName === 'slack') { channel = client.rtm.dataStore.getChannelGroupOrDMById(r.message.room).name if(channel === 'DM') return; // Don't log private messages. message = r.message.text; var user = client.rtm.dataStore.getUserByName(r.message.user.name) if(typeof user == 'undefined') return // No username attached to message. server = client.rtm.dataStore.getTeamById(user.team_id).name } var log = { date: new Date(), author: author, message: message, channel: channel, server: server } Logs.create(log, (err, log) => { if(err) console.log(err); }) }) robot.router.get("/api/logs", (req, res) => { Logs.find((err, logs) => { if (err) return next(err); res.json(logs); }); }); } }).call(this);