Skip to content

Instantly share code, notes, and snippets.

@setazer
Created November 13, 2018 12:25
Show Gist options
  • Save setazer/0016d3048a4a2014ed7d051dd3a7035f to your computer and use it in GitHub Desktop.
Save setazer/0016d3048a4a2014ed7d051dd3a7035f to your computer and use it in GitHub Desktop.
class StateMachine:
states = ["NO STATE"]
user_states = {}
def __init__(self,states):
if states:
self.states.extend(states)
else:
raise ValueError("StateMachine must have at least one state")
def next(self,user_id):
if self.user_states.setdefault(user_id,0)<len(self.states):
self.user_states[user_id]+=1
else:
raise IndexError("StateMachine reached last state")
def previous(self,user_id):
if self.user_states.setdefault(user_id,0)>0:
self.user_states[user_id]-=1
else:
raise IndexError("StateMachine is in initial state")
def check(self, message):
return self.states[self.user_states.setdefault(message.from_user.id,0)]
from telebot import TeleBot,apihelper
from telebot.types import Message
from statemachine import StateMachine
TOKEN = 'TOKEN_GOES_HERE'
bot = TeleBot(TOKEN, skip_pending=True)
UserState = StateMachine(['First Name','Last Name','Age','Gender',"Finish"])
apihelper.proxy = {
"http": "socks5://fr11.friproxy.biz:1080",
"https": "socks5://fr11.friproxy.biz:1080"
}
@bot.message_handler(commands=['start'])
def start_handler(m: Message):
bot.send_message(m.chat.id, 'Welcome. What is your first name?')
UserState.next(m.from_user.id)
@bot.message_handler(func=lambda m: UserState.check(m)=='First Name')
def first_name_handler(m: Message):
bot.send_message(m.chat.id, 'What is your last name?')
UserState.next(m.from_user.id)
@bot.message_handler(func=lambda m: UserState.check(m)=='Last Name')
def last_name_handler(m: Message):
bot.send_message(m.chat.id, 'What is your age?')
UserState.next(m.from_user.id)
@bot.message_handler(func=lambda m: UserState.check(m)=='Age')
def age_handler(m: Message):
bot.send_message(m.chat.id, 'What is your gender?')
UserState.next(m.from_user.id)
@bot.message_handler(func=lambda m: UserState.check(m)=='Gender')
def gender_handler(m: Message):
bot.send_message(m.chat.id, 'You are done')
UserState.next(m.from_user.id)
@bot.message_handler(func=lambda m: UserState.check(m)=="Finish")
def finite_handler(m: Message):
bot.send_message(m.chat.id, 'You are done dude')
if __name__ == '__main__':
bot.polling()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment