Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,22 @@ reaction-bot/

環境変数の設定方法は [.env.example](.env.example) を参照してください。

## 開発ワークフロー

### Makefileの使用
このプロジェクトではMakefileを使用してビルドやテストを管理しています。

**重要**: ビルドやテストなどのコマンドを実行する際は、必ずMakefileの内容を確認し、定義されているターゲットを使用してください。

主要なコマンド:
- `make build` - バイナリをビルド(開発用)
- `make test` - テストを実行
- `make fmt` - コードフォーマット
- `make lint` - 静的解析
- `make run` - アプリケーションを実行

詳細は `make help` で確認できます。

## 実装規約

### Go言語ベストプラクティス
Expand Down
12 changes: 12 additions & 0 deletions internal/interfaces/discord_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@ func (h *DiscordHandler) HandleReactionAdd(s *discordgo.Session, r *discordgo.Me
return
}

// WHY: 転送メッセージへのリアクションは無視する(転送の連鎖を防ぐ)
if h.transferUseCase.IsTransferredMessage(r.MessageID) {
log.Printf("メッセージ %s は転送メッセージのため、リアクション追加を無視します", r.MessageID)
return
}

originalMsg, err := s.ChannelMessage(r.ChannelID, r.MessageID)
if err != nil {
log.Printf("メッセージ取得に失敗: %v", err)
Expand Down Expand Up @@ -67,6 +73,12 @@ func (h *DiscordHandler) HandleReactionRemove(s *discordgo.Session, r *discordgo
return
}

// WHY: 転送メッセージへのリアクションは無視する(転送の連鎖を防ぐ)
if h.transferUseCase.IsTransferredMessage(r.MessageID) {
log.Printf("メッセージ %s は転送メッセージのため、リアクション削除を無視します", r.MessageID)
return
}

originalMsg, err := s.ChannelMessage(r.ChannelID, r.MessageID)
if err != nil {
log.Printf("メッセージ取得に失敗: %v", err)
Expand Down
14 changes: 14 additions & 0 deletions internal/usecases/transfer_message.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,17 @@ func (uc *TransferMessageUseCase) DeleteTransferredMessage(
log.Printf("転送メッセージ %s を削除しました", transferredMsgID)
return nil
}

// IsTransferredMessage - 指定されたメッセージIDが転送メッセージかどうかを判定する
func (uc *TransferMessageUseCase) IsTransferredMessage(msgID string) bool {
uc.mappingMutex.RLock()
defer uc.mappingMutex.RUnlock()

// WHY: transferMsgMappingの値として存在する場合、そのメッセージは転送メッセージ
for _, transferredMsgID := range uc.transferMsgMapping {
if transferredMsgID == msgID {
return true
}
}
return false
}