Python实现Telegram Bot/start指令点击用户数统计与回复
Telegram 机器人/start触发用户总数统计实现
- 采用本地SQLite存储触发记录,将用户ID设为唯一主键,同一用户多次触发
/start不会重复计数,统计结果准确 - 统计结果严格按照要求返回
users: 总数量格式 - 统计接口默认加管理员权限校验,仅配置的管理员可查询数据,避免信息泄露
前置准备
先安装依赖库:
pip install python-telegram-bot==20.7
完整代码
import sqlite3 from telegram import Update from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes # 配置项 - 替换为你自己的参数 BOT_TOKEN = "你的Telegram机器人Token" ADMIN_USER_ID = 123456789 # 替换为你自己的Telegram数字ID,用于权限校验 STATS_COMMAND = "count" # 触发统计的指令,可自行修改 def init_database(): """初始化存储数据库""" conn = sqlite3.connect("user_records.db") cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS start_users ( user_id INTEGER PRIMARY KEY UNIQUE ) ''') conn.commit() conn.close() async def start_handler(update: Update, context: ContextTypes.DEFAULT_TYPE): """处理/start指令,自动记录触发用户""" user_id = update.effective_user.id conn = sqlite3.connect("user_records.db") cursor = conn.cursor() # 已存在的用户ID自动忽略插入,避免重复计数 cursor.execute("INSERT OR IGNORE INTO start_users (user_id) VALUES (?)", (user_id,)) conn.commit() conn.close() # 可替换为你自己的/start欢迎语 await update.message.reply_text("欢迎使用本机器人") async def stats_handler(update: Update, context: ContextTypes.DEFAULT_TYPE): """处理统计查询指令,返回用户总数""" # 非管理员直接拦截 if update.effective_user.id != ADMIN_USER_ID: await update.message.reply_text("无操作权限") return conn = sqlite3.connect("user_records.db") cursor = conn.cursor() cursor.execute("SELECT COUNT(*) FROM start_users") total_users = cursor.fetchone()[0] conn.close() # 严格按照要求格式返回结果 await update.message.reply_text(f"users: {total_users}") if __name__ == "__main__": init_database() application = ApplicationBuilder().token(BOT_TOKEN).build() # 注册指令处理器 application.add_handler(CommandHandler("start", start_handler)) application.add_handler(CommandHandler(STATS_COMMAND, stats_handler)) print("机器人运行中") application.run_polling()
使用说明
- 替换代码中配置项的机器人Token和管理员ID,直接运行脚本即可启动机器人
- 所有用户触发
/start时会自动去重记录,数据持久化存储在脚本同目录的user_records.db文件中,重启服务不会丢失 - 管理员发送配置的统计指令(默认是
/count),即可得到users: 数字格式的准确统计结果
内容的提问来源于stack exchange,提问作者Benedict Maxwell
相关产品推荐
相关产品推荐

