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)
Почему когда пользователь выбирает пол или жмет на кнопку назад при выборе пола, то ничего не происходит?