ChessCalcNextTour/bots/admin_bot.py
Roman Vrubel 5c4b2536e7 Добавлены Telegram-боты (клиентский + админский)
- Клиентский бот: принимает ссылку на chess-results.com,
  проверяет наличие результатов/жеребьёвки, считает пары
  следующего тура, выводит в HTML-формате
- Админский бот: /stat — уникальные пользователи,
  всего запросов, запросов за сегодня
- Статистика через SQLite (volume bot-data)
- Оба бота в docker-compose с автоперезапуском
- .env.example с тестовыми токенами
- .env в .gitignore
2026-06-14 20:39:19 +00:00

58 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Админский Telegram-бот chessCalc.
Показывает статистику использования клиентского бота.
"""
import os
import sys
from telegram import Update
from telegram.ext import Application, CommandHandler, ContextTypes
from telegram.constants import ParseMode
from bots.stats import get_stats, record_user
TOKEN = os.environ.get('ADMIN_BOT_TOKEN', '')
START_MSG = (
'<b>🔧 chessCalc — админский бот</b>\n\n'
'Доступные команды:\n'
'/stat — статистика использования клиентского бота\n'
'/start — эта справка'
)
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
user = update.effective_user
record_user(user.id, user.username or '', user.first_name or '',
user.last_name or '')
await update.message.reply_text(START_MSG, parse_mode=ParseMode.HTML)
async def stat(update: Update, context: ContextTypes.DEFAULT_TYPE):
user = update.effective_user
record_user(user.id, user.username or '', user.first_name or '',
user.last_name or '')
stats = get_stats()
text = (
'<b>📊 Статистика chessCalc</b>\n\n'
f'👤 Уникальных пользователей: <b>{stats["unique_users"]}</b>\n'
f'🔢 Всего запросов: <b>{stats["total_requests"]}</b>\n'
f'📅 За сегодня: <b>{stats["today_requests"]}</b>'
)
await update.message.reply_text(text, parse_mode=ParseMode.HTML)
def main():
if not TOKEN:
print('ADMIN_BOT_TOKEN not set', file=sys.stderr)
sys.exit(1)
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler('start', start))
app.add_handler(CommandHandler('stat', stat))
print('Admin bot started', file=sys.stderr)
app.run_polling()
if __name__ == '__main__':
main()