Add files via upload
Initial project upload
This commit is contained in:
commit
126e76963c
20 files changed
+1227
No files matched your search
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,78 @@
|
||||
from database import get_user
|
||||
from ai_core.neural_network import ContentGenerator
|
||||
from keyboards.reply_keyboards import get_content_keyboard, BUSINESS_TYPES
|
||||
import time
|
||||
|
||||
# Создаем экземпляр генератора контента
|
||||
content_gen = ContentGenerator()
|
||||
|
||||
def handle_content_generation(message, bot, platform_text):
|
||||
"""Генерирует контент для выбранной платформы"""
|
||||
user_id = message.from_user.id
|
||||
user = get_user(user_id)
|
||||
|
||||
if not user:
|
||||
bot.send_message(user_id, "❌ Ты не зарегистрирован. Напиши /start")
|
||||
return
|
||||
|
||||
# Извлекаем платформу из текста кнопки
|
||||
platform_map = {
|
||||
"📝 Пост для Instagram": "instagram",
|
||||
"💼 Пост для LinkedIn": "linkedin",
|
||||
"📱 Пост для Telegram": "telegram",
|
||||
"🧵 Пост для Twitter/X": "twitter",
|
||||
"🎯 Рекламный пост": "ad"
|
||||
}
|
||||
|
||||
platform = platform_map.get(platform_text, "instagram")
|
||||
platform_emoji = {
|
||||
"instagram": "📸",
|
||||
"linkedin": "💼",
|
||||
"telegram": "📱",
|
||||
"twitter": "🐦",
|
||||
"ad": "📢"
|
||||
}
|
||||
|
||||
# Получаем данные пользователя
|
||||
business_type = BUSINESS_TYPES.get(str(user[4]), {}).get('name', 'Бизнес')
|
||||
description = user[5] or "не указано"
|
||||
|
||||
# Отправляем статус "печатает"
|
||||
bot.send_chat_action(user_id, "typing")
|
||||
|
||||
# Генерируем контент
|
||||
try:
|
||||
post = content_gen.generate_post(business_type, description, platform)
|
||||
|
||||
# Отправляем результат
|
||||
response_text = f"""
|
||||
{platform_emoji.get(platform, '📝')} **ГОТОВЫЙ ПОСТ ДЛЯ {platform.upper()}**
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
{post}
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
💡 **Совет:**
|
||||
• Добавь хештеги из поста
|
||||
• Прикрепи фото или видео
|
||||
• Укажи ссылку на свой сайт
|
||||
|
||||
📌 Хочешь другой вариант? Снова нажми "💡 Предложить контент"
|
||||
"""
|
||||
|
||||
bot.send_message(user_id, response_text, parse_mode='Markdown')
|
||||
|
||||
except Exception as e:
|
||||
bot.send_message(
|
||||
user_id,
|
||||
f"❌ Ошибка генерации: {e}\n\nПопробуй позже или обнови описание бизнеса."
|
||||
)
|
||||
|
||||
# Показываем меню выбора платформы для следующего поста
|
||||
bot.send_message(
|
||||
user_id,
|
||||
"📱 Для какой соцсети нужен следующий пост?",
|
||||
reply_markup=get_content_keyboard()
|
||||
)
|
||||
@@ -0,0 +1,139 @@
|
||||
from database import get_user, update_user_description
|
||||
from keyboards.reply_keyboards import get_main_menu_keyboard, get_settings_keyboard, get_content_keyboard, BUSINESS_TYPES
|
||||
from handlers.content import handle_content_generation
|
||||
|
||||
def show_main_menu(user_id, bot):
|
||||
"""Показывает главное меню"""
|
||||
user = get_user(user_id)
|
||||
if user:
|
||||
bot.send_message(
|
||||
user_id,
|
||||
"🏠 Главное меню\n\nВыбери действие:",
|
||||
reply_markup=get_main_menu_keyboard()
|
||||
)
|
||||
else:
|
||||
bot.send_message(
|
||||
user_id,
|
||||
"❌ Ты не зарегистрирован. Напиши /start",
|
||||
reply_markup=None
|
||||
)
|
||||
|
||||
def handle_menu_choice(message, bot):
|
||||
"""Обрабатывает выбор в главном меню"""
|
||||
user_id = message.from_user.id
|
||||
text = message.text
|
||||
|
||||
if text == "📋 Мой профиль":
|
||||
show_profile(message, bot)
|
||||
return True
|
||||
|
||||
elif text == "✏️ Обновить описание":
|
||||
# Запускаем процесс обновления описания
|
||||
from handlers.registration import user_data
|
||||
user_data[user_id] = {'step': 'edit_description'}
|
||||
bot.send_message(
|
||||
user_id,
|
||||
"📝 Напиши новое описание своего бизнеса:",
|
||||
reply_markup=None
|
||||
)
|
||||
return True
|
||||
|
||||
elif text == "📊 Статистика":
|
||||
show_stats(message, bot)
|
||||
return True
|
||||
|
||||
elif text == "💡 Предложить контент":
|
||||
# Показываем выбор платформы для контента
|
||||
bot.send_message(
|
||||
user_id,
|
||||
"📱 Для какой соцсети нужен контент?",
|
||||
reply_markup=get_content_keyboard()
|
||||
)
|
||||
return True
|
||||
|
||||
elif text == "⚙️ Настройки":
|
||||
bot.send_message(
|
||||
user_id,
|
||||
"⚙️ Настройки:",
|
||||
reply_markup=get_settings_keyboard()
|
||||
)
|
||||
return True
|
||||
|
||||
# Обработка кнопок настроек
|
||||
elif text == "🔔 Включить уведомления":
|
||||
bot.send_message(user_id, "✅ Уведомления включены!")
|
||||
return True
|
||||
|
||||
elif text == "🔕 Выключить уведомления":
|
||||
bot.send_message(user_id, "🔕 Уведомления выключены!")
|
||||
return True
|
||||
|
||||
elif text == "📝 Сменить тему бизнеса":
|
||||
bot.send_message(
|
||||
user_id,
|
||||
"Напиши новое описание бизнеса:",
|
||||
reply_markup=None
|
||||
)
|
||||
return True
|
||||
|
||||
elif text == "⬅️ Назад в меню":
|
||||
show_main_menu(user_id, bot)
|
||||
return True
|
||||
|
||||
# Обработка выбора платформы для контента
|
||||
elif text in ["📝 Пост для Instagram", "💼 Пост для LinkedIn",
|
||||
"📱 Пост для Telegram", "🧵 Пост для Twitter/X",
|
||||
"🎯 Рекламный пост"]:
|
||||
handle_content_generation(message, bot, text)
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def show_profile(message, bot):
|
||||
"""Показывает профиль пользователя"""
|
||||
user_id = message.from_user.id
|
||||
user = get_user(user_id)
|
||||
|
||||
if not user:
|
||||
bot.send_message(user_id, "❌ Ты не зарегистрирован. Напиши /start")
|
||||
return
|
||||
|
||||
business_name = BUSINESS_TYPES.get(str(user[4]), {}).get('name', 'Не указан')
|
||||
|
||||
profile_text = f"""
|
||||
📋 **ТВОЙ ПРОФИЛЬ**
|
||||
━━━━━━━━━━━━━━━━━
|
||||
|
||||
👤 **Имя:** {user[2]}
|
||||
📱 **Телефон:** {user[3]}
|
||||
🏢 **Вид бизнеса:** {business_name}
|
||||
📝 **Описание:**
|
||||
{user[5]}
|
||||
|
||||
━━━━━━━━━━━━━━━━━
|
||||
💡 Хочешь обновить описание? Нажми "✏️ Обновить описание"
|
||||
"""
|
||||
bot.send_message(user_id, profile_text, parse_mode='Markdown')
|
||||
show_main_menu(user_id, bot)
|
||||
|
||||
def show_stats(message, bot):
|
||||
"""Показывает статистику"""
|
||||
user_id = message.from_user.id
|
||||
user = get_user(user_id)
|
||||
|
||||
if not user:
|
||||
bot.send_message(user_id, "❌ Ты не зарегистрирован. Напиши /start")
|
||||
return
|
||||
|
||||
stats_text = f"""
|
||||
📊 **СТАТИСТИКА**
|
||||
|
||||
👤 Ты зарегистрирован как предприниматель
|
||||
📋 Тип: {BUSINESS_TYPES.get(str(user[4]), {}).get('name', 'Не указан')}
|
||||
📝 Описание: {user[5][:50]}...
|
||||
|
||||
💡 Совет: Регулярно обновляй информацию о бизнесе,
|
||||
чтобы я мог давать тебе точные рекомендации!
|
||||
"""
|
||||
bot.send_message(user_id, stats_text, parse_mode='Markdown')
|
||||
show_main_menu(user_id, bot)
|
||||
@@ -0,0 +1,106 @@
|
||||
from handlers.menu import show_main_menu
|
||||
from keyboards.reply_keyboards import get_phone_keyboard, get_business_types_keyboard, BUSINESS_TYPES
|
||||
from database import get_user, save_user
|
||||
|
||||
# Хранилище для временных данных пользователей
|
||||
user_data = {}
|
||||
|
||||
def process_registration(message, bot):
|
||||
"""Обработка регистрации"""
|
||||
user_id = message.from_user.id
|
||||
text = message.text
|
||||
step = user_data[user_id].get('step', 1)
|
||||
|
||||
if step == 1:
|
||||
# Сохраняем имя
|
||||
user_data[user_id]['name'] = text
|
||||
user_data[user_id]['step'] = 2
|
||||
|
||||
bot.send_message(
|
||||
user_id,
|
||||
f"👋 Приятно познакомиться, {text}!\n\n"
|
||||
"📱 Теперь отправь мне свой номер телефона.\n"
|
||||
"Нажми на кнопку ниже 👇",
|
||||
reply_markup=get_phone_keyboard()
|
||||
)
|
||||
|
||||
elif step == 2:
|
||||
# Сохраняем телефон
|
||||
if message.contact:
|
||||
phone = message.contact.phone_number
|
||||
else:
|
||||
phone = text
|
||||
|
||||
user_data[user_id]['phone'] = phone
|
||||
user_data[user_id]['step'] = 3
|
||||
|
||||
bot.send_message(
|
||||
user_id,
|
||||
"📋 Выбери свой вид предпринимательства:",
|
||||
reply_markup=get_business_types_keyboard()
|
||||
)
|
||||
|
||||
elif step == 3:
|
||||
# Проверяем выбор вида бизнеса
|
||||
selected_type = None
|
||||
for key, value in BUSINESS_TYPES.items():
|
||||
if text == f"{value['emoji']} {key}. {value['name']}":
|
||||
selected_type = int(key)
|
||||
break
|
||||
|
||||
if not selected_type:
|
||||
bot.send_message(
|
||||
user_id,
|
||||
"❌ Пожалуйста, выбери вид бизнеса из кнопок ниже:",
|
||||
reply_markup=get_business_types_keyboard()
|
||||
)
|
||||
return
|
||||
|
||||
user_data[user_id]['business_type'] = selected_type
|
||||
user_data[user_id]['step'] = 4
|
||||
|
||||
bot.send_message(
|
||||
user_id,
|
||||
f"✅ Отлично! Ты выбрал: {BUSINESS_TYPES[str(selected_type)]['name']}\n\n"
|
||||
"📝 Теперь расскажи немного о своем бизнесе:\n"
|
||||
"(Чем занимаешься? Сколько лет на рынке? Какие цели?)",
|
||||
reply_markup=None
|
||||
)
|
||||
|
||||
elif step == 4:
|
||||
# Сохраняем описание
|
||||
description = text
|
||||
|
||||
save_user(
|
||||
user_id,
|
||||
user_data[user_id]['name'],
|
||||
user_data[user_id]['phone'],
|
||||
user_data[user_id]['business_type'],
|
||||
description
|
||||
)
|
||||
|
||||
# Сохраняем вид бизнеса для дальнейшего использования
|
||||
business_type_name = BUSINESS_TYPES[str(user_data[user_id]['business_type'])]['name']
|
||||
|
||||
# Очищаем временные данные
|
||||
del user_data[user_id]
|
||||
|
||||
welcome_text = f"""
|
||||
🎉 ПОЗДРАВЛЯЮ! РЕГИСТРАЦИЯ ЗАВЕРШЕНА!
|
||||
|
||||
✅ Ты зарегистрирован как предприниматель!
|
||||
📋 Тип бизнеса: {business_type_name}
|
||||
|
||||
💡 Теперь я буду помогать тебе:
|
||||
• Генерировать контент для соцсетей
|
||||
• Давать советы по бизнесу
|
||||
• Анализировать твою нишу
|
||||
|
||||
Нажми «💡 Предложить контент» в меню! 👇
|
||||
"""
|
||||
bot.send_message(user_id, welcome_text)
|
||||
show_main_menu(user_id, bot)
|
||||
|
||||
def is_in_registration(user_id):
|
||||
"""Проверяет, находится ли пользователь в процессе регистрации"""
|
||||
return user_id in user_data
|
||||
Reference in new issue
Block a user