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

Пишу код для Telegram Бота, как не делать тупые ошибки?

В общем, я новичок в программировании, но кое-что уже знаю. У меня появилась потребность написать бота в тг для помощи в экзамене по предмету "Управление качеством". Для этого я использовал ЯП Python и метод Telebot. После 2 дней чтения документации и просмотра разного рода видео на эту тему (где все почему-то делают эхо бота???), я столкнулся с проблемой, что не понимаю как брать данные из сообщения пользователя.
import telebot

bot = telebot.TeleBot('') 

@bot.message_handler(commands=["start"])
def start(message):
    bot.send_message(message.chat.id, 'Привет, я помогу тебе с заданием!, пиши /help')
@bot.message_handler(commands=["help"])
def help(message):
    bot.send_message(message.chat.id, 'Отправь какой способ решения у тебя: 1 - унитаризация, 2 - нормализация')
@bot.message_handler()  
def text(message):
    if message.text == "1" or "unitaryzacja" or "унитаризация" or "Унитаризация" or "Unitaryzacja":
        bot.send_message(message.chat.id, 'Введи первое число транспорта А')
        def first_number(message):
            #a1 = 0
            if a1 == int(message.text):
                bot.send_message(message.chat.id, 'Введи первое число транспорта B')
            else:       
                bot.send_message(message.chat.id, 'Введи цифрами')
        def second_number(message):
            #b1 = 0
            if b1 == int(message.text):
                bot.send_message(message.chat.id, 'Введи первое число транспорта C')
            else:
                bot.send_message(message.chat.id, 'Введи цифрами')
        def third_number(message):
            #c1 = 0
            if c1 == int(message.text):
                bot.send_message(message.chat.id, 'Первая характеристика:\n1 - stymulanta\n2 - destymulanta\n3 - nominanta')
                def proverka(message):
                    if message.text == "1" or "stymulanta" or "Stymulanta":
                        maxx=max(a1,b1,c1)
                        minn=min(a1,b1,c1)
                        x1=(a1-minn)/(maxx-minn)
                        x2=(b1-minn)/(maxx-minn)
                        x3=(c1-minn)/(maxx-minn)
                        bot.send_message(message.chat.id, "x1="+str(x1)+"\n"+"x2="+str(x2)+"\n"+"x3="+str(x3)+"\n")
                    elif message.text == "2" or "destymulanta" or "Destymulanta":
                        maxx=max(a1,b1,c1)
                        minn=min(a1,b1,c1)
                        x1=(maxx-a1)/(maxx-minn)
                        x2=(maxx-b1)/(maxx-minn)
                        x3=(maxx-c1)/(maxx-minn)
                        bot.send_message(message.chat.id, "x1="+str(x1)+"\n"+"x2="+str(x2)+"\n"+"x3="+str(x3)+"\n")
                    elif message.text == "3" or "nominanta" or "Nominanta":
                        bot.send_message(message.chat.id, 'Введи идеальное значение Nominanty')
                        def nominanta(message):
                            nominan=0
                            if nominan == int(message.text):
                                maxx=max(a1,b1,c1,nominan)
                                minn=min(a1,b1,c1,nominan)
                                if nominan>a1:
                                    x1=(a1-minn)/(nominan-minn)
                                else:
                                    x1=(maxx-a1)/(maxx-nominan)
                                if nominan>b1:
                                    x2=(b1-minn)/(nominan-minn)
                                else:
                                    x2=(maxx-b1)/(maxx-nominan)
                                if nominan>c1:
                                    x3=(c1-minn)/(nominan-minn)
                                else:
                                    x3=(maxx-c1)/(maxx-nominan)
                                bot.send_message(message.chat.id, "x1="+str(x1)+"\n"+"x2="+str(x2)+"\n"+"x3="+str(x3)+"\n")
            else:       
                bot.send_message(message.chat.id, 'Введи цифрами')
bot.polling(none_stop=True)

С таким кодом, у меня бот не двигается дальше 14 строчки кода. То есть он присылает смс "Введите число Транспорта А", я ввожу, но он снова присылает "Введите число Транспорта А". Как мне перейти к следующему def?
P.S. код скорее всего ужасный, заранее извиняюсь +_+
  • Вопрос задан
  • 219 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
От того, что ты объявил функцию внутри другой функции, никакой магии не случится. Бот не узнает про неё, и не поймёт сам, что теперь её нужно вызвать.

Тебе нужно читать про register_next_step_handler(), ну или посмотреть официальный пример на тему.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Сначала надо изучить язык программирования, потом освоить нужную библиотеку и уже тогда писать бота. А то это как выехать на трассу, купив водительсике права, но не изучив азы вождения.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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