Misskey 向け bot のリポジトリです。現在は azkey-roumu-bot を実装しています。
bot と相互フォローしているユーザー(FF関係)のノートを、ユーザーごとに見て回る方式です。 タイムラインをまとめて取得したり、WebSocket で流れてくるノートを受信したりはしません。
- bot のフォロワー一覧とフォロー中一覧を取得し、両方にいるユーザーを監視対象にする (既定で5分ごと)。
- 対象ユーザーの
users/notesを呼び、前回確認した位置より新しいノートを取得する (既定で各ユーザー約60秒ごと)。 - 公開ノートだけを処理対象にする。公開リプライ・リノートも取得し、bot 自身と チャンネルのノートは除外する。
片方向のフォローや、フォロー申請中で相互フォローが成立していない相手は対象外です。 完全に1人ずつ順番に回るのではなく、 アクセス時刻を分散し、既定で最大2件を並行取得します。読み取り API 全体を毎秒2リクエストに 制限するため、対象人数・投稿数・通信状況によって確認間隔は延びます。
現在は観察モード(observe)のみです。 対象ノートの ID と投稿者 ID をログに記録し、
リアクション送信・自動フォロー返しは行いません。
- 初回・新規対象者の追加時は過去のノートを処理せず、最新位置から監視を始めます。
- 取得位置はメモリ保持です。再起動で失われ、停止中のノートは遡りません。
- 両方の一覧を最後まで取得できた場合だけ監視対象を更新します。どちらかの取得に失敗した場合は 前回の対象を維持し、相互フォローの解除は次回の同期成功時に反映します。
- 接続先サーバーに見えるノートのみが対象です。リモートの全ノートや、取得位置より古い 遅延到着ノートの取得は保証しません。
- 初回にノートがないユーザーは時刻を基準にするため、実行環境の時計を同期してください。
Go 1.25 以降が必要です。HTTP クライアントは公式 Misskey 2026.9.0 を対象としています。
export MISSKEY_BASE_URL='https://misskey.example.invalid'
export MISSKEY_TOKEN='replace-with-a-local-token'
export POLLING_MODE='observe'
go run ./cmd/azkey-roumu-botMISSKEY_BASE_URL と MISSKEY_TOKEN のみ必須です。設定は環境変数だけから読み込み、設定ファイルのマウントは不要です。
.env は自動では読み込みません。実際のトークンやローカル設定はリポジトリへ保存しないでください。
停止は Ctrl-C または SIGTERM で行います。
POLLING_MODE は未指定でも observe になり、他の値は受け付けません。
確認間隔は POLL_INTERVAL(既定 1m)、相互フォローの同期間隔は
FOLLOWER_SYNC_INTERVAL(既定 5m)で変更できます。
並行数・レート制限などの設定例は .env.example を参照してください。
cmd/azkey-roumu-bot: 起動と依存関係の組み立てinternal/misskey・internal/domain: 共有の HTTP クライアントとデータ型internal/roumu: bot 固有の処理。ノート取得はpolling、処理側への受渡しはNoteHandler
go vet ./...
go run honnef.co/go/tools/cmd/staticcheck@v0.7.0 ./...
go test -race ./...
go build ./...CI でも上記と gofmt の確認を行います。 ユーザー状態の保存は #9、 反応処理は #10、 自動フォロー返しは #13 で扱います。