import random user = [] jokes = [ ["Testing","Testing you!"], ["singing pokemon","Jiggalypuff! 🎙️"] ] #jokes = [] def handle_command(state,message): for command in commands: if command in message: result = commands[command](state,message) print("Bot: "+result["response"]) return result["state"] else: if len(user) > 0: try: result = commands[user[0]](state,message) print("Bot: "+result["response"]) return result["state"] except: print(e) print("Error saving state:",message) pass return 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":[] } try: if state[0] != "joke": state = [] except: pass if len(state) == 0: return { "response":"Knock knock", "state":["joke"] } if 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 } if 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 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)