UNPKG

d-bot

Version:

A quirky Discord bot made for single, small, private servers

56 lines (52 loc) 2.15 kB
// Message database var util = require(__base+'core/util.js'); var discord = require('./discord.js'); var storage = require('./storage.js'); var config = require('./config.js'); let db; storage.nedb('messages', [{ fieldName: 'id', unique: true }, { fieldName: 'time' }]).then(d => { db = d; module.exports.db = db; }); async function cursor(command) { if(!db) return; try { let results = await command(db).exec(); if(!results || results.length === 0) return false; return results; } catch(err) { console.log(err); discord.pmOwner(`A message database error occurred while executing a command\n\`${err.message}\``); } } module.exports = { cursor, logMessage: async message => { if(message.content === '' && message.attachments.length === 0) return; // Don't log empty messages if(config.noLogServers.includes(message.channel.guild.id)) return; // Don't log this server if(config.noLogChannels.includes(message.channel.id)) return; // Don't log this channel try { db.insert({ id: message.id, user: message.author.id, channel: message.channel.id, content: message.content, time: message.timestamp, attachments: message.attachments.length > 0 ? message.attachments.map(a => ({ url: a.url, filename: a.filename })) : undefined }); } catch(err) { console.log('Error logging message:', err); } }, getRandomWord: async function() { let allMessages = await cursor(db => db.cfind({ content: util.matchWordsRX })); if(!allMessages) return ''; allMessages = allMessages.map(msg => msg.content); var attempts = 0; do { attempts++; var randomMessage = util.pickInArray(allMessages); var randomWord = util.pickInArray(util.getRegExpMatches(randomMessage, util.matchWordsRX)); } while(!util.matchWordsRX.test(randomWord) && attempts < 1000); return randomWord; } };