From dc9596331e7950ed257dd0e0ccffd36590ab8cc0 Mon Sep 17 00:00:00 2001 From: Edward Delaporte Date: Sun, 29 Mar 2026 11:04:14 -0500 Subject: [PATCH 1/1] Add ability to remove stuff --- app.py | 8 ++++-- matrix_shop_bot/bot.py | 58 +++++++++++++++++++++++++++++++++++----- matrix_shop_bot/db.py | 12 +++++++++ matrix_shop_bot/tasks.py | 32 +++++++++++++++------- 4 files changed, 92 insertions(+), 18 deletions(-) diff --git a/app.py b/app.py index 01be94e..eab75c7 100644 --- a/app.py +++ b/app.py @@ -1,8 +1,12 @@ +import os + +import simplematrixbotlib as botlib + from matrix_shop_bot.bot import shop_bot SERVER = os.environ.get('MATRIX_SERVER') -BOT_NAME = os.environ.get('GOAL_BOT') -BOT_PWD = os.environ.get('GOAL_BOT_PWD') +BOT_NAME = os.environ.get('NEW_BOT') +BOT_PWD = os.environ.get('NEW_BOT_PWD') def get_bot(): creds = botlib.Creds(SERVER, BOT_NAME, BOT_PWD) diff --git a/matrix_shop_bot/bot.py b/matrix_shop_bot/bot.py index 8a25f53..5c8e6c5 100644 --- a/matrix_shop_bot/bot.py +++ b/matrix_shop_bot/bot.py @@ -4,7 +4,7 @@ import os import simplematrixbotlib as botlib -from .db import Data, pretty_print +from .db import Data MODULE='shop' @@ -30,8 +30,14 @@ async def do_shop(match): add - add an item to shop for add-store - add a store assign STORE_ID ITEM_ID - plan to shop for at store for item + buy - mark item as purchased + clear STORE_ID - clear all purchased items for STORE_ID from database + clear-all STORE_ID - clear **all** items for STORE_ID from database list STORE_ID - list all items assigned to store + list-stores - list all stores list-unsorted - list all items not assigned to any store + remove ITEM_ID - remove a shopping item from the datatbase + remove-store STORE_ID - remove a store from the datatbase (requires clearing the list first) setup - run one time database setup ''' @@ -39,6 +45,13 @@ async def do_shop(match): result = Data().setup() return [result] + if match.command('list-stores'): + items = Data().get_stores() + results = ['List of Stores'] + for item in items: + results.append(str(item)) + return results + if match.command('add'): new = ' '.join(match.args()[1:]) result = Data().add_item(new) @@ -49,24 +62,57 @@ async def do_shop(match): result = Data().add_store(new) return [f'Store added with id {result}'] + if match.command('assign'): + store_id = int(match.args()[1]) + item_id = int(match.args()[2]) + Data().assign_store(store_id, item_id) + + # Now print the list for the assigned store + items = Data().get_shopping_list(store_id) + results = ['Shopping List'] + for item in items: + results.append(str(item)) + return results + + if match.command('buy'): + item_id = ' '.join(match.args()[1:]) + Data().purchase_item(item_id) + return ['Success'] + + if match.command('clear'): + store_id = ' '.join(match.args()[1:]) + Data().clear_list(store_id) + return ['Success'] + + if match.command('clear-all'): + store_id = ' '.join(match.args()[1:]) + Data().clear_list(store_id, clear_all=True) + return ['Success'] if match.command('list'): + store_id = ' '.join(match.args()[1:]) items = Data().get_shopping_list(store_id) + results = ['Shopping List'] for item in items: results.append(str(item)) return results + if match.command('unsorted'): items = Data().list_unsorted() for item in items: results.append(str(item)) return results - if match.command('assign'): - store_id = int(match.args()[1]) - item_id = int(match.args()[2]) - result = Data().assign_store(store_id, item_id) - return result + if match.command('remove-item'): + item_id = ' '.join(match.args()[1:]) + Data().remove_item(item_id) + return ['Success'] + + if match.command('remove-store'): + store_id = ' '.join(match.args()[1:]) + Data().remove_store(store_id) + return ['Success'] return [do_shop.__doc__] diff --git a/matrix_shop_bot/db.py b/matrix_shop_bot/db.py index 0d1f590..6b7c7ab 100644 --- a/matrix_shop_bot/db.py +++ b/matrix_shop_bot/db.py @@ -136,6 +136,18 @@ class Data(): results.append(f' - [ ] {item}') return results + def remove_item(self, item_id): + with Session(self.engine) as session: + item = session.exec(_get_with_id(Item, item_id)).first() + session.delete(item) + session.commit() + + def remove_store(self, store_id): + with Session(self.engine) as session: + store = session.exec(_get_with_id(Store, store_id)).first() + session.delete(store) + session.commit() + def get_engine(self): return create_engine(f"sqlite:///{self.file}") diff --git a/matrix_shop_bot/tasks.py b/matrix_shop_bot/tasks.py index 1fbc3fb..a60a2a1 100644 --- a/matrix_shop_bot/tasks.py +++ b/matrix_shop_bot/tasks.py @@ -17,11 +17,27 @@ def add_store(c, name): result = Data().add_store(name) print(result) + +@task +def assign(c, store_id, item_id): + result = Data().assign_store(store_id, item_id) + print(result) + + @task def buy(c, item_id): result = Data().purchase_item(item_id) print(result) +@task +def clear_all(c, store_id): + Data().clear_list(store_id, clear_all=True) + +@task +def clear_list(c, store_id): + Data().clear_list(store_id) + + @task def list(c, store_id): items = Data().get_shopping_list(store_id) @@ -34,13 +50,6 @@ def list_stores(c): for item in items: print(item) -@task -def clear_list(c, store_id): - Data().clear_list(store_id) - -@task -def clear_all(c, store_id): - Data().clear_list(store_id, clear_all=True) @task def list_unsorted(c): @@ -48,9 +57,12 @@ def list_unsorted(c): for item in items: print(item) + @task -def assign(c, store_id, item_id): - result = Data().assign_store(store_id, item_id) - print(result) +def remove_item(c, item_id): + Data().remove_item(item_id) +@task +def remove_store(c, store_id): + Data().remove_store(store_id) -- 2.47.3