diff --git a/.gitignore b/.gitignore index 63641dc..2528f55 100755 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ /logs /__pycache__ /data -/.vscode \ No newline at end of file +/.vscode +/students.py diff --git a/docker-compose.yml b/docker-compose.yml index f7616d0..9b4e1cd 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,11 @@ services: discord-bot: container_name: jacobs-bot - image: docker.foreverpyrite.com/jacobs-bot:beta + # image: docker.foreverpyrite.com/jacobs-bot:beta + build: . volumes: - ./logs/:/app/logs/ - ./data/:/app/data/ env_file: .env - restart: unless-stopped \ No newline at end of file + restart: unless-stopped + diff --git a/students.pub.py b/students.pub.py new file mode 100755 index 0000000..42f4a21 --- /dev/null +++ b/students.pub.py @@ -0,0 +1,108 @@ +import logging +from random import choice as random_choice +import pickle + +logger = logging.getLogger(__name__) + +# Redacted +ID_TO_NAME: dict[int, str] = { + +} + +# Redacted +STUDENT_IDS: set = () + +try: + ASSIGNED_ESSAY: dict = pickle.load(open("./data/assigned_essay.pkl", "rb")) +except FileNotFoundError: + logger.warning("No assigned essays found/saved, creating new dictionary.") + ASSIGNED_ESSAY: dict[int, str] = {} + with open("./data/assigned_essay.pkl", "xb"): + pass +except EOFError: + logger.warning("Assigned essays file is empty, creating new dictionary.") + ASSIGNED_ESSAY: dict[int, str] = {} +finally: + logger.debug(f"Assigned essays: {ASSIGNED_ESSAY}") + +# Redacted +STUDENTS: dict[int, str] = {} + +ESSAY_TOPICS = ("why to not throw rocks during a fire drill", + "how to sit in a chair properly", + "how to keep your hands to yourself", + "how to be on time", + "how to take accountability", + "why you shouldn't be wrong (be right!!!)", + "why picking cherries is healthy for mental health", + "why losing is bad, actually", + "why you should be responsable when the bell rings and GET OUT because i'm HUNGRY", + "why you shouldn't hitlerpost in the public discord chat", + "why having your professionalism packet is essential for your future career", + "why playing rock-paper-scissors over text is very productive", + "why steak is the best food for my lunch break", + ) + +def get_essay_topic() -> str: + return random_choice(ESSAY_TOPICS) + +def assign_essay(student_id: int, essay: str = get_essay_topic()) -> str: + """Assigns a student an essay + + Args: + student_id (int): The Discord ID of the student getting the essay. + essay (str, optional): The topic of the essay being assigned. Defaults to get_essay_topic(). + + Raises: + ValueError: If the student ID is not in STUDENT_IDS. + + Returns: + str: The topic of the essay assigned. + """ + if student_id in STUDENT_IDS: + ASSIGNED_ESSAY[student_id] = essay + pickle.dump(ASSIGNED_ESSAY, open("./data/assigned_essay.pkl", "wb")) + return essay + else: + raise ValueError(f"Student ID {student_id} is not a valid student ID.") + +def get_essay(student_id: int = None) -> str: + """Gets the assigned essay for a student + + Args: + student_id (int): The Discord ID of the student to get the essay for. + + Raises: + ValueError: If the student ID is not in STUDENT_IDS. + + Returns: + str: The topic of the essay assigned to the student. + """ + if student_id: + if student_id in STUDENT_IDS: + return ASSIGNED_ESSAY.get(student_id, "No essay assigned.") + else: + essays: str = "" + for essay in ASSIGNED_ESSAY: + essays += f"<@{essay}>: {ASSIGNED_ESSAY[essay]}\n" + return essays if essays else "No essays assigned." + + +def clear_essay(student_id): + """Clears an assigned essay from a student + + Args: + student_id (int): The Discord ID of the student to clear the essay from. + + Raises: + ValueError: If the student ID is not in STUDENT_IDS. + """ + if student_id in STUDENT_IDS: + ASSIGNED_ESSAY.pop(student_id) + pickle.dump(ASSIGNED_ESSAY, open("./data/assigned_essay.pkl", "wb")) + else: + raise ValueError(f"Student ID {student_id} is not a valid student ID.") + + +if __name__ == "__main__": + print(get_essay()) \ No newline at end of file