Documentation
¶
Overview ¶
Package client defines the narrow Telegram interface used by all command runners. Production wires this to gotd/td; tests use FakeClient.
Index ¶
- func DisplayName(firstName, lastName, username string, id int64) string
- func EnsureCredentials() (apiID int, apiHash string, err error)
- func FlowFromPrompt(p AuthPrompt) auth.Flow
- type AdminActionReq
- type AuthPrompt
- type BackfillMessage
- type BackfillReq
- type BlockUserReq
- type ChatInfo
- type Client
- type ContactInfo
- type CreateTopicReq
- type CreateTopicResp
- type DeleteMessagesReq
- type DeleteMessagesResp
- type EditMessageReq
- type EditTopicReq
- type FakeClient
- func (f *FakeClient) AdminAction(_ context.Context, req AdminActionReq) (InviteLinkResp, error)
- func (f *FakeClient) BackfillMessages(_ context.Context, req BackfillReq) ([]BackfillMessage, error)
- func (f *FakeClient) BlockUser(_ context.Context, req BlockUserReq) error
- func (f *FakeClient) Close() error
- func (f *FakeClient) CreateTopic(_ context.Context, req CreateTopicReq) (CreateTopicResp, error)
- func (f *FakeClient) DeleteFolder(_ context.Context, id int64) error
- func (f *FakeClient) DeleteMessages(_ context.Context, req DeleteMessagesReq) (DeleteMessagesResp, error)
- func (f *FakeClient) DiscoverDialogs(_ context.Context, limit int) ([]ChatInfo, error)
- func (f *FakeClient) EditMessage(_ context.Context, req EditMessageReq) error
- func (f *FakeClient) EditTopic(_ context.Context, req EditTopicReq) error
- func (f *FakeClient) Forward(_ context.Context, req ForwardReq) (ForwardResp, error)
- func (f *FakeClient) GetChatsInfo(_ context.Context, ids []int64) ([]ChatInfo, error)
- func (f *FakeClient) GetMe(_ context.Context) (User, error)
- func (f *FakeClient) LeaveChat(_ context.Context, req LeaveChatReq) error
- func (f *FakeClient) ListChatMembers(_ context.Context, chatID int64, limit int) ([]MemberInfo, error)
- func (f *FakeClient) ListFolders(_ context.Context) ([]FolderInfo, error)
- func (f *FakeClient) ListPinnedDialogs(_ context.Context, chatID int64) ([]ChatInfo, error)
- func (f *FakeClient) ListSessions(_ context.Context) ([]SessionRef, error)
- func (f *FakeClient) ListTopics(_ context.Context, chatID int64, limit int, query string) ([]TopicInfo, error)
- func (f *FakeClient) ListenOnce(_ context.Context) (ListenEvent, error)
- func (f *FakeClient) MarkRead(_ context.Context, req MarkReadReq) error
- func (f *FakeClient) Pin(_ context.Context, req PinReq) error
- func (f *FakeClient) PinTopic(_ context.Context, req PinTopicReq) error
- func (f *FakeClient) React(_ context.Context, req ReactReq) error
- func (f *FakeClient) ReorderFolders(_ context.Context, ids []int64) error
- func (f *FakeClient) SendMessage(_ context.Context, req SendMessageReq) (SendMessageResp, error)
- func (f *FakeClient) SyncContacts(_ context.Context) ([]ContactInfo, error)
- func (f *FakeClient) TerminateSession(_ context.Context, req TerminateSessionReq) error
- func (f *FakeClient) UnblockUser(_ context.Context, req BlockUserReq) error
- func (f *FakeClient) UpdateFolder(_ context.Context, req FolderUpdateReq) error
- func (f *FakeClient) UploadFile(_ context.Context, req UploadFileReq) (UploadFileResp, error)
- type FolderInfo
- type FolderUpdateReq
- type ForwardReq
- type ForwardResp
- type GotdClient
- func (g *GotdClient) AdminAction(ctx context.Context, req AdminActionReq) (InviteLinkResp, error)
- func (g *GotdClient) BackfillMessages(ctx context.Context, req BackfillReq) ([]BackfillMessage, error)
- func (g *GotdClient) BlockUser(ctx context.Context, req BlockUserReq) error
- func (g *GotdClient) Close() error
- func (g *GotdClient) CreateTopic(ctx context.Context, req CreateTopicReq) (CreateTopicResp, error)
- func (g *GotdClient) DeleteFolder(ctx context.Context, id int64) error
- func (g *GotdClient) DeleteMessages(ctx context.Context, req DeleteMessagesReq) (DeleteMessagesResp, error)
- func (g *GotdClient) DiscoverDialogs(ctx context.Context, limit int) ([]ChatInfo, error)
- func (g *GotdClient) EditMessage(ctx context.Context, req EditMessageReq) error
- func (g *GotdClient) EditTopic(ctx context.Context, req EditTopicReq) error
- func (g *GotdClient) Forward(ctx context.Context, req ForwardReq) (ForwardResp, error)
- func (g *GotdClient) GetChatsInfo(ctx context.Context, ids []int64) ([]ChatInfo, error)
- func (g *GotdClient) GetMe(ctx context.Context) (User, error)
- func (g *GotdClient) LeaveChat(ctx context.Context, req LeaveChatReq) error
- func (g *GotdClient) ListChatMembers(ctx context.Context, chatID int64, limit int) ([]MemberInfo, error)
- func (g *GotdClient) ListFolders(ctx context.Context) ([]FolderInfo, error)
- func (g *GotdClient) ListPinnedDialogs(ctx context.Context, chatID int64) ([]ChatInfo, error)
- func (g *GotdClient) ListSessions(ctx context.Context) ([]SessionRef, error)
- func (g *GotdClient) ListTopics(ctx context.Context, chatID int64, limit int, query string) ([]TopicInfo, error)
- func (g *GotdClient) ListenOnce(ctx context.Context) (ListenEvent, error)
- func (g *GotdClient) MarkRead(ctx context.Context, req MarkReadReq) error
- func (g *GotdClient) Pin(ctx context.Context, req PinReq) error
- func (g *GotdClient) PinTopic(ctx context.Context, req PinTopicReq) error
- func (g *GotdClient) React(ctx context.Context, req ReactReq) error
- func (g *GotdClient) ReorderFolders(ctx context.Context, ids []int64) error
- func (g *GotdClient) SendMessage(ctx context.Context, req SendMessageReq) (SendMessageResp, error)
- func (g *GotdClient) SendMessageBySelector(ctx context.Context, selector, text string, replyTo int64, silent, noWeb bool) (SendMessageResp, error)
- func (g *GotdClient) SyncContacts(ctx context.Context) ([]ContactInfo, error)
- func (g *GotdClient) TerminateSession(ctx context.Context, req TerminateSessionReq) error
- func (g *GotdClient) UnblockUser(ctx context.Context, req BlockUserReq) error
- func (g *GotdClient) UpdateFolder(ctx context.Context, req FolderUpdateReq) error
- func (g *GotdClient) UploadFile(ctx context.Context, req UploadFileReq) (UploadFileResp, error)
- type InviteLinkResp
- type LeaveChatReq
- type ListenEvent
- type LoginOptions
- type MarkReadReq
- type MemberInfo
- type PinReq
- type PinTopicReq
- type ReactReq
- type SendMessageReq
- type SendMessageResp
- type SessionRef
- type TerminateSessionReq
- type TopicInfo
- type UploadFileReq
- type UploadFileResp
- type User
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DisplayName ¶
DisplayName mirrors Python _display_title.
func EnsureCredentials ¶
EnsureCredentials reads TG_API_ID and TG_API_HASH and returns them, or a *safety.MissingCredentials error pointing the user at https://my.telegram.org/apps. Mirrors tgcli.client.ensure_credentials.
func FlowFromPrompt ¶
func FlowFromPrompt(p AuthPrompt) auth.Flow
FlowFromPrompt converts AuthPrompt into a gotd auth.Flow.
Types ¶
type AdminActionReq ¶
type AuthPrompt ¶
type AuthPrompt struct {
Phone func() (string, error)
Code func(ctx context.Context, sentCode *tg.AuthSentCode) (string, error)
Password func(ctx context.Context) (string, error)
AcceptTOS func(ctx context.Context, terms tg.HelpTermsOfService) error
}
AuthPrompt is the interactive callback set used during `tg login`. Each callback is allowed to read from stdin / write to stderr.
type BackfillMessage ¶
type BackfillReq ¶
type BlockUserReq ¶
type BlockUserReq struct {
UserID int64
}
BlockUserReq / UnblockUserReq mirror contacts.Block/Unblock.
type Client ¶
type Client interface {
GetMe(ctx context.Context) (User, error)
SendMessage(ctx context.Context, req SendMessageReq) (SendMessageResp, error)
UploadFile(ctx context.Context, req UploadFileReq) (UploadFileResp, error)
EditMessage(ctx context.Context, req EditMessageReq) error
Forward(ctx context.Context, req ForwardReq) (ForwardResp, error)
Pin(ctx context.Context, req PinReq) error
React(ctx context.Context, req ReactReq) error
MarkRead(ctx context.Context, req MarkReadReq) error
DeleteMessages(ctx context.Context, req DeleteMessagesReq) (DeleteMessagesResp, error)
LeaveChat(ctx context.Context, req LeaveChatReq) error
BlockUser(ctx context.Context, req BlockUserReq) error
UnblockUser(ctx context.Context, req BlockUserReq) error
ListSessions(ctx context.Context) ([]SessionRef, error)
TerminateSession(ctx context.Context, req TerminateSessionReq) error
DiscoverDialogs(ctx context.Context, limit int) ([]ChatInfo, error)
SyncContacts(ctx context.Context) ([]ContactInfo, error)
BackfillMessages(ctx context.Context, req BackfillReq) ([]BackfillMessage, error)
ListTopics(ctx context.Context, chatID int64, limit int, query string) ([]TopicInfo, error)
CreateTopic(ctx context.Context, req CreateTopicReq) (CreateTopicResp, error)
EditTopic(ctx context.Context, req EditTopicReq) error
PinTopic(ctx context.Context, req PinTopicReq) error
ListFolders(ctx context.Context) ([]FolderInfo, error)
UpdateFolder(ctx context.Context, req FolderUpdateReq) error
DeleteFolder(ctx context.Context, id int64) error
ReorderFolders(ctx context.Context, ids []int64) error
ListPinnedDialogs(ctx context.Context, chatID int64) ([]ChatInfo, error)
AdminAction(ctx context.Context, req AdminActionReq) (InviteLinkResp, error)
ListChatMembers(ctx context.Context, chatID int64, limit int) ([]MemberInfo, error)
GetChatsInfo(ctx context.Context, ids []int64) ([]ChatInfo, error)
ListenOnce(ctx context.Context) (ListenEvent, error)
Close() error
}
Client is the narrow API command runners use.
type ContactInfo ¶
type CreateTopicReq ¶
type CreateTopicResp ¶
type DeleteMessagesReq ¶
DeleteMessagesReq mirrors messages.DeleteMessages.
type DeleteMessagesResp ¶
type DeleteMessagesResp struct {
Deleted int
}
type EditMessageReq ¶
EditMessageReq mirrors messages.EditMessage.
type EditTopicReq ¶
type FakeClient ¶
type FakeClient struct {
Me User
NextErr error
Closed bool
Calls []string
Sent []SendMessageReq
Uploads []UploadFileReq
Edited []EditMessageReq
Forwards []ForwardReq
Pins []PinReq
Reacts []ReactReq
Reads []MarkReadReq
Deletes []DeleteMessagesReq
Leaves []LeaveChatReq
Blocks []BlockUserReq
Unblocks []BlockUserReq
Sessions []SessionRef
Terms []TerminateSessionReq
Dialogs []ChatInfo
Contacts []ContactInfo
Discoveries []int
ContactSyncs []bool
Backfills []BackfillReq
BackfillRows []BackfillMessage
Topics []TopicInfo
NextTopicID int64
Folders []FolderInfo
TopicCreates []CreateTopicReq
TopicEdits []EditTopicReq
TopicPins []PinTopicReq
FolderUpdates []FolderUpdateReq
FolderDeletes []int64
FolderReorders [][]int64
PinnedLists []int64
AdminActions []AdminActionReq
Members []MemberInfo
ChatInfos []ChatInfo
ListenEvents []ListenEvent
ListenCalls []bool
// LastMessageID is the next id returned by SendMessage. Tests override this.
NextMessageID int64
}
FakeClient is the test double for the Client interface. It records every call and lets tests assert on the captured arguments.
func (*FakeClient) AdminAction ¶
func (f *FakeClient) AdminAction(_ context.Context, req AdminActionReq) (InviteLinkResp, error)
func (*FakeClient) BackfillMessages ¶
func (f *FakeClient) BackfillMessages(_ context.Context, req BackfillReq) ([]BackfillMessage, error)
func (*FakeClient) BlockUser ¶
func (f *FakeClient) BlockUser(_ context.Context, req BlockUserReq) error
func (*FakeClient) Close ¶
func (f *FakeClient) Close() error
func (*FakeClient) CreateTopic ¶
func (f *FakeClient) CreateTopic(_ context.Context, req CreateTopicReq) (CreateTopicResp, error)
func (*FakeClient) DeleteFolder ¶
func (f *FakeClient) DeleteFolder(_ context.Context, id int64) error
func (*FakeClient) DeleteMessages ¶
func (f *FakeClient) DeleteMessages(_ context.Context, req DeleteMessagesReq) (DeleteMessagesResp, error)
func (*FakeClient) DiscoverDialogs ¶
func (*FakeClient) EditMessage ¶
func (f *FakeClient) EditMessage(_ context.Context, req EditMessageReq) error
func (*FakeClient) EditTopic ¶
func (f *FakeClient) EditTopic(_ context.Context, req EditTopicReq) error
func (*FakeClient) Forward ¶
func (f *FakeClient) Forward(_ context.Context, req ForwardReq) (ForwardResp, error)
func (*FakeClient) GetChatsInfo ¶
func (*FakeClient) LeaveChat ¶
func (f *FakeClient) LeaveChat(_ context.Context, req LeaveChatReq) error
func (*FakeClient) ListChatMembers ¶
func (f *FakeClient) ListChatMembers(_ context.Context, chatID int64, limit int) ([]MemberInfo, error)
func (*FakeClient) ListFolders ¶
func (f *FakeClient) ListFolders(_ context.Context) ([]FolderInfo, error)
func (*FakeClient) ListPinnedDialogs ¶
func (*FakeClient) ListSessions ¶
func (f *FakeClient) ListSessions(_ context.Context) ([]SessionRef, error)
func (*FakeClient) ListTopics ¶
func (*FakeClient) ListenOnce ¶
func (f *FakeClient) ListenOnce(_ context.Context) (ListenEvent, error)
func (*FakeClient) MarkRead ¶
func (f *FakeClient) MarkRead(_ context.Context, req MarkReadReq) error
func (*FakeClient) PinTopic ¶
func (f *FakeClient) PinTopic(_ context.Context, req PinTopicReq) error
func (*FakeClient) ReorderFolders ¶
func (f *FakeClient) ReorderFolders(_ context.Context, ids []int64) error
func (*FakeClient) SendMessage ¶
func (f *FakeClient) SendMessage(_ context.Context, req SendMessageReq) (SendMessageResp, error)
func (*FakeClient) SyncContacts ¶
func (f *FakeClient) SyncContacts(_ context.Context) ([]ContactInfo, error)
func (*FakeClient) TerminateSession ¶
func (f *FakeClient) TerminateSession(_ context.Context, req TerminateSessionReq) error
func (*FakeClient) UnblockUser ¶
func (f *FakeClient) UnblockUser(_ context.Context, req BlockUserReq) error
func (*FakeClient) UpdateFolder ¶
func (f *FakeClient) UpdateFolder(_ context.Context, req FolderUpdateReq) error
func (*FakeClient) UploadFile ¶
func (f *FakeClient) UploadFile(_ context.Context, req UploadFileReq) (UploadFileResp, error)
type FolderInfo ¶
type FolderUpdateReq ¶
type ForwardReq ¶
ForwardReq mirrors messages.ForwardMessages.
type ForwardResp ¶
type ForwardResp struct {
MessageIDs []int64
}
type GotdClient ¶
type GotdClient struct {
// contains filtered or unexported fields
}
GotdClient is the production Client implementation backed by gotd/td.
gotd/td's telegram.Client.Run is blocking and owns the connection lifecycle, so we run it in a background goroutine and proxy API calls in. Close() cancels Run and waits for the goroutine to exit, ensuring the session file flushes cleanly.
func New ¶
New opens a gotd client against an existing session, starts Run in a goroutine, and returns a Client that proxies API calls into it. The returned Client must be closed to release the connection.
func (*GotdClient) AdminAction ¶
func (g *GotdClient) AdminAction(ctx context.Context, req AdminActionReq) (InviteLinkResp, error)
func (*GotdClient) BackfillMessages ¶
func (g *GotdClient) BackfillMessages(ctx context.Context, req BackfillReq) ([]BackfillMessage, error)
func (*GotdClient) BlockUser ¶
func (g *GotdClient) BlockUser(ctx context.Context, req BlockUserReq) error
func (*GotdClient) Close ¶
func (g *GotdClient) Close() error
Close cancels the underlying client.Run and waits for it to drain.
func (*GotdClient) CreateTopic ¶
func (g *GotdClient) CreateTopic(ctx context.Context, req CreateTopicReq) (CreateTopicResp, error)
func (*GotdClient) DeleteFolder ¶
func (g *GotdClient) DeleteFolder(ctx context.Context, id int64) error
func (*GotdClient) DeleteMessages ¶
func (g *GotdClient) DeleteMessages(ctx context.Context, req DeleteMessagesReq) (DeleteMessagesResp, error)
func (*GotdClient) DiscoverDialogs ¶
func (*GotdClient) EditMessage ¶
func (g *GotdClient) EditMessage(ctx context.Context, req EditMessageReq) error
func (*GotdClient) EditTopic ¶
func (g *GotdClient) EditTopic(ctx context.Context, req EditTopicReq) error
func (*GotdClient) Forward ¶
func (g *GotdClient) Forward(ctx context.Context, req ForwardReq) (ForwardResp, error)
func (*GotdClient) GetChatsInfo ¶
func (*GotdClient) LeaveChat ¶
func (g *GotdClient) LeaveChat(ctx context.Context, req LeaveChatReq) error
func (*GotdClient) ListChatMembers ¶
func (g *GotdClient) ListChatMembers(ctx context.Context, chatID int64, limit int) ([]MemberInfo, error)
func (*GotdClient) ListFolders ¶
func (g *GotdClient) ListFolders(ctx context.Context) ([]FolderInfo, error)
func (*GotdClient) ListPinnedDialogs ¶
func (*GotdClient) ListSessions ¶
func (g *GotdClient) ListSessions(ctx context.Context) ([]SessionRef, error)
func (*GotdClient) ListTopics ¶
func (*GotdClient) ListenOnce ¶
func (g *GotdClient) ListenOnce(ctx context.Context) (ListenEvent, error)
func (*GotdClient) MarkRead ¶
func (g *GotdClient) MarkRead(ctx context.Context, req MarkReadReq) error
func (*GotdClient) PinTopic ¶
func (g *GotdClient) PinTopic(ctx context.Context, req PinTopicReq) error
func (*GotdClient) ReorderFolders ¶
func (g *GotdClient) ReorderFolders(ctx context.Context, ids []int64) error
func (*GotdClient) SendMessage ¶
func (g *GotdClient) SendMessage(ctx context.Context, req SendMessageReq) (SendMessageResp, error)
func (*GotdClient) SendMessageBySelector ¶
func (g *GotdClient) SendMessageBySelector(ctx context.Context, selector, text string, replyTo int64, silent, noWeb bool) (SendMessageResp, error)
SendMessageBySelector resolves selector via Telegram and sends in one call. Bypasses the cached-access-hash requirement so users can send today.
func (*GotdClient) SyncContacts ¶
func (g *GotdClient) SyncContacts(ctx context.Context) ([]ContactInfo, error)
func (*GotdClient) TerminateSession ¶
func (g *GotdClient) TerminateSession(ctx context.Context, req TerminateSessionReq) error
func (*GotdClient) UnblockUser ¶
func (g *GotdClient) UnblockUser(ctx context.Context, req BlockUserReq) error
func (*GotdClient) UpdateFolder ¶
func (g *GotdClient) UpdateFolder(ctx context.Context, req FolderUpdateReq) error
func (*GotdClient) UploadFile ¶
func (g *GotdClient) UploadFile(ctx context.Context, req UploadFileReq) (UploadFileResp, error)
type InviteLinkResp ¶
type InviteLinkResp struct {
Link string
}
type LeaveChatReq ¶
type LeaveChatReq struct {
ChatID int64
}
LeaveChatReq mirrors channels.LeaveChannel / messages.DeleteChatUser.
type ListenEvent ¶
type LoginOptions ¶
type LoginOptions struct {
APIID int
APIHash string
Session string
Prompt AuthPrompt
}
LoginOptions configures the login flow.
type MarkReadReq ¶
MarkReadReq mirrors messages.ReadHistory.
type MemberInfo ¶
type PinTopicReq ¶
type ReactReq ¶
type ReactReq struct {
ChatID int64
MessageID int64
Emoji string // empty = remove reaction
Big bool
}
ReactReq mirrors messages.SendReaction.
type SendMessageReq ¶
type SendMessageReq struct {
ChatID int64
Text string
ReplyTo int64 // 0 = no reply
TopicID int64 // 0 = no topic / general
Silent bool
NoWebpage bool
}
SendMessageReq mirrors the input to messages.SendMessage.
type SendMessageResp ¶
type SessionRef ¶
type SessionRef struct {
Hash int64 `json:"hash"`
DeviceName string `json:"device_name"`
Platform string `json:"platform"`
IsCurrent bool `json:"is_current"`
}
SessionRef is one row from account.GetAuthorizations.
type TerminateSessionReq ¶
type TerminateSessionReq struct {
Hash int64
}
TerminateSessionReq mirrors account.ResetAuthorization.
type UploadFileReq ¶
type UploadFileReq struct {
ChatID int64
Path string
Kind string
Caption string
ReplyTo int64
Silent bool
Filename string
SupportsStreaming bool
}
UploadFileReq mirrors messages.SendMedia with an uploaded file.