我想让用户选择一个按钮,然后可以写入数据,然后由特定代码处理。就我而言,当用户选择一个按钮时,立即触发在所选按钮中写入数据后应触发的代码。我不知道该怎么做((
短代码:
bot.message_handler(commands=['start'])
def first_message(message):
bot.send_message(message.chat.id, f"Привет {message.from_user.first_name}. Этот бот считает прогресс дневной нормы калорий и белка(может и не считает)")
markup = ReplyKeyboardMarkup(row_width=2)
for button_name in FUNC_BUTTON:
item_button = KeyboardButton(button_name)
markup.add(item_button)
bot.send_message(message.chat.id, "Кнопочку нажмите", reply_markup=markup)
@bot.message_handler(func= lambda call:True)
def send_kall_status(message):
if message.text == "Записать че сьел":
# тот самый код который должен ожидать информацию от пользователя
elif message.text == "Посмотреть че сьел":
pass
完整代码:
import os
from telebot import TeleBot
from dotenv import load_dotenv
from db_postgres import BotDB
from telebot.types import ReplyKeyboardMarkup, KeyboardButton
load_dotenv()
BotDB = BotDB()
bot = TeleBot(os.getenv('API_KEY'))
class Data:
state = 'none'
all_calories = 0
protein = 0
writen_calories = 0
FUNC_BUTTON = ["Посмотреть че сьел", "Записать че сьел"]
data = Data()
def calc_info(message):
message_kall_info = message.text
if message_kall_info.isdigit() == True:
if data.state == 'kallories':
data.writen_calories = int(message_kall_info)
data.all_calories += data.writen_calories
bot.send_message(message.chat.id, "Введите количество белка")
data.state = 'protein'
elif data.state == 'protein':
count_protein = int(message_kall_info)
data.protein += count_protein
# bot.send_message(message.chat.id, f"Калории: {data.all_calories}, Белок: {data.protein}")
# asdas = cursor.execute("SELECT * FROM bzu_info")
# print(asdas)
else:
data.state = "none"
bot.send_message(message.chat.id, "Вы ввели не цифрууууууууууууууууууууууу")
@bot.message_handler(commands=['start'])
def first_message(message):
if (not BotDB.user_exsistis(message.from_user.id)):
BotDB.add_user(message.from_user.id, message.from_user.first_name)
else:
BotDB.user_update_last_time(message.from_user.id)
bot.send_message(message.chat.id, f"Привет {message.from_user.first_name}. Этот бот считает прогресс дневной нормы калорий и белка(может и не считает)")
markup = ReplyKeyboardMarkup(row_width=2)
for button_name in FUNC_BUTTON:
item_button = KeyboardButton(button_name)
markup.add(item_button)
bot.send_message(message.chat.id, "Кнопочку нажмите", reply_markup=markup)
@bot.message_handler(func= lambda call:True)
def send_kall_status(message):
if message.text == "Записать че сьел":
if data.state == 'none':
data.state = 'kallories'
calc_info(message)
elif data.state == 'protein':
calc_info(message)
data.state = 'none'
BotDB.add_bzu_info(message.from_user.id, data.protein, data.all_calories)
user_bzu_info = BotDB.get_bzu_info(message.from_user.id)
bot.send_message(message.chat.id, f"Количество калории: {user_bzu_info[1]}, Количество белка: {user_bzu_info[0]}")
elif message.text == "Посмотреть че сьел":
pass
bot.infinity_polling()