2017-09-22 15:52:27 +03:30
|
|
|
'use strict';
|
|
|
|
|
2017-09-25 09:56:39 +03:30
|
|
|
// Utils
|
|
|
|
const { logError } = require('../utils/log');
|
|
|
|
|
2017-09-22 15:52:27 +03:30
|
|
|
const Datastore = require('nedb-promise');
|
|
|
|
|
|
|
|
const User = new Datastore({
|
|
|
|
autoload: true,
|
|
|
|
filename: 'data/User.db'
|
|
|
|
});
|
|
|
|
|
|
|
|
User.ensureIndex({
|
|
|
|
fieldName: 'id',
|
|
|
|
unique: true
|
|
|
|
});
|
|
|
|
|
2017-09-27 00:11:20 +03:30
|
|
|
User.ensureIndex({
|
|
|
|
fieldName: 'status',
|
|
|
|
});
|
|
|
|
|
2017-09-22 15:52:27 +03:30
|
|
|
const addUser = ({ id, first_name = '', last_name = '', username = '' }) =>
|
2017-09-27 00:11:20 +03:30
|
|
|
User.update(
|
|
|
|
{ id },
|
|
|
|
{ first_name, id, last_name, status: 'member', username, warns: [] },
|
|
|
|
{ upsert: true })
|
2017-09-25 09:56:39 +03:30
|
|
|
.catch(logError(process.env.DEBUG));
|
2017-09-22 15:52:27 +03:30
|
|
|
|
|
|
|
const isUser = ({ id }) =>
|
|
|
|
User.findOne({ id });
|
|
|
|
|
2017-09-27 00:11:20 +03:30
|
|
|
const getUser = user =>
|
2017-09-25 12:40:04 +03:30
|
|
|
User.findOne(user);
|
|
|
|
|
2017-09-27 00:11:20 +03:30
|
|
|
const admin = ({ id, first_name = '', last_name = '', username = '' }) =>
|
|
|
|
User.update(
|
|
|
|
{ id },
|
|
|
|
{ first_name, id, last_name, status: 'admin', username, warns: [] })
|
|
|
|
.catch(logError(process.env.DEBUG));
|
|
|
|
|
|
|
|
const getAdmins = () =>
|
|
|
|
User.find({ status: 'admin' });
|
|
|
|
|
|
|
|
const unadmin = ({ id }) =>
|
|
|
|
User.update({ id }, { $set: { status: 'member' } });
|
|
|
|
|
|
|
|
const isAdmin = ({ id }) =>
|
|
|
|
User.findOne({ id, status: 'admin' });
|
|
|
|
|
|
|
|
const ban = (userToBan, banReason) => {
|
|
|
|
const { id, first_name = '', last_name = '', username = '' } = userToBan;
|
|
|
|
const userObj = { first_name, id, last_name, username, warns: [] };
|
|
|
|
return User.findOne({ id })
|
|
|
|
.then(user => user
|
|
|
|
? User.update({ id }, { $set: { banReason, status: 'banned' } })
|
|
|
|
: User.update(
|
|
|
|
{ id },
|
|
|
|
Object.assign({}, userObj, { banReason, status: 'banned' }),
|
|
|
|
{ upsert: true }));
|
|
|
|
};
|
|
|
|
|
|
|
|
const unban = ({ id }) =>
|
|
|
|
User.update({ id }, { $set: { banReason: '', status: 'member' } });
|
|
|
|
|
|
|
|
const isBanned = ({ id }) =>
|
|
|
|
User.findOne({ id, status: 'banned' })
|
|
|
|
.then(user => user ? user.banReason : null);
|
|
|
|
|
2017-09-22 15:52:27 +03:30
|
|
|
module.exports = {
|
|
|
|
addUser,
|
2017-09-27 00:11:20 +03:30
|
|
|
admin,
|
|
|
|
ban,
|
|
|
|
getAdmins,
|
2017-09-25 12:40:04 +03:30
|
|
|
getUser,
|
2017-09-27 00:11:20 +03:30
|
|
|
isAdmin,
|
|
|
|
isBanned,
|
|
|
|
isUser,
|
|
|
|
unadmin,
|
|
|
|
unban
|
2017-09-22 15:52:27 +03:30
|
|
|
};
|