|
|
|
@ -1,161 +1,233 @@
|
|
|
|
|
import random
|
|
|
|
|
from turtle import update
|
|
|
|
|
import features
|
|
|
|
|
jokes = [
|
|
|
|
|
["Testing","Testing you!"],
|
|
|
|
|
["singing pokemon","Jiggalypuff! 🎙️"]
|
|
|
|
|
]
|
|
|
|
|
#jokes = []
|
|
|
|
|
|
|
|
|
|
def handle_command(state,sender,message):
|
|
|
|
|
api = features.API()
|
|
|
|
|
debug = False
|
|
|
|
|
|
|
|
|
|
def handle_command(sender, message):
|
|
|
|
|
state = api.get_user_state(sender)
|
|
|
|
|
for command in commands:
|
|
|
|
|
if message.find(command)==0:
|
|
|
|
|
result = commands[command](state,message,sender)
|
|
|
|
|
return result
|
|
|
|
|
if message.find(command) == 0:
|
|
|
|
|
result = commands[command](state, message, sender)
|
|
|
|
|
return result
|
|
|
|
|
if len(state) > 0:
|
|
|
|
|
if debug == 1:
|
|
|
|
|
return commands[state[0]](state, message, sender)
|
|
|
|
|
try:
|
|
|
|
|
result = commands[state[0]](state,message,sender)
|
|
|
|
|
result = commands[state[0]](state, message, sender)
|
|
|
|
|
return result
|
|
|
|
|
except Exception as e:
|
|
|
|
|
return {
|
|
|
|
|
"state":[],
|
|
|
|
|
"response":f"⚠️Error⚠️ \n {e}"
|
|
|
|
|
"response": f"⚠️Error⚠️"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
"response":None,
|
|
|
|
|
"state":state
|
|
|
|
|
"response": "",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
Knock-knock implimentation
|
|
|
|
|
|
|
|
|
|
when you receive message, read state.
|
|
|
|
|
user: knock knock
|
|
|
|
|
bot: who's there? -> bot responds and registers state
|
|
|
|
|
(user.state=[knock-knock])
|
|
|
|
|
user: {statement}
|
|
|
|
|
bot: {statement} who? -> bot responds and stores statement
|
|
|
|
|
(user.stage=[knock-knock,{statement}])
|
|
|
|
|
user: {punchline}
|
|
|
|
|
bot: Nice one! -> bot saves knock-knock joke
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
def nevermind(state,message,sender):
|
|
|
|
|
|
|
|
|
|
def get_faq_string():
|
|
|
|
|
return api.get_faq_string()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def nevermind(state, message, sender):
|
|
|
|
|
api.update_user_state(sender, [])
|
|
|
|
|
return {
|
|
|
|
|
"response":"starting over.",
|
|
|
|
|
"state":[]
|
|
|
|
|
"response": "starting over."
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
def knock_knock(state,message,sender):
|
|
|
|
|
#return {response:"",state:""}
|
|
|
|
|
try:
|
|
|
|
|
if state[0] != "knock knock":
|
|
|
|
|
#clear the state
|
|
|
|
|
state = []
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
# faq
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_faq(state, message, sender):
|
|
|
|
|
if len(state) == 0:
|
|
|
|
|
state.append("knock knock")
|
|
|
|
|
return {
|
|
|
|
|
"response":"Who's there?",
|
|
|
|
|
"state": state
|
|
|
|
|
}
|
|
|
|
|
if len(state) == 1:
|
|
|
|
|
state.append(message)
|
|
|
|
|
return {
|
|
|
|
|
"response":message + " who?",
|
|
|
|
|
"state":state
|
|
|
|
|
"response": api.get_faq_string()
|
|
|
|
|
}
|
|
|
|
|
if len(state) == 2:
|
|
|
|
|
state.append(message)
|
|
|
|
|
jokes.append([
|
|
|
|
|
state[1],state[2]
|
|
|
|
|
])
|
|
|
|
|
print("joke registered.")
|
|
|
|
|
return {
|
|
|
|
|
"response":"Hah! very funny!",
|
|
|
|
|
"state":[]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
"response":"Cleared.",
|
|
|
|
|
"state":[]
|
|
|
|
|
"response": api.get_faq_string()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"""'joke' command
|
|
|
|
|
-------------
|
|
|
|
|
user:!joke
|
|
|
|
|
bot:Knock knock -> bot initializes state
|
|
|
|
|
(user.state=[joke])
|
|
|
|
|
user: Who's there?
|
|
|
|
|
bot: {statement} -> bot responds with chosen joke
|
|
|
|
|
(user.state=[joke,chosenjoke])
|
|
|
|
|
user: {statement} who?
|
|
|
|
|
bot:
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
def joke(state,message,sender):
|
|
|
|
|
if len(jokes) == 0:
|
|
|
|
|
return {
|
|
|
|
|
"response":"I don't know any jokes...",
|
|
|
|
|
"state":[]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def add_question(state, message, sender):
|
|
|
|
|
if len(state) == 0:
|
|
|
|
|
api.update_user_state(sender, ["!add question"])
|
|
|
|
|
return {
|
|
|
|
|
"response":"Knock knock",
|
|
|
|
|
"state":["joke"]
|
|
|
|
|
'response': "Please enter the question title."
|
|
|
|
|
}
|
|
|
|
|
elif len(state) == 1:
|
|
|
|
|
if message.find("there?") > 0 :
|
|
|
|
|
#get random joke index
|
|
|
|
|
state.append(random.randint(0,len(jokes)-1))
|
|
|
|
|
return {
|
|
|
|
|
"response":jokes[state[1]][0],
|
|
|
|
|
"state":state
|
|
|
|
|
}
|
|
|
|
|
else:
|
|
|
|
|
state.append(message)
|
|
|
|
|
api.update_user_state(sender, state)
|
|
|
|
|
return {
|
|
|
|
|
'response': 'Please enter the answer to the question.'
|
|
|
|
|
}
|
|
|
|
|
elif len(state) == 2:
|
|
|
|
|
state.append(message)
|
|
|
|
|
api.update_user_state(sender, state)
|
|
|
|
|
state = api.get_user_state(sender)
|
|
|
|
|
return {
|
|
|
|
|
'response': f"Your question is:\n---\n# {state[1]}\n{state[2]}\n\n---\nIf this is what you want respond with `confirm`\n If you'd like to start over respond with `restart`\n Respond with `nevermind` to cancel entirely"
|
|
|
|
|
}
|
|
|
|
|
elif len(state) == 3:
|
|
|
|
|
if message == 'confirm':
|
|
|
|
|
api.add_question({
|
|
|
|
|
'question': state[1],
|
|
|
|
|
'answer': state[2]
|
|
|
|
|
})
|
|
|
|
|
api.update_user_state(sender, [])
|
|
|
|
|
return {
|
|
|
|
|
"response":"ask, \"who's there?\"",
|
|
|
|
|
"state":state
|
|
|
|
|
'response': 'Question added.'
|
|
|
|
|
}
|
|
|
|
|
elif len(state) == 2:
|
|
|
|
|
if message.find("who?") > 0:
|
|
|
|
|
elif message == 'restart':
|
|
|
|
|
api.update_user_state(sender, ['!add question'])
|
|
|
|
|
return {
|
|
|
|
|
"response":jokes[state[1]][1],
|
|
|
|
|
"state":[]
|
|
|
|
|
'response': 'Please enter the question title.'
|
|
|
|
|
}
|
|
|
|
|
else:
|
|
|
|
|
return {
|
|
|
|
|
"response":"ask, \""+ jokes[state[1]][0] +" who?\"",
|
|
|
|
|
"state":state
|
|
|
|
|
'response': f"Your question is:\n# {state[1]}\n{state[2]}\n\nIf this is what you want respond with `confirm`\n If you'd like to start over respond with `restart`\n Respond with `nevermind` to cancel entirely"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
"response":None,
|
|
|
|
|
"state":[]
|
|
|
|
|
'response': None
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
def appointments():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def update_question(state, message, sender):
|
|
|
|
|
if len(api.data['faq']['questions']) == 0:
|
|
|
|
|
api.update_user_state(sender, [])
|
|
|
|
|
return {
|
|
|
|
|
"response":None,
|
|
|
|
|
state:[]
|
|
|
|
|
'response': "No questions registered."
|
|
|
|
|
}
|
|
|
|
|
elif len(state)==0:
|
|
|
|
|
api.update_user_state(sender,"!update question")
|
|
|
|
|
return {
|
|
|
|
|
"response":f"Choose a question to update:\n {api.get_faq_questions}"
|
|
|
|
|
}
|
|
|
|
|
return {
|
|
|
|
|
'response': None,
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def remove_question(state, message, sender):
|
|
|
|
|
if len(api.data['faq']['questions']) == 0:
|
|
|
|
|
api.update_user_state(sender, [])
|
|
|
|
|
return {
|
|
|
|
|
'response': "No questions registered."
|
|
|
|
|
}
|
|
|
|
|
elif len(state)==0:
|
|
|
|
|
api.update_user_state(sender,["!remove question"])
|
|
|
|
|
return {
|
|
|
|
|
"response":f"Choose a question to remove:\n {api.get_faq_questions()}"
|
|
|
|
|
}
|
|
|
|
|
elif len(state) == 1:
|
|
|
|
|
try:
|
|
|
|
|
int(message)
|
|
|
|
|
except:
|
|
|
|
|
return {"response":"Please enter a number."}
|
|
|
|
|
state.append(message)
|
|
|
|
|
if int(state[1]) < len(api.data['faq']['questions']) and int(state[1]) >=0:
|
|
|
|
|
if debug == True:
|
|
|
|
|
api.remove_question(int(state[1]))
|
|
|
|
|
api.update_user_state(sender,[])
|
|
|
|
|
return {
|
|
|
|
|
'response':'Question removed'
|
|
|
|
|
}
|
|
|
|
|
else:
|
|
|
|
|
try:
|
|
|
|
|
api.update_user_state(sender,[])
|
|
|
|
|
api.remove_question(int(state[1]))
|
|
|
|
|
return {
|
|
|
|
|
'response':'Question removed'
|
|
|
|
|
}
|
|
|
|
|
except:
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
api.update_user_state(sender,["!remove question"])
|
|
|
|
|
return {
|
|
|
|
|
'response':'Please enter the correct question #'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
'response': None,
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def update_header(state, message, sender):
|
|
|
|
|
return {
|
|
|
|
|
'response': None,
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def remove_header(state, message, sender):
|
|
|
|
|
return {
|
|
|
|
|
'response': None,
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def update_footer(state, message, sender):
|
|
|
|
|
return {
|
|
|
|
|
'response': None,
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def remove_footer(state, message, sender):
|
|
|
|
|
return {
|
|
|
|
|
'response': None,
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def add_admin(state, message, sender):
|
|
|
|
|
return {
|
|
|
|
|
'response': None,
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def remove_admin(state, message, sender):
|
|
|
|
|
return {
|
|
|
|
|
'response': None,
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def appointments():
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
"response": None,
|
|
|
|
|
state: []
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
commands = {
|
|
|
|
|
"nevermind":nevermind,
|
|
|
|
|
"knock knock":knock_knock,
|
|
|
|
|
"joke":joke
|
|
|
|
|
}
|
|
|
|
|
"nevermind": nevermind,
|
|
|
|
|
"!faq": get_faq,
|
|
|
|
|
"!add question": add_question,
|
|
|
|
|
"!remove question": remove_question,
|
|
|
|
|
"!update question": update_question,
|
|
|
|
|
"!update header": update_header,
|
|
|
|
|
"!remove header": remove_header,
|
|
|
|
|
"!update footer": update_footer,
|
|
|
|
|
"!remove footer": remove_footer,
|
|
|
|
|
"!add admin": add_admin,
|
|
|
|
|
"!remove admin": remove_admin,
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
user = "admin"
|
|
|
|
|
msg = ""
|
|
|
|
|
debug = True
|
|
|
|
|
while msg != "exit":
|
|
|
|
|
msg = input("user:")
|
|
|
|
|
user = handle_command(user,msg)
|
|
|
|
|
#print("state:",user)
|
|
|
|
|
print("bot:"+handle_command(user, msg)['response'])
|
|
|
|
|
# print("state:",user)
|
|
|
|
|