From f0e7e93e171414691d9f634093fec93854103163 Mon Sep 17 00:00:00 2001 From: vrubelroman Date: Wed, 10 Dec 2025 15:14:01 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D1=87=D0=B5=D1=82=D1=87=D0=B8=D0=BA=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=B9=20=D0=B8=20=D1=81=D0=BA=D0=B0=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B2=D0=B8=D0=B4=D0=B5=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 2 ++ bot.py | 45 +++++++++++++++++++++++++++++++++++++-------- docker-compose.yml | 5 ++++- 3 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..faa5798 --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here +TELEGRAM_BOT_USERNAME=vrubelVideoDownload_bot diff --git a/bot.py b/bot.py index b588826..a880fd8 100644 --- a/bot.py +++ b/bot.py @@ -17,8 +17,9 @@ logging.basicConfig( ) logger = logging.getLogger(__name__) -# Токен бота из переменной окружения +# Токен бота и имя бота из переменных окружения TELEGRAM_BOT_TOKEN = os.getenv('TELEGRAM_BOT_TOKEN') +TELEGRAM_BOT_USERNAME = os.getenv('TELEGRAM_BOT_USERNAME', 'vrubelVideoDownload_bot') # Директория для временных файлов DOWNLOADS_DIR = Path('video') @@ -32,11 +33,15 @@ def load_stats() -> dict: if STATS_FILE.exists(): try: with open(STATS_FILE, 'r', encoding='utf-8') as f: - return json.load(f) + stats = json.load(f) + # Обеспечиваем обратную совместимость + if 'users' not in stats: + stats['users'] = [] + return stats except Exception as e: logger.error(f"Ошибка при загрузке статистики: {e}") - return {'total_downloads': 0} - return {'total_downloads': 0} + return {'total_downloads': 0, 'users': []} + return {'total_downloads': 0, 'users': []} def save_stats(stats: dict): """Сохраняет статистику в файл""" @@ -53,6 +58,18 @@ def increment_downloads(): save_stats(stats) logger.info(f"Общее количество скачанных видео: {stats['total_downloads']}") +def add_user(chat_id: int): + """Добавляет пользователя в список уникальных пользователей""" + stats = load_stats() + users = stats.get('users', []) + # Преобразуем в set для уникальности, затем обратно в list + users_set = set(users) + if chat_id not in users_set: + users_set.add(chat_id) + stats['users'] = list(users_set) + save_stats(stats) + logger.info(f"Добавлен новый пользователь. Всего пользователей: {len(users_set)}") + def detect_video_source(url: str) -> str: """Определяет источник видео по URL""" @@ -334,6 +351,9 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE): url = update.message.text.strip() chat_id = update.message.chat_id + # Добавляем пользователя в статистику при первом взаимодействии + add_user(chat_id) + # Проверяем, является ли сообщение URL if not (url.startswith('http://') or url.startswith('https://')): await update.message.reply_text( @@ -364,9 +384,10 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE): await status_message.edit_text("📤 Отправляю видео...") video_file = open(video_path, 'rb') + caption = f"Видео скачано с @{TELEGRAM_BOT_USERNAME}" await update.message.reply_video( video=video_file, - caption="✅ Видео готово!", + caption=caption, supports_streaming=True ) video_file.close() @@ -391,6 +412,10 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE): async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE): """Обрабатывает команду /start""" + # Добавляем пользователя в статистику + chat_id = update.message.chat_id + add_user(chat_id) + await update.message.reply_text( "👋 Привет! Я бот для скачивания видео.\n\n" "Просто отправь мне ссылку на видео, и я скачаю его для тебя.\n\n" @@ -408,10 +433,14 @@ async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE): async def stat_command(update: Update, context: ContextTypes.DEFAULT_TYPE): """Обрабатывает команду /stat""" stats = load_stats() - total = stats.get('total_downloads', 0) + total_downloads = stats.get('total_downloads', 0) + users = stats.get('users', []) + total_users = len(users) + await update.message.reply_text( - f"📊 Статистика скачанных видео:\n\n" - f"Всего скачано: {total} видео" + f"📊 Статистика бота:\n\n" + f"👥 Всего пользователей: {total_users}\n" + f"📹 Всего скачано видео: {total_downloads}" ) diff --git a/docker-compose.yml b/docker-compose.yml index 68aa607..e37e02a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,8 +3,11 @@ services: build: . container_name: video_download_bot restart: unless-stopped + env_file: + - .env environment: - - TELEGRAM_BOT_TOKEN=8531436675:AAFRoIlqP1PRDy_da3NZQM0L8uQGHtvhTII + - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN} + - TELEGRAM_BOT_USERNAME=${TELEGRAM_BOT_USERNAME} volumes: - ./video:/app/video - ./instagram_cookies.txt:/app/instagram_cookies.txt