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

Как обработать кнопку?

import telebot
from telebot import types
from pytube import YouTube
import os

bot = telebot.TeleBot('TOKEN')

user_gender = {}
user_states = {}


@bot.message_handler(commands=['start'])
def start(message):
    markup = main_menu_markup()  # Используем функцию для создания разметки
    bot.send_message(message.chat.id,
                     'Привет, {0.first_name}! Я бот БезВреда, чем могу быть обязан?'.format(message.from_user),
                     reply_markup=markup)


def main_menu_markup():
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton('Наши соцсети и сайт')
    item3 = types.KeyboardButton('Написать в поддержку')
    item4 = types.KeyboardButton('Получить тренировки')
    markup.row(item1)
    markup.row(item3)
    markup.row(item4)
    return markup


videolinks = 'ССЫЛКИ НА ВИДЕО ДЛЯ МУЖЧИН И ЖЕНЩИН'


def send_youtube_video(chat_id, video_url):
    try:
        yt = YouTube(video_url)
        # Получаем название видео
        video_title = yt.title
        # Выбираем поток с более низким разрешением
        video = yt.streams.filter(progressive=True, file_extension='mp4').order_by('resolution').asc().first()
        if video:
            video_path = video.download()
            video_file = open(video_path, 'rb')
            # Отправляем видео с названием
            bot.send_video(chat_id, video_file, supports_streaming=True, caption=video_title)
            video_file.close()
            os.remove(video_path)
    except Exception as e:
        bot.send_message(chat_id, f"Ошибка при отправке видео: {e}")


STATE_NONE = 'none'
STATE_ASKED_GENDER = 'asked_gender'
STATE_ASKED_DAY = 'asked_day'
STATE_BACK = 'back'
STATE_ASKED_FOR_TRAINING = 'asked_for_training'


def get_user_state(user_id):
    return user_states.get(user_id, STATE_NONE)


def update_user_state(user_id, state):
    user_states[user_id] = state


@bot.message_handler(func=lambda message: get_user_state(message.from_user.id) == STATE_NONE)
def handle_message(message):
    if message.text == 'Получить тренировки':
        ask_for_gender(message)
        # Обновляем состояние пользователя на новое состояние
        update_user_state(message.from_user.id, STATE_ASKED_FOR_TRAINING)
    elif message.text == 'Наши соцсети и сайт':
        # Вызываем функцию, которая обрабатывает запрос на соцсети и сайт
        send_socials_and_website(message)
    elif message.text == 'Написать в поддержку':
        # Вызываем функцию, которая обрабатывает запрос на поддержку
        write_to_support(message)
    # Добавьте здесь обработку других кнопок, если это необходимо


def send_socials_and_website(message):
    keyboard = types.InlineKeyboardMarkup()
    url_btn = types.InlineKeyboardButton(text='Наш сайт', url='https://bezvreda.shop/')
    url_btn1 = types.InlineKeyboardButton(text='Ozon',
                                          url='https://www.ozon.ru/category/varene-31561/bezvreda-101005855/')
    url_btn2 = types.InlineKeyboardButton(text='Wildberries',
                                          url='https://www.wildberries.ru/brands/310609804-bezvreda')
    url_btn3 = types.InlineKeyboardButton(text='Instagram',
                                          url='https://www.instagram.com/bezvreda.shop?igsh=OHhmYzFlbm5uMHp1')
    url_btn4 = types.InlineKeyboardButton(text='Яндекс Маркет',
                                          url='https://market.yandex.ru/business--otel-park-krestovskii-restoran/110479582')
    url_btn5 = types.InlineKeyboardButton(text='ВКонтакте', url='https://vk.com/bezvreda.shop')
    keyboard.row(url_btn)
    keyboard.row(url_btn1)
    keyboard.row(url_btn2)
    keyboard.row(url_btn3)
    keyboard.row(url_btn4)
    keyboard.row(url_btn5)

    bot.send_message(message.chat.id, 'Пожалуйста, мы много где есть', reply_markup=keyboard)

    pass


def write_to_support(message):
    keyboard = types.InlineKeyboardMarkup()
    whatsapp_url = f"https://wa.me/+79623456710"
    whatsapp_button = types.InlineKeyboardButton(text='Написать в WhatsApp', url=whatsapp_url)
    keyboard.add(whatsapp_button)
    bot.send_message(message.chat.id, 'Если у вас есть вопросы, вы можете написать нам в WhatsApp.',
                     reply_markup=keyboard)
    pass


def ask_for_gender(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.row('Женщина')
    markup.row('Мужчина')
    markup.row('Назад')
    bot.send_message(message.chat.id, 'Пожалуйста, выберите ваш пол:', reply_markup=markup)
    update_user_state(message.from_user.id, STATE_ASKED_GENDER)


def handle_back(message):
    # Возвращаем пользователя в главное меню
    start(message)
    update_user_state(message.from_user.id, STATE_NONE)


@bot.message_handler(func=lambda message: get_user_state(message.from_user.id) == STATE_ASKED_GENDER)
def set_gender(message):
    user_id = message.from_user.id
    if message.text == 'Назад':
        handle_back(message)
    elif message.text in ['Женщина', 'Мужчина']:
        user_gender[user_id] = message.text
        bot.send_message(message.chat.id,
                         f'Отлично! Ваш пол установлен как {message.text}. Теперь вы можете выбрать день тренировки.')
        ask_for_day(message)
        update_user_state(user_id, STATE_ASKED_DAY)
    else:
        bot.send_message(message.chat.id, 'Пожалуйста, выберите ваш пол.')


def ask_for_day(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.row('1 день')
    markup.row('2 день')
    markup.row('3 день')
    markup.row('Назад')
    bot.send_message(message.chat.id, 'Выберите день тренировки:', reply_markup=markup)


@bot.message_handler(func=lambda message: get_user_state(message.from_user.id) == STATE_ASKED_DAY)
def send_training_video(message):
    user_id = message.from_user.id
    if message.text == 'Назад':
        # Возвращаем пользователя к выбору пола
        ask_for_gender(message)
        update_user_state(user_id, STATE_ASKED_GENDER)
    elif message.text in ['1 день', '2 день', '3 день']:
        gender = user_gender.get(user_id)
        if gender:
            # Получаем список видео для выбранного дня и пола
            video_urls = video_links[gender][message.text]
            # Отправляем каждое видео из списка
            for video_url in video_urls:
                send_youtube_video(message.chat.id, video_url)
            # Обновляем состояние пользователя на STATE_NONE после отправки видео
            update_user_state(user_id, STATE_NONE)
        else:
            bot.send_message(message.chat.id, 'Пожалуйста, сначала укажите ваш пол.')
    else:
        bot.send_message(message.chat.id, 'Пожалуйста, выберите день тренировки.')


bot.polling(none_stop=True)

Почему когда пользователь выбирает пол или жмет на кнопку назад при выборе пола, то ничего не происходит?
  • Вопрос задан
  • 45 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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