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

Проблемы с запуском бота телеграм на Python?

Бот в телеграм, при нажатии кнопки /start никак не реагирует на эту писанину, что не так?

from telegram import Update
from telegram.ext import Updater, CommandHandler, MessageHandler, filters, CallbackContext
from telegram import ReplyKeyboardMarkup


# Определяем возможные ответы на вопросы
answers = {
    'q1': ['a', 'b'],
    'q2': ['x', 'y'],
    'q3': ['r', 'p'],
    'q4': ['n', 'm']
}
q1 = 'на какое время хотите инвестировать?'
q2 = 'сохранение капитала или рисковое приумножение?'
q3 = 'готовы ли Вы рисковать своими вложениями?'
q4 = 'готовы ли Вы каждый день проверять свои инвестиции и мониторить ситуацию на рынке?'
a = 'короткосрок'
b = 'долгосрок'
x = 'сохранение'
y = 'приумножение'
r = 'да'
p = 'нет'
n = 'да'
m = 'нет'

# Функция для создания клавиатуры с кнопками ответов
def build_menu(buttons, n_cols, header_buttons=None, footer_buttons=None):
    menu = [buttons[i:i + n_cols] for i in range(0, len(buttons), n_cols)]
    if header_buttons:
        menu.insert(0, header_buttons)
    if footer_buttons:
        menu.append(footer_buttons)
    return menu

# Функция для получения вердикта по комбинации ответов
def get_verdict(user_answers):
    if user_answers == ['b', 'x', 'p', 'm']:
        return "Вам подойдут акции из категории первого эшелона такие как: Газпром, Магнит, Сбер, Тинькофф и др"
    elif user_answers == ['b', 'y', 'p', 'n']:
        return "Вам подойдут акции из категории второго эшелона такие как: Башнефть, АВТОВАЗ, Промсвязьбанк и др"
    elif user_answers == ['a', 'y', 'r', 'n']:
        return "Вам подойдут акции из категории второго эшелона такие как: ОВК, ЧКПЗ, Звезда, МРСК Урала и др"
    else:
        return "Вам надо четче сформулировать свои цели от инвестирования"

# Функция для обработки команды /start
def start(update: Update, context: CallbackContext):
    context.user_data['answers'] = []
    ask_question(update, context, 'q1')

# Функция для задавания вопроса и отображения кнопок ответов
def ask_question(update: Update, context: CallbackContext, question_key):
    question = f"Вопрос {len(context.user_data['answers']) + 1}: {globals()[question_key]}"
    buttons = [globals()[answer] for answer in answers[question_key]]
    reply_markup = ReplyKeyboardMarkup(build_menu(buttons, n_cols=2), one_time_keyboard=True)
    update.message.reply_text(question, reply_markup=reply_markup)

# Функция для обработки ответов пользователя
def answer_question(update: Update, context: CallbackContext):
    user_answer = update.message.text
    context.user_data['answers'].append(user_answer)
    if len(context.user_data['answers']) < 4:
        next_question = f"q{len(context.user_data['answers']) + 1}"
        ask_question(update, context, next_question)
    else:
        verdict = get_verdict(context.user_data['answers'])
        update.message.reply_text(verdict)

def main():
    updater = Updater("7006411619:AAHwBTmOsqOqMrJ0jd5b9pbWZUj0ya1vDIk", use_context=True)

    dispatcher = updater.dispatcher
    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, answer_question))

    updater.start_polling()

if __name__ == '__main__':
    main()
  • Вопрос задан
  • 83 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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