Задать вопрос
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
Сисадмин, просто сисадмин...
Сначала надо изучить язык программирования, потом освоить нужную библиотеку и уже тогда писать бота. А то это как выехать на трассу, купив водительсике права, но не изучив азы вождения.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