Разработать Telegram-бота для анализа и отчетности по реакциям на сообщения в чатах и каналах.
Основные функции

Анализ реакций на все сообщения в доступных чатах.
Сохранение данных о реакциях в базу данных.
Ежедневные отчеты о сообщениях с >2 реакций.
Еженедельные отчеты о сообщениях с >3 реакций.
Возможность запроса статистики за произвольный период.

Команды бота

/start - Начало работы и инструкции.
/daily_report - Последний ежедневный отчет.
/weekly_report - Последний еженедельный отчет.

примерный код:
import asyncio
import logging
from datetime import datetime, timedelta
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters
import sqlite3

# Настройка логирования
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)

# Замените на ваш токен
TOKEN = 'YOUR_BOT_TOKEN'

# Инициализация базы данных
def init_db():
    conn = sqlite3.connect('reactions.db')
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS reactions
                 (message_id INTEGER, chat_id INTEGER, reaction_count INTEGER, date TEXT)''')
    conn.commit()
    conn.close()

# Сохранение реакций в базу данных
def save_reaction(message_id, chat_id, reaction_count):
    conn = sqlite3.connect('reactions.db')
    c = conn.cursor()
    date = datetime.now().strftime('%Y-%m-%d')
    c.execute("INSERT INTO reactions VALUES (?, ?, ?, ?)", (message_id, chat_id, reaction_count, date))
    conn.commit()
    conn.close()

# Получение сообщений с более чем 2 реакциями за день
def get_daily_popular():
    conn = sqlite3.connect('reactions.db')
    c = conn.cursor()
    yesterday = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')
    c.execute("SELECT * FROM reactions WHERE date = ? AND reaction_count > 2", (yesterday,))
    results = c.fetchall()
    conn.close()
    return results

# Получение сообщений с более чем 3 реакциями за неделю
def get_weekly_popular():
    conn = sqlite3.connect('reactions.db')
    c = conn.cursor()
    week_ago = (datetime.now() - timedelta(days=7)).strftime('%Y-%m-%d')
    c.execute("SELECT * FROM reactions WHERE date >= ? AND reaction_count > 3", (week_ago,))
    results = c.fetchall()
    conn.close()
    return results

# Обработчик для анализа реакций на сообщения
async def analyze_reactions(update: Update, context):
    message = update.message
    if message.reply_to_message:
        reactions = message.reply_to_message.reactions
        if reactions:
            total_count = sum(reaction.total_count for reaction in reactions)
            save_reaction(message.reply_to_message.message_id, message.chat_id, total_count)

# Отправка ежедневного отчета
async def send_daily_report(context):
    popular_messages = get_daily_popular()
    if popular_messages:
        report = "Сообщения с более чем 2 реакциями за вчерашний день:\n\n"
        for msg in popular_messages:
            report += f"Сообщение ID: {msg[0]}, Количество реакций: {msg[2]}\n"
        await context.bot.send_message(chat_id=context.job.chat_id, text=report)
    else:
        await context.bot.send_message(chat_id=context.job.chat_id, text="Вчера не было сообщений с более чем 2 реакциями.")

# Отправка еженедельного отчета
async def send_weekly_report(context):
    popular_messages = get_weekly_popular()
    if popular_messages:
        report = "Сообщения с более чем 3 реакциями за прошедшую неделю:\n\n"
        for msg in popular_messages:
            report += f"Сообщение ID: {msg[0]}, Количество реакций: {msg[2]}\n"
        await context.bot.send_message(chat_id=context.job.chat_id, text=report)
    else:
        await context.bot.send_message(chat_id=context.job.chat_id, text="На прошлой неделе не было сообщений с более чем 3 реакциями.")

# Команда для запуска ежедневных и еженедельных отчетов
async def start_reports(update: Update, context):
    chat_id = update.effective_chat.id
    context.job_queue.run_daily(send_daily_report, time=datetime.time(hour=9, minute=0), chat_id=chat_id)
    context.job_queue.run_daily(send_weekly_report, time=datetime.time(hour=10, minute=0), days=(0,), chat_id=chat_id)
    await update.message.reply_text("Ежедневные и еженедельные отчеты настроены.")

def main():
    init_db()
    application = Application.builder().token(TOKEN).build()

    application.add_handler(CommandHandler("start_reports", start_reports))
    application.add_handler(MessageHandler(filters.ALL, analyze_reactions))

    application.run_polling(allowed_updates=Update.ALL_TYPES)

if __name__ == '__main__':
    main()