最近做了一个很有意思的小项目:通过 Telegram API 自动修改自己的 Telegram 显示姓名,在名字后面实时追加当前时间、天气图标和温度。
效果类似这样:
𝓙𝓸𝓱𝓷.𝓜𝓾𝔂𝓷𝓸 𝟏𝟓:𝟎𝟎 🌦️ 𝟐𝟖°𝐂

前面的 𝓙𝓸𝓱𝓷.𝓜𝓾𝔂𝓷𝓸 是用户自己设置的基础姓名,后面的 𝟏𝟓:𝟎𝟎 🌦️ 𝟐𝟖°𝐂 会由脚本自动更新。
这个项目适合用来做 Telegram 个人主页小装饰,也可以作为一个练手项目,了解 Telegram 用户 API、定时任务、天气 API、环境变量配置和服务器常驻运行。
项目效果
最终 Telegram 显示姓名会变成:
JohnMuyno 14:11 🌦️ 25°C
或者使用花体 / 特殊 Unicode 字体:
𝓙𝓸𝓱𝓷.𝓜𝓾𝔂𝓷𝓸 𝟏𝟓:𝟎𝟎 🌦️ 𝟐𝟖°𝐂
项目会定时获取:
- 当前时间
- 当前天气状态
- 当前温度
然后调用 Telegram API 修改当前账号的 first_name。
项目地址
Github链接:https://github.com/JohnMuyuan/TelegramNameShowTime
项目功能
这个小工具主要实现了以下功能:
- 自动登录 Telegram 用户账号
- 保存 Telegram 登录 Session,避免每次重复输入验证码
- 使用 Open-Meteo 免费天气接口获取实时天气
- 定时修改 Telegram 显示姓名
- 支持自定义基础姓名
- 支持自定义经纬度位置
- 支持自定义时区
- 支持自定义更新间隔
- 支持数字花体显示,例如
15:00转成𝟏𝟓:𝟎𝟎 - 可以部署到服务器长期运行
实现原理
整个项目的原理并不复杂,可以拆成几个部分。
1. Telegram 用户 API
Telegram 修改个人资料不能用普通 Bot API 完成,因为 Bot API 只能控制机器人,不能修改用户自己的昵称。
所以这里使用的是 Telegram 用户 API,也就是通过 api_id 和 api_hash 登录真实 Telegram 账号,然后调用 Telegram 的用户接口修改个人资料。
项目里使用的是 Node.js 的 gramjs 库,也就是 npm 包:
telegram
修改姓名时调用的是:
Api.account.UpdateProfile
核心逻辑类似:
await client.invoke(
new Api.account.UpdateProfile({
firstName: nextName
})
);
这里的 nextName 就是最终要显示到 Telegram 上的姓名,例如:
𝓙𝓸𝓱𝓷.𝓜𝓾𝔂𝓷𝓸 𝟏𝟓:𝟎𝟎 🌦️ 𝟐𝟖°𝐂
2. 获取当前时间
项目通过 JavaScript 内置的 Intl.DateTimeFormat 获取指定时区的当前时间。
例如:
new Intl.DateTimeFormat('en-GB', {
hour: '2-digit',
minute: '2-digit',
hour12: false,
timeZone: 'Asia/Shanghai'
}).format(new Date());
如果当前时间是下午三点,会得到:
15:00
然后项目会把普通数字转换成数学粗体数字:
15:00 -> 𝟏𝟓:𝟎𝟎
3. 获取天气和温度
天气数据使用的是 Open-Meteo。
Open-Meteo 的优点是:
- 免费
- 不需要 API Key
- 支持经纬度查询
- 支持当前温度和天气代码
- 接口简单
请求地址类似:
https://api.open-meteo.com/v1/forecast?latitude=31.2304&longitude=121.4737¤t=temperature_2m,weather_code&timezone=Asia/Shanghai
接口会返回当前温度和天气代码,例如:
{
"current": {
"temperature_2m": 28.4,
"weather_code": 61
}
}
项目会把温度四舍五入:
28.4 -> 28
然后把天气代码转换成对应 emoji:
61 -> 🌦️
最后拼接成:
🌦️ 𝟐𝟖°𝐂
4. 定时更新姓名
脚本启动后会立即更新一次姓名,然后按照配置的间隔定时更新。
例如配置:
UPDATE_INTERVAL_SECONDS=60
表示每 60 秒更新一次。
内部逻辑类似:
await updateName();
setInterval(updateName, config.updateIntervalSeconds * 1000);
为了避免重复请求,如果生成出来的姓名和上一次完全一样,脚本会跳过本次修改。
项目结构
项目结构大概如下:
TelegramNameShowTime/
├─ src/
│ └─ index.js
├─ .env.example
├─ .gitignore
├─ package.json
├─ package-lock.json
└─ README.md
主要文件说明:
src/index.js
核心代码,负责 Telegram 登录、天气获取、姓名拼接和定时更新。
.env.example
配置模板,复制成 .env 后填写自己的参数。
package.json
项目依赖和启动脚本。
README.md
项目使用说明。
安装环境(非服务器)
项目使用 Node.js 编写,建议版本:
Node.js >= 18
可以检查本机版本:
node -v
npm -v
如果没有安装 Node.js,可以到官网下载安装:
https://nodejs.org/
服务器部署时推荐使用 Node.js 20 LTS。
获取 Telegram API 信息
使用这个项目之前,需要先准备 Telegram 的 api_id 和 api_hash。
打开:
登录你的 Telegram 账号

