forked from GitHub/dbot
Merge pull request #682 from Scritches/master
Initial commit of new todo list module
This commit is contained in:
commit
695398d8fb
5
modules/todo/config.json
Normal file
5
modules/todo/config.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"dependencies": [ ],
|
||||||
|
"ignorable": true,
|
||||||
|
"outputPrefix": "todo"
|
||||||
|
}
|
14
modules/todo/strings.json
Normal file
14
modules/todo/strings.json
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"added": {
|
||||||
|
"en": "[{user}] - {entry-number}: '{entry}' added to your todo list."
|
||||||
|
},
|
||||||
|
"marked-complete": {
|
||||||
|
"en": "[{user}] - {entry-number}: '{entry}' marked as complete."
|
||||||
|
},
|
||||||
|
"no-entry": {
|
||||||
|
"en": "[{user}] - There is no todo entry {entry-number}."
|
||||||
|
},
|
||||||
|
"empty-list": {
|
||||||
|
"en": "[{user}] - Your todo list is empty. Add entries via '~todoadd'."
|
||||||
|
}
|
||||||
|
}
|
87
modules/todo/todo.js
Normal file
87
modules/todo/todo.js
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
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);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user