Files
telegram-gateway/telegram_types.go
Gabriel Radureau 515b407db4
All checks were successful
Docker Build / build-and-push-image (push) Successful in 56s
docs: align ADR path references to doc/adr (singular)
Mirror of factory#8 path correction. Updates Gitea URLs in AUTH.md /
HOWTO_ADD_BOT.md and the '// Voir factory/...' header comments in code.
2026-05-09 14:26:12 +02:00

75 lines
2.0 KiB
Go

package main
type Update struct {
UpdateID int64 `json:"update_id"`
Message *Message `json:"message,omitempty"`
EditedMessage *Message `json:"edited_message,omitempty"`
CallbackQuery *CallbackQuery `json:"callback_query,omitempty"`
}
type Message struct {
MessageID int64 `json:"message_id"`
From *User `json:"from,omitempty"`
Chat Chat `json:"chat"`
Date int64 `json:"date,omitempty"`
Text string `json:"text,omitempty"`
}
type Chat struct {
ID int64 `json:"id"`
Type string `json:"type,omitempty"`
}
type User struct {
ID int64 `json:"id"`
IsBot bool `json:"is_bot,omitempty"`
Username string `json:"username,omitempty"`
FirstName string `json:"first_name,omitempty"`
}
type CallbackQuery struct {
ID string `json:"id"`
From *User `json:"from,omitempty"`
Message *Message `json:"message,omitempty"`
Data string `json:"data,omitempty"`
}
func (u Update) ChatID() (int64, bool) {
switch {
case u.Message != nil:
return u.Message.Chat.ID, true
case u.EditedMessage != nil:
return u.EditedMessage.Chat.ID, true
case u.CallbackQuery != nil && u.CallbackQuery.Message != nil:
return u.CallbackQuery.Message.Chat.ID, true
}
return 0, false
}
// UserID extracts the Telegram user ID (`from.id`) from whichever sub-payload
// is set. Used by the auth layer (factory bot session, requireAuth gate, allowlist).
// See factory/doc/adr/20260509-telegram-gateway-auth.md.
func (u Update) UserID() (int64, bool) {
switch {
case u.Message != nil && u.Message.From != nil:
return u.Message.From.ID, true
case u.EditedMessage != nil && u.EditedMessage.From != nil:
return u.EditedMessage.From.ID, true
case u.CallbackQuery != nil && u.CallbackQuery.From != nil:
return u.CallbackQuery.From.ID, true
}
return 0, false
}
func (u Update) Text() string {
switch {
case u.Message != nil:
return u.Message.Text
case u.EditedMessage != nil:
return u.EditedMessage.Text
case u.CallbackQuery != nil:
return u.CallbackQuery.Data
}
return ""
}