dbot/modules-stock/todo/todo.js
Georg 70a21d2b18
Signed-off-by: Georg <georg@lysergic.dev>
Init

- Initial fixes in modules
- Bundled adapted jsbot
- Elaborative README.md
2021-08-24 21:16:26 +02:00

87 lines
2.7 KiB
JavaScript

var _ = require('underscore')._;
var todo = function(dbot) {
if(!_.has(dbot.db, 'todos')) {
dbot.db.todos = {};
}
var todos = dbot.db.todos;
this.api = {
'getTodos': user =>
_.has(todos,user) ? todos[user] : [],
'addTodo': (user, entry) => {
if (!_.has(todos,user)) {
todos[user] = [];
}
todos[user].push(entry);
return todos[user].length;
},
// entryNum is 1-based
// if entryNum is falsy then this will return a random todo.
'getTodo': (user, entryNum) => {
if (!_.has(todos,user)) return false;
if (!entryNum) {
entryNum = Math.floor(Math.random() * todos[user].length) + 1;
}
if (entryNum > todos[user].length) return false;
if(entryNum < 1) return false;
return {
todoNum: entryNum,
todo: todos[user][entryNum - 1]
};
},
// entryNum is 1-based
'delTodo': (user, entryNum) => {
if (!_.has(todos,user)) return false;
if (entryNum > todos[user].length) return false;
if (entryNum < 1) return false;
todos[user].splice(entryNum-1, 1);
return true;
}
}
this.commands = {
'todo': evt => {
var user = evt.rUser.id;
var myTodos = this.api.getTodos(user);
if(myTodos.length == 0) {
evt.reply(dbot.t('empty-list', {'user': evt.user}));
} else {
evt.reply('[' + evt.user + ']:');
for (let i = 0; i < myTodos.length; i++) {
var todo = myTodos[i];
evt.reply((i+1) + ': ' + todo);
}
}
},
'todoadd': evt => {
var user = evt.rUser.id;
var todoNum = this.api.addTodo(user, evt.input[1]);
evt.reply(dbot.t('added', { 'user': evt.user, 'entry-number': todoNum, 'entry': evt.input[1]}));
},
'tododone': evt => {
var user = evt.rUser.id;
var todoNum = parseInt(evt.input[1]);
var todo = this.api.getTodo(user, todoNum);
if(!todo) {
evt.reply(dbot.t('no-entry', { 'user': evt.user, 'entry-number': todoNum}));
} else {
this.api.delTodo(user, todoNum);
evt.reply(dbot.t('marked-complete', { 'user': evt.user, 'entry-number': todo.todoNum, 'entry': todo.todo}));
}
}
}
this.commands.todoadd.regex = [/todoadd (.+)/, 2];
this.commands.tododone.regex = [/tododone (\d+)/, 2];
}
exports.fetch = function(dbot) {
return new todo(dbot);
}