mubot-server
Version:
A server for mubot
72 lines (71 loc) • 2.56 kB
JavaScript
// 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);