diff --git a/.env.example b/.env.example index 798815a7a..e0a07236e 100644 --- a/.env.example +++ b/.env.example @@ -12,7 +12,7 @@ # Feishu (飞书) # PICOCLAW_CHANNELS_FEISHU_APP_ID=cli_xxx # PICOCLAW_CHANNELS_FEISHU_APP_SECRET=xxx -# PICOCLAW_CHANNELS_FEISHU_RANDOM_REACTION_EMOJI=Typing,Onit +# PICOCLAW_CHANNELS_FEISHU_RANDOM_REACTION_EMOJI=Typing,OneSecond # ── Web Search (optional) ──────────────── # BRAVE_SEARCH_API_KEY=BSA... diff --git a/pkg/channels/feishu/feishu_64.go b/pkg/channels/feishu/feishu_64.go index fdb3b8e22..5217dd4e9 100644 --- a/pkg/channels/feishu/feishu_64.go +++ b/pkg/channels/feishu/feishu_64.go @@ -4,10 +4,11 @@ package feishu import ( "context" + "crypto/rand" "encoding/json" "fmt" "io" - "math/rand" + "math/big" "net/http" "os" "path/filepath" @@ -204,10 +205,15 @@ func (c *FeishuChannel) ReactToMessage(ctx context.Context, chatID, messageID st // Default to "Pin" if no config emojiList = []string{"Pin"} } - logger.Info(fmt.Sprintf("[MABEN] c.config.RandomReactionEmoji, %v", c.config.RandomReactionEmoji)) - // Randomly choose one from the list - chosenEmoji := emojiList[rand.Intn(len(emojiList))] + // Randomly choose one from the list using crypto/rand for better distribution + idx, err := rand.Int(rand.Reader, big.NewInt(int64(len(emojiList)))) + var chosenEmoji string + if err != nil { + chosenEmoji = emojiList[0] + } else { + chosenEmoji = emojiList[idx.Int64()] + } req := larkim.NewCreateMessageReactionReqBuilder(). MessageId(messageID).