tiennm99
35f61f4e97
feat(crawl): accept group ids as arguments for one-off crawls
...
Command-line group ids replace the configured Redis list for that run only; with no arguments the configured list is used as before.
2026-10-06 13:27:57 +07:00
tiennm99
3344e6b2d1
Revert "Merge branch '001-export-telegram-members' into main"
...
Keeps the branch in history only; main's content is unchanged.
2026-09-30 20:04:07 +07:00
tiennm99
e3f51910d8
Merge branch '001-export-telegram-members' into main
2026-09-30 20:04:07 +07:00
tiennm99
2c820a07a3
feat(crawl): use configured group ids from redis
2026-08-06 20:18:18 +07:00
tiennm99
b9e038d718
docs(journal): record Redis CSV export
2026-07-25 11:25:17 +07:00
tiennm99
ca93d12b83
docs(journal): record explicit crawl group ids
2026-07-24 16:38:40 +07:00
tiennm99
2543260a50
feat(crawl): require explicit group ids
2026-07-24 16:38:40 +07:00
tiennm99
72e16da6f7
docs(journal): record default compare group change
2026-07-16 08:54:14 +07:00
tiennm99
25a965bfd6
feat(compare): default to first configured group
2026-07-16 08:54:02 +07:00
tiennm99
bd940799ca
refactor: simplify project, no behavior change
...
- requirements.txt: drop pinned transitive deps (pyaes, pyasn1, rsa)
- .gitignore: trim from 166 to 19 lines (drop unused template cruft)
- crawl.py: remove no-op client.start(phone) after explicit sign-in
- common.py: inline single-use latest_two_group_exports into compare.py;
simplify _member_index
- compare.py: use list_group_exports + slice; add lazy-import comment
- configure.py: add lazy-import comment
- config.py: lowercase error messages to match the rest of the project
2026-06-10 11:30:19 +07:00
tiennm99
2909df9b07
revert(compare): remove side-by-side compare UI
...
Removes compareui.py and its README entry; the side-by-side diff
output is no longer needed.
2026-06-10 11:09:16 +07:00
tiennm99
3254093d1f
feat(compare): add side-by-side compare UI
2026-06-10 10:28:38 +07:00
tiennm99
d932770c6a
fix(redis): remove temporary migration script
2026-06-10 10:08:50 +07:00
tiennm99
9f867b342e
feat(redis): rename run export keys to group
2026-06-10 09:58:03 +07:00
tiennm99
c24b1a9770
feat(redis): store runs by group then time
2026-06-10 09:47:23 +07:00
tiennm99
24bf801656
feat(compare): render git diff style output
2026-06-10 09:32:42 +07:00
tiennm99
10298f4f5e
feat(config): prompt for setup values
2026-06-10 09:12:31 +07:00
tiennm99
3d655ea020
fix(redis): remove phone key migration script
2026-06-10 09:04:54 +07:00
tiennm99
cd1115ab68
feat(redis): add phone key migration script
2026-06-10 09:01:43 +07:00
tiennm99
4f565728da
feat: store telegram config in redis
2026-06-09 16:54:01 +07:00
tiennm99
fb9384d965
feat: add crawl comparison command
2026-06-09 14:10:05 +07:00
tiennm99
834ad56f65
feat: add one-off migration of local CSV exports to redis
...
Imports the 27 timestamped CSV export folders into the redis keyspace
(<prefix>:run:<phone>:<yyyymmddhhmmss>:<group_id>), mapping each sanitized
CSV filename to its group_id + real title and normalizing empty fields to
null to match live exports. Idempotent.
2026-06-08 16:57:23 +07:00
tiennm99
f03099a18e
feat: store session and exports in redis for cross-device portability
...
Replace the device-bound Telethon .session file and local CSV folders with
Redis-backed storage so the tool runs on any device from just .env.
- StringSession persisted at <prefix>:session:<phone> (no re-login per device)
- each group export saved as one self-contained JSON key per run:
<prefix>:run:<phone>:<yyyymmddhhmmss>:<group_id>
- REDIS_PREFIX namespaces all keys; applied via a single key() helper
- no cross-key references: deleting any key cannot corrupt another's state
- list_exports() lists history, tolerant of deleted/corrupt keys
2026-06-08 16:49:34 +07:00
tiennm99
294ecf571f
docs(readme): add output format, CSV columns, rate-limit and visibility notes
2026-05-11 21:45:51 +07:00
tiennm99
db8fcbd2ad
feat(proxy): remove proxy support
2026-02-26 12:24:21 +07:00
tiennm99
2223780de2
feat: update requirements
2026-02-26 11:51:11 +07:00
tiennm99
1073e06d15
feat: use id instead of name and predefined value instead of iterate over dialogs
2026-02-26 11:39:13 +07:00
tiennm99
685711d7b8
Update .gitignore
2026-02-26 11:28:42 +07:00
tiennm99
3a027ec6c9
feat(claude): stash
...
Try to fix but still not runnable
2025-12-06 22:25:31 +07:00
tiennm99
921f11baf1
feat(speckit): implement
2025-12-06 17:52:39 +07:00
tiennm99
a0866937b9
feat(speckit): tasks
2025-12-06 17:33:22 +07:00
tiennm99
c0c09fb3e1
feat(/speckit): plan
2025-12-06 17:30:37 +07:00
tiennm99
91fe241d72
feat(speckit): specify
2025-12-06 17:16:37 +07:00
tiennm99
185156d687
feat(speckit): constitution
2025-12-06 16:40:28 +07:00
tiennm99
9400bdcd93
feat(claude): init claude & speckit
2025-12-06 16:36:12 +07:00
tiennm99
6726701d87
feat(proxy): add mtproxy support
2025-07-08 09:45:31 +07:00
tiennm99
7aab00b443
Update requirements.txt
2024-05-14 18:10:50 +07:00
tiennm99
d6251c0020
[Add] init
2024-03-29 22:31:46 +07:00