Telegram Bot迁移服务器后数据库丢失,如何获取历史启动用户ID列表?
获取Telegram Bot历史启动用户ID的解决方案
Telegram Bot API本身没有提供直接获取所有曾启动过机器人的用户ID的接口,但可以通过客户端API调用messages.getDialogs方法实现,具体步骤如下:
核心逻辑:通过机器人账号登录Telegram客户端API,遍历机器人的所有对话列表,过滤出用户类型的对话并提取ID。注意需要使用机器人的API ID、API Hash(而非Bot Token)来调用客户端API,Bot Token仅能访问Bot API接口。
实现步骤:
- 在Telegram开发者平台获取机器人对应的API ID和API Hash(与Bot Token分开申请)。
- 使用支持客户端API的开发库(如Python的Pyrogram或Telethon)编写脚本:
- 以Telethon为例,初始化客户端并完成机器人账号登录
- 遍历所有对话,筛选出用户对话并提取
user_id
- 示例代码(Telethon):
from telethon import TelegramClient # 替换为你的实际信息 api_id = 123456 api_hash = 'abcdef1234567890abcdef1234567890' # 初始化客户端,session文件会保存登录状态 client = TelegramClient('bot_session', api_id, api_hash) async def collect_user_ids(): user_ids = set() # 遍历所有对话 async for dialog in client.iter_dialogs(): if dialog.is_user: user_ids.add(dialog.id) # 保存结果到文件 with open('bot_user_ids.txt', 'w') as f: f.write('\n'.join(map(str, user_ids))) print(f"成功获取{len(user_ids)}个唯一用户ID,已保存到bot_user_ids.txt") # 运行脚本 with client: client.loop.run_until_complete(collect_user_ids()) - 注意事项:
- 仅能抓取机器人仍保留对话记录的用户,若用户主动删除对话则无法获取
- 避免频繁调用接口,防止触发Telegram的频率限制
- 确保机器人账号状态正常,无限制或封禁情况
内容的提问来源于stack exchange,提问作者Emma Teylor
相关产品推荐
相关产品推荐

