如何获取与我的机器人交互过的所有用户列表?及第三方实现方法咨询
获取与机器人交互过的用户列表实现方案
由于多数平台不会直接提供“所有交互用户”的查询接口,这类功能核心是机器人主动记录并管理交互用户数据,结合bot token做权限校验,具体实现步骤如下:
核心实现逻辑
实时捕获交互并记录用户
当机器人收到用户的任何交互(消息、命令、按钮点击等)时,提取用户的唯一标识(如user_id)、用户名等基础信息,同时记录交互时间戳,存入存储服务(如Redis、轻量数据库)。
示例伪代码:def process_user_interaction(update): # 从交互事件中提取用户信息 user_id = update.from_user.id username = update.from_user.username last_interact_time = datetime.utcnow().isoformat() # 用bot token做身份校验后,写入存储 if validate_bot_token(request.headers.get("X-Bot-Token")): storage.hset(f"interacted_users", user_id, json.dumps({ "username": username, "last_interact_time": last_interact_time }))基于Bot Token的权限控制
所有读写用户数据的操作,都需要通过bot token进行身份验证,确保只有你的机器人能访问这些数据。比如在调用存储接口时,将token作为请求参数或请求头传递,服务端验证通过后再执行操作。自动清理过期数据
针对“数据保存不超过24小时”的要求,设置定时任务(如CRON脚本),定期删除超过24小时未交互的用户记录:def clean_expired_users(): cutoff_time = (datetime.utcnow() - timedelta(hours=24)).isoformat() # 遍历所有用户记录,筛选过期数据 all_users = storage.hgetall("interacted_users") expired_user_ids = [ user_id for user_id, data in all_users.items() if json.loads(data)["last_interact_time"] < cutoff_time ] # 删除过期记录 if expired_user_ids: storage.hdel("interacted_users", *expired_user_ids)查询交互用户列表
当需要获取用户列表时,直接从存储中读取所有有效记录即可:def get_interacted_users_list(): if validate_bot_token(request.headers.get("X-Bot-Token")): all_users = storage.hgetall("interacted_users") return [json.loads(data) for data in all_users.values()] return []
关键注意事项
- 因为机器人无法获取历史对话记录,必须实时触发记录逻辑,不能事后补录用户信息,否则会遗漏未被捕获的交互用户。
- 务必使用平台提供的用户唯一ID(如Telegram的
user_id、Discord的id)作为存储键,避免同一用户被重复记录。 - 定时清理任务要保证执行频率,比如每小时执行一次,确保过期数据及时被删除。
内容的提问来源于stack exchange,提问作者mehdi
相关产品推荐
相关产品推荐