然后创建一个 App。
建议填写:
App title: NameTimeUpdater
Short name: nametimeupdater
Platform: Desktop
Description: Telegram name time updater
创建成功后会得到:
api_id
api_hash

这两个值后面要写入 .env 文件。
如果遇到上面的问题,请确保你的网络环境为家庭宽带,不要使用机房IP。切换为家庭宽带即可解决。
注意:这里用的是 Telegram 用户 API,不是 Bot API,所以不是去找 BotFather 创建机器人。
本地运行方法
1. 安装依赖
进入项目目录:
cd TelegramNameShowTime
安装依赖:
npm install
2. 创建配置文件
复制配置模板:
cp .env.example .env
Windows PowerShell 可以使用:
Copy-Item .env.example .env
3. 编辑配置
打开 .env,填写自己的配置。
示例:
TELEGRAM_API_ID=123456
TELEGRAM_API_HASH=your_api_hash
BASE_NAME=𝓙𝓸𝓱𝓷.𝓜𝓾𝔂𝓷𝓸
LATITUDE=24.8648
LONGITUDE=118.6699
TIME_ZONE=Asia/Shanghai
UPDATE_INTERVAL_SECONDS=60
SESSION_FILE=.telegram-session
4. 启动项目
npm start
首次运行时会要求输入 Telegram 手机号:
请输入 Telegram 手机号(含国家区号,例如 +8613...):
输入格式示例:
+8613812345678
之后 Telegram 会发送验证码,输入验证码即可。
如果账号开启了两步验证,还需要输入两步验证密码。
登录成功后,项目会保存 Session 到:
.telegram-session
以后再次运行就不需要重复输入验证码了。
服务器部署方法(推荐)
如果希望这个工具 24 小时运行,推荐部署到 Linux 服务器上,并使用 pm2 后台运行。
下面以 Ubuntu / Debian 为例。
1. 安装 Node.js
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
检查版本:
node -v
npm -v
有结果就是安装成功了。
2. 上传项目到服务器
可以使用 scp:
scp -r TelegramNameShowTime root@你的服务器IP:/opt/TelegramNameShowTime
也可以使用 SFTP 工具,例如 WinSCP、FinalShell、Xftp。
前往项目地址,下载zip压缩包。

随后将压缩包上传至服务器并解压。(可使用unzip解压,没安装就输入 apt install unzip 安装下)
3. 安装依赖
登录服务器:
ssh root@你的服务器IP
进入项目:
cd /opt/TelegramNameShowTime
安装依赖:
npm install
4. 配置 .env
cp .env.example .env
nano .env
示例.env如下:
TELEGRAM_API_ID=123456
TELEGRAM_API_HASH=your_api_hash
# Your original display name. The script appends time/weather after it.
BASE_NAME=Clifeals
# Location for weather and local time.
LATITUDE=31.2304
LONGITUDE=121.4737
TIME_ZONE=Asia/Shanghai
# Update frequency in seconds. Telegram may rate-limit too frequent profile edits.
UPDATE_INTERVAL_SECONDS=60
# Optional: store Telegram login session in a custom file.
SESSION_FILE=.telegram-session
填写你的 Telegram API 信息、基础姓名、经纬度和时区。
5. 首次手动登录
第一次需要手动运行:
npm start

