You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telegram机器人/stats命令失效问题排查求助

解决Telegram机器人/stats命令无响应的问题

问题根源在于Telebot的消息处理器是按注册顺序匹配的:一旦某个处理器匹配成功,后续的处理器就不会被触发。你的代码中,@bot.message_handler(func=lambda message: True)这个通用处理器会匹配所有消息,且它的注册顺序在/stats命令处理器之前,导致发送/stats时,通用处理器先捕获了消息,send_stats函数完全没有执行的机会。

修复步骤

把通用消息处理器(echo_all)的定义移到所有命令处理器的后面,确保命令处理器能优先匹配到对应的指令。

修改后的完整代码

import telebot
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
import time

# 填入你的机器人令牌
bot_token = ''

# 创建机器人实例
bot = telebot.TeleBot(bot_token)

# 存储统计数据的字典
statistics = {}
total_messages = 0
unique_users = set()

# /start命令处理器
@bot.message_handler(commands=['start'])
def send_welcome(message):
    bot.reply_to(message, "Привет! Я бот, который будет отправлять сообщения из группы, в личную переписку!")

# /stats命令处理器
@bot.message_handler(commands=['stats'])
def send_stats(message):
    # 生成统计文本
    stats_text = "Статистика по ключевым словам:\n\n"
    for keyword, count in statistics.items():
        stats_text += f"{keyword}: {count}\n"

    # 添加唯一用户数量信息
    unique_users_count = len(unique_users)
    stats_text += f"\nКоличество уникальных пользователей: {unique_users_count}"

    # 添加总消息数量信息
    stats_text += f"\nОбщее количество сообщений: {total_messages}"

    # 在控制台输出统计信息
    print(stats_text)

    # 发送统计信息到指定聊天
    chat_id = 'CHAT_ID'
    bot.send_message(chat_id, stats_text)

# 通用消息处理器(处理所有其他消息)
@bot.message_handler(func=lambda message: True)
def echo_all(message):
    global total_messages
    
    # 设定要筛选的关键词和标签
    keywords = ['сайт']
    
    # 检查消息是否包含指定关键词或标签
    for keyword in keywords:
        if keyword.lower() in message.text.lower() or f'#{keyword}' in message.text:
            # 发送消息到指定聊天
            chat_id = 'CHAT_ID'
            username = message.from_user.username
            text = f"Найдено сообщение с ключевым словом/хештегом '{keyword}':\n\n{message.text}"
            keyboard = [[InlineKeyboardButton("Написать заказчику", url=f"https://t.me/{username}")]]
            reply_markup = InlineKeyboardMarkup(keyboard)
            bot.send_message(chat_id, text, reply_markup=reply_markup)

            # 更新对应关键词的统计计数
            if keyword in statistics:
                statistics[keyword] += 1
            else:
                statistics[keyword] = 1
            
            # 更新总消息计数
            total_messages += 1
            
            # 添加用户到唯一用户集合
            unique_users.add(message.from_user.id)

            break

# 启动机器人
bot.polling()

额外说明

  • 所有命令处理器必须在通用处理器之前注册,才能确保命令被优先识别
  • 调整顺序后,/start和/stats命令会被正确匹配,通用处理器只会处理非命令类的消息

内容的提问来源于stack exchange,提问作者Larry Dog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:20:24