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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:23:47