Releases: wlmosv-png/TGAutoSign
Release list
TGAutoSign v1.6.1 (124)
承接 1.6.0 的账号隔离重构。本版改动全部源自用户实际反馈与线上日志复盘,
覆盖签到状态机、按钮学习过滤、账号槽位遍历三条主线。
共修复 9 项问题、新增 2 项能力,每项均落到可验证的判定逻辑上,
并固化为回归用例(单测 174 → 297 条)。
This release continues the account-isolation refactor from 1.6.0. Every change
originates from user reports and log reviews, spanning three main areas: the
sign-in state machine, button-learning filters, and account-slot iteration.
It fixes 9 issues and adds 2 capabilities, each anchored to verifiable decision
logic and locked in by regression tests (unit tests: 174 → 297).
修复 · Fixed
目标列表自动增殖:模块自身发起的回调被误判为用户学习
回调按钮的 data 由 bot 每次推送时重新生成,与目标中保存的旧值不一致;
请求发出后网络层按 data 精确匹配无法定位既有目标,遂将其作为用户新点击的按钮
写入学习流程,形成自我繁殖。现于发送前登记请求指纹,命中即跳过学习。
Targets multiplied automatically: the module's own callbacks were misread as user learning.
Callback button data is regenerated by the bot on every push, so it differs from the value
stored for the target. After the request was sent, the network layer matched targets by exact
data equality and failed to locate the existing target, routing the tap into the learning flow
as a new user action and producing self-replication. A request fingerprint is now registered
before sending, and learning is skipped when it matches.
「已发出」状态回退导致重复签到
回调类目标发出后仅写入乐观标记,若 bot 将结论置于 callback answer 而不另行发消息,
回复判定永不触发;超时后状态回退为「待签」并被重新排期。
现改为超时转「待确认」,复用既有处置入口。
Sent-state rollback caused duplicate sign-ins.
A callback target only writes the optimistic marker when sent; if the bot places its verdict in
the callback answer without sending a separate message, the verdict never arrives, so after the
timeout the state reverted to "pending" and the target was re-armed. It now moves to
"needs confirmation" instead, reusing the existing action entries.
非签到按钮被纳入学习范围
模块曾将某 bot 的支付按钮学习为签到目标并实际触发,条目持续增长。
现新增独立于宽松模式的硬性闸门,判据遵循「不确定即放行」原则。
Non-check-in buttons entered the learning scope.
The module learned a bot's payment buttons as check-in targets and actually triggered them, with
entries growing continuously. A hard gate independent of loose mode now blocks them, following a
"pass when uncertain" principle.
网络层学习的账号归属错误
该路径在异步回调中读取「当前账号」,账号可能已切换。
现改用本次网络请求所属账号。
Incorrect account attribution in network-layer learning.
That path read the "current account" inside an asynchronous callback, where the account may
already have changed. It now uses the account that owns the network request.
账号索引钳制范围过宽
索引此前被钳制至「已登录账号数 − 1」,而宿主返回的值并非账号序号
(部分客户端返回 7、9 等合法索引),导致读取错误分区。
现归一化仅处理负值,真实槽位由 SharedConfig.activeAccounts 读取。
Account index clamping was too broad.
The index was clamped to "signed-in count − 1", but the value returned by the host is not an
account ordinal (some clients return legitimate indexes such as 7 or 9), causing the wrong
partition to be read. Normalisation now only handles negative values, and real slots come from
SharedConfig.activeAccounts.
停用账号仍执行签到
账号停用状态此前未纳入统一签到判定闸,导致开关未实际约束签到行为。
现并入统一闸并置于判定序列最前,手动操作亦不放行;
同时停用账号不再维持心跳高频轮询,定时巡检不再为其排入任务。
Disabled accounts still performed sign-ins.
The disabled flag was not part of the unified sign-in gate, so the switch did not actually
constrain sign-in behaviour. It now feeds the unified gate and is evaluated first, and manual
actions do not bypass it either. A disabled account also no longer keeps the heartbeat polling
at high frequency, and the scheduled sweep no longer arms tasks for it.
批量签到重复发送已签目标
两个批量入口均传递 force=true,其豁免同时绕过了「今日已签」判定,
导致当日已签目标被重新发送;定时模式下全天计划被一次性发出。
现将 manual 拆分为两个维度,新增 skipSigned 用于批量语义;
单目标「立即签到」保留强制重发能力。
Batch sign-in re-sent targets already signed.
Both batch entry points passed force=true, an exemption that also bypassed the already-signed
check, so targets already signed that day were re-sent; with the timer enabled the entire day's
plan was issued at once. manual is now split into two dimensions, with a new skipSigned
carrying the batch semantics; the single-target "sign now" retains forced re-send.
账号一览遗漏非连续槽位账号
账号遍历采用连续区间而非真实槽位。部分客户端返回非连续索引时,
界面显示的是空分区,真实数据未被遍历覆盖;启动时的孤儿状态键清理
采用相同遍历方式,导致非连续槽位账号的中间状态被误删。
现 11 处账号遍历统一改为真实槽位,并新增构建门禁。
The account overview omitted accounts on non-contiguous slots.
Account iteration used a contiguous range instead of real slots. When some clients return
non-contiguous indexes, the UI read an empty partition while the real data was never visited;
the startup orphan sweep used the same iteration, so intermediate state for those accounts was
wrongly deleted. All 11 account iterations now use real slots, guarded by a new build gate.
明确标识签到的按钮被过滤拦截(上一版引入的回归)
非签到按钮过滤此前完全以 data 为判据,当按钮文案明确为签到、
而 data 恰落入随机 token 特征区间时被误判拦截。
现判据调整为文案优先,命中签到白名单即无条件放行。
Buttons clearly labelled as check-ins were blocked (regression from the previous build).
The non-check-in button filter relied entirely on data, so when a label clearly indicated a
check-in but its data happened to fall within the random-token characteristics, it was wrongly
blocked. The criteria are now label-first: a label matching the check-in allowlist passes
unconditionally.
新增 · New
新增两个适配客户端,并修正默认作用域
tw.nekomimi.nekogram(Nekogram)与 it.belloworld.mercurygram(Mercurygram)
纳入白名单与作用域清单,已完成真机注入验证。
同时修正一处自 1.6.0 起存在的配置不一致:module.prop 的 scope= 仅列出 3 个包,
而 scope.list 为 8 个;staticScope=true 时 LSPosed 以 module.prop 的 scope=
作为默认作用域,导致新装用户仅勾选这 3 个包,
使用 Nagram XF、NagramX 等客户端的用户在作用域列表中找不到自己的客户端。
现三处保持一致,均为 10 个包。
Two more supported clients, and a corrected default scope.
tw.nekomimi.nekogram (Nekogram) and it.belloworld.mercurygram (Mercurygram) joined the
whitelist and the scope list, with real-device injection verified. A configuration inconsistency
present since 1.6.0 was also corrected: module.prop's scope= listed only 3 packages while
scope.list had 8. With staticScope=true, LSPosed treats module.prop's scope= as the
default scope, so new installs only had those 3 ticked, and users of Nagram XF, NagramX and
similar clients could not find their client in the scope list. All three locations are now
consistent at 10 packages.
误学条目清理日志
启动时清理已误学目标将记录日志,列出被移除条目及其判定原因。
Cleanup logging for mislearned entries.
Startup cleanup of mislearned targets now logs each removed entry and the reason for removal.
工具 · Tooling
-
README 更新日志生成器支持成块对照格式 — 此前仅识别内联格式,导致英文段落无法生成;现同时支持两种格式
-
新增「README 更新日志同步」构建门禁 — 将发布流程中的手工步骤转为构建期校验
-
新增「账号遍历必须使用真实槽位」构建门禁 — 防止连续区间遍历账号的写法再次出现
-
纯逻辑单测 174 → 297 条 — 新增五组用例,用户反馈的每个现象均已固化为回归用例
-
README changelog generator supports block-style bilingual entries — it previously
recognised only the inline form, so the English section could not be generated; both forms are
now supported -
New build gate: README changelog must stay in sync — turns a manual release step into a
build-time check -
New build gate: account iteration must use real slots — prevents contiguous-range account
iteration from reappearing -
Pure-logic unit tests grew from 174 to 297 — five new groups; every reported symptom is now
a regression case
支持的客户端 · Supported clients
org.telegram.messenger · org.telegram.messenger.web · fork.risin42.nagramx ·
nu.gpu.nagram · nu.gpu.nagramx · nu.gpu.nagram.web · com.exteraless.app ·
xyz.nextalone.nagram · tw.nekomimi.nekogram · it.belloworld.mercurygram
校验 · Verification
sha256: aa23506ddff362da7b2a775ed9c039beb13622f6d9c8cb648dd49eb312982a0b
完整更新日志 · Full changelog:https://github.com/wlmosv-png/TGAutoSign/blob/master/CHANGELOG.md
TGAutoSign v1.6.0 (123)
TGAutoSign v1.6.0 (123)
累积更新:自 1.5.8 以来的全部改动合并发布,含一次账号隔离体系重构。
Cumulative release: everything since 1.5.8, including an account-isolation refactor.
📦 下载 · Download
| 文件 / File | SHA-256 |
|---|---|
TGAutoSign-v1.6.0-release.apk |
fc80666cee1565b6d042c3bf23757ad24763a510bc072136bdd7ee32c20d5d45 |
sha256sum.txt |
校验文件 / checksum file |
大小 / Size:468,023 B · 证书 / Cert:af5524cd…25c8(与历史版本一致,可直接覆盖安装 / same as previous releases, in-place update supported)
支持的客户端 · Supported clients:官方版 org.telegram.messenger · Nagram xyz.nextalone.nagram · ExteraLess com.exteraless.app
中文
🏗️ 架构更新
自 v1.0 以来最大的一次内部重构。无用户可见行为变化,但它是本次大量 bug 得以根治的前提。
账号隔离从「约定」变成「结构」
重构前,代码里有 75 处读「当前账号」、67 处读无参账号前缀 —— 全部读宿主的静态字段。任何一处出现在异步回调或延迟任务里,就会串号。
本次引入不可变账号快照:发起任务时锁定账号,执行时只认快照,从结构上杜绝串号,而不是靠每一处记得判断。
核心文件拆出 6 个职责单一的类
| 类 | 职责 |
|---|---|
Keys |
存储键唯一真相源 |
AccountManager |
账号解析与快照 |
PrefsStore |
持久化与落盘策略 |
SignStateStore |
签到状态读写与不变式 |
SettingsRefs |
设置面板控件容器 |
SignLogic |
无 Android 依赖的纯逻辑层 |
纯逻辑可单测:时间窗、退避、回复判定、签到闸门已与 Android API 解耦,单测从 115 条扩到 174 条,新增用例逐条对应本次修掉的 bug。
其它:存储键名收敛到唯一真相源(此前散落 4 处);落盘策略显式化(此前 244 处直接访问存储,apply/commit 无任何规则)。
🔧 本版修了什么
一、账号串号:六条路径全部改为锁定账号(重要)
病根只有一个 —— 在异步回调或延迟任务里读「当前账号」。 回调执行时用户可能已经切到别的账号,于是拿新账号去发旧账号的目标。
覆盖六条路径:定时任务(延迟 1~5 分钟)、回调签到等面板(异步最长 8 秒)、面板事件补签(延迟 700 毫秒)、网络层学习、收藏夹告警、结果归因与汇总通知。
此前用户报告「账号1自动给只有账号2配置的 bot 发了消息」,即由此而来。
二、越界保护反而读到别人的分区(重要)
v1.5.8 加了一道保护:读到超出已登录数的索引就按 0 处理。前提是错的 —— 实测部分客户端(如 Nagram XF 登录 4 个账号)selectedAccount 会读到 7、9,那些是合法索引,数据就存在 acc9_ 里。被改成 0 之后读的是另一个账号的分区。
已回退:索引原值使用,只有负值才跳过。
三、失败目标被反复重签(重要)
机器人连回两条消息是常态,两条消息的判定结果会互相抵消:
第 1 条「正在签到,请稍后…」→ 宽松模式算成功 → 重试计数清零
第 2 条「请先关注」 → 算失败 → 重试计数 +1 = 1
计数永远在 0/1 震荡,涨不到上限 → 每一轮都被重新选中。实测有目标一天被签了 8 次。
现在加两道熔断:
- 确定性失败词(请先关注 / 活动已结束 / 已过期 等)→ 命中即当日停止
- 当天独立计数(不受"成功清零"影响)→ 累计 3 次后当日停止
跨天自动恢复。
四、同一账号重复排期发送(重要)
排下一次定时任务时只检查了「内存中是否正在发送」,漏了「已发出但还没等到结论」。内存状态在进程重启后是空的 → 重启后一遇网络恢复等触发,就把同一目标再排一次。
现在两半一起查,统一到一个判断入口。
五、签到可靠性
MESSAGE_ID_INVALID不再撤销已签(按钮过期 ≠ 签到失败)- 三处"把成功当失败"全量清查(
BOT_RESPONSE_TIMEOUT/FLOOD_WAIT/ 请求层错误) - 启动 30 秒窗口不再吞面板事件(以前会导致"机器人秒回,模块却一直走兜底")
- 按钮连续 3 次过期熔断,日志给出出路(改「文本指令」目标)
- 不回结果的机器人 3 次后标「待确认」,不再每天白等超时
六、状态与配置
- 「待确认」池按账号隔离,旧数据自动迁移(已有内容不覆盖)
- 「待确认」曾是死状态:看得到、点不动(现在给出重试 / 忽略 / 删除三个动作)
- 清空配置会残留状态,导致重新添加的 bot 状态复活
- 清空配置会误删账号级待确认池
- 跨端同步的配置在本机不生效
七、界面与日志
- 设置界面保存时闪退
- 打开「运行日志」会卡顿
- 启动日志只落盘第一行
- 冷启动 30 秒内点 bot 按钮毫无反应
- 日志链路编号带账号前缀(多账号并行时不再撞号)
- 热重载后两个实例并行跑
- 跨天窗口下补签时段变成全天
- 启动日志数字标题、花体字渲染错误
✅ 验证
| 项目 | 结果 |
|---|---|
| 编译(javac --release 17) | ✅ 196 class |
| 纯逻辑单测 | ✅ 174 / 174 |
| i18n 门禁 | ✅ 614 条字典,598 UI 出口 |
| 更新日志双语 | ✅ 37 条中 / 37 条英(一条不少) |
| 版本号五查 | ✅ 1.6.0 (123) |
| 装机回读校验 | ✅ 设备取回 APK 重算 sha256,逐字节一致 |
⚠️ 升级须知
- 直接覆盖安装,无需卸载(证书与历史版本一致)
- 装完请强停一次 Telegram 再打开,确保新代码生效
- 配置、目标、已签记录全部保留,无需重新配置
- 若你之前用过「待确认」功能,旧数据会自动迁移到账号 1
English
🏗️ Architecture
The largest internal refactor since v1.0. No user-visible behaviour change, but it is the precondition that made this release's bug fixes possible.
Account isolation moved from convention to structure
Before the refactor the codebase read the "current account" in 75 places and the no-arg account prefix in 67 — all reading a host static field. Any one of them sitting inside an asynchronous callback or delayed task caused crossover.
An immutable account snapshot is now used instead: the account is pinned when work is started and only the snapshot is honoured when it runs, preventing crossover structurally rather than relying on every call site remembering to check.
Six single-responsibility classes extracted from the core file
| Class | Responsibility |
|---|---|
Keys |
Single source of truth for storage keys |
AccountManager |
Account resolution and snapshot |
PrefsStore |
Persistence and flush policy |
SignStateStore |
Sign-in state I/O and invariants |
SettingsRefs |
Settings panel control container |
SignLogic |
Pure logic with no Android dependency |
Pure logic is now unit-testable: time windows, backoff, reply verdicts and the sign gate are decoupled from Android APIs. Assertions grew from 115 to 174, each new case mapping to a bug fixed here.
Also: storage keys consolidated into a single source of truth (previously scattered across four places); flush policy made explicit (previously 244 direct storage accesses with no rule for apply versus commit).
🔧 What was fixed
1. Account crossover — all six paths now pin the account (important)
There was a single root cause: reading the "current account" inside an asynchronous callback or a delayed task. By the time the callback runs the user may have switched accounts, so a new account sent an older account's target.
Six paths were affected: scheduled tasks (1–5 min delay), callback sign-in waiting for a panel (up to 8 s async), panel-triggered make-up sign-in (700 ms delay), network-layer learning, saved-message alerts, and result attribution plus summary notifications.
This is what produced the report "account 1 automatically messaged a bot that only exists on account 2".
2. Out-of-range guard read another account's partition (important)
v1.5.8 added a guard that coerced an index beyond the signed-in count to 0. The assumption was wrong — on some clients (e.g. Nagram XF with four accounts) selectedAccount reads 7 or 9, and those are legitimate indexes whose data lives under acc9_. Coercing to 0 made the module read another account's partition.
Reverted: the index is used as-is, and only negative values skip the round.
3. Failed targets were signed over and over (important)
Robots commonly send two replies whose verdicts cancel each other out:
Reply 1 "signing in, please wait" → loose mode counts it as success → retry counter reset
Reply 2 "please follow first" → counts as failure → retry counter +1 = 1
The counter oscillates between 0 and 1, never reaching the cap, so the target is re-selected every round. One target was signed 8 times in a single day.
Two circuit breakers are now in place:
- Permanent-failure phrases (follow-first / event ended / expired) → stop the target for the day immediately
- A day-scoped counter (immune to the success reset) → stop after 3 failures
Both reset automatically the next day.
4. Duplicate scheduling within one account (important)
Scheduling the next timed task only checked "is a send in flight in memory", missing the other half: "already sent, still awaiting a verdict". In-memory state is empty after a process restart, so the first trigger — such as network recovery — queued the same target again.
Both halves are now checked together behind a single entry point.
5. Sign-in reliability
MESSAGE_ID_INVALIDno longer revokes the sign-in (a stale button is not a failed check-in)- Three more places that treated success as failure (BOT_RESPONSE_TIMEOUT / FLOOD_WAIT / request-layer errors)
- The 30-second startup window no longer drops panel events (this used to cause "the bot replies instantly while the module keeps falling back")
- Three consecutive stale buttons trip a circuit breaker, and the log states the way out (convert to a text-command target)
- Silent robots are marked "pending" after three attempts instead of waiting out a timeout every day
6. State and configuration
- The "pending" pool is now per-account, with automatic migration of legacy data (existing content is never overwritten)
- "Pending" used to be a dead state: visible but un-actionable (now offers retry / ignore / delete)
- Clearing config left state behind, resurrecting it on re-add
- Clearing config wrongly deleted the per-account pending pool
- Configs synced from another client did not apply locally
7. UI and logging
- Crash when saving in the settings screen
- Opening "Logs" stuttered
- Only the first startup line reached the log file
- Tapping a bot button within 30 s of a cold start did nothing
- Chain ids in the log now carry an account prefix (no more collisions across accounts)
- Two instances ran in parallel after a hot reload
- The make-up window became all day when it crossed midnight
- Numeric headings and decorative text rendered with wrong glyphs
✅ Verification
| Item | Result |
|---|---|
| Compile (javac --release 17) | ✅ 196 classes |
| Unit assertions | ✅ 174 / 174 |
| i18n gate | ✅ 614 dictionary entries, 598 UI outlets |
| Bilingual changelog | ✅ 37 zh / 37 en (none missing) |
| Version consistency (5 places) | ✅ 1.6.0 (123) |
| Install + read-back check | ✅ APK pulled back from device, sha256 byte-identical |
⚠️ Upgrade notes
- Install over the top — no uninstall needed (same signing certificate as previous releases)
- Force-stop Telegram once after installing, then reopen, so the new code takes effect
- Configs, targets and sign-in history are all preserved — no reconfiguration required
- If you used the "pending" feature before, legacy data is migrated to account 1 automatically
📖 Full changelog
📄 License
1.5.8
TGAutoSign v1.5.8
新装用户务必更新 —— 之前「按钮学习」是关着的。 / New installs: please update — button learning was off.
⚠️ 重要 · Important
新装用户点 bot 按钮学不会目标 · New installs couldn't learn from button taps
「按钮学习」默认值写成了关闭,而回调学习同样受它管 —— 按 README 说的「点一次按钮」永远没反应,且没有任何提示。现在默认开启。
"Button learning" defaulted to off and also gated callback learning, so new users following the README's "tap once" got nowhere — silently. Now on by default.
🆕 新增 · New
宽松模式(来者不拒)· Loose mode
开 = 点什么学什么(不再按关键词过滤)+ 只要机器人有回复就算成功;但命中明确失败词(活动已结束 / 请先关注 / 未绑定 等)仍判失败。
关(默认)= 按原有规则判定。开关在「设置 → 判定机器人回复」。
On: learn whatever you tap and treat any reply as success, except explicit failure wording. Off (default): judge by the existing rules. Settings → Judging bot replies.
判定词改成开关式 · Verdict words became switches
默认用内置词表判定,另有「自动判定成功 / 失败」总开关与「使用我的自定义词(叠加在内置之上)」。
Built-in words judge by default, plus a master auto-detect toggle and opt-in custom words.
🔧 修复 · Fixed
子面板弹出来变成亮色 · Panels turned light
面板是 Telegram 对话框,弹出时盖了一层半透明遮罩;主题判定采的是整屏平均色,把遮罩算进去就判成浅色。采样改取内容区。
Theme detection sampled the whole screen including the dialog scrim. It now reads the content view.
跨午夜签到窗口不工作 · Windows crossing midnight
22:00-02:00 以前被当成非法:定时模式整晚不排期,非定时模式变成全天可签。现在按跨天正确处理。
定时任务重复排队 · Scheduled tasks piled up
排新任务时没取消旧回调,旧任务可能和新任务同时触发、同一目标签多次。
界面显示「账号10」但只登录 2 个 · Wrong account number shown
宿主切号会写出越界值,导致目标与已签记录落进空分区,看起来像「配置消失」。现在越界钳到 0。
跨客户端同步账号串位 · Cross-client sync mixed up accounts
两台手机账号顺序不一致时按索引合并会张冠李戴。现在按账号 user id 配对。
机器人名字只显示数字 ID · Bot names stuck as numeric IDs
名字缓存把冷启动时的 null 也存了,之后永远取不到。现在只缓存成功的。
「今天已签到」这类回复认不出 · "Already signed today" phrasings
内置词表补了 12 种中文、6 种英文常见写法(成功词同样补充)。
后台心跳降频 · Heartbeat slowed down
原先不分昼夜每 45 秒唤醒一次(一天约 1,900 次),现在按需三档(45 秒 / 10 分钟 / 15 分钟),约 200 次/天。窗口进入仍由精确闹钟负责,准时性不变。
同一次点击被重复处理 · A single tap processed multiple times
Telegram 多源投递同一更新,日志重复 2–4 遍、每日计数虚高。现在 20 秒窗口内去重。
发送中窗口与失败撤销对齐 · Pending window now matches the undo window
发送中状态 90 秒过期,而失败撤销等慢 bot 到 30 分钟,导致慢回复走不到撤销、失败被记成成功。
「未识别 bot 回复」不再刷红 · "Unrecognized reply" no longer an error
点充值 / 菜单 / 查询类按钮的回文本就不可能是签到结果,那是正常情况。现在只记调试日志。
「本条不是签到结果」措辞 · "Not a check-in result" wording
原先写「没识别到签到响应,已忽略」,看起来像失败;实际后续回复会正常命中。现改为「继续等后续回复」。
捕获模式在 Nagram / 官方版无效 · Capture mode on Nagram / official
这两个客户端点击不走已 hook 的方法,捕获只剩网络层入口。现在武装状态下网络层直接弹绑定面板。
「自动判定」被关掉时不再静默 · Auto-detection off is no longer silent
现在弹一次提示并指向设置项,日志提级为警告。
日志账号前缀过期 · Stale account prefix in logs
[账号N] 取自上次轮次缓存,没切号也会标错。现在带实时账号。
跨端同步节流 · Cross-client sync throttled
心跳每 45 秒读写同步文件(一小时白写 80 次盘),现在 5 分钟一次。
i18n 门禁补漏 + 18 处历史漏译 · i18n gate gap + 18 missing translations
走封装方法的文案以前不查字典,新文案忘进字典不会被拦。现已修正。
🩺 可靠性与诊断 · Reliability & Diagnostics
- 纯逻辑单测(
SignLogic,115 条断言)挂进构建门禁,不过直接构建失败 - bot 回复认不出来时不再静默(记日志 + 诊断包留原文)
- 关键路径 36 处空
catch改为记账 - 诊断包新增:学习开关 / 排除配置 / UI hook 状态(挂载数 + 实际触发数)/ 账号字段原始值
📌 维护范围 · Supported clients
| 客户端 Client | 包名 Package |
|---|---|
| Telegram(官方版) | org.telegram.messenger |
| Nagram | xyz.nextalone.nagram |
| ExteraLess | com.exteraless.app |
其余 fork 标志类齐全仍会注入,不保证及时适配。
Other forks still inject if flag classes are intact, but aren't officially maintained.
⬇️ 下载 · Download
https://github.com/Xposed-Modules-Repo/io.github.wlmosv_png.tgautosign/releases/latest
覆盖安装即可,配置不丢。Install over — settings and signed-state are kept.
TGAutoSign v1.5.7 (120)
TGAutoSign v1.5.7
English UI is here. / 英文界面来了。
🆕 新增 · New
英文界面 · English UI
英文设备装上就是英文,无需设置;设置页可切 跟随系统 / 中文 / English
English on an English device, zero setup. Switchable in Settings.
多账号隔离 · Per-account isolation
两个账号用同一个 bot 不再互相顶掉;新增「账号一览」页
Two accounts sharing one bot no longer clash; new Accounts overview.
🔧 修复 · Fixed
进度条永远走不满 · Progress bar never filled
冻结 / 排除的目标不再计入分母
Frozen / blocked targets no longer count toward the total.
「排除的 bot」没真正生效 · "Blocked bot" didn't actually stop signing
之前只挡学习,已收录的照签;现在一并停签
Previously it only blocked learning; existing targets kept signing. Now fully stopped.
冻结条目视觉统一 · Frozen entries now dim & sink
与「排除的 bot」一致:虚化 + 沉到列表底部
Same treatment as blocked bots.
一批英文漏译 · A batch of untranslated strings
签到倒计时 / 署名 / 诊断页 / 弹窗按钮 / 日志筛选
Countdown, signature, diagnostics, dialog buttons, log filters.
📌 维护范围 · Supported clients
| 客户端 Client | 包名 Package |
|---|---|
| Telegram(官方版) | org.telegram.messenger |
| Nagram | xyz.nextalone.nagram |
| ExteraLess | com.exteraless.app |
其余 fork 标志类齐全仍会注入,不保证及时适配。
Other forks still inject if flag classes are intact, but aren't officially maintained.
⬇️ 下载 · Download
https://github.com/Xposed-Modules-Repo/io.github.wlmosv_png.tgautosign/releases/latest
覆盖安装即可,配置不丢。Install over — settings and signed-state are kept.
TGAutoSign v1.5.6 (119)
TGAutoSign v1.5.6
本次更新聚焦「精准控制」与「跨客户端兼容」。
新增
- 三层黑名单:排除规则(关键词 / 正则)· 排除的 bot · 目标冻结
- 排除管理:主菜单独立入口,规则 · 排除列表 · 待确认集中一处;已排除条目独立分组显示
- 网络学习需确认:新目标先进待确认池,手动确认才加入,防验证码类 bot 误加
- 目标可读性:支持备注名,列表显示
名字 + @username,不再裸露数字 ID - bot 矢量图标:替换 emoji 与人头图标
界面
- 冻结 / 已排除 徽章标识,已排除条目虚化
- 对话框不再叠层,操作后即时刷新
修复
- 官方版 / Nagram 按钮学习失效:改为按参数类型结构匹配 hook,不依赖被混淆的方法名
- 回调签到面板过期:前置命令后等面板真的刷新再点按钮
- 网络层学习
hash字段崩溃 - 手动添加被排除的 bot 时自动解除排除
- 收藏夹汇总不再「签第一个就发」
维护范围
自本版起仅对以下三个客户端做主要维护:org.telegram.messenger(官方版)、xyz.nextalone.nagram(Nagram)、com.exteraless.app(ExteraLess)。其它 fork 不保证及时适配。
下载
TGAutoSign-v1.5.6-release.apk · sha256 1452e2e878188963295cfc09636f7cc4e5b09bcae9b97f812891f6682fc3553c
覆盖安装即可,配置不丢。
TGAutoSign v1.5.5 (118)
v1.5.5 (118)
🆕 新增
- 群 / 频道签到 —— 群 ID(形如
-1001234567890)支持签到与回复判定;时刻表、错开间隔、补签、失败告警与私聊 bot 完全一致,列表显示群名或备注名 - 签到结果通知 —— 每账号每天一条摘要发到自己的收藏夹,不依赖系统通知权限、不弹窗;设置可开「只通知失败」
- 跨客户端同步 —— 官方版与第三方客户端之间同步目标与签到状态,任一端签的都算数;在哪改配置以哪为准
- 补签截止 —— 补签与签到窗口解耦。以前窗口一结束(如 12:30)当天没签就永久作废,现在会一直补到设定时刻(默认 23:00)
- 连续失败告警 —— 同一目标连续 3 天失败告警一次,避免「以为签上了其实没有」
- 多账号独立配置 —— 签到窗口、定时、错开间隔、补签设置改为按账号独立存储
🎨 界面
- 图标全面矢量化 —— 新增
Icons.java,24×24 网格、Canvas+Path代码绘制,替换界面上 26 种 emoji;不新增任何资源文件,各机型渲染一致 - 分类直达 —— 主菜单加「全部功能」横滑一行(目标 / 数据 / 系统 / 帮助 / 维护),取消二级「更多功能」页
- 教程重写 —— 按使用意图重写 16 节,补齐通知、主题、暂停、重试上限等此前漏写的说明
- 日志页 —— 固定「最新在上」、打开即定位最新;按天切分落盘(512KB × 7 天);异常带堆栈、每条带账号与轮次上下文
- 诊断包 —— 新增运行环境与目标状态表
- 自绘对话框 —— 三宿主外观统一,不再依赖宿主
AlertDialogAPI
🐛 修复
- 手动发指令被误判为已签,导致自动签到跳过该目标
- bot 回「已签过」不落盘,日历不绿且心跳每 90 秒重发
- 群签到发出后收不到结果判定(发送者与 peer 不一致被过滤)
- bot 回「签到失败」时误记成功,统计失真
- 重试上限失效;失败撤销已签的时间窗 10 → 30 分钟
- 定时器重复排队导致多目标叠加签到
- 定时模式下「一开 TG 就立即签第一个」,未按时刻表执行
- 日志只读当天文件,历史记录整批读不到
- 日志「回到最新」方向相反(滚到最旧)
- 主界面停留几秒后消失(对话框栈未出栈)
- 切换账号时挂起的定时器仍按旧账号时刻表触发
🔌 兼容
- 适配 Telegram 12.10.3:
AlertDialog$Builder方法名被混淆(setTitle→g等),对话框改为自绘实现规避 - 主题判定改为采样界面真实颜色,修复 Nagram 不跟深浅、ExteraLess 降级系统主题
- 修复 Nagram 12.8.1 回调签到
InstantiationException
签名:APK 使用与历史版本相同的 release key(af5524cd…),老用户直接覆盖安装。
TGAutoSign v1.5.4 (117)
改动
- ⏰ 定时签到体系:开启后只在签到窗口内签,窗口外所有自动触发一律不动作;签到时间点按钮选择,错开间隔可配置(0=自动均分)
- 📅 今日计划:每目标卡片显示已签实际时刻 / 待签计划时刻
- 📄 日志升级:按目标过滤、一键诊断包(复制即发)、加载更多、配色重做(亮暗双套)
- 🖌 界面:自绘终端卡片对话框(告别系统框);设置页分组美化;主界面下次签到倒计时
- 🐛 修复:启动/面板补签遵守签到窗口;多目标随机间隔发送(不再同时齐发)
- 🔌 兼容:主题判定分宿主适配(官方/Nagram 12.10.3 走 o6.A0().q,ExteraLess 走 isCurrentThemeDark)
覆盖安装
签名证书与 v1.0 起完全一致(SHA-256 af5524cd…),老用户免卸载覆盖安装,签到目标、日历、多账号配置全部保留,无需迁移。
校验
- APK:
TGAutoSign-v1.5.4-release.apk(250,940 B) - SHA-256:
1734a5d32866e799b597e7decbdeaf9f7f33d41c78a9cce00e82845df2ce3fa7
TGAutoSign v1.5.3 (116)
改动
- 🐛 修复:自动签到成功后日历不绿(成功回调漏记签到记录);子界面层层叠新窗口、退出要按很多次、光标卡死
- 🎨 界面重排:主菜单分 5 组(核心/工具/数据/系统/维护);目标列表三列对齐 + 状态色区分;新增「未签置顶 / 按名称」排序
- ✨ 标题动效 4 连:霓虹呼吸 / 逐字波浪 / RGB 流光 / 键盘敲击,每次打开轮换,深浅色双主题契合
- 📣 加入群组:主菜单「系统」组新增入口,一键跳 TG 交流群
- 🔌 兼容:宿主白名单新增 NextAlone Nagram(xyz.nextalone.nagram);Nagram XF 30dcd6c 构建注入会导致启动无响应,已版本锁定自动跳过
覆盖安装
签名证书与 v1.0 起完全一致(SHA-256 af5524cd…),老用户免卸载覆盖安装,签到目标、日历、多账号配置全部保留,无需任何迁移。
校验
- APK:
TGAutoSign-v1.5.3-release.apk(226,364 B) - SHA-256:
bc9ef38af0506e22f1459bbe5c985e2198ce3194c4f6e4b424bacf877a9d9c6c
TGAutoSign v1.5.2 (115)
1.5.2 (115) — 2026-09-18
✨ 新功能
- 每日签到窗口:设置里可配「每日签到窗口」(如 08:00-10:00),窗口外自动触发全部跳过、窗口内准点补签;秒级精度排程 + 0~2 分钟随机偏移防风控;「进入窗口」触发豁免节流,不被其他操作挡住
- 连续签到日历:首页显示连续签到天数 + 最近 14 天打卡格子(绿=已签,1=13 天前 · 14=今天);跨天自动累加、断签归零,按账号隔离;旧版签到记录自动兼容
- 预设模板:/jmb 主菜单新增「📚 预设模板」,内置示例模板点选即改即加(bot ID + 指令可编辑)
🎨 界面与体验
- 主菜单 18 项改双排网格卡片 + 按压缩放反馈,滚动长度减半;修复新版 Telegram 主面板内容无法滚动
- 面板开启动效:顶部扫光、命令行逐字打字与光标闪烁、状态呼吸灯、状态卡 / 日志卡渐进显现、菜单格错落亮起;标题字符动态效果;15 秒内重复打开面板直接秒开
- 连续签到文案与关键词表优化(关键词清空自动回落新默认)
🔌 兼容与适配
- Telegram 12.10.3:新版重构了对话框 Builder(setTitle / setView 移除),模块自动降级为主题化系统框,功能不受影响
- ExteraLess(ExteraGram fork,com.exteraless.app)加入白名单与声明式作用域,静态核对 + 真机实测
- 启动期保护:注入后 30 秒内自动处理静默放行,避免高频宿主启动时卡顿(针对 Nagram XF 30dcd6c 构建的启动无响应问题,该构建暂不注入)
- sendRequest 快速路径(非相关请求零成本放行)、防重入、账号同步节流
🔧 其他
- 终端风新图标(深色渐变底 + 青色纸飞机);模块元数据规范化(xposeddescription 改资源引用 + 中文简介)
- 版本三处同步 115 / 1.5.2(CI 版本守卫护航)
TGAutoSign v1.5.1 (114)
v1.5.1 (114) - 界面主题化 + 更新判定修复
界面:日间模式适配(终端风色板主题化)
- 终端风界面全部配色改为跟随 Telegram 主题:日间 = 浅灰蓝卡片 + 深色文字 + 高对比描边;暗色 = 原配色逐像素不变
- 修复日间模式下深色卡片嵌浅色背景的割裂感、青色低透明度描边几乎不可见的问题
- 分隔线 / 灰色提示 / 编辑框等弱对比元素统一走主题色板
- 深浅色判定改为读取 TG 的 isCurrentThemeDark(宿主 ClassLoader 反射),TG 内切主题立即生效,不再依赖系统夜间模式
修复
- 更新检查"永远显示可更新":UpdateChecker.VERSION_CODE 停在 112,远端 113 > 112 导致永远判定有新版本;本次与 build.gradle / module.prop 统一到 114 / 1.5.1(并加了三处一致性守卫)
- 版本号三处(build.gradle / UpdateChecker / module.prop)统一到 114 / 1.5.1
老用户直接覆盖安装,签到数据不丢。