153 lines
No EOL
3.5 KiB
Python
153 lines
No EOL
3.5 KiB
Python
import random
|
||
jokes = [
|
||
["Testing","Testing you!"],
|
||
["singing pokemon","Jiggalypuff! 🎙️"]
|
||
]
|
||
#jokes = []
|
||
|
||
def handle_command(state,message):
|
||
for command in commands:
|
||
if message.find(command)==0:
|
||
result = commands[command](state,message)
|
||
return result
|
||
if len(state) > 0:
|
||
try:
|
||
result = commands[state[0]](state,message)
|
||
return result
|
||
except Exception as e:
|
||
return {
|
||
"state":[],
|
||
"response":f"⚠️Error⚠️ \n {e}"
|
||
}
|
||
|
||
return {
|
||
"response":None,
|
||
"state":state
|
||
}
|
||
|
||
"""
|
||
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):
|
||
return {
|
||
"response":"starting over.",
|
||
"state":[]
|
||
}
|
||
|
||
def knock_knock(state,message):
|
||
#return {response:"",state:""}
|
||
try:
|
||
if state[0] != "knock knock":
|
||
#clear the state
|
||
state = []
|
||
except:
|
||
pass
|
||
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
|
||
}
|
||
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":[]
|
||
}
|
||
|
||
"""'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):
|
||
if len(jokes) == 0:
|
||
return {
|
||
"response":"I don't know any jokes...",
|
||
"state":[]
|
||
}
|
||
|
||
if len(state) == 0:
|
||
return {
|
||
"response":"Knock knock",
|
||
"state":["joke"]
|
||
}
|
||
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:
|
||
return {
|
||
"response":"ask, \"who's there?\"",
|
||
"state":state
|
||
}
|
||
elif len(state) == 2:
|
||
if message.find("who?") > 0:
|
||
return {
|
||
"response":jokes[state[1]][1],
|
||
"state":[]
|
||
}
|
||
else:
|
||
return {
|
||
"response":"ask, \""+ jokes[state[1]][0] +" who?\"",
|
||
"state":state
|
||
}
|
||
|
||
return {
|
||
"response":None,
|
||
"state":[]
|
||
}
|
||
|
||
|
||
commands = {
|
||
"nevermind":nevermind,
|
||
"knock knock":knock_knock,
|
||
"joke":joke
|
||
}
|
||
|
||
|
||
|
||
|
||
if __name__ == '__main__':
|
||
msg = ""
|
||
while msg != "exit":
|
||
msg = input("user:")
|
||
user = handle_command(user,msg)
|
||
#print("state:",user) |