Skip to content

feat: 起動時にDiscordのリアクションから投票を同期する #10

Description

@narutiga

問題

ボットがオフラインの間も、ユーザーはDiscord上でpollメッセージにリアクション(投票)を追加できます。しかし、restorePolls() はデータベースからのみ投票データを読み込むため、ダウンタイム中に追加された投票が失われます

これにより以下の問題が発生します:

  • 投票数が実際より少なくカウントされる
  • しきい値通知が発火しない
  • poll終了時のメッセージで投票数が不正確

提案する解決策

restorePolls()reconcileVotesFromDiscord() ステップを追加し、Discordから現在のリアクションを取得してデータベースと照合します。

実装概要

  1. DBからpollを読み込んだ後、Discordメッセージを取得
  2. すべてのリアクション(🟢, 🟡, 🟠)とそのユーザーを読み取る
  3. DBの投票と比較し、差分を同期
  4. Discordのリアクションを正とする

考慮事項

  • レート制限: Discord.jsが自動で処理するが、pollが多いと起動が遅くなる可能性
  • 競合解決: ユーザーが複数のリアクションを持つ場合、優先順位または最初に見つかったものを使用
  • エラーハンドリング: メッセージが削除されている場合はスキップ

受け入れ基準

  • ボットがオフラインの間に追加された投票が、再起動時に反映される
  • 同期後の投票数が正確である
  • 同期された投票に対してしきい値通知が正しく動作する
  • 起動時間が許容範囲内(pollあたり5秒以内)

関連

SQLite永続化機能のフォローアップ強化です。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions