Add files via upload

Initial project upload
This commit is contained in:
nini52 authored and GitHub committed 2026-07-08 09:06:08 +03:00
commit 126e76963c
20 files changed
+1227

No files matched your search

+211
View File
@@ -0,0 +1,211 @@
import telebot
import requests
import sys
import os
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
from telebot import apihelper
from config import TOKEN
from database import get_user
from handlers.registration import process_registration, is_in_registration
from handlers.menu import show_main_menu, handle_menu_choice
from keyboards.reply_keyboards import get_main_menu_keyboard
# === НАСТРОЙКА ДЛЯ ОБХОДА БЛОКИРОВОК ===
session = requests.Session()
retry = Retry(total=5, backoff_factor=1)
adapter = HTTPAdapter(max_retries=retry)
session.mount('https://', adapter)
apihelper.session = session
apihelper.CONNECT_TIMEOUT = 30
apihelper.READ_TIMEOUT = 30
# === ИНИЦИАЛИЗАЦИЯ БОТА ===
bot = telebot.TeleBot(TOKEN)
# === ФЛАГ ДЛЯ УПРАВЛЕНИЯ БОТОМ ===
bot_running = True
# === КОМАНДА /start ===
@bot.message_handler(commands=['start'])
def start(message):
user_id = message.from_user.id
user = get_user(user_id)
if user:
bot.send_message(
user_id,
f"👋 С возвращением, {user[2]}!",
reply_markup=get_main_menu_keyboard()
)
return
# Начинаем регистрацию
from handlers.registration import user_data as reg_data
reg_data[user_id] = {'step': 1}
bot.send_message(
user_id,
"👋 Привет! Я твой бизнес-помощник.\n\n"
"Давай познакомимся! Как тебя зовут?\n"
"(Напиши своё имя)"
)
# === КОМАНДА /stop - ОСТАНОВИТЬ БОТА (ДЛЯ ВСЕХ) ===
@bot.message_handler(commands=['stop'])
def stop_bot(message):
user_id = message.from_user.id
global bot_running
bot_running = False
bot.send_message(user_id, "🛑 Вы остановилибота...")
print(f"🛑 Бот остановлен пользователем {user_id}")
# Останавливаем бота
bot.stop_polling()
os._exit(0)
# === КОМАНДА /restart - ПЕРЕЗАПУСТИТЬ БОТА (ДЛЯ ВСЕХ) ===
@bot.message_handler(commands=['restart'])
def restart_bot(message):
user_id = message.from_user.id
bot.send_message(user_id, "🔄 Перезапускаю бота...")
print(f"🔄 Перезапуск бота пользователем {user_id}")
# Перезапускаем
bot.stop_polling()
os.execv(sys.executable, ['python'] + sys.argv)
# === КОМАНДА /status - СТАТУС БОТА (ДЛЯ ВСЕХ) ===
@bot.message_handler(commands=['status'])
def status_bot(message):
user_id = message.from_user.id
import datetime
now = datetime.datetime.now().strftime("%d.%m.%Y %H:%M:%S")
# Проверяем, есть ли GROQ_API_KEY
try:
from config import GROQ_API_KEY
groq_status = "подключен ✅" if GROQ_API_KEY else "не подключен ⚠️"
except:
groq_status = "не подключен ⚠️"
status_text = f"""
📊 **СТАТУС БОТА**
🟢 Состояние: **Активен** ✅
📅 Текущее время: {now}
📋 **Информация:**
• Бот запущен и работает
• База данных: подключена ✅
• Groq API: {groq_status}
💡 **Команды управления:**
/stop - остановить бота
/restart - перезапустить бота
/status - этот статус
"""
bot.send_message(user_id, status_text, parse_mode='Markdown')
# === КОМАНДА /help - ПОМОЩЬ ===
@bot.message_handler(commands=['help'])
def help_command(message):
user_id = message.from_user.id
help_text = """
🤖 **ПОМОЩЬ ПО БОТУ**
📋 **Основные команды:**
/start - начать работу или открыть меню
/help - показать эту справку
/status - статус бота
/stop - остановить бота
/restart - перезапустить бота
📱 **Меню после регистрации:**
📋 Мой профиль - посмотреть свои данные
✏️ Обновить описание - изменить описание бизнеса
📊 Статистика - статистика
💡 Предложить контент - сгенерировать пост для соцсетей
⚙️ Настройки - настройки бота
💡 **Как использовать:**
1. Напиши /start
2. Пройди регистрацию
3. Используй кнопки меню
4. Нажми "💡 Предложить контент" для генерации поста
"""
bot.send_message(user_id, help_text, parse_mode='Markdown')
# === ОБРАБОТКА ВСЕХ СООБЩЕНИЙ ===
@bot.message_handler(func=lambda message: True)
def handle_messages(message):
global bot_running
if not bot_running:
bot.send_message(message.chat.id, "🛑 Бот остановлен. Напиши /restart для перезапуска.")
return
user_id = message.from_user.id
text = message.text
# Проверяем, зарегистрирован ли пользователь
user = get_user(user_id)
if user:
# Если пользователь в процессе обновления описания
from handlers.registration import user_data as reg_data
if user_id in reg_data and reg_data[user_id].get('step') == 'edit_description':
from database import update_user_description
update_user_description(user_id, text)
del reg_data[user_id]
bot.send_message(
user_id,
"✅ Описание обновлено!",
reply_markup=get_main_menu_keyboard()
)
return
# Обрабатываем выбор в меню
if handle_menu_choice(message, bot):
return
# Если ничего не подошло - показываем меню
bot.send_message(
user_id,
"Используй кнопки меню 👇",
reply_markup=get_main_menu_keyboard()
)
return
# Если пользователь НЕ зарегистрирован - регистрируем
if is_in_registration(user_id):
process_registration(message, bot)
else:
bot.send_message(
user_id,
"❌ Ты не зарегистрирован. Напиши /start"
)
# === ЗАПУСК БОТА ===
if __name__ == '__main__':
print("🤖 БОТ ЗАПУЩЕН!")
print("📋 Команды:")
print(" /start - начать работу")
print(" /help - помощь")
print(" /status - статус бота")
print(" /stop - остановить бота")
print(" /restart - перезапустить бота")
print("✅ Используй кнопки для навигации")
try:
bot.infinity_polling(timeout=30)
except KeyboardInterrupt:
print("🛑 Бот остановлен вручную (Ctrl+C)")
except Exception as e:
print(f"❌ Ошибка: {e}")