счетчик пользователей и скачанных видео
This commit is contained in:
parent
ae8c7aba93
commit
f0e7e93e17
3 changed files with 43 additions and 9 deletions
2
.env.example
Normal file
2
.env.example
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here
|
||||||
|
TELEGRAM_BOT_USERNAME=vrubelVideoDownload_bot
|
||||||
45
bot.py
45
bot.py
|
|
@ -17,8 +17,9 @@ logging.basicConfig(
|
||||||
)
|
)
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
# Токен бота из переменной окружения
|
# Токен бота и имя бота из переменных окружения
|
||||||
TELEGRAM_BOT_TOKEN = os.getenv('TELEGRAM_BOT_TOKEN')
|
TELEGRAM_BOT_TOKEN = os.getenv('TELEGRAM_BOT_TOKEN')
|
||||||
|
TELEGRAM_BOT_USERNAME = os.getenv('TELEGRAM_BOT_USERNAME', 'vrubelVideoDownload_bot')
|
||||||
|
|
||||||
# Директория для временных файлов
|
# Директория для временных файлов
|
||||||
DOWNLOADS_DIR = Path('video')
|
DOWNLOADS_DIR = Path('video')
|
||||||
|
|
@ -32,11 +33,15 @@ def load_stats() -> dict:
|
||||||
if STATS_FILE.exists():
|
if STATS_FILE.exists():
|
||||||
try:
|
try:
|
||||||
with open(STATS_FILE, 'r', encoding='utf-8') as f:
|
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:
|
except Exception as e:
|
||||||
logger.error(f"Ошибка при загрузке статистики: {e}")
|
logger.error(f"Ошибка при загрузке статистики: {e}")
|
||||||
return {'total_downloads': 0}
|
return {'total_downloads': 0, 'users': []}
|
||||||
return {'total_downloads': 0}
|
return {'total_downloads': 0, 'users': []}
|
||||||
|
|
||||||
def save_stats(stats: dict):
|
def save_stats(stats: dict):
|
||||||
"""Сохраняет статистику в файл"""
|
"""Сохраняет статистику в файл"""
|
||||||
|
|
@ -53,6 +58,18 @@ def increment_downloads():
|
||||||
save_stats(stats)
|
save_stats(stats)
|
||||||
logger.info(f"Общее количество скачанных видео: {stats['total_downloads']}")
|
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:
|
def detect_video_source(url: str) -> str:
|
||||||
"""Определяет источник видео по URL"""
|
"""Определяет источник видео по URL"""
|
||||||
|
|
@ -334,6 +351,9 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
url = update.message.text.strip()
|
url = update.message.text.strip()
|
||||||
chat_id = update.message.chat_id
|
chat_id = update.message.chat_id
|
||||||
|
|
||||||
|
# Добавляем пользователя в статистику при первом взаимодействии
|
||||||
|
add_user(chat_id)
|
||||||
|
|
||||||
# Проверяем, является ли сообщение URL
|
# Проверяем, является ли сообщение URL
|
||||||
if not (url.startswith('http://') or url.startswith('https://')):
|
if not (url.startswith('http://') or url.startswith('https://')):
|
||||||
await update.message.reply_text(
|
await update.message.reply_text(
|
||||||
|
|
@ -364,9 +384,10 @@ async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
await status_message.edit_text("📤 Отправляю видео...")
|
await status_message.edit_text("📤 Отправляю видео...")
|
||||||
|
|
||||||
video_file = open(video_path, 'rb')
|
video_file = open(video_path, 'rb')
|
||||||
|
caption = f"Видео скачано с @{TELEGRAM_BOT_USERNAME}"
|
||||||
await update.message.reply_video(
|
await update.message.reply_video(
|
||||||
video=video_file,
|
video=video_file,
|
||||||
caption="✅ Видео готово!",
|
caption=caption,
|
||||||
supports_streaming=True
|
supports_streaming=True
|
||||||
)
|
)
|
||||||
video_file.close()
|
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):
|
async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
"""Обрабатывает команду /start"""
|
"""Обрабатывает команду /start"""
|
||||||
|
# Добавляем пользователя в статистику
|
||||||
|
chat_id = update.message.chat_id
|
||||||
|
add_user(chat_id)
|
||||||
|
|
||||||
await update.message.reply_text(
|
await update.message.reply_text(
|
||||||
"👋 Привет! Я бот для скачивания видео.\n\n"
|
"👋 Привет! Я бот для скачивания видео.\n\n"
|
||||||
"Просто отправь мне ссылку на видео, и я скачаю его для тебя.\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):
|
async def stat_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
"""Обрабатывает команду /stat"""
|
"""Обрабатывает команду /stat"""
|
||||||
stats = load_stats()
|
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(
|
await update.message.reply_text(
|
||||||
f"📊 Статистика скачанных видео:\n\n"
|
f"📊 Статистика бота:\n\n"
|
||||||
f"Всего скачано: {total} видео"
|
f"👥 Всего пользователей: {total_users}\n"
|
||||||
|
f"📹 Всего скачано видео: {total_downloads}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,11 @@ services:
|
||||||
build: .
|
build: .
|
||||||
container_name: video_download_bot
|
container_name: video_download_bot
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
environment:
|
environment:
|
||||||
- TELEGRAM_BOT_TOKEN=8531436675:AAFRoIlqP1PRDy_da3NZQM0L8uQGHtvhTII
|
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
|
||||||
|
- TELEGRAM_BOT_USERNAME=${TELEGRAM_BOT_USERNAME}
|
||||||
volumes:
|
volumes:
|
||||||
- ./video:/app/video
|
- ./video:/app/video
|
||||||
- ./instagram_cookies.txt:/app/instagram_cookies.txt
|
- ./instagram_cookies.txt:/app/instagram_cookies.txt
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue