Add files via upload
Initial project upload
This commit is contained in:
commit
126e76963c
20 files changed
+1227
No files matched your search
@@ -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}")
|
||||
Reference in new issue
Block a user