import telebot
from telebot import types
import yt_dlp
import os
import logging
bot = telebot.TeleBot('TOKEN')
user_gender = {}
user_states = {}
logging.basicConfig(level=logging.INFO)
STATE_NONE = 'none'
STATE_ASKED_GENDER = 'asked_gender'
STATE_ASKED_DAY = 'asked_day'
STATE_BACK = 'back'
STATE_ASKED_FOR_TRAINING = 'asked_for_training'
STATE_ASKED_FOR_GUIDE = 'asked_for_guide'
def update_user_state(user_id, state):
user_states[user_id] = state
logging.info(f"User state updated to {state} for user {user_id}")
def get_user_state(user_id):
return user_states.get(user_id, STATE_NONE)
@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)
update_user_state(message.from_user.id, STATE_NONE)
def main_menu_markup():
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton('Наши соцсети и сайт')
item2 = types.KeyboardButton('Гайд по питанию и тренировкам')
item3 = types.KeyboardButton('Написать в поддержку')
item4 = types.KeyboardButton('Получить тренировки')
markup.row(item1)
markup.row(item2)
markup.row(item3)
markup.row(item4)
return markup
pass
photosm = []
photosw = []
video_links = {
'Женщина': {
'1 день': [],
'2 день': [],
'3 день': []
},
'Мужчина': {
'1 день': [],
'2 день': [],
'3 день': []
}
}
def send_youtube_video(chat_id, video_url):
try:
ydl_opts = {
'format': 'best',
'outtmpl': 'downloaded_video.%(ext)s',
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info_dict = ydl.extract_info(video_url, download=True)
video_path = ydl.prepare_filename(info_dict)
with open(video_path, 'rb') as video_file:
bot.send_video(chat_id, video_file, supports_streaming=True, caption=info_dict.get('title'))
os.remove(video_path)
except Exception as e:
bot.send_message(chat_id, f"Ошибка при отправке видео: {e}")
def handle_back(message):
start(message)
update_user_state(message.from_user.id, STATE_NONE)
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)
@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, 'Пожалуйста, выберите ваш пол.')
logging.info(f"set_gender called for user {message.from_user.id} with text: {message.text}")
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)
update_user_state(message.from_user.id, STATE_ASKED_DAY)
@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)
elif message.text == 'Наши соцсети и сайт':
# Обработка запроса на соцсети и сайт
send_socials_and_website(message)
elif message.text == 'Написать в поддержку':
# Обработка запроса на поддержку
write_to_support(message)
elif message.text == 'Гайд по питанию и тренировкам':
send_photos(message)
@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]
bot.send_message(message.chat.id, f'Начинаем загрузку видео. Ожидайте')
# Отправляем каждое видео из списка
for video_url in video_urls:
send_youtube_video(message.chat.id, video_url)
# Обновляем состояние пользователя на STATE_NONE после отправки видео
update_user_state(user_id, STATE_ASKED_DAY)
else:
bot.send_message(message.chat.id, 'Пожалуйста, сначала укажите ваш пол.')
else:
bot.send_message(message.chat.id, 'Пожалуйста, выберите день тренировки.')
pass
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 send_photos(message):
keyboard = types.InlineKeyboardMarkup()
btn1 = types.InlineKeyboardButton(text='женщины', callback_data='btn1')
btn2 = types.InlineKeyboardButton(text='мужчины', callback_data='btn2')
keyboard.row(btn1)
keyboard.row(btn2)
bot.send_message(message.chat.id, f'Выберите для какого пола вы хотите получить гайд по питанию и тренировкам', reply_markup=keyboard)
def send_gender_photos(chat_id, gender):
if gender == 'женщины':
for photo in photosw:
bot.send_photo(chat_id, photo)
elif gender == 'мужчины':
for photo in photosm:
bot.send_photo(chat_id, photo)
pass
bot.polling(none_stop=True)
Как сделать так, чтобы при нажатии на инлайн кнопку с каким либо полом пользователю через функцию send_photos или еще как то отправлялись фотографии? Новичок в программировании, пишу на питоне