Telegram

如何在 Telegram 频道中实现带“点赞”和“阅读数”统计的自动化机器人


如何在 Telegram 频道中实现带“点赞”和“阅读数”统计的自动化机器人

痛点描述

在 Telegram 频道中,内容的互动性是关键。用户对内容的“点赞”以及“阅读数”的统计不仅能够提升用户参与度,还能够帮助频道管理员分析受欢迎的内容。然而,Telegram 原生并不提供这种统计功能,导致需要手动收集和分析数据。为了解决这一痛点,本文将介绍如何创建一个自动化机器人,实现带“点赞”和“阅读数”统计的功能。

核心逻辑

实现该功能的核心逻辑如下:

  1. 机器人注册:使用 BotFather 创建一个 Telegram 机器人并获取 API Token。
  2. 消息处理:监听频道中的消息,并为每条消息生成一个唯一的 ID。
  3. 点赞功能:为每条消息提供一个“点赞”按钮,用户点击后,记录该消息的点赞数。
  4. 阅读数统计:监听消息的阅读事件,记录阅读数。
  5. 数据存储:使用数据库(如 SQLite 或 MongoDB)来存储点赞和阅读数的统计数据。
  6. 数据展示:通过命令或定时任务,展示统计结果。

Python 代码示例

以下是使用 Python 的 python-telegram-bot 库实现的基本示例:

from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, MessageHandler, Filters, CallbackContext
import logging

# 启用日志记录
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)

# 存储点赞和阅读数
stats = {}

def start(update: Update, context: CallbackContext) -> None:
    update.message.reply_text('欢迎使用统计机器人!')

def message_handler(update: Update, context: CallbackContext) -> None:
    message_id = update.message.message_id
    stats[message_id] = {'likes': 0, 'reads': 0}
    keyboard = [[InlineKeyboardButton("点赞", callback_data=f'like_{message_id}')]]
    reply_markup = InlineKeyboardMarkup(keyboard)
    update.message.reply_text('新消息:', reply_markup=reply_markup)

def button_handler(update: Update, context: CallbackContext) -> None:
    query = update.callback_query
    query.answer()
    
    message_id = int(query.data.split('_')[1])
    if query.data.startswith('like'):
        stats[message_id]['likes'] += 1
        query.edit_message_text(text=f"点赞数: {stats[message_id]['likes']}")

def stats_command(update: Update, context: CallbackContext) -> None:
    response = "消息统计:\n"
    for message_id, data in stats.items():
        response += f"消息ID: {message_id} | 点赞数: {data['likes']} | 阅读数: {data['reads']}\n"
    update.message.reply_text(response)

def main() -> None:
    updater = Updater("YOUR_API_TOKEN")
    dispatcher = updater.dispatcher

    dispatcher.add_handler(CommandHandler("start", start))
    dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, message_handler))
    dispatcher.add_handler(CallbackQueryHandler(button_handler))
    dispatcher.add_handler(CommandHandler("stats", stats_command))

    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

JS 代码示例

使用 Node.js 的 node-telegram-bot-api 库实现的示例:

const TelegramBot = require('node-telegram-bot-api');
const token = 'YOUR_API_TOKEN';
const bot = new TelegramBot(token, {polling: true});

let stats = {};

bot.onText(/\/start/, (msg) => {
    bot.sendMessage(msg.chat.id, '欢迎使用统计机器人!');
});

bot.on('message', (msg) => {
    const messageId = msg.message_id;
    stats[messageId] = { likes: 0, reads: 0 };
    const opts = {
        reply_markup: {
            inline_keyboard: [[
                { text: '点赞', callback_data: `like_${messageId}` }
            ]]
        }
    };
    bot.sendMessage(msg.chat.id, '新消息:', opts);
});

bot.on('callback_query', (query) => {
    const messageId = parseInt(query.data.split('_')[1]);
    stats[messageId].likes++;
    bot.answerCallbackQuery(query.id)
        .then(() => {
            bot.editMessageText(`点赞数: ${stats[messageId].likes}`, { chat_id: query.message.chat.id, message_id: query.message.message_id });
        });
});

bot.onText(/\/stats/, (msg) => {
    let response = "消息统计:\n";
    for (const messageId in stats) {
        response += `消息ID: ${messageId} | 点赞数: ${stats[messageId].likes} | 阅读数: ${stats[messageId].reads}\n`;
    }
    bot.sendMessage(msg.chat.id, response);
});

高级优化建议

  1. 持久化存储:使用数据库(如 PostgreSQL、MongoDB)替代内存存储,以便处理大规模数据和长期存储。
  2. 异步处理:在处理大量消息时,考虑使用异步操作来提高性能。
  3. 消息阅读监控:使用 Telegram 的 API 来获取消息的阅读状态,如果可行的话,提升阅读数的准确性。
  4. 前端展示:开发一个网页或小程序,展示统计数据,提升用户体验。
  5. 多语言支持:为机器人添加多语言支持,吸引更广泛的用户群体。
方案优势劣势
Python社区支持多,易于扩展资源消耗相对较高
Node.js性能优越,异步处理学习曲线较陡峭
数据库数据持久化,查询效率高配置复杂,维护成本高
内存快速访问,简单实现数据丢失风险,无法持久化

通过本文的介绍,你现在应该了解了如何在 Telegram 频道中实现带“点赞”和“阅读数”统计的自动化机器人。根据以上的代码示例和优化建议,你可以根据自己的需求扩展和完善该功能。

本文由 ApiAnswer 原创。我们在 API 集成、自动化流程和 Telegram Bot 开发领域拥有丰富经验。

遇到技术瓶颈? 获取专家支持