【发布时间】:2023-12-09 06:25:01
【问题描述】:
最近我遇到了一个问题。问题是我正在尝试使用 telebot 在 Telegram 中创建一个机器人。问题的核心是混合来自用户的输入。我浏览了各种文章并决定摆脱在多个用户激活机器人时混合的主要全局变量。当我试图只使用本地变量并将值从一个函数传递给另一个函数时,我无法解决这个问题:当函数 def dicties(url_new) 设法返回值时 - 然后我不知道如何在函数 def answer(message) 中使用返回值 - 我需要字典来计算调整后的汇率。
我已尝试将所有功能置于 def answer(message) 下,但它需要来自 def day_step(message) 的特定键盘回答(如“Доллар Сингапура”)而不是来自用户的消息 - 消息不同,否则代码崩溃。那么,有没有办法不使用全局变量并将返回保存在某处而无需再次输入消息?
def urlnew(message):
date = str(message.text)
url_new = url.replace('dd/mm/year', date)
print(url_new)
return url_new
def dicties(url_new):
currency_dictionary = get_currencies_dictionary(get_data(url_new))
nominal_dictionary = get_nominals_dictionary(get_data(url_new))
print(currency_dictionary)
print(nominal_dictionary)
return currency_dictionary, nominal_dictionary
def day_step(message):
dicties(urlnew(message))
markup = types.ReplyKeyboardMarkup(resize_keyboard=None)
itembtn_sgd = types.KeyboardButton('Доллар Сингапура')
itembtn_back_to_dates = types.KeyboardButton('Вернуться к вводу даты')
markup.add(itembtn_back_to_dates, itembtn_sgd)
msg1 = bot.send_message(message.chat.id, text='Выбери одну или вернись к выбору даты', reply_markup=markup)
bot.register_next_step_handler(msg1, answer)
def answer(message):
markup = types.ReplyKeyboardRemove(selective=False)
if message.text == 'Вернуться к вводу даты':
bot.register_next_step_handler(message, welcoming)
elif message.text == 'Доллар Сингапура':
bot.send_message(message.chat.id, text='Вот столько стоил один доллар Сингапура в рублях: ' + str(float(currency_dictionary['SGD'] / nominal_dictionary['SGD'])), reply_markup=markup)
else:
bot.send_message(message.chat.id, text='Упс, что-то не так', reply_markup=markup)
bot.send_message(message.chat.id, text='Но ты можешь посмотреть сам по ссылке: ' + str(url_new))
提前致谢。
【问题讨论】:
标签: python py-telegram-bot-api