From 213e949fc8c2362046d197554fda98c87a7906df Mon Sep 17 00:00:00 2001 From: sigoden Date: Sat, 8 Jun 2024 20:46:27 +0800 Subject: feat: support bots (#39) --- bots/todo-js/tools.js | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 bots/todo-js/tools.js (limited to 'bots/todo-js/tools.js') diff --git a/bots/todo-js/tools.js b/bots/todo-js/tools.js new file mode 100644 index 0000000..ed3ed39 --- /dev/null +++ b/bots/todo-js/tools.js @@ -0,0 +1,73 @@ +const fs = require('fs'); +const path = require('path'); + +/** + * Add a new todo item + * @typedef {Object} AddTodoArgs + * @property {string} desc - The task description + * @param {AddTodoArgs} args + */ +exports.add_todo = function addTodo(args) { + const todosFile = _getTodosFile(); + if (fs.existsSync(todosFile)) { + const num = JSON.parse(fs.readFileSync(todosFile)).reduce((max, item) => Math.max(max, item.id), 0) + 1; + const data = fs.readFileSync(todosFile); + fs.writeFileSync(todosFile, JSON.stringify([...JSON.parse(data), { id: num, desc: args.desc }])); + console.log(`Successfully added todo id=${num}`); + } else { + fs.writeFileSync(todosFile, JSON.stringify([{ id: 1, desc: args.desc }])); + console.log('Successfully added todo id=1'); + } +} + +/** + * Delete an existing todo item + * @typedef {Object} DelTodoArgs + * @property {number} id - The task id + * @param {DelTodoArgs} args + */ +exports.del_todo = function delTodo(args) { + const todosFile = _getTodosFile(); + if (fs.existsSync(todosFile)) { + const data = fs.readFileSync(todosFile); + const newData = JSON.parse(data).filter(item => item.id !== args.id); + fs.writeFileSync(todosFile, JSON.stringify(newData)); + console.log(`Successfully deleted todo id=${args.id}`); + } else { + _die('Empty todo list'); + } +} + +/** + * Display the current todo list in json format. + */ +exports.list_todos = function listTodos() { + const todosFile = _getTodosFile(); + if (fs.existsSync(todosFile)) { + console.log(fs.readFileSync(todosFile, "utf8")); + } else { + _die('Empty todo list'); + } +} + +/** + * Delete the entire todo list. + */ +exports.clear_todos = function clearTodos() { + const todosFile = _getTodosFile(); + fs.unlinkSync(todosFile) + console.log("Successfully deleted entry todo list"); +} + +function _getTodosFile() { + const cacheDir = process.env.LLM_BOT_CACHE_DIR || '/tmp'; + if (!fs.existsSync(cacheDir)) { + fs.mkdirSync(cacheDir, { recursive: true }); + } + return path.join(cacheDir, 'todos.json'); +} + +function _die(message) { + console.error(message); + process.exit(1); +} \ No newline at end of file -- cgit v1.2.3