完成手机号、验证码、两步验证密码输入。
看到更新成功后,按:
Ctrl + C
停止脚本。
这一步的目的是生成 .telegram-session。
6. 使用 pm2 后台运行
安装 pm2:
sudo npm install -g pm2
启动项目:
pm2 start src/index.js --name telegram-name-show-time
查看状态:
pm2 status
查看日志:
pm2 logs telegram-name-show-time
7. 设置开机自启
pm2 startup
然后保存 pm2 配置:
pm2 save
之后服务器重启,项目也会自动运行。
配置项说明
.env 文件中主要有这些配置。
TELEGRAM_API_ID
Telegram App 的 api_id。
示例:
TELEGRAM_API_ID=123456
TELEGRAM_API_HASH
Telegram App 的 api_hash。
示例:
TELEGRAM_API_HASH=abcdef1234567890abcdef1234567890
BASE_NAME
基础姓名。
项目不会自动读取你当前 Telegram 姓名,而是使用这里配置的名字作为前缀。
示例:
BASE_NAME=JohnMuyno
显示效果:
JohnMuyno 𝟏𝟓:𝟎𝟎 🌦️ 𝟐𝟖°𝐂
也可以使用花体:
BASE_NAME=𝓙𝓸𝓱𝓷.𝓜𝓾𝔂𝓷𝓸
显示效果:
𝓙𝓸𝓱𝓷.𝓜𝓾𝔂𝓷𝓸 𝟏𝟓:𝟎𝟎 🌦️ 𝟐𝟖°𝐂
之所以不自动读取当前 Telegram 姓名,是为了避免重复追加。
比如第一次更新后名字变成:
JohnMuyno 𝟏𝟓:𝟎𝟎 🌦️ 𝟐𝟖°𝐂
如果下次启动再读取当前姓名,就可能变成:
JohnMuyno 𝟏𝟓:𝟎𝟎 🌦️ 𝟐𝟖°𝐂 𝟏𝟓:𝟎𝟏 🌦️ 𝟐𝟖°𝐂
所以固定使用 BASE_NAME 更稳定。
LATITUDE 和 LONGITUDE
天气位置的经纬度。
示例:
LATITUDE=24.8648
LONGITUDE=118.6699
含义:
LATITUDE = 纬度
LONGITUDE = 经度
例如:
# 上海
LATITUDE=31.2304
LONGITUDE=121.4737
# 北京
LATITUDE=39.9042
LONGITUDE=116.4074
# 广州
LATITUDE=23.1291
LONGITUDE=113.2644
# 深圳
LATITUDE=22.5431
LONGITUDE=114.0579
如果你拿到的是度分秒格式,例如:
31°13'55.21"N 121°28'11.65"E
需要换算成小数格式:
LATITUDE=31.23194
LONGITUDE=121.46972
TIME_ZONE
时区配置。
中国大陆一般使用:
TIME_ZONE=Asia/Shanghai
日本:
TIME_ZONE=Asia/Tokyo
美国洛杉矶:
TIME_ZONE=America/Los_Angeles
英国伦敦:
TIME_ZONE=Europe/London
UPDATE_INTERVAL_SECONDS
更新间隔,单位是秒。
示例:
UPDATE_INTERVAL_SECONDS=60
建议不要低于 60 秒。
虽然项目内部最低限制到了 30 秒,但 Telegram 可能会对频繁修改个人资料进行限流,所以推荐使用:
UPDATE_INTERVAL_SECONDS=60
或者更保守一点:
UPDATE_INTERVAL_SECONDS=300
也就是 5 分钟更新一次。
SESSION_FILE
Telegram 登录 Session 保存文件。
默认:
SESSION_FILE=.telegram-session
一般不需要修改。
如果删除这个文件,下次启动时需要重新输入手机号和验证码。
自定义显示样式
项目当前默认样式是:
BASE_NAME 𝟏𝟓:𝟎𝟎 🌦️ 𝟐𝟖°𝐂
其中:
BASE_NAME完全由用户自己设置- 时间数字会转换成数学粗体数字
- 温度数字会转换成数学粗体数字
C会显示成𝐂- 天气使用 emoji
自定义名字字体
名字不会由程序转换,建议自己生成好后填入 .env。
例如:
BASE_NAME=𝓙𝓸𝓱𝓷.𝓜𝓾𝔂𝓷𝓸
可以使用在线字体转换工具,把普通英文转换成花体、粗体、斜体等 Unicode 字符。
例如:
John.Muyno
转换成:
𝓙𝓸𝓱𝓷.𝓜𝓾𝔂𝓷𝓸
自定义天气图标
代码中有一个天气代码映射表,大概类似:
const WEATHER_CODES = new Map([
[0, '☀️'],
[1, '🌤️'],
[2, '⛅'],
[3, '☁️'],
[61, '🌦️'],
[63, '🌧️'],
[95, '⛈️']
]);
如果你不喜欢某个图标,可以直接修改对应 emoji。
例如把晴天从:
[0, '☀️']
改成:
[0, '🌞']
自定义拼接格式
当前拼接格式类似:
const nextName = `${config.baseName} ${time} ${weather.icon} ${temperature}°𝐂`;
如果你想改成:
名字 | 时间 | 天气 温度
可以改成:
const nextName = `${config.baseName} | ${time} | ${weather.icon} ${temperature}°𝐂`;
如果你不想显示天气,只想显示时间:
const nextName = `${config.baseName} ${time}`;
如果你想显示成温度在前:
const nextName = `${config.baseName} ${temperature}°𝐂 ${weather.icon} ${time}`;
注意事项
1. 这不是 Bot API
这个项目修改的是你自己的 Telegram 用户资料,所以使用的是 Telegram 用户 API。
不要去 BotFather 创建 Bot Token,因为 Bot Token 不能修改你的用户昵称。
你需要的是:
api_id
api_hash
获取地址:
https://my.telegram.org/apps
2. 不要频繁修改姓名
Telegram 可能会对频繁修改资料进行限制。
建议:
UPDATE_INTERVAL_SECONDS=60
或者:
UPDATE_INTERVAL_SECONDS=300
如果被限流,日志里可能会看到类似 FLOOD_WAIT 的错误。
遇到这种情况,应该停止脚本,等待一段时间后再运行,并把更新间隔调大。
3. 保护好 .env 和 .telegram-session
这两个文件都不应该公开。
.env 里有:
TELEGRAM_API_ID
TELEGRAM_API_HASH
.telegram-session 里保存了 Telegram 登录 Session。
所以一定不要把它们公开。
4. 服务器需要能连接 Telegram
部分服务器地区可能无法直接连接 Telegram。
如果日志中出现连接超时,可能需要:
- 换一个能直连 Telegram 的服务器
- 给服务器配置代理
- 给项目增加 SOCKS5 代理支持
5. Open-Meteo 天气可能和本地体感有差异
Open-Meteo 返回的是基于经纬度的天气数据,不一定和手机天气 App 完全一致。
如果天气不准确,可以稍微调整经纬度,或者换成更接近你所在位置的坐标。
6. Telegram 姓名长度有限制
Telegram 的姓名字段有长度限制。
如果你的基础姓名太长,再加上时间、天气和温度,可能会更新失败。
建议基础姓名不要太长。
例如:
𝓙𝓸𝓱𝓷.𝓜𝓾𝔂𝓷𝓸
这种长度通常没问题。
常见问题
my.telegram.org 创建 App 显示 error 怎么办?
这是 Telegram 官方页面很常见的问题。
解决方法:
App title和Short name使用纯英文Platform选择Desktop- 换浏览器
- 使用无痕模式
- 换网络
- 使用手机流量
- 等几个小时再试
- 检查账号是否太新
- 到
@SpamBot检查账号是否被限制
解决概率最大的是切换家庭宽带,百分之90都能解决!
推荐填写:
App title: NameTimeUpdater
Short name: nametimeupdater
Platform: Desktop
Description: Telegram name time updater
为什么不用当前 Telegram 名字自动追加?
因为这样容易重复追加。
例如脚本第一次把名字改成:
TTY 𝟏𝟓:𝟎𝟎 🌦️ 𝟐𝟖°𝐂
下次启动如果读取当前名字,再追加一次,就可能变成:
TTY 𝟏𝟓:𝟎𝟎 🌦️ 𝟐𝟖°𝐂 𝟏𝟓:𝟎𝟏 🌦️ 𝟐𝟖°𝐂
所以项目采用固定 BASE_NAME 的方式,更可控。
为什么天气不用 API Key?
因为使用的是 Open-Meteo,它提供免费公开接口,不需要 API Key。
可以部署在 Windows 服务器吗?
可以。
Windows 上也可以安装 Node.js,然后运行:
npm install
npm start
如果要后台运行,可以使用:
pm2
或者 Windows 自带的任务计划程序。
不过如果是长期部署,Linux VPS 加 pm2 会更简单。
修改配置后为什么没变化?
如果你用的是 pm2,修改 .env 后需要重启进程:
pm2 restart telegram-name-show-time
如果是本地运行,需要停止后重新执行:
npm start
结语
这个项目本质上是一个很轻量的 Telegram 用户 API 自动化工具。
它做的事情可以总结为:
读取配置 -> 登录 Telegram -> 获取天气 -> 获取时间 -> 拼接姓名 -> 修改 Telegram 资料 -> 定时重复
虽然功能很小,但涉及到的内容挺完整:
- Telegram 用户 API
- Node.js 异步请求
- 环境变量配置
- 天气 API
- Unicode 字体转换
- 定时任务
- Linux 服务器部署
- pm2 后台运行
最终效果也比较有趣,可以让 Telegram 昵称实时显示当前时间和天气:
𝓙𝓸𝓱𝓷.𝓜𝓾𝔂𝓷𝓸 𝟏𝟓:𝟎𝟎 🌦️ 𝟐𝟖°𝐂
如果你也喜欢折腾 Telegram 小工具,可以试试看。


参与讨论
(Participate in the discussion)
参与讨论