fix(cron): ensure reminders keep delivery channel target

This commit is contained in:
野生派Coder~
2026-03-02 22:25:18 +08:00
parent edbb389e5d
commit 67dd45a4dd
3 changed files with 63 additions and 6 deletions

View File

@@ -9,13 +9,20 @@ import (
)
type RemindTool struct {
cs *cron.CronService
cs *cron.CronService
defaultChannel string
defaultChatID string
}
func NewRemindTool(cs *cron.CronService) *RemindTool {
return &RemindTool{cs: cs}
}
func (t *RemindTool) SetContext(channel, chatID string) {
t.defaultChannel = channel
t.defaultChatID = chatID
}
func (t *RemindTool) Name() string {
return "remind"
}
@@ -63,7 +70,7 @@ func (t *RemindTool) Execute(ctx context.Context, args map[string]interface{}) (
Kind: "at",
AtMS: &at,
}
job, err := t.cs.AddJob("Reminder", schedule, message, true, "", "") // deliver=true, channel="" means default
job, err := t.cs.AddJob("Reminder", schedule, message, true, t.defaultChannel, t.defaultChatID)
if err != nil {
return "", fmt.Errorf("failed to schedule reminder: %w", err)
}
@@ -113,7 +120,7 @@ func (t *RemindTool) Execute(ctx context.Context, args map[string]interface{}) (
AtMS: &at,
}
job, err := t.cs.AddJob("Reminder", schedule, message, true, "", "")
job, err := t.cs.AddJob("Reminder", schedule, message, true, t.defaultChannel, t.defaultChatID)
if err != nil {
return "", fmt.Errorf("failed to schedule reminder: %w", err)
}

39
pkg/tools/remind_test.go Normal file
View File

@@ -0,0 +1,39 @@
package tools
import (
"context"
"path/filepath"
"testing"
"clawgo/pkg/cron"
)
func TestRemindTool_UsesToolContextForDeliveryTarget(t *testing.T) {
storePath := filepath.Join(t.TempDir(), "jobs.json")
cs := cron.NewCronService(storePath, nil)
tool := NewRemindTool(cs)
tool.SetContext("telegram", "chat-123")
_, err := tool.Execute(context.Background(), map[string]interface{}{
"message": "喝水",
"time_expr": "10m",
})
if err != nil {
t.Fatalf("Execute returned error: %v", err)
}
jobs := cs.ListJobs(true)
if len(jobs) != 1 {
t.Fatalf("expected 1 job, got %d", len(jobs))
}
if !jobs[0].Payload.Deliver {
t.Fatalf("expected deliver=true")
}
if jobs[0].Payload.Channel != "telegram" {
t.Fatalf("expected channel telegram, got %q", jobs[0].Payload.Channel)
}
if jobs[0].Payload.To != "chat-123" {
t.Fatalf("expected to chat-123, got %q", jobs[0].Payload.To)
}
}