如何使用Node.js获取Telegram Bot用户的注册日期?
获取Telegram用户注册日期的解决方案
嘿,我之前也折腾过这个需求!确实,Telegram Bot API本身并没有提供直接获取用户注册日期的接口——因为这类底层用户数据不在Bot API的暴露范围内。要实现类似你提到的那个机器人的功能,我们得借助MTProto API(Telegram的底层API)来获取这些隐藏信息。
下面是具体的实现步骤和代码示例,基于Node.js环境:
1. 准备工作
首先,你需要两个关键信息(和Bot Token是分开的):
- API ID和API Hash:去Telegram开发者平台申请,登录后创建一个应用就能拿到这两个值。
- 安装依赖:我们用
telegram(原gramjs)这个Node.js库来对接MTProto,同时用grammy处理Bot消息(你也可以替换成自己常用的Bot库,比如node-telegram-bot-api):
npm install telegram grammy
2. 完整代码示例
const { Bot } = require('grammy'); const { Telegram } = require('telegram'); const { StringSession } = require('telegram/sessions'); // 替换成你的Bot Token const BOT_TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'; // 替换成你申请到的API ID和Hash const API_ID = 123456; const API_HASH = 'your_api_hash_here'; // 初始化Bot const bot = new Bot(BOT_TOKEN); // 初始化MTProto客户端(第一次运行需要登录,之后保存session即可) const stringSession = new StringSession(''); // 后续可以替换成已保存的session字符串 const mtprotoClient = new Telegram(stringSession, { apiId: API_ID, apiHash: API_HASH }); // 处理用户消息,返回注册日期 bot.on('message', async (ctx) => { const targetUserId = ctx.from.id; try { // 通过MTProto调用获取用户完整信息 const userFullInfo = await mtprotoClient.invoke( new Telegram.Api.users.GetUserFull({ id: new Telegram.Api.InputUser({ userId: targetUserId }) }) ); // 转换UNIX时间戳为可读日期 const registrationTimestamp = userFullInfo.user.date * 1000; const registrationDate = new Date(registrationTimestamp).toLocaleString(); await ctx.reply(`你的账号注册日期是:${registrationDate}`); } catch (error) { console.error('获取注册日期失败:', error); await ctx.reply('抱歉,暂时无法获取你的注册日期,请检查隐私设置或稍后再试。'); } }); // 启动Bot和MTProto客户端 (async () => { // 登录MTProto客户端(第一次运行需要输入手机号、验证码) console.log('正在登录MTProto客户端...'); await mtprotoClient.start({ phoneNumber: async () => prompt('请输入你的Telegram手机号(带国家码):'), password: async () => prompt('如果开启了两步验证,请输入密码:'), phoneCode: async () => prompt('请输入收到的验证码:'), onError: (err) => console.error('MTProto登录错误:', err) }); console.log('MTProto登录成功!'); console.log('请保存这个Session字符串,下次运行直接填入:', mtprotoClient.session.save()); // 启动Bot await bot.start(); console.log('Bot已启动,等待消息...'); })();
3. 注意事项
- Session保存:第一次运行代码时,会提示你输入手机号和验证码,登录成功后会输出一个Session字符串,把它替换到
new StringSession('')的引号里,下次运行就不用再登录了。 - 隐私限制:如果用户设置了严格的隐私权限,可能无法获取到他们的注册日期,这时候代码会抛出错误,记得做好异常处理。
- 敏感信息保护:API ID、API Hash、Bot Token和Session字符串都是敏感信息,绝对不要泄露到公共代码仓库里。
内容的提问来源于stack exchange,提问作者Saeed Heidarizarei
相关产品推荐
相关产品推荐

