Задать вопрос
@winreii

Не сохраняет данные в переменную в telebot?

пытаюсь сделать первого бота для обработки своей зп но не могу понять как сохранять данные после обработки кнопкой в переменную...
вот такой код :

import telebot
from telebot import types
import time
import works

token = ''

bot = telebot.TeleBot(token)

count_price = 0 # сумма за текущий месяц
count_all = 0 # сумма за все время
user_state = {}

MAIN_MENU = 0 # главное меню
FIRST_WORK_MENU = 1 # меню работ
ADD_WORK_MENU = 2 # меню доюавления работ



@bot.message_handler(commands=['start'])
def start(message):
    user_id = message.from_user.id
    user_state[user_id] = MAIN_MENU

    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton(" Главное меню")
    btn2 = types.KeyboardButton("ℹ️ Информация")
    btn3 = types.KeyboardButton("ℹ️️ начать подсчет зарплаты")
    btn4 = types.KeyboardButton("ℹ️️ итог за месяц")
    btn5 = types.KeyboardButton("ℹ️ итог за все время")
    markup.add(btn1, btn2, btn3,btn4,btn5)

    bot.send_message(message.chat.id, "Добро пожаловать! Выберите пункт меню:", reply_markup=markup)



@bot.message_handler(content_types=['text'])
def handle_text(message, massage=None, count_all=int(), count_price=int(), count_work=None):
    if message.text == " Главное меню":  # кнопка главного меню
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton(" Главное меню")
        btn2 = types.KeyboardButton("ℹ️ Информация")
        btn3 = types.KeyboardButton("ℹ️️ начать подсчет зарплаты")
        btn4 = types.KeyboardButton("ℹ️️ итог за месяц")
        btn5 = types.KeyboardButton("ℹ️ итог за все время")
        markup.add(btn1, btn2, btn3,btn4,btn5)


        bot.send_message(message.chat.id, "Добро пожаловать! Выберите пункт меню:", reply_markup=markup)


    elif message.text == "ℹ️ Информация": # кнопка информация

        bot.send_message(message.chat.id, "Этот бот создан для подсчета зарплаты самозанятых монтажников МГТС.\n\n"
                                          "-Вы можете начать подсчет зарплаты в меню нажав кнопку 'ℹ️️ начать подсчет зарплаты'.\n\n"
                                          "-Вы можете посмотреть итог за месяц нажав кнопку 'ℹ️️ итог за месяц'.\n\n"
                                          "-Вы можете посмотреть итог за все время нажав кнопку 'ℹ️ итог за все время'.\n\n"
                                          "-Вы можете вернутся в начальное меню нажав кнопку ' Главное меню'.\n\n"
                                          'Хорошего дня!'
                        )

    elif message.text == "ℹ️️ начать подсчет зарплаты": # кнопка начать подсчет зарплаты
        user_state[message.from_user.id] = FIRST_WORK_MENU
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        bt1 = types.KeyboardButton("добавление выполненых работ")
        bt2 = types.KeyboardButton("обнуление месяца/сохранение итогов")
        bt3 = types.KeyboardButton(" Главное меню")
        markup.add(bt1, bt2, bt3)

        bot.send_message(message.chat.id, "Выберите тип выполненной работы или выход в главное меню:", reply_markup=markup)

    elif message.text == "добавление выполненых работ": # кнопка добавление выполненых работ
        user_state[message.from_user.id] = ADD_WORK_MENU
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn_1 = types.KeyboardButton("подключение коннектор")
        btn_2 = types.KeyboardButton("подключение сварка")
        btn_3 = types.KeyboardButton("подключение доп")
        btn_4 = types.KeyboardButton("кроссировка")
        btn_5 = types.KeyboardButton("доплата")
        btn_6 = types.KeyboardButton("обслуживание")
        btn_7 = types.KeyboardButton("обслуживание область")
        btn_8 = types.KeyboardButton("замена оборудования")
        btn_9 = types.KeyboardButton("подключение кабель проложен")
        btn_10 = types.KeyboardButton("подключение интернета")
        btn_11 = types.KeyboardButton("подключение тв")
        btn_12 = types.KeyboardButton("доставка симкарты")
        btn_13 = types.KeyboardButton("демонтаж онт")
        btn_14 = types.KeyboardButton("демонтаж прочих")
        btn_15 = types.KeyboardButton("камера")
        btn_16 = types.KeyboardButton(" Главное меню")
        markup.add(btn_1, btn_2, btn_3, btn_4, btn_5, btn_6, btn_7, btn_8, btn_9, btn_10, btn_11, btn_12, btn_13, btn_14, btn_15, btn_16)

        bot.send_message(message.chat.id, "Выберите тип выполненной работы или выход в главное меню:",
                         reply_markup=markup)

    elif message.text == "ℹ️️ итог за месяц": # кнопка итог за месяц показывает какая сумма получилась за текущий месяц
        bot.send_message(message.chat.id, f'сумма за месяц: {count_price} руб.')

    elif message.text == "ℹ️ итог за все время": # кнопка итог за все время показывает какая сумма получилась за все время со сводкой по каждому месяцу
        bot.send_message(message.chat.id, f'сумма за все время: {count_all} руб.')

        # обнуление итогов за месяц с сохранением в отдельную переменную с датой текущего сохранения
    elif message.text == "обнуление месяца/сохранение итогов":
        count_all += count_price
        count_price = int(0)
        bot.send_message(message.chat.id, f'месяц обнулен. сумма: {count_price} руб. \n'
                                          f'итог за все время: {count_all} руб. \n'f'')



    elif message.text == "подключение коннектор":
        for work_price in works.items():
            if work_price[0] == 'подключение коннектор':
                count_price += int(work_price[1])
                break
        bot.send_message(message.chat.id, f'{work_price[0]}: {work_price[1]} руб. \n'f'итог за месяц: {count_price} руб. \n'f'')
bot.polling(none_stop=True)
  • Вопрос задан
  • 28 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Lord_of_Rings
@Lord_of_Rings Куратор тега Python
Дунадан - северный странник. Злой, но очень добрый
По-хорошему, вам надо озадачиться изучением такой вещи, как БД (база данных). Но если уж очень лень, то здесь как минимум нужен словарь.

Что-то типа этого:
Осторожно! Писать самому было лень, код сгенерирован нейросетью
import telebot
from telebot import types
import time
import works  # Предполагается, что works теперь словарь

token = 'YOUR_TOKEN'
bot = telebot.TeleBot(token)

# Храним состояние и данные пользователей
user_data = {}

MAIN_MENU = 0
FIRST_WORK_MENU = 1
ADD_WORK_MENU = 2

@bot.message_handler(commands=['start'])
def start(message):
    user_id = message.from_user.id
    # Инициализация данных пользователя при старте
    if user_id not in user_data:
        user_data[user_id] = {
            'state': MAIN_MENU,
            'count_price': 0,
            'count_all': 0
        }
    
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add(" Главное меню", "ℹ️ Информация", "ℹ️️ начать подсчет зарплаты",
               "ℹ️️ итог за месяц", "ℹ️ итог за все время")
    
    bot.send_message(message.chat.id, "Добро пожаловать! Выберите пункт меню:", reply_markup=markup)

@bot.message_handler(content_types=['text'])
def handle_text(message):
    user_id = message.from_user.id
    # Инициализируем данные, если пользователь новый
    if user_id not in user_data:
        user_data[user_id] = {
            'state': MAIN_MENU,
            'count_price': 0,
            'count_all': 0
        }
    
    current_user = user_data[user_id]

    if message.text == " Главное меню":
        # Код создания главного меню...
    
    elif message.text == "ℹ️️ начать подсчет зарплаты":
        # Код перехода в меню подсчета...
    
    elif message.text == "добавление выполненых работ":
        # Код меню добавления работ...
    
    elif message.text == "ℹ️️ итог за месяц":
        bot.send_message(message.chat.id, f'Сумма за месяц: {current_user["count_price"]} руб.')
    
    elif message.text == "ℹ️ итог за все время":
        bot.send_message(message.chat.id, f'Сумма за все время: {current_user["count_all"]} руб.')
    
    elif message.text == "обнуление месяца/сохранение итогов":
        current_user['count_all'] += current_user['count_price']
        current_user['count_price'] = 0
        bot.send_message(message.chat.id, 
                       f'Месяц обнулен. Текущий месяц: 0 руб.\n'
                       f'Итог за все время: {current_user["count_all"]} руб.')
    
    elif message.text in works:  # Предполагается, что works - это словарь
        price = works[message.text]
        current_user['count_price'] += price
        bot.send_message(message.chat.id,
                       f'{message.text}: {price} руб.\n'
                       f'Итог за месяц: {current_user["count_price"]} руб.')

bot.polling(none_stop=True)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы