From 15ce50196d0eac850c3c1fb9d5cc40ae718d0845 Mon Sep 17 00:00:00 2001 From: Anorak_1 Date: Wed, 9 Aug 2023 22:09:12 +0200 Subject: [PATCH] Implemented GuildAppDB with all functions --- dbutil.py | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 154 insertions(+), 1 deletion(-) diff --git a/dbutil.py b/dbutil.py index c054e83..b048949 100644 --- a/dbutil.py +++ b/dbutil.py @@ -1,6 +1,7 @@ import json import os import sqlite3 +import pickle class MessageDB(): @@ -22,4 +23,156 @@ class MessageDB(): con = sqlite3.connect("applications.db") cur = con.cursor() cur.execute(f"DELETE FROM app_msg_db WHERE msg_id={msg_id}") - con.commit() \ No newline at end of file + con.commit() + +class GuildAppDB(): + def create_guild(guild_id: str, guild_name: str) -> None: + applications = {} + application_blob = pickle.dumps(applications) + data = guild_id, guild_name, application_blob + con = sqlite3.connect("application.db") + cur = con.cursor() + cur.execute("INSERT INTO app_guildapp_db VALUES (?, ?, ?)", data) + con.commit() + + def remove_guild(guild_id: str) -> None: + con = sqlite3.connect("applications.db") + cur = con.cursor() + cur.execute(f"DELETE FROM app_guildapp_db WHERE guild_id={guild_id}") + con.commit() + + def add_application_entry(guild_id: str, application_name: str) -> str: + con = sqlite3.connect("applications.db") + cur = con.cursor() + cur.execute(f"SELECT application_blob FROM app_guildapp_db WHERE guild_id={guild_id}") + application_blob = cur.fetchone() + applications = pickle.loads(application_blob) + if application_name not in applications.keys(): + applications[f"application_name"] = { + "app_id": "", + "resp_channel": "" + } + application_blob2 = pickle.dumps(applications) + cur.execute(f"UPDATE app_guildapp_db SET application_blob = ? WHERE guild_id={guild_id}", application_blob2) + con.commit() + return "success" + else: + return "error on add application entry: application exists" + + def remove_application_entry(guild_id: str, application_name: str) -> str: + con = sqlite3.connect("applications.db") + cur = con.cursor() + cur.execute(f"SELECT application_blob FROM app_guildapp_db WHERE guild_id={guild_id}") + application_blob = cur.fetchone() + applications = pickle.loads(application_blob) + if application_name in applications.keys(): + applications.pop(application_name) + application_blob2 = pickle.dumps(applications) + cur.execute(f"UPDATE app_guildapp_db SET application_blob = ? WHERE guild_id={guild_id}", application_blob2) + con.commit() + return "success" + else: + return "error on remove application entry: application not found" + + def set_response_channel(guild_id: str, application_name: str, channel_id: str) -> str: + con = sqlite3.connect("applications.db") + cur = con.cursor() + cur.execute(f"SELECT application_blob FROM app_guildapp_db WHERE guild_id={guild_id}") + application_blob = cur.fetchone() + applications = pickle.loads(application_blob) + if application_name in applications.keys(): + applications[application_name]["resp_channel"] = channel_id + application_blob2 = pickle.dumps(applications) + cur.execute(f"UPDATE app_guildapp_db SET application_blob = ? WHERE guild_id={guild_id}", application_blob2) + con.commit() + return "success" + else: + return "error on set response channel: application not found" + + def add_question(guild_id: str, application_name: str, question: str) -> str: + con = sqlite3.connect("applications.db") + cur = con.cursor() + cur.execute(f"SELECT application_blob FROM app_guildapp_db WHERE guild_id={guild_id}") + application_blob = cur.fetchone() + applications = pickle.loads(application_blob) + if application_name in applications.keys(): + question_index = int(len(applications[application_name]["questions"])) + applications[application_name]["questions"][question_index] = question + application_blob2 = pickle.dumps(applications) + cur.execute(f"UPDATE app_guildapp_db SET application_blob = ? WHERE guild_id={guild_id}", application_blob2) + con.commit() + return "success" + else: + return "error on add question: application not found" + + def get_questions(guild_id: str, application_name: str): + con = sqlite3.connect("applications.db") + cur = con.cursor() + cur.execute(f"SELECT application_blob FROM app_guildapp_db WHERE guild_id={guild_id}") + application_blob = cur.fetchone() + applications = pickle.loads(application_blob) + if application_name in applications.keys(): + questions = applications[application_name]["questions"] + return questions + else: + return "error on get questions: application not found" + + def edit_question(guild_id: str, application_name: str, question_index: int, new_question: str): + con = sqlite3.connect("applications.db") + cur = con.cursor() + cur.execute(f"SELECT application_blob FROM app_guildapp_db WHERE guild_id={guild_id}") + application_blob = cur.fetchone() + applications = pickle.loads(application_blob) + if application_name in applications.keys(): + if question_index in applications[application_name].keys(): + questions = applications[application_name]["questions"]#[question_index] = new_question + questions[question_index-1] = new_question + applications[application_name]["questions"] = questions + application_blob2 = pickle.dumps(applications) + cur.execute(f"UPDATE app_guildapp_db SET application_blob = ? WHERE guild_id={guild_id}", application_blob2) + con.commit() + return "success" + else: + return "error on edit question: question index not found" + else: + return "error on edit question: application not found" + + def move_question(guild_id: str, application_name: str, init_que_index: int, fin_que_index: int): + con = sqlite3.connect("applications.db") + cur = con.cursor() + cur.execute(f"SELECT application_blob FROM app_guildapp_db WHERE guild_id={guild_id}") + application_blob = cur.fetchone() + applications = pickle.loads(application_blob) + if application_name in applications.keys(): + questions = applications[application_name]["questions"] + if init_que_index <= len(questions) and fin_que_index <= len(questions): + questions.insert(init_que_index-1, questions.pop(fin_que_index-1)) + applications[application_name]["questions"] = questions + application_blob2 = pickle.dumps(applications) + cur.execute(f"UPDATE app_guildapp_db SET application_blob = ? WHERE guild_id={guild_id}", application_blob2) + con.commit() + return "success" + else: + return "error on move question: question index not found" + else: + return "error on move question: application not found" + + def remove_question(guild_id: str, application_name: str, question_index: int): + con = sqlite3.connect("applications.db") + cur = con.cursor() + cur.execute(f"SELECT application_blob FROM app_guildapp_db WHERE guild_id={guild_id}") + application_blob = cur.fetchone() + applications = pickle.loads(application_blob) + if application_name in applications.keys(): + questions = applications[application_name]["questions"] + if question_index <= len(questions): + questions.pop(question_index-1) + applications[application_name]["questions"] = questions + application_blob2 = pickle.dumps(applications) + cur.execute(f"UPDATE app_guildapp_db SET application_blob = ? WHERE guild_id={guild_id}", application_blob2) + con.commit() + return "success" + else: + return "error on remove question: question index not found" + else: + return "error on remove question: application not found" \ No newline at end of file