Permalink
Show file tree
Hide file tree
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
5 changed files
with
236 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) |
BIN
+8 KB
Prototype/items.db
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 + "()") |