Добавлены Telegram-боты (клиентский + админский)
- Клиентский бот: принимает ссылку на chess-results.com, проверяет наличие результатов/жеребьёвки, считает пары следующего тура, выводит в HTML-формате - Админский бот: /stat — уникальные пользователи, всего запросов, запросов за сегодня - Статистика через SQLite (volume bot-data) - Оба бота в docker-compose с автоперезапуском - .env.example с тестовыми токенами - .env в .gitignore
This commit is contained in:
parent
bbbfe61094
commit
5c4b2536e7
9 changed files with 415 additions and 14 deletions
58
bots/admin_bot.py
Normal file
58
bots/admin_bot.py
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
"""
|
||||
Админский 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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue