stats errors
This commit is contained in:
parent
1c99e109b8
commit
8a20b91c54
4 changed files with 477 additions and 47 deletions
79
bot.py
79
bot.py
|
|
@ -86,7 +86,7 @@ TEXTS = {
|
|||
"Добавьте бота в группу с правами администратора — "
|
||||
"он будет автоматически скачивать видео из сообщений участников."
|
||||
),
|
||||
'stat': "📊 Статистика бота:\n\n👥 Всего пользователей: {users}\n📹 Всего скачано видео: {downloads}",
|
||||
'stat': "📊 Статистика бота:\n\n👥 Всего пользователей: {users}\n📹 Всего скачано видео: {downloads}\n\n❌ Ошибки по сервисам:\n{error_stats}",
|
||||
'send_link': (
|
||||
"Пожалуйста, отправьте ссылку на видео.\n"
|
||||
"Поддерживаемые источники:\n"
|
||||
|
|
@ -140,7 +140,7 @@ TEXTS = {
|
|||
"Add the bot to a group with admin rights — "
|
||||
"it will automatically download videos from participants' messages."
|
||||
),
|
||||
'stat': "📊 Bot statistics:\n\n👥 Total users: {users}\n📹 Total downloads: {downloads}",
|
||||
'stat': "📊 Bot statistics:\n\n👥 Total users: {users}\n📹 Total downloads: {downloads}\n\n❌ Errors by service:\n{error_stats}",
|
||||
'send_link': (
|
||||
"Please send a video link.\n"
|
||||
"Supported sources:\n"
|
||||
|
|
@ -223,6 +223,19 @@ def init_database():
|
|||
if cursor.fetchone()[0] == 0:
|
||||
cursor.execute('INSERT INTO stats (id, total_downloads) VALUES (1, 0)')
|
||||
|
||||
# Таблица статистики ошибок по сервисам
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS error_stats (
|
||||
service TEXT PRIMARY KEY,
|
||||
error_count INTEGER DEFAULT 0
|
||||
)
|
||||
''')
|
||||
|
||||
# Инициализируем счетчики ошибок для всех сервисов
|
||||
services = ['youtube', 'instagram', 'tiktok', 'vk', 'yapfiles', 'unknown']
|
||||
for service in services:
|
||||
cursor.execute('INSERT OR IGNORE INTO error_stats (service, error_count) VALUES (?, 0)', (service,))
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
logger.info("База данных инициализирована")
|
||||
|
|
@ -272,6 +285,37 @@ def get_total_users() -> int:
|
|||
return 0
|
||||
|
||||
|
||||
def increment_error_count(service: str):
|
||||
"""Увеличивает счетчик ошибок для указанного сервиса"""
|
||||
try:
|
||||
conn = sqlite3.connect(str(DB_FILE))
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''
|
||||
INSERT INTO error_stats (service, error_count)
|
||||
VALUES (?, 1)
|
||||
ON CONFLICT(service) DO UPDATE SET error_count = error_count + 1
|
||||
''', (service,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
logger.info(f"Увеличено количество ошибок для сервиса {service}")
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при увеличении счетчика ошибок для {service}: {e}")
|
||||
|
||||
|
||||
def get_error_stats() -> dict[str, int]:
|
||||
"""Возвращает статистику ошибок по сервисам"""
|
||||
try:
|
||||
conn = sqlite3.connect(str(DB_FILE))
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('SELECT service, error_count FROM error_stats ORDER BY service')
|
||||
results = cursor.fetchall()
|
||||
conn.close()
|
||||
return {service: count for service, count in results}
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при получении статистики ошибок: {e}")
|
||||
return {}
|
||||
|
||||
|
||||
def get_user_locale(chat_id: int) -> str:
|
||||
"""Возвращает локаль пользователя из базы данных"""
|
||||
try:
|
||||
|
|
@ -414,6 +458,10 @@ async def process_queue_item(item: QueueItem):
|
|||
max_size = 50 * 1024 * 1024 # 50 MB
|
||||
|
||||
if file_size > max_size:
|
||||
# Определяем источник и увеличиваем счетчик ошибок
|
||||
source = detect_video_source(item.url)
|
||||
increment_error_count(source)
|
||||
|
||||
size_mb = file_size / (1024 * 1024)
|
||||
error_msg = get_text(item.locale, 'error_file_too_large', size_mb=size_mb)
|
||||
await item.status_message.edit_text(error_msg)
|
||||
|
|
@ -456,6 +504,11 @@ async def process_queue_item(item: QueueItem):
|
|||
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при обработке {item.url}: {e}")
|
||||
|
||||
# Определяем источник и увеличиваем счетчик ошибок
|
||||
source = detect_video_source(item.url)
|
||||
increment_error_count(source)
|
||||
|
||||
error_msg = get_text(item.locale, 'error', error=str(e))
|
||||
try:
|
||||
await item.status_message.edit_text(error_msg)
|
||||
|
|
@ -918,9 +971,29 @@ async def stat_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
|||
|
||||
total_downloads = get_total_downloads()
|
||||
total_users = get_total_users()
|
||||
error_stats = get_error_stats()
|
||||
|
||||
# Форматируем статистику ошибок
|
||||
error_stats_text = ""
|
||||
service_names = {
|
||||
'youtube': 'YouTube',
|
||||
'instagram': 'Instagram',
|
||||
'tiktok': 'TikTok',
|
||||
'vk': 'VK',
|
||||
'yapfiles': 'Yapfiles',
|
||||
'unknown': 'Unknown'
|
||||
}
|
||||
|
||||
for service, count in sorted(error_stats.items()):
|
||||
if count > 0:
|
||||
service_name = service_names.get(service, service)
|
||||
error_stats_text += f" • {service_name}: {count}\n"
|
||||
|
||||
if not error_stats_text:
|
||||
error_stats_text = " Нет ошибок" if locale == 'ru' else " No errors"
|
||||
|
||||
await update.message.reply_text(
|
||||
get_text(locale, 'stat', users=total_users, downloads=total_downloads)
|
||||
get_text(locale, 'stat', users=total_users, downloads=total_downloads, error_stats=error_stats_text.strip())
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue