So I have a bot which moves from stage to stage using the stage names as a product of return of each function. e.g.
STEP_1, STEP_2, STEP_3 = range(3)
def askforfile(update, context):
chat_id = update.message.chat_id
context.bot.send_message(chat_id=chat_id, text="give a file!")
return STEP_1
def getfile(update, context):
chat_id = update.message.chat_id
filename = 'newfile'+str(chat_id)+ '.txt'
f = open(filename, 'wb')
context.bot.get_file(update.message.document.file_id).download(out=f)
f.close()
return STEP_2
def get_info(update, context):
chat_id = update.message.chat_id
info = update.message.text
return STEP_3
def end(update, context):
with open(filename, 'rb') as f:
writecsv1 = some_module.some_function(filename, info)
with open(writecsv1, 'rb') as doc:
context.bot.send_document(chat_id=chat_id, document=doc)
return ConversationHandler.END
So in the end() function I need to pass the variables from functions getfile() and get_info() in the some_function. But I have no clue how to do it, because returning multiple values doesn’t work for me and even if it worked, obviously I can’t call functions.
Advertisement
Answer
You could use global variables filename and info (maybe don’t name them that) that you rewrite within your functions. Just define them with some default value above your function definitions. Right now they’re just defined locally and disappear once the function returns.