@aleksandr_twitt

Разобраться с моим кодом, можно?

когда я тестю бота в ТГ, с первыми 2-мя пунктами всё ок, (def user_chose) <- вот отсюда два пункта, то есть 1 и 2 -- работают, но пункты 3 и 4 нет!!! Когда я запуская код на ПК, перехожу в ТГ, всё, пишу 3, проходит, команда выполняется, но если я опять потом в том же меню (не запуская код заново) печатаю -- 3, то он пишет несколько команд и перед выводом ответа выводит это:

Скриншот кода удалён модератором.
то есть открывается файл util.py
Но в самой консоли кода вот:
Скриншот кода удалён модератором.

Ссылка и вопли капсом удалены модератором.

spoiler
from telebot import TeleBot
bot = TeleBot('TOKEN (он тут есть, я его убрал, чтобы пользователи не видели:)')
from telebot import types
from math import sqrt

MENU_TEXT = """1. Решение линейных уравнений
2. Решение квадратных уравнений
3. Построение арифметической прогрессии
4. Арифметические операции с дробями"""

operation_drobi = """1. +
2. -
3. *
4. /
"""


@bot.message_handler(content_types=['text'])
def start(message):
  if message.text == "Привет":
      global  markup
      markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
      global btn1
      btn1 = types.KeyboardButton("Главная")
      markup.add(btn1)    
      bot.send_message(message.from_user.id, "✌️Приветствуем! Это решатор, который поможет вам с некоторыми математическими задачами. Если вы увидели, что бот не отвечает Вам, напишите админу: @aleksandr_twitt", reply_markup=markup)
      bot.send_message(message.from_user.id, " Вы в главном блоке! Мы можем помочь вам со следующими пунктами:")
      bot.send_message(message.from_user.id, MENU_TEXT)
      bot.send_message(message.from_user.id, " Введите номер интересующего вас пункта!")
      bot.register_next_step_handler(message, user_chose)
  elif message.text == "/start":
      markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
      btn1 = types.KeyboardButton("Главная")
      markup.add(btn1)      
      bot.send_message(message.from_user.id, "✌️Приветствуем! Это решатор, который поможет вам с некоторыми математическими задачами. Если вы увидели, что бот не отвечает Вам, напишите админу: @aleksandr_twitt", reply_markup=markup)
      bot.send_message(message.from_user.id, " Вы в главном блоке! Мы можем помочь вам со следующими пунктами:")
      bot.send_message(message.from_user.id, MENU_TEXT)
      bot.send_message(message.from_user.id, " Введите номер интересующего вас пункта!")
      bot.register_next_step_handler(message, user_chose)
  elif message.text == "/help":
      markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
      btn1 = types.KeyboardButton("Главная")
      markup.add(btn1)        
      bot.send_message(message.from_user.id, " Сейчас Вы в главном блоке!", reply_markup=markup)
      bot.send_message(message.from_user.id, "⬇️ Ниже мои команды :)⬇️")
      bot.send_message(message.from_user.id, " Мы можем помочь вам со следующими пунктами:")
      bot.send_message(message.from_user.id, MENU_TEXT)
      bot.send_message(message.from_user.id, "✍Введите номер интересующего вас пункта! Если Вы обнаружили баг/проблему, напишите, пожалуйста разработчику: @aleksandr_twitt")
      bot.register_next_step_handler(message, user_chose)
  elif message.text == "Главная":
      bot.send_message(message.from_user.id, " Вы в главном блоке!")
      bot.send_message(message.from_user.id, "____________________")
      bot.send_message(message.from_user.id, " Мы можем помочь вам со следующими пунктами:")
      bot.send_message(message.from_user.id, MENU_TEXT)
      bot.send_message(message.from_user.id, "✍ Введите номер интересующего вас пункта!") 
      bot.register_next_step_handler(message, user_chose)      
  else:
      bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши /help или нажми ниже на кнопку 'Главная', чтобы перейти в главный блок")

# Вот сам центр: + пункт 1 удалил (кусок кода) для умещения текста
def user_chose(message):
    try:
        if message.text == '1':
            bot.send_message(message.from_user.id, " Общий вид линейного уравнения: ax + b = 0")
            bot.send_message(message.from_user.id, "✍ Введите значение коэффициента -- a")
            bot.register_next_step_handler(message, liney)
        elif message.text == '2':
            bot.send_message(message.from_user.id, " Общий вид квадратного уравнения: ax^2 + bx + c = 0")
            bot.send_message(message.from_user.id, "✍ Введите значение коэффициента -- a")
            bot.register_next_step_handler(message, kvadrat_ur)
        elif message.text == '3':
            bot.send_message(message.from_user.id, "✍ Введите значение первого элемента прогрессии")
            bot.register_next_step_handler(message, progres_elem_contr)
        elif message.text == '4':
            bot.send_message(message.from_user.id, "✍ Введите числитель первой дроби")
            bot.register_next_step_handler(message, x1)
        else:
            global  markup
            markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
            global btn1
            btn1 = types.KeyboardButton("Главная")
            markup.add(btn1)              
            bot.send_message(message.from_user.id, 'Нет, это не цифра пункта! Пожалуйста, если хочешь, чтобы я решил пример, напиши -- "Главная", чтобы перейти обратно в главный блок!', reply_markup=markup)
    except ValueError:
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton("Главная")
        markup.add(btn1)       
        bot.send_message(message.from_user.id, "ОШИБКА!!!", reply_markup=markup)       
