diff --git a/Ammo.py b/Ammo.py index 24bbb77..54d4e49 100644 --- a/Ammo.py +++ b/Ammo.py @@ -70,7 +70,6 @@ def SelectCell(filename, chosenCol, sortVal): cursor = connection.cursor() filedata = cursor.execute("SELECT " + chosenCol + " FROM Ammo WHERE Name = ('" + sortVal + "')") data = filedata.fetchall()[0][0] - #closes the connection to the file connection.commit() @@ -192,8 +191,8 @@ def TidyUp(string): #AddRow(filename, rowName, rowData) #debug - displays all the data in the database -#DisplayDatabase(filename) +DisplayDatabase(filename) #debug - displays the damage for a given ammo name print(SelectCell(filename, "Damage", "12/70 RIP")) #debug - displays all the data in the Name column and orders it by the corresponding Damage -#SelectColumn(filename, "Damage", "Damage") \ No newline at end of file +SelectColumn(filename, "Damage", "Damage") \ No newline at end of file diff --git a/Prototype/CreateDatabase.py b/Prototype/CreateDatabase.py new file mode 100644 index 0000000..758acf1 --- /dev/null +++ b/Prototype/CreateDatabase.py @@ -0,0 +1,61 @@ +import sqlite3, os + +def CreateDatabase (filename): + #checks if file already exists + if not os.path.exists(filename): + #creates connection to the file + connection = sqlite3.connect(filename) + + #creates cursor and executes SQL command to create the data table inside the file + cursor = connection.cursor() + cursor.execute("""CREATE TABLE IF NOT EXISTS Items (Name TEXT, + Price INTEGER, + Info TEXT, + Stats TEXT)""") + + #closes the connection to the file + connection.commit() + connection.close() + +def AddRow(filename, itemName, itemPrice, itemInfo, itemStats): + #connects to the given file + connection = sqlite3.connect(filename) + + #creates a cursor and executes SQL command to insert the given data into the table as a new row + cursor = connection.cursor() + cursor.execute("INSERT INTO Items VALUES(?, ?, ?, ?)", (itemName, itemPrice, itemInfo, itemStats)) + + #closes the connection to the file + connection.commit() + connection.close() + +def DisplayDatabase (filename): + #connects to the given file + connection = sqlite3.connect(filename) + + #creates a cursor and executes SQL command and select all of the data inside the table + cursor = connection.cursor() + filedata = cursor.execute("SELECT * FROM Items ORDER BY Name") + content = filedata.fetchall() + + #loops through and prints each row + for i in range(len(content)): + print(content[i]) + + #closes the connection to the file + connection.commit() + connection.close() + +filename = "items.db" + +CreateDatabase(filename) +AddRow(filename, "AK101", 50000, "ak info", "ak stats") +AddRow(filename, ".338 Lapua", 500000, "lapua info", "lapua stats") +AddRow(filename, "M4A1", 45000, "m4 info", "m4 stats") +AddRow(filename, "MP7", 60000, "mp7 info", "mp7 stats") +AddRow(filename, "SVDS", 120000, "svd info", "svd stats") +AddRow(filename, "P90", 145000, "p90 info", "p90 stats") +AddRow(filename, "MK47 Mutant", 85000, "mk47 info", "mk47 stats") +AddRow(filename, "AR-15", 100000, "ar-15 info", "ar-15 stats") +AddRow(filename, "SR-25", 70000, "sr-25 info", "sr-25 stats") +DisplayDatabase(filename) \ No newline at end of file diff --git a/Prototype/Prototype.py b/Prototype/Prototype.py new file mode 100644 index 0000000..7d561f7 --- /dev/null +++ b/Prototype/Prototype.py @@ -0,0 +1,137 @@ +import sqlite3 + +#greets the user +def Greeting(botname): + print(botname + "Hey there, what would you like to be known as?") + username = input("User: ") + print(botname + "Welcome " + username + " nice to meet you, what can i help with?") + + return username + +#checks for keywords in given message +def WordChecker(userMessage): + #different lists of keywords + commands = ["price", "info", "stats"] + polite = ["thank you", "thanks", "cheers"] + farewell = ["goodbye", "bye", "see you later", "adios", "ciao"] + + #checks if the message is empty + if userMessage.split() == []: + botResponse = "empty" + else: + #checks for keywords in the message from the command list + for commandWord in commands: + if commandWord in userMessage: + return commandWord + #checks for keywords in the message from the polite list + for politeWord in polite: + if politeWord in userMessage: + return "polite" + #checks for keywords in the message from the farewell list + for farewellWord in farewell: + if farewellWord in userMessage: + return "goodbye" + botResponse = "no word" + return botResponse + +#pulls list of details from SQL table +def GetDetailList(filename, keyword): + detailList = [] + + #connects to the given file + connection = sqlite3.connect(filename) + + #creates a cursor and executes SQL command and select all of the data inside the table + cursor = connection.cursor() + filedata = cursor.execute("SELECT " + keyword + " FROM Items ORDER BY " + keyword) + content = filedata.fetchall() + + #loops through and prints each row + for i in range(len(content)): + detailList.append(content[i][0]) + + #closes the connection to the file + connection.commit() + connection.close() + + return detailList + +#gets specific detail from SQL table +def GetDetail(filename, keyword, targetValue, searchValue): + #connects to the given file + connection = sqlite3.connect(filename) + + #creates a cursor and executes SQL command and select all of the data inside the table + cursor = connection.cursor() + filedata = cursor.execute("SELECT " + keyword + " FROM Items WHERE " + targetValue + " = '" + searchValue + "'") + detail = filedata.fetchall()[0][0] + + #closes the connection to the file + connection.commit() + connection.close() + + return detail + +#handles price response +def price(userMessage): + itemList = GetDetailList(filename, "Name") + + #checks for a match between the words in the message and the available items in the database + for item in itemList: + if item.lower() in userMessage.lower(): + itemPrice = str(GetDetail(filename, "Price", "Name", item)) + return ("the price of the " + item + " according to my scav sources is " + itemPrice) + return ("im sorry my friend but i couldnt find the item you were looking for") + +#handles info response +def info(userMessage): + itemList = GetDetailList(filename, "Name") + + #checks for a match between the words in the message and the available items in the database + for item in itemList: + if item.lower() in userMessage.lower(): + itemInfo = GetDetail(filename, "Info", "Name", item) + return ("the information for the " + item + " according to my scav sources is " + itemInfo) + return ("im sorry my friend but i couldnt find the information about what you were looking for") + +#handles stats response +def stats(userMessage): + itemList = GetDetailList(filename, "Name") + + #checks for a match between the words in the message and the available items in the database + for item in itemList: + if item.lower() in userMessage.lower(): + itemStats = GetDetail(filename, "Stats", "Name", item) + return ("the stats for the " + item + " according to my scav sources is " + itemStats) + return ("im sorry my friend but i couldnt find the statistics you were looking for") + + +#predefines some variables used throughout the program +activeCheck = True +filename = "items.db" +botname = "TarkyBot" +username = Greeting(botname + ": ") + +#loop keeps bot active +while activeCheck: + #formats the start of the messages + userMessage = str(input(username + ": ")).lower() + botResponse = botname + ": " + + #checks for something to do using the given message + procedure = WordChecker(userMessage) + + #decides what to do based on the returned keyword + if procedure == "empty": + botResponse += "speak up i cant hear you" + elif procedure == "polite": + botResponse += "you are very welcome :)" + elif procedure == "goodbye": + botResponse += "Thank you for the chat, hope i was some help to you. See you later " + username + activeCheck = False + elif procedure == "no word": + botResponse += "do nothing" + else: + botResponse += eval(procedure + "(userMessage)") + + print(botResponse) \ No newline at end of file diff --git a/Prototype/items.db b/Prototype/items.db new file mode 100644 index 0000000..d22b4e7 Binary files /dev/null and b/Prototype/items.db differ diff --git a/Word Checker b/Word Checker index bd496bf..bb4b192 100644 --- a/Word Checker +++ b/Word Checker @@ -1,26 +1,50 @@ -def wordcheck(message): +#old function +def oldwordcheck(message): + #keyword list procedures = ["price", "info", "stats"] - + #checks for a match between each word in the message and the keyword list for word in procedures: if word in message: return word return "no procedure" +#shiny new checker +def NewWordCheck(message): + #keyword dictionary + keywords = { + "price" : ["price", "value", "cost", "rubles"], + "info" : ["info", "information", "details", "facts"], + "stats" : ["stats", "statistics", "data"] + } + + #loops through each word in the message + for searchWord in message.split(): + #loops through each key in the dictionary + for key, value in keywords.items() : + #checks for a match between the message word and either the key or the values associated to it + if value.__contains__(searchWord): + return key + + return "no procedure" + +#temp function for testing purpose +def stats(): + print("this is the statistics function") + +#temp function for testing purpose def price(): - print("hellooooooo") + print("this is the price function") +#temp function for testing purpose def info(): - print("cheese") - + print("this is the information function") -message = "hello friend" -procedure = wordcheck(message) +#temp user message for testing purpose +message = "how many roubles does the ak101 cost" +procedure = NewWordCheck(message) if procedure == "no procedure": - print("nothing to do") + print("error, no function found/nothing to do") else: - eval(procedure + "()") - - -#testing pull request? + eval(procedure + "()") \ No newline at end of file