WIP: wishlist improvements #4

Draft
reese wants to merge 2 commits from reese/nekobot:shopping into main
1 changed files with 76 additions and 0 deletions

76
scripts/shopping Executable file
View File

@ -0,0 +1,76 @@
#!/usr/bin/env python3
# record shopping list items
from sys import argv, exit
list_file = "wishlist.txt"
## utilities
def die(msg: str):
print(msg)
exit(1)
def fetch_list() -> list:
try:
with open(list_file, 'r') as f:
return list(map(lambda item: item.strip(), f.readlines()))
except:
die("wuh oh, i can't open the shopping list file!")
def save_list(the_list: list):
try:
with open(list_file, 'w') as f:
f.write("\n".join(the_list))
except:
die("oh noes! the shopping list couldn't be saved!")
## shopping list management
def add(item: str):
if len(item) == 0:
die("what do u want to add?")
the_list = fetch_list()
the_list.append(item)
save_list(the_list)
print(f"#{len(the_list)-1}: \"{item}\" added!")
def remove(index: int):
the_list = fetch_list()
if index < 0 or index >= len(the_list):
die("that item does not exist!")
new_list = filter(lambda item: item != the_list[index], the_list)
save_list(new_list)
print(f"#{index} removed!")
def show():
the_list = fetch_list()
for i,item in enumerate(the_list):
print(f"{i}: {item}")
exit(42)
def usage():
print("!neko shopping <command> <args>")
print("commands:")
print(" add <item> add an item")
print(" remove <number> remove an item")
print(" show show the list")
exit(42)
## entry point
if __name__ == '__main__':
cmd = arg = ""
try:
cmd, arg = argv[1].split(' ', 1)
except:
cmd = argv[1]
match cmd:
case "add": add(arg)
case "remove": remove(int(arg))
case "show": show()
case _: usage()