显示标签为“telegram”的博文。显示所有博文
显示标签为“telegram”的博文。显示所有博文

星期日, 四月 26, 2026

195 Telegram 的极简网页版 mpgram-web

20260528 更新: 这东西半个月的时间在我的 php-cli docker 里创建了两千三百多个 sh 僵尸进程... 扔了. 

 

2026 年 4 月, 机场经历了巨大的动荡, 大量中转机场的国内中转出口被清退、通报, 这里我吐槽那些还在用 SS、Trojan 协议的 SB 机场, 我认为这些能被识别的过时协议和国内出口清退通报有很大关联, 而且从中转迁移到直连还在用这些 SB 协议的 SB 机场, 后续会继续祸害直连. 

为了防止可能到来的 2026 年 5 月或者 6 月直连断网, 以及之后可能彻底和 Telegram 失去联系, 我做了个最终应急方案, esim 海外流量套餐 + 省流量的极简 Telegram 网页版 mpgram-web, 手机和电脑都可以使用. 

提一嘴 esim, 卡是骗多多上卖的二十几块的白卡, LPA(写入工具)走大部分安卓自带的 OMAPI 协议, 安卓上用闭源 Nekoko2(可刷 magisk 给 apk 提权成系统应用, 以支持 telephony api, 此软件功能多些) 或者开源 EasyEUICC (https://easyeuicc.org https://gitea.angry.im/PeterCxy/OpenEUICC/releases 这两个是同一个东西), 这两 LPA 只写卡, 二十几块的白卡自带 stk (SIM 卡工具箱) 切卡删卡功能. 流量买 eskimo 的, 走 aff 新注册有 500MB Global, 随后购买 10GB China 折扣成半价 $13.5, 再购买一次折扣成 $1 的 1GB China, 这是两个券的最优用法, 写卡连上信号后有效期两年. 如果你没见到券或者不是这个价格, 不要购买, 买最低的保卡就行. 

一些入门教程: 

https://www.leavesongs.com/THINK/using-euicc-card-to-support-esim.html

https://euicc-manual.osmocom.org/

https://iecho.cc/posts/convert-esim-to-physical-sim

https://www.muooy.com/417.html


下面是正文.  

项目地址: https://github.com/shinovon/mpgram-web

大概就是 3GQQ 那样, 这是纯网页版, 作者还有一个 j2me 的客户端, 你可以打开 api 功能, 和客户端 (https://github.com/shinovon/mpgram-client)一起使用, 也可以单使用网页版. 


 
图片来自 http://nokiahacking.pl/mpgram-web-telegram-w-kazdej-przegladarce-vt35348.htm

没错, 你没看错, 基于 java 的 j2me 的客户端, 也就是二十年前功能机使用的 jar, 截至发文的 20260426, 依旧在维护更新. 此作者似乎是 j2me 的忠实粉丝, 还接手了早已遁入虚空的 kemulator 项目继续维护 (https://github.com/shinovon/KEmulator/releases)...

本文讲的是自建 mpgram-web, 而不是使用公共服务器, 一是之前有一定数量的封号(All public instances are closed because many people getting their accounts banned by telegram flood prevention system), 二是自己的账号用别人的服务器也不安全. 

这套东西的文档做得其实很烂, 踩了很多坑, 下面是自己倒腾出来的经验. 

1, 安装 docker 并查看 docker compose 的版本号: 

curl -fsSL https://get.docker.com | bash -s docker
docker --version
docker compose version

我本来想自己编译个命令行的版本, 但折腾了几个小时都失败了, 于是就用作者带的 docker-compose.yml 了. 

2, 安装好 docker 之后, 按照教程所说, 编辑 api_values.php 和 config.php 两个文件, 如果你没有申请过 Telegram apps (api_id 和 api_hash), 那么需要打开 https://my.telegram.org/apps 来申请. 将其填入 api_values.php, 下面讲解 config.php 主要的配置及含义. 

define('sessionspath', 'session_dir/'); //和 locale img 这些目录平级, 设置一个保存登录数据的路径
define('PNG_STICKERS', true); //透明贴纸, 用不上
define('FORCE_HTTPS', false); // http 重定向到 https, 有 traefik 等反向代理, 用不上, 127.0.0.1 反代就行
define('CHROME_HTTPS', false); //
当识别到 chrome user-agent 请求头的时候, http 重定向到 https, 用不上, 同上, 走反代
define('CONVERT_VOICE_MESSAGES', false);
define('VOICE_TMP_DIR', sys_get_temp_dir().'/mp/');
define('FFMPEG_DIR', '');  //这三项和语音有关, 需要下载 ffmpeg 可执行文件, 平时我根本用不到语音, 所以跳过了
define('LOGIN_CAPTCHA', false); //登录时输入验证码, 在执行网页登录的时候, 多一步输入验证码的操作, 但我实际测试发现设置为 0 验证码照样出现... 
define('INSTANCE_PASSWORD', 'admin_password'); //登录时输入密码, 如果你的自建 mpgram-web 暴露在公网, 设置这个以防被他人滥用
define('FILE_REWRITE', false); //获取图片等文件时使用目录, 用不上, 我看默认都是 file.php?abc=def 这样请求图片或文件
define('CONVERT_TGS_STICKERS', false);
define('LOTTIE_DIR', '');
define('TGS_TMP_DIR', sys_get_temp_dir().'/mp/');
define('LOTTIE_TO_GIF', true); //和贴纸有关, 用不上, 没开. 这东西需要引入其它 GitHub 项目, 懒得折腾了
define('ENABLE_API', false);
define('ENABLE_LOGIN_API', false); //没折腾这个, 应该是开放给 j2me 客户端 mpgram-client 来使用的
define('DOWNLOAD_SIZE_LIMIT', 1024 * 1024 * 1024);
define('IMAGE_SIZE_LIMIT', 30 * 1024 * 1024);
define('UPLOAD_SIZE_LIMIT', 20 * 1024 * 1024); //限制 file.php 最大获取的大小, 保持默认了
define('ENABLE_PEER_DB', false); //设置为 false 可 
sessionspath 中的登录数据文件大小, 但无法显示好友名称, 会显示 deleted account, 如果你的号聊天特别多, 建议关闭成 false 状态, 不然 sessionspath 底下的 safe.php 文件可以来到 170MB+ 的大小, 这会造成 vendor 也就是 MadelineProto 会抛出 Amp\TimeoutException: Timeout while waiting for help.getConfig 超时报错的异常

3, 改好这两个文件之后, 开始使用 git clone 命令下载源码: 

git clone https://github.com/shinovon/mpgram-web.git

4, 随后进入项目的 docker 文件夹并执行一键编译:  

cd docker

docker compose up --build -d

5, 编译完成之后, 就可以把这几个 container 和 image 都删了, 我用的 lazydocker 在图形界面终端操作的, 如果需要命令删除自己查一下删除 container 和 image 的命令. 

git clone 的目录不要删, 留下, 因为刚才它在 compose 编译的时候引入了另一个项目 MadelineProto 放在了 vendor 目录下, 并且对这个引入的项目打了文件补丁, 所以整个克隆的目录不要动. 

6, php-cli 的 docker, 和 traefik (反向代理)

php-cli 有一些依赖要启用, 所以我重做了 dockerfile, 整合了 mpgram-web 所需的一些东西, 重新编译出一个 image 了. 具体操作如下: 

新建一个 dockerfile 空文件, 里面写入: 

FROM php:8.5.5-cli

# =========================
# 系统依赖
# =========================
RUN apt-get update && apt-get install -y --no-install-recommends \
        libyaml-dev \
        libpng-dev \
        libjpeg-dev \
        libfreetype6-dev \
        libgmp-dev \
        libffi-dev \
        libxml2-dev \
        libonig-dev \
        curl \
        procps \
        vim \
        ca-certificates \
    && rm -rf /var/lib/apt/lists/*

# =========================
# GD 扩展配置
# =========================
RUN docker-php-ext-configure gd \
        --with-freetype \
        --with-jpeg

# =========================
# PHP 内置扩展
# =========================
RUN docker-php-ext-install -j$(nproc) \
        gd \
        mbstring \
        ffi \
        gmp \
        xml \
        fileinfo

# =========================
# PECL yaml 扩展, 这段可以不要, mpgram-web 用不到
# =========================
RUN pecl install yaml \
    && docker-php-ext-enable yaml

# =========================
# Browscap, 这是 mpgram-web 里的功能
# =========================
RUN curl -fsSL \
    http://browscap.org/stream?q=Lite_PHP_BrowsCapINI \
    -o /usr/local/etc/browscap.ini

# =========================
# 自定义 php.ini, 
mpgram-web 自带的 php.ini, 我以 conf.d 的形式加载了
# =========================
RUN curl -fsSL \
    https://raw.githubusercontent.com/shinovon/mpgram-web/refs/heads/master/docker/mpgram_web/php.ini \
    -o /usr/local/etc/php/conf.d/90-php.ini 

7, 随后使用命令编译成 image, 注意末尾有个小数点:

docker build --no-cache -t php-cli:8.5.5 .

再清理编译缓存: 

docker builder prune

最后运行, 注意指定正确的路径, 我是 /root/www: 

docker run -d -p 127.0.0.1:9000:80 --name php-cli --restart=unless-stopped -v /root/www:/var/www/html php-cli:8.5.5 php -S 0.0.0.0:80 -t /var/www/html

8, traefik 的配置, 之前自己写的 index.yaml 配置, 放在 config 文件夹下面自动加载的那种, 访问 mpgram-web 的时候总是卡住很长时间, 我判断是 http 请求被 Traefik 强行重定向到 https 了(127.0.0.1 内部), 所以我就让 ChatGPT 重写了一版, 以下是 index.yaml: 

http:
  routers:

    # =========================
    # ① HTTP → HTTPS 重定向
    # =========================
    us-http:
      entryPoints:
        - "http"
      rule: "Host(`你的网站域名, 如abc.com`)"
      middlewares:
        - redirect-https
      service: noop

    # =========================
    # ② HTTPS 正式入口
    # =========================
    us-https:
      entryPoints:
        - "https"
      rule: "Host(`你的网站域名, 如abc.com`) && PathPrefix(`/`)"
      tls:
        certResolver: "letsencrypt"
      service: us
      middlewares:
        - adrules-cors

  services:
    us:
      loadBalancer:
        servers:
          - url: "http://127.0.0.1:9000" #这里是 php-cli 开放的 9000 端口

    # 必须存在的“虚拟 service”(用于 redirect)
    noop:
      loadBalancer:
        servers:
          - url: "http://127.0.0.1"

  middlewares:

    # =========================
    # HTTPS 强制跳转
    # =========================
    redirect-https:
      redirectScheme:
        scheme: https
        permanent: true

    # =========================
    # CORS
    # =========================
    adrules-cors:
      headers:
        accessControlAllowOriginList:
          - "*"
        accessControlAllowHeaders:
          - "*"

以上是 Traefik 的 php-cli 反代配置, 如果你用 nginx 或者 apache 都可以参考. 

至于你的 mpgram-web, 建议放在一个含有随机字符的路径, 如 abc_4138u90i9tqwkrioew3894A, 这样就能防止爬虫遍历目录, 这种东西漏洞应该不少. 暴露在公网的服务器可以访问: https://abc.com/abc_4138u90i9tqwkrioew3894A/ 


这套源码跑起来是没问题, 号码登录可能不行, 使用二维码登录. 收发消息就靠刷新网页, 完完全全就是当年 3GQQ 的体验, 而且我在火狐上都没有自动刷新这一说. 

不过有一个很大的问题, 它是和进程交互的, 当一段时间没有访问后, 再去唤醒进程就会超时一次, 等待时间非常长, 可能达三~五分钟之久, 所以我想到了一个保活方法, 就是定时访问自身来保活, 也就是在 crontab -e 中添加任务. 

首先你要保证浏览器正常登录过一次, 后端才能在 sessionspath 中保存数据, 可以看到文件夹类似: 

qr_942cbc3ef5..........e5bfec.madeline

把 .madeline 之前的文件夹名复制出来. qr_942cbc3ef5..........e5bfec

构造请求. 在 crontab -e 中添加: 

*/5 * * * * /usr/bin/curl 'https://你的域名/abc_4138u90i9tqwkrioew3894A你的mpgram-web路径/chats.php?lang=en&timeoff=-18000&theme=6主题ID自己试去,或者在网页设置好去cookies里找&updint=10&user=qr_942cbc3ef5..........e5bfec你刚才复制的文件夹名' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:150.0) Gecko/20100101 Firefox/150.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' -H 'Connection: keep-alive'
3 5 * * * /usr/bin/docker restart php-cli

#20260522 更新, 这个东西有屎山, 半个月的时间会积压两千三百多个 sh 僵尸进程没有结束, 所以加上了每天 php-cli 重启.  

如果有多个需要保活, 就添加多行. 如果需要直接编辑 crontab 文件, 去 /var/spool/cron/crontabs 编辑文件.  


至此, 一整套 mpgram-web 就搭好了, 你可以直接使用上面 crontab -e 里的链接访问(前提是必须在此浏览器登录过, 后端存有 session, 浏览器存有 cookies 才行), 哈哈, 是不是有 3GQQ sid 的感觉了? 也不用怕长时间不用下次唤醒超时报错了. 用起来其实还是挺麻烦的, 但这屎山折腾好了以后就会非常舒服, 你甚至还可以使用作者写的 j2me 客户端 mpgram-client 在安卓 j2me loader 模拟器, 或电脑的 kemulator 模拟器中使用. 

 

星期二, 一月 14, 2025

183 回退到 Telegram 第一个支持 "引用回复 + 高亮选中的局部文字" 的版本

目前 Telegram 的客户端越来越像史, 安卓端的强制显示官方动态, 全端的送礼物和星星, 频道内容中间穿插的垃圾广告 等等, 所以我有回退到旧版本的需求.

 

支持引用回复+高亮的第一个版本: 

Windows v4.11.2 (https://github.com/telegramdesktop/tdesktop/releases/tag/v4.11.2) 其实 v4.11.1 也可以引用回复, 只是不支持高亮选中的局部文字. 
Android v10.2.0 (https://www.apkmirror.com/apk/telegram-fz-llc/telegram/telegram-10-2-0-release/) 是第一个版本, 而且 引用回复 + 高亮选中的局部文字 两个需求都支持. 

感谢蓝点网 Telegram 版本更新功能及变化的文章, 节省了大量一个个版本安装测试的时间.


如果你只需要图片遮罩, 可以参考互联网上的 Telegram 新闻, 比如这篇:

Telegram 更新, 可以為相片/影片加防劇透特效

星期四, 十月 17, 2024

180 Telegram 养号日记

忘了在哪听说 DC1 的号很容易死, 所以想注册一个 DC1 区的账号. 打算注册后自己日常使用.

2024-09-30 02:31:51, 在 sms-activate 上使用美国真实号码接码注册, 期间私聊了一个检测 dc 区的机器人, 添加了我的大号并互为好友, 并用大号发了消息, 小号回了消息. 二十几分钟就死了. 

2024-10-02 02:10:39 买了一个成品号. 在 sms-activate 的 Ready made accounts 模块下, 购买了合作商 hStock 平台上商家的成品号(直接去 hstock 买或者多选几家这种交易平台货比多家其实也行, 那样更好, 因为我在 sms-activate 有余额不想浪费钱, 所以就以贵一倍的价格买了),  "Canadian Telegram account, including 2fa+session+tdata+json". 
首登信息也就是 session 如下:
Meizu PRO 7 Plus
Application: Telegram Android 10.15.1
System version: 12 (31)
Location: Toronto, Canada, 2024/9/29 at 20:29
二登信息如下:
****(计算机设备名)
Application: Telegram Desktop 5.5.5 x64
System version: Windows 10
Location: ****, Hong Kong, 2024/10/2 at 02:15
三登信息如下:
****(我的某台常用实体安卓手机, 上面登了两个老号, 是一个客户端同时登三个号, 没有多开或分身)
Application: Telegram Android 10.14.0
System version: 13 (33)
Location: ****, Hong Kong, 2024/10/10 at 4:24 (我的 IPv4 和 IPv6 均为代理地址, 是固定的, 二登和三登期间无 IP 变化, 此 IPv4 和 IPv6 地址上还有我的另外两个大号, 日常使用. 另外, 此手机+此双栈 IP 地址上还死过两个 dc1 账号)

哪个时间点干了什么事, 我都会非常详细地写在下面, 如果没写就是没做. 

时间线和流水账:  
2024-10-02 ~02:15, 二登. 改 2FA 密码. (用户名有, 卖号的早就设置好了, 我没动它) 设置了头像、自我介绍. 随便翻了翻设置, 没动. 
期间, 置顶了"收藏夹", 偶尔打开看一下, 然后点 X 关掉, 收进系统托盘(桌面右下角托盘图标). 
2024-10-04 ~16:00, 设置了姓名、退出了电脑版(没有退账号, 只是 Windows 版客户端右键托盘图标的退出), 于 18:24 重新打开.
期间, 时间过了八天, 依旧是偶尔打开看一下, 然后点 X 关掉. 
2024-10-10 04:24, 三登. 三登时安卓客户端要求我必须设置邮箱(注意这里的设置邮箱不是两步验证邮箱), 即这个账号以后是主邮箱号, 而非手机号. 随后收应用内验证码登录成功. 将 隐私 - 谁可以看见我的手机号码 设置为 "不允许任何人", 谁可以通过手机号码找到我 设置为 "我的联系人", 出生日期 设置为 "不允许任何人", "同步通讯录" 在三登时就未开启. 在安卓端搜索 durov 并关注了他的频道, 往上翻了翻频道动态. 在 Windows 端也翻了翻频道动态. 
期间, Windows 端长期挂着, 依旧是偶尔打开看一下, 往上翻翻 durov 的频道动态, 然后点 X 关掉. Android 端日常使用两个大号, 小号偶尔切过来看一下, 同样往上翻 durov 的频道动态. 
2024-10-17 05:38, 换绑手机为 英国某实体卡. 将最早的首登 session 踢下线. 修改了自动终止旧会话的时间为 "3个月". 设置了两步验证邮箱.
2024-10-21 05:35, DC5 大号主动添加其为联系人, 并在 windows 客户端上也添加了 DC5 大号为联系人, 互发了一条消息.
2024-11-01 05:45 使用 @where_is_my_dc_bot 机器人, 并发送自己手机里的一张下载的图片, 来检测自己所在的 DC 区. 返回 DC1 Miami, Florida, United States. (注意, 发图片不要发贴纸 Sticker, 否则会返回错误的地区)
2024-11-05 01:22, 由于把 tdata 误删除, 在二登设备上重新再用 应用内验证码 登录. 登录成功. 随后用手机把之前旧的二登 session 终止会话了. 

 

至此, Telegram 养号我认为就已经完成了, 由于我的大号关注了很多频道, 打算于 2025 年 1 月再操作大批量关注的事情, 并且将会以每天关注 10 个的进度进行. 如果账号正常, 此文将不再更新.


卖号的提供的 Windows 版 tdata 为最简结构, 有这些文件就可以双击打开即可自动登录: 

📂tdata
 ├─📂账号十六位, 16 进制字母数字
 │    └─📄maps
 ├─📄key_datas
 └─📄账号十六位后面跟 s

如果你也追求极简, 日常需要数据迁移时, 带着这些文件走即可. 

==============

又买了一个 DC2 的小号, 懒得记录详细日志了, 说下关键操作. 

2024-11-01 卖家机器注册+2FA启用, 位置 里斯顿-维吉尼亚州-美国, 首登登录机器 win7.
2024-11-02 卖家 tdata 二登登录, 2FA改密码, 位置 巴格达-伊拉克.
2024-11-05 我买到手, tdata 三登, 改名字改头像, 改用户名, 改2FA密码. 位置 香港.
2024-11-07 @where_is_my_dc_bot 检测自己账号所在区, 为 DC2, 属实. 关注 durov 的频道.
2024-11-08 苹果手机四登, 安卓手机五登, 位置为同一 IP 的香港.
2024-11-10 安卓手机上改绑定的手机号为实体手机号.
2024-11-11 大号主动加其联系人并私聊, 小号同时也加大号. 
2024-12-09 没问题, 号没死, 长期在线. 偶尔点开看一眼. 此号同上面那个号一样, 打算于 2025 年 1 月再操作大批量关注的事情, 并且将会以每天关注 10 个的进度进行. 如果账号正常, 此文将不再更新.

现在 DC 1245 都集齐了^_^ (DC3 早已关闭)