# УДАЛИЛИ КУСКИ кода с прогрессией (для умещения текста) , ситуация ниже аналогичная, т.е. пункт 4! 1 и 2 работают ок
def x1(message):
    global x1
    x1 = message.text
    try:
        x1 = int(x1)
        bot.send_message(message.from_user.id, "✍️ Введите знаменатель первой дроби")
        bot.register_next_step_handler(message, y1)
    except ValueError:
        bot.send_message(message.from_user.id, "ОШИБКА!!!")
def y1(message):
    global y1
    y1 = message.text
    try:
        y1 = int(y1)
        bot.send_message(message.from_user.id, "✍️ Введите числитель второй дроби")
        bot.register_next_step_handler(message, x2)
    except ValueError:
        bot.send_message(message.from_user.id, "ОШИБКА!!!")    

def x2(message):
    global x2
    x2 = message.text
    try:
        x2 = int(x2)
        bot.send_message(message.from_user.id, "✍️ Введите знаменатель первой дроби")
        bot.register_next_step_handler(message, y2)
    except ValueError:
        bot.send_message(message.from_user.id, "ОШИБКА!!!")
        
def y2(message):
    global y2
    y2 = message.text
    try:
        y2 = int(y2)
        bot.send_message(message.from_user.id, "Ваши дроби: {}/{} и {}/{}".format(x1, y1, x2, y2))
        bot.send_message(message.from_user.id, "✍️ Введите номер операции, которую вы хотите применить к данным дробям")
        bot.send_message(message.from_user.id, operation_drobi)
        bot.register_next_step_handler(message, user_chose_operation) 
    except ValueError:
        bot.send_message(message.from_user.id, "ОШИБКА!!!")

def user_chose_operation(message):
    global user_chose_operation
    user_chose_operation = message.text
    try:
        user_chose_operation = int(user_chose_operation)
        if user_chose_operation == 1:
            answer_x = x1 * y2 + x2 * y1
            answer_y = y1 * y2
            bot.send_message(message.from_user.id, "{}/{} + {}/{} = ...Считаю...".format(x1, y1, x2, y2))    
        elif user_chose_operation == 2:
            answer_x = x1 * y2 - x2 * y1
            answer_y = y1 * y2
            bot.send_message(message.from_user.id, "{}/{} - {}/{} = ...Считаю...".format(x1, y1, x2, y2))
        elif user_chose_operation == 3:
            answer_x = x1 * x2
            answer_y = y1 * y2
            bot.send_message(message.from_user.id, "{}/{} * {}/{} = ...Считаю...".format(x1, y1, x2, y2))
        elif user_chose_operation == 4:
            answer_x = x1 * y2
            answer_y = y1 * x2
            bot.send_message(message.from_user.id, "{}/{} / {}/{} = ...Считаю...".format(x1, y1, x2, y2))
        NOD = abs(answer_x)
        NOD = int(NOD)
        if abs(answer_y) < NOD:
            NOD = abs(answer_y)
        while not ((abs(answer_x) % NOD == 0) and abs(answer_y) % NOD == 0):
            NOD -= 1
            
        answer_x //= NOD
        answer_y //= NOD
            
        if answer_y == 1:
                bot.send_message(message.from_user.id, " Ответ: {}".format(answer_x))
                bot.send_message(message.from_user.id, " ✍Напишите сообщение 'Главная', чтобы перейти обратно в главный блок")
        elif answer_y < answer_x:
            cel = answer_x // answer_y
            answer_x1 = answer_x - (cel * answer_y)
            bot.send_message(message.from_user.id, " Ответ: {}|{}/{}".format(cel, answer_x1, answer_y))
            bot.send_message(message.from_user.id, " ✍Напишите сообщение 'Главная', чтобы перейти обратно в главный блок")
        else:
            bot.send_message(message.from_user.id, " Ответ: {}/{}".format(answer_x, answer_y))
            bot.send_message(message.from_user.id, " ✍Напишите сообщение 'Главная', чтобы перейти обратно в главный блок")
    except ValueError:
        bot.send_message(message.from_user.id, "ОШИБКА!!!")    

bot.polling(none_stop=True, interval=0)
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
mayton2019
@mayton2019
Bigdata Engineer
Капец ты продуктивный кодер. Это надо-же столько много букв написать.
Никто разбираться скорее всего не будет.

Но я-бы предложил тебе стратегию как в будущем не залетать с такой бедой.
Тебе надо стартовать новый проект который точно работает (hello world) на ботах.
И потихоньку начинай переносить свой функционал в новый проект. И делай запуск и тестируй.
И делай каждый раз git commit.

Наступит момент когда он упадет - это и будет проблемное добавление. Дальше - откатывайся взад
и разбирайся какое изменение привнесло дефект. Процесс можно ускорить если добавлять дихотомически.
Сначала +50%. Упало. Удалил 25%. Едет. И так далее.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@code_panik
Ошибка в попытке применить вызов функции к переменной типа int, а не функции.
Возникает, когда в bot.register_next_step_handler(message, x1) передается не функция x1, а значение типа int, которое записывается в global x1 после первого запуска функции x1.
Начните с переименования функций или переменных.
Ответ написан
Ваш ответ на вопрос

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

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