diff --git a/backend/app/notify/telegram.go b/backend/app/notify/telegram.go index 5ae6bb53..61a9d159 100644 --- a/backend/app/notify/telegram.go +++ b/backend/app/notify/telegram.go @@ -7,6 +7,7 @@ import ( "fmt" "html" "net/http" + "strconv" "time" log "github.com/go-pkgz/lgr" @@ -16,10 +17,10 @@ import ( // Telegram implements notify.Destination for telegram type Telegram struct { - channelID string - token string - apiPrefix string - timeout time.Duration + channelID string // unique identifier for the target chat or username of the target channel (in the format @channelusername) + token string + apiPrefix string + timeout time.Duration } const telegramTimeOut = 5000 * time.Millisecond @@ -28,6 +29,10 @@ const telegramAPIPrefix = "https://api.telegram.org/bot" // NewTelegram makes telegram bot for notifications func NewTelegram(token string, channelID string, timeout time.Duration, api string) (*Telegram, error) { + if _, err := strconv.ParseInt(channelID, 10, 64); err != nil { + channelID = "@" + channelID // if channelID not a number enforce @ prefix + } + res := Telegram{channelID: channelID, token: token, apiPrefix: api, timeout: timeout} if res.apiPrefix == "" { res.apiPrefix = telegramAPIPrefix diff --git a/backend/app/notify/telegram_test.go b/backend/app/notify/telegram_test.go index c8b8d614..57f55f4d 100644 --- a/backend/app/notify/telegram_test.go +++ b/backend/app/notify/telegram_test.go @@ -21,6 +21,7 @@ func TestTelegram_New(t *testing.T) { tb, err := NewTelegram("good-token", "remark_test", 2*time.Second, ts.URL+"/") assert.NoError(t, err) assert.NotNil(t, tb) + assert.Equal(t, "@remark_test", tb.channelID, "@ added") st := time.Now() _, err = NewTelegram("bad-resp", "remark_test", 2*time.Second, ts.URL+"/") @@ -42,6 +43,11 @@ func TestTelegram_New(t *testing.T) { _, err = NewTelegram("good-token", "remark_test", 0, ts.URL+"/") assert.NoError(t, err, "0 timeout allowed as default") + + tb, err = NewTelegram("good-token", "1234567890", 2*time.Second, ts.URL+"/") + assert.NoError(t, err) + assert.NotNil(t, tb) + assert.Equal(t, "1234567890", tb.channelID, "no @ prefix") } func TestTelegram_Send(t *testing.T) {