From e80cb3eed1561c6550ab8ca619cbc09ebe64a19e Mon Sep 17 00:00:00 2001 From: Stephan D Date: Wed, 4 Mar 2026 23:01:21 +0100 Subject: [PATCH] /start command --- .../internal/service/treasury/bot/router.go | 8 ++- .../service/treasury/bot/router_test.go | 62 +++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/api/gateway/tgsettle/internal/service/treasury/bot/router.go b/api/gateway/tgsettle/internal/service/treasury/bot/router.go index 26784763..c76c655f 100644 --- a/api/gateway/tgsettle/internal/service/treasury/bot/router.go +++ b/api/gateway/tgsettle/internal/service/treasury/bot/router.go @@ -14,7 +14,8 @@ import ( "go.uber.org/zap" ) -const unauthorizedMessage = "Access denied.\n\nYour Telegram account is not authorized to perform treasury operations." +const unauthorizedMessage = "Sorry, your Telegram account is not authorized to perform treasury operations." +const welcomeMessage = "Welcome to tgsettle treasury bot.\n\nUse /fund to credit your account and /withdraw to debit it.\nAfter entering an amount, use /confirm or /cancel." type SendTextFunc func(ctx context.Context, chatID string, text string) error @@ -131,6 +132,9 @@ func (r *Router) HandleUpdate(ctx context.Context, update *model.TelegramWebhook command := parseCommand(text) switch command { + case "start": + _ = r.sendText(ctx, chatID, welcomeMessage) + return true case "fund": r.startAmountDialog(ctx, userID, accountID, chatID, storagemodel.TreasuryOperationFund) return true @@ -158,7 +162,7 @@ func (r *Router) HandleUpdate(ctx context.Context, update *model.TelegramWebhook } if strings.HasPrefix(text, "/") { - _ = r.sendText(ctx, chatID, "Supported commands:\n/fund\n/withdraw\n/confirm\n/cancel") + _ = r.sendText(ctx, chatID, "Supported commands:\n/start\n/fund\n/withdraw\n/confirm\n/cancel") return true } return false diff --git a/api/gateway/tgsettle/internal/service/treasury/bot/router_test.go b/api/gateway/tgsettle/internal/service/treasury/bot/router_test.go index c5aa955d..7f2a24d5 100644 --- a/api/gateway/tgsettle/internal/service/treasury/bot/router_test.go +++ b/api/gateway/tgsettle/internal/service/treasury/bot/router_test.go @@ -156,3 +156,65 @@ func TestRouterEmptyAllowedChats_UnauthorizedUserGetsDenied(t *testing.T) { t.Fatalf("unexpected message: %q", sent[0]) } } + +func TestRouterStartAuthorizedShowsWelcome(t *testing.T) { + var sent []string + router := NewRouter( + mloggerfactory.NewLogger(false), + fakeService{}, + func(_ context.Context, _ string, text string) error { + sent = append(sent, text) + return nil + }, + nil, + nil, + map[string]string{"123": "acct-1"}, + ) + handled := router.HandleUpdate(context.Background(), &model.TelegramWebhookUpdate{ + Message: &model.TelegramMessage{ + ChatID: "777", + FromUserID: "123", + Text: "/start", + }, + }) + if !handled { + t.Fatalf("expected update to be handled") + } + if len(sent) != 1 { + t.Fatalf("expected one message, got %d", len(sent)) + } + if sent[0] != welcomeMessage { + t.Fatalf("unexpected message: %q", sent[0]) + } +} + +func TestRouterStartUnauthorizedGetsDenied(t *testing.T) { + var sent []string + router := NewRouter( + mloggerfactory.NewLogger(false), + fakeService{}, + func(_ context.Context, _ string, text string) error { + sent = append(sent, text) + return nil + }, + nil, + nil, + map[string]string{"123": "acct-1"}, + ) + handled := router.HandleUpdate(context.Background(), &model.TelegramWebhookUpdate{ + Message: &model.TelegramMessage{ + ChatID: "777", + FromUserID: "999", + Text: "/start", + }, + }) + if !handled { + t.Fatalf("expected update to be handled") + } + if len(sent) != 1 { + t.Fatalf("expected one message, got %d", len(sent)) + } + if sent[0] != unauthorizedMessage { + t.Fatalf("unexpected message: %q", sent[0]) + } +} -- 2.49.1