Commit Graph
54 Commits
Author SHA1 Message Date
tiennm99 56d71a0e79 refactor(store): drop the Telethon session import
The Go session is already stored, so the one-time conversion from the
Python version's Telethon session is no longer needed. Remove it along
with its tests and the README upgrade section.
2026-10-15 14:38:28 +07:00
tiennm99 d041503a47 feat: port the tool to Go
Replace the Python scripts with Go commands run as go run ./cmd/<name>:
configure, crawl, compare, compare-groups, and export, each with the
same arguments and output as before.

Telegram access uses gotd/td and the code is pure Go. Redis keys and
JSON keep the Python format, so existing crawls stay readable. The
Telethon login session is converted once into a separate gotd session
key, so upgrading needs no new login code and never changes the old key.

Tests run offline with miniredis.
2026-10-15 14:22:22 +07:00
tiennm99 73f8cf1bb3 Update main.go 2025-12-15 20:55:15 +07:00
tiennm99 b9e0a1148c Update main.go 2025-12-15 20:37:27 +07:00
tiennm99 7898f04bb5 refactor(core): parse groupIds 2025-12-15 20:18:19 +07:00
tiennm99 cc56e90fd1 feat(core): echo bot 2025-12-11 23:04:08 +07:00
tiennm99 e95935e440 feat(core): add reply function 2025-12-11 22:31:33 +07:00
tiennm99 f5d90bb9ea feat(go): cleanup 2025-12-11 22:22:49 +07:00
dependabot[bot] 0d49e3dc8c build(deps): bump golang.org/x/crypto from 0.19.0 to 0.45.0
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.19.0 to 0.45.0.
- [Commits](https://github.com/golang/crypto/compare/v0.19.0...v0.45.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-version: 0.45.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-28 15:26:24 +00:00
tiennm99 e1bf670553 feat(go): rewrite in Go 2025-11-28 22:25:09 +07:00
tiennm99 e8690755e3 feat(compare): compare members of two groups fetched live
Add compare_groups.py, which fetches two groups from Telegram and lists
members in both, only in the first, and only in the second. No crawl is
saved to Redis. Login and member fetching move into shared crawl.py
helpers so both commands use one implementation.
2026-10-15 13:48:24 +07:00
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
dependabot[bot] fc9b70349f build(deps): bump python-dotenv from 1.2.1 to 1.2.2 (#5)
Bumps [python-dotenv](https://github.com/theskumar/python-dotenv) from 1.2.1 to 1.2.2.
- [Release notes](https://github.com/theskumar/python-dotenv/releases)
- [Changelog](https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md)
- [Commits](https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2)

---
updated-dependencies:
- dependency-name: python-dotenv
  dependency-version: 1.2.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-07 13:33:13 +07:00
dependabot[bot] 186f253f38 build(deps): bump pyasn1 from 0.6.2 to 0.6.3 (#4)
Bumps [pyasn1](https://github.com/pyasn1/pyasn1) from 0.6.2 to 0.6.3.
- [Release notes](https://github.com/pyasn1/pyasn1/releases)
- [Changelog](https://github.com/pyasn1/pyasn1/blob/main/CHANGES.rst)
- [Commits](https://github.com/pyasn1/pyasn1/compare/v0.6.2...v0.6.3)

---
updated-dependencies:
- dependency-name: pyasn1
  dependency-version: 0.6.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-11 08:10:14 +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
Tien Nguyen Minh e31fd64f35 Merge pull request #3 from tiennm99/dependabot/pip/cryptography-46.0.5
Bump cryptography from 45.0.5 to 46.0.5
2026-02-11 17:58:29 +07:00
dependabot[bot] 38203f4d67 Bump cryptography from 45.0.5 to 46.0.5
Bumps [cryptography](https://github.com/pyca/cryptography) from 45.0.5 to 46.0.5.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/45.0.5...46.0.5)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 46.0.5
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-11 02:25:11 +00: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