■ はじめに
Telegramは便利ですが、以下のような悩みはありませんか?
- 「メッセージを読みたいけど、今は既読をつけたくない」
- 「送信者が後から消したり編集したりしたメッセージも、元の内容を確認したい」
そこで、Raspberry Piを24時間稼働させ、Python(Telethonライブラリ)を使用してバックグラウンドで全メッセージを監視・保存・転送するシステムを構築しました。
■ 本システムのメリット
-
既読回避(ステルス閲覧)
- API経由でメッセージを取得し、自分専用の「アーカイブ用チャンネル」に転送します。
- 公式アプリのチャット画面を開かずに内容を確認できるため、相手に既読をつけません。
-
削除・編集の証拠保持
- メッセージが削除・編集されても、SQLiteに保存された元データから復元してログを再投稿します。
-
マルチデバイス・マルチアカウント運用
- 複垢をアーカイブチャンネルの管理者にすれば、本垢をログアウトしていても安全にログを追えます。
■ システム構成
- ハードウェア: Raspberry Pi (OS: Raspberry Pi OS)
- 言語: Python 3 (venv)
- 主要ライブラリ: Telethon, PyYAML, SQLite3
-
常駐管理: systemd
Raspberry Pi 4 / Python 3.9 で動作確認済み
ディレクトリ構成
設定ファイルと実行ファイルを分離し、管理しやすくしています。
■ 技術的なポイント:削除検知の仕組み
メッセージが削除された際、通常は内容も消えてしまいますが、本システムでは受信時にメッセージIDをSQLiteへ保存しています。
削除イベントが発生した瞬間にDBから内容を引っ張り出し、アーカイブチャンネルへ「削除されました」という通知と共に元の内容を投稿します。
Telethonの events.MessageDeleted では削除されたIDしか取得できませんが、事前に受信メッセージをSQLiteに保存しておくことで、IDを照合して元のテキストを呼び出しています。これにより、送信者が『送信取消』をしてもアーカイブ側には残る仕組みです。
■ ソースコード・詳細な設定方法
GitHubにて、設定ファイルのテンプレートやsystemdのユニットファイルを含め公開しています。
GitHubリポジトリ:
■ おわりに
ラズパイに常駐させておくだけで、自分だけの「消えないログサーバー」が手に入ります。
設定も config.yaml を書き換えるだけで複数のユーザーやチャンネルに対応可能です。
詳細はGitHubのREADMEを参照してください。
ディレクトリ構成
設定ファイルと実行ファイルを分離し、管理しやすくしています。
リポジトリ内の config.yaml.example を config.yaml にリネームし、自分のAPI IDやチャンネルIDを記入してください。IDの調査には同梱の get_ids.py が便利です。
tg-archiver/
├── archiver.py # DM監視用メインスクリプト
├── channel_archiver.py # チャンネル監視用メインスクリプト
├── config.yaml.example # 設定ファイルのテンプレート
├── get_ids.py # 対象のIDを調べるための補助ツール
└── README.md # セットアップ手順書