diff --git a/earwigbot/commands/notes.py b/earwigbot/commands/notes.py index 9fa099c..1aeea6a 100644 --- a/earwigbot/commands/notes.py +++ b/earwigbot/commands/notes.py @@ -47,7 +47,7 @@ class Notes(Command): } if not data.args: - msg = "The Earwig Mini-Wiki: running v{0}. Subcommands are: {1}. You can get help on any with '!{2} help subcommand'." + msg = "\x0302The Earwig Mini-Wiki\x0F: running v{0}. Subcommands are: {1}. You can get help on any with '!{2} help subcommand'." cmnds = ", ".join((commands)) self.reply(data, msg.format(self.version, cmnds, data.command)) return @@ -60,27 +60,58 @@ class Notes(Command): def create_db(self, conn): """Initialize the notes database with its necessary tables.""" script = """ - CREATE TABLE pages (page_id, page_title); + CREATE TABLE entries (entry_id, entry_slug, entry_title, entry_revision); CREATE TABLE users (user_id, user_name); - CREATE TABLE revisions (rev_id, rev_page, rev_user, rev_content); + CREATE TABLE revisions (rev_id, rev_entry, rev_user, rev_content); """ conn.executescript(script) - def do_list(self): - pass + def do_list(self, data): + """Show a list of entries in the notes database.""" + query = "SELECT entry_title FROM entries" + with sqlite.connect(self._dbfile) as conn, self._db_access_lock: + try: + entries = conn.execute(query).fetchall() + except sqlite.OperationalError: + entires = [] - def do_read(self): - pass + if entries: + self.reply(data, "Entries: {0}".format(", ".join(entries))) + else: + self.reply(data, "No entries in the database.") - def edit(self): - pass + def do_read(self, data): + """Read an entry from the notes database.""" + query = "SELECT entry_title, rev_content FROM entries INNER JOIN revisions ON entry_revision = rev_id WHERE entry_slug = ?" + try: + slug = data.args[1].lower().replace("_", "").replace("-", "") + except IndexError: + self.reply(data, "Please name an entry to read from.") + return - def rename(self): + with sqlite.connect(self._dbfile) as conn, self._db_access_lock: + try: + title, content = conn.execute(query, (slug,)).fetchone() + except sqlite.OperationalError: + title, content = slug, None + + if content: + self.reply(data, "\x0302{0}\x0F: {1}".format(title, content)) + else: + self.reply(data, "Entry \x0302{0}\x0F not found.".format(title)) + + def do_edit(self, data): + """Edit an entry in the notes database.""" pass - def delete(self): + def do_rename(self, data): + """Rename an entry in the notes database.""" pass - def info(self): + def do_delete(self, data): + """Delete an entry from the notes database.""" pass + def do_info(self, data): + """Get info on an entry in the notes database.""" + pass