+61
-10
@@ -13,6 +13,12 @@ import (
|
||||
"git.scuroneko.dev/scuroneko/sneklog/v2"
|
||||
)
|
||||
|
||||
const (
|
||||
defaultMaxRetries = 3
|
||||
maximumResponseSize = 10 << 20
|
||||
minimumRetryDelay = 100 * time.Millisecond
|
||||
)
|
||||
|
||||
// APIOpts holds configuration options for initializing the Telegram API client.
|
||||
// Use the provided setter methods to build options — do not construct directly.
|
||||
type APIOpts struct {
|
||||
@@ -26,6 +32,7 @@ type APIOpts struct {
|
||||
|
||||
limiter *utils.RateLimiter
|
||||
dropOverflowLimit bool
|
||||
maxRetries int
|
||||
}
|
||||
|
||||
// NewAPIOpts creates a new APIOpts with default values.
|
||||
@@ -36,6 +43,7 @@ func NewAPIOpts(token string) *APIOpts {
|
||||
client: nil,
|
||||
useTestServer: false,
|
||||
apiURL: "https://api.telegram.org",
|
||||
maxRetries: defaultMaxRetries,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,6 +99,16 @@ func (opts *APIOpts) SetDropRateLimitOverflow(b bool) *APIOpts {
|
||||
return opts
|
||||
}
|
||||
|
||||
// SetMaxRetries sets the maximum number of retries after Telegram returns 429.
|
||||
// A non-positive value disables automatic retries. The default is 3.
|
||||
func (opts *APIOpts) SetMaxRetries(maxRetries int) *APIOpts {
|
||||
if maxRetries < 0 {
|
||||
maxRetries = 0
|
||||
}
|
||||
opts.maxRetries = maxRetries
|
||||
return opts
|
||||
}
|
||||
|
||||
// API is the main Telegram Bot API client for JSON requests.
|
||||
//
|
||||
// Use API methods when sending JSON payloads (for example with file_id, URL, or other
|
||||
@@ -107,9 +125,11 @@ type API struct {
|
||||
logFormat utils.LogFormat
|
||||
logFormatter *sneklog.Formatter
|
||||
|
||||
pool *workerPool
|
||||
pool *workerPool
|
||||
// Limiter is the optional rate limiter applied before requests are sent.
|
||||
Limiter *utils.RateLimiter
|
||||
dropOverflowLimit bool
|
||||
maxRetries int
|
||||
}
|
||||
|
||||
// NewAPI creates a new API client from options.
|
||||
@@ -145,6 +165,7 @@ func NewAPI(opts *APIOpts) *API {
|
||||
pool: pool,
|
||||
Limiter: opts.limiter,
|
||||
dropOverflowLimit: opts.dropOverflowLimit,
|
||||
maxRetries: opts.maxRetries,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,18 +188,29 @@ func (api *API) GetLogger() *sneklog.Logger {
|
||||
|
||||
// ResponseParameters contains Telegram API response metadata (e.g., retry_after, migrate_to_chat_id).
|
||||
type ResponseParameters struct {
|
||||
// MigrateToChatID Optional. The group has been migrated to a supergroup with the specified identifier. This
|
||||
// number may have more than 32 significant bits and some programming languages may have difficulty/silent
|
||||
// defects in interpreting it. But it has at most 52 significant bits, so a signed 64-bit integer or
|
||||
// double-precision float type are safe for storing this identifier.
|
||||
MigrateToChatID *int64 `json:"migrate_to_chat_id,omitempty"`
|
||||
RetryAfter *int `json:"retry_after,omitempty"`
|
||||
// RetryAfter Optional. In case of exceeding flood control, the number of seconds left to wait before the
|
||||
// request can be repeated
|
||||
RetryAfter *int `json:"retry_after,omitempty"`
|
||||
}
|
||||
|
||||
// TelegramResponse is the standard Telegram Bot API response structure.
|
||||
// Generic over Result type R.
|
||||
type TelegramResponse[R any] struct {
|
||||
Ok bool `json:"ok"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Result R `json:"result,omitempty"`
|
||||
ErrorCode int `json:"error_code,omitempty"`
|
||||
Parameters *ResponseParameters `json:"parameters,omitempty"`
|
||||
// Ok reports whether the request succeeded.
|
||||
Ok bool `json:"ok"`
|
||||
// Description contains a human-readable result description when supplied by Telegram.
|
||||
Description string `json:"description,omitempty"`
|
||||
// Result contains the method-specific result for a successful response.
|
||||
Result R `json:"result,omitempty"`
|
||||
// ErrorCode is the Telegram API error code for an unsuccessful response.
|
||||
ErrorCode int `json:"error_code,omitempty"`
|
||||
// Parameters contains additional recovery metadata for an unsuccessful response.
|
||||
Parameters *ResponseParameters `json:"parameters,omitempty"`
|
||||
}
|
||||
|
||||
// TelegramRequest is a low-level Telegram API request wrapper.
|
||||
@@ -225,6 +257,7 @@ func (r TelegramRequest[R, P]) doRequest(ctx context.Context, api *API) (R, erro
|
||||
req.Header.Set("Accept", "application/json")
|
||||
req.Header.Set("User-Agent", fmt.Sprintf("Laniakea/%s", utils.VersionString))
|
||||
|
||||
retries := 0
|
||||
for {
|
||||
// Apply rate limiting before making the request
|
||||
if api.Limiter != nil {
|
||||
@@ -279,12 +312,16 @@ func (r TelegramRequest[R, P]) doRequest(ctx context.Context, api *API) (R, erro
|
||||
if r.method == "getUpdates" {
|
||||
return zero, responseErr
|
||||
}
|
||||
if retries >= api.maxRetries {
|
||||
return zero, fmt.Errorf("%w after %d retries: %w", ErrRetryLimit, retries, responseErr)
|
||||
}
|
||||
retries++
|
||||
|
||||
// Wait and retry
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return zero, ctx.Err()
|
||||
case <-time.After(time.Duration(after) * time.Second):
|
||||
case <-time.After(retryDelay(after)):
|
||||
continue // retry request
|
||||
}
|
||||
}
|
||||
@@ -330,8 +367,22 @@ func (r TelegramRequest[R, P]) Do(api *API) (R, error) {
|
||||
}
|
||||
|
||||
func readBody(body io.ReadCloser) ([]byte, error) {
|
||||
reader := io.LimitReader(body, 10<<20) // 10 MB
|
||||
return io.ReadAll(reader)
|
||||
data, err := io.ReadAll(io.LimitReader(body, maximumResponseSize+1))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(data) > maximumResponseSize {
|
||||
return nil, ErrResponseTooLarge
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func retryDelay(retryAfter int) time.Duration {
|
||||
delay := time.Duration(retryAfter) * time.Second
|
||||
if delay < minimumRetryDelay {
|
||||
return minimumRetryDelay
|
||||
}
|
||||
return delay
|
||||
}
|
||||
|
||||
func parseBody[R any](data []byte) (TelegramResponse[R], error) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package tgapi
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
@@ -88,3 +89,42 @@ func TestAPICloseClosesIdleConnections(t *testing.T) {
|
||||
t.Fatal("expected Close to close idle HTTP connections")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAPIStopsAfterConfiguredRetryLimit(t *testing.T) {
|
||||
calls := 0
|
||||
client := &http.Client{Transport: roundTripFunc(func(_ *http.Request) (*http.Response, error) {
|
||||
calls++
|
||||
return &http.Response{
|
||||
StatusCode: http.StatusOK,
|
||||
Body: io.NopCloser(strings.NewReader(
|
||||
`{"ok":false,"error_code":429,"description":"retry","parameters":{"retry_after":0}}`,
|
||||
)),
|
||||
}, nil
|
||||
})}
|
||||
|
||||
api := NewAPI(NewAPIOpts("token").
|
||||
SetAPIURL("https://example.test").
|
||||
SetHTTPClient(client).
|
||||
SetMaxRetries(2))
|
||||
defer func() { _ = api.Close() }()
|
||||
|
||||
_, err := api.GetMe()
|
||||
if !errors.Is(err, ErrRetryLimit) {
|
||||
t.Fatalf("expected ErrRetryLimit, got %v", err)
|
||||
}
|
||||
var responseErr *ResponseError
|
||||
if !errors.As(err, &responseErr) || responseErr.Code != http.StatusTooManyRequests {
|
||||
t.Fatalf("expected wrapped 429 ResponseError, got %v", err)
|
||||
}
|
||||
if calls != 3 {
|
||||
t.Fatalf("request count = %d, want 3", calls)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReadBodyRejectsOversizedResponse(t *testing.T) {
|
||||
body := io.NopCloser(io.LimitReader(strings.NewReader(strings.Repeat("x", maximumResponseSize+1)), maximumResponseSize+1))
|
||||
_, err := readBody(body)
|
||||
if !errors.Is(err, ErrResponseTooLarge) {
|
||||
t.Fatalf("expected ErrResponseTooLarge, got %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
+507
-158
@@ -6,30 +6,65 @@ import "context"
|
||||
// Since: Bot API 1.0
|
||||
// See https://core.telegram.org/bots/api#sendphoto
|
||||
type SendPhoto struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
Photo string `json:"photo"`
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// Photo Required. Photo to send. Pass a file_id as String to send a photo that exists on the Telegram
|
||||
// servers (recommended), pass an HTTP URL as a String for Telegram to get a photo from the Internet, or
|
||||
// upload a new photo using multipart/form-data. The photo must be at most 10 MB in size. The photo's width
|
||||
// and height must not exceed 10000 in total. Width and height ratio must be at most 20. More information on
|
||||
// Sending Files »
|
||||
Photo string `json:"photo"`
|
||||
// Caption Optional. Photo caption (may also be used when resending photos by file_id), 0-1024 characters
|
||||
// after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the photo caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
DisableNotifications bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// ShowCaptionAboveMedia Optional. Pass True if the caption must be shown above the message media
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
// HasSpoiler Optional. Pass True if the photo needs to be covered with a spoiler animation
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
// DisableNotifications Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotifications bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendPhoto sends a photo.
|
||||
@@ -53,32 +88,71 @@ func (api *API) SendPhotoWithContext(ctx context.Context, params SendPhoto) (Mes
|
||||
// Since: Bot API 1.2
|
||||
// See https://core.telegram.org/bots/api#sendaudio
|
||||
type SendAudio struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
Audio string `json:"audio"`
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// Audio Required. Audio file to send. Pass a file_id as String to send an audio file that exists on the
|
||||
// Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get an audio file from the
|
||||
// Internet, or upload a new one using multipart/form-data. More information on Sending Files »
|
||||
Audio string `json:"audio"`
|
||||
// Caption Optional. Audio caption, 0-1024 characters after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the audio caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
Duration int `json:"duration,omitempty"`
|
||||
Performer string `json:"performer,omitempty"`
|
||||
Title string `json:"title,omitempty"`
|
||||
Thumbnail string `json:"thumbnail,omitempty"`
|
||||
// Duration Optional. Duration of the audio in seconds
|
||||
Duration int `json:"duration,omitempty"`
|
||||
// Performer Optional. Performer
|
||||
Performer string `json:"performer,omitempty"`
|
||||
// Title Optional. Track name
|
||||
Title string `json:"title,omitempty"`
|
||||
// Thumbnail Optional. Thumbnail of the file sent; can be ignored if thumbnail generation for the file is
|
||||
// supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's
|
||||
// width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data.
|
||||
// Thumbnails can't be reused and can be only uploaded as a new file, so you can pass
|
||||
// “attach://<file_attach_name>” if the thumbnail was uploaded using multipart/form-data under
|
||||
// <file_attach_name>. More information on Sending Files »
|
||||
Thumbnail string `json:"thumbnail,omitempty"`
|
||||
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendAudio sends an audio file.
|
||||
@@ -102,30 +176,69 @@ func (api *API) SendAudioWithContext(ctx context.Context, params SendAudio) (Mes
|
||||
// Since: Bot API 1.0
|
||||
// See https://core.telegram.org/bots/api#senddocument
|
||||
type SendDocument struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
Document string `json:"document"`
|
||||
Thumbnail string `json:"thumbnail,omitempty"`
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
DisableContentTypeDetection bool `json:"disable_content_type_detection,omitempty"`
|
||||
// Document Required. File to send. Pass a file_id as String to send a file that exists on the Telegram
|
||||
// servers (recommended), pass an HTTP URL as a String for Telegram to get a file from the Internet, or
|
||||
// upload a new one using multipart/form-data. More information on Sending Files »
|
||||
Document string `json:"document"`
|
||||
// Thumbnail Optional. Thumbnail of the file sent; can be ignored if thumbnail generation for the file is
|
||||
// supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's
|
||||
// width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data.
|
||||
// Thumbnails can't be reused and can be only uploaded as a new file, so you can pass
|
||||
// “attach://<file_attach_name>” if the thumbnail was uploaded using multipart/form-data under
|
||||
// <file_attach_name>. More information on Sending Files »
|
||||
Thumbnail string `json:"thumbnail,omitempty"`
|
||||
// Caption Optional. Document caption (may also be used when resending documents by file_id), 0-1024
|
||||
// characters after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the document caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
// DisableContentTypeDetection Optional. Disables automatic server-side content type detection for files
|
||||
// uploaded using multipart/form-data
|
||||
DisableContentTypeDetection bool `json:"disable_content_type_detection,omitempty"`
|
||||
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendDocument sends a document.
|
||||
@@ -149,38 +262,86 @@ func (api *API) SendDocumentWithContext(ctx context.Context, params SendDocument
|
||||
// Since: Bot API 1.0
|
||||
// See https://core.telegram.org/bots/api#sendvideo
|
||||
type SendVideo struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
Video string `json:"video"`
|
||||
// Video Required. Video to send. Pass a file_id as String to send a video that exists on the Telegram
|
||||
// servers (recommended), pass an HTTP URL as a String for Telegram to get a video from the Internet, or
|
||||
// upload a new video using multipart/form-data. More information on Sending Files »
|
||||
Video string `json:"video"`
|
||||
// Thumbnail Optional. Thumbnail of the file sent; can be ignored if thumbnail generation for the file is
|
||||
// supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's
|
||||
// width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data.
|
||||
// Thumbnails can't be reused and can be only uploaded as a new file, so you can pass
|
||||
// “attach://<file_attach_name>” if the thumbnail was uploaded using multipart/form-data under
|
||||
// <file_attach_name>. More information on Sending Files »
|
||||
Thumbnail string `json:"thumbnail,omitempty"`
|
||||
Duration int `json:"duration,omitempty"`
|
||||
Width int `json:"width,omitempty"`
|
||||
Height int `json:"height,omitempty"`
|
||||
Cover string `json:"cover,omitempty"`
|
||||
// Duration Optional. Duration of sent video in seconds
|
||||
Duration int `json:"duration,omitempty"`
|
||||
// Width Optional. Video width
|
||||
Width int `json:"width,omitempty"`
|
||||
// Height Optional. Video height
|
||||
Height int `json:"height,omitempty"`
|
||||
// Cover Optional. Cover for the video in the message. Pass a file_id to send a file that exists on the
|
||||
// Telegram servers (recommended), pass an HTTP URL for Telegram to get a file from the Internet, or pass
|
||||
// “attach://<file_attach_name>” to upload a new one using multipart/form-data under <file_attach_name>
|
||||
// name. More information on Sending Files »
|
||||
Cover string `json:"cover,omitempty"`
|
||||
|
||||
StartTimestamp int `json:"start_timestamp,omitempty"`
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// StartTimestamp Optional. Start timestamp for the video in the message
|
||||
StartTimestamp int `json:"start_timestamp,omitempty"`
|
||||
// Caption Optional. Video caption (may also be used when resending videos by file_id), 0-1024 characters
|
||||
// after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the video caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
SupportsStreaming bool `json:"supports_streaming,omitempty"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// ShowCaptionAboveMedia Optional. Pass True if the caption must be shown above the message media
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
// HasSpoiler Optional. Pass True if the video needs to be covered with a spoiler animation
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
// SupportsStreaming Optional. Pass True if the uploaded video is suitable for streaming
|
||||
SupportsStreaming bool `json:"supports_streaming,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendVideo sends a video.
|
||||
@@ -204,34 +365,76 @@ func (api *API) SendVideoWithContext(ctx context.Context, params SendVideo) (Mes
|
||||
// Since: Bot API 4.0
|
||||
// See https://core.telegram.org/bots/api#sendanimation
|
||||
type SendAnimation struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
// Animation Required. Animation to send. Pass a file_id as String to send an animation that exists on the
|
||||
// Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get an animation from the
|
||||
// Internet, or upload a new animation using multipart/form-data. More information on Sending Files »
|
||||
Animation string `json:"animation"`
|
||||
// Thumbnail Optional. Thumbnail of the file sent; can be ignored if thumbnail generation for the file is
|
||||
// supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's
|
||||
// width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data.
|
||||
// Thumbnails can't be reused and can be only uploaded as a new file, so you can pass
|
||||
// “attach://<file_attach_name>” if the thumbnail was uploaded using multipart/form-data under
|
||||
// <file_attach_name>. More information on Sending Files »
|
||||
Thumbnail string `json:"thumbnail,omitempty"`
|
||||
Duration int `json:"duration,omitempty"`
|
||||
Width int `json:"width,omitempty"`
|
||||
Height int `json:"height,omitempty"`
|
||||
// Duration Optional. Duration of sent animation in seconds
|
||||
Duration int `json:"duration,omitempty"`
|
||||
// Width Optional. Animation width
|
||||
Width int `json:"width,omitempty"`
|
||||
// Height Optional. Animation height
|
||||
Height int `json:"height,omitempty"`
|
||||
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// Caption Optional. Animation caption (may also be used when resending animation by file_id), 0-1024
|
||||
// characters after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the animation caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
// ShowCaptionAboveMedia Optional. Pass True if the caption must be shown above the message media
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
// HasSpoiler Optional. Pass True if the animation needs to be covered with a spoiler animation
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendAnimation sends an animation file (GIF or H.264/MPEG-4 AVC video without sound).
|
||||
@@ -255,28 +458,59 @@ func (api *API) SendAnimationWithContext(ctx context.Context, params SendAnimati
|
||||
// Since: Bot API 1.2
|
||||
// See https://core.telegram.org/bots/api#sendvoice
|
||||
type SendVoice struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
Voice string `json:"voice"`
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
Duration int `json:"duration,omitempty"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// Voice Required. Audio file to send. Pass a file_id as String to send a file that exists on the Telegram
|
||||
// servers (recommended), pass an HTTP URL as a String for Telegram to get a file from the Internet, or
|
||||
// upload a new one using multipart/form-data. More information on Sending Files »
|
||||
Voice string `json:"voice"`
|
||||
// Caption Optional. Voice message caption, 0-1024 characters after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the voice message caption. See formatting options for
|
||||
// more details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
// Duration Optional. Duration of the voice message in seconds
|
||||
Duration int `json:"duration,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendVoice sends a voice note.
|
||||
@@ -300,27 +534,60 @@ func (api *API) SendVoiceWithContext(ctx context.Context, params SendVoice) (Mes
|
||||
// Since: Bot API 3.0
|
||||
// See https://core.telegram.org/bots/api#sendvideonote
|
||||
type SendVideoNote struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
VideoNote string `json:"video_note"`
|
||||
Thumbnail string `json:"thumbnail,omitempty"`
|
||||
Duration int `json:"duration,omitempty"`
|
||||
Length int `json:"length,omitempty"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// VideoNote Required. Video note to send. Pass a file_id as String to send a video note that exists on the
|
||||
// Telegram servers (recommended) or upload a new video using multipart/form-data. More information on
|
||||
// Sending Files ». Sending video notes by a URL is currently unsupported.
|
||||
VideoNote string `json:"video_note"`
|
||||
// Thumbnail Optional. Thumbnail of the file sent; can be ignored if thumbnail generation for the file is
|
||||
// supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's
|
||||
// width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data.
|
||||
// Thumbnails can't be reused and can be only uploaded as a new file, so you can pass
|
||||
// “attach://<file_attach_name>” if the thumbnail was uploaded using multipart/form-data under
|
||||
// <file_attach_name>. More information on Sending Files »
|
||||
Thumbnail string `json:"thumbnail,omitempty"`
|
||||
// Duration Optional. Duration of sent video in seconds
|
||||
Duration int `json:"duration,omitempty"`
|
||||
// Length Optional. Video width and height, i.e. diameter of the video message
|
||||
Length int `json:"length,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendVideoNote sends a video note (rounded video message).
|
||||
@@ -344,25 +611,56 @@ func (api *API) SendVideoNoteWithContext(ctx context.Context, params SendVideoNo
|
||||
// Since: Bot API 7.6
|
||||
// See https://core.telegram.org/bots/api#sendpaidmedia
|
||||
type SendPaidMedia struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
StarCount int `json:"star_count,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username. If the chat is a channel, all Telegram Star proceeds from this media
|
||||
// will be credited to the chat's balance. Otherwise, they will be credited to the bot's balance.
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// StarCount Required. The number of Telegram Stars that must be paid to buy access to the media; 1-25000
|
||||
StarCount int `json:"star_count,omitempty"`
|
||||
|
||||
Media []InputPaidMedia `json:"media"`
|
||||
Payload string `json:"payload,omitempty"`
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// Media Required. A JSON-serialized Array describing the media to be sent; up to 10 items
|
||||
Media []InputPaidMedia `json:"media"`
|
||||
// Payload Optional. Bot-defined paid media payload, 0-128 bytes. This will not be displayed to the user,
|
||||
// use it for your internal processes.
|
||||
Payload string `json:"payload,omitempty"`
|
||||
// Caption Optional. Media caption, 0-1024 characters after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the media caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
// ShowCaptionAboveMedia Optional. Pass True if the caption must be shown above the message media
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendPaidMedia sends paid media.
|
||||
@@ -386,17 +684,34 @@ func (api *API) SendPaidMediaWithContext(ctx context.Context, params SendPaidMed
|
||||
// Since: Bot API 3.5
|
||||
// See https://core.telegram.org/bots/api#sendmediagroup
|
||||
type SendMediaGroup struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the messages will be
|
||||
// sent; required if the messages are sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
|
||||
Media []InputMedia `json:"media"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// Media Required. A JSON-serialized Array describing messages to be sent, must include 2-10 items
|
||||
Media []InputMedia `json:"media"`
|
||||
// DisableNotification Optional. Sends messages silently. Users will receive a notification with no sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent messages from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
}
|
||||
|
||||
// SendMediaGroup sends a group of photos, videos, documents or audios as an album.
|
||||
@@ -420,32 +735,66 @@ func (api *API) SendMediaGroupWithContext(ctx context.Context, params SendMediaG
|
||||
// Since: Bot API 10.0
|
||||
// See https://core.telegram.org/bots/api#sendlivephoto
|
||||
type SendLivePhoto struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel (in the format
|
||||
// @channelusername)
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
LivePhoto string `json:"live_photo"`
|
||||
// LivePhoto Required. Live photo video to send. The video must be no longer than 10 seconds and must not
|
||||
// exceed 10 MB in size. Pass a file_id as String to send a video that exists on the Telegram servers
|
||||
// (recommended) or upload a new video using multipart/form-data. More information on Sending Files ».
|
||||
// Sending live photos by a URL is currently unsupported.
|
||||
LivePhoto string `json:"live_photo"`
|
||||
// Photo contains or identifies the associated photo.
|
||||
Photo string `json:"photo"`
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
Photo string `json:"photo"`
|
||||
// Caption Optional. Video caption (may also be used when resending videos by file_id), 0-1024 characters
|
||||
// after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the video caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// ShowCaptionAboveMedia Optional. Pass True if the caption must be shown above the message media
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
// HasSpoiler Optional. Pass True if the video needs to be covered with a spoiler animation
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendLivePhoto sends a live photo.
|
||||
|
||||
+468
-177
@@ -3,107 +3,183 @@ package tgapi
|
||||
// Animation represents an animation file (GIF or H.264/MPEG-4 AVC without sound).
|
||||
// Since: Bot API 4.0
|
||||
type Animation struct {
|
||||
FileID string `json:"file_id"`
|
||||
// FileID Identifier for this file, which can be used to download or reuse the file
|
||||
FileID string `json:"file_id"`
|
||||
// FileUniqueID Unique identifier for this file, which is supposed to be the same over time and for
|
||||
// different bots. Can't be used to download or reuse the file.
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
Width int `json:"width"`
|
||||
Height int `json:"height"`
|
||||
Duration int `json:"duration"`
|
||||
// Width Video width as defined by the sender
|
||||
Width int `json:"width"`
|
||||
// Height Video height as defined by the sender
|
||||
Height int `json:"height"`
|
||||
// Duration Duration of the video in seconds as defined by the sender
|
||||
Duration int `json:"duration"`
|
||||
|
||||
// Thumbnail Optional. Animation thumbnail as defined by the sender
|
||||
Thumbnail *PhotoSize `json:"thumbnail,omitempty"`
|
||||
FileName string `json:"file_name"`
|
||||
MimeType string `json:"mime_type"`
|
||||
FileSize int `json:"file_size"`
|
||||
// FileName Optional. Original animation filename as defined by the sender
|
||||
FileName string `json:"file_name"`
|
||||
// MimeType Optional. MIME type of the file as defined by the sender
|
||||
MimeType string `json:"mime_type"`
|
||||
// FileSize Optional. File size in bytes. It can be bigger than 2^31 and some programming languages may have
|
||||
// difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a signed 64-bit
|
||||
// integer or double-precision float type are safe for storing this value.
|
||||
FileSize int `json:"file_size"`
|
||||
}
|
||||
|
||||
// Audio represents an audio file to be treated as music by the Telegram clients.
|
||||
// Since: Bot API 1.2
|
||||
// See https://core.telegram.org/bots/api#audio
|
||||
type Audio struct {
|
||||
FileID string `json:"file_id"`
|
||||
// FileID Identifier for this file, which can be used to download or reuse the file
|
||||
FileID string `json:"file_id"`
|
||||
// FileUniqueID Unique identifier for this file, which is supposed to be the same over time and for
|
||||
// different bots. Can't be used to download or reuse the file.
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
Duration int `json:"duration"`
|
||||
// Duration Duration of the audio in seconds as defined by the sender
|
||||
Duration int `json:"duration"`
|
||||
|
||||
Performer string `json:"performer,omitempty"`
|
||||
Title string `json:"title,omitempty"`
|
||||
FileName string `json:"file_name,omitempty"` // Since: Bot API 5.0
|
||||
MimeType string `json:"mime_type,omitempty"`
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
// Performer Optional. Performer of the audio as defined by the sender or by audio tags
|
||||
Performer string `json:"performer,omitempty"`
|
||||
// Title Optional. Title of the audio as defined by the sender or by audio tags
|
||||
Title string `json:"title,omitempty"`
|
||||
// FileName Optional. Original filename as defined by the sender
|
||||
FileName string `json:"file_name,omitempty"` // Since: Bot API 5.0
|
||||
// MimeType Optional. MIME type of the file as defined by the sender
|
||||
MimeType string `json:"mime_type,omitempty"`
|
||||
// FileSize Optional. File size in bytes. It can be bigger than 2^31 and some programming languages may have
|
||||
// difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a signed 64-bit
|
||||
// integer or double-precision float type are safe for storing this value.
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
// Thumbnail Optional. Thumbnail of the album cover to which the music file belongs
|
||||
Thumbnail *PhotoSize `json:"thumbnail,omitempty"`
|
||||
}
|
||||
|
||||
// Document represents a general file (as opposed to photos, voice messages and audio files).
|
||||
// Since: Bot API 1.0
|
||||
type Document struct {
|
||||
FileID string `json:"file_id"`
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
Thumbnail *PhotoSize `json:"thumbnail,omitempty"`
|
||||
FileName string `json:"file_name"`
|
||||
MimeType string `json:"mime_type"`
|
||||
FileSize int `json:"file_size,omitempty"`
|
||||
// FileID Identifier for this file, which can be used to download or reuse the file
|
||||
FileID string `json:"file_id"`
|
||||
// FileUniqueID Unique identifier for this file, which is supposed to be the same over time and for
|
||||
// different bots. Can't be used to download or reuse the file.
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
// Thumbnail Optional. Document thumbnail as defined by the sender
|
||||
Thumbnail *PhotoSize `json:"thumbnail,omitempty"`
|
||||
// FileName Optional. Original filename as defined by the sender
|
||||
FileName string `json:"file_name"`
|
||||
// MimeType Optional. MIME type of the file as defined by the sender
|
||||
MimeType string `json:"mime_type"`
|
||||
// FileSize Optional. File size in bytes. It can be bigger than 2^31 and some programming languages may have
|
||||
// difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a signed 64-bit
|
||||
// integer or double-precision float type are safe for storing this value.
|
||||
FileSize int `json:"file_size,omitempty"`
|
||||
}
|
||||
|
||||
// Story represents a story.
|
||||
// Since: Bot API 6.8
|
||||
type Story struct {
|
||||
// Chat Chat that posted the story
|
||||
Chat Chat `json:"chat"`
|
||||
ID int `json:"id"`
|
||||
// ID Unique identifier for the story in the chat
|
||||
ID int `json:"id"`
|
||||
}
|
||||
|
||||
// Video represents a video file.
|
||||
// Since: Bot API 1.0
|
||||
type Video struct {
|
||||
FileID string `json:"file_id"`
|
||||
// FileID Identifier for this file, which can be used to download or reuse the file
|
||||
FileID string `json:"file_id"`
|
||||
// FileUniqueID Unique identifier for this file, which is supposed to be the same over time and for
|
||||
// different bots. Can't be used to download or reuse the file.
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
Width int `json:"width"`
|
||||
Height int `json:"height"`
|
||||
Duration int `json:"duration"`
|
||||
// Width Video width as defined by the sender
|
||||
Width int `json:"width"`
|
||||
// Height Video height as defined by the sender
|
||||
Height int `json:"height"`
|
||||
// Duration Duration of the video in seconds as defined by the sender
|
||||
Duration int `json:"duration"`
|
||||
|
||||
Thumbnail *PhotoSize `json:"thumbnail,omitempty"`
|
||||
Cover []PhotoSize `json:"cover,omitempty"` // Since: Bot API 8.3
|
||||
StartTimestamp int64 `json:"start_timestamp"` // Since: Bot API 8.3
|
||||
Qualities []VideoQuality `json:"qualities,omitempty"` // Since: Bot API 9.4
|
||||
FileName string `json:"file_name,omitempty"`
|
||||
MimeType string `json:"mime_type,omitempty"`
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
// Thumbnail Optional. Video thumbnail
|
||||
Thumbnail *PhotoSize `json:"thumbnail,omitempty"`
|
||||
// Cover Optional. Available sizes of the cover of the video in the message
|
||||
Cover []PhotoSize `json:"cover,omitempty"` // Since: Bot API 8.3
|
||||
// StartTimestamp Optional. Timestamp in seconds from which the video will play in the message
|
||||
StartTimestamp int64 `json:"start_timestamp"` // Since: Bot API 8.3
|
||||
// Qualities Optional. List of available qualities of the video
|
||||
Qualities []VideoQuality `json:"qualities,omitempty"` // Since: Bot API 9.4
|
||||
// FileName Optional. Original filename as defined by the sender
|
||||
FileName string `json:"file_name,omitempty"`
|
||||
// MimeType Optional. MIME type of the file as defined by the sender
|
||||
MimeType string `json:"mime_type,omitempty"`
|
||||
// FileSize Optional. File size in bytes. It can be bigger than 2^31 and some programming languages may have
|
||||
// difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a signed 64-bit
|
||||
// integer or double-precision float type are safe for storing this value.
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
}
|
||||
|
||||
// VideoQuality describes an alternative quality for a video.
|
||||
// Since: Bot API 9.4
|
||||
// See https://core.telegram.org/bots/api#videoquality
|
||||
type VideoQuality struct {
|
||||
FileID string `json:"file_id"`
|
||||
// FileID Identifier for this file, which can be used to download or reuse the file
|
||||
FileID string `json:"file_id"`
|
||||
// FileUniqueID Unique identifier for this file, which is supposed to be the same over time and for
|
||||
// different bots. Can't be used to download or reuse the file.
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
Width int `json:"width"`
|
||||
Height int `json:"height"`
|
||||
Codec string `json:"codec"`
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
// Width Video width
|
||||
Width int `json:"width"`
|
||||
// Height Video height
|
||||
Height int `json:"height"`
|
||||
// Codec Codec that was used to encode the video, for example, “h264”, “h265”, or “av01”
|
||||
Codec string `json:"codec"`
|
||||
// FileSize Optional. File size in bytes. It can be bigger than 2^31 and some programming languages may have
|
||||
// difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a signed 64-bit
|
||||
// integer or double-precision float type are safe for storing this value.
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
}
|
||||
|
||||
// VideoNote represents a video message.
|
||||
// Since: Bot API 3.0
|
||||
type VideoNote struct {
|
||||
FileID string `json:"file_id"`
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
Length int `json:"length"`
|
||||
Duration int `json:"duration"`
|
||||
Thumbnail *PhotoSize `json:"thumbnail,omitempty"`
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
// FileID Identifier for this file, which can be used to download or reuse the file
|
||||
FileID string `json:"file_id"`
|
||||
// FileUniqueID Unique identifier for this file, which is supposed to be the same over time and for
|
||||
// different bots. Can't be used to download or reuse the file.
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
// Length Video width and height (diameter of the video message) as defined by the sender
|
||||
Length int `json:"length"`
|
||||
// Duration Duration of the video in seconds as defined by the sender
|
||||
Duration int `json:"duration"`
|
||||
// Thumbnail Optional. Video thumbnail
|
||||
Thumbnail *PhotoSize `json:"thumbnail,omitempty"`
|
||||
// FileSize Optional. File size in bytes
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
}
|
||||
|
||||
// Voice represents a voice note.
|
||||
// Since: Bot API 1.2
|
||||
type Voice struct {
|
||||
FileID string `json:"file_id"`
|
||||
// FileID Identifier for this file, which can be used to download or reuse the file
|
||||
FileID string `json:"file_id"`
|
||||
// FileUniqueID Unique identifier for this file, which is supposed to be the same over time and for
|
||||
// different bots. Can't be used to download or reuse the file.
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
Duration int `json:"duration"`
|
||||
MimeType string `json:"mime_type,omitempty"`
|
||||
FileSize int `json:"file_size,omitempty"`
|
||||
// Duration Duration of the audio in seconds as defined by the sender
|
||||
Duration int `json:"duration"`
|
||||
// MimeType Optional. MIME type of the file as defined by the sender
|
||||
MimeType string `json:"mime_type,omitempty"`
|
||||
// FileSize Optional. File size in bytes. It can be bigger than 2^31 and some programming languages may have
|
||||
// difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a signed 64-bit
|
||||
// integer or double-precision float type are safe for storing this value.
|
||||
FileSize int `json:"file_size,omitempty"`
|
||||
}
|
||||
|
||||
// PaidMediaInfo describes paid media.
|
||||
// Since: Bot API 7.6
|
||||
type PaidMediaInfo struct {
|
||||
StarCount int `json:"star_count"`
|
||||
// StarCount The number of Telegram Stars that must be paid to buy access to the media
|
||||
StarCount int `json:"star_count"`
|
||||
// PaidMedia Information about the paid media
|
||||
PaidMedia []PaidMedia `json:"paid_media"`
|
||||
}
|
||||
|
||||
@@ -125,48 +201,78 @@ const (
|
||||
// PaidMedia describes paid media content.
|
||||
// Since: Bot API 7.6
|
||||
type PaidMedia struct {
|
||||
// Type identifies the preview, photo, video, or live-photo variant.
|
||||
Type PaidMediaType `json:"type,omitempty"`
|
||||
|
||||
Width int `json:"width,omitempty"`
|
||||
Height int `json:"height,omitempty"`
|
||||
// Width Optional. Media width as defined by the sender
|
||||
Width int `json:"width,omitempty"`
|
||||
// Height Optional. Media height as defined by the sender
|
||||
Height int `json:"height,omitempty"`
|
||||
// Duration Optional. Duration of the media in seconds as defined by the sender
|
||||
Duration int `json:"duration,omitempty"`
|
||||
|
||||
// Photo The photo
|
||||
Photo []PhotoSize `json:"photo,omitempty"`
|
||||
|
||||
Video *Video `json:"video,omitempty"`
|
||||
// Video The video
|
||||
Video *Video `json:"video,omitempty"`
|
||||
// LivePhoto The photo
|
||||
LivePhoto *LivePhoto `json:"live_photo,omitempty"` // Since: Bot API 10.0
|
||||
}
|
||||
|
||||
// Contact represents a phone contact.
|
||||
// Since: Bot API 1.0
|
||||
type Contact struct {
|
||||
// PhoneNumber Contact's phone number
|
||||
PhoneNumber string `json:"phone_number"`
|
||||
FirstName string `json:"first_name"`
|
||||
LastName string `json:"last_name,omitempty"`
|
||||
UserID int64 `json:"user_id,omitempty"`
|
||||
Vcard string `json:"vcard,omitempty"`
|
||||
// FirstName Contact's first name
|
||||
FirstName string `json:"first_name"`
|
||||
// LastName Optional. Contact's last name
|
||||
LastName string `json:"last_name,omitempty"`
|
||||
// UserID Optional. Contact's user identifier in Telegram. This number may have more than 32 significant
|
||||
// bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at
|
||||
// most 52 significant bits, so a 64-bit integer or double-precision float type are safe for storing this
|
||||
// identifier.
|
||||
UserID int64 `json:"user_id,omitempty"`
|
||||
// Vcard Optional. Additional data about the contact in the form of a vCard
|
||||
Vcard string `json:"vcard,omitempty"`
|
||||
}
|
||||
|
||||
// Dice represents an animated emoji with a random value.
|
||||
// Since: Bot API 4.7
|
||||
type Dice struct {
|
||||
// Emoji Emoji on which the dice throw animation is based
|
||||
Emoji string `json:"emoji"`
|
||||
Value int `json:"value"`
|
||||
// Value Value of the dice, 1-6 for “”, “” and “” base emoji, 1-5 for “” and “” base
|
||||
// emoji, 1-64 for “” base emoji
|
||||
Value int `json:"value"`
|
||||
}
|
||||
|
||||
// PollOption contains information about one answer option in a poll.
|
||||
// Since: Bot API 4.2
|
||||
// See https://core.telegram.org/bots/api#polloption
|
||||
type PollOption struct {
|
||||
PersistentID string `json:"persistent_id"` // Since: Bot API 9.6
|
||||
Text string `json:"text"`
|
||||
// PersistentID Unique identifier of the option, persistent on option addition and deletion
|
||||
PersistentID string `json:"persistent_id"` // Since: Bot API 9.6
|
||||
// Text Option text, 1-100 characters
|
||||
Text string `json:"text"`
|
||||
// TextEntities Optional. Special entities that appear in the option text. Currently, only custom emoji
|
||||
// entities are allowed in poll option texts
|
||||
TextEntities []MessageEntity `json:"text_entities"`
|
||||
Media *PollMedia `json:"media,omitempty"` // Since: Bot API 10.0
|
||||
VoterCount int `json:"voter_count"`
|
||||
// Media Optional. Media added to the poll option
|
||||
Media *PollMedia `json:"media,omitempty"` // Since: Bot API 10.0
|
||||
// VoterCount Number of users who voted for this option; may be 0 if unknown
|
||||
VoterCount int `json:"voter_count"`
|
||||
|
||||
AddedByUser *User `json:"added_by_user,omitempty"` // Since: Bot API 9.6
|
||||
AddedByChat *Chat `json:"added_by_chat,omitempty"` // Since: Bot API 9.6
|
||||
AdditionDate int `json:"addition_date,omitempty"` // Since: Bot API 9.6
|
||||
// AddedByUser Optional. User who added the option; omitted if the option wasn't added by a user after poll
|
||||
// creation
|
||||
AddedByUser *User `json:"added_by_user,omitempty"` // Since: Bot API 9.6
|
||||
// AddedByChat Optional. Chat that added the option; omitted if the option wasn't added by a chat after poll
|
||||
// creation
|
||||
AddedByChat *Chat `json:"added_by_chat,omitempty"` // Since: Bot API 9.6
|
||||
// AdditionDate Optional. Point in time (Unix timestamp) when the option was added; omitted if the option
|
||||
// existed in the original poll
|
||||
AdditionDate int `json:"addition_date,omitempty"` // Since: Bot API 9.6
|
||||
}
|
||||
|
||||
// InputPollOptionMedia describes the media to attach to a poll option.
|
||||
@@ -174,7 +280,9 @@ type PollOption struct {
|
||||
// Since: Bot API 10.0
|
||||
// See https://core.telegram.org/bots/api#inputpolloptionmedia
|
||||
type InputPollOptionMedia struct {
|
||||
Type string `json:"type"`
|
||||
// Type identifies the poll-option media variant.
|
||||
Type string `json:"type"`
|
||||
// Media is the file_id or URL of the option media for non-link variants.
|
||||
Media string `json:"media,omitempty"`
|
||||
// URL contains the HTTP URL.
|
||||
URL string `json:"url,omitempty"` // Since: Bot API 10.1; for type "link"
|
||||
@@ -184,36 +292,55 @@ type InputPollOptionMedia struct {
|
||||
// Since: Bot API 7.3
|
||||
// See https://core.telegram.org/bots/api#inputpolloption
|
||||
type InputPollOption struct {
|
||||
Text string `json:"text"`
|
||||
TextParseMode ParseMode `json:"text_parse_mode,omitempty"`
|
||||
TextEntities []MessageEntity `json:"text_entities,omitempty"`
|
||||
Media *InputPollOptionMedia `json:"media,omitempty"` // Since: Bot API 10.0
|
||||
// Text Option text, 1-100 characters
|
||||
Text string `json:"text"`
|
||||
// TextParseMode Optional. Mode for parsing entities in the text. See formatting options for more details.
|
||||
// Currently, only custom emoji entities are allowed.
|
||||
TextParseMode ParseMode `json:"text_parse_mode,omitempty"`
|
||||
// TextEntities Optional. A JSON-serialized list of special entities that appear in the poll option text. It
|
||||
// can be specified instead of text_parse_mode.
|
||||
TextEntities []MessageEntity `json:"text_entities,omitempty"`
|
||||
// Media Optional. Media added to the poll option
|
||||
Media *InputPollOptionMedia `json:"media,omitempty"` // Since: Bot API 10.0
|
||||
}
|
||||
|
||||
// InputPollMedia describes the media to attach to a poll or its explanation.
|
||||
// Since: Bot API 10.0
|
||||
// See https://core.telegram.org/bots/api#inputpollmedia
|
||||
type InputPollMedia struct {
|
||||
Type string `json:"type"`
|
||||
// Type identifies the poll-media variant.
|
||||
Type string `json:"type"`
|
||||
// Media is the file_id or URL of the poll media.
|
||||
Media string `json:"media"`
|
||||
}
|
||||
|
||||
// PollOptionAdded describes a service message about a poll option being added.
|
||||
// Since: Bot API 9.6
|
||||
type PollOptionAdded struct {
|
||||
PollMessage *InaccessibleMessage `json:"poll_message,omitempty"`
|
||||
OptionPersistentID string `json:"option_persistent_id"`
|
||||
OptionText string `json:"option_text"`
|
||||
OptionTextEntities []MessageEntity `json:"option_text_entities,omitempty"`
|
||||
// PollMessage Optional. Message containing the poll to which the option was added, if known. Note that the
|
||||
// Message object in this field will not contain the reply_to_message field even if it itself is a reply.
|
||||
PollMessage *InaccessibleMessage `json:"poll_message,omitempty"`
|
||||
// OptionPersistentID Unique identifier of the added option
|
||||
OptionPersistentID string `json:"option_persistent_id"`
|
||||
// OptionText Option text
|
||||
OptionText string `json:"option_text"`
|
||||
// OptionTextEntities Optional. Special entities that appear in the option_text
|
||||
OptionTextEntities []MessageEntity `json:"option_text_entities,omitempty"`
|
||||
}
|
||||
|
||||
// PollOptionDeleted describes a service message about a poll option being deleted.
|
||||
// Since: Bot API 9.6
|
||||
type PollOptionDeleted struct {
|
||||
PollMessage *InaccessibleMessage `json:"poll_message,omitempty"`
|
||||
OptionPersistentID string `json:"option_persistent_id"`
|
||||
OptionText string `json:"option_text"`
|
||||
OptionTextEntities []MessageEntity `json:"option_text_entities,omitempty"`
|
||||
// PollMessage Optional. Message containing the poll from which the option was deleted, if known. Note that
|
||||
// the Message object in this field will not contain the reply_to_message field even if it itself is a
|
||||
// reply.
|
||||
PollMessage *InaccessibleMessage `json:"poll_message,omitempty"`
|
||||
// OptionPersistentID Unique identifier of the deleted option
|
||||
OptionPersistentID string `json:"option_persistent_id"`
|
||||
// OptionText Option text
|
||||
OptionText string `json:"option_text"`
|
||||
// OptionTextEntities Optional. Special entities that appear in the option_text
|
||||
OptionTextEntities []MessageEntity `json:"option_text_entities,omitempty"`
|
||||
}
|
||||
|
||||
// PollType represents the type of a poll.
|
||||
@@ -226,43 +353,102 @@ const (
|
||||
PollTypeQuiz PollType = "quiz"
|
||||
)
|
||||
|
||||
// PollAnswer represents an answer of a user in a poll.
|
||||
// PollAnswer represents an answer submitted by a poll voter.
|
||||
//
|
||||
// User and VoterChat remain value fields for v1 compatibility. Their pointer
|
||||
// representation is subject to change in v2; use VoterUser and VoterChatInfo
|
||||
// when presence matters.
|
||||
// Since: Bot API 4.6
|
||||
// See https://core.telegram.org/bots/api#pollanswer
|
||||
type PollAnswer struct {
|
||||
PollID string `json:"poll_id"`
|
||||
VoterChat Chat `json:"voter_chat,omitempty"` // Since: Bot API 6.8
|
||||
User User `json:"user,omitempty"` // FIXME: Pointer in v2
|
||||
OptionIDs []int `json:"option_ids"`
|
||||
// PollID identifies the poll.
|
||||
PollID string `json:"poll_id"`
|
||||
// VoterChat is the chat that changed the answer, when the voter is anonymous.
|
||||
VoterChat Chat `json:"voter_chat,omitempty"` // Since: Bot API 6.8
|
||||
// User is the user that changed the answer, when the voter is not anonymous.
|
||||
User User `json:"user,omitempty"`
|
||||
// OptionIDs contains the chosen option indices and is empty for a retracted vote.
|
||||
OptionIDs []int `json:"option_ids"`
|
||||
// OptionPersistentIDs contains the persistent identifiers of the chosen options.
|
||||
OptionPersistentIDs []string `json:"option_persistent_ids"` // Since: Bot API 9.6
|
||||
}
|
||||
|
||||
// VoterUser returns the non-anonymous voter when it is present.
|
||||
//
|
||||
// Since: Bot API 4.6
|
||||
func (a PollAnswer) VoterUser() (*User, bool) {
|
||||
if a.User.ID == 0 {
|
||||
return nil, false
|
||||
}
|
||||
return &a.User, true
|
||||
}
|
||||
|
||||
// VoterChatInfo returns the anonymous voter chat when it is present.
|
||||
//
|
||||
// Since: Bot API 6.8
|
||||
func (a PollAnswer) VoterChatInfo() (*Chat, bool) {
|
||||
if a.VoterChat.ID == 0 {
|
||||
return nil, false
|
||||
}
|
||||
return &a.VoterChat, true
|
||||
}
|
||||
|
||||
// Poll contains information about a poll.
|
||||
// Since: Bot API 4.2
|
||||
// See https://core.telegram.org/bots/api#poll
|
||||
type Poll struct {
|
||||
ID string `json:"id"`
|
||||
Question string `json:"question"`
|
||||
// ID Unique poll identifier
|
||||
ID string `json:"id"`
|
||||
// Question Poll question, 1-300 characters
|
||||
Question string `json:"question"`
|
||||
// QuestionEntities Optional. Special entities that appear in the question. Currently, only custom emoji
|
||||
// entities are allowed in poll questions
|
||||
QuestionEntities []MessageEntity `json:"question_entities"` // Since: Bot API 7.3
|
||||
Options []PollOption `json:"options"`
|
||||
TotalVoterCount int `json:"total_voter_count"`
|
||||
IsClosed bool `json:"is_closed,omitempty"`
|
||||
IsAnonymous bool `json:"is_anonymous,omitempty"`
|
||||
Type PollType `json:"type"`
|
||||
// Options List of poll options
|
||||
Options []PollOption `json:"options"`
|
||||
// TotalVoterCount Total number of users that voted in the poll
|
||||
TotalVoterCount int `json:"total_voter_count"`
|
||||
// IsClosed True, if the poll is closed
|
||||
IsClosed bool `json:"is_closed,omitempty"`
|
||||
// IsAnonymous True, if the poll is anonymous
|
||||
IsAnonymous bool `json:"is_anonymous,omitempty"`
|
||||
// Type Poll type, currently can be “regular” or “quiz”
|
||||
Type PollType `json:"type"`
|
||||
|
||||
AllowsMultipleAnswers bool `json:"allows_multiple_answers,omitempty"` // Since: Bot API 4.6
|
||||
AllowsRevoting bool `json:"allows_revoting,omitempty"` // Since: Bot API 9.6
|
||||
MembersOnly bool `json:"members_only,omitempty"` // Since: Bot API 10.0
|
||||
CountryCodes []string `json:"country_codes,omitempty"` // Since: Bot API 10.0
|
||||
CorrectOptionIDs []int `json:"correct_option_ids,omitempty"` // Since: Bot API 9.6
|
||||
Explanation string `json:"explanation,omitempty"` // Since: Bot API 4.8
|
||||
ExplanationEntities []MessageEntity `json:"explanation_entities,omitempty"` // Since: Bot API 4.8
|
||||
ExplanationMedia *PollMedia `json:"explanation_media,omitempty"` // Since: Bot API 10.0
|
||||
OpenPeriod int `json:"open_period,omitempty"` // Since: Bot API 4.8
|
||||
CloseDate int `json:"close_date,omitempty"` // Since: Bot API 4.8
|
||||
Description string `json:"description,omitempty"` // Since: Bot API 9.6
|
||||
DescriptionEntities []MessageEntity `json:"description_entities,omitempty"` // Since: Bot API 9.6
|
||||
Media *PollMedia `json:"media,omitempty"` // Since: Bot API 10.0
|
||||
// AllowsMultipleAnswers True, if the poll allows multiple answers
|
||||
AllowsMultipleAnswers bool `json:"allows_multiple_answers,omitempty"` // Since: Bot API 4.6
|
||||
// AllowsRevoting True, if the poll allows to change the chosen answer options
|
||||
AllowsRevoting bool `json:"allows_revoting,omitempty"` // Since: Bot API 9.6
|
||||
// MembersOnly True if voting is limited to users who have been members of the chat where the poll was
|
||||
// originally sent for more than 24 hours
|
||||
MembersOnly bool `json:"members_only,omitempty"` // Since: Bot API 10.0
|
||||
// CountryCodes Optional. A list of two-letter ISO 3166-1 alpha-2 country codes indicating the countries
|
||||
// from which users can vote in the poll. The country code “FT” is used for users with anonymous
|
||||
// numbers. If omitted, then users from any country can participate in the poll.
|
||||
CountryCodes []string `json:"country_codes,omitempty"` // Since: Bot API 10.0
|
||||
// CorrectOptionIDs Optional. Array of 0-based identifiers of the correct answer options. Available only for
|
||||
// polls in quiz mode which are closed or were sent (not forwarded) by the bot or to the private chat with
|
||||
// the bot.
|
||||
CorrectOptionIDs []int `json:"correct_option_ids,omitempty"` // Since: Bot API 9.6
|
||||
// Explanation Optional. Text that is shown when a user chooses an incorrect answer or taps on the lamp icon
|
||||
// in a quiz-style poll, 0-200 characters
|
||||
Explanation string `json:"explanation,omitempty"` // Since: Bot API 4.8
|
||||
// ExplanationEntities Optional. Special entities like usernames, URLs, bot commands, etc. that appear in
|
||||
// the explanation
|
||||
ExplanationEntities []MessageEntity `json:"explanation_entities,omitempty"` // Since: Bot API 4.8
|
||||
// ExplanationMedia Optional. Media added to the quiz explanation
|
||||
ExplanationMedia *PollMedia `json:"explanation_media,omitempty"` // Since: Bot API 10.0
|
||||
// OpenPeriod Optional. Amount of time in seconds the poll will be active after creation
|
||||
OpenPeriod int `json:"open_period,omitempty"` // Since: Bot API 4.8
|
||||
// CloseDate Optional. Point in time (Unix timestamp) when the poll will be automatically closed
|
||||
CloseDate int `json:"close_date,omitempty"` // Since: Bot API 4.8
|
||||
// Description Optional. Description of the poll; for polls inside the Message object only
|
||||
Description string `json:"description,omitempty"` // Since: Bot API 9.6
|
||||
// DescriptionEntities Optional. Special entities like usernames, URLs, bot commands, etc. that appear in
|
||||
// the description
|
||||
DescriptionEntities []MessageEntity `json:"description_entities,omitempty"` // Since: Bot API 9.6
|
||||
// Media Optional. Media added to the poll description; for polls inside the Message object only
|
||||
Media *PollMedia `json:"media,omitempty"` // Since: Bot API 10.0
|
||||
}
|
||||
|
||||
// Link represents an HTTP link.
|
||||
@@ -276,73 +462,121 @@ type Link struct {
|
||||
// PollMedia represents media attached to a poll.
|
||||
// Since: Bot API 10.0
|
||||
type PollMedia struct {
|
||||
// Animation Optional. Media is an animation, information about the animation
|
||||
Animation *Animation `json:"animation,omitempty"`
|
||||
Audio *Audio `json:"audio,omitempty"`
|
||||
Document *Document `json:"document,omitempty"`
|
||||
// Audio Optional. Media is an audio file, information about the file; currently, can't be received in a
|
||||
// poll option
|
||||
Audio *Audio `json:"audio,omitempty"`
|
||||
// Document Optional. Media is a general file, information about the file; currently, can't be received in a
|
||||
// poll option
|
||||
Document *Document `json:"document,omitempty"`
|
||||
// Link contains link media attached to the poll.
|
||||
Link *Link `json:"link,omitempty"` // Since: Bot API 10.1
|
||||
LivePhoto *LivePhoto `json:"live_photo,omitempty"`
|
||||
Location *Location `json:"location,omitempty"`
|
||||
Photo []PhotoSize `json:"photo,omitempty"`
|
||||
Sticker *Sticker `json:"sticker,omitempty"`
|
||||
Venue *Venue `json:"venue,omitempty"`
|
||||
Video *Video `json:"video,omitempty"`
|
||||
Link *Link `json:"link,omitempty"` // Since: Bot API 10.1
|
||||
// LivePhoto Optional. Media is a live photo, information about the live photo
|
||||
LivePhoto *LivePhoto `json:"live_photo,omitempty"`
|
||||
// Location Optional. Media is a shared location, information about the location
|
||||
Location *Location `json:"location,omitempty"`
|
||||
// Photo Optional. Media is a photo, available sizes of the photo
|
||||
Photo []PhotoSize `json:"photo,omitempty"`
|
||||
// Sticker Optional. Media is a sticker, information about the sticker; currently, for poll options only
|
||||
Sticker *Sticker `json:"sticker,omitempty"`
|
||||
// Venue Optional. Media is a venue, information about the venue
|
||||
Venue *Venue `json:"venue,omitempty"`
|
||||
// Video Optional. Media is a video, information about the video
|
||||
Video *Video `json:"video,omitempty"`
|
||||
}
|
||||
|
||||
// ChecklistTask represents a single task in a checklist.
|
||||
// Since: Bot API 9.1
|
||||
type ChecklistTask struct {
|
||||
ID int `json:"id"`
|
||||
Text string `json:"text"`
|
||||
TextEntities []MessageEntity `json:"text_entities,omitempty"`
|
||||
CompletedByUser *User `json:"completed_by_user,omitempty"`
|
||||
CompletedByChat *Chat `json:"completed_by_chat,omitempty"`
|
||||
CompletionDate int `json:"completion_date,omitempty"`
|
||||
// ID Unique identifier of the task
|
||||
ID int `json:"id"`
|
||||
// Text Text of the task
|
||||
Text string `json:"text"`
|
||||
// TextEntities Optional. Special entities that appear in the task text
|
||||
TextEntities []MessageEntity `json:"text_entities,omitempty"`
|
||||
// CompletedByUser Optional. User that completed the task; omitted if the task wasn't completed by a user
|
||||
CompletedByUser *User `json:"completed_by_user,omitempty"`
|
||||
// CompletedByChat Optional. Chat that completed the task; omitted if the task wasn't completed by a chat
|
||||
CompletedByChat *Chat `json:"completed_by_chat,omitempty"`
|
||||
// CompletionDate Optional. Point in time (Unix timestamp) when the task was completed; 0 if the task wasn't
|
||||
// completed
|
||||
CompletionDate int `json:"completion_date,omitempty"`
|
||||
}
|
||||
|
||||
// Checklist represents a checklist.
|
||||
// Since: Bot API 9.1
|
||||
type Checklist struct {
|
||||
Title string `json:"title"`
|
||||
TitleEntities []MessageEntity `json:"title_entities,omitempty"`
|
||||
Tasks []ChecklistTask `json:"tasks"`
|
||||
OthersCanAddTasks bool `json:"others_can_add_tasks,omitempty"`
|
||||
OthersCanMarkTasksAsDone bool `json:"others_can_mark_tasks_as_done,omitempty"`
|
||||
// Title Title of the checklist
|
||||
Title string `json:"title"`
|
||||
// TitleEntities Optional. Special entities that appear in the checklist title
|
||||
TitleEntities []MessageEntity `json:"title_entities,omitempty"`
|
||||
// Tasks List of tasks in the checklist
|
||||
Tasks []ChecklistTask `json:"tasks"`
|
||||
// OthersCanAddTasks Optional. True, if users other than the creator of the list can add tasks to the list
|
||||
OthersCanAddTasks bool `json:"others_can_add_tasks,omitempty"`
|
||||
// OthersCanMarkTasksAsDone Optional. True, if users other than the creator of the list can mark tasks as
|
||||
// done or not done
|
||||
OthersCanMarkTasksAsDone bool `json:"others_can_mark_tasks_as_done,omitempty"`
|
||||
}
|
||||
|
||||
// InputChecklistTask describes a task in a checklist.
|
||||
// Since: Bot API 9.1
|
||||
type InputChecklistTask struct {
|
||||
ID int `json:"id"`
|
||||
Text string `json:"text"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// ID Unique identifier of the task; must be positive and unique among all task identifiers currently
|
||||
// present in the checklist
|
||||
ID int `json:"id"`
|
||||
// Text Text of the task; 1-100 characters after entities parsing
|
||||
Text string `json:"text"`
|
||||
// ParseMode Optional. Mode for parsing entities in the text. See formatting options for more details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// TextEntities Optional. List of special entities that appear in the text, which can be specified instead
|
||||
// of parse_mode. Currently, only bold, italic, underline, strikethrough, spoiler, custom_emoji, and
|
||||
// date_time entities are allowed.
|
||||
TextEntities []MessageEntity `json:"text_entities,omitempty"`
|
||||
}
|
||||
|
||||
// InputChecklist represents a checklist to be sent.
|
||||
// Since: Bot API 9.1
|
||||
type InputChecklist struct {
|
||||
Title string `json:"title"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
TitleEntities []MessageEntity `json:"title_entities,omitempty"`
|
||||
Tasks []InputChecklistTask `json:"tasks"`
|
||||
OtherCanAddTasks bool `json:"other_can_add_tasks,omitempty"`
|
||||
OtherCanMarkTasksAsDone bool `json:"other_can_mark_tasks_as_done,omitempty"`
|
||||
// Title Title of the checklist; 1-255 characters after entities parsing
|
||||
Title string `json:"title"`
|
||||
// ParseMode Optional. Mode for parsing entities in the title. See formatting options for more details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// TitleEntities Optional. List of special entities that appear in the title, which can be specified instead
|
||||
// of parse_mode. Currently, only bold, italic, underline, strikethrough, spoiler, custom_emoji, and
|
||||
// date_time entities are allowed.
|
||||
TitleEntities []MessageEntity `json:"title_entities,omitempty"`
|
||||
// Tasks List of 1-30 tasks in the checklist
|
||||
Tasks []InputChecklistTask `json:"tasks"`
|
||||
// OtherCanAddTasks Optional. Pass True if other users can add tasks to the checklist
|
||||
// Subject to change in v2: the Go field name may be corrected to OthersCanAddTasks.
|
||||
OtherCanAddTasks bool `json:"others_can_add_tasks,omitempty"`
|
||||
// OtherCanMarkTasksAsDone Optional. Pass True if other users can mark tasks as done or not done in the
|
||||
// checklist
|
||||
// Subject to change in v2: the Go field name may be corrected to OthersCanMarkTasksAsDone.
|
||||
OtherCanMarkTasksAsDone bool `json:"others_can_mark_tasks_as_done,omitempty"`
|
||||
}
|
||||
|
||||
// ChecklistTaskDone describes a service message about checklist tasks being marked as done.
|
||||
// Since: Bot API 9.1
|
||||
type ChecklistTaskDone struct {
|
||||
ChecklistMessage *Message `json:"checklist_message,omitempty"`
|
||||
MarkedAsDoneTaskIDs []int `json:"marked_as_done_task_ids,omitempty"`
|
||||
MarkedAsNotDoneTaskIDs []int `json:"marked_as_not_done_task_ids,omitempty"`
|
||||
// ChecklistMessage is the checklist message when it is available.
|
||||
ChecklistMessage *Message `json:"checklist_message,omitempty"`
|
||||
// MarkedAsDoneTaskIDs Optional. Identifiers of the tasks that were marked as done
|
||||
MarkedAsDoneTaskIDs []int `json:"marked_as_done_task_ids,omitempty"`
|
||||
// MarkedAsNotDoneTaskIDs Optional. Identifiers of the tasks that were marked as not done
|
||||
MarkedAsNotDoneTaskIDs []int `json:"marked_as_not_done_task_ids,omitempty"`
|
||||
}
|
||||
|
||||
// ChecklistTasksAdded describes a service message about new checklist tasks being added.
|
||||
// Since: Bot API 9.1
|
||||
type ChecklistTasksAdded struct {
|
||||
ChecklistMessage *Message `json:"checklist_message,omitempty"`
|
||||
Tasks []ChecklistTask `json:"tasks"`
|
||||
// ChecklistMessage Optional. Message containing the checklist to which the tasks were added. Note that the
|
||||
// Message object in this field will not contain the reply_to_message field even if it itself is a reply.
|
||||
ChecklistMessage *Message `json:"checklist_message,omitempty"`
|
||||
// Tasks List of tasks added to the checklist
|
||||
Tasks []ChecklistTask `json:"tasks"`
|
||||
}
|
||||
|
||||
// InputMediaType represents the type of input media.
|
||||
@@ -378,35 +612,64 @@ const (
|
||||
// Since: Bot API 4.0
|
||||
// See https://core.telegram.org/bots/api#inputmedia
|
||||
type InputMedia struct {
|
||||
Type InputMediaType `json:"type"`
|
||||
Media string `json:"media"`
|
||||
// Type identifies the concrete input-media variant.
|
||||
Type InputMediaType `json:"type"`
|
||||
// Media is a file_id, HTTP URL, or attach:// reference for the media.
|
||||
Media string `json:"media"`
|
||||
|
||||
Caption *string `json:"caption,omitempty"`
|
||||
ParseMode *ParseMode `json:"parse_mode,omitempty"`
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
ShowCaptionAboveMedia *bool `json:"show_caption_above_media,omitempty"` // Since: Bot API 7.4
|
||||
HasSpoiler *bool `json:"has_spoiler,omitempty"` // Since: Bot API 6.4
|
||||
// Caption is the optional media caption.
|
||||
Caption *string `json:"caption,omitempty"`
|
||||
// ParseMode selects how entities in Caption are parsed.
|
||||
ParseMode *ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. List of special entities that appear in the caption, which can be specified
|
||||
// instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
// ShowCaptionAboveMedia Optional. Pass True if the caption must be shown above the message media
|
||||
ShowCaptionAboveMedia *bool `json:"show_caption_above_media,omitempty"` // Since: Bot API 7.4
|
||||
// HasSpoiler requests that supported media be covered by a spoiler animation.
|
||||
HasSpoiler *bool `json:"has_spoiler,omitempty"` // Since: Bot API 6.4
|
||||
|
||||
Cover *string `json:"cover"` // Since: Bot API 8.3
|
||||
StartTimestamp *int `json:"start_timestamp"` // Since: Bot API 8.3
|
||||
Width *int `json:"width,omitempty"`
|
||||
Height *int `json:"height,omitempty"`
|
||||
Duration *int `json:"duration,omitempty"`
|
||||
SupportsStreaming *bool `json:"supports_streaming,omitempty"`
|
||||
// Cover Optional. Cover for the video in the message. Pass a file_id to send a file that exists on the
|
||||
// Telegram servers (recommended), pass an HTTP URL for Telegram to get a file from the Internet, or pass
|
||||
// “attach://<file_attach_name>” to upload a new one using multipart/form-data under <file_attach_name>
|
||||
// name. More information on Sending Files »
|
||||
Cover *string `json:"cover"` // Since: Bot API 8.3
|
||||
// StartTimestamp Optional. Start timestamp for the video in the message
|
||||
StartTimestamp *int `json:"start_timestamp"` // Since: Bot API 8.3
|
||||
// Width is the optional media width in pixels.
|
||||
Width *int `json:"width,omitempty"`
|
||||
// Height is the optional media height in pixels.
|
||||
Height *int `json:"height,omitempty"`
|
||||
// Duration is the optional duration of the media in seconds.
|
||||
Duration *int `json:"duration,omitempty"`
|
||||
// SupportsStreaming Optional. Pass True if the uploaded video is suitable for streaming
|
||||
SupportsStreaming *bool `json:"supports_streaming,omitempty"`
|
||||
|
||||
// Performer Optional. Performer of the audio
|
||||
Performer *string `json:"performer,omitempty"`
|
||||
Title *string `json:"title,omitempty"`
|
||||
// Title is the optional title of audio or venue media.
|
||||
Title *string `json:"title,omitempty"`
|
||||
|
||||
// Emoji Optional. Emoji associated with the sticker; only for just uploaded stickers
|
||||
Emoji *string `json:"emoji,omitempty"`
|
||||
|
||||
Latitude *float64 `json:"latitude,omitempty"`
|
||||
Longitude *float64 `json:"longitude,omitempty"`
|
||||
Address *string `json:"address,omitempty"`
|
||||
FoursquareID *string `json:"foursquare_id,omitempty"`
|
||||
FoursquareType *string `json:"foursquare_type,omitempty"`
|
||||
GooglePlaceID *string `json:"google_place_id,omitempty"`
|
||||
GooglePlaceType *string `json:"google_place_type,omitempty"`
|
||||
// Latitude Latitude of the location
|
||||
Latitude *float64 `json:"latitude,omitempty"`
|
||||
// Longitude Longitude of the location
|
||||
Longitude *float64 `json:"longitude,omitempty"`
|
||||
// Address Address of the venue
|
||||
Address *string `json:"address,omitempty"`
|
||||
// FoursquareID Optional. Foursquare identifier of the venue
|
||||
FoursquareID *string `json:"foursquare_id,omitempty"`
|
||||
// FoursquareType Optional. Foursquare type of the venue, if known. (For example,
|
||||
// “arts_entertainment/default”, “arts_entertainment/aquarium” or “food/icecream”.)
|
||||
FoursquareType *string `json:"foursquare_type,omitempty"`
|
||||
// GooglePlaceID Optional. Google Places identifier of the venue
|
||||
GooglePlaceID *string `json:"google_place_id,omitempty"`
|
||||
// GooglePlaceType Optional. Google Places type of the venue. (See supported types.)
|
||||
GooglePlaceType *string `json:"google_place_type,omitempty"`
|
||||
|
||||
// HorizontalAccuracy Optional. The radius of uncertainty for the location, measured in meters; 0-1500
|
||||
HorizontalAccuracy *float64 `json:"horizontal_accuracy,omitempty"`
|
||||
}
|
||||
|
||||
@@ -426,37 +689,65 @@ const (
|
||||
// Since: Bot API 7.6
|
||||
// See https://core.telegram.org/bots/api#inputpaidmedia
|
||||
type InputPaidMedia struct {
|
||||
Type InputPaidMediaType `json:"type"`
|
||||
Media string `json:"media"`
|
||||
// Type identifies the concrete paid-media variant.
|
||||
Type InputPaidMediaType `json:"type"`
|
||||
// Media is a file_id, HTTP URL, or attach:// reference for the paid media.
|
||||
Media string `json:"media"`
|
||||
|
||||
Cover *string `json:"cover,omitempty"` // Since: Bot API 8.3
|
||||
StartTimestamp *int64 `json:"start_timestamp,omitempty"` // Since: Bot API 8.3
|
||||
Width *int `json:"width,omitempty"`
|
||||
Height *int `json:"height,omitempty"`
|
||||
Duration *int `json:"duration,omitempty"`
|
||||
SupportsStreaming *bool `json:"supports_streaming,omitempty"`
|
||||
// Cover Optional. Cover for the video in the message. Pass a file_id to send a file that exists on the
|
||||
// Telegram servers (recommended), pass an HTTP URL for Telegram to get a file from the Internet, or pass
|
||||
// “attach://<file_attach_name>” to upload a new one using multipart/form-data under <file_attach_name>
|
||||
// name. More information on Sending Files »
|
||||
Cover *string `json:"cover,omitempty"` // Since: Bot API 8.3
|
||||
// StartTimestamp Optional. Start timestamp for the video in the message
|
||||
StartTimestamp *int64 `json:"start_timestamp,omitempty"` // Since: Bot API 8.3
|
||||
// Width Optional. Video width
|
||||
Width *int `json:"width,omitempty"`
|
||||
// Height Optional. Video height
|
||||
Height *int `json:"height,omitempty"`
|
||||
// Duration Optional. Video duration in seconds
|
||||
Duration *int `json:"duration,omitempty"`
|
||||
// SupportsStreaming Optional. Pass True if the uploaded video is suitable for streaming
|
||||
SupportsStreaming *bool `json:"supports_streaming,omitempty"`
|
||||
}
|
||||
|
||||
// PhotoSize represents one size of a photo or a file/sticker thumbnail.
|
||||
// Since: Bot API 1.0
|
||||
// See https://core.telegram.org/bots/api#photosize
|
||||
type PhotoSize struct {
|
||||
FileID string `json:"file_id"`
|
||||
// FileID Identifier for this file, which can be used to download or reuse the file
|
||||
FileID string `json:"file_id"`
|
||||
// FileUniqueID Unique identifier for this file, which is supposed to be the same over time and for
|
||||
// different bots. Can't be used to download or reuse the file.
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
Width int `json:"width"`
|
||||
Height int `json:"height"`
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
// Width Photo width
|
||||
Width int `json:"width"`
|
||||
// Height Photo height
|
||||
Height int `json:"height"`
|
||||
// FileSize Optional. File size in bytes
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
}
|
||||
|
||||
// LivePhoto represents a live photo (a photo with a short video attached).
|
||||
// Since: Bot API 10.0
|
||||
type LivePhoto struct {
|
||||
Photo []PhotoSize `json:"photo,omitempty"`
|
||||
FileID string `json:"file_id"`
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
Width int `json:"width"`
|
||||
Height int `json:"height"`
|
||||
Duration int `json:"duration"`
|
||||
MIMEType string `json:"mime_type,omitempty"`
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
// Photo Optional. Available sizes of the corresponding static photo
|
||||
Photo []PhotoSize `json:"photo,omitempty"`
|
||||
// FileID Identifier for the video file which can be used to download or reuse the file
|
||||
FileID string `json:"file_id"`
|
||||
// FileUniqueID Unique identifier for the video file which is supposed to be the same over time and for
|
||||
// different bots. Can't be used to download or reuse the file.
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
// Width Video width as defined by the sender
|
||||
Width int `json:"width"`
|
||||
// Height Video height as defined by the sender
|
||||
Height int `json:"height"`
|
||||
// Duration Duration of the video in seconds as defined by the sender
|
||||
Duration int `json:"duration"`
|
||||
// MIMEType Optional. MIME type of the file as defined by the sender
|
||||
MIMEType string `json:"mime_type,omitempty"`
|
||||
// FileSize Optional. File size in bytes. It can be bigger than 2^31 and some programming languages may have
|
||||
// difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a signed 64-bit
|
||||
// integer or double-precision float type are safe for storing this value.
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package tgapi
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestPollAnswerVoterHelpers(t *testing.T) {
|
||||
userAnswer := PollAnswer{User: User{ID: 42}}
|
||||
user, ok := userAnswer.VoterUser()
|
||||
if !ok || user.ID != 42 {
|
||||
t.Fatalf("unexpected voter user: %#v, %v", user, ok)
|
||||
}
|
||||
if chat, ok := userAnswer.VoterChatInfo(); ok || chat != nil {
|
||||
t.Fatalf("unexpected voter chat: %#v, %v", chat, ok)
|
||||
}
|
||||
|
||||
chatAnswer := PollAnswer{VoterChat: Chat{ID: -100}}
|
||||
chat, ok := chatAnswer.VoterChatInfo()
|
||||
if !ok || chat.ID != -100 {
|
||||
t.Fatalf("unexpected voter chat: %#v, %v", chat, ok)
|
||||
}
|
||||
}
|
||||
+97
-27
@@ -6,9 +6,15 @@ import "context"
|
||||
// Since: Bot API 4.7
|
||||
// See https://core.telegram.org/bots/api#setmycommands
|
||||
type SetMyCommands struct {
|
||||
Commands []BotCommand `json:"commands"`
|
||||
Scope *BotCommandScope `json:"scope,omitempty"`
|
||||
Language string `json:"language_code,omitempty"`
|
||||
// Commands Required. A JSON-serialized list of bot commands to be set as the list of the bot's commands. At
|
||||
// most 100 commands can be specified.
|
||||
Commands []BotCommand `json:"commands"`
|
||||
// Scope Optional. A JSON-serialized object, describing scope of users for which the commands are relevant.
|
||||
// Defaults to BotCommandScopeDefault.
|
||||
Scope *BotCommandScope `json:"scope,omitempty"`
|
||||
// Language Optional. A two-letter ISO 639-1 language code. If empty, commands will be applied to all users
|
||||
// from the given scope, for whose language there are no dedicated commands.
|
||||
Language string `json:"language_code,omitempty"`
|
||||
}
|
||||
|
||||
// SetMyCommands changes the list of the bot's commands.
|
||||
@@ -33,8 +39,12 @@ func (api *API) SetMyCommandsWithContext(ctx context.Context, params SetMyComman
|
||||
// Since: Bot API 5.3
|
||||
// See https://core.telegram.org/bots/api#deletemycommands
|
||||
type DeleteMyCommands struct {
|
||||
Scope *BotCommandScope `json:"scope,omitempty"`
|
||||
Language string `json:"language_code,omitempty"`
|
||||
// Scope Optional. A JSON-serialized object, describing scope of users for which the commands are relevant.
|
||||
// Defaults to BotCommandScopeDefault.
|
||||
Scope *BotCommandScope `json:"scope,omitempty"`
|
||||
// Language Optional. A two-letter ISO 639-1 language code. If empty, commands will be applied to all users
|
||||
// from the given scope, for whose language there are no dedicated commands.
|
||||
Language string `json:"language_code,omitempty"`
|
||||
}
|
||||
|
||||
// DeleteMyCommands deletes the list of the bot's commands for the given scope and user language.
|
||||
@@ -59,8 +69,10 @@ func (api *API) DeleteMyCommandsWithContext(ctx context.Context, params DeleteMy
|
||||
// Since: Bot API 4.7
|
||||
// See https://core.telegram.org/bots/api#getmycommands
|
||||
type GetMyCommands struct {
|
||||
Scope *BotCommandScope `json:"scope,omitempty"`
|
||||
Language string `json:"language_code,omitempty"`
|
||||
// Scope Optional. A JSON-serialized object, describing scope of users. Defaults to BotCommandScopeDefault.
|
||||
Scope *BotCommandScope `json:"scope,omitempty"`
|
||||
// Language Optional. A two-letter ISO 639-1 language code or an empty string
|
||||
Language string `json:"language_code,omitempty"`
|
||||
}
|
||||
|
||||
// GetMyCommands returns the current list of the bot's commands for the given scope and user language.
|
||||
@@ -84,7 +96,11 @@ func (api *API) GetMyCommandsWithContext(ctx context.Context, params GetMyComman
|
||||
// Since: Bot API 6.7
|
||||
// See https://core.telegram.org/bots/api#setmyname
|
||||
type SetMyName struct {
|
||||
Name string `json:"name"`
|
||||
// Name Optional. New bot name; 0-64 characters. Pass an empty string to remove the dedicated name for the
|
||||
// given language.
|
||||
Name string `json:"name"`
|
||||
// Language Optional. A two-letter ISO 639-1 language code. If empty, the name will be shown to all users
|
||||
// for whose language there is no dedicated name.
|
||||
Language string `json:"language_code,omitempty"`
|
||||
}
|
||||
|
||||
@@ -110,6 +126,7 @@ func (api *API) SetMyNameWithContext(ctx context.Context, params SetMyName) (boo
|
||||
// Since: Bot API 6.7
|
||||
// See https://core.telegram.org/bots/api#getmyname
|
||||
type GetMyName struct {
|
||||
// Language Optional. A two-letter ISO 639-1 language code or an empty string
|
||||
Language string `json:"language_code,omitempty"`
|
||||
}
|
||||
|
||||
@@ -134,8 +151,12 @@ func (api *API) GetMyNameWithContext(ctx context.Context, params GetMyName) (Bot
|
||||
// Since: Bot API 6.6
|
||||
// See https://core.telegram.org/bots/api#setmydescription
|
||||
type SetMyDescription struct {
|
||||
// Description Optional. New bot description; 0-512 characters. Pass an empty string to remove the dedicated
|
||||
// description for the given language.
|
||||
Description string `json:"description"`
|
||||
Language string `json:"language_code,omitempty"`
|
||||
// Language Optional. A two-letter ISO 639-1 language code. If empty, the description will be applied to all
|
||||
// users for whose language there is no dedicated description.
|
||||
Language string `json:"language_code,omitempty"`
|
||||
}
|
||||
|
||||
// SetMyDescription changes the bot's description.
|
||||
@@ -160,6 +181,7 @@ func (api *API) SetMyDescriptionWithContext(ctx context.Context, params SetMyDes
|
||||
// Since: Bot API 6.6
|
||||
// See https://core.telegram.org/bots/api#getmydescription
|
||||
type GetMyDescription struct {
|
||||
// Language Optional. A two-letter ISO 639-1 language code or an empty string
|
||||
Language string `json:"language_code,omitempty"`
|
||||
}
|
||||
|
||||
@@ -184,8 +206,12 @@ func (api *API) GetMyDescriptionWithContext(ctx context.Context, params GetMyDes
|
||||
// Since: Bot API 6.6
|
||||
// See https://core.telegram.org/bots/api#setmyshortdescription
|
||||
type SetMyShortDescription struct {
|
||||
// ShortDescription Optional. New short description for the bot; 0-120 characters. Pass an empty string to
|
||||
// remove the dedicated short description for the given language.
|
||||
ShortDescription string `json:"short_description,omitempty"`
|
||||
Language string `json:"language_code,omitempty"`
|
||||
// Language Optional. A two-letter ISO 639-1 language code. If empty, the short description will be applied
|
||||
// to all users for whose language there is no dedicated short description.
|
||||
Language string `json:"language_code,omitempty"`
|
||||
}
|
||||
|
||||
// SetMyShortDescription changes the bot's short description.
|
||||
@@ -210,6 +236,7 @@ func (api *API) SetMyShortDescriptionWithContext(ctx context.Context, params Set
|
||||
// Since: Bot API 6.6
|
||||
// See https://core.telegram.org/bots/api#getmyshortdescription
|
||||
type GetMyShortDescription struct {
|
||||
// Language Optional. A two-letter ISO 639-1 language code or an empty string
|
||||
Language string `json:"language_code,omitempty"`
|
||||
}
|
||||
|
||||
@@ -234,6 +261,7 @@ func (api *API) GetMyShortDescriptionWithContext(ctx context.Context, params Get
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#setmyprofilephoto
|
||||
type SetMyProfilePhoto struct {
|
||||
// Photo Required. The new profile photo to set
|
||||
Photo InputProfilePhoto `json:"photo"`
|
||||
}
|
||||
|
||||
@@ -277,7 +305,11 @@ func (api *API) RemoveMyProfilePhotoWithContext(ctx context.Context) (bool, erro
|
||||
// Since: Bot API 6.0
|
||||
// See https://core.telegram.org/bots/api#setchatmenubutton
|
||||
type SetChatMenuButton struct {
|
||||
ChatID int64 `json:"chat_id,omitempty"`
|
||||
// ChatID Optional. Unique identifier for the target private chat. If not specified, the bot's default menu
|
||||
// button will be changed.
|
||||
ChatID int64 `json:"chat_id,omitempty"`
|
||||
// MenuButton Optional. A JSON-serialized object for the bot's new menu button. Defaults to
|
||||
// MenuButtonDefault.
|
||||
MenuButton *MenuButton `json:"menu_button,omitempty"`
|
||||
}
|
||||
|
||||
@@ -303,6 +335,8 @@ func (api *API) SetChatMenuButtonWithContext(ctx context.Context, params SetChat
|
||||
// Since: Bot API 6.0
|
||||
// See https://core.telegram.org/bots/api#getchatmenubutton
|
||||
type GetChatMenuButton struct {
|
||||
// ChatID Optional. Unique identifier for the target private chat. If not specified, the bot's default menu
|
||||
// button will be returned.
|
||||
ChatID int64 `json:"chat_id,omitempty"`
|
||||
}
|
||||
|
||||
@@ -327,8 +361,12 @@ func (api *API) GetChatMenuButtonWithContext(ctx context.Context, params GetChat
|
||||
// Since: Bot API 6.0
|
||||
// See https://core.telegram.org/bots/api#setmydefaultadministratorrights
|
||||
type SetMyDefaultAdministratorRights struct {
|
||||
Rights *ChatAdministratorRights `json:"rights"`
|
||||
ForChannels bool `json:"for_channels"`
|
||||
// Rights Optional. A JSON-serialized object describing new default administrator rights. If not specified,
|
||||
// the default administrator rights will be cleared.
|
||||
Rights *ChatAdministratorRights `json:"rights"`
|
||||
// ForChannels Optional. Pass True to change the default administrator rights of the bot in channels.
|
||||
// Otherwise, the default administrator rights of the bot for groups and supergroups will be changed.
|
||||
ForChannels bool `json:"for_channels"`
|
||||
}
|
||||
|
||||
// SetMyDefaultAdministratorRights changes the default administrator rights for the bot.
|
||||
@@ -353,6 +391,8 @@ func (api *API) SetMyDefaultAdministratorRightsWithContext(ctx context.Context,
|
||||
// Since: Bot API 6.0
|
||||
// See https://core.telegram.org/bots/api#getmydefaultadministratorrights
|
||||
type GetMyDefaultAdministratorRights struct {
|
||||
// ForChannels Optional. Pass True to get default administrator rights of the bot in channels. Otherwise,
|
||||
// default administrator rights of the bot for groups and supergroups will be returned.
|
||||
ForChannels bool `json:"for_channels"`
|
||||
}
|
||||
|
||||
@@ -394,13 +434,27 @@ func (api *API) GetAvailableGiftsWithContext(ctx context.Context) (Gifts, error)
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#sendgift
|
||||
type SendGift struct {
|
||||
UserID int64 `json:"user_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id,omitempty"`
|
||||
GiftID string `json:"gift_id"`
|
||||
PayForUpgrade bool `json:"pay_for_upgrade"`
|
||||
Text string `json:"text"`
|
||||
TextParseMode ParseMode `json:"text_parse_mode,omitempty"`
|
||||
TextEntities []MessageEntity `json:"text_entities,omitempty"`
|
||||
// UserID Optional. Required if chat_id is not specified. Unique identifier of the target user who will
|
||||
// receive the gift.
|
||||
UserID int64 `json:"user_id,omitempty"`
|
||||
// ChatID Optional. Required if user_id is not specified. Unique identifier for the chat or username of the
|
||||
// channel (in the format @username) that will receive the gift.
|
||||
ChatID int64 `json:"chat_id,omitempty"`
|
||||
// GiftID Required. Identifier of the gift; limited gifts can't be sent to channel chats
|
||||
GiftID string `json:"gift_id"`
|
||||
// PayForUpgrade Optional. Pass True to pay for the gift upgrade from the bot's balance, thereby making the
|
||||
// upgrade free for the receiver
|
||||
PayForUpgrade bool `json:"pay_for_upgrade"`
|
||||
// Text Optional. Text that will be shown along with the gift; 0-128 characters
|
||||
Text string `json:"text"`
|
||||
// TextParseMode Optional. Mode for parsing entities in the text. See formatting options for more details.
|
||||
// Entities other than “bold”, “italic”, “underline”, “strikethrough”, “spoiler”,
|
||||
// “custom_emoji”, and “date_time” are ignored.
|
||||
TextParseMode ParseMode `json:"text_parse_mode,omitempty"`
|
||||
// TextEntities Optional. A JSON-serialized list of special entities that appear in the gift text. It can be
|
||||
// specified instead of text_parse_mode. Entities other than “bold”, “italic”, “underline”,
|
||||
// “strikethrough”, “spoiler”, “custom_emoji”, and “date_time” are ignored.
|
||||
TextEntities []MessageEntity `json:"text_entities,omitempty"`
|
||||
}
|
||||
|
||||
// SendGift sends a gift to the given user or chat.
|
||||
@@ -425,12 +479,25 @@ func (api *API) SendGiftWithContext(ctx context.Context, params SendGift) (bool,
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#giftpremiumsubscription
|
||||
type GiftPremiumSubscription struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
MonthCount int `json:"month_count"`
|
||||
StarCount int `json:"star_count"`
|
||||
Text string `json:"text,omitempty"`
|
||||
TextParseMode ParseMode `json:"text_parse_mode,omitempty"`
|
||||
TextEntities []MessageEntity `json:"text_entities,omitempty"`
|
||||
// UserID Required. Unique identifier of the target user who will receive a Telegram Premium subscription
|
||||
UserID int64 `json:"user_id"`
|
||||
// MonthCount Required. Number of months the Telegram Premium subscription will be active for the user; must
|
||||
// be one of 3, 6, or 12
|
||||
MonthCount int `json:"month_count"`
|
||||
// StarCount Required. Number of Telegram Stars to pay for the Telegram Premium subscription; must be 1000
|
||||
// for 3 months, 1500 for 6 months, and 2500 for 12 months
|
||||
StarCount int `json:"star_count"`
|
||||
// Text Optional. Text that will be shown along with the service message about the subscription; 0-128
|
||||
// characters
|
||||
Text string `json:"text,omitempty"`
|
||||
// TextParseMode Optional. Mode for parsing entities in the text. See formatting options for more details.
|
||||
// Entities other than “bold”, “italic”, “underline”, “strikethrough”, “spoiler”,
|
||||
// “custom_emoji”, and “date_time” are ignored.
|
||||
TextParseMode ParseMode `json:"text_parse_mode,omitempty"`
|
||||
// TextEntities Optional. A JSON-serialized list of special entities that appear in the gift text. It can be
|
||||
// specified instead of text_parse_mode. Entities other than “bold”, “italic”, “underline”,
|
||||
// “strikethrough”, “spoiler”, “custom_emoji”, and “date_time” are ignored.
|
||||
TextEntities []MessageEntity `json:"text_entities,omitempty"`
|
||||
}
|
||||
|
||||
// GiftPremiumSubscription gifts a Telegram Premium subscription to the user.
|
||||
@@ -455,6 +522,7 @@ func (api *API) GiftPremiumSubscriptionWithContext(ctx context.Context, params G
|
||||
// Since: Bot API 10.0
|
||||
// See https://core.telegram.org/bots/api#getmanagedbotaccesssettings
|
||||
type GetManagedBotAccessSettings struct {
|
||||
// BotUserID identifies the managed bot.
|
||||
BotUserID int64 `json:"bot_user_id"`
|
||||
}
|
||||
|
||||
@@ -479,7 +547,9 @@ func (api *API) GetManagedBotAccessSettingsWithContext(ctx context.Context, para
|
||||
// Since: Bot API 10.0
|
||||
// See https://core.telegram.org/bots/api#setmanagedbotaccesssettings
|
||||
type SetManagedBotAccessSettings struct {
|
||||
BotUserID int64 `json:"bot_user_id"`
|
||||
// BotUserID identifies the managed bot.
|
||||
BotUserID int64 `json:"bot_user_id"`
|
||||
// AccessSettings contains the access settings to apply to the managed bot.
|
||||
AccessSettings BotAccessSettings `json:"access_settings"`
|
||||
}
|
||||
|
||||
|
||||
+32
-6
@@ -4,7 +4,10 @@ package tgapi
|
||||
// Since: Bot API 4.7
|
||||
// See https://core.telegram.org/bots/api#botcommand
|
||||
type BotCommand struct {
|
||||
Command string `json:"command"`
|
||||
// Command Text of the command; 1-32 characters. Can contain only lowercase English letters, digits and
|
||||
// underscores.
|
||||
Command string `json:"command"`
|
||||
// Description Description of the command; 1-256 characters
|
||||
Description string `json:"description"`
|
||||
// IsEphemeral marks the command as visible only in ephemeral command contexts.
|
||||
IsEphemeral bool `json:"is_ephemeral,omitempty"` // Since: Bot API 10.2
|
||||
@@ -34,26 +37,33 @@ const (
|
||||
// Since: Bot API 5.3
|
||||
// See https://core.telegram.org/bots/api#botcommandscope
|
||||
type BotCommandScope struct {
|
||||
Type BotCommandScopeType `json:"type"`
|
||||
ChatID *int64 `json:"chat_id,omitempty"`
|
||||
UserID *int64 `json:"user_id,omitempty"`
|
||||
// Type identifies the concrete command-scope variant.
|
||||
Type BotCommandScopeType `json:"type"`
|
||||
// ChatID Unique identifier for the target chat or username of the target supergroup in the format
|
||||
// @username. Channel direct messages chats and channel chats aren't supported.
|
||||
ChatID *int64 `json:"chat_id,omitempty"`
|
||||
// UserID Unique identifier of the target user
|
||||
UserID *int64 `json:"user_id,omitempty"`
|
||||
}
|
||||
|
||||
// BotName represents the bot's name.
|
||||
// Since: Bot API 6.7
|
||||
type BotName struct {
|
||||
// Name The bot's name
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
// BotDescription represents the bot's description.
|
||||
// Since: Bot API 6.6
|
||||
type BotDescription struct {
|
||||
// Description The bot's description
|
||||
Description string `json:"description"`
|
||||
}
|
||||
|
||||
// BotShortDescription represents the bot's short description.
|
||||
// Since: Bot API 6.6
|
||||
type BotShortDescription struct {
|
||||
// ShortDescription The bot's short description
|
||||
ShortDescription string `json:"short_description"`
|
||||
}
|
||||
|
||||
@@ -71,13 +81,22 @@ const (
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#inputprofilephoto
|
||||
type InputProfilePhoto struct {
|
||||
// Type identifies the static-photo or animated-photo variant.
|
||||
Type InputProfilePhotoType `json:"type"`
|
||||
|
||||
// Photo The static profile photo. Profile photos can't be reused and can only be uploaded as a new file, so
|
||||
// you can pass “attach://<file_attach_name>” if the photo was uploaded using multipart/form-data under
|
||||
// <file_attach_name>. More information on Sending Files »
|
||||
// Static fields (for static photos)
|
||||
Photo *string `json:"photo,omitempty"`
|
||||
|
||||
// Animation The animated profile photo. Profile photos can't be reused and can only be uploaded as a new
|
||||
// file, so you can pass “attach://<file_attach_name>” if the photo was uploaded using
|
||||
// multipart/form-data under <file_attach_name>. More information on Sending Files »
|
||||
// Animated fields (for animated profile videos)
|
||||
Animation *string `json:"animation,omitempty"`
|
||||
Animation *string `json:"animation,omitempty"`
|
||||
// MainFrameTimestamp Optional. Timestamp in seconds of the frame that will be used as the static profile
|
||||
// photo. Defaults to 0.0.
|
||||
MainFrameTimestamp *float64 `json:"main_frame_timestamp,omitempty"`
|
||||
}
|
||||
|
||||
@@ -97,10 +116,16 @@ const (
|
||||
// Since: Bot API 6.0
|
||||
// See https://core.telegram.org/bots/api#menubutton
|
||||
type MenuButton struct {
|
||||
// Type identifies the commands, web_app, or default menu-button variant.
|
||||
Type MenuButtonType `json:"type"`
|
||||
|
||||
// Text Text on the button
|
||||
// WebApp fields (for web_app button)
|
||||
Text *string `json:"text"`
|
||||
Text *string `json:"text"`
|
||||
// WebApp Description of the Web App that will be launched when the user presses the button. The Web App
|
||||
// will be able to send an arbitrary message on behalf of the user using the method answerWebAppQuery.
|
||||
// Alternatively, a t.me link to a Web App of the bot can be specified in the object instead of the Web
|
||||
// App's URL, in which case the Web App will be opened as if the user pressed the link.
|
||||
WebApp *WebAppInfo `json:"web_app"`
|
||||
}
|
||||
|
||||
@@ -108,5 +133,6 @@ type MenuButton struct {
|
||||
// Since: Bot API 10.0
|
||||
// See https://core.telegram.org/bots/api#botaccesssettings
|
||||
type BotAccessSettings struct {
|
||||
// AllowAllPrivateChats reports whether the managed bot may access all private chats of its owner.
|
||||
AllowAllPrivateChats bool `json:"allow_all_private_chats"`
|
||||
}
|
||||
|
||||
+158
-53
@@ -6,7 +6,10 @@ import "context"
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#verifyuser
|
||||
type VerifyUser struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
// CustomDescription Optional. Custom description for the verification; 0-70 characters. Must be empty if
|
||||
// the organization isn't allowed to provide a custom verification description.
|
||||
CustomDescription string `json:"custom_description,omitempty"`
|
||||
}
|
||||
|
||||
@@ -32,7 +35,11 @@ func (api *API) VerifyUserWithContext(ctx context.Context, params VerifyUser) (b
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#verifychat
|
||||
type VerifyChat struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username. Channel direct messages chats can't be verified.
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// CustomDescription Optional. Custom description for the verification; 0-70 characters. Must be empty if
|
||||
// the organization isn't allowed to provide a custom verification description.
|
||||
CustomDescription string `json:"custom_description,omitempty"`
|
||||
}
|
||||
|
||||
@@ -58,6 +65,7 @@ func (api *API) VerifyChatWithContext(ctx context.Context, params VerifyChat) (b
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#removeuserverification
|
||||
type RemoveUserVerification struct {
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
}
|
||||
|
||||
@@ -83,6 +91,8 @@ func (api *API) RemoveUserVerificationWithContext(ctx context.Context, params Re
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#removechatverification
|
||||
type RemoveChatVerification struct {
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot or channel in the
|
||||
// format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
}
|
||||
|
||||
@@ -108,9 +118,14 @@ func (api *API) RemoveChatVerificationWithContext(ctx context.Context, params Re
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#readbusinessmessage
|
||||
type ReadBusinessMessage struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection on behalf of which to read
|
||||
// the message
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageID int `json:"message_id"`
|
||||
// ChatID Required. Unique identifier of the chat in which the message was received. The chat must have been
|
||||
// active in the last 24 hours.
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageID Required. Unique identifier of the message to mark as read
|
||||
MessageID int `json:"message_id"`
|
||||
}
|
||||
|
||||
// ReadBusinessMessage marks a business message as read.
|
||||
@@ -135,6 +150,7 @@ func (api *API) ReadBusinessMessageWithContext(ctx context.Context, params ReadB
|
||||
// Since: Bot API 7.2
|
||||
// See https://core.telegram.org/bots/api#getbusinessconnection
|
||||
type GetBusinessConnection struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
}
|
||||
|
||||
@@ -159,8 +175,12 @@ func (api *API) GetBusinessConnectionWithContext(ctx context.Context, params Get
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#deletebusinessmessages
|
||||
type DeleteBusinessMessages struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection on behalf of which to delete
|
||||
// the messages
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
MessageIDs []int `json:"message_ids"`
|
||||
// MessageIDs Required. A JSON-serialized list of 1-100 identifiers of messages to delete. All messages must
|
||||
// be from the same chat. See deleteMessage for limitations on which messages can be deleted.
|
||||
MessageIDs []int `json:"message_ids"`
|
||||
}
|
||||
|
||||
// DeleteBusinessMessages deletes business messages.
|
||||
@@ -185,9 +205,12 @@ func (api *API) DeleteBusinessMessagesWithContext(ctx context.Context, params De
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#setbusinessaccountname
|
||||
type SetBusinessAccountName struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
FirstName string `json:"first_name"`
|
||||
LastName string `json:"last_name,omitempty"`
|
||||
// FirstName Required. The new value of the first name for the business account; 1-64 characters
|
||||
FirstName string `json:"first_name"`
|
||||
// LastName Optional. The new value of the last name for the business account; 0-64 characters
|
||||
LastName string `json:"last_name,omitempty"`
|
||||
}
|
||||
|
||||
// SetBusinessAccountName sets the first and last name of a business account.
|
||||
@@ -212,8 +235,10 @@ func (api *API) SetBusinessAccountNameWithContext(ctx context.Context, params Se
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#setbusinessaccountusername
|
||||
type SetBusinessAccountUsername struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
Username string `json:"username,omitempty"`
|
||||
// Username Optional. The new value of the username for the business account; 0-32 characters
|
||||
Username string `json:"username,omitempty"`
|
||||
}
|
||||
|
||||
// SetBusinessAccountUsername sets the username of a business account.
|
||||
@@ -238,8 +263,10 @@ func (api *API) SetBusinessAccountUsernameWithContext(ctx context.Context, param
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#setbusinessaccountbio
|
||||
type SetBusinessAccountBio struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
Bio string `json:"bio,omitempty"`
|
||||
// Bio Optional. The new value of the bio for the business account; 0-140 characters
|
||||
Bio string `json:"bio,omitempty"`
|
||||
}
|
||||
|
||||
// SetBusinessAccountBio sets the bio of a business account.
|
||||
@@ -264,9 +291,13 @@ func (api *API) SetBusinessAccountBioWithContext(ctx context.Context, params Set
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#setbusinessaccountprofilephoto
|
||||
type SetBusinessAccountProfilePhoto struct {
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
Photo InputProfilePhoto `json:"photo,omitempty"`
|
||||
IsPublic bool `json:"is_public,omitempty"`
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
// Photo Required. The new profile photo to set
|
||||
Photo InputProfilePhoto `json:"photo,omitempty"`
|
||||
// IsPublic Optional. Pass True to set the public photo, which will be visible even if the main photo is
|
||||
// hidden by the business account's privacy settings. An account can have only one public photo.
|
||||
IsPublic bool `json:"is_public,omitempty"`
|
||||
}
|
||||
|
||||
// SetBusinessAccountProfilePhoto sets the profile photo of a business account.
|
||||
@@ -291,8 +322,12 @@ func (api *API) SetBusinessAccountProfilePhotoWithContext(ctx context.Context, p
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#removebusinessaccountprofilephoto
|
||||
type RemoveBusinessAccountProfilePhoto struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
IsPublic bool `json:"is_public,omitempty"`
|
||||
// IsPublic Optional. Pass True to remove the public photo, which is visible even if the main photo is
|
||||
// hidden by the business account's privacy settings. After the main photo is removed, the previous profile
|
||||
// photo (if present) becomes the main photo.
|
||||
IsPublic bool `json:"is_public,omitempty"`
|
||||
}
|
||||
|
||||
// RemoveBusinessAccountProfilePhoto removes the profile photo of a business account.
|
||||
@@ -317,9 +352,13 @@ func (api *API) RemoveBusinessAccountProfilePhotoWithContext(ctx context.Context
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#setbusinessaccountgiftsettings
|
||||
type SetBusinessAccountGiftSettings struct {
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
ShowGiftButton bool `json:"show_gift_button"`
|
||||
AcceptedGiftTypes AcceptedGiftTypes `json:"accepted_gift_types"`
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
// ShowGiftButton Required. Pass True if a button for sending a gift to the user or by the business account
|
||||
// must always be shown in the input field
|
||||
ShowGiftButton bool `json:"show_gift_button"`
|
||||
// AcceptedGiftTypes Required. Types of gifts accepted by the business account
|
||||
AcceptedGiftTypes AcceptedGiftTypes `json:"accepted_gift_types"`
|
||||
}
|
||||
|
||||
// SetBusinessAccountGiftSettings sets gift settings for a business account.
|
||||
@@ -344,6 +383,7 @@ func (api *API) SetBusinessAccountGiftSettingsWithContext(ctx context.Context, p
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#getbusinessaccountstarbalance
|
||||
type GetBusinessAccountStarBalance struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
}
|
||||
|
||||
@@ -368,8 +408,10 @@ func (api *API) GetBusinessAccountStarBalanceWithContext(ctx context.Context, pa
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#transferbusinessaccountstars
|
||||
type TransferBusinessAccountStars struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
StarCount int `json:"star_count"`
|
||||
// StarCount Required. Number of Telegram Stars to transfer; 1-10000
|
||||
StarCount int `json:"star_count"`
|
||||
}
|
||||
|
||||
// TransferBusinessAccountStars transfers stars from a business account.
|
||||
@@ -394,17 +436,33 @@ func (api *API) TransferBusinessAccountStarsWithContext(ctx context.Context, par
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#getbusinessaccountgifts
|
||||
type GetBusinessAccountGifts struct {
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
ExcludeUnsaved bool `json:"exclude_unsaved,omitempty"`
|
||||
ExcludeSaved bool `json:"exclude_saved,omitempty"`
|
||||
ExcludeUnlimited bool `json:"exclude_unlimited,omitempty"`
|
||||
ExcludeLimitedUpgradable bool `json:"exclude_limited_upgradable,omitempty"`
|
||||
ExcludeLimitedNonUpgradable bool `json:"exclude_limited_non_upgradable,omitempty"`
|
||||
ExcludeUnique bool `json:"exclude_unique,omitempty"`
|
||||
ExcludeFromBlockchain bool `json:"exclude_from_blockchain,omitempty"`
|
||||
SortByPrice bool `json:"sort_by_price,omitempty"`
|
||||
Offset string `json:"offset,omitempty"`
|
||||
Limit int `json:"limit,omitempty"`
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
// ExcludeUnsaved Optional. Pass True to exclude gifts that aren't saved to the account's profile page
|
||||
ExcludeUnsaved bool `json:"exclude_unsaved,omitempty"`
|
||||
// ExcludeSaved Optional. Pass True to exclude gifts that are saved to the account's profile page
|
||||
ExcludeSaved bool `json:"exclude_saved,omitempty"`
|
||||
// ExcludeUnlimited Optional. Pass True to exclude gifts that can be purchased an unlimited number of times
|
||||
ExcludeUnlimited bool `json:"exclude_unlimited,omitempty"`
|
||||
// ExcludeLimitedUpgradable Optional. Pass True to exclude gifts that can be purchased a limited number of
|
||||
// times and can be upgraded to unique
|
||||
ExcludeLimitedUpgradable bool `json:"exclude_limited_upgradable,omitempty"`
|
||||
// ExcludeLimitedNonUpgradable Optional. Pass True to exclude gifts that can be purchased a limited number
|
||||
// of times and can't be upgraded to unique
|
||||
ExcludeLimitedNonUpgradable bool `json:"exclude_limited_non_upgradable,omitempty"`
|
||||
// ExcludeUnique Optional. Pass True to exclude unique gifts
|
||||
ExcludeUnique bool `json:"exclude_unique,omitempty"`
|
||||
// ExcludeFromBlockchain Optional. Pass True to exclude gifts that were assigned from the TON blockchain and
|
||||
// can't be resold or transferred in Telegram
|
||||
ExcludeFromBlockchain bool `json:"exclude_from_blockchain,omitempty"`
|
||||
// SortByPrice Optional. Pass True to sort results by gift price instead of send date. Sorting is applied
|
||||
// before pagination.
|
||||
SortByPrice bool `json:"sort_by_price,omitempty"`
|
||||
// Offset Optional. Offset of the first entry to return as received from the previous request; use empty
|
||||
// string to get the first chunk of results
|
||||
Offset string `json:"offset,omitempty"`
|
||||
// Limit Optional. The maximum number of gifts to be returned; 1-100. Defaults to 100.
|
||||
Limit int `json:"limit,omitempty"`
|
||||
}
|
||||
|
||||
// GetBusinessAccountGifts returns gifts owned by a business account.
|
||||
@@ -428,8 +486,10 @@ func (api *API) GetBusinessAccountGiftsWithContext(ctx context.Context, params G
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#convertgifttostars
|
||||
type ConvertGiftToStars struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
OwnedGiftID string `json:"owned_gift_id"`
|
||||
// OwnedGiftID Required. Unique identifier of the regular gift that should be converted to Telegram Stars
|
||||
OwnedGiftID string `json:"owned_gift_id"`
|
||||
}
|
||||
|
||||
// ConvertGiftToStars converts a gift to Telegram Stars.
|
||||
@@ -454,10 +514,17 @@ func (api *API) ConvertGiftToStarsWithContext(ctx context.Context, params Conver
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#upgradegift
|
||||
type UpgradeGift struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
OwnedGiftID string `json:"owned_gift_id"`
|
||||
KeepOriginalDetails bool `json:"keep_original_details,omitempty"`
|
||||
StarCount int `json:"star_count,omitempty"`
|
||||
// OwnedGiftID Required. Unique identifier of the regular gift that should be upgraded to a unique one
|
||||
OwnedGiftID string `json:"owned_gift_id"`
|
||||
// KeepOriginalDetails Optional. Pass True to keep the original gift text, sender and receiver in the
|
||||
// upgraded gift
|
||||
KeepOriginalDetails bool `json:"keep_original_details,omitempty"`
|
||||
// StarCount Optional. The amount of Telegram Stars that will be paid for the upgrade from the business
|
||||
// account balance. If gift.prepaid_upgrade_star_count > 0, then pass 0, otherwise, the can_transfer_stars
|
||||
// business bot right is required and gift.upgrade_star_count must be passed.
|
||||
StarCount int `json:"star_count,omitempty"`
|
||||
}
|
||||
|
||||
// UpgradeGift upgrades a gift.
|
||||
@@ -482,10 +549,16 @@ func (api *API) UpgradeGiftWithContext(ctx context.Context, params UpgradeGift)
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#transfergift
|
||||
type TransferGift struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
OwnedGiftID string `json:"owned_gift_id"`
|
||||
NewOwnerChatID int64 `json:"new_owner_chat_id"`
|
||||
StarCount int `json:"star_count,omitempty"`
|
||||
// OwnedGiftID Required. Unique identifier of the regular gift that should be transferred
|
||||
OwnedGiftID string `json:"owned_gift_id"`
|
||||
// NewOwnerChatID Required. Unique identifier of the chat which will own the gift. The chat must be active
|
||||
// in the last 24 hours.
|
||||
NewOwnerChatID int64 `json:"new_owner_chat_id"`
|
||||
// StarCount Optional. The amount of Telegram Stars that will be paid for the transfer from the business
|
||||
// account balance. If positive, then the can_transfer_stars business bot right is required.
|
||||
StarCount int `json:"star_count,omitempty"`
|
||||
}
|
||||
|
||||
// TransferGift transfers a gift to another chat.
|
||||
@@ -510,16 +583,29 @@ func (api *API) TransferGiftWithContext(ctx context.Context, params TransferGift
|
||||
// Since: Bot API 7.2
|
||||
// See https://core.telegram.org/bots/api#poststory
|
||||
type PostStory struct {
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
Content InputStoryContent `json:"content"`
|
||||
ActivePeriod int `json:"active_period"`
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
// Content Required. Content of the story
|
||||
Content InputStoryContent `json:"content"`
|
||||
// ActivePeriod Required. Period after which the story is moved to the archive, in seconds; must be one of 6
|
||||
// * 3600, 12 * 3600, 86400, or 2 * 86400
|
||||
ActivePeriod int `json:"active_period"`
|
||||
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// Caption Optional. Caption of the story, 0-2048 characters after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the story caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
Areas []StoryArea `json:"areas"`
|
||||
// Areas Optional. A JSON-serialized list of clickable areas to be shown on the story
|
||||
Areas []StoryArea `json:"areas"`
|
||||
|
||||
// PostToChatPage Optional. Pass True to keep the story accessible after it expires
|
||||
PostToChatPage bool `json:"post_to_chat_page,omitempty"`
|
||||
// ProtectContent Optional. Pass True if the content of the story must be protected from forwarding and
|
||||
// screenshotting
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
}
|
||||
|
||||
@@ -544,12 +630,20 @@ func (api *API) PostStoryWithContext(ctx context.Context, params PostStory) (Sto
|
||||
// Since: Bot API 7.2
|
||||
// See https://core.telegram.org/bots/api#repoststory
|
||||
type RepostStory struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
FromChatID int64 `json:"from_chat_id"`
|
||||
FromStoryID int `json:"from_story_id"`
|
||||
ActivePeriod int `json:"active_period"`
|
||||
PostToChatPage bool `json:"post_to_chat_page,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// FromChatID Required. Unique identifier of the chat which posted the story that should be reposted
|
||||
FromChatID int64 `json:"from_chat_id"`
|
||||
// FromStoryID Required. Unique identifier of the story that should be reposted
|
||||
FromStoryID int `json:"from_story_id"`
|
||||
// ActivePeriod Required. Period after which the story is moved to the archive, in seconds; must be one of 6
|
||||
// * 3600, 12 * 3600, 86400, or 2 * 86400
|
||||
ActivePeriod int `json:"active_period"`
|
||||
// PostToChatPage Optional. Pass True to keep the story accessible after it expires
|
||||
PostToChatPage bool `json:"post_to_chat_page,omitempty"`
|
||||
// ProtectContent Optional. Pass True if the content of the story must be protected from forwarding and
|
||||
// screenshotting
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
}
|
||||
|
||||
// RepostStory reposts a story from another chat.
|
||||
@@ -574,14 +668,23 @@ func (api *API) RepostStoryWithContext(ctx context.Context, params RepostStory)
|
||||
// Since: Bot API 7.2
|
||||
// See https://core.telegram.org/bots/api#editstory
|
||||
type EditStory struct {
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
StoryID int `json:"story_id"`
|
||||
Content InputStoryContent `json:"content"`
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
// StoryID Required. Unique identifier of the story to edit
|
||||
StoryID int `json:"story_id"`
|
||||
// Content Required. Content of the story
|
||||
Content InputStoryContent `json:"content"`
|
||||
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// Caption Optional. Caption of the story, 0-2048 characters after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the story caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
Areas []StoryArea `json:"areas,omitempty"`
|
||||
// Areas Optional. A JSON-serialized list of clickable areas to be shown on the story
|
||||
Areas []StoryArea `json:"areas,omitempty"`
|
||||
}
|
||||
|
||||
// EditStory edits an existing story.
|
||||
@@ -606,8 +709,10 @@ func (api *API) EditStoryWithContext(ctx context.Context, params EditStory) (Sto
|
||||
// Since: Bot API 7.2
|
||||
// See https://core.telegram.org/bots/api#deletestory
|
||||
type DeleteStory struct {
|
||||
// BusinessConnectionID Required. Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
StoryID int `json:"story_id"`
|
||||
// StoryID Required. Unique identifier of the story to delete
|
||||
StoryID int `json:"story_id"`
|
||||
}
|
||||
|
||||
// DeleteStory deletes a story.
|
||||
|
||||
+112
-42
@@ -4,8 +4,11 @@ package tgapi
|
||||
// Since: Bot API 7.2
|
||||
// See https://core.telegram.org/bots/api#businessintro
|
||||
type BusinessIntro struct {
|
||||
Title string `json:"title,omitempty"`
|
||||
Message string `json:"message,omitempty"`
|
||||
// Title Optional. Title text of the business intro
|
||||
Title string `json:"title,omitempty"`
|
||||
// Message Optional. Message text of the business intro
|
||||
Message string `json:"message,omitempty"`
|
||||
// Sticker Optional. Sticker of the business intro
|
||||
Sticker *Sticker `json:"sticker,omitempty"`
|
||||
}
|
||||
|
||||
@@ -13,7 +16,9 @@ type BusinessIntro struct {
|
||||
// Since: Bot API 7.2
|
||||
// See https://core.telegram.org/bots/api#businesslocation
|
||||
type BusinessLocation struct {
|
||||
Address string `json:"address"`
|
||||
// Address Address of the business
|
||||
Address string `json:"address"`
|
||||
// Location Optional. Location of the business
|
||||
Location *Location `json:"location,omitempty"`
|
||||
}
|
||||
|
||||
@@ -21,7 +26,11 @@ type BusinessLocation struct {
|
||||
// Since: Bot API 7.2
|
||||
// See https://core.telegram.org/bots/api#businessopeninghoursinterval
|
||||
type BusinessOpeningHoursInterval struct {
|
||||
// OpeningMinute The minute's sequence number in a week, starting on Monday, marking the start of the time
|
||||
// interval during which the business is open; 0 - 7 * 24 * 60
|
||||
OpeningMinute int `json:"opening_minute"`
|
||||
// ClosingMinute The minute's sequence number in a week, starting on Monday, marking the end of the time
|
||||
// interval during which the business is open; 0 - 8 * 24 * 60
|
||||
ClosingMinute int `json:"closing_minute"`
|
||||
}
|
||||
|
||||
@@ -29,7 +38,9 @@ type BusinessOpeningHoursInterval struct {
|
||||
// Since: Bot API 7.2
|
||||
// See https://core.telegram.org/bots/api#businessopeninghours
|
||||
type BusinessOpeningHours struct {
|
||||
TimeZoneName string `json:"time_zone_name"`
|
||||
// TimeZoneName Unique name of the time zone for which the opening hours are defined
|
||||
TimeZoneName string `json:"time_zone_name"`
|
||||
// OpeningHours List of time intervals describing business opening hours
|
||||
OpeningHours []BusinessOpeningHoursInterval `json:"opening_hours"`
|
||||
}
|
||||
|
||||
@@ -38,41 +49,75 @@ type BusinessOpeningHours struct {
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#businessbotrights
|
||||
type BusinessBotRights struct {
|
||||
CanReply *bool `json:"can_reply,omitempty"`
|
||||
CanReadMessages *bool `json:"can_read_messages,omitempty"`
|
||||
CanDeleteSentMessages *bool `json:"can_delete_sent_messages,omitempty"`
|
||||
CanDeleteAllMessages *bool `json:"can_delete_all_messages,omitempty"`
|
||||
CanEditName *bool `json:"can_edit_name,omitempty"`
|
||||
CanEditBio *bool `json:"can_edit_bio,omitempty"`
|
||||
CanEditProfilePhoto *bool `json:"can_edit_profile_photo,omitempty"`
|
||||
CanEditUsername *bool `json:"can_edit_username,omitempty"`
|
||||
CanChangeGiftSettings *bool `json:"can_change_gift_settings,omitempty"`
|
||||
CanViewGiftsAndStars *bool `json:"can_view_gifts_and_stars,omitempty"`
|
||||
CanConvertGiftsToStars *bool `json:"can_convert_gifts_to_stars,omitempty"`
|
||||
// CanReply Optional. True, if the bot can send and edit messages in the private chats that had incoming
|
||||
// messages in the last 24 hours
|
||||
CanReply *bool `json:"can_reply,omitempty"`
|
||||
// CanReadMessages Optional. True, if the bot can mark incoming private messages as read
|
||||
CanReadMessages *bool `json:"can_read_messages,omitempty"`
|
||||
// CanDeleteSentMessages Optional. True, if the bot can delete messages sent by the bot
|
||||
CanDeleteSentMessages *bool `json:"can_delete_sent_messages,omitempty"`
|
||||
// CanDeleteAllMessages Optional. True, if the bot can delete all private messages in managed chats
|
||||
CanDeleteAllMessages *bool `json:"can_delete_all_messages,omitempty"`
|
||||
// CanEditName Optional. True, if the bot can edit the first and last name of the business account
|
||||
CanEditName *bool `json:"can_edit_name,omitempty"`
|
||||
// CanEditBio Optional. True, if the bot can edit the bio of the business account
|
||||
CanEditBio *bool `json:"can_edit_bio,omitempty"`
|
||||
// CanEditProfilePhoto Optional. True, if the bot can edit the profile photo of the business account
|
||||
CanEditProfilePhoto *bool `json:"can_edit_profile_photo,omitempty"`
|
||||
// CanEditUsername Optional. True, if the bot can edit the username of the business account
|
||||
CanEditUsername *bool `json:"can_edit_username,omitempty"`
|
||||
// CanChangeGiftSettings Optional. True, if the bot can change the privacy settings pertaining to gifts for
|
||||
// the business account
|
||||
CanChangeGiftSettings *bool `json:"can_change_gift_settings,omitempty"`
|
||||
// CanViewGiftsAndStars Optional. True, if the bot can view gifts and the amount of Telegram Stars owned by
|
||||
// the business account
|
||||
CanViewGiftsAndStars *bool `json:"can_view_gifts_and_stars,omitempty"`
|
||||
// CanConvertGiftsToStars Optional. True, if the bot can convert regular gifts owned by the business account
|
||||
// to Telegram Stars
|
||||
CanConvertGiftsToStars *bool `json:"can_convert_gifts_to_stars,omitempty"`
|
||||
// CanTransferAndUpgradeGifts Optional. True, if the bot can transfer and upgrade gifts owned by the
|
||||
// business account
|
||||
CanTransferAndUpgradeGifts *bool `json:"can_transfer_and_upgrade_gifts,omitempty"`
|
||||
CanTransferStars *bool `json:"can_transfer_stars,omitempty"`
|
||||
CanManageStories *bool `json:"can_manage_stories,omitempty"`
|
||||
// CanTransferStars Optional. True, if the bot can transfer Telegram Stars received by the business account
|
||||
// to its own account, or use them to upgrade and transfer gifts
|
||||
CanTransferStars *bool `json:"can_transfer_stars,omitempty"`
|
||||
// CanManageStories Optional. True, if the bot can post, edit and delete stories on behalf of the business
|
||||
// account
|
||||
CanManageStories *bool `json:"can_manage_stories,omitempty"`
|
||||
}
|
||||
|
||||
// BusinessConnection contains information about a business connection.
|
||||
// Since: Bot API 7.2
|
||||
// See https://core.telegram.org/bots/api#businessconnection
|
||||
type BusinessConnection struct {
|
||||
ID string `json:"id"`
|
||||
User User `json:"user"`
|
||||
UserChatID int64 `json:"user_chat_id"`
|
||||
Date int `json:"date"`
|
||||
Rights *BusinessBotRights `json:"rights,omitempty"`
|
||||
IsEnabled bool `json:"is_enabled"`
|
||||
// ID Unique identifier of the business connection
|
||||
ID string `json:"id"`
|
||||
// User Business account user that created the business connection
|
||||
User User `json:"user"`
|
||||
// UserChatID Identifier of a private chat with the user who created the business connection. This number
|
||||
// may have more than 32 significant bits and some programming languages may have difficulty/silent defects
|
||||
// in interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float
|
||||
// type are safe for storing this identifier.
|
||||
UserChatID int64 `json:"user_chat_id"`
|
||||
// Date Date the connection was established in Unix time
|
||||
Date int `json:"date"`
|
||||
// Rights Optional. Rights of the business bot
|
||||
Rights *BusinessBotRights `json:"rights,omitempty"`
|
||||
// IsEnabled True, if the connection is active
|
||||
IsEnabled bool `json:"is_enabled"`
|
||||
}
|
||||
|
||||
// BusinessMessagesDeleted is received when messages are deleted from a connected business account.
|
||||
// Since: Bot API 7.2
|
||||
// See https://core.telegram.org/bots/api#businessmessagesdeleted
|
||||
type BusinessMessagesDeleted struct {
|
||||
// BusinessConnectionID Unique identifier of the business connection
|
||||
BusinessConnectionID string `json:"business_connection_id"`
|
||||
Chat Chat `json:"chat"`
|
||||
MessageIDs []int `json:"message_ids"`
|
||||
// Chat Information about a chat in the business account. The bot may not have access to the chat or the
|
||||
// corresponding user.
|
||||
Chat Chat `json:"chat"`
|
||||
// MessageIDs The list of identifiers of deleted messages in the chat of the business account
|
||||
MessageIDs []int `json:"message_ids"`
|
||||
}
|
||||
|
||||
// InputStoryContentType indicates the type of input story content.
|
||||
@@ -89,27 +134,38 @@ const (
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#inputstorycontent
|
||||
type InputStoryContent struct {
|
||||
// Type identifies the photo or video story-content variant.
|
||||
Type InputStoryContentType `json:"type"`
|
||||
|
||||
// Photo fields
|
||||
Photo *string `json:"photo,omitempty"`
|
||||
|
||||
// Video fields
|
||||
Video *string `json:"video,omitempty"`
|
||||
Duration *float64 `json:"duration,omitempty"`
|
||||
Video *string `json:"video,omitempty"`
|
||||
// Duration Optional. Precise duration of the video in seconds; 0-60
|
||||
Duration *float64 `json:"duration,omitempty"`
|
||||
// CoverFrameTimestamp Optional. Timestamp in seconds of the frame that will be used as the static cover for
|
||||
// the story. Defaults to 0.0.
|
||||
CoverFrameTimestamp *float64 `json:"cover_frame_timestamp,omitempty"`
|
||||
IsAnimation *bool `json:"is_animation,omitempty"`
|
||||
// IsAnimation Optional. Pass True if the video has no sound
|
||||
IsAnimation *bool `json:"is_animation,omitempty"`
|
||||
}
|
||||
|
||||
// StoryAreaPosition describes the position of a clickable area on a story.
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#storyareaposition
|
||||
type StoryAreaPosition struct {
|
||||
XPercentage float64 `json:"x_percentage"`
|
||||
YPercentage float64 `json:"y_percentage"`
|
||||
WidthPercentage float64 `json:"width_percentage"`
|
||||
HeightPercentage float64 `json:"height_percentage"`
|
||||
RotationAngle float64 `json:"rotation_angle"`
|
||||
// XPercentage The abscissa of the area's center, as a percentage of the media width
|
||||
XPercentage float64 `json:"x_percentage"`
|
||||
// YPercentage The ordinate of the area's center, as a percentage of the media height
|
||||
YPercentage float64 `json:"y_percentage"`
|
||||
// WidthPercentage The width of the area's rectangle, as a percentage of the media width
|
||||
WidthPercentage float64 `json:"width_percentage"`
|
||||
// HeightPercentage The height of the area's rectangle, as a percentage of the media height
|
||||
HeightPercentage float64 `json:"height_percentage"`
|
||||
// RotationAngle The clockwise rotation angle of the rectangle, in degrees; 0-360
|
||||
RotationAngle float64 `json:"rotation_angle"`
|
||||
// CornerRadiusPercentage The radius of the rectangle corner rounding, as a percentage of the media width
|
||||
CornerRadiusPercentage float64 `json:"corner_radius_percentage"`
|
||||
}
|
||||
|
||||
@@ -133,26 +189,38 @@ const (
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#storyareatype
|
||||
type StoryAreaType struct {
|
||||
// Type identifies the concrete story-area variant.
|
||||
Type StoryAreaTypeType `json:"type"`
|
||||
|
||||
// Latitude Location latitude in degrees
|
||||
// Location
|
||||
Latitude *float64 `json:"latitude,omitempty"`
|
||||
Longitude *float64 `json:"longitude,omitempty"`
|
||||
Address *LocationAddress `json:"address,omitempty"`
|
||||
Latitude *float64 `json:"latitude,omitempty"`
|
||||
// Longitude Location longitude in degrees
|
||||
Longitude *float64 `json:"longitude,omitempty"`
|
||||
// Address Optional. Address of the location
|
||||
Address *LocationAddress `json:"address,omitempty"`
|
||||
|
||||
// ReactionType Type of the reaction
|
||||
// Suggested reaction
|
||||
ReactionType *ReactionType `json:"reaction_type,omitempty"`
|
||||
IsDark *bool `json:"is_dark,omitempty"`
|
||||
IsFlipped *bool `json:"is_flipped,omitempty"`
|
||||
// IsDark Optional. Pass True if the reaction area has a dark background
|
||||
IsDark *bool `json:"is_dark,omitempty"`
|
||||
// IsFlipped Optional. Pass True if reaction area corner is flipped
|
||||
IsFlipped *bool `json:"is_flipped,omitempty"`
|
||||
|
||||
// URL HTTP or tg:// URL to be opened when the area is clicked
|
||||
// Link
|
||||
URL *string `json:"url,omitempty"`
|
||||
|
||||
// Temperature Temperature, in degree Celsius
|
||||
// Weather
|
||||
Temperature *float64 `json:"temperature,omitempty"`
|
||||
Emoji *string `json:"emoji,omitempty"`
|
||||
BackgroundColor *int `json:"background_color,omitempty"`
|
||||
Temperature *float64 `json:"temperature,omitempty"`
|
||||
// Emoji Emoji representing the weather
|
||||
Emoji *string `json:"emoji,omitempty"`
|
||||
// BackgroundColor A color of the area background in the ARGB format
|
||||
BackgroundColor *int `json:"background_color,omitempty"`
|
||||
|
||||
// Name Unique name of the gift
|
||||
// Unique gift
|
||||
Name *string `json:"name,omitempty"`
|
||||
}
|
||||
@@ -161,6 +229,8 @@ type StoryAreaType struct {
|
||||
// Since: Bot API 9.0
|
||||
// See https://core.telegram.org/bots/api#storyarea
|
||||
type StoryArea struct {
|
||||
// Position Position of the area
|
||||
Position StoryAreaPosition `json:"position"`
|
||||
Type StoryAreaType `json:"type"`
|
||||
// Type Type of the area
|
||||
Type StoryAreaType `json:"type"`
|
||||
}
|
||||
|
||||
+272
-80
@@ -6,10 +6,19 @@ import "context"
|
||||
// Since: Bot API 5.3
|
||||
// See https://core.telegram.org/bots/api#banchatmember
|
||||
type BanChatMember struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
UntilDate int `json:"until_date,omitempty"`
|
||||
RevokeMessages bool `json:"revoke_messages,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target group or username of the target supergroup or channel
|
||||
// in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
// UntilDate Optional. Date when the user will be unbanned; Unix time. If user is banned for more than 366
|
||||
// days or less than 30 seconds from the current time they are considered to be banned forever. Applied for
|
||||
// supergroups and channels only.
|
||||
UntilDate int `json:"until_date,omitempty"`
|
||||
// RevokeMessages Optional. Pass True to delete all messages from the chat for the user that is being
|
||||
// removed. If False, the user will be able to see messages in the group that were sent before the user was
|
||||
// removed. Always True for supergroups and channels.
|
||||
RevokeMessages bool `json:"revoke_messages,omitempty"`
|
||||
}
|
||||
|
||||
// BanChatMember bans a user in a chat.
|
||||
@@ -34,9 +43,13 @@ func (api *API) BanChatMemberWithContext(ctx context.Context, params BanChatMemb
|
||||
// Since: Bot API 2.0
|
||||
// See https://core.telegram.org/bots/api#unbanchatmember
|
||||
type UnbanChatMember struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
OnlyIfBanned bool `json:"only_if_banned"`
|
||||
// ChatID Required. Unique identifier for the target group or username of the target supergroup or channel
|
||||
// in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
// OnlyIfBanned Optional. Do nothing if the user is not banned
|
||||
OnlyIfBanned bool `json:"only_if_banned"`
|
||||
}
|
||||
|
||||
// UnbanChatMember unbans a previously banned user in a chat.
|
||||
@@ -61,11 +74,23 @@ func (api *API) UnbanChatMemberWithContext(ctx context.Context, params UnbanChat
|
||||
// Since: Bot API 3.1
|
||||
// See https://core.telegram.org/bots/api#restrictchatmember
|
||||
type RestrictChatMember struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
Permissions ChatPermissions `json:"permissions"`
|
||||
UseIndependentChatPermissions bool `json:"use_independent_chat_permissions,omitempty"`
|
||||
UntilDate int `json:"until_date,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target supergroup in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
// Permissions Required. A JSON-serialized object for new user permissions
|
||||
Permissions ChatPermissions `json:"permissions"`
|
||||
// UseIndependentChatPermissions Optional. Pass True if chat permissions are set independently. Otherwise,
|
||||
// the can_send_other_messages and can_add_web_page_previews permissions will imply the can_send_messages,
|
||||
// can_send_audios, can_send_documents, can_send_photos, can_send_videos, can_send_video_notes, and
|
||||
// can_send_voice_notes permissions; the can_send_polls permission will imply the can_send_messages
|
||||
// permission.
|
||||
UseIndependentChatPermissions bool `json:"use_independent_chat_permissions,omitempty"`
|
||||
// UntilDate Optional. Date when restrictions will be lifted for the user; Unix time. If user is restricted
|
||||
// for more than 366 days or less than 30 seconds from the current time, they are considered to be
|
||||
// restricted forever.
|
||||
UntilDate int `json:"until_date,omitempty"`
|
||||
}
|
||||
|
||||
// RestrictChatMember restricts a user in a chat.
|
||||
@@ -90,26 +115,58 @@ func (api *API) RestrictChatMemberWithContext(ctx context.Context, params Restri
|
||||
// Since: Bot API 3.1
|
||||
// See https://core.telegram.org/bots/api#promotechatmember
|
||||
type PromoteChatMember struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
IsAnonymous bool `json:"is_anonymous,omitempty"` // Since: Bot API 5.1
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
// IsAnonymous Optional. Pass True if the administrator's presence in the chat is hidden
|
||||
IsAnonymous bool `json:"is_anonymous,omitempty"` // Since: Bot API 5.1
|
||||
|
||||
CanManageChat bool `json:"can_manage_chat,omitempty"` // Since: Bot API 5.3
|
||||
CanDeleteMessages bool `json:"can_delete_messages,omitempty"`
|
||||
CanManageVideoChats bool `json:"can_manage_video_chats,omitempty"` // Since: Bot API 6.0
|
||||
CanRestrictMembers bool `json:"can_restrict_members,omitempty"`
|
||||
CanPromoteMembers bool `json:"can_promote_members,omitempty"`
|
||||
CanChangeInfo bool `json:"can_change_info,omitempty"`
|
||||
CanInviteUsers bool `json:"can_invite_users,omitempty"`
|
||||
CanPostStories bool `json:"can_post_stories,omitempty"` // Since: Bot API 6.9
|
||||
CanEditStories bool `json:"can_edit_stories,omitempty"` // Since: Bot API 6.9
|
||||
CanDeleteStories bool `json:"can_delete_stories,omitempty"` // Since: Bot API 6.9
|
||||
CanPostMessages bool `json:"can_post_messages,omitempty"`
|
||||
CanEditMessages bool `json:"can_edit_messages,omitempty"`
|
||||
CanPinMessages bool `json:"can_pin_messages,omitempty"`
|
||||
CanManageTopics bool `json:"can_manage_topics,omitempty"` // Since: Bot API 6.3
|
||||
// CanManageChat Optional. Pass True if the administrator can access the chat event log, get boost list, see
|
||||
// hidden supergroup and channel members, report spam messages, ignore slow mode, and send messages to the
|
||||
// chat without paying Telegram Stars. Implied by any other administrator privilege.
|
||||
CanManageChat bool `json:"can_manage_chat,omitempty"` // Since: Bot API 5.3
|
||||
// CanDeleteMessages Optional. Pass True if the administrator can delete messages of other users
|
||||
CanDeleteMessages bool `json:"can_delete_messages,omitempty"`
|
||||
// CanManageVideoChats Optional. Pass True if the administrator can manage video chats
|
||||
CanManageVideoChats bool `json:"can_manage_video_chats,omitempty"` // Since: Bot API 6.0
|
||||
// CanRestrictMembers Optional. Pass True if the administrator can restrict, ban or unban chat members, or
|
||||
// access supergroup statistics. For backward compatibility, defaults to True for promotions of channel
|
||||
// administrators.
|
||||
CanRestrictMembers bool `json:"can_restrict_members,omitempty"`
|
||||
// CanPromoteMembers Optional. Pass True if the administrator can add new administrators with a subset of
|
||||
// their own privileges or demote administrators that they have promoted, directly or indirectly (promoted
|
||||
// by administrators that were appointed by him)
|
||||
CanPromoteMembers bool `json:"can_promote_members,omitempty"`
|
||||
// CanChangeInfo Optional. Pass True if the administrator can change chat title, photo and other settings
|
||||
CanChangeInfo bool `json:"can_change_info,omitempty"`
|
||||
// CanInviteUsers Optional. Pass True if the administrator can invite new users to the chat
|
||||
CanInviteUsers bool `json:"can_invite_users,omitempty"`
|
||||
// CanPostStories Optional. Pass True if the administrator can post stories to the chat
|
||||
CanPostStories bool `json:"can_post_stories,omitempty"` // Since: Bot API 6.9
|
||||
// CanEditStories Optional. Pass True if the administrator can edit stories posted by other users, post
|
||||
// stories to the chat page, pin chat stories, and access the chat's story archive
|
||||
CanEditStories bool `json:"can_edit_stories,omitempty"` // Since: Bot API 6.9
|
||||
// CanDeleteStories Optional. Pass True if the administrator can delete stories posted by other users
|
||||
CanDeleteStories bool `json:"can_delete_stories,omitempty"` // Since: Bot API 6.9
|
||||
// CanPostMessages Optional. Pass True if the administrator can post messages in the channel, approve
|
||||
// suggested posts, or access channel statistics; for channels only
|
||||
CanPostMessages bool `json:"can_post_messages,omitempty"`
|
||||
// CanEditMessages Optional. Pass True if the administrator can edit messages of other users and can pin
|
||||
// messages; for channels only
|
||||
CanEditMessages bool `json:"can_edit_messages,omitempty"`
|
||||
// CanPinMessages Optional. Pass True if the administrator can pin messages; for supergroups only
|
||||
CanPinMessages bool `json:"can_pin_messages,omitempty"`
|
||||
// CanManageTopics Optional. Pass True if the user is allowed to create, rename, close, and reopen forum
|
||||
// topics; for supergroups only
|
||||
CanManageTopics bool `json:"can_manage_topics,omitempty"` // Since: Bot API 6.3
|
||||
// CanManageDirectMessages Optional. Pass True if the administrator can manage direct messages within the
|
||||
// channel and decline suggested posts; for channels only
|
||||
CanManageDirectMessages bool `json:"can_manage_direct_messages,omitempty"` // Since: Bot API 9.1
|
||||
CanManageTags bool `json:"can_manage_tags,omitempty"` // Since: Bot API 9.5
|
||||
// CanManageTags Optional. Pass True if the administrator can edit the tags of regular members; for groups
|
||||
// and supergroups only
|
||||
CanManageTags bool `json:"can_manage_tags,omitempty"` // Since: Bot API 9.5
|
||||
}
|
||||
|
||||
// PromoteChatMember promotes or demotes a user in a chat.
|
||||
@@ -134,8 +191,12 @@ func (api *API) PromoteChatMemberWithContext(ctx context.Context, params Promote
|
||||
// Since: Bot API 5.0
|
||||
// See https://core.telegram.org/bots/api#setchatadministratorcustomtitle
|
||||
type SetChatAdministratorCustomTitle struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target supergroup in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
// CustomTitle Required. New custom title for the administrator; 0-16 characters, emoji are not allowed
|
||||
CustomTitle string `json:"custom_title"`
|
||||
}
|
||||
|
||||
@@ -161,9 +222,13 @@ func (api *API) SetChatAdministratorCustomTitleWithContext(ctx context.Context,
|
||||
// Since: Bot API 9.5
|
||||
// See https://core.telegram.org/bots/api#setchatmembertag
|
||||
type SetChatMemberTag struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
Tag string `json:"tag,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target supergroup in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
// Tag Optional. New tag for the member; 0-16 characters, emoji are not allowed
|
||||
Tag string `json:"tag,omitempty"`
|
||||
}
|
||||
|
||||
// SetChatMemberTag sets a tag for a chat member.
|
||||
@@ -188,7 +253,10 @@ func (api *API) SetChatMemberTagWithContext(ctx context.Context, params SetChatM
|
||||
// Since: Bot API 5.6
|
||||
// See https://core.telegram.org/bots/api#banchatsenderchat
|
||||
type BanChatSenderChat struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// SenderChatID Required. Unique identifier of the target sender chat
|
||||
SenderChatID int64 `json:"sender_chat_id"`
|
||||
}
|
||||
|
||||
@@ -214,7 +282,10 @@ func (api *API) BanChatSenderChatWithContext(ctx context.Context, params BanChat
|
||||
// Since: Bot API 5.6
|
||||
// See https://core.telegram.org/bots/api#unbanchatsenderchat
|
||||
type UnbanChatSenderChat struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// SenderChatID Required. Unique identifier of the target sender chat
|
||||
SenderChatID int64 `json:"sender_chat_id"`
|
||||
}
|
||||
|
||||
@@ -240,9 +311,17 @@ func (api *API) UnbanChatSenderChatWithContext(ctx context.Context, params Unban
|
||||
// Since: Bot API 4.4
|
||||
// See https://core.telegram.org/bots/api#setchatpermissions
|
||||
type SetChatPermissions struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
Permissions ChatPermissions `json:"permissions"`
|
||||
UseIndependentChatPermissions bool `json:"use_independent_chat_permissions,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target supergroup in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// Permissions Required. A JSON-serialized object for new default chat permissions
|
||||
Permissions ChatPermissions `json:"permissions"`
|
||||
// UseIndependentChatPermissions Optional. Pass True if chat permissions are set independently. Otherwise,
|
||||
// the can_send_other_messages and can_add_web_page_previews permissions will imply the can_send_messages,
|
||||
// can_send_audios, can_send_documents, can_send_photos, can_send_videos, can_send_video_notes, and
|
||||
// can_send_voice_notes permissions; the can_send_polls permission will imply the can_send_messages
|
||||
// permission.
|
||||
UseIndependentChatPermissions bool `json:"use_independent_chat_permissions,omitempty"`
|
||||
}
|
||||
|
||||
// SetChatPermissions sets default chat permissions for all members.
|
||||
@@ -267,6 +346,8 @@ func (api *API) SetChatPermissionsWithContext(ctx context.Context, params SetCha
|
||||
// Since: Bot API 3.1
|
||||
// See https://core.telegram.org/bots/api#exportchatinvitelink
|
||||
type ExportChatInviteLink struct {
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
}
|
||||
|
||||
@@ -292,11 +373,19 @@ func (api *API) ExportChatInviteLinkWithContext(ctx context.Context, params Expo
|
||||
// Since: Bot API 5.1
|
||||
// See https://core.telegram.org/bots/api#createchatinvitelink
|
||||
type CreateChatInviteLink struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
Name *string `json:"name,omitempty"`
|
||||
ExpireDate int `json:"expire_date,omitempty"`
|
||||
MemberLimit int `json:"member_limit,omitempty"`
|
||||
CreatesJoinRequest bool `json:"creates_join_request,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// Name Optional. Invite link name; 0-32 characters
|
||||
Name *string `json:"name,omitempty"`
|
||||
// ExpireDate Optional. Point in time (Unix timestamp) when the link will expire
|
||||
ExpireDate int `json:"expire_date,omitempty"`
|
||||
// MemberLimit Optional. The maximum number of users that can be members of the chat simultaneously after
|
||||
// joining the chat via this invite link; 1-99999
|
||||
MemberLimit int `json:"member_limit,omitempty"`
|
||||
// CreatesJoinRequest Optional. True, if users joining the chat via the link need to be approved by chat
|
||||
// administrators. If True, member_limit can't be specified.
|
||||
CreatesJoinRequest bool `json:"creates_join_request,omitempty"`
|
||||
}
|
||||
|
||||
// CreateChatInviteLink creates an additional invite link for a chat.
|
||||
@@ -321,13 +410,22 @@ func (api *API) CreateChatInviteLinkWithContext(ctx context.Context, params Crea
|
||||
// Since: Bot API 5.1
|
||||
// See https://core.telegram.org/bots/api#editchatinvitelink
|
||||
type EditChatInviteLink struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// InviteLink Required. The invite link to edit
|
||||
InviteLink string `json:"invite_link"`
|
||||
|
||||
Name string `json:"name,omitempty"`
|
||||
ExpireDate int `json:"expire_date,omitempty"`
|
||||
MemberLimit int `json:"member_limit,omitempty"`
|
||||
CreatesJoinRequest bool `json:"creates_join_request,omitempty"`
|
||||
// Name Optional. Invite link name; 0-32 characters
|
||||
Name string `json:"name,omitempty"`
|
||||
// ExpireDate Optional. Point in time (Unix timestamp) when the link will expire
|
||||
ExpireDate int `json:"expire_date,omitempty"`
|
||||
// MemberLimit Optional. The maximum number of users that can be members of the chat simultaneously after
|
||||
// joining the chat via this invite link; 1-99999
|
||||
MemberLimit int `json:"member_limit,omitempty"`
|
||||
// CreatesJoinRequest Optional. True, if users joining the chat via the link need to be approved by chat
|
||||
// administrators. If True, member_limit can't be specified.
|
||||
CreatesJoinRequest bool `json:"creates_join_request,omitempty"`
|
||||
}
|
||||
|
||||
// EditChatInviteLink edits a non‑primary invite link.
|
||||
@@ -352,10 +450,17 @@ func (api *API) EditChatInviteLinkWithContext(ctx context.Context, params EditCh
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#createchatsubscriptioninvitelink
|
||||
type CreateChatSubscriptionInviteLink struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
Name string `json:"name,omitempty"`
|
||||
SubscriptionPeriod int `json:"subscription_period,omitempty"`
|
||||
SubscriptionPrice int `json:"subscription_price,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target channel chat or username of the target channel in the
|
||||
// format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// Name Optional. Invite link name; 0-32 characters
|
||||
Name string `json:"name,omitempty"`
|
||||
// SubscriptionPeriod Required. The number of seconds the subscription will be active for before the next
|
||||
// payment. Currently, it must always be 2592000 (30 days).
|
||||
SubscriptionPeriod int `json:"subscription_period,omitempty"`
|
||||
// SubscriptionPrice Required. The amount of Telegram Stars a user must pay initially and after each
|
||||
// subsequent subscription period to be a member of the chat; 1-10000
|
||||
SubscriptionPrice int `json:"subscription_price,omitempty"`
|
||||
}
|
||||
|
||||
// CreateChatSubscriptionInviteLink creates a subscription invite link for a channel chat.
|
||||
@@ -380,9 +485,13 @@ func (api *API) CreateChatSubscriptionInviteLinkWithContext(ctx context.Context,
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#editchatsubscriptioninvitelink
|
||||
type EditChatSubscriptionInviteLink struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// InviteLink Required. The invite link to edit
|
||||
InviteLink string `json:"invite_link"`
|
||||
Name string `json:"name,omitempty"`
|
||||
// Name Optional. Invite link name; 0-32 characters
|
||||
Name string `json:"name,omitempty"`
|
||||
}
|
||||
|
||||
// EditChatSubscriptionInviteLink edits a subscription invite link.
|
||||
@@ -407,7 +516,10 @@ func (api *API) EditChatSubscriptionInviteLinkWithContext(ctx context.Context, p
|
||||
// Since: Bot API 5.1
|
||||
// See https://core.telegram.org/bots/api#revokechatinvitelink
|
||||
type RevokeChatInviteLink struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// ChatID Required. Unique identifier of the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// InviteLink Required. The invite link to revoke
|
||||
InviteLink string `json:"invite_link"`
|
||||
}
|
||||
|
||||
@@ -433,7 +545,10 @@ func (api *API) RevokeChatInviteLinkWithContext(ctx context.Context, params Revo
|
||||
// Since: Bot API 5.4
|
||||
// See https://core.telegram.org/bots/api#approvechatjoinrequest
|
||||
type ApproveChatJoinRequest struct {
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
}
|
||||
|
||||
@@ -459,7 +574,10 @@ func (api *API) ApproveChatJoinRequestWithContext(ctx context.Context, params Ap
|
||||
// Since: Bot API 5.4
|
||||
// See https://core.telegram.org/bots/api#declinechatjoinrequest
|
||||
type DeclineChatJoinRequest struct {
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
}
|
||||
|
||||
@@ -556,6 +674,8 @@ func (api *API) SendChatJoinRequestWebAppWithContext(ctx context.Context, params
|
||||
// Since: Bot API 3.1
|
||||
// See https://core.telegram.org/bots/api#setchatphoto
|
||||
type SetChatPhoto struct {
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
}
|
||||
|
||||
@@ -565,18 +685,29 @@ type SetChatPhoto struct {
|
||||
// Returns True on success.
|
||||
// See https://core.telegram.org/bots/api#setchatphoto
|
||||
func (api *API) SetChatPhoto(params SetChatPhoto, photo UploaderFile) (bool, error) {
|
||||
return api.SetChatPhotoWithContext(context.Background(), params, photo)
|
||||
}
|
||||
|
||||
// SetChatPhotoWithContext changes the chat photo using ctx for cancellation and deadlines.
|
||||
// Since: Bot API 3.1
|
||||
// photo is the file to upload as the new photo.
|
||||
// Returns True on success.
|
||||
// See https://core.telegram.org/bots/api#setchatphoto
|
||||
func (api *API) SetChatPhotoWithContext(ctx context.Context, params SetChatPhoto, photo UploaderFile) (bool, error) {
|
||||
uploader := NewUploader(api)
|
||||
defer func() {
|
||||
_ = uploader.Close()
|
||||
}()
|
||||
req := NewUploaderRequestWithChatID[bool]("setChatPhoto", params, params.ChatID, photo.SetType(UploaderPhotoType))
|
||||
return req.Do(uploader)
|
||||
return req.DoWithContext(ctx, uploader)
|
||||
}
|
||||
|
||||
// DeleteChatPhoto holds parameters for the deleteChatPhoto method.
|
||||
// Since: Bot API 3.1
|
||||
// See https://core.telegram.org/bots/api#deletechatphoto
|
||||
type DeleteChatPhoto struct {
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
}
|
||||
|
||||
@@ -602,8 +733,11 @@ func (api *API) DeleteChatPhotoWithContext(ctx context.Context, params DeleteCha
|
||||
// Since: Bot API 3.1
|
||||
// See https://core.telegram.org/bots/api#setchattitle
|
||||
type SetChatTitle struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
Title string `json:"title"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// Title Required. New chat title, 1-128 characters
|
||||
Title string `json:"title"`
|
||||
}
|
||||
|
||||
// SetChatTitle changes the chat title.
|
||||
@@ -628,7 +762,10 @@ func (api *API) SetChatTitleWithContext(ctx context.Context, params SetChatTitle
|
||||
// Since: Bot API 3.1
|
||||
// See https://core.telegram.org/bots/api#setchatdescription
|
||||
type SetChatDescription struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// Description Optional. New chat description, 0-255 characters
|
||||
Description string `json:"description"`
|
||||
}
|
||||
|
||||
@@ -654,10 +791,17 @@ func (api *API) SetChatDescriptionWithContext(ctx context.Context, params SetCha
|
||||
// Since: Bot API 3.1
|
||||
// See https://core.telegram.org/bots/api#pinchatmessage
|
||||
type PinChatMessage struct {
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be pinned
|
||||
BusinessConnectionID *string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageID int `json:"message_id"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageID Required. Identifier of a message to pin
|
||||
MessageID int `json:"message_id"`
|
||||
// DisableNotification Optional. Pass True if it is not necessary to send a notification to all chat members
|
||||
// about the new pinned message. Notifications are always disabled in channels and private chats.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
}
|
||||
|
||||
// PinChatMessage pins a message in a chat.
|
||||
@@ -682,9 +826,15 @@ func (api *API) PinChatMessageWithContext(ctx context.Context, params PinChatMes
|
||||
// Since: Bot API 3.1
|
||||
// See https://core.telegram.org/bots/api#unpinchatmessage
|
||||
type UnpinChatMessage struct {
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be unpinned
|
||||
BusinessConnectionID *string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageID int `json:"message_id"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageID Optional. Identifier of the message to unpin. Required if business_connection_id is specified.
|
||||
// If not specified, the most recent pinned message (by sending date) will be unpinned.
|
||||
MessageID int `json:"message_id"`
|
||||
}
|
||||
|
||||
// UnpinChatMessage unpins a message in a chat.
|
||||
@@ -709,6 +859,8 @@ func (api *API) UnpinChatMessageWithContext(ctx context.Context, params UnpinCha
|
||||
// Since: Bot API 5.0
|
||||
// See https://core.telegram.org/bots/api#unpinallchatmessages
|
||||
type UnpinAllChatMessages struct {
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
}
|
||||
|
||||
@@ -734,6 +886,9 @@ func (api *API) UnpinAllChatMessagesWithContext(ctx context.Context, params Unpi
|
||||
// Since: Bot API 2.1
|
||||
// See https://core.telegram.org/bots/api#leavechat
|
||||
type LeaveChat struct {
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target supergroup or channel in
|
||||
// the format @username. Channel direct messages chats aren't supported; leave the corresponding channel
|
||||
// instead.
|
||||
ChatID int64 `json:"chat_id"`
|
||||
}
|
||||
|
||||
@@ -759,6 +914,8 @@ func (api *API) LeaveChatWithContext(ctx context.Context, params LeaveChat) (boo
|
||||
// Since: Bot API 2.1
|
||||
// See https://core.telegram.org/bots/api#getchat
|
||||
type GetChat struct {
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target supergroup or channel in
|
||||
// the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
}
|
||||
|
||||
@@ -783,8 +940,12 @@ func (api *API) GetChatWithContext(ctx context.Context, params GetChat) (ChatFul
|
||||
// Since: Bot API 2.1
|
||||
// See https://core.telegram.org/bots/api#getchatadministrators
|
||||
type GetChatAdministrators struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
ReturnBots bool `json:"return_bots,omitempty"` // Since: Bot API 10.0
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target supergroup or channel in
|
||||
// the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// ReturnBots Optional. Pass True to additionally receive all bots that are administrators of the chat. By
|
||||
// default, bots other than the current bot are omitted.
|
||||
ReturnBots bool `json:"return_bots,omitempty"` // Since: Bot API 10.0
|
||||
}
|
||||
|
||||
// GetChatAdministrators returns a list of administrators in a chat.
|
||||
@@ -808,6 +969,8 @@ func (api *API) GetChatAdministratorsWithContext(ctx context.Context, params Get
|
||||
// Since: Bot API 2.1
|
||||
// See https://core.telegram.org/bots/api#getchatmembercount
|
||||
type GetChatMemberCount struct {
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target supergroup or channel in
|
||||
// the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
}
|
||||
|
||||
@@ -832,7 +995,10 @@ func (api *API) GetChatMemberCountWithContext(ctx context.Context, params GetCha
|
||||
// Since: Bot API 2.1
|
||||
// See https://core.telegram.org/bots/api#getchatmember
|
||||
type GetChatMember struct {
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target supergroup or channel in
|
||||
// the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
}
|
||||
|
||||
@@ -857,7 +1023,10 @@ func (api *API) GetChatMemberWithContext(ctx context.Context, params GetChatMemb
|
||||
// Since: Bot API 3.2
|
||||
// See https://core.telegram.org/bots/api#setchatstickerset
|
||||
type SetChatStickerSet struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target supergroup in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// StickerSetName Required. Name of the sticker set to be set as the group sticker set
|
||||
StickerSetName string `json:"sticker_set_name"`
|
||||
}
|
||||
|
||||
@@ -883,6 +1052,8 @@ func (api *API) SetChatStickerSetWithContext(ctx context.Context, params SetChat
|
||||
// Since: Bot API 3.2
|
||||
// See https://core.telegram.org/bots/api#deletechatstickerset
|
||||
type DeleteChatStickerSet struct {
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target supergroup in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
}
|
||||
|
||||
@@ -908,7 +1079,9 @@ func (api *API) DeleteChatStickerSetWithContext(ctx context.Context, params Dele
|
||||
// Since: Bot API 7.0
|
||||
// See https://core.telegram.org/bots/api#getuserchatboosts
|
||||
type GetUserChatBoosts struct {
|
||||
// ChatID Required. Unique identifier for the chat or username of the channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
}
|
||||
|
||||
@@ -933,17 +1106,36 @@ func (api *API) GetUserChatBoostsWithContext(ctx context.Context, params GetUser
|
||||
// Since: Bot API 9.3
|
||||
// See https://core.telegram.org/bots/api#getchatgifts
|
||||
type GetChatGifts struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
ExcludeUnsaved bool `json:"exclude_unsaved,omitempty"`
|
||||
ExcludeSaved bool `json:"exclude_saved,omitempty"`
|
||||
ExcludeUnlimited bool `json:"exclude_unlimited,omitempty"`
|
||||
ExcludeLimitedUpgradable bool `json:"exclude_limited_upgradable,omitempty"`
|
||||
ExcludeLimitedNonUpgradable bool `json:"exclude_limited_non_upgradable,omitempty"`
|
||||
ExcludeUnique bool `json:"exclude_unique,omitempty"`
|
||||
ExcludeFromBlockchain bool `json:"exclude_from_blockchain,omitempty"`
|
||||
SortByPrice bool `json:"sort_by_price,omitempty"`
|
||||
Offset string `json:"offset,omitempty"`
|
||||
Limit int `json:"limit,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// ExcludeUnsaved Optional. Pass True to exclude gifts that aren't saved to the chat's profile page. Always
|
||||
// True, unless the bot has the can_post_messages administrator right in the channel.
|
||||
ExcludeUnsaved bool `json:"exclude_unsaved,omitempty"`
|
||||
// ExcludeSaved Optional. Pass True to exclude gifts that are saved to the chat's profile page. Always
|
||||
// False, unless the bot has the can_post_messages administrator right in the channel.
|
||||
ExcludeSaved bool `json:"exclude_saved,omitempty"`
|
||||
// ExcludeUnlimited Optional. Pass True to exclude gifts that can be purchased an unlimited number of times
|
||||
ExcludeUnlimited bool `json:"exclude_unlimited,omitempty"`
|
||||
// ExcludeLimitedUpgradable Optional. Pass True to exclude gifts that can be purchased a limited number of
|
||||
// times and can be upgraded to unique
|
||||
ExcludeLimitedUpgradable bool `json:"exclude_limited_upgradable,omitempty"`
|
||||
// ExcludeLimitedNonUpgradable Optional. Pass True to exclude gifts that can be purchased a limited number
|
||||
// of times and can't be upgraded to unique
|
||||
ExcludeLimitedNonUpgradable bool `json:"exclude_limited_non_upgradable,omitempty"`
|
||||
// ExcludeUnique Optional. Pass True to exclude unique gifts
|
||||
ExcludeUnique bool `json:"exclude_unique,omitempty"`
|
||||
// ExcludeFromBlockchain Optional. Pass True to exclude gifts that were assigned from the TON blockchain and
|
||||
// can't be resold or transferred in Telegram
|
||||
ExcludeFromBlockchain bool `json:"exclude_from_blockchain,omitempty"`
|
||||
// SortByPrice Optional. Pass True to sort results by gift price instead of send date. Sorting is applied
|
||||
// before pagination.
|
||||
SortByPrice bool `json:"sort_by_price,omitempty"`
|
||||
// Offset Optional. Offset of the first entry to return as received from the previous request; use an empty
|
||||
// string to get the first chunk of results
|
||||
Offset string `json:"offset,omitempty"`
|
||||
// Limit Optional. The maximum number of gifts to be returned; 1-100. Defaults to 100.
|
||||
Limit int `json:"limit,omitempty"`
|
||||
}
|
||||
|
||||
// GetChatGifts returns gifts owned by a chat.
|
||||
|
||||
+379
-141
@@ -4,14 +4,25 @@ package tgapi
|
||||
// Since: Bot API 1.0
|
||||
// See https://core.telegram.org/bots/api#chat
|
||||
type Chat struct {
|
||||
ID int64 `json:"id"`
|
||||
Type ChatType `json:"type"`
|
||||
Title *string `json:"title,omitempty"`
|
||||
Username *string `json:"username,omitempty"`
|
||||
FirstName *string `json:"first_name,omitempty"`
|
||||
LastName *string `json:"last_name,omitempty"`
|
||||
IsForum *bool `json:"is_forum,omitempty"` // Since: Bot API 6.3
|
||||
IsDirectMessages *bool `json:"is_direct_messages,omitempty"` // Since: Bot API 9.2
|
||||
// ID Unique identifier for this chat. This number may have more than 32 significant bits and some
|
||||
// programming languages may have difficulty/silent defects in interpreting it. But it has at most 52
|
||||
// significant bits, so a signed 64-bit integer or double-precision float type are safe for storing this
|
||||
// identifier.
|
||||
ID int64 `json:"id"`
|
||||
// Type Type of the chat, can be either “private”, “group”, “supergroup” or “channel”
|
||||
Type ChatType `json:"type"`
|
||||
// Title Optional. Title, for supergroups, channels and group chats
|
||||
Title *string `json:"title,omitempty"`
|
||||
// Username Optional. Username, for private chats, supergroups and channels if available
|
||||
Username *string `json:"username,omitempty"`
|
||||
// FirstName Optional. First name of the other party in a private chat
|
||||
FirstName *string `json:"first_name,omitempty"`
|
||||
// LastName Optional. Last name of the other party in a private chat
|
||||
LastName *string `json:"last_name,omitempty"`
|
||||
// IsForum Optional. True, if the supergroup chat is a forum (has topics enabled)
|
||||
IsForum *bool `json:"is_forum,omitempty"` // Since: Bot API 6.3
|
||||
// IsDirectMessages Optional. True, if the chat is the direct messages chat of a channel
|
||||
IsDirectMessages *bool `json:"is_direct_messages,omitempty"` // Since: Bot API 9.2
|
||||
}
|
||||
|
||||
// ChatType represents the type of a chat.
|
||||
@@ -32,65 +43,146 @@ const (
|
||||
// Since: Bot API 7.5
|
||||
// See https://core.telegram.org/bots/api#chatfullinfo
|
||||
type ChatFullInfo struct {
|
||||
ID int64 `json:"id"`
|
||||
Type ChatType `json:"type"`
|
||||
Title string `json:"title"`
|
||||
Username string `json:"username"`
|
||||
FirstName string `json:"first_name"`
|
||||
LastName string `json:"last_name"`
|
||||
IsForum bool `json:"is_forum"`
|
||||
IsDirectMessages bool `json:"is_direct_messages"`
|
||||
AccentColorID int `json:"accent_color_id"`
|
||||
MaxReactionCount int `json:"max_reaction_count"`
|
||||
Photo *ChatPhoto `json:"photo,omitempty"`
|
||||
ActiveUsernames []string `json:"active_usernames,omitempty"`
|
||||
Birthdate *Birthdate `json:"birthdate,omitempty"`
|
||||
// ID Unique identifier for this chat. This number may have more than 32 significant bits and some
|
||||
// programming languages may have difficulty/silent defects in interpreting it. But it has at most 52
|
||||
// significant bits, so a signed 64-bit integer or double-precision float type are safe for storing this
|
||||
// identifier.
|
||||
ID int64 `json:"id"`
|
||||
// Type Type of the chat, can be either “private”, “group”, “supergroup” or “channel”
|
||||
Type ChatType `json:"type"`
|
||||
// Title Optional. Title, for supergroups, channels and group chats
|
||||
Title string `json:"title"`
|
||||
// Username Optional. Username, for private chats, supergroups and channels if available
|
||||
Username string `json:"username"`
|
||||
// FirstName Optional. First name of the other party in a private chat
|
||||
FirstName string `json:"first_name"`
|
||||
// LastName Optional. Last name of the other party in a private chat
|
||||
LastName string `json:"last_name"`
|
||||
// IsForum Optional. True, if the supergroup chat is a forum (has topics enabled)
|
||||
IsForum bool `json:"is_forum"`
|
||||
// IsDirectMessages Optional. True, if the chat is the direct messages chat of a channel
|
||||
IsDirectMessages bool `json:"is_direct_messages"`
|
||||
// AccentColorID Identifier of the accent color for the chat name and backgrounds of the chat photo, reply
|
||||
// header, and link preview. See accent colors for more details.
|
||||
AccentColorID int `json:"accent_color_id"`
|
||||
// MaxReactionCount The maximum number of reactions that can be set on a message in the chat
|
||||
MaxReactionCount int `json:"max_reaction_count"`
|
||||
// Photo Optional. Chat photo
|
||||
Photo *ChatPhoto `json:"photo,omitempty"`
|
||||
// ActiveUsernames Optional. If non-empty, the list of all active chat usernames; for private chats,
|
||||
// supergroups and channels
|
||||
ActiveUsernames []string `json:"active_usernames,omitempty"`
|
||||
// Birthdate Optional. For private chats, the date of birth of the user
|
||||
Birthdate *Birthdate `json:"birthdate,omitempty"`
|
||||
|
||||
BusinessIntro *BusinessIntro `json:"business_intro,omitempty"`
|
||||
BusinessLocation *BusinessLocation `json:"business_location,omitempty"`
|
||||
// BusinessIntro Optional. For private chats with business accounts, the intro of the business
|
||||
BusinessIntro *BusinessIntro `json:"business_intro,omitempty"`
|
||||
// BusinessLocation Optional. For private chats with business accounts, the location of the business
|
||||
BusinessLocation *BusinessLocation `json:"business_location,omitempty"`
|
||||
// BusinessOpeningHours Optional. For private chats with business accounts, the opening hours of the
|
||||
// business
|
||||
BusinessOpeningHours *BusinessOpeningHours `json:"business_opening_hours,omitempty"`
|
||||
|
||||
// PersonalChat Optional. For private chats, the personal channel of the user
|
||||
PersonalChat *Chat `json:"personal_chat,omitempty"`
|
||||
ParentChat *Chat `json:"parent_chat,omitempty"` // Since: Bot API 9.2
|
||||
// ParentChat Optional. Information about the corresponding channel chat; for direct messages chats only
|
||||
ParentChat *Chat `json:"parent_chat,omitempty"` // Since: Bot API 9.2
|
||||
|
||||
AvailableReaction []ReactionType `json:"available_reaction,omitempty"`
|
||||
// AvailableReaction Optional. List of available reactions allowed in the chat. If omitted, then all emoji
|
||||
// reactions are allowed.
|
||||
// Subject to change in v2: the Go field name may be pluralized to AvailableReactions.
|
||||
AvailableReaction []ReactionType `json:"available_reactions,omitempty"`
|
||||
|
||||
BackgroundCustomEmojiID *string `json:"background_custom_emoji_id,omitempty"`
|
||||
ProfileAccentColorID *int `json:"profile_accent_color_id,omitempty"`
|
||||
// BackgroundCustomEmojiID Optional. Custom emoji identifier of the emoji chosen by the chat for the reply
|
||||
// header and link preview background
|
||||
BackgroundCustomEmojiID *string `json:"background_custom_emoji_id,omitempty"`
|
||||
// ProfileAccentColorID Optional. Identifier of the accent color for the chat's profile background. See
|
||||
// profile accent colors for more details.
|
||||
ProfileAccentColorID *int `json:"profile_accent_color_id,omitempty"`
|
||||
// ProfileBackgroundCustomEmojiID Optional. Custom emoji identifier of the emoji chosen by the chat for its
|
||||
// profile background
|
||||
ProfileBackgroundCustomEmojiID *string `json:"profile_background_custom_emoji_id,omitempty"`
|
||||
EmojiStatusCustomEmojiID *string `json:"emoji_status_custom_emoji_id,omitempty"`
|
||||
EmojiStatusExpirationDate *int `json:"emoji_status_expiration_date,omitempty"`
|
||||
// EmojiStatusCustomEmojiID Optional. Custom emoji identifier of the emoji status of the chat or the other
|
||||
// party in a private chat
|
||||
EmojiStatusCustomEmojiID *string `json:"emoji_status_custom_emoji_id,omitempty"`
|
||||
// EmojiStatusExpirationDate Optional. Expiration date of the emoji status of the chat or the other party in
|
||||
// a private chat, in Unix time, if any
|
||||
EmojiStatusExpirationDate *int `json:"emoji_status_expiration_date,omitempty"`
|
||||
|
||||
Bio *string `json:"bio,omitempty"`
|
||||
HasPrivateForwards *bool `json:"has_private_forwards,omitempty"`
|
||||
HasRestrictedVoiceAndVideoMessages *bool `json:"has_restricted_voice_and_video_messages,omitempty"`
|
||||
JoinToSendMessages *bool `json:"join_to_send_messages,omitempty"`
|
||||
JoinByRequest *bool `json:"join_by_request,omitempty"`
|
||||
// Bio Optional. Bio of the other party in a private chat
|
||||
Bio *string `json:"bio,omitempty"`
|
||||
// HasPrivateForwards Optional. True, if privacy settings of the other party in the private chat allows to
|
||||
// use tg://user?id=<user_id> links only in chats with the user
|
||||
HasPrivateForwards *bool `json:"has_private_forwards,omitempty"`
|
||||
// HasRestrictedVoiceAndVideoMessages Optional. True, if the privacy settings of the other party restrict
|
||||
// sending voice and video note messages in the private chat
|
||||
HasRestrictedVoiceAndVideoMessages *bool `json:"has_restricted_voice_and_video_messages,omitempty"`
|
||||
// JoinToSendMessages Optional. True, if users need to join the supergroup before they can send messages
|
||||
JoinToSendMessages *bool `json:"join_to_send_messages,omitempty"`
|
||||
// JoinByRequest Optional. True, if all users directly joining the supergroup without using an invite link
|
||||
// need to be approved by supergroup administrators
|
||||
JoinByRequest *bool `json:"join_by_request,omitempty"`
|
||||
|
||||
Description *string `json:"description,omitempty"`
|
||||
InviteLink *string `json:"invite_link,omitempty"`
|
||||
PinnedMessage *Message `json:"pinned_message,omitempty"`
|
||||
Permissions *ChatPermissions `json:"permissions,omitempty"`
|
||||
// Description Optional. Description, for groups, supergroups and channel chats
|
||||
Description *string `json:"description,omitempty"`
|
||||
// InviteLink Optional. Primary invite link, for groups, supergroups and channel chats
|
||||
InviteLink *string `json:"invite_link,omitempty"`
|
||||
// PinnedMessage Optional. The most recent pinned message (by sending date)
|
||||
PinnedMessage *Message `json:"pinned_message,omitempty"`
|
||||
// Permissions Optional. Default chat member permissions, for groups and supergroups
|
||||
Permissions *ChatPermissions `json:"permissions,omitempty"`
|
||||
// AcceptedGiftTypes Information about types of gifts that are accepted by the chat or by the corresponding
|
||||
// user for private chats
|
||||
AcceptedGiftTypes *AcceptedGiftTypes `json:"accepted_gift_types,omitempty"`
|
||||
|
||||
CanSendPaidMedia *bool `json:"can_send_paid_media,omitempty"`
|
||||
SlowModeDelay *int `json:"slow_mode_delay,omitempty"`
|
||||
UnrestrictedBoostCount *int `json:"unrestricted_boost_count,omitempty"`
|
||||
MessageAutoDeleteTime *int `json:"message_auto_delete_time,omitempty"`
|
||||
HasAggressiveAntiSpamEnabled *bool `json:"has_aggressive_anti_spam_enabled,omitempty"`
|
||||
HasHiddenMembers *bool `json:"has_hidden_members,omitempty"`
|
||||
HasProtectedContent *bool `json:"has_protected_content,omitempty"`
|
||||
HasVisibleHistory *bool `json:"has_visible_history,omitempty"`
|
||||
StickerSetName *string `json:"sticker_set_name,omitempty"`
|
||||
CanSetStickerSet *bool `json:"can_set_sticker_set,omitempty"`
|
||||
CustomEmojiStickerSetName *string `json:"custom_emoji_sticker_set_name,omitempty"`
|
||||
LinkedChatID *int64 `json:"linked_chat_id,omitempty"`
|
||||
// CanSendPaidMedia Optional. True, if paid media messages can be sent or forwarded to the channel chat. The
|
||||
// field is available only for channel chats.
|
||||
CanSendPaidMedia *bool `json:"can_send_paid_media,omitempty"`
|
||||
// SlowModeDelay Optional. For supergroups, the minimum allowed delay between consecutive messages sent by
|
||||
// each unprivileged user; in seconds
|
||||
SlowModeDelay *int `json:"slow_mode_delay,omitempty"`
|
||||
// UnrestrictedBoostCount is the number of unrestricted boosts available to the chat.
|
||||
UnrestrictedBoostCount *int `json:"unrestricted_boost_count,omitempty"`
|
||||
// MessageAutoDeleteTime Optional. The time after which all messages sent to the chat will be automatically
|
||||
// deleted; in seconds
|
||||
MessageAutoDeleteTime *int `json:"message_auto_delete_time,omitempty"`
|
||||
// HasAggressiveAntiSpamEnabled Optional. True, if aggressive anti-spam checks are enabled in the
|
||||
// supergroup. The field is only available to chat administrators.
|
||||
HasAggressiveAntiSpamEnabled *bool `json:"has_aggressive_anti_spam_enabled,omitempty"`
|
||||
// HasHiddenMembers Optional. True, if non-administrators can only get the list of bots and administrators
|
||||
// in the chat
|
||||
HasHiddenMembers *bool `json:"has_hidden_members,omitempty"`
|
||||
// HasProtectedContent Optional. True, if messages from the chat can't be forwarded to other chats
|
||||
HasProtectedContent *bool `json:"has_protected_content,omitempty"`
|
||||
// HasVisibleHistory Optional. True, if new chat members will have access to old messages; available only to
|
||||
// chat administrators
|
||||
HasVisibleHistory *bool `json:"has_visible_history,omitempty"`
|
||||
// StickerSetName Optional. For supergroups, name of the group sticker set
|
||||
StickerSetName *string `json:"sticker_set_name,omitempty"`
|
||||
// CanSetStickerSet Optional. True, if the bot can change the group sticker set
|
||||
CanSetStickerSet *bool `json:"can_set_sticker_set,omitempty"`
|
||||
// CustomEmojiStickerSetName Optional. For supergroups, the name of the group's custom emoji sticker set.
|
||||
// Custom emoji from this set can be used by all users and bots in the group.
|
||||
CustomEmojiStickerSetName *string `json:"custom_emoji_sticker_set_name,omitempty"`
|
||||
// LinkedChatID Optional. Unique identifier for the linked chat, i.e. the discussion group identifier for a
|
||||
// channel and vice versa; for supergroups and channel chats. This identifier may be greater than 32 bits
|
||||
// and some programming languages may have difficulty/silent defects in interpreting it. But it is smaller
|
||||
// than 52 bits, so a signed 64 bit integer or double-precision float type are safe for storing this
|
||||
// identifier.
|
||||
LinkedChatID *int64 `json:"linked_chat_id,omitempty"`
|
||||
|
||||
Location *ChatLocation `json:"location,omitempty"`
|
||||
Rating *UserRating `json:"rating,omitempty"`
|
||||
FirstProfileAudio *Audio `json:"first_profile_audio,omitempty"` // Since: Bot API 9.4
|
||||
UniqueGiftColors *UniqueGiftColors `json:"unique_gift_colors,omitempty"` // Since: Bot API 9.3
|
||||
PaidMessageStarCount *int `json:"paid_message_star_count,omitempty"` // Since: Bot API 9.3
|
||||
// Location Optional. For supergroups, the location to which the supergroup is connected
|
||||
Location *ChatLocation `json:"location,omitempty"`
|
||||
// Rating Optional. For private chats, the rating of the user if any
|
||||
Rating *UserRating `json:"rating,omitempty"`
|
||||
// FirstProfileAudio Optional. For private chats, the first audio added to the profile of the user
|
||||
FirstProfileAudio *Audio `json:"first_profile_audio,omitempty"` // Since: Bot API 9.4
|
||||
// UniqueGiftColors Optional. The color scheme based on a unique gift that must be used for the chat's name,
|
||||
// message replies and link previews
|
||||
UniqueGiftColors *UniqueGiftColors `json:"unique_gift_colors,omitempty"` // Since: Bot API 9.3
|
||||
// PaidMessageStarCount Optional. The number of Telegram Stars a general user has to pay to send a message
|
||||
// to the chat
|
||||
PaidMessageStarCount *int `json:"paid_message_star_count,omitempty"` // Since: Bot API 9.3
|
||||
// GuardBot contains the guard bot visible to chat administrators.
|
||||
GuardBot *User `json:"guard_bot,omitempty"` // Since: Bot API 10.1; visible to chat administrators only
|
||||
// Community contains information about the affected community.
|
||||
@@ -101,58 +193,105 @@ type ChatFullInfo struct {
|
||||
// Since: Bot API 3.1
|
||||
// See https://core.telegram.org/bots/api#chatphoto
|
||||
type ChatPhoto struct {
|
||||
SmallFileID string `json:"small_file_id"`
|
||||
// SmallFileID File identifier of small (160x160) chat photo. This file_id can be used only for photo
|
||||
// download and only for as long as the photo is not changed.
|
||||
SmallFileID string `json:"small_file_id"`
|
||||
// SmallFileUniqueID Unique file identifier of small (160x160) chat photo, which is supposed to be the same
|
||||
// over time and for different bots. Can't be used to download or reuse the file.
|
||||
SmallFileUniqueID string `json:"small_file_unique_id"`
|
||||
BigFileID string `json:"big_file_id"`
|
||||
BigFileUniqueID string `json:"big_file_unique_id"`
|
||||
// BigFileID File identifier of big (640x640) chat photo. This file_id can be used only for photo download
|
||||
// and only for as long as the photo is not changed.
|
||||
BigFileID string `json:"big_file_id"`
|
||||
// BigFileUniqueID Unique file identifier of big (640x640) chat photo, which is supposed to be the same over
|
||||
// time and for different bots. Can't be used to download or reuse the file.
|
||||
BigFileUniqueID string `json:"big_file_unique_id"`
|
||||
}
|
||||
|
||||
// ChatPermissions describes actions that a non‑administrator user is allowed to take in a chat.
|
||||
// Since: Bot API 4.4
|
||||
// See https://core.telegram.org/bots/api#chatpermissions
|
||||
type ChatPermissions struct {
|
||||
CanSendMessages bool `json:"can_send_messages"`
|
||||
CanSendAudios bool `json:"can_send_audios"` // Since: Bot API 6.5
|
||||
CanSendDocuments bool `json:"can_send_documents"` // Since: Bot API 6.5
|
||||
CanSendPhotos bool `json:"can_send_photos"` // Since: Bot API 6.5
|
||||
CanSendVideos bool `json:"can_send_videos"` // Since: Bot API 6.5
|
||||
CanSendVideoNotes bool `json:"can_send_video_notes"` // Since: Bot API 6.5
|
||||
CanSendVoiceNotes bool `json:"can_send_voice_notes"` // Since: Bot API 6.5
|
||||
CanSendPolls bool `json:"can_send_polls"`
|
||||
// CanSendMessages Optional. True, if the user is allowed to send text messages, rich messages, contacts,
|
||||
// giveaways, giveaway winners, invoices, locations and venues
|
||||
CanSendMessages bool `json:"can_send_messages"`
|
||||
// CanSendAudios Optional. True, if the user is allowed to send audios
|
||||
CanSendAudios bool `json:"can_send_audios"` // Since: Bot API 6.5
|
||||
// CanSendDocuments Optional. True, if the user is allowed to send documents
|
||||
CanSendDocuments bool `json:"can_send_documents"` // Since: Bot API 6.5
|
||||
// CanSendPhotos Optional. True, if the user is allowed to send photos
|
||||
CanSendPhotos bool `json:"can_send_photos"` // Since: Bot API 6.5
|
||||
// CanSendVideos Optional. True, if the user is allowed to send videos
|
||||
CanSendVideos bool `json:"can_send_videos"` // Since: Bot API 6.5
|
||||
// CanSendVideoNotes Optional. True, if the user is allowed to send video notes
|
||||
CanSendVideoNotes bool `json:"can_send_video_notes"` // Since: Bot API 6.5
|
||||
// CanSendVoiceNotes Optional. True, if the user is allowed to send voice notes
|
||||
CanSendVoiceNotes bool `json:"can_send_voice_notes"` // Since: Bot API 6.5
|
||||
// CanSendPolls Optional. True, if the user is allowed to send polls and checklists
|
||||
CanSendPolls bool `json:"can_send_polls"`
|
||||
// CanSendOtherMessages Optional. True, if the user is allowed to send animations, games, stickers and use
|
||||
// inline bots
|
||||
CanSendOtherMessages bool `json:"can_send_other_messages"`
|
||||
// CanAddWebPagePreview Optional. True, if the user is allowed to add web page previews to their messages
|
||||
CanAddWebPagePreview bool `json:"can_add_web_page_previews"`
|
||||
CanReactToMessages bool `json:"can_react_to_messages"` // Since: Bot API 10.0
|
||||
CanEditTag bool `json:"can_edit_tag"` // Since: Bot API 9.5
|
||||
CanChangeInfo bool `json:"can_change_info"`
|
||||
CanInviteUsers bool `json:"can_invite_users"`
|
||||
CanPinMessages bool `json:"can_pin_messages"`
|
||||
CanManageTopics bool `json:"can_manage_topics"` // Since: Bot API 6.3
|
||||
// CanReactToMessages Optional. True, if the user is allowed to react to messages. If omitted, defaults to
|
||||
// the value of can_send_messages.
|
||||
CanReactToMessages bool `json:"can_react_to_messages"` // Since: Bot API 10.0
|
||||
// CanEditTag Optional. True, if the user is allowed to edit their own tag. If omitted, defaults to the
|
||||
// value of can_pin_messages.
|
||||
CanEditTag bool `json:"can_edit_tag"` // Since: Bot API 9.5
|
||||
// CanChangeInfo Optional. True, if the user is allowed to change the chat title, photo and other settings.
|
||||
// Ignored in public supergroups.
|
||||
CanChangeInfo bool `json:"can_change_info"`
|
||||
// CanInviteUsers Optional. True, if the user is allowed to invite new users to the chat
|
||||
CanInviteUsers bool `json:"can_invite_users"`
|
||||
// CanPinMessages Optional. True, if the user is allowed to pin messages. Ignored in public supergroups.
|
||||
CanPinMessages bool `json:"can_pin_messages"`
|
||||
// CanManageTopics Optional. True, if the user is allowed to create forum topics. If omitted, defaults to
|
||||
// the value of can_pin_messages.
|
||||
CanManageTopics bool `json:"can_manage_topics"` // Since: Bot API 6.3
|
||||
}
|
||||
|
||||
// ChatLocation represents a location to which a chat is connected.
|
||||
// Since: Bot API 5.0
|
||||
// See https://core.telegram.org/bots/api#chatlocation
|
||||
type ChatLocation struct {
|
||||
// Location The location to which the supergroup is connected. Can't be a live location.
|
||||
Location Location `json:"location"`
|
||||
Address string `json:"address"`
|
||||
// Address Location address; 1-64 characters, as defined by the chat owner
|
||||
Address string `json:"address"`
|
||||
}
|
||||
|
||||
// ChatInviteLink represents an invite link for a chat.
|
||||
// Since: Bot API 5.1
|
||||
// See https://core.telegram.org/bots/api#chatinvitelink
|
||||
type ChatInviteLink struct {
|
||||
InviteLink string `json:"invite_link"`
|
||||
Creator User `json:"creator"`
|
||||
CreateJoinRequest bool `json:"creates_join_request"`
|
||||
IsPrimary bool `json:"is_primary"`
|
||||
IsRevoked bool `json:"is_revoked"`
|
||||
// InviteLink The invite link. If the link was created by another chat administrator, then the second part
|
||||
// of the link will be replaced with “…”.
|
||||
InviteLink string `json:"invite_link"`
|
||||
// Creator Creator of the link
|
||||
Creator User `json:"creator"`
|
||||
// CreateJoinRequest True, if users joining the chat via the link need to be approved by chat administrators
|
||||
CreateJoinRequest bool `json:"creates_join_request"`
|
||||
// IsPrimary True, if the link is primary
|
||||
IsPrimary bool `json:"is_primary"`
|
||||
// IsRevoked True, if the link is revoked
|
||||
IsRevoked bool `json:"is_revoked"`
|
||||
|
||||
Name *string `json:"name,omitempty"`
|
||||
ExpireDate *int `json:"expire_date,omitempty"`
|
||||
MemberLimit *int `json:"member_limit,omitempty"`
|
||||
PendingJoinRequestCount *int `json:"pending_join_request_count,omitempty"`
|
||||
SubscriptionPeriod *int `json:"subscription_period,omitempty"`
|
||||
SubscriptionPrice *int `json:"subscription_price,omitempty"`
|
||||
// Name Optional. Invite link name
|
||||
Name *string `json:"name,omitempty"`
|
||||
// ExpireDate Optional. Point in time (Unix timestamp) when the link will expire or has been expired
|
||||
ExpireDate *int `json:"expire_date,omitempty"`
|
||||
// MemberLimit Optional. The maximum number of users that can be members of the chat simultaneously after
|
||||
// joining the chat via this invite link; 1-99999
|
||||
MemberLimit *int `json:"member_limit,omitempty"`
|
||||
// PendingJoinRequestCount Optional. Number of pending join requests created using this link
|
||||
PendingJoinRequestCount *int `json:"pending_join_request_count,omitempty"`
|
||||
// SubscriptionPeriod Optional. The number of seconds the subscription will be active for before the next
|
||||
// payment
|
||||
SubscriptionPeriod *int `json:"subscription_period,omitempty"`
|
||||
// SubscriptionPrice Optional. The amount of Telegram Stars a user must pay initially and after each
|
||||
// subsequent subscription period to be a member of the chat using the link
|
||||
SubscriptionPrice *int `json:"subscription_price,omitempty"`
|
||||
}
|
||||
|
||||
// ChatMemberStatusType indicates the status of a chat member.
|
||||
@@ -177,92 +316,154 @@ const (
|
||||
// Since: Bot API 3.1
|
||||
// See https://core.telegram.org/bots/api#chatmember
|
||||
type ChatMember struct {
|
||||
// Status is the member's current status in the chat.
|
||||
Status ChatMemberStatusType `json:"status"`
|
||||
User User `json:"user"`
|
||||
Tag string `json:"tag,omitempty"` // Since: Bot API 9.5
|
||||
// User Information about the user
|
||||
User User `json:"user"`
|
||||
// Tag Optional. Tag of the member
|
||||
Tag string `json:"tag,omitempty"` // Since: Bot API 9.5
|
||||
|
||||
// IsAnonymous True, if the user's presence in the chat is hidden
|
||||
// Owner
|
||||
IsAnonymous *bool `json:"is_anonymous"`
|
||||
IsAnonymous *bool `json:"is_anonymous"`
|
||||
// CustomTitle Optional. Custom title for this user
|
||||
CustomTitle *string `json:"custom_title,omitempty"`
|
||||
|
||||
// CanBeEdited True, if the bot is allowed to edit administrator privileges of that user
|
||||
// Administrator
|
||||
CanBeEdited *bool `json:"can_be_edited,omitempty"`
|
||||
CanManageChat *bool `json:"can_manage_chat,omitempty"`
|
||||
CanDeleteMessages *bool `json:"can_delete_messages,omitempty"`
|
||||
CanBeEdited *bool `json:"can_be_edited,omitempty"`
|
||||
// CanManageChat True, if the administrator can access the chat event log, get boost list, see hidden
|
||||
// supergroup and channel members, report spam messages, ignore slow mode, and send messages to the chat
|
||||
// without paying Telegram Stars. Implied by any other administrator privilege.
|
||||
CanManageChat *bool `json:"can_manage_chat,omitempty"`
|
||||
// CanDeleteMessages True, if the administrator can delete messages of other users
|
||||
CanDeleteMessages *bool `json:"can_delete_messages,omitempty"`
|
||||
// CanManageVideoChats True, if the administrator can manage video chats
|
||||
CanManageVideoChats *bool `json:"can_manage_video_chats,omitempty"`
|
||||
CanRestrictMembers *bool `json:"can_restrict_members,omitempty"`
|
||||
CanPromoteMembers *bool `json:"can_promote_members,omitempty"`
|
||||
CanChangeInfo *bool `json:"can_change_info,omitempty"`
|
||||
CanInviteUsers *bool `json:"can_invite_users,omitempty"`
|
||||
CanPostStories *bool `json:"can_post_stories,omitempty"` // Since: Bot API 6.9
|
||||
CanEditStories *bool `json:"can_edit_stories,omitempty"` // Since: Bot API 6.9
|
||||
CanDeleteStories *bool `json:"can_delete_stories,omitempty"` // Since: Bot API 6.9
|
||||
// CanRestrictMembers True, if the administrator can restrict, ban or unban chat members, or access
|
||||
// supergroup statistics
|
||||
CanRestrictMembers *bool `json:"can_restrict_members,omitempty"`
|
||||
// CanPromoteMembers True, if the administrator can add new administrators with a subset of their own
|
||||
// privileges or demote administrators that they have promoted, directly or indirectly (promoted by
|
||||
// administrators that were appointed by the user)
|
||||
CanPromoteMembers *bool `json:"can_promote_members,omitempty"`
|
||||
// CanChangeInfo True, if the user is allowed to change the chat title, photo and other settings
|
||||
CanChangeInfo *bool `json:"can_change_info,omitempty"`
|
||||
// CanInviteUsers True, if the user is allowed to invite new users to the chat
|
||||
CanInviteUsers *bool `json:"can_invite_users,omitempty"`
|
||||
// CanPostStories True, if the administrator can post stories to the chat
|
||||
CanPostStories *bool `json:"can_post_stories,omitempty"` // Since: Bot API 6.9
|
||||
// CanEditStories True, if the administrator can edit stories posted by other users, post stories to the
|
||||
// chat page, pin chat stories, and access the chat's story archive
|
||||
CanEditStories *bool `json:"can_edit_stories,omitempty"` // Since: Bot API 6.9
|
||||
// CanDeleteStories True, if the administrator can delete stories posted by other users
|
||||
CanDeleteStories *bool `json:"can_delete_stories,omitempty"` // Since: Bot API 6.9
|
||||
|
||||
CanPostMessages *bool `json:"can_post_messages,omitempty"`
|
||||
CanEditMessages *bool `json:"can_edit_messages,omitempty"`
|
||||
CanPinMessages *bool `json:"can_pin_messages,omitempty"`
|
||||
CanManageTopics *bool `json:"can_manage_topics,omitempty"` // Since: Bot API 6.3
|
||||
// CanPostMessages Optional. True, if the administrator can post messages in the channel, approve suggested
|
||||
// posts, or access channel statistics; for channels only
|
||||
CanPostMessages *bool `json:"can_post_messages,omitempty"`
|
||||
// CanEditMessages Optional. True, if the administrator can edit messages of other users and can pin
|
||||
// messages; for channels only
|
||||
CanEditMessages *bool `json:"can_edit_messages,omitempty"`
|
||||
// CanPinMessages reports whether the member may pin messages.
|
||||
CanPinMessages *bool `json:"can_pin_messages,omitempty"`
|
||||
// CanManageTopics reports whether the member may manage forum topics.
|
||||
CanManageTopics *bool `json:"can_manage_topics,omitempty"` // Since: Bot API 6.3
|
||||
// CanManageDirectMessages Optional. True, if the administrator can manage direct messages of the channel
|
||||
// and decline suggested posts; for channels only
|
||||
CanManageDirectMessages *bool `json:"can_manage_direct_messages,omitempty"` // Since: Bot API 9.1
|
||||
CanManageTags *bool `json:"can_manage_tags,omitempty"` // Since: Bot API 9.5
|
||||
// CanManageTags Optional. True, if the administrator can edit the tags of regular members; for groups and
|
||||
// supergroups only. If omitted, defaults to the value of can_pin_messages.
|
||||
CanManageTags *bool `json:"can_manage_tags,omitempty"` // Since: Bot API 9.5
|
||||
|
||||
// UntilDate is the Unix time when restrictions expire; zero means forever.
|
||||
// Member
|
||||
UntilDate *int `json:"until_date,omitempty"`
|
||||
|
||||
// IsMember True, if the user is a member of the chat at the moment of the request
|
||||
// Restricted
|
||||
IsMember *bool `json:"is_member,omitempty"`
|
||||
CanSendMessages *bool `json:"can_send_messages,omitempty"`
|
||||
CanSendAudios *bool `json:"can_send_audios,omitempty"` // Since: Bot API 6.5
|
||||
CanSendDocuments *bool `json:"can_send_documents,omitempty"` // Since: Bot API 6.5
|
||||
CanSendPhotos *bool `json:"can_send_photos,omitempty"` // Since: Bot API 6.5
|
||||
CanSendVideos *bool `json:"can_send_videos,omitempty"` // Since: Bot API 6.5
|
||||
CanSendVideoNotes *bool `json:"can_send_video_notes,omitempty"` // Since: Bot API 6.5
|
||||
CanSendVoiceNotes *bool `json:"can_send_voice_notes,omitempty"` // Since: Bot API 6.5
|
||||
CanSendPolls *bool `json:"can_send_polls,omitempty"`
|
||||
IsMember *bool `json:"is_member,omitempty"`
|
||||
// CanSendMessages True, if the user is allowed to send text messages, rich messages, contacts, giveaways,
|
||||
// giveaway winners, invoices, locations and venues
|
||||
CanSendMessages *bool `json:"can_send_messages,omitempty"`
|
||||
// CanSendAudios True, if the user is allowed to send audios
|
||||
CanSendAudios *bool `json:"can_send_audios,omitempty"` // Since: Bot API 6.5
|
||||
// CanSendDocuments True, if the user is allowed to send documents
|
||||
CanSendDocuments *bool `json:"can_send_documents,omitempty"` // Since: Bot API 6.5
|
||||
// CanSendPhotos True, if the user is allowed to send photos
|
||||
CanSendPhotos *bool `json:"can_send_photos,omitempty"` // Since: Bot API 6.5
|
||||
// CanSendVideos True, if the user is allowed to send videos
|
||||
CanSendVideos *bool `json:"can_send_videos,omitempty"` // Since: Bot API 6.5
|
||||
// CanSendVideoNotes True, if the user is allowed to send video notes
|
||||
CanSendVideoNotes *bool `json:"can_send_video_notes,omitempty"` // Since: Bot API 6.5
|
||||
// CanSendVoiceNotes True, if the user is allowed to send voice notes
|
||||
CanSendVoiceNotes *bool `json:"can_send_voice_notes,omitempty"` // Since: Bot API 6.5
|
||||
// CanSendPolls True, if the user is allowed to send polls and checklists
|
||||
CanSendPolls *bool `json:"can_send_polls,omitempty"`
|
||||
// CanSendOtherMessages True, if the user is allowed to send animations, games, stickers and use inline bots
|
||||
CanSendOtherMessages *bool `json:"can_send_other_messages,omitempty"`
|
||||
// CanAddWebPagePreview True, if the user is allowed to add web page previews to their messages
|
||||
CanAddWebPagePreview *bool `json:"can_add_web_page_previews,omitempty"`
|
||||
CanReactToMessages *bool `json:"can_react_to_messages,omitempty"` // Since: Bot API 10.0
|
||||
CanEditTag *bool `json:"can_edit_tag,omitempty"` // Since: Bot API 9.5
|
||||
// CanReactToMessages True, if the user is allowed to react to messages
|
||||
CanReactToMessages *bool `json:"can_react_to_messages,omitempty"` // Since: Bot API 10.0
|
||||
// CanEditTag True, if the user is allowed to edit their own tag
|
||||
CanEditTag *bool `json:"can_edit_tag,omitempty"` // Since: Bot API 9.5
|
||||
}
|
||||
|
||||
// ChatBoostSource describes the source of a chat boost.
|
||||
// Since: Bot API 7.0
|
||||
// See https://core.telegram.org/bots/api#chatboostsource
|
||||
type ChatBoostSource struct {
|
||||
// Source identifies the source variant: premium, gift_code, or giveaway.
|
||||
Source string `json:"source"`
|
||||
User User `json:"user"`
|
||||
// User is the user responsible for the boost when supplied by the source variant.
|
||||
User User `json:"user"`
|
||||
|
||||
// GiveawayMessageID Identifier of a message in the chat with the giveaway; the message could have been
|
||||
// deleted already. May be 0 if the message isn't sent yet.
|
||||
// Giveaway
|
||||
GiveawayMessageID *int `json:"giveaway_message_id,omitempty"`
|
||||
PrizeStarCount *int `json:"prize_star_count,omitempty"`
|
||||
IsUnclaimed *bool `json:"is_unclaimed,omitempty"`
|
||||
GiveawayMessageID *int `json:"giveaway_message_id,omitempty"`
|
||||
// PrizeStarCount Optional. The number of Telegram Stars to be split between giveaway winners; for Telegram
|
||||
// Star giveaways only
|
||||
PrizeStarCount *int `json:"prize_star_count,omitempty"`
|
||||
// IsUnclaimed Optional. True, if the giveaway was completed, but there was no user to win the prize
|
||||
IsUnclaimed *bool `json:"is_unclaimed,omitempty"`
|
||||
}
|
||||
|
||||
// ChatBoost represents a boost added to a chat.
|
||||
// Since: Bot API 7.0
|
||||
// See https://core.telegram.org/bots/api#chatboost
|
||||
type ChatBoost struct {
|
||||
BoostID string `json:"boost_id"`
|
||||
AddDate int `json:"add_date"`
|
||||
ExpirationDate int `json:"expiration_date"`
|
||||
Source ChatBoostSource `json:"source"`
|
||||
// BoostID Unique identifier of the boost
|
||||
BoostID string `json:"boost_id"`
|
||||
// AddDate Point in time (Unix timestamp) when the chat was boosted
|
||||
AddDate int `json:"add_date"`
|
||||
// ExpirationDate Point in time (Unix timestamp) when the boost will automatically expire, unless the
|
||||
// booster's Telegram Premium subscription is prolonged
|
||||
ExpirationDate int `json:"expiration_date"`
|
||||
// Source Source of the added boost
|
||||
Source ChatBoostSource `json:"source"`
|
||||
}
|
||||
|
||||
// UserChatBoosts represents a list of boosts a user has given to a chat.
|
||||
// Since: Bot API 7.0
|
||||
// See https://core.telegram.org/bots/api#userchatboosts
|
||||
type UserChatBoosts struct {
|
||||
// Boosts The list of boosts added to the chat by the user
|
||||
Boosts []ChatBoost `json:"boosts"`
|
||||
}
|
||||
|
||||
// ChatBoostAdded describes a service message about a user boosting a chat.
|
||||
// Since: Bot API 7.1
|
||||
type ChatBoostAdded struct {
|
||||
// BoostCount Number of boosts added by the user
|
||||
BoostCount int `json:"boost_count"`
|
||||
}
|
||||
|
||||
// ChatBackground represents a chat background.
|
||||
// Since: Bot API 7.5
|
||||
type ChatBackground struct {
|
||||
// Type Type of the background
|
||||
Type BackgroundType `json:"type"`
|
||||
}
|
||||
|
||||
@@ -270,6 +471,8 @@ type ChatBackground struct {
|
||||
// Since: Bot API 9.4
|
||||
// See https://core.telegram.org/bots/api#chatownerleft
|
||||
type ChatOwnerLeft struct {
|
||||
// NewOwner Optional. The user who will become the new owner of the chat if the previous owner does not
|
||||
// return to the chat
|
||||
NewOwner *User `json:"new_owner,omitempty"`
|
||||
}
|
||||
|
||||
@@ -277,6 +480,7 @@ type ChatOwnerLeft struct {
|
||||
// Since: Bot API 9.4
|
||||
// See https://core.telegram.org/bots/api#chatownerchanged
|
||||
type ChatOwnerChanged struct {
|
||||
// NewOwner The new owner of the chat
|
||||
NewOwner User `json:"new_owner"`
|
||||
}
|
||||
|
||||
@@ -284,31 +488,61 @@ type ChatOwnerChanged struct {
|
||||
// Since: Bot API 6.0
|
||||
// See https://core.telegram.org/bots/api#chatadministratorrights
|
||||
type ChatAdministratorRights struct {
|
||||
IsAnonymous bool `json:"is_anonymous"`
|
||||
CanManageChat bool `json:"can_manage_chat"`
|
||||
CanDeleteMessages bool `json:"can_delete_messages"`
|
||||
// IsAnonymous True, if the user's presence in the chat is hidden
|
||||
IsAnonymous bool `json:"is_anonymous"`
|
||||
// CanManageChat True, if the administrator can access the chat event log, get boost list, see hidden
|
||||
// supergroup and channel members, report spam messages, ignore slow mode, and send messages to the chat
|
||||
// without paying Telegram Stars. Implied by any other administrator privilege.
|
||||
CanManageChat bool `json:"can_manage_chat"`
|
||||
// CanDeleteMessages True, if the administrator can delete messages of other users
|
||||
CanDeleteMessages bool `json:"can_delete_messages"`
|
||||
// CanManageVideoChats True, if the administrator can manage video chats
|
||||
CanManageVideoChats bool `json:"can_manage_video_chats"`
|
||||
CanRestrictMembers bool `json:"can_restrict_members"`
|
||||
CanPromoteMembers bool `json:"can_promote_members"`
|
||||
CanChangeInfo bool `json:"can_change_info"`
|
||||
CanInviteUsers bool `json:"can_invite_users"`
|
||||
CanPostStories bool `json:"can_post_stories"`
|
||||
CanEditStories bool `json:"can_edit_stories"`
|
||||
CanDeleteStories bool `json:"can_delete_stories"`
|
||||
// CanRestrictMembers True, if the administrator can restrict, ban or unban chat members, or access
|
||||
// supergroup statistics
|
||||
CanRestrictMembers bool `json:"can_restrict_members"`
|
||||
// CanPromoteMembers True, if the administrator can add new administrators with a subset of their own
|
||||
// privileges or demote administrators that they have promoted, directly or indirectly (promoted by
|
||||
// administrators that were appointed by the user)
|
||||
CanPromoteMembers bool `json:"can_promote_members"`
|
||||
// CanChangeInfo True, if the user is allowed to change the chat title, photo and other settings
|
||||
CanChangeInfo bool `json:"can_change_info"`
|
||||
// CanInviteUsers True, if the user is allowed to invite new users to the chat
|
||||
CanInviteUsers bool `json:"can_invite_users"`
|
||||
// CanPostStories True, if the administrator can post stories to the chat
|
||||
CanPostStories bool `json:"can_post_stories"`
|
||||
// CanEditStories True, if the administrator can edit stories posted by other users, post stories to the
|
||||
// chat page, pin chat stories, and access the chat's story archive
|
||||
CanEditStories bool `json:"can_edit_stories"`
|
||||
// CanDeleteStories True, if the administrator can delete stories posted by other users
|
||||
CanDeleteStories bool `json:"can_delete_stories"`
|
||||
|
||||
CanPostMessages *bool `json:"can_post_messages,omitempty"`
|
||||
CanEditMessages *bool `json:"can_edit_messages,omitempty"`
|
||||
CanPinMessages *bool `json:"can_pin_messages,omitempty"`
|
||||
CanManageTopics *bool `json:"can_manage_topics,omitempty"`
|
||||
// CanPostMessages Optional. True, if the administrator can post messages in the channel, approve suggested
|
||||
// posts, or access channel statistics; for channels only
|
||||
CanPostMessages *bool `json:"can_post_messages,omitempty"`
|
||||
// CanEditMessages Optional. True, if the administrator can edit messages of other users and can pin
|
||||
// messages; for channels only
|
||||
CanEditMessages *bool `json:"can_edit_messages,omitempty"`
|
||||
// CanPinMessages Optional. True, if the user is allowed to pin messages; for groups and supergroups only
|
||||
CanPinMessages *bool `json:"can_pin_messages,omitempty"`
|
||||
// CanManageTopics Optional. True, if the user is allowed to create, rename, close, and reopen forum topics;
|
||||
// for supergroups only
|
||||
CanManageTopics *bool `json:"can_manage_topics,omitempty"`
|
||||
// CanManageDirectMessages Optional. True, if the administrator can manage direct messages of the channel
|
||||
// and decline suggested posts; for channels only
|
||||
CanManageDirectMessages *bool `json:"can_manage_direct_messages,omitempty"`
|
||||
CanManageTags *bool `json:"can_manage_tags,omitempty"`
|
||||
// CanManageTags Optional. True, if the administrator can edit the tags of regular members; for groups and
|
||||
// supergroups only. If omitted, defaults to the value of can_pin_messages.
|
||||
CanManageTags *bool `json:"can_manage_tags,omitempty"`
|
||||
}
|
||||
|
||||
// ChatBoostUpdated represents a boost added to a chat or changed.
|
||||
// Since: Bot API 7.0
|
||||
// See https://core.telegram.org/bots/api#chatboostupdated
|
||||
type ChatBoostUpdated struct {
|
||||
Chat Chat `json:"chat"`
|
||||
// Chat Chat which was boosted
|
||||
Chat Chat `json:"chat"`
|
||||
// Boost Information about the chat boost
|
||||
Boost ChatBoost `json:"boost"`
|
||||
}
|
||||
|
||||
@@ -316,10 +550,14 @@ type ChatBoostUpdated struct {
|
||||
// Since: Bot API 7.0
|
||||
// See https://core.telegram.org/bots/api#chatboostremoved
|
||||
type ChatBoostRemoved struct {
|
||||
Chat Chat `json:"chat"`
|
||||
BoostID string `json:"boost_id"`
|
||||
RemoveDate int `json:"remove_date"`
|
||||
Source ChatBoostSource `json:"source"`
|
||||
// Chat Chat which was boosted
|
||||
Chat Chat `json:"chat"`
|
||||
// BoostID Unique identifier of the boost
|
||||
BoostID string `json:"boost_id"`
|
||||
// RemoveDate Point in time (Unix timestamp) when the boost was removed
|
||||
RemoveDate int `json:"remove_date"`
|
||||
// Source Source of the removed boost
|
||||
Source ChatBoostSource `json:"source"`
|
||||
}
|
||||
|
||||
// Community represents a group of chats.
|
||||
|
||||
+23
-2
@@ -14,6 +14,24 @@ var ErrPoolQueueFull = errors.New("worker pool queue full")
|
||||
// ErrPoolStopped reports that a request was submitted after the worker pool stopped.
|
||||
var ErrPoolStopped = errors.New("worker pool stopped")
|
||||
|
||||
// ErrPoolWorkerPanic reports a panic recovered while executing a worker-pool request.
|
||||
var ErrPoolWorkerPanic = errors.New("worker pool request panicked")
|
||||
|
||||
// ErrResponseTooLarge reports a Telegram API response larger than the safety limit.
|
||||
var ErrResponseTooLarge = errors.New("telegram API response is too large")
|
||||
|
||||
// ErrFileTooLarge reports a file download that exceeds the caller's limit.
|
||||
var ErrFileTooLarge = errors.New("telegram file exceeds size limit")
|
||||
|
||||
// ErrRichJSONDepth reports a rich-message JSON tree deeper than the decoder limit.
|
||||
var ErrRichJSONDepth = errors.New("rich-message JSON exceeds depth limit")
|
||||
|
||||
// ErrRichJSONNodes reports a rich-message JSON tree larger than the decoder limit.
|
||||
var ErrRichJSONNodes = errors.New("rich-message JSON exceeds node limit")
|
||||
|
||||
// ErrRetryLimit reports that a request exhausted its configured 429 retries.
|
||||
var ErrRetryLimit = errors.New("telegram retry limit reached")
|
||||
|
||||
// ErrRichMessageDraftUploadUnsupported reports a direct file upload attempted for a rich draft.
|
||||
//
|
||||
// Since: Bot API 10.2
|
||||
@@ -21,9 +39,12 @@ var ErrRichMessageDraftUploadUnsupported = errors.New("sendRichMessageDraft does
|
||||
|
||||
// ResponseError reports an unsuccessful Telegram API response.
|
||||
type ResponseError struct {
|
||||
Code int
|
||||
// Code is the Telegram API error code.
|
||||
Code int
|
||||
// Description is the human-readable Telegram API error description.
|
||||
Description string
|
||||
Parameters *ResponseParameters
|
||||
// Parameters contains additional recovery metadata such as retry_after.
|
||||
Parameters *ResponseParameters
|
||||
}
|
||||
|
||||
// Error returns the Telegram API error code and description.
|
||||
|
||||
+28
-9
@@ -5,8 +5,10 @@ import "context"
|
||||
// BaseForumTopic contains common fields for forum topic operations that require a chat ID and a message thread ID.
|
||||
// Since: Bot API 6.3
|
||||
type BaseForumTopic struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id"`
|
||||
// ChatID identifies the target supergroup.
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID identifies the target forum topic.
|
||||
MessageThreadID int `json:"message_thread_id"`
|
||||
}
|
||||
|
||||
// GetForumTopicIconStickers returns the list of custom emoji that can be used as a forum topic icon.
|
||||
@@ -30,10 +32,18 @@ func (api *API) GetForumTopicIconStickersWithContext(ctx context.Context) ([]Sti
|
||||
// Since: Bot API 6.3
|
||||
// See https://core.telegram.org/bots/api#createforumtopic
|
||||
type CreateForumTopic struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
Name string `json:"name"`
|
||||
IconColor ForumTopicIconColor `json:"icon_color"`
|
||||
IconCustomEmojiID string `json:"icon_custom_emoji_id"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target supergroup in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// Name Required. Topic name, 1-128 characters
|
||||
Name string `json:"name"`
|
||||
// IconColor Optional. Color of the topic icon in RGB format. Currently, must be one of 7322096 (0x6FB9F0),
|
||||
// 16766590 (0xFFD67E), 13338331 (0xCB86DB), 9367192 (0x8EEE98), 16749490 (0xFF93B2), or 16478047
|
||||
// (0xFB6F5F).
|
||||
IconColor ForumTopicIconColor `json:"icon_color"`
|
||||
// IconCustomEmojiID Optional. Unique identifier of the custom emoji shown as the topic icon. Use
|
||||
// getForumTopicIconStickers to get all allowed custom emoji identifiers.
|
||||
IconCustomEmojiID string `json:"icon_custom_emoji_id"`
|
||||
}
|
||||
|
||||
// CreateForumTopic creates a topic in a forum supergroup.
|
||||
@@ -59,7 +69,12 @@ func (api *API) CreateForumTopicWithContext(ctx context.Context, params CreateFo
|
||||
// See https://core.telegram.org/bots/api#editforumtopic
|
||||
type EditForumTopic struct {
|
||||
BaseForumTopic
|
||||
Name string `json:"name"`
|
||||
// Name Optional. New topic name, 0-128 characters. If not specified or empty, the current name of the topic
|
||||
// will be kept.
|
||||
Name string `json:"name"`
|
||||
// IconCustomEmojiID Optional. New unique identifier of the custom emoji shown as the topic icon. Use
|
||||
// getForumTopicIconStickers to get all allowed custom emoji identifiers. Pass an empty string to remove the
|
||||
// icon. If not specified, the current icon will be kept.
|
||||
IconCustomEmojiID string `json:"icon_custom_emoji_id"`
|
||||
}
|
||||
|
||||
@@ -156,6 +171,7 @@ func (api *API) UnpinAllForumTopicMessagesWithContext(ctx context.Context, param
|
||||
// BaseGeneralForumTopic contains common fields for general forum topic operations that require a chat ID.
|
||||
// Since: Bot API 6.4
|
||||
type BaseGeneralForumTopic struct {
|
||||
// ChatID identifies the target supergroup.
|
||||
ChatID int64 `json:"chat_id"`
|
||||
}
|
||||
|
||||
@@ -163,8 +179,11 @@ type BaseGeneralForumTopic struct {
|
||||
// Since: Bot API 6.4
|
||||
// See https://core.telegram.org/bots/api#editgeneralforumtopic
|
||||
type EditGeneralForumTopic struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
Name string `json:"name"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target supergroup in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// Name Required. New topic name, 1-128 characters
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
// EditGeneralForumTopic edits the name of the 'General' topic in a forum supergroup.
|
||||
|
||||
+22
-8
@@ -4,11 +4,17 @@ package tgapi
|
||||
// Since: Bot API 6.3
|
||||
// See https://core.telegram.org/bots/api#forumtopic
|
||||
type ForumTopic struct {
|
||||
MessageThreadID int `json:"message_thread_id"`
|
||||
Name string `json:"name"`
|
||||
IconColor int `json:"icon_color"`
|
||||
// MessageThreadID Unique identifier of the forum topic
|
||||
MessageThreadID int `json:"message_thread_id"`
|
||||
// Name Name of the topic
|
||||
Name string `json:"name"`
|
||||
// IconColor Color of the topic icon in RGB format
|
||||
IconColor int `json:"icon_color"`
|
||||
// IconCustomEmojiID Optional. Unique identifier of the custom emoji shown as the topic icon
|
||||
IconCustomEmojiID string `json:"icon_custom_emoji_id,omitempty"`
|
||||
IsNameImplicit bool `json:"is_name_implicit,omitempty"`
|
||||
// IsNameImplicit Optional. True, if the name of the topic wasn't specified explicitly by its creator and
|
||||
// likely needs to be changed by the bot
|
||||
IsNameImplicit bool `json:"is_name_implicit,omitempty"`
|
||||
}
|
||||
|
||||
// ForumTopicIconColor represents the color of a forum topic icon.
|
||||
@@ -25,16 +31,24 @@ const (
|
||||
// ForumTopicCreated represents a service message about a new forum topic created.
|
||||
// Since: Bot API 6.3
|
||||
type ForumTopicCreated struct {
|
||||
Name string `json:"name"`
|
||||
IconColor int `json:"icon_color"`
|
||||
// Name Name of the topic
|
||||
Name string `json:"name"`
|
||||
// IconColor Color of the topic icon in RGB format
|
||||
IconColor int `json:"icon_color"`
|
||||
// IconCustomEmojiID Optional. Unique identifier of the custom emoji shown as the topic icon
|
||||
IconCustomEmojiID string `json:"icon_custom_emoji_id,omitempty"`
|
||||
IsNameImplicit bool `json:"is_name_implicit,omitempty"`
|
||||
// IsNameImplicit Optional. True, if the name of the topic wasn't specified explicitly by its creator and
|
||||
// likely needs to be changed by the bot
|
||||
IsNameImplicit bool `json:"is_name_implicit,omitempty"`
|
||||
}
|
||||
|
||||
// ForumTopicEdited represents a service message about an edited forum topic.
|
||||
// Since: Bot API 6.4
|
||||
type ForumTopicEdited struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
// Name Optional. New name of the topic, if it was edited
|
||||
Name string `json:"name,omitempty"`
|
||||
// IconCustomEmojiID Optional. New identifier of the custom emoji shown as the topic icon, if it was edited;
|
||||
// an empty string if the icon was removed
|
||||
IconCustomEmojiID string `json:"icon_custom_emoji_id,omitempty"`
|
||||
}
|
||||
|
||||
|
||||
+52
-18
@@ -6,18 +6,37 @@ import "context"
|
||||
// Since: Bot API 2.2
|
||||
// See https://core.telegram.org/bots/api#sendgame
|
||||
type SendGame struct {
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot in the format
|
||||
// @username. Games can't be sent to channel direct messages chats and channel chats.
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
|
||||
// GameShortName Required. Short name of the game, serves as the unique identifier for the game. Set up your
|
||||
// games via @BotFather.
|
||||
GameShortName string `json:"game_short_name"`
|
||||
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *InlineKeyboardMarkup `json:"reply_markup,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. A JSON-serialized object for an inline keyboard. If empty, one 'Play game_title'
|
||||
// button will be shown. If not empty, the first button must launch the game.
|
||||
ReplyMarkup *InlineKeyboardMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendGame sends a game message.
|
||||
@@ -41,13 +60,23 @@ func (api *API) SendGameWithContext(ctx context.Context, params SendGame) (Messa
|
||||
// Since: Bot API 2.2
|
||||
// See https://core.telegram.org/bots/api#setgamescore
|
||||
type SetGameScore struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
Score int `json:"score"`
|
||||
Force bool `json:"force,omitempty"`
|
||||
DisableEditMessage bool `json:"disable_edit_message,omitempty"`
|
||||
ChatID int64 `json:"chat_id,omitempty"`
|
||||
MessageID int `json:"message_id,omitempty"`
|
||||
InlineMessageID string `json:"inline_message_id,omitempty"`
|
||||
// UserID Required. User identifier
|
||||
UserID int64 `json:"user_id"`
|
||||
// Score Required. New score, must be non-negative
|
||||
Score int `json:"score"`
|
||||
// Force Optional. Pass True if the high score is allowed to decrease. This can be useful when fixing
|
||||
// mistakes or banning cheaters.
|
||||
Force bool `json:"force,omitempty"`
|
||||
// DisableEditMessage Optional. Pass True if the game message should not be automatically edited to include
|
||||
// the current scoreboard
|
||||
DisableEditMessage bool `json:"disable_edit_message,omitempty"`
|
||||
// ChatID Optional. Required if inline_message_id is not specified. Unique identifier for the target chat.
|
||||
ChatID int64 `json:"chat_id,omitempty"`
|
||||
// MessageID Optional. Required if inline_message_id is not specified. Identifier of the sent message.
|
||||
MessageID int `json:"message_id,omitempty"`
|
||||
// InlineMessageID Optional. Required if chat_id and message_id are not specified. Identifier of the inline
|
||||
// message.
|
||||
InlineMessageID string `json:"inline_message_id,omitempty"`
|
||||
}
|
||||
|
||||
// SetGameScore sets a user's score in a game message.
|
||||
@@ -87,9 +116,14 @@ func (api *API) SetGameScoreWithContext(ctx context.Context, params SetGameScore
|
||||
// Since: Bot API 2.2
|
||||
// See https://core.telegram.org/bots/api#getgamehighscores
|
||||
type GetGameHighScores struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
ChatID int64 `json:"chat_id,omitempty"`
|
||||
MessageID int `json:"message_id,omitempty"`
|
||||
// UserID Required. Target user id
|
||||
UserID int64 `json:"user_id"`
|
||||
// ChatID Optional. Required if inline_message_id is not specified. Unique identifier for the target chat.
|
||||
ChatID int64 `json:"chat_id,omitempty"`
|
||||
// MessageID Optional. Required if inline_message_id is not specified. Identifier of the sent message.
|
||||
MessageID int `json:"message_id,omitempty"`
|
||||
// InlineMessageID Optional. Required if chat_id and message_id are not specified. Identifier of the inline
|
||||
// message.
|
||||
InlineMessageID string `json:"inline_message_id,omitempty"`
|
||||
}
|
||||
|
||||
|
||||
+19
-8
@@ -3,12 +3,20 @@ package tgapi
|
||||
// Game represents a game.
|
||||
// Since: Bot API 2.2
|
||||
type Game struct {
|
||||
Title string `json:"title"`
|
||||
Description string `json:"description"`
|
||||
Photo []PhotoSize `json:"photo"`
|
||||
Text string `json:"text,omitempty"`
|
||||
// Title Title of the game
|
||||
Title string `json:"title"`
|
||||
// Description Description of the game
|
||||
Description string `json:"description"`
|
||||
// Photo Photo that will be displayed in the game message in chats
|
||||
Photo []PhotoSize `json:"photo"`
|
||||
// Text Optional. Brief description of the game or high scores included in the game message. Can be
|
||||
// automatically edited to include current high scores for the game when the bot calls setGameScore, or
|
||||
// manually edited using editMessageText. 0-4096 characters.
|
||||
Text string `json:"text,omitempty"`
|
||||
// TextEntities Optional. Special entities that appear in text, such as usernames, URLs, bot commands, etc.
|
||||
TextEntities []MessageEntity `json:"text_entities,omitempty"`
|
||||
Animation *Animation `json:"animation,omitempty"`
|
||||
// Animation Optional. Animation that will be displayed in the game message in chats. Upload via BotFather.
|
||||
Animation *Animation `json:"animation,omitempty"`
|
||||
}
|
||||
|
||||
// CallbackGame is a placeholder for the future use of callback games.
|
||||
@@ -19,7 +27,10 @@ type CallbackGame struct{}
|
||||
// Since: Bot API 2.2
|
||||
// See https://core.telegram.org/bots/api#gamehighscore
|
||||
type GameHighScore struct {
|
||||
Position int `json:"position"`
|
||||
User User `json:"user"`
|
||||
Score int `json:"score"`
|
||||
// Position Position in high score table for the game
|
||||
Position int `json:"position"`
|
||||
// User User
|
||||
User User `json:"user"`
|
||||
// Score Score
|
||||
Score int `json:"score"`
|
||||
}
|
||||
|
||||
+36
-15
@@ -6,12 +6,22 @@ import "context"
|
||||
// Since: Bot API 1.7
|
||||
// See https://core.telegram.org/bots/api#answerinlinequery
|
||||
type AnswerInlineQuery struct {
|
||||
InlineQueryID string `json:"inline_query_id"`
|
||||
Results []InlineQueryResult `json:"results"`
|
||||
CacheTime int `json:"cache_time,omitempty"`
|
||||
IsPersonal bool `json:"is_personal,omitempty"`
|
||||
NextOffset string `json:"next_offset,omitempty"`
|
||||
Button *InlineQueryResultsButton `json:"button,omitempty"`
|
||||
// InlineQueryID Required. Unique identifier for the answered query
|
||||
InlineQueryID string `json:"inline_query_id"`
|
||||
// Results Required. A JSON-serialized Array of results for the inline query
|
||||
Results []InlineQueryResult `json:"results"`
|
||||
// CacheTime Optional. The maximum amount of time in seconds that the result of the inline query may be
|
||||
// cached on the server. Defaults to 300.
|
||||
CacheTime int `json:"cache_time,omitempty"`
|
||||
// IsPersonal Optional. Pass True if results may be cached on the server side only for the user that sent
|
||||
// the query. By default, results may be returned to any user who sends the same query.
|
||||
IsPersonal bool `json:"is_personal,omitempty"`
|
||||
// NextOffset Optional. Pass the offset that a client should send in the next query with the same text to
|
||||
// receive more results. Pass an empty string if there are no more results or if you don't support
|
||||
// pagination. Offset length can't exceed 64 bytes.
|
||||
NextOffset string `json:"next_offset,omitempty"`
|
||||
// Button Optional. A JSON-serialized object describing a button to be shown above inline query results
|
||||
Button *InlineQueryResultsButton `json:"button,omitempty"`
|
||||
}
|
||||
|
||||
// AnswerInlineQuery sends answers to an inline query.
|
||||
@@ -36,8 +46,10 @@ func (api *API) AnswerInlineQueryWithContext(ctx context.Context, params AnswerI
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#answerwebappquery
|
||||
type AnswerWebAppQuery struct {
|
||||
WebAppQueryID string `json:"web_app_query_id"`
|
||||
Result InlineQueryResult `json:"result"`
|
||||
// WebAppQueryID Required. Unique identifier for the query to be answered
|
||||
WebAppQueryID string `json:"web_app_query_id"`
|
||||
// Result Required. A JSON-serialized object describing the message to be sent
|
||||
Result InlineQueryResult `json:"result"`
|
||||
}
|
||||
|
||||
// AnswerWebAppQuery sets the result of a Web App interaction.
|
||||
@@ -61,12 +73,18 @@ func (api *API) AnswerWebAppQueryWithContext(ctx context.Context, params AnswerW
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#savepreparedinlinemessage
|
||||
type SavePreparedInlineMessage struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
Result InlineQueryResult `json:"result"`
|
||||
AllowUserChats bool `json:"allow_user_chats,omitempty"`
|
||||
AllowBotChats bool `json:"allow_bot_chats,omitempty"`
|
||||
AllowGroupChats bool `json:"allow_group_chats,omitempty"`
|
||||
AllowChannelChats bool `json:"allow_channel_chats,omitempty"`
|
||||
// UserID Required. Unique identifier of the target user that can use the prepared message
|
||||
UserID int64 `json:"user_id"`
|
||||
// Result Required. A JSON-serialized object describing the message to be sent
|
||||
Result InlineQueryResult `json:"result"`
|
||||
// AllowUserChats Optional. Pass True if the message can be sent to private chats with users
|
||||
AllowUserChats bool `json:"allow_user_chats,omitempty"`
|
||||
// AllowBotChats Optional. Pass True if the message can be sent to private chats with bots
|
||||
AllowBotChats bool `json:"allow_bot_chats,omitempty"`
|
||||
// AllowGroupChats Optional. Pass True if the message can be sent to group and supergroup chats
|
||||
AllowGroupChats bool `json:"allow_group_chats,omitempty"`
|
||||
// AllowChannelChats Optional. Pass True if the message can be sent to channel chats
|
||||
AllowChannelChats bool `json:"allow_channel_chats,omitempty"`
|
||||
}
|
||||
|
||||
// SavePreparedInlineMessage stores a prepared message for Mini App users.
|
||||
@@ -90,7 +108,10 @@ func (api *API) SavePreparedInlineMessageWithContext(ctx context.Context, params
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#savepreparedkeyboardbutton
|
||||
type SavePreparedKeyboardButton struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
// UserID Required. Unique identifier of the target user that can use the button
|
||||
UserID int64 `json:"user_id"`
|
||||
// Button Required. A JSON-serialized object describing the button to be saved. The button must be of the
|
||||
// type request_users, request_chat, or request_managed_bot.
|
||||
Button KeyboardButton `json:"button"`
|
||||
}
|
||||
|
||||
|
||||
+23
-5
@@ -9,9 +9,21 @@ type InlineQueryResult map[string]any
|
||||
// Since: Bot API 6.3
|
||||
// See https://core.telegram.org/bots/api#inlinequeryresultsbutton
|
||||
type InlineQueryResultsButton struct {
|
||||
Text string `json:"text"`
|
||||
WebApp *WebAppInfo `json:"web_app,omitempty"`
|
||||
StartParameter string `json:"start_parameter,omitempty"`
|
||||
// Text Label text on the button
|
||||
Text string `json:"text"`
|
||||
// WebApp Optional. Description of the Web App that will be launched when the user presses the button. The
|
||||
// Web App will be able to switch back to the inline mode using the method switchInlineQuery inside the Web
|
||||
// App.
|
||||
WebApp *WebAppInfo `json:"web_app,omitempty"`
|
||||
// StartParameter Optional. Deep-linking parameter for the /start message sent to the bot when a user
|
||||
// presses the button. 1-64 characters, only A-Z, a-z, 0-9, _ and - are allowed. Example: An inline bot that
|
||||
// sends YouTube videos can ask the user to connect the bot to their YouTube account to adapt search results
|
||||
// accordingly. To do this, it displays a 'Connect your YouTube account' button above the results, or even
|
||||
// before showing any. The user presses the button, switches to a private chat with the bot and, in doing
|
||||
// so, passes a start parameter that instructs the bot to return an OAuth link. Once done, the bot can offer
|
||||
// a switch_inline button so that the user can easily return to the chat where they wanted to use the bot's
|
||||
// inline capabilities.
|
||||
StartParameter string `json:"start_parameter,omitempty"`
|
||||
}
|
||||
|
||||
// InputRichMessageContent represents the content of a rich message to be
|
||||
@@ -28,6 +40,8 @@ type InputRichMessageContent struct {
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#sentwebappmessage
|
||||
type SentWebAppMessage struct {
|
||||
// InlineMessageID Optional. Identifier of the sent inline message. Available only if there is an inline
|
||||
// keyboard attached to the message.
|
||||
InlineMessageID string `json:"inline_message_id,omitempty"`
|
||||
}
|
||||
|
||||
@@ -35,13 +49,17 @@ type SentWebAppMessage struct {
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#preparedinlinemessage
|
||||
type PreparedInlineMessage struct {
|
||||
ID string `json:"id"`
|
||||
ExpirationDate int `json:"expiration_date"`
|
||||
// ID Unique identifier of the prepared message
|
||||
ID string `json:"id"`
|
||||
// ExpirationDate Expiration date of the prepared message, in Unix time. Expired prepared messages can no
|
||||
// longer be used.
|
||||
ExpirationDate int `json:"expiration_date"`
|
||||
}
|
||||
|
||||
// PreparedKeyboardButton describes a prepared keyboard button.
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#preparedkeyboardbutton
|
||||
type PreparedKeyboardButton struct {
|
||||
// ID Unique identifier of the keyboard button
|
||||
ID string `json:"id"`
|
||||
}
|
||||
|
||||
+694
-237
File diff suppressed because it is too large
Load Diff
+739
-252
File diff suppressed because it is too large
Load Diff
+79
-9
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"net/http"
|
||||
|
||||
"git.scuroneko.dev/scuroneko/laniakea/utils"
|
||||
@@ -12,9 +13,24 @@ import (
|
||||
// UpdateParams holds parameters for the getUpdates method.
|
||||
// See https://core.telegram.org/bots/api#getupdates
|
||||
type UpdateParams struct {
|
||||
Offset *int `json:"offset,omitempty"`
|
||||
Limit *int `json:"limit,omitempty"`
|
||||
Timeout *int `json:"timeout,omitempty"`
|
||||
// Offset Optional. Identifier of the first update to be returned. Must be greater by one than the highest
|
||||
// among the identifiers of previously received updates. By default, updates starting with the earliest
|
||||
// unconfirmed update are returned. An update is considered confirmed as soon as getUpdates is called with
|
||||
// an offset higher than its update_id. The negative offset can be specified to retrieve updates starting
|
||||
// from -offset update from the end of the updates queue. All previous updates will be forgotten.
|
||||
Offset *int `json:"offset,omitempty"`
|
||||
// Limit Optional. Limits the number of updates to be retrieved. Values between 1-100 are accepted. Defaults
|
||||
// to 100.
|
||||
Limit *int `json:"limit,omitempty"`
|
||||
// Timeout Optional. Timeout in seconds for long polling. Defaults to 0, i.e. usual short polling. Should be
|
||||
// positive, short polling should be used for testing purposes only.
|
||||
Timeout *int `json:"timeout,omitempty"`
|
||||
// AllowedUpdates Optional. A JSON-serialized list of the update types you want your bot to receive. For
|
||||
// example, specify ["message", "edited_channel_post", "callback_query"] to only receive updates of these
|
||||
// types. See Update for a complete list of available update types. Specify an empty list to receive all
|
||||
// update types except chat_member, message_reaction, and message_reaction_count (default). If not
|
||||
// specified, the previous setting will be used. Please note that this parameter doesn't affect updates
|
||||
// created before the call to getUpdates, so unwanted updates may be received for a short period of time.
|
||||
AllowedUpdates []UpdateType `json:"allowed_updates,omitempty"`
|
||||
}
|
||||
|
||||
@@ -36,6 +52,7 @@ func (api *API) GetMeWithContext(ctx context.Context) (User, error) {
|
||||
// GetManagedBotToken holds parameters for the getManagedBotToken method.
|
||||
// See https://core.telegram.org/bots/api#getmanagedbottoken
|
||||
type GetManagedBotToken struct {
|
||||
// UserID Required. User identifier of the managed bot whose token will be returned
|
||||
UserID int64 `json:"user_id"`
|
||||
}
|
||||
|
||||
@@ -57,6 +74,7 @@ func (api *API) GetManagedBotTokenWithContext(ctx context.Context, params GetMan
|
||||
// ReplaceManagedBotToken holds parameters for the replaceManagedBotToken method.
|
||||
// See https://core.telegram.org/bots/api#replacemanagedbottoken
|
||||
type ReplaceManagedBotToken struct {
|
||||
// UserID Required. User identifier of the managed bot whose token will be replaced
|
||||
UserID int64 `json:"user_id"`
|
||||
}
|
||||
|
||||
@@ -126,12 +144,29 @@ func (api *API) GetUpdatesWithContext(ctx context.Context, params UpdateParams)
|
||||
// To upload a self-signed certificate, use Uploader.SetWebhook.
|
||||
// See https://core.telegram.org/bots/api#setwebhook
|
||||
type SetWebhook struct {
|
||||
URL string `json:"url"`
|
||||
IPAddress string `json:"ip_address,omitempty"`
|
||||
MaxConnections int8 `json:"max_connections,omitempty"`
|
||||
AllowedUpdates []UpdateType `json:"allowed_updates,omitempty"`
|
||||
DropPendingUpdates bool `json:"drop_pending_updates,omitempty"`
|
||||
SecretToken string `json:"secret_token,omitempty"`
|
||||
// URL Required. HTTPS URL to send updates to. Use an empty string to remove webhook integration.
|
||||
URL string `json:"url"`
|
||||
// IPAddress Optional. The fixed IP address which will be used to send webhook requests instead of the IP
|
||||
// address resolved through DNS
|
||||
IPAddress string `json:"ip_address,omitempty"`
|
||||
// MaxConnections Optional. The maximum allowed number of simultaneous HTTPS connections to the webhook for
|
||||
// update delivery, 1-100. Defaults to 40. Use lower values to limit the load on your bot's server, and
|
||||
// higher values to increase your bot's throughput.
|
||||
MaxConnections int8 `json:"max_connections,omitempty"`
|
||||
// AllowedUpdates Optional. A JSON-serialized list of the update types you want your bot to receive. For
|
||||
// example, specify ["message", "edited_channel_post", "callback_query"] to only receive updates of these
|
||||
// types. See Update for a complete list of available update types. Specify an empty list to receive all
|
||||
// update types except chat_member, message_reaction, and message_reaction_count (default). If not
|
||||
// specified, the previous setting will be used. Please note that this parameter doesn't affect updates
|
||||
// created before the call to the setWebhook, so unwanted updates may be received for a short period of
|
||||
// time.
|
||||
AllowedUpdates []UpdateType `json:"allowed_updates,omitempty"`
|
||||
// DropPendingUpdates Optional. Pass True to drop all pending updates
|
||||
DropPendingUpdates bool `json:"drop_pending_updates,omitempty"`
|
||||
// SecretToken Optional. A secret token to be sent in a header “X-Telegram-Bot-Api-Secret-Token” in
|
||||
// every webhook request, 1-256 characters. Only characters A-Z, a-z, 0-9, _ and - are allowed. The header
|
||||
// is useful to ensure that the request comes from a webhook set by you.
|
||||
SecretToken string `json:"secret_token,omitempty"`
|
||||
}
|
||||
|
||||
// SetWebhook sets a webhook URL for incoming updates.
|
||||
@@ -155,6 +190,7 @@ func (api *API) SetWebhookWithContext(ctx context.Context, params SetWebhook) (b
|
||||
// DeleteWebhook holds parameters for the deleteWebhook method.
|
||||
// See https://core.telegram.org/bots/api#deletewebhook
|
||||
type DeleteWebhook struct {
|
||||
// DropPendingUpdates Optional. Pass True to drop all pending updates
|
||||
DropPendingUpdates bool `json:"drop_pending_updates,omitempty"`
|
||||
}
|
||||
|
||||
@@ -192,6 +228,7 @@ func (api *API) GetWebhookInfoWithContext(ctx context.Context) (WebhookInfo, err
|
||||
// GetFile holds parameters for the getFile method.
|
||||
// See https://core.telegram.org/bots/api#getfile
|
||||
type GetFile struct {
|
||||
// FileID Required. File identifier to get information about
|
||||
FileID string `json:"file_id"`
|
||||
}
|
||||
|
||||
@@ -213,6 +250,8 @@ func (api *API) GetFileWithContext(ctx context.Context, params GetFile) (File, e
|
||||
// GetFileByLink downloads a file from Telegram's file server using the provided file link.
|
||||
// The link is usually obtained from File.FilePath.
|
||||
// For large files, prefer OpenFileByLink or OpenFileByLinkWithContext to stream the response body.
|
||||
// This unbounded helper is retained for v1 compatibility and is subject to change in v2;
|
||||
// prefer GetFileByLinkLimit for untrusted or potentially large files.
|
||||
// See https://core.telegram.org/bots/api#file
|
||||
func (api *API) GetFileByLink(link string) ([]byte, error) {
|
||||
return api.getFileByLink(context.Background(), link)
|
||||
@@ -226,6 +265,37 @@ func (api *API) GetFileByLinkWithContext(ctx context.Context, link string) ([]by
|
||||
return api.getFileByLink(ctx, link)
|
||||
}
|
||||
|
||||
// GetFileByLinkLimit downloads at most maxBytes from Telegram's file server.
|
||||
// It returns ErrFileTooLarge when the response exceeds the limit.
|
||||
func (api *API) GetFileByLinkLimit(link string, maxBytes int64) ([]byte, error) {
|
||||
return api.GetFileByLinkLimitWithContext(context.Background(), link, maxBytes)
|
||||
}
|
||||
|
||||
// GetFileByLinkLimitWithContext is the context-aware variant of GetFileByLinkLimit.
|
||||
func (api *API) GetFileByLinkLimitWithContext(ctx context.Context, link string, maxBytes int64) ([]byte, error) {
|
||||
if maxBytes < 0 {
|
||||
return nil, fmt.Errorf("maximum file size must not be negative: %d", maxBytes)
|
||||
}
|
||||
body, err := api.openFileByLink(ctx, link)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer func() { _ = body.Close() }()
|
||||
|
||||
readLimit := maxBytes
|
||||
if readLimit < math.MaxInt64 {
|
||||
readLimit++
|
||||
}
|
||||
data, err := io.ReadAll(io.LimitReader(body, readLimit))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if int64(len(data)) > maxBytes {
|
||||
return nil, ErrFileTooLarge
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
// OpenFileByLink opens a streaming response body for a file hosted on Telegram's file server.
|
||||
// The caller must close the returned ReadCloser.
|
||||
// See https://core.telegram.org/bots/api#file
|
||||
|
||||
@@ -2,6 +2,7 @@ package tgapi
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
@@ -109,6 +110,25 @@ func TestGetFileByLinkReturnsHTTPStatusError(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetFileByLinkLimitRejectsOversizedResponse(t *testing.T) {
|
||||
api := NewAPI(
|
||||
NewAPIOpts("token").
|
||||
SetAPIURL("https://example.test").
|
||||
SetHTTPClient(&http.Client{Transport: roundTripFunc(func(_ *http.Request) (*http.Response, error) {
|
||||
return &http.Response{
|
||||
StatusCode: http.StatusOK,
|
||||
Body: io.NopCloser(strings.NewReader("12345")),
|
||||
}, nil
|
||||
})}),
|
||||
)
|
||||
defer func() { _ = api.Close() }()
|
||||
|
||||
_, err := api.GetFileByLinkLimit("files/report.txt", 4)
|
||||
if !errors.Is(err, ErrFileTooLarge) {
|
||||
t.Fatalf("expected ErrFileTooLarge, got %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetUpdatesOmitsAllowedUpdatesWhenEmpty(t *testing.T) {
|
||||
var gotBody map[string]any
|
||||
|
||||
|
||||
@@ -6,7 +6,9 @@ import "context"
|
||||
// Since: Bot API 4.0
|
||||
// See https://core.telegram.org/bots/api#setpassportdataerrors
|
||||
type SetPassportDataErrors struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
// UserID Required. User identifier
|
||||
UserID int64 `json:"user_id"`
|
||||
// Errors Required. A JSON-serialized Array describing the errors
|
||||
Errors []PassportElementError `json:"errors"`
|
||||
}
|
||||
|
||||
|
||||
+71
-21
@@ -3,17 +3,25 @@ package tgapi
|
||||
// PassportData contains information about Telegram Passport data shared with the bot.
|
||||
// Since: Bot API 4.0
|
||||
type PassportData struct {
|
||||
Data []EncryptedPassportElement `json:"data"`
|
||||
Credentials EncryptedCredentials `json:"credentials"`
|
||||
// Data Array with information about documents and other Telegram Passport elements that was shared with the
|
||||
// bot
|
||||
Data []EncryptedPassportElement `json:"data"`
|
||||
// Credentials Encrypted credentials required to decrypt the data
|
||||
Credentials EncryptedCredentials `json:"credentials"`
|
||||
}
|
||||
|
||||
// PassportFile represents a file uploaded to Telegram Passport.
|
||||
// Since: Bot API 4.0
|
||||
type PassportFile struct {
|
||||
FileID string `json:"file_id"`
|
||||
// FileID Identifier for this file, which can be used to download or reuse the file
|
||||
FileID string `json:"file_id"`
|
||||
// FileUniqueID Unique identifier for this file, which is supposed to be the same over time and for
|
||||
// different bots. Can't be used to download or reuse the file.
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
FileSize int64 `json:"file_size"`
|
||||
FileDate int64 `json:"file_date"`
|
||||
// FileSize File size in bytes
|
||||
FileSize int64 `json:"file_size"`
|
||||
// FileDate Unix time when the file was uploaded
|
||||
FileDate int64 `json:"file_date"`
|
||||
}
|
||||
|
||||
// PassportElementType represents the type of a Telegram Passport element.
|
||||
@@ -51,23 +59,57 @@ const (
|
||||
// EncryptedPassportElement contains information about documents or other Telegram Passport elements.
|
||||
// Since: Bot API 4.0
|
||||
type EncryptedPassportElement struct {
|
||||
Type PassportElementType `json:"type"`
|
||||
Data string `json:"data,omitempty"`
|
||||
PhoneNumber string `json:"phone_number,omitempty"`
|
||||
Email string `json:"email,omitempty"`
|
||||
Files []PassportFile `json:"files,omitempty"`
|
||||
FrontSide *PassportFile `json:"front_side,omitempty"`
|
||||
ReverseSide *PassportFile `json:"reverse_side,omitempty"`
|
||||
Selfie *PassportFile `json:"selfie,omitempty"`
|
||||
Translation *PassportFile `json:"translation,omitempty"`
|
||||
Hash string `json:"hash,omitempty"`
|
||||
// Type Element type. One of “personal_details”, “passport”, “driver_license”,
|
||||
// “identity_card”, “internal_passport”, “address”, “utility_bill”, “bank_statement”,
|
||||
// “rental_agreement”, “passport_registration”, “temporary_registration”, “phone_number”,
|
||||
// “email”.
|
||||
Type PassportElementType `json:"type"`
|
||||
// Data Optional. Base64-encoded encrypted Telegram Passport element data provided by the user; available
|
||||
// only for “personal_details”, “passport”, “driver_license”, “identity_card”,
|
||||
// “internal_passport” and “address” types. Can be decrypted and verified using the accompanying
|
||||
// EncryptedCredentials.
|
||||
Data string `json:"data,omitempty"`
|
||||
// PhoneNumber Optional. User's verified phone number; available only for “phone_number” type
|
||||
PhoneNumber string `json:"phone_number,omitempty"`
|
||||
// Email Optional. User's verified email address; available only for “email” type
|
||||
Email string `json:"email,omitempty"`
|
||||
// Files Optional. Array of encrypted files with documents provided by the user; available only for
|
||||
// “utility_bill”, “bank_statement”, “rental_agreement”, “passport_registration” and
|
||||
// “temporary_registration” types. Files can be decrypted and verified using the accompanying
|
||||
// EncryptedCredentials.
|
||||
Files []PassportFile `json:"files,omitempty"`
|
||||
// FrontSide Optional. Encrypted file with the front side of the document, provided by the user; available
|
||||
// only for “passport”, “driver_license”, “identity_card” and “internal_passport”. The file
|
||||
// can be decrypted and verified using the accompanying EncryptedCredentials.
|
||||
FrontSide *PassportFile `json:"front_side,omitempty"`
|
||||
// ReverseSide Optional. Encrypted file with the reverse side of the document, provided by the user;
|
||||
// available only for “driver_license” and “identity_card”. The file can be decrypted and verified
|
||||
// using the accompanying EncryptedCredentials.
|
||||
ReverseSide *PassportFile `json:"reverse_side,omitempty"`
|
||||
// Selfie Optional. Encrypted file with the selfie of the user holding a document, provided by the user;
|
||||
// available if requested for “passport”, “driver_license”, “identity_card” and
|
||||
// “internal_passport”. The file can be decrypted and verified using the accompanying
|
||||
// EncryptedCredentials.
|
||||
Selfie *PassportFile `json:"selfie,omitempty"`
|
||||
// Translation Optional. Array of encrypted files with translated versions of documents provided by the
|
||||
// user; available if requested for “passport”, “driver_license”, “identity_card”,
|
||||
// “internal_passport”, “utility_bill”, “bank_statement”, “rental_agreement”,
|
||||
// “passport_registration” and “temporary_registration” types. Files can be decrypted and verified
|
||||
// using the accompanying EncryptedCredentials.
|
||||
Translation *PassportFile `json:"translation,omitempty"`
|
||||
// Hash Base64-encoded element hash for using in PassportElementErrorUnspecified
|
||||
Hash string `json:"hash,omitempty"`
|
||||
}
|
||||
|
||||
// EncryptedCredentials contains data required for decrypting and authenticating EncryptedPassportElement.
|
||||
// Since: Bot API 4.0
|
||||
type EncryptedCredentials struct {
|
||||
Data string `json:"data"`
|
||||
Hash string `json:"hash"`
|
||||
// Data Base64-encoded encrypted JSON-serialized data with unique user's payload, data hashes and secrets
|
||||
// required for EncryptedPassportElement decryption and authentication
|
||||
Data string `json:"data"`
|
||||
// Hash Base64-encoded data hash for data authentication
|
||||
Hash string `json:"hash"`
|
||||
// Secret Base64-encoded secret, encrypted with the bot's public RSA key, required for data decryption
|
||||
Secret string `json:"secret"`
|
||||
}
|
||||
|
||||
@@ -75,16 +117,24 @@ type EncryptedCredentials struct {
|
||||
// Since: Bot API 4.0
|
||||
// See https://core.telegram.org/bots/api#passportelementerror
|
||||
type PassportElementError struct {
|
||||
Source string `json:"source"`
|
||||
Type PassportElementType `json:"type"`
|
||||
// Source identifies the source of the passport validation error.
|
||||
Source string `json:"source"`
|
||||
// Type identifies the Telegram Passport element type with the error.
|
||||
Type PassportElementType `json:"type"`
|
||||
|
||||
// FieldName Name of the data field which has the error
|
||||
FieldName string `json:"field_name,omitempty"`
|
||||
DataHash string `json:"data_hash,omitempty"`
|
||||
// DataHash Base64-encoded data hash
|
||||
DataHash string `json:"data_hash,omitempty"`
|
||||
|
||||
FileHash string `json:"file_hash,omitempty"`
|
||||
// FileHash is the base64-encoded hash of the file that contains the error.
|
||||
FileHash string `json:"file_hash,omitempty"`
|
||||
// FileHashes List of base64-encoded file hashes
|
||||
FileHashes []string `json:"file_hashes,omitempty"`
|
||||
|
||||
// ElementHash Base64-encoded element hash
|
||||
ElementHash string `json:"element_hash,omitempty"`
|
||||
|
||||
// Message Error message
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
+181
-56
@@ -6,40 +6,104 @@ import "context"
|
||||
// Since: Bot API 3.0
|
||||
// See https://core.telegram.org/bots/api#sendinvoice
|
||||
type SendInvoice struct {
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
|
||||
Title string `json:"title"`
|
||||
Description string `json:"description"`
|
||||
Payload string `json:"payload"`
|
||||
ProviderToken string `json:"provider_token,omitempty"`
|
||||
Currency string `json:"currency"`
|
||||
Prices []LabeledPrice `json:"prices"`
|
||||
// Title Required. Product name, 1-32 characters
|
||||
Title string `json:"title"`
|
||||
// Description Required. Product description, 1-255 characters
|
||||
Description string `json:"description"`
|
||||
// Payload Required. Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use
|
||||
// it for your internal processes.
|
||||
Payload string `json:"payload"`
|
||||
// ProviderToken Optional. Payment provider token, obtained via @BotFather. Pass an empty string for
|
||||
// payments in Telegram Stars.
|
||||
ProviderToken string `json:"provider_token,omitempty"`
|
||||
// Currency Required. Three-letter ISO 4217 currency code, see more on currencies. Pass “XTR” for
|
||||
// payments in Telegram Stars.
|
||||
Currency string `json:"currency"`
|
||||
// Prices Required. Price breakdown, a JSON-serialized list of components (e.g. product price, tax,
|
||||
// discount, delivery cost, delivery tax, bonus, etc.). Must contain exactly one item for payments in
|
||||
// Telegram Stars.
|
||||
Prices []LabeledPrice `json:"prices"`
|
||||
|
||||
MaxTipAmount int `json:"max_tip_amount,omitempty"`
|
||||
SuggestedTipAmounts []int `json:"suggested_tip_amounts,omitempty"`
|
||||
StartParameter string `json:"start_parameter,omitempty"`
|
||||
ProviderData string `json:"provider_data,omitempty"`
|
||||
PhotoURL string `json:"photo_url,omitempty"`
|
||||
PhotoSize int `json:"photo_size,omitempty"`
|
||||
PhotoWidth int `json:"photo_width,omitempty"`
|
||||
PhotoHeight int `json:"photo_height,omitempty"`
|
||||
NeedName bool `json:"need_name,omitempty"`
|
||||
NeedPhoneNumber bool `json:"need_phone_number,omitempty"`
|
||||
NeedEmail bool `json:"need_email,omitempty"`
|
||||
NeedShippingAddress bool `json:"need_shipping_address,omitempty"`
|
||||
SendPhoneToProvider bool `json:"send_phone_number_to_provider,omitempty"`
|
||||
SendEmailToProvider bool `json:"send_email_to_provider,omitempty"`
|
||||
IsFlexible bool `json:"is_flexible,omitempty"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// MaxTipAmount Optional. The maximum accepted amount for tips in the smallest units of the currency
|
||||
// (integer, not float/double). For example, for a maximum tip of US$ 1.45 pass max_tip_amount = 145. See
|
||||
// the exp parameter in currencies.json, it shows the number of digits past the decimal point for each
|
||||
// currency (2 for the majority of currencies). Defaults to 0. Not supported for payments in Telegram Stars.
|
||||
MaxTipAmount int `json:"max_tip_amount,omitempty"`
|
||||
// SuggestedTipAmounts Optional. A JSON-serialized Array of suggested amounts of tips in the smallest units
|
||||
// of the currency (integer, not float/double). At most 4 suggested tip amounts can be specified. The
|
||||
// suggested tip amounts must be positive, passed in a strictly increased order and must not exceed
|
||||
// max_tip_amount.
|
||||
SuggestedTipAmounts []int `json:"suggested_tip_amounts,omitempty"`
|
||||
// StartParameter Optional. Unique deep-linking parameter. If left empty, forwarded copies of the sent
|
||||
// message will have a Pay button, allowing multiple users to pay directly from the forwarded message, using
|
||||
// the same invoice. If non-empty, forwarded copies of the sent message will have a URL button with a deep
|
||||
// link to the bot (instead of a Pay button), with the value used as the start parameter.
|
||||
StartParameter string `json:"start_parameter,omitempty"`
|
||||
// ProviderData Optional. JSON-serialized data about the invoice, which will be shared with the payment
|
||||
// provider. A detailed description of required fields should be provided by the payment provider.
|
||||
ProviderData string `json:"provider_data,omitempty"`
|
||||
// PhotoURL Optional. URL of the product photo for the invoice. Can be a photo of the goods or a marketing
|
||||
// image for a service. People like it better when they see what they are paying for.
|
||||
PhotoURL string `json:"photo_url,omitempty"`
|
||||
// PhotoSize Optional. Photo size in bytes
|
||||
PhotoSize int `json:"photo_size,omitempty"`
|
||||
// PhotoWidth Optional. Photo width
|
||||
PhotoWidth int `json:"photo_width,omitempty"`
|
||||
// PhotoHeight Optional. Photo height
|
||||
PhotoHeight int `json:"photo_height,omitempty"`
|
||||
// NeedName Optional. Pass True if you require the user's full name to complete the order. Ignored for
|
||||
// payments in Telegram Stars.
|
||||
NeedName bool `json:"need_name,omitempty"`
|
||||
// NeedPhoneNumber Optional. Pass True if you require the user's phone number to complete the order. Ignored
|
||||
// for payments in Telegram Stars.
|
||||
NeedPhoneNumber bool `json:"need_phone_number,omitempty"`
|
||||
// NeedEmail Optional. Pass True if you require the user's email address to complete the order. Ignored for
|
||||
// payments in Telegram Stars.
|
||||
NeedEmail bool `json:"need_email,omitempty"`
|
||||
// NeedShippingAddress Optional. Pass True if you require the user's shipping address to complete the order.
|
||||
// Ignored for payments in Telegram Stars.
|
||||
NeedShippingAddress bool `json:"need_shipping_address,omitempty"`
|
||||
// SendPhoneToProvider Optional. Pass True if the user's phone number should be sent to the provider.
|
||||
// Ignored for payments in Telegram Stars.
|
||||
SendPhoneToProvider bool `json:"send_phone_number_to_provider,omitempty"`
|
||||
// SendEmailToProvider Optional. Pass True if the user's email address should be sent to the provider.
|
||||
// Ignored for payments in Telegram Stars.
|
||||
SendEmailToProvider bool `json:"send_email_to_provider,omitempty"`
|
||||
// IsFlexible Optional. Pass True if the final price depends on the shipping method. Ignored for payments in
|
||||
// Telegram Stars.
|
||||
IsFlexible bool `json:"is_flexible,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *InlineKeyboardMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. A JSON-serialized object for an inline keyboard. If empty, one 'Pay total price'
|
||||
// button will be shown. If not empty, the first button must be a Pay button.
|
||||
ReplyMarkup *InlineKeyboardMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendInvoice sends an invoice.
|
||||
@@ -63,30 +127,77 @@ func (api *API) SendInvoiceWithContext(ctx context.Context, params SendInvoice)
|
||||
// Since: Bot API 6.1
|
||||
// See https://core.telegram.org/bots/api#createinvoicelink
|
||||
type CreateInvoiceLink struct {
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the link
|
||||
// will be created. For payments in Telegram Stars only.
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
|
||||
Title string `json:"title"`
|
||||
Description string `json:"description"`
|
||||
Payload string `json:"payload"`
|
||||
ProviderToken string `json:"provider_token,omitempty"`
|
||||
Currency string `json:"currency"`
|
||||
Prices []LabeledPrice `json:"prices"`
|
||||
// Title Required. Product name, 1-32 characters
|
||||
Title string `json:"title"`
|
||||
// Description Required. Product description, 1-255 characters
|
||||
Description string `json:"description"`
|
||||
// Payload Required. Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use
|
||||
// it for your internal processes.
|
||||
Payload string `json:"payload"`
|
||||
// ProviderToken Optional. Payment provider token, obtained via @BotFather. Pass an empty string for
|
||||
// payments in Telegram Stars.
|
||||
ProviderToken string `json:"provider_token,omitempty"`
|
||||
// Currency Required. Three-letter ISO 4217 currency code, see more on currencies. Pass “XTR” for
|
||||
// payments in Telegram Stars.
|
||||
Currency string `json:"currency"`
|
||||
// Prices Required. Price breakdown, a JSON-serialized list of components (e.g. product price, tax,
|
||||
// discount, delivery cost, delivery tax, bonus, etc.). Must contain exactly one item for payments in
|
||||
// Telegram Stars.
|
||||
Prices []LabeledPrice `json:"prices"`
|
||||
|
||||
SubscriptionPeriod int `json:"subscription_period,omitempty"`
|
||||
MaxTipAmount int `json:"max_tip_amount,omitempty"`
|
||||
SuggestedTipAmounts []int `json:"suggested_tip_amounts,omitempty"`
|
||||
ProviderData string `json:"provider_data,omitempty"`
|
||||
PhotoURL string `json:"photo_url,omitempty"`
|
||||
PhotoSize int `json:"photo_size,omitempty"`
|
||||
PhotoWidth int `json:"photo_width,omitempty"`
|
||||
PhotoHeight int `json:"photo_height,omitempty"`
|
||||
NeedName bool `json:"need_name,omitempty"`
|
||||
NeedPhoneNumber bool `json:"need_phone_number,omitempty"`
|
||||
NeedEmail bool `json:"need_email,omitempty"`
|
||||
NeedShippingAddress bool `json:"need_shipping_address,omitempty"`
|
||||
SendPhoneToProvider bool `json:"send_phone_number_to_provider,omitempty"`
|
||||
SendEmailToProvider bool `json:"send_email_to_provider,omitempty"`
|
||||
IsFlexible bool `json:"is_flexible,omitempty"`
|
||||
// SubscriptionPeriod Optional. The number of seconds the subscription will be active for before the next
|
||||
// payment. The currency must be set to “XTR” (Telegram Stars) if the parameter is used. Currently, it
|
||||
// must always be 2592000 (30 days) if specified. Any number of subscriptions can be active for a given bot
|
||||
// at the same time, including multiple concurrent subscriptions from the same user. Subscription price must
|
||||
// no exceed 10000 Telegram Stars.
|
||||
SubscriptionPeriod int `json:"subscription_period,omitempty"`
|
||||
// MaxTipAmount Optional. The maximum accepted amount for tips in the smallest units of the currency
|
||||
// (integer, not float/double). For example, for a maximum tip of US$ 1.45 pass max_tip_amount = 145. See
|
||||
// the exp parameter in currencies.json, it shows the number of digits past the decimal point for each
|
||||
// currency (2 for the majority of currencies). Defaults to 0. Not supported for payments in Telegram Stars.
|
||||
MaxTipAmount int `json:"max_tip_amount,omitempty"`
|
||||
// SuggestedTipAmounts Optional. A JSON-serialized Array of suggested amounts of tips in the smallest units
|
||||
// of the currency (integer, not float/double). At most 4 suggested tip amounts can be specified. The
|
||||
// suggested tip amounts must be positive, passed in a strictly increased order and must not exceed
|
||||
// max_tip_amount.
|
||||
SuggestedTipAmounts []int `json:"suggested_tip_amounts,omitempty"`
|
||||
// ProviderData Optional. JSON-serialized data about the invoice, which will be shared with the payment
|
||||
// provider. A detailed description of required fields should be provided by the payment provider.
|
||||
ProviderData string `json:"provider_data,omitempty"`
|
||||
// PhotoURL Optional. URL of the product photo for the invoice. Can be a photo of the goods or a marketing
|
||||
// image for a service.
|
||||
PhotoURL string `json:"photo_url,omitempty"`
|
||||
// PhotoSize Optional. Photo size in bytes
|
||||
PhotoSize int `json:"photo_size,omitempty"`
|
||||
// PhotoWidth Optional. Photo width
|
||||
PhotoWidth int `json:"photo_width,omitempty"`
|
||||
// PhotoHeight Optional. Photo height
|
||||
PhotoHeight int `json:"photo_height,omitempty"`
|
||||
// NeedName Optional. Pass True if you require the user's full name to complete the order. Ignored for
|
||||
// payments in Telegram Stars.
|
||||
NeedName bool `json:"need_name,omitempty"`
|
||||
// NeedPhoneNumber Optional. Pass True if you require the user's phone number to complete the order. Ignored
|
||||
// for payments in Telegram Stars.
|
||||
NeedPhoneNumber bool `json:"need_phone_number,omitempty"`
|
||||
// NeedEmail Optional. Pass True if you require the user's email address to complete the order. Ignored for
|
||||
// payments in Telegram Stars.
|
||||
NeedEmail bool `json:"need_email,omitempty"`
|
||||
// NeedShippingAddress Optional. Pass True if you require the user's shipping address to complete the order.
|
||||
// Ignored for payments in Telegram Stars.
|
||||
NeedShippingAddress bool `json:"need_shipping_address,omitempty"`
|
||||
// SendPhoneToProvider Optional. Pass True if the user's phone number should be sent to the provider.
|
||||
// Ignored for payments in Telegram Stars.
|
||||
SendPhoneToProvider bool `json:"send_phone_number_to_provider,omitempty"`
|
||||
// SendEmailToProvider Optional. Pass True if the user's email address should be sent to the provider.
|
||||
// Ignored for payments in Telegram Stars.
|
||||
SendEmailToProvider bool `json:"send_email_to_provider,omitempty"`
|
||||
// IsFlexible Optional. Pass True if the final price depends on the shipping method. Ignored for payments in
|
||||
// Telegram Stars.
|
||||
IsFlexible bool `json:"is_flexible,omitempty"`
|
||||
}
|
||||
|
||||
// CreateInvoiceLink creates an invoice link.
|
||||
@@ -110,10 +221,17 @@ func (api *API) CreateInvoiceLinkWithContext(ctx context.Context, params CreateI
|
||||
// Since: Bot API 3.0
|
||||
// See https://core.telegram.org/bots/api#answershippingquery
|
||||
type AnswerShippingQuery struct {
|
||||
ShippingQueryID string `json:"shipping_query_id"`
|
||||
OK bool `json:"ok"`
|
||||
// ShippingQueryID Required. Unique identifier for the query to be answered
|
||||
ShippingQueryID string `json:"shipping_query_id"`
|
||||
// OK Required. Pass True if delivery to the specified address is possible and False if there are any
|
||||
// problems (for example, if delivery to the specified address is not possible)
|
||||
OK bool `json:"ok"`
|
||||
// ShippingOptions Optional. Required if ok is True. A JSON-serialized Array of available shipping options.
|
||||
ShippingOptions []ShippingOption `json:"shipping_options,omitempty"`
|
||||
ErrorMessage string `json:"error_message,omitempty"`
|
||||
// ErrorMessage Optional. Required if ok is False. Error message in human readable form that explains why it
|
||||
// is impossible to complete the order (e.g. “Sorry, delivery to your desired address is unavailable”).
|
||||
// Telegram will display this message to the user.
|
||||
ErrorMessage string `json:"error_message,omitempty"`
|
||||
}
|
||||
|
||||
// AnswerShippingQuery answers a shipping query.
|
||||
@@ -138,9 +256,16 @@ func (api *API) AnswerShippingQueryWithContext(ctx context.Context, params Answe
|
||||
// Since: Bot API 3.0
|
||||
// See https://core.telegram.org/bots/api#answerprecheckoutquery
|
||||
type AnswerPreCheckoutQuery struct {
|
||||
// PreCheckoutQueryID Required. Unique identifier for the query to be answered
|
||||
PreCheckoutQueryID string `json:"pre_checkout_query_id"`
|
||||
OK bool `json:"ok"`
|
||||
ErrorMessage string `json:"error_message,omitempty"`
|
||||
// OK Required. Specify True if everything is alright (goods are available, etc.) and the bot is ready to
|
||||
// proceed with the order. Use False if there are any problems.
|
||||
OK bool `json:"ok"`
|
||||
// ErrorMessage Optional. Required if ok is False. Error message in human readable form that explains the
|
||||
// reason for failure to proceed with the checkout (e.g. "Sorry, somebody just bought the last of our
|
||||
// amazing black T-shirts while you were busy filling out your payment details. Please choose a different
|
||||
// color or garment!"). Telegram will display this message to the user.
|
||||
ErrorMessage string `json:"error_message,omitempty"`
|
||||
}
|
||||
|
||||
// AnswerPreCheckoutQuery answers a pre-checkout query.
|
||||
|
||||
+96
-36
@@ -4,27 +4,42 @@ package tgapi
|
||||
// Since: Bot API 3.0
|
||||
// See https://core.telegram.org/bots/api#labeledprice
|
||||
type LabeledPrice struct {
|
||||
Label string `json:"label"`
|
||||
Amount int `json:"amount"`
|
||||
// Label Portion label
|
||||
Label string `json:"label"`
|
||||
// Amount Price of the product in the smallest units of the currency (integer, not float/double). For
|
||||
// example, for a price of US$ 1.45 pass amount = 145. See the exp parameter in currencies.json, it shows
|
||||
// the number of digits past the decimal point for each currency (2 for the majority of currencies).
|
||||
Amount int `json:"amount"`
|
||||
}
|
||||
|
||||
// Invoice contains basic information about an invoice.
|
||||
// Since: Bot API 3.0
|
||||
type Invoice struct {
|
||||
Title string `json:"title"`
|
||||
Description string `json:"description"`
|
||||
// Title Product name
|
||||
Title string `json:"title"`
|
||||
// Description Product description
|
||||
Description string `json:"description"`
|
||||
// StartParameter Unique bot deep-linking parameter that can be used to generate this invoice
|
||||
StartParameter string `json:"start_parameter"`
|
||||
Currency string `json:"currency"`
|
||||
TotalAmount int `json:"total_amount"`
|
||||
// Currency Three-letter ISO 4217 currency code, or “XTR” for payments in Telegram Stars
|
||||
Currency string `json:"currency"`
|
||||
// TotalAmount Total price in the smallest units of the currency (integer, not float/double). For example,
|
||||
// for a price of US$ 1.45 pass amount = 145. See the exp parameter in currencies.json, it shows the number
|
||||
// of digits past the decimal point for each currency (2 for the majority of currencies).
|
||||
TotalAmount int `json:"total_amount"`
|
||||
}
|
||||
|
||||
// ShippingQuery represents an incoming shipping query.
|
||||
// Since: Bot API 3.0
|
||||
// See https://core.telegram.org/bots/api#shippingquery
|
||||
type ShippingQuery struct {
|
||||
ID string `json:"id"`
|
||||
From User `json:"from"`
|
||||
InvoicePayload string `json:"invoice_payload"`
|
||||
// ID Unique query identifier
|
||||
ID string `json:"id"`
|
||||
// From User who sent the query
|
||||
From User `json:"from"`
|
||||
// InvoicePayload Bot-specified invoice payload
|
||||
InvoicePayload string `json:"invoice_payload"`
|
||||
// ShippingAddress User specified shipping address
|
||||
ShippingAddress ShippingAddress `json:"shipping_address"`
|
||||
}
|
||||
|
||||
@@ -32,21 +47,31 @@ type ShippingQuery struct {
|
||||
// Since: Bot API 3.0
|
||||
// See https://core.telegram.org/bots/api#shippingaddress
|
||||
type ShippingAddress struct {
|
||||
// CountryCode Two-letter ISO 3166-1 alpha-2 country code
|
||||
CountryCode string `json:"country_code"`
|
||||
State string `json:"state"`
|
||||
City string `json:"city"`
|
||||
// State State, if applicable
|
||||
State string `json:"state"`
|
||||
// City City
|
||||
City string `json:"city"`
|
||||
// StreetLine1 First line for the address
|
||||
StreetLine1 string `json:"street_line1"`
|
||||
// StreetLine2 Second line for the address
|
||||
StreetLine2 string `json:"street_line2"`
|
||||
PostCode string `json:"post_code"`
|
||||
// PostCode Address post code
|
||||
PostCode string `json:"post_code"`
|
||||
}
|
||||
|
||||
// OrderInfo represents information about an order.
|
||||
// Since: Bot API 3.0
|
||||
// See https://core.telegram.org/bots/api#orderinfo
|
||||
type OrderInfo struct {
|
||||
Name string `json:"name"`
|
||||
PhoneNumber string `json:"phone_number"`
|
||||
Email string `json:"email"`
|
||||
// Name Optional. User name
|
||||
Name string `json:"name"`
|
||||
// PhoneNumber Optional. User's phone number
|
||||
PhoneNumber string `json:"phone_number"`
|
||||
// Email Optional. User email
|
||||
Email string `json:"email"`
|
||||
// ShippingAddress Optional. User shipping address
|
||||
ShippingAddress ShippingAddress `json:"shipping_address"`
|
||||
}
|
||||
|
||||
@@ -54,20 +79,31 @@ type OrderInfo struct {
|
||||
// Since: Bot API 3.0
|
||||
// See https://core.telegram.org/bots/api#precheckoutquery
|
||||
type PreCheckoutQuery struct {
|
||||
ID string `json:"id"`
|
||||
From User `json:"from"`
|
||||
Currency string `json:"currency"`
|
||||
TotalAmount int `json:"total_amount"`
|
||||
InvoicePayload string `json:"invoice_payload"`
|
||||
ShippingOptionID string `json:"shipping_option_id"`
|
||||
OrderInfo *OrderInfo `json:"order_info,omitempty"`
|
||||
// ID Unique query identifier
|
||||
ID string `json:"id"`
|
||||
// From User who sent the query
|
||||
From User `json:"from"`
|
||||
// Currency Three-letter ISO 4217 currency code, or “XTR” for payments in Telegram Stars
|
||||
Currency string `json:"currency"`
|
||||
// TotalAmount Total price in the smallest units of the currency (integer, not float/double). For example,
|
||||
// for a price of US$ 1.45 pass amount = 145. See the exp parameter in currencies.json, it shows the number
|
||||
// of digits past the decimal point for each currency (2 for the majority of currencies).
|
||||
TotalAmount int `json:"total_amount"`
|
||||
// InvoicePayload Bot-specified invoice payload
|
||||
InvoicePayload string `json:"invoice_payload"`
|
||||
// ShippingOptionID Optional. Identifier of the shipping option chosen by the user
|
||||
ShippingOptionID string `json:"shipping_option_id"`
|
||||
// OrderInfo Optional. Order information provided by the user
|
||||
OrderInfo *OrderInfo `json:"order_info,omitempty"`
|
||||
}
|
||||
|
||||
// PaidMediaPurchased represents a purchased paid media.
|
||||
// Since: Bot API 7.10
|
||||
// See https://core.telegram.org/bots/api#paidmediapurchased
|
||||
type PaidMediaPurchased struct {
|
||||
From User `json:"from"`
|
||||
// From User who purchased the media
|
||||
From User `json:"from"`
|
||||
// PaidMediaPayload Bot-specified paid media payload
|
||||
PaidMediaPayload string `json:"paid_media_payload"`
|
||||
}
|
||||
|
||||
@@ -75,35 +111,59 @@ type PaidMediaPurchased struct {
|
||||
// Since: Bot API 3.0
|
||||
// See https://core.telegram.org/bots/api#shippingoption
|
||||
type ShippingOption struct {
|
||||
ID string `json:"id"`
|
||||
Title string `json:"title"`
|
||||
// ID Shipping option identifier
|
||||
ID string `json:"id"`
|
||||
// Title Option title
|
||||
Title string `json:"title"`
|
||||
// Prices List of price portions
|
||||
Prices []LabeledPrice `json:"prices"`
|
||||
}
|
||||
|
||||
// SuccessfulPayment contains basic information about a successful payment.
|
||||
// Since: Bot API 3.0
|
||||
type SuccessfulPayment struct {
|
||||
Currency string `json:"currency"`
|
||||
TotalAmount int `json:"total_amount"`
|
||||
// Currency Three-letter ISO 4217 currency code, or “XTR” for payments in Telegram Stars
|
||||
Currency string `json:"currency"`
|
||||
// TotalAmount Total price in the smallest units of the currency (integer, not float/double). For example,
|
||||
// for a price of US$ 1.45 pass amount = 145. See the exp parameter in currencies.json, it shows the number
|
||||
// of digits past the decimal point for each currency (2 for the majority of currencies).
|
||||
TotalAmount int `json:"total_amount"`
|
||||
// InvoicePayload Bot-specified invoice payload
|
||||
InvoicePayload string `json:"invoice_payload"`
|
||||
|
||||
SubscriptionExpirationDate int `json:"subscription_expiration_date,omitempty"` // Since: Bot API 8.0
|
||||
IsRecurring bool `json:"is_recurring,omitempty"` // Since: Bot API 8.0
|
||||
IsFirstRecurring bool `json:"is_first_recurring,omitempty"` // Since: Bot API 8.0
|
||||
ShippingOptionID string `json:"shipping_option_id,omitempty"`
|
||||
OrderInfo *OrderInfo `json:"order_info,omitempty"`
|
||||
// SubscriptionExpirationDate Optional. Expiration date of the subscription, in Unix time; for recurring
|
||||
// payments only
|
||||
SubscriptionExpirationDate int `json:"subscription_expiration_date,omitempty"` // Since: Bot API 8.0
|
||||
// IsRecurring Optional. True, if the payment is a recurring payment for a subscription
|
||||
IsRecurring bool `json:"is_recurring,omitempty"` // Since: Bot API 8.0
|
||||
// IsFirstRecurring Optional. True, if the payment is the first payment for a subscription
|
||||
IsFirstRecurring bool `json:"is_first_recurring,omitempty"` // Since: Bot API 8.0
|
||||
// ShippingOptionID Optional. Identifier of the shipping option chosen by the user
|
||||
ShippingOptionID string `json:"shipping_option_id,omitempty"`
|
||||
// OrderInfo Optional. Order information provided by the user
|
||||
OrderInfo *OrderInfo `json:"order_info,omitempty"`
|
||||
|
||||
// TelegramPaymentChargeID Telegram payment identifier
|
||||
TelegramPaymentChargeID string `json:"telegram_payment_charge_id"`
|
||||
ProviderPaymentChargeID string `json:"proviced_payment_charge_id"`
|
||||
// ProviderPaymentChargeID Provider payment identifier
|
||||
ProviderPaymentChargeID string `json:"provider_payment_charge_id"`
|
||||
}
|
||||
|
||||
// RefundedPayment contains basic information about a refunded payment.
|
||||
// Since: Bot API 7.7
|
||||
type RefundedPayment struct {
|
||||
Currency string `json:"currency"`
|
||||
TotalAmount int `json:"total_amount"`
|
||||
// Currency Three-letter ISO 4217 currency code, or “XTR” for payments in Telegram Stars. Currently,
|
||||
// always “XTR”.
|
||||
Currency string `json:"currency"`
|
||||
// TotalAmount Total refunded price in the smallest units of the currency (integer, not float/double). For
|
||||
// example, for a price of US$ 1.45, total_amount = 145. See the exp parameter in currencies.json, it shows
|
||||
// the number of digits past the decimal point for each currency (2 for the majority of currencies).
|
||||
TotalAmount int `json:"total_amount"`
|
||||
// InvoicePayload Bot-specified invoice payload
|
||||
InvoicePayload string `json:"invoice_payload"`
|
||||
|
||||
// TelegramPaymentChargeID Telegram payment identifier
|
||||
TelegramPaymentChargeID string `json:"telegram_payment_charge_id"`
|
||||
ProviderPaymentChargeID string `json:"proviced_payment_charge_id,omitempty"`
|
||||
// ProviderPaymentChargeID Optional. Provider payment identifier
|
||||
ProviderPaymentChargeID string `json:"provider_payment_charge_id,omitempty"`
|
||||
}
|
||||
|
||||
+11
-6
@@ -2,6 +2,7 @@ package tgapi
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"sync"
|
||||
)
|
||||
|
||||
@@ -126,10 +127,14 @@ func (p *workerPool) worker() {
|
||||
}
|
||||
|
||||
func (p *workerPool) executeEnvelope(envelope requestEnvelope) {
|
||||
value, err := envelope.doFunc(envelope.ctx)
|
||||
envelope.resultCh <- requestResult{
|
||||
value: value,
|
||||
err: err,
|
||||
}
|
||||
close(envelope.resultCh)
|
||||
result := requestResult{}
|
||||
defer func() {
|
||||
if recovered := recover(); recovered != nil {
|
||||
result.value = nil
|
||||
result.err = fmt.Errorf("%w: %v", ErrPoolWorkerPanic, recovered)
|
||||
}
|
||||
envelope.resultCh <- result
|
||||
close(envelope.resultCh)
|
||||
}()
|
||||
result.value, result.err = envelope.doFunc(envelope.ctx)
|
||||
}
|
||||
|
||||
@@ -18,6 +18,34 @@ func TestWorkerPoolSubmitAfterStop(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestWorkerPoolRecoversTaskPanicAndContinues(t *testing.T) {
|
||||
pool := newWorkerPool(1, 2)
|
||||
pool.start()
|
||||
defer pool.stop()
|
||||
|
||||
panicked, err := pool.submit(context.Background(), func(context.Context) (any, error) {
|
||||
panic("boom")
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("submit panic task returned error: %v", err)
|
||||
}
|
||||
result := <-panicked
|
||||
if !errors.Is(result.err, ErrPoolWorkerPanic) {
|
||||
t.Fatalf("expected ErrPoolWorkerPanic, got %v", result.err)
|
||||
}
|
||||
|
||||
continued, err := pool.submit(context.Background(), func(context.Context) (any, error) {
|
||||
return "ok", nil
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("submit follow-up returned error: %v", err)
|
||||
}
|
||||
result = <-continued
|
||||
if result.err != nil || result.value != "ok" {
|
||||
t.Fatalf("worker did not continue: %#v", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestWorkerPoolQueueFull(t *testing.T) {
|
||||
pool := newWorkerPool(1, 1)
|
||||
pool.start()
|
||||
|
||||
@@ -66,8 +66,10 @@ type RichBlockListItem struct {
|
||||
HasCheckbox bool
|
||||
// IsChecked reports whether the list-item checkbox is checked.
|
||||
IsChecked bool
|
||||
Value int // for ordered lists: numeric value of the marker
|
||||
Type RichBlockListItemType // for ordered lists: "a", "A", "i", "I" or "1"
|
||||
// Value is the numeric marker value for an ordered list item.
|
||||
Value int // for ordered lists: numeric value of the marker
|
||||
// Type selects the ordered-list marker style: a, A, i, I, or 1.
|
||||
Type RichBlockListItemType // for ordered lists: "a", "A", "i", "I" or "1"
|
||||
}
|
||||
|
||||
// MarshalJSON implements json.Marshaler.
|
||||
@@ -119,8 +121,10 @@ type RichBlockTableCell struct {
|
||||
ColSpan int
|
||||
// RowSpan is the number of table rows spanned by the cell.
|
||||
RowSpan int
|
||||
Align string // "left", "center" or "right"
|
||||
VAlign string // "top", "middle" or "bottom"
|
||||
// Align is the horizontal alignment: left, center, or right.
|
||||
Align string // "left", "center" or "right"
|
||||
// VAlign is the vertical alignment: top, middle, or bottom.
|
||||
VAlign string // "top", "middle" or "bottom"
|
||||
}
|
||||
|
||||
// MarshalJSON implements json.Marshaler.
|
||||
@@ -192,6 +196,7 @@ var richBlockWrapTags = map[string]bool{
|
||||
type RichBlockSectionHeading struct {
|
||||
// Text contains the formatted or plain text content.
|
||||
Text RichText
|
||||
// Size is the heading level from 1 through 6, where 1 is largest.
|
||||
Size int // 1-6, 1 is the largest
|
||||
}
|
||||
|
||||
@@ -405,7 +410,8 @@ func (b RichBlockTable) MarshalJSON() ([]byte, error) {
|
||||
type RichBlockMap struct {
|
||||
// Location contains the map location.
|
||||
Location Location
|
||||
Zoom int // 13-20
|
||||
// Zoom is the map zoom level in the range 13 through 20.
|
||||
Zoom int // 13-20
|
||||
// Width is the requested media or map width in pixels.
|
||||
Width int
|
||||
// Height is the requested media or map height in pixels.
|
||||
|
||||
+94
-6
@@ -3,16 +3,31 @@ package tgapi
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
)
|
||||
|
||||
const (
|
||||
maximumRichJSONDepth = 64
|
||||
maximumRichJSONNodes = 10_000
|
||||
)
|
||||
|
||||
// UnmarshalRichText parses a RichText tree from JSON: a string, an array, or
|
||||
// a typed object. Unknown object types that carry a text field are preserved
|
||||
// as RichTextWrap so their nested text remains usable; unmodeled fields are
|
||||
// discarded.
|
||||
// discarded. The fallback representation is subject to change in v2 so unknown
|
||||
// fields can be preserved losslessly.
|
||||
//
|
||||
// Since: Bot API 10.1
|
||||
func UnmarshalRichText(data []byte) (RichText, error) {
|
||||
if err := validateRichJSON(data); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return unmarshalRichText(data)
|
||||
}
|
||||
|
||||
func unmarshalRichText(data []byte) (RichText, error) {
|
||||
if bytes.Equal(bytes.TrimSpace(data), []byte("null")) {
|
||||
return nil, fmt.Errorf("richtext: null is not a rich text value")
|
||||
}
|
||||
@@ -26,7 +41,7 @@ func UnmarshalRichText(data []byte) (RichText, error) {
|
||||
if err := json.Unmarshal(data, &raw); err == nil {
|
||||
arr := make(RichTextArray, len(raw))
|
||||
for i, it := range raw {
|
||||
rt, err := UnmarshalRichText(it)
|
||||
rt, err := unmarshalRichText(it)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -47,7 +62,7 @@ func UnmarshalRichText(data []byte) (RichText, error) {
|
||||
var inner RichText
|
||||
if len(head.Text) > 0 {
|
||||
var err error
|
||||
if inner, err = UnmarshalRichText(head.Text); err != nil {
|
||||
if inner, err = unmarshalRichText(head.Text); err != nil {
|
||||
return nil, fmt.Errorf("richtext %q: bad text: %w", head.Type, err)
|
||||
}
|
||||
}
|
||||
@@ -202,10 +217,18 @@ func UnmarshalRichText(data []byte) (RichText, error) {
|
||||
|
||||
// UnmarshalRichBlock parses a single RichBlock from JSON, dispatching on the
|
||||
// type tag. Unknown types that carry a text field are decoded as RichBlockWrap
|
||||
// so their nested text remains usable; unmodeled fields are discarded.
|
||||
// so their nested text remains usable; unmodeled fields are discarded. The
|
||||
// fallback representation is subject to change in v2 for lossless round trips.
|
||||
//
|
||||
// Since: Bot API 10.1
|
||||
func UnmarshalRichBlock(data []byte) (RichBlock, error) {
|
||||
if err := validateRichJSON(data); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return unmarshalRichBlock(data)
|
||||
}
|
||||
|
||||
func unmarshalRichBlock(data []byte) (RichBlock, error) {
|
||||
var head struct {
|
||||
Type string `json:"type"`
|
||||
Text json.RawMessage `json:"text"`
|
||||
@@ -454,8 +477,19 @@ func UnmarshalRichBlock(data []byte) (RichBlock, error) {
|
||||
|
||||
// UnmarshalRichMessage parses a root RichMessage from JSON.
|
||||
//
|
||||
// For v1 compatibility, missing and null blocks are accepted as an empty
|
||||
// message. This permissive behavior is subject to change in v2; use
|
||||
// UnmarshalRichMessageStrict when validating untrusted input.
|
||||
//
|
||||
// Since: Bot API 10.1
|
||||
func UnmarshalRichMessage(data []byte) (RichMessage, error) {
|
||||
if err := validateRichJSON(data); err != nil {
|
||||
return RichMessage{}, err
|
||||
}
|
||||
return unmarshalRichMessage(data)
|
||||
}
|
||||
|
||||
func unmarshalRichMessage(data []byte) (RichMessage, error) {
|
||||
var raw struct {
|
||||
Blocks json.RawMessage `json:"blocks"`
|
||||
IsRTL bool `json:"is_rtl"`
|
||||
@@ -470,6 +504,28 @@ func UnmarshalRichMessage(data []byte) (RichMessage, error) {
|
||||
return RichMessage{blocks, raw.IsRTL}, nil
|
||||
}
|
||||
|
||||
// UnmarshalRichMessageStrict parses a RichMessage and requires a non-null blocks array.
|
||||
//
|
||||
// Since: Bot API 10.1
|
||||
func UnmarshalRichMessageStrict(data []byte) (RichMessage, error) {
|
||||
if err := validateRichJSON(data); err != nil {
|
||||
return RichMessage{}, err
|
||||
}
|
||||
var root map[string]json.RawMessage
|
||||
if err := json.Unmarshal(data, &root); err != nil {
|
||||
return RichMessage{}, fmt.Errorf("richmessage: %w", err)
|
||||
}
|
||||
blocks, ok := root["blocks"]
|
||||
if !ok || bytes.Equal(bytes.TrimSpace(blocks), []byte("null")) {
|
||||
return RichMessage{}, errors.New("richmessage: blocks must be a non-null array")
|
||||
}
|
||||
var rawBlocks []json.RawMessage
|
||||
if err := json.Unmarshal(blocks, &rawBlocks); err != nil {
|
||||
return RichMessage{}, errors.New("richmessage: blocks must be an array")
|
||||
}
|
||||
return unmarshalRichMessage(data)
|
||||
}
|
||||
|
||||
// UnmarshalJSON implements json.Unmarshaler.
|
||||
//
|
||||
// Since: Bot API 10.1
|
||||
@@ -491,7 +547,7 @@ func parseOptRichText(raw json.RawMessage) (RichText, error) {
|
||||
if len(raw) == 0 || string(raw) == "null" {
|
||||
return nil, nil
|
||||
}
|
||||
return UnmarshalRichText(raw)
|
||||
return unmarshalRichText(raw)
|
||||
}
|
||||
|
||||
func unmarshalRichBlocks(raw json.RawMessage) ([]RichBlock, error) {
|
||||
@@ -504,7 +560,7 @@ func unmarshalRichBlocks(raw json.RawMessage) ([]RichBlock, error) {
|
||||
}
|
||||
blocks := make([]RichBlock, len(raws))
|
||||
for i, r := range raws {
|
||||
b, err := UnmarshalRichBlock(r)
|
||||
b, err := unmarshalRichBlock(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -512,3 +568,35 @@ func unmarshalRichBlocks(raw json.RawMessage) ([]RichBlock, error) {
|
||||
}
|
||||
return blocks, nil
|
||||
}
|
||||
|
||||
func validateRichJSON(data []byte) error {
|
||||
decoder := json.NewDecoder(bytes.NewReader(data))
|
||||
depth := 0
|
||||
nodes := 0
|
||||
for {
|
||||
token, err := decoder.Token()
|
||||
if errors.Is(err, io.EOF) {
|
||||
return nil
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
nodes++
|
||||
if nodes > maximumRichJSONNodes {
|
||||
return fmt.Errorf("%w: maximum %d", ErrRichJSONNodes, maximumRichJSONNodes)
|
||||
}
|
||||
delim, ok := token.(json.Delim)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
switch delim {
|
||||
case '{', '[':
|
||||
depth++
|
||||
if depth > maximumRichJSONDepth {
|
||||
return fmt.Errorf("%w: maximum %d", ErrRichJSONDepth, maximumRichJSONDepth)
|
||||
}
|
||||
case '}', ']':
|
||||
depth--
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package tgapi
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
@@ -266,3 +267,28 @@ func TestUnmarshalRichBlockRejectsMalformedFields(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnmarshalRichMessageStrict(t *testing.T) {
|
||||
for _, raw := range []string{`null`, `{}`, `{"blocks":null}`, `{"blocks":{}}`} {
|
||||
t.Run(raw, func(t *testing.T) {
|
||||
if _, err := UnmarshalRichMessageStrict([]byte(raw)); err == nil {
|
||||
t.Fatal("expected strict decoder error")
|
||||
}
|
||||
})
|
||||
}
|
||||
if _, err := UnmarshalRichMessageStrict([]byte(`{"blocks":[]}`)); err != nil {
|
||||
t.Fatalf("strict decoder rejected an empty blocks array: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRichJSONStructuralLimits(t *testing.T) {
|
||||
deep := strings.Repeat("[", maximumRichJSONDepth+1) + `"x"` + strings.Repeat("]", maximumRichJSONDepth+1)
|
||||
if _, err := UnmarshalRichText([]byte(deep)); !errors.Is(err, ErrRichJSONDepth) {
|
||||
t.Fatalf("expected ErrRichJSONDepth, got %v", err)
|
||||
}
|
||||
|
||||
wide := "[" + strings.Repeat("0,", maximumRichJSONNodes) + "0]"
|
||||
if _, err := UnmarshalRichText([]byte(wide)); !errors.Is(err, ErrRichJSONNodes) {
|
||||
t.Fatalf("expected ErrRichJSONNodes, got %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
+14
-4
@@ -6,8 +6,11 @@ import "context"
|
||||
// Since: Bot API 7.5
|
||||
// See https://core.telegram.org/bots/api#getstartransactions
|
||||
type GetStarTransactions struct {
|
||||
// Offset Optional. Number of transactions to skip in the response
|
||||
Offset int `json:"offset,omitempty"`
|
||||
Limit int `json:"limit,omitempty"`
|
||||
// Limit Optional. The maximum number of transactions to be retrieved. Values between 1-100 are accepted.
|
||||
// Defaults to 100.
|
||||
Limit int `json:"limit,omitempty"`
|
||||
}
|
||||
|
||||
// GetMyStarBalance returns the bot's Telegram Star balance.
|
||||
@@ -48,7 +51,9 @@ func (api *API) GetStarTransactionsWithContext(ctx context.Context, params GetSt
|
||||
// Since: Bot API 7.4
|
||||
// See https://core.telegram.org/bots/api#refundstarpayment
|
||||
type RefundStarPayment struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
// UserID Required. Identifier of the user whose payment will be refunded
|
||||
UserID int64 `json:"user_id"`
|
||||
// TelegramPaymentChargeID Required. Telegram payment identifier
|
||||
TelegramPaymentChargeID string `json:"telegram_payment_charge_id"`
|
||||
}
|
||||
|
||||
@@ -74,9 +79,14 @@ func (api *API) RefundStarPaymentWithContext(ctx context.Context, params RefundS
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#edituserstarsubscription
|
||||
type EditUserStarSubscription struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
// UserID Required. Identifier of the user whose subscription will be edited
|
||||
UserID int64 `json:"user_id"`
|
||||
// TelegramPaymentChargeID Required. Telegram payment identifier for the subscription
|
||||
TelegramPaymentChargeID string `json:"telegram_payment_charge_id"`
|
||||
IsCanceled bool `json:"is_canceled"`
|
||||
// IsCanceled Required. Pass True to cancel extension of the user subscription; the subscription must be
|
||||
// active up to the end of the current subscription period. Pass False to allow the user to re-enable a
|
||||
// subscription that was previously canceled by the bot.
|
||||
IsCanceled bool `json:"is_canceled"`
|
||||
}
|
||||
|
||||
// EditUserStarSubscription cancels or re-enables a user star subscription extension.
|
||||
|
||||
+18
-6
@@ -4,17 +4,29 @@ package tgapi
|
||||
// Since: Bot API 7.5
|
||||
// See https://core.telegram.org/bots/api#startransaction
|
||||
type StarTransaction struct {
|
||||
ID string `json:"id"`
|
||||
Amount int `json:"amount"`
|
||||
NanostarAmount int `json:"nanostar_amount,omitempty"`
|
||||
Date int `json:"date"`
|
||||
Source map[string]any `json:"source,omitempty"`
|
||||
Receiver map[string]any `json:"receiver,omitempty"`
|
||||
// ID Unique identifier of the transaction. Coincides with the identifier of the original transaction for
|
||||
// refund transactions. Coincides with SuccessfulPayment.telegram_payment_charge_id for successful incoming
|
||||
// payments from users.
|
||||
ID string `json:"id"`
|
||||
// Amount Integer amount of Telegram Stars transferred by the transaction
|
||||
Amount int `json:"amount"`
|
||||
// NanostarAmount Optional. The number of 1/1000000000 shares of Telegram Stars transferred by the
|
||||
// transaction; from 0 to 999999999
|
||||
NanostarAmount int `json:"nanostar_amount,omitempty"`
|
||||
// Date Date the transaction was created in Unix time
|
||||
Date int `json:"date"`
|
||||
// Source Optional. Source of an incoming transaction (e.g., a user purchasing goods or services, Fragment
|
||||
// refunding a failed withdrawal). Only for incoming transactions.
|
||||
Source map[string]any `json:"source,omitempty"`
|
||||
// Receiver Optional. Receiver of an outgoing transaction (e.g., a user for a purchase refund, Fragment for
|
||||
// a withdrawal). Only for outgoing transactions.
|
||||
Receiver map[string]any `json:"receiver,omitempty"`
|
||||
}
|
||||
|
||||
// StarTransactions contains a list of Telegram Star transactions.
|
||||
// Since: Bot API 7.5
|
||||
// See https://core.telegram.org/bots/api#startransactions
|
||||
type StarTransactions struct {
|
||||
// Transactions The list of transactions
|
||||
Transactions []StarTransaction `json:"transactions"`
|
||||
}
|
||||
|
||||
+118
-36
@@ -6,25 +6,52 @@ import "context"
|
||||
// Since: Bot API 1.3
|
||||
// See https://core.telegram.org/bots/api#sendsticker
|
||||
type SendSticker struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
Sticker string `json:"sticker"`
|
||||
Emoji string `json:"emoji,omitempty"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// Sticker Required. Sticker to send. Pass a file_id as String to send a file that exists on the Telegram
|
||||
// servers (recommended), pass an HTTP URL as a String for Telegram to get a .WEBP sticker from the
|
||||
// Internet, or upload a new .WEBP, .TGS, or .WEBM sticker using multipart/form-data. More information on
|
||||
// Sending Files ». Video and animated stickers can't be sent via an HTTP URL.
|
||||
Sticker string `json:"sticker"`
|
||||
// Emoji Optional. Emoji associated with the sticker; only for just uploaded stickers
|
||||
Emoji string `json:"emoji,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendSticker sends a static .WEBP, animated .TGS, or video .WEBM sticker.
|
||||
@@ -48,6 +75,7 @@ func (api *API) SendStickerWithContext(ctx context.Context, params SendSticker)
|
||||
// Since: Bot API 3.2
|
||||
// See https://core.telegram.org/bots/api#getstickerset
|
||||
type GetStickerSet struct {
|
||||
// Name Required. Name of the sticker set
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
@@ -72,6 +100,8 @@ func (api *API) GetStickerSetWithContext(ctx context.Context, params GetStickerS
|
||||
// Since: Bot API 6.2
|
||||
// See https://core.telegram.org/bots/api#getcustomemojistickers
|
||||
type GetCustomEmojiStickers struct {
|
||||
// CustomEmojiIDs Required. A JSON-serialized list of custom emoji identifiers. At most 200 custom emoji
|
||||
// identifiers can be specified.
|
||||
CustomEmojiIDs []string `json:"custom_emoji_ids"`
|
||||
}
|
||||
|
||||
@@ -96,7 +126,9 @@ func (api *API) GetCustomEmojiStickersWithContext(ctx context.Context, params Ge
|
||||
// Since: Bot API 3.2
|
||||
// See https://core.telegram.org/bots/api#uploadstickerfile
|
||||
type UploadStickerFile struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
// UserID Required. User identifier of sticker file owner
|
||||
UserID int64 `json:"user_id"`
|
||||
// StickerFormat Required. Format of the sticker, must be one of “static”, “animated”, “video”
|
||||
StickerFormat InputStickerFormat `json:"sticker_format"`
|
||||
}
|
||||
|
||||
@@ -130,13 +162,24 @@ func (api *API) UploadStickerFileWithContext(ctx context.Context, params UploadS
|
||||
// Since: Bot API 3.2
|
||||
// See https://core.telegram.org/bots/api#createnewstickerset
|
||||
type CreateNewStickerSet struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
Name string `json:"name"`
|
||||
Title string `json:"title"`
|
||||
// UserID Required. User identifier of created sticker set owner
|
||||
UserID int64 `json:"user_id"`
|
||||
// Name Required. Short name of sticker set, to be used in t.me/addstickers/ URLs (e.g., animals). Can
|
||||
// contain only English letters, digits and underscores. Must begin with a letter, can't contain consecutive
|
||||
// underscores and must end in "_by_<bot_username>". <bot_username> is case insensitive. 1-64 characters.
|
||||
Name string `json:"name"`
|
||||
// Title Required. Sticker set title, 1-64 characters
|
||||
Title string `json:"title"`
|
||||
|
||||
Stickers []InputSticker `json:"stickers"`
|
||||
StickerType StickerType `json:"sticker_type,omitempty"`
|
||||
NeedsRepainting bool `json:"needs_repainting,omitempty"`
|
||||
// Stickers Required. A JSON-serialized list of 1-50 initial stickers to be added to the sticker set
|
||||
Stickers []InputSticker `json:"stickers"`
|
||||
// StickerType Optional. Type of stickers in the set, pass “regular”, “mask”, or “custom_emoji”.
|
||||
// By default, a regular sticker set is created.
|
||||
StickerType StickerType `json:"sticker_type,omitempty"`
|
||||
// NeedsRepainting Optional. Pass True if stickers in the sticker set must be repainted to the color of text
|
||||
// when used in messages, the accent color if used as emoji status, white on chat photos, or another
|
||||
// appropriate color based on context; for custom emoji sticker sets only
|
||||
NeedsRepainting bool `json:"needs_repainting,omitempty"`
|
||||
}
|
||||
|
||||
// CreateNewStickerSet creates a new sticker set owned by a user.
|
||||
@@ -161,8 +204,12 @@ func (api *API) CreateNewStickerSetWithContext(ctx context.Context, params Creat
|
||||
// Since: Bot API 3.2
|
||||
// See https://core.telegram.org/bots/api#addstickertoset
|
||||
type AddStickerToSet struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
Name string `json:"name"`
|
||||
// UserID Required. User identifier of sticker set owner
|
||||
UserID int64 `json:"user_id"`
|
||||
// Name Required. Sticker set name
|
||||
Name string `json:"name"`
|
||||
// Sticker Required. A JSON-serialized object with information about the added sticker. If exactly the same
|
||||
// sticker had already been added to the set, then the set isn't changed.
|
||||
Sticker InputSticker `json:"sticker"`
|
||||
}
|
||||
|
||||
@@ -188,8 +235,10 @@ func (api *API) AddStickerToSetWithContext(ctx context.Context, params AddSticke
|
||||
// Since: Bot API 3.2
|
||||
// See https://core.telegram.org/bots/api#setstickerpositioninset
|
||||
type SetStickerPositionInSet struct {
|
||||
Sticker string `json:"sticker"`
|
||||
Position int `json:"position"`
|
||||
// Sticker Required. File identifier of the sticker
|
||||
Sticker string `json:"sticker"`
|
||||
// Position Required. New sticker position in the set, zero-based
|
||||
Position int `json:"position"`
|
||||
}
|
||||
|
||||
// SetStickerPositionInSet moves a sticker in a set to a specific position.
|
||||
@@ -214,6 +263,7 @@ func (api *API) SetStickerPositionInSetWithContext(ctx context.Context, params S
|
||||
// Since: Bot API 3.2
|
||||
// See https://core.telegram.org/bots/api#deletestickerfromset
|
||||
type DeleteStickerFromSet struct {
|
||||
// Sticker Required. File identifier of the sticker
|
||||
Sticker string `json:"sticker"`
|
||||
}
|
||||
|
||||
@@ -239,10 +289,15 @@ func (api *API) DeleteStickerFromSetWithContext(ctx context.Context, params Dele
|
||||
// Since: Bot API 7.2
|
||||
// See https://core.telegram.org/bots/api#replacestickerinset
|
||||
type ReplaceStickerInSet struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
Name string `json:"name"`
|
||||
OldSticker string `json:"old_sticker"`
|
||||
Sticker InputSticker `json:"sticker"`
|
||||
// UserID Required. User identifier of the sticker set owner
|
||||
UserID int64 `json:"user_id"`
|
||||
// Name Required. Sticker set name
|
||||
Name string `json:"name"`
|
||||
// OldSticker Required. File identifier of the replaced sticker
|
||||
OldSticker string `json:"old_sticker"`
|
||||
// Sticker Required. A JSON-serialized object with information about the added sticker. If exactly the same
|
||||
// sticker had already been added to the set, then the set remains unchanged.
|
||||
Sticker InputSticker `json:"sticker"`
|
||||
}
|
||||
|
||||
// ReplaceStickerInSet replaces an existing sticker in a set with a new one.
|
||||
@@ -267,7 +322,9 @@ func (api *API) ReplaceStickerInSetWithContext(ctx context.Context, params Repla
|
||||
// Since: Bot API 6.6
|
||||
// See https://core.telegram.org/bots/api#setstickeremojilist
|
||||
type SetStickerEmojiList struct {
|
||||
Sticker string `json:"sticker"`
|
||||
// Sticker Required. File identifier of the sticker
|
||||
Sticker string `json:"sticker"`
|
||||
// EmojiList Required. A JSON-serialized list of 1-20 emoji associated with the sticker
|
||||
EmojiList []string `json:"emoji_list"`
|
||||
}
|
||||
|
||||
@@ -293,7 +350,10 @@ func (api *API) SetStickerEmojiListWithContext(ctx context.Context, params SetSt
|
||||
// Since: Bot API 6.6
|
||||
// See https://core.telegram.org/bots/api#setstickerkeywords
|
||||
type SetStickerKeywords struct {
|
||||
Sticker string `json:"sticker"`
|
||||
// Sticker Required. File identifier of the sticker
|
||||
Sticker string `json:"sticker"`
|
||||
// Keywords Optional. A JSON-serialized list of 0-20 search keywords for the sticker with total length of up
|
||||
// to 64 characters
|
||||
Keywords []string `json:"keywords"`
|
||||
}
|
||||
|
||||
@@ -319,7 +379,10 @@ func (api *API) SetStickerKeywordsWithContext(ctx context.Context, params SetSti
|
||||
// Since: Bot API 6.6
|
||||
// See https://core.telegram.org/bots/api#setstickermaskposition
|
||||
type SetStickerMaskPosition struct {
|
||||
Sticker string `json:"sticker"`
|
||||
// Sticker Required. File identifier of the sticker
|
||||
Sticker string `json:"sticker"`
|
||||
// MaskPosition Optional. A JSON-serialized object with the position where the mask should be placed on
|
||||
// faces. Omit the parameter to remove the mask position.
|
||||
MaskPosition *MaskPosition `json:"mask_position,omitempty"`
|
||||
}
|
||||
|
||||
@@ -345,7 +408,9 @@ func (api *API) SetStickerMaskPositionWithContext(ctx context.Context, params Se
|
||||
// Since: Bot API 6.6
|
||||
// See https://core.telegram.org/bots/api#setstickersettitle
|
||||
type SetStickerSetTitle struct {
|
||||
Name string `json:"name"`
|
||||
// Name Required. Sticker set name
|
||||
Name string `json:"name"`
|
||||
// Title Required. Sticker set title, 1-64 characters
|
||||
Title string `json:"title"`
|
||||
}
|
||||
|
||||
@@ -371,10 +436,23 @@ func (api *API) SetStickerSetTitleWithContext(ctx context.Context, params SetSti
|
||||
// Since: Bot API 6.6
|
||||
// See https://core.telegram.org/bots/api#setstickersetthumbnail
|
||||
type SetStickerSetThumbnail struct {
|
||||
Name string `json:"name"`
|
||||
UserID int64 `json:"user_id"`
|
||||
Thumbnail string `json:"thumbnail"`
|
||||
Format InputStickerFormat `json:"format"`
|
||||
// Name Required. Sticker set name
|
||||
Name string `json:"name"`
|
||||
// UserID Required. User identifier of the sticker set owner
|
||||
UserID int64 `json:"user_id"`
|
||||
// Thumbnail Optional. A .WEBP or .PNG image with the thumbnail, must be up to 128 kilobytes in size and
|
||||
// have a width and height of exactly 100px, or a .TGS animation with a thumbnail up to 32 kilobytes in size
|
||||
// (see https://core.telegram.org/stickers#animation-requirements for animated sticker technical
|
||||
// requirements), or a .WEBM video with the thumbnail up to 32 kilobytes in size; see
|
||||
// https://core.telegram.org/stickers#video-requirements for video sticker technical requirements. Pass a
|
||||
// file_id as a String to send a file that already exists on the Telegram servers, pass an HTTP URL as a
|
||||
// String for Telegram to get a file from the Internet, or upload a new one using multipart/form-data. More
|
||||
// information on Sending Files ». Animated and video sticker set thumbnails can't be uploaded via HTTP
|
||||
// URL. If omitted, then the thumbnail is dropped and the first sticker is used as the thumbnail.
|
||||
Thumbnail string `json:"thumbnail"`
|
||||
// Format Required. Format of the thumbnail, must be one of “static” for a .WEBP or .PNG image,
|
||||
// “animated” for a .TGS animation, or “video” for a .WEBM video
|
||||
Format InputStickerFormat `json:"format"`
|
||||
}
|
||||
|
||||
// SetStickerSetThumbnail sets the thumbnail of a sticker set.
|
||||
@@ -399,7 +477,10 @@ func (api *API) SetStickerSetThumbnailWithContext(ctx context.Context, params Se
|
||||
// Since: Bot API 6.6
|
||||
// See https://core.telegram.org/bots/api#setcustomemojistickersetthumbnail
|
||||
type SetCustomEmojiStickerSetThumbnail struct {
|
||||
Name string `json:"name"`
|
||||
// Name Required. Sticker set name
|
||||
Name string `json:"name"`
|
||||
// CustomEmojiID Optional. Custom emoji identifier of a sticker from the sticker set; pass an empty string
|
||||
// to drop the thumbnail and use the first sticker as the thumbnail
|
||||
CustomEmojiID string `json:"custom_emoji_id,omitempty"`
|
||||
}
|
||||
|
||||
@@ -425,6 +506,7 @@ func (api *API) SetCustomEmojiStickerSetThumbnailWithContext(ctx context.Context
|
||||
// Since: Bot API 6.6
|
||||
// See https://core.telegram.org/bots/api#deletestickerset
|
||||
type DeleteStickerSet struct {
|
||||
// Name Required. Sticker set name
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
|
||||
+64
-26
@@ -18,10 +18,17 @@ const (
|
||||
// Since: Bot API 3.2
|
||||
// See https://core.telegram.org/bots/api#maskposition
|
||||
type MaskPosition struct {
|
||||
Point MaskPositionPoint `json:"point"`
|
||||
XShift float32 `json:"x_shift"`
|
||||
YShift float32 `json:"y_shift"`
|
||||
Scale float32 `json:"scale"`
|
||||
// Point The part of the face relative to which the mask should be placed. One of “forehead”,
|
||||
// “eyes”, “mouth”, or “chin”.
|
||||
Point MaskPositionPoint `json:"point"`
|
||||
// XShift Shift by X-axis measured in widths of the mask scaled to the face size, from left to right. For
|
||||
// example, choosing -1.0 will place mask just to the left of the default mask position.
|
||||
XShift float32 `json:"x_shift"`
|
||||
// YShift Shift by Y-axis measured in heights of the mask scaled to the face size, from top to bottom. For
|
||||
// example, 1.0 will place the mask just below the default mask position.
|
||||
YShift float32 `json:"y_shift"`
|
||||
// Scale Mask scaling coefficient. For example, 2.0 means double size.
|
||||
Scale float32 `json:"scale"`
|
||||
}
|
||||
|
||||
// StickerType represents the type of a sticker.
|
||||
@@ -40,32 +47,53 @@ const (
|
||||
// Since: Bot API 1.0
|
||||
// See https://core.telegram.org/bots/api#sticker
|
||||
type Sticker struct {
|
||||
FileID string `json:"file_id"`
|
||||
// FileID Identifier for this file, which can be used to download or reuse the file
|
||||
FileID string `json:"file_id"`
|
||||
// FileUniqueID Unique identifier for this file, which is supposed to be the same over time and for
|
||||
// different bots. Can't be used to download or reuse the file.
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
Width int `json:"width"`
|
||||
Height int `json:"height"`
|
||||
// Width Sticker width
|
||||
Width int `json:"width"`
|
||||
// Height Sticker height
|
||||
Height int `json:"height"`
|
||||
|
||||
Type StickerType `json:"type"` // Since: Bot API 6.2
|
||||
IsAnimated bool `json:"is_animated"` // Since: Bot API 4.4
|
||||
IsVideo bool `json:"is_video"` // Since: Bot API 5.7
|
||||
Thumbnail *PhotoSize `json:"thumbnail,omitempty"` // Since: Bot API 6.6
|
||||
Emoji *string `json:"emoji,omitempty"`
|
||||
SetName *string `json:"set_name,omitempty"` // Since: Bot API 3.2
|
||||
MaskPosition *MaskPosition `json:"mask_position,omitempty"` // Since: Bot API 3.2
|
||||
CustomEmojiID *string `json:"custom_emoji_id,omitempty"` // Since: Bot API 6.2
|
||||
NeedRepainting *bool `json:"need_repainting,omitempty"` // Since: Bot API 6.6
|
||||
FileSize *int64 `json:"file_size,omitempty"`
|
||||
// Type Type of the sticker, currently one of “regular”, “mask”, “custom_emoji”. The type of the
|
||||
// sticker is independent from its format, which is determined by the fields is_animated and is_video.
|
||||
Type StickerType `json:"type"` // Since: Bot API 6.2
|
||||
// IsAnimated True, if the sticker is animated
|
||||
IsAnimated bool `json:"is_animated"` // Since: Bot API 4.4
|
||||
// IsVideo True, if the sticker is a video sticker
|
||||
IsVideo bool `json:"is_video"` // Since: Bot API 5.7
|
||||
// Thumbnail Optional. Sticker thumbnail in the .WEBP or .JPG format
|
||||
Thumbnail *PhotoSize `json:"thumbnail,omitempty"` // Since: Bot API 6.6
|
||||
// Emoji Optional. Emoji associated with the sticker
|
||||
Emoji *string `json:"emoji,omitempty"`
|
||||
// SetName Optional. Name of the sticker set to which the sticker belongs
|
||||
SetName *string `json:"set_name,omitempty"` // Since: Bot API 3.2
|
||||
// MaskPosition Optional. For mask stickers, the position where the mask should be placed
|
||||
MaskPosition *MaskPosition `json:"mask_position,omitempty"` // Since: Bot API 3.2
|
||||
// CustomEmojiID Optional. For custom emoji stickers, unique identifier of the custom emoji
|
||||
CustomEmojiID *string `json:"custom_emoji_id,omitempty"` // Since: Bot API 6.2
|
||||
// NeedRepainting reports whether Telegram must recolor the custom emoji sticker.
|
||||
NeedRepainting *bool `json:"need_repainting,omitempty"` // Since: Bot API 6.6
|
||||
// FileSize Optional. File size in bytes
|
||||
FileSize *int64 `json:"file_size,omitempty"`
|
||||
}
|
||||
|
||||
// StickerSet represents a sticker set.
|
||||
// Since: Bot API 3.2
|
||||
// See https://core.telegram.org/bots/api#stickerset
|
||||
type StickerSet struct {
|
||||
Name string `json:"name"`
|
||||
Title string `json:"title"`
|
||||
// Name Sticker set name
|
||||
Name string `json:"name"`
|
||||
// Title Sticker set title
|
||||
Title string `json:"title"`
|
||||
// StickerType Type of stickers in the set, currently one of “regular”, “mask”, “custom_emoji”
|
||||
StickerType StickerType `json:"sticker_type"`
|
||||
Stickers []Sticker `json:"stickers"`
|
||||
Thumbnail *PhotoSize `json:"thumbnail,omitempty"`
|
||||
// Stickers List of all set stickers
|
||||
Stickers []Sticker `json:"stickers"`
|
||||
// Thumbnail Optional. Sticker set thumbnail in the .WEBP, .TGS, or .WEBM format
|
||||
Thumbnail *PhotoSize `json:"thumbnail,omitempty"`
|
||||
}
|
||||
|
||||
// InputStickerFormat represents the format of an input sticker.
|
||||
@@ -84,9 +112,19 @@ const (
|
||||
// Since: Bot API 6.6
|
||||
// See https://core.telegram.org/bots/api#inputsticker
|
||||
type InputSticker struct {
|
||||
Sticker string `json:"sticker"`
|
||||
Format InputStickerFormat `json:"format"`
|
||||
EmojiList []string `json:"emoji_list"`
|
||||
MaskPosition *MaskPosition `json:"mask_position,omitempty"`
|
||||
Keywords []string `json:"keywords,omitempty"`
|
||||
// Sticker The added sticker. Pass a file_id as a String to send a file that already exists on the Telegram
|
||||
// servers, pass an HTTP URL as a String for Telegram to get a file from the Internet, or pass
|
||||
// “attach://<file_attach_name>” to upload a new file using multipart/form-data under <file_attach_name>
|
||||
// name. Animated and video stickers can't be uploaded via HTTP URL. More information on Sending Files »
|
||||
Sticker string `json:"sticker"`
|
||||
// Format Format of the added sticker, must be one of “static” for a .WEBP or .PNG image, “animated”
|
||||
// for a .TGS animation, “video” for a .WEBM video
|
||||
Format InputStickerFormat `json:"format"`
|
||||
// EmojiList List of 1-20 emoji associated with the sticker
|
||||
EmojiList []string `json:"emoji_list"`
|
||||
// MaskPosition Optional. Position where the mask should be placed on faces. For “mask” stickers only.
|
||||
MaskPosition *MaskPosition `json:"mask_position,omitempty"`
|
||||
// Keywords Optional. List of 0-20 search keywords for the sticker with total length of up to 64 characters.
|
||||
// For “regular” and “custom_emoji” stickers only.
|
||||
Keywords []string `json:"keywords,omitempty"`
|
||||
}
|
||||
|
||||
+526
-198
@@ -74,37 +74,91 @@ const (
|
||||
// Since: Bot API 1.0
|
||||
// See https://core.telegram.org/bots/api#update
|
||||
type Update struct {
|
||||
// Type is the locally derived update type and is not part of Telegram JSON.
|
||||
Type UpdateType `json:"-"`
|
||||
|
||||
UpdateID int `json:"update_id"`
|
||||
Message *Message `json:"message,omitempty"`
|
||||
EditedMessage *Message `json:"edited_message,omitempty"`
|
||||
ChannelPost *Message `json:"channel_post,omitempty"` // Since: Bot API 2.3
|
||||
// UpdateID The update's unique identifier. Update identifiers start from a certain positive number and
|
||||
// increase sequentially. This identifier becomes especially handy if you're using webhooks, since it allows
|
||||
// you to ignore repeated updates or to restore the correct update sequence, should they get out of order.
|
||||
// If there are no new updates for at least a week, then identifier of the next update will be chosen
|
||||
// randomly instead of sequentially.
|
||||
UpdateID int `json:"update_id"`
|
||||
// Message Optional. New incoming message of any kind - text, photo, sticker, etc.
|
||||
Message *Message `json:"message,omitempty"`
|
||||
// EditedMessage Optional. New version of a message that is known to the bot and was edited. This update may
|
||||
// at times be triggered by changes to message fields that are either unavailable or not actively used by
|
||||
// your bot.
|
||||
EditedMessage *Message `json:"edited_message,omitempty"`
|
||||
// ChannelPost Optional. New incoming channel post of any kind - text, photo, sticker, etc.
|
||||
ChannelPost *Message `json:"channel_post,omitempty"` // Since: Bot API 2.3
|
||||
// EditedChannelPost Optional. New version of a channel post that is known to the bot and was edited. This
|
||||
// update may at times be triggered by changes to message fields that are either unavailable or not actively
|
||||
// used by your bot.
|
||||
EditedChannelPost *Message `json:"edited_channel_post,omitempty"` // Since: Bot API 2.3
|
||||
|
||||
BusinessConnection *BusinessConnection `json:"business_connection,omitempty"` // Since: Bot API 7.2
|
||||
BusinessMessage *Message `json:"business_message,omitempty"` // Since: Bot API 7.2
|
||||
EditedBusinessMessage *Message `json:"edited_business_message,omitempty"` // Since: Bot API 7.2
|
||||
DeletedBusinessMessages *BusinessMessagesDeleted `json:"deleted_business_messages,omitempty"` // Since: Bot API 7.2
|
||||
GuestMessage *Message `json:"guest_message,omitempty"` // Since: Bot API 10.0
|
||||
MessageReaction *MessageReactionUpdated `json:"message_reaction,omitempty"` // Since: Bot API 7.0
|
||||
MessageReactionCount *MessageReactionCountUpdated `json:"message_reaction_count,omitempty"` // Since: Bot API 7.0
|
||||
// BusinessConnection Optional. The bot was connected to or disconnected from a business account, or a user
|
||||
// edited an existing connection with the bot
|
||||
BusinessConnection *BusinessConnection `json:"business_connection,omitempty"` // Since: Bot API 7.2
|
||||
// BusinessMessage Optional. New message from a connected business account
|
||||
BusinessMessage *Message `json:"business_message,omitempty"` // Since: Bot API 7.2
|
||||
// EditedBusinessMessage Optional. New version of a message from a connected business account
|
||||
EditedBusinessMessage *Message `json:"edited_business_message,omitempty"` // Since: Bot API 7.2
|
||||
// DeletedBusinessMessages Optional. Messages were deleted from a connected business account
|
||||
DeletedBusinessMessages *BusinessMessagesDeleted `json:"deleted_business_messages,omitempty"` // Since: Bot API 7.2
|
||||
// GuestMessage Optional. New guest message. The bot can use the field Message.guest_query_id and the method
|
||||
// answerGuestQuery to send a message in response.
|
||||
GuestMessage *Message `json:"guest_message,omitempty"` // Since: Bot API 10.0
|
||||
// MessageReaction Optional. A reaction to a message was changed by a user. The bot must be an administrator
|
||||
// in the chat and must explicitly specify "message_reaction" in the list of allowed_updates to receive
|
||||
// these updates. The update isn't received for reactions set by bots.
|
||||
MessageReaction *MessageReactionUpdated `json:"message_reaction,omitempty"` // Since: Bot API 7.0
|
||||
// MessageReactionCount Optional. Reactions to a message with anonymous reactions were changed. The bot must
|
||||
// be an administrator in the chat and must explicitly specify "message_reaction_count" in the list of
|
||||
// allowed_updates to receive these updates. The updates are grouped and can be sent with delay up to a few
|
||||
// minutes.
|
||||
MessageReactionCount *MessageReactionCountUpdated `json:"message_reaction_count,omitempty"` // Since: Bot API 7.0
|
||||
|
||||
InlineQuery *InlineQuery `json:"inline_query,omitempty"` // Since: Bot API 1.7
|
||||
// InlineQuery Optional. New incoming inline query
|
||||
InlineQuery *InlineQuery `json:"inline_query,omitempty"` // Since: Bot API 1.7
|
||||
// ChosenInlineResult Optional. The result of an inline query that was chosen by a user and sent to their
|
||||
// chat partner. Please see our documentation on the feedback collecting for details on how to enable these
|
||||
// updates for your bot.
|
||||
ChosenInlineResult *ChosenInlineResult `json:"chosen_inline_result,omitempty"` // Since: Bot API 1.8
|
||||
CallbackQuery *CallbackQuery `json:"callback_query,omitempty"` // Since: Bot API 2.0
|
||||
ShippingQuery *ShippingQuery `json:"shipping_query,omitempty"` // Since: Bot API 3.0
|
||||
PreCheckoutQuery *PreCheckoutQuery `json:"pre_checkout_query,omitempty"` // Since: Bot API 3.0
|
||||
// CallbackQuery Optional. New incoming callback query
|
||||
CallbackQuery *CallbackQuery `json:"callback_query,omitempty"` // Since: Bot API 2.0
|
||||
// ShippingQuery Optional. New incoming shipping query. Only for invoices with flexible price.
|
||||
ShippingQuery *ShippingQuery `json:"shipping_query,omitempty"` // Since: Bot API 3.0
|
||||
// PreCheckoutQuery Optional. New incoming pre-checkout query. Contains full information about checkout.
|
||||
PreCheckoutQuery *PreCheckoutQuery `json:"pre_checkout_query,omitempty"` // Since: Bot API 3.0
|
||||
// PurchasedPaidMedia Optional. A user purchased paid media with a non-empty payload sent by the bot in a
|
||||
// non-channel chat
|
||||
PurchasedPaidMedia *PaidMediaPurchased `json:"purchased_paid_media,omitempty"` // Since: Bot API 7.10
|
||||
|
||||
Poll *Poll `json:"poll,omitempty"` // Since: Bot API 4.2
|
||||
PollAnswer *PollAnswer `json:"poll_answer,omitempty"` // Since: Bot API 4.6
|
||||
MyChatMember *ChatMemberUpdated `json:"my_chat_member,omitempty"` // Since: Bot API 5.1
|
||||
ChatMember *ChatMemberUpdated `json:"chat_member,omitempty"` // Since: Bot API 5.1
|
||||
ChatJoinRequest *ChatJoinRequest `json:"chat_join_request,omitempty"` // Since: Bot API 5.4
|
||||
ChatBoost *ChatBoostUpdated `json:"chat_boost,omitempty"` // Since: Bot API 7.0
|
||||
RemovedChatBoost *ChatBoostRemoved `json:"removed_chat_boost,omitempty"` // Since: Bot API 7.0
|
||||
// Poll Optional. New poll state. Bots receive only updates about manually stopped polls and polls, which
|
||||
// are sent by the bot.
|
||||
Poll *Poll `json:"poll,omitempty"` // Since: Bot API 4.2
|
||||
// PollAnswer Optional. A user changed their answer in a non-anonymous poll. Bots receive new votes only in
|
||||
// polls that were sent by the bot itself.
|
||||
PollAnswer *PollAnswer `json:"poll_answer,omitempty"` // Since: Bot API 4.6
|
||||
// MyChatMember Optional. The bot's chat member status was updated in a chat. For private chats, this update
|
||||
// is received only when the bot is blocked or unblocked by the user.
|
||||
MyChatMember *ChatMemberUpdated `json:"my_chat_member,omitempty"` // Since: Bot API 5.1
|
||||
// ChatMember Optional. A chat member's status was updated in a chat. The bot must be an administrator in
|
||||
// the chat and must explicitly specify "chat_member" in the list of allowed_updates to receive these
|
||||
// updates.
|
||||
ChatMember *ChatMemberUpdated `json:"chat_member,omitempty"` // Since: Bot API 5.1
|
||||
// ChatJoinRequest Optional. A request to join the chat has been sent. The bot must have the
|
||||
// can_invite_users administrator right in the chat to receive these updates.
|
||||
ChatJoinRequest *ChatJoinRequest `json:"chat_join_request,omitempty"` // Since: Bot API 5.4
|
||||
// ChatBoost Optional. A chat boost was added or changed. The bot must be an administrator in the chat to
|
||||
// receive these updates.
|
||||
ChatBoost *ChatBoostUpdated `json:"chat_boost,omitempty"` // Since: Bot API 7.0
|
||||
// RemovedChatBoost Optional. A boost was removed from a chat. The bot must be an administrator in the chat
|
||||
// to receive these updates.
|
||||
RemovedChatBoost *ChatBoostRemoved `json:"removed_chat_boost,omitempty"` // Since: Bot API 7.0
|
||||
|
||||
// ManagedBot Optional. A new bot was created to be managed by the bot, or token or owner of a managed bot
|
||||
// was changed
|
||||
ManagedBot *ManagedBotUpdated `json:"managed_bot,omitempty"` // Since: Bot API 9.6
|
||||
// Subscription contains a bot subscription update.
|
||||
Subscription *BotSubscriptionUpdated `json:"subscription,omitempty"` // Since: Bot API 10.2
|
||||
@@ -188,34 +242,60 @@ func (u *Update) UnmarshalJSON(data []byte) error {
|
||||
// Since: Bot API 2.2
|
||||
// See https://core.telegram.org/bots/api#webhookinfo
|
||||
type WebhookInfo struct {
|
||||
URL string `json:"url"`
|
||||
HasCustomCertificate bool `json:"has_custom_certificate"`
|
||||
PendingUpdateCount int `json:"pending_update_count"`
|
||||
IPAddress string `json:"ip_address,omitempty"`
|
||||
LastErrorDate int `json:"last_error_date,omitempty"`
|
||||
LastErrorMessage string `json:"last_error_message,omitempty"`
|
||||
LastSynchronizationErrorDate int `json:"last_synchronization_error_date,omitempty"`
|
||||
MaxConnections int `json:"max_connections,omitempty"`
|
||||
AllowedUpdates []string `json:"allowed_updates,omitempty"`
|
||||
// URL Webhook URL, may be empty if webhook is not set up
|
||||
URL string `json:"url"`
|
||||
// HasCustomCertificate True, if a custom certificate was provided for webhook certificate checks
|
||||
HasCustomCertificate bool `json:"has_custom_certificate"`
|
||||
// PendingUpdateCount Number of updates awaiting delivery
|
||||
PendingUpdateCount int `json:"pending_update_count"`
|
||||
// IPAddress Optional. Currently used webhook IP address
|
||||
IPAddress string `json:"ip_address,omitempty"`
|
||||
// LastErrorDate Optional. Unix time for the most recent error that happened when trying to deliver an
|
||||
// update via webhook
|
||||
LastErrorDate int `json:"last_error_date,omitempty"`
|
||||
// LastErrorMessage Optional. Error message in human-readable format for the most recent error that happened
|
||||
// when trying to deliver an update via webhook
|
||||
LastErrorMessage string `json:"last_error_message,omitempty"`
|
||||
// LastSynchronizationErrorDate Optional. Unix time of the most recent error that happened when trying to
|
||||
// synchronize available updates with Telegram datacenters
|
||||
LastSynchronizationErrorDate int `json:"last_synchronization_error_date,omitempty"`
|
||||
// MaxConnections Optional. The maximum allowed number of simultaneous HTTPS connections to the webhook for
|
||||
// update delivery
|
||||
MaxConnections int `json:"max_connections,omitempty"`
|
||||
// AllowedUpdates Optional. A list of update types the bot is subscribed to. Defaults to all update types
|
||||
// except chat_member, message_reaction, and message_reaction_count.
|
||||
AllowedUpdates []string `json:"allowed_updates,omitempty"`
|
||||
}
|
||||
|
||||
// ProximityAlertTriggered represents the content of a service message sent when a user triggers a proximity alert.
|
||||
// Since: Bot API 5.0
|
||||
type ProximityAlertTriggered struct {
|
||||
// Traveler User that triggered the alert
|
||||
Traveler User `json:"traveler"`
|
||||
Watcher User `json:"watcher"`
|
||||
Distance int `json:"distance"`
|
||||
// Watcher User that set the alert
|
||||
Watcher User `json:"watcher"`
|
||||
// Distance The distance between the users
|
||||
Distance int `json:"distance"`
|
||||
}
|
||||
|
||||
// InlineQuery represents an incoming inline query.
|
||||
// Since: Bot API 1.7
|
||||
// See https://core.telegram.org/bots/api#inlinequery
|
||||
type InlineQuery struct {
|
||||
ID string `json:"id"`
|
||||
From User `json:"from"`
|
||||
Query string `json:"query"`
|
||||
Offset string `json:"offset"`
|
||||
// ID Unique identifier for this query
|
||||
ID string `json:"id"`
|
||||
// From Sender
|
||||
From User `json:"from"`
|
||||
// Query Text of the query (up to 256 characters)
|
||||
Query string `json:"query"`
|
||||
// Offset Offset of the results to be returned, can be controlled by the bot
|
||||
Offset string `json:"offset"`
|
||||
// ChatType Optional. Type of the chat from which the inline query was sent. Can be either “sender” for
|
||||
// a private chat with the inline query sender, “private”, “group”, “supergroup”, or
|
||||
// “channel”. The chat type should be always known for requests sent from official clients and most
|
||||
// third-party clients, unless the request was sent from a secret chat.
|
||||
ChatType *ChatType `json:"chat_type,omitempty"`
|
||||
// Location Optional. Sender location, only for bots that request user location
|
||||
Location *Location `json:"location,omitempty"`
|
||||
}
|
||||
|
||||
@@ -223,46 +303,80 @@ type InlineQuery struct {
|
||||
// Since: Bot API 1.8
|
||||
// See https://core.telegram.org/bots/api#choseninlineresult
|
||||
type ChosenInlineResult struct {
|
||||
ResultID string `json:"result_id"`
|
||||
From User `json:"from"`
|
||||
Location *Location `json:"location,omitempty"`
|
||||
InlineMessageID string `json:"inline_message_id"`
|
||||
Query string `json:"query"`
|
||||
// ResultID The unique identifier for the result that was chosen
|
||||
ResultID string `json:"result_id"`
|
||||
// From The user that chose the result
|
||||
From User `json:"from"`
|
||||
// Location Optional. Sender location, only for bots that require user location
|
||||
Location *Location `json:"location,omitempty"`
|
||||
// InlineMessageID Optional. Identifier of the sent inline message. Available only if there is an inline
|
||||
// keyboard attached to the message. Will be also received in callback queries and can be used to edit the
|
||||
// message.
|
||||
InlineMessageID string `json:"inline_message_id"`
|
||||
// Query The query that was used to obtain the result
|
||||
Query string `json:"query"`
|
||||
}
|
||||
|
||||
// File represents a file ready to be downloaded.
|
||||
// Since: Bot API 1.0
|
||||
// See https://core.telegram.org/bots/api#file
|
||||
type File struct {
|
||||
FileID string `json:"file_id"`
|
||||
// FileID Identifier for this file, which can be used to download or reuse the file
|
||||
FileID string `json:"file_id"`
|
||||
// FileUniqueID Unique identifier for this file, which is supposed to be the same over time and for
|
||||
// different bots. Can't be used to download or reuse the file.
|
||||
FileUniqueID string `json:"file_unique_id"`
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
FilePath string `json:"file_path,omitempty"`
|
||||
// FileSize Optional. File size in bytes. It can be bigger than 2^31 and some programming languages may have
|
||||
// difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a signed 64-bit
|
||||
// integer or double-precision float type are safe for storing this value.
|
||||
FileSize int64 `json:"file_size,omitempty"`
|
||||
// FilePath Optional. File path. Use https://api.telegram.org/file/bot<token>/<file_path> to get the file.
|
||||
FilePath string `json:"file_path,omitempty"`
|
||||
}
|
||||
|
||||
// ChatMemberUpdated represents changes in the status of a chat member.
|
||||
// Since: Bot API 5.1
|
||||
// See https://core.telegram.org/bots/api#chatmemberupdated
|
||||
type ChatMemberUpdated struct {
|
||||
Chat Chat `json:"chat"`
|
||||
From User `json:"from"`
|
||||
Date int64 `json:"date"`
|
||||
OldChatMember ChatMember `json:"old_chat_member"`
|
||||
NewChatMember ChatMember `json:"new_chat_member"`
|
||||
InviteLink *ChatInviteLink `json:"invite_link,omitempty"`
|
||||
ViaJoinRequest *bool `json:"via_join_request,omitempty"`
|
||||
ViaChatFolderInviteLink *bool `json:"via_chat_folder_invite_link,omitempty"`
|
||||
// Chat Chat the user belongs to
|
||||
Chat Chat `json:"chat"`
|
||||
// From Performer of the action, which resulted in the change
|
||||
From User `json:"from"`
|
||||
// Date Date the change was done in Unix time
|
||||
Date int64 `json:"date"`
|
||||
// OldChatMember Previous information about the chat member
|
||||
OldChatMember ChatMember `json:"old_chat_member"`
|
||||
// NewChatMember New information about the chat member
|
||||
NewChatMember ChatMember `json:"new_chat_member"`
|
||||
// InviteLink Optional. Chat invite link, which was used by the user to join the chat; for joining by invite
|
||||
// link events only
|
||||
InviteLink *ChatInviteLink `json:"invite_link,omitempty"`
|
||||
// ViaJoinRequest Optional. True, if the user joined the chat after sending a direct join request without
|
||||
// using an invite link and being approved by an administrator
|
||||
ViaJoinRequest *bool `json:"via_join_request,omitempty"`
|
||||
// ViaChatFolderInviteLink Optional. True, if the user joined the chat via a chat folder invite link
|
||||
ViaChatFolderInviteLink *bool `json:"via_chat_folder_invite_link,omitempty"`
|
||||
}
|
||||
|
||||
// ChatJoinRequest represents a join request sent to a chat.
|
||||
// Since: Bot API 5.4
|
||||
// See https://core.telegram.org/bots/api#chatjoinrequest
|
||||
type ChatJoinRequest struct {
|
||||
Chat Chat `json:"chat"`
|
||||
From User `json:"from"`
|
||||
UserChatID int64 `json:"user_chat_id"`
|
||||
Date int64 `json:"date"`
|
||||
Bio *string `json:"bio,omitempty"`
|
||||
// Chat Chat to which the request was sent
|
||||
Chat Chat `json:"chat"`
|
||||
// From User that sent the join request
|
||||
From User `json:"from"`
|
||||
// UserChatID Identifier of a private chat with the user who sent the join request. This number may have
|
||||
// more than 32 significant bits and some programming languages may have difficulty/silent defects in
|
||||
// interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float
|
||||
// type are safe for storing this identifier. The bot can use this identifier for 5 minutes to send messages
|
||||
// until the join request is processed, assuming no other administrator contacted the user.
|
||||
UserChatID int64 `json:"user_chat_id"`
|
||||
// Date Date the request was sent in Unix time
|
||||
Date int64 `json:"date"`
|
||||
// Bio Optional. Bio of the user
|
||||
Bio *string `json:"bio,omitempty"`
|
||||
// InviteLink Optional. Chat invite link that was used by the user to send the join request
|
||||
InviteLink *ChatInviteLink `json:"invite_link,omitempty"`
|
||||
|
||||
// QueryID identifies the join request query; present only for bots
|
||||
@@ -275,188 +389,309 @@ type ChatJoinRequest struct {
|
||||
// Since: Bot API 1.0
|
||||
// See https://core.telegram.org/bots/api#location
|
||||
type Location struct {
|
||||
Latitude float64 `json:"latitude"`
|
||||
Longitude float64 `json:"longitude"`
|
||||
HorizontalAccuracy float64 `json:"horizontal_accuracy"`
|
||||
LivePeriod int `json:"live_period"`
|
||||
Heading int `json:"heading"`
|
||||
ProximityAlertRadius int `json:"proximity_alert_radius"`
|
||||
// Latitude Latitude as defined by the sender
|
||||
Latitude float64 `json:"latitude"`
|
||||
// Longitude Longitude as defined by the sender
|
||||
Longitude float64 `json:"longitude"`
|
||||
// HorizontalAccuracy Optional. The radius of uncertainty for the location, measured in meters; 0-1500
|
||||
HorizontalAccuracy float64 `json:"horizontal_accuracy"`
|
||||
// LivePeriod Optional. Time relative to the message sending date, during which the location can be updated;
|
||||
// in seconds. For active live locations only.
|
||||
LivePeriod int `json:"live_period"`
|
||||
// Heading Optional. The direction in which user is moving, in degrees; 1-360. For active live locations
|
||||
// only.
|
||||
Heading int `json:"heading"`
|
||||
// ProximityAlertRadius Optional. The maximum distance for proximity alerts about approaching another chat
|
||||
// member, in meters. For sent live locations only.
|
||||
ProximityAlertRadius int `json:"proximity_alert_radius"`
|
||||
}
|
||||
|
||||
// LocationAddress represents a human-readable address of a location.
|
||||
// Since: Bot API 8.0
|
||||
type LocationAddress struct {
|
||||
CountryCode string `json:"country_code"`
|
||||
State *string `json:"state,omitempty"`
|
||||
City *string `json:"city,omitempty"`
|
||||
Street *string `json:"street,omitempty"`
|
||||
// CountryCode The two-letter ISO 3166-1 alpha-2 country code of the country where the location is located
|
||||
CountryCode string `json:"country_code"`
|
||||
// State Optional. State of the location
|
||||
State *string `json:"state,omitempty"`
|
||||
// City Optional. City of the location
|
||||
City *string `json:"city,omitempty"`
|
||||
// Street Optional. Street address of the location
|
||||
Street *string `json:"street,omitempty"`
|
||||
}
|
||||
|
||||
// Venue represents a venue.
|
||||
// Since: Bot API 2.0
|
||||
// See https://core.telegram.org/bots/api#venue
|
||||
type Venue struct {
|
||||
Location Location `json:"location"`
|
||||
Title string `json:"title"`
|
||||
Address string `json:"address"`
|
||||
FoursquareID string `json:"foursquare_id,omitempty"`
|
||||
FoursquareType string `json:"foursquare_type,omitempty"`
|
||||
GooglePlaceID string `json:"google_place_id,omitempty"`
|
||||
GooglePlaceType string `json:"google_place_type,omitempty"`
|
||||
// Location Venue location. Can't be a live location.
|
||||
Location Location `json:"location"`
|
||||
// Title Name of the venue
|
||||
Title string `json:"title"`
|
||||
// Address Address of the venue
|
||||
Address string `json:"address"`
|
||||
// FoursquareID Optional. Foursquare identifier of the venue
|
||||
FoursquareID string `json:"foursquare_id,omitempty"`
|
||||
// FoursquareType Optional. Foursquare type of the venue. (For example, “arts_entertainment/default”,
|
||||
// “arts_entertainment/aquarium” or “food/icecream”.)
|
||||
FoursquareType string `json:"foursquare_type,omitempty"`
|
||||
// GooglePlaceID Optional. Google Places identifier of the venue
|
||||
GooglePlaceID string `json:"google_place_id,omitempty"`
|
||||
// GooglePlaceType Optional. Google Places type of the venue. (See supported types.)
|
||||
GooglePlaceType string `json:"google_place_type,omitempty"`
|
||||
}
|
||||
|
||||
// WebAppInfo contains information about a Web App.
|
||||
// Since: Bot API 6.0
|
||||
// See https://core.telegram.org/bots/api#webappinfo
|
||||
type WebAppInfo struct {
|
||||
// URL An HTTPS URL of a Web App to be opened with additional data as specified in Initializing Web Apps
|
||||
URL string `json:"url"`
|
||||
}
|
||||
|
||||
// WebAppData represents data sent from a Web App to the bot.
|
||||
// Since: Bot API 6.0
|
||||
type WebAppData struct {
|
||||
Data string `json:"data"`
|
||||
// Data The data. Be aware that a bad client can send arbitrary data in this field.
|
||||
Data string `json:"data"`
|
||||
// ButtonText Text of the web_app keyboard button from which the Web App was opened. Be aware that a bad
|
||||
// client can send arbitrary data in this field.
|
||||
ButtonText string `json:"button_text"`
|
||||
}
|
||||
|
||||
// StarAmount represents an amount of Telegram Stars.
|
||||
// Since: Bot API 7.5
|
||||
type StarAmount struct {
|
||||
Amount int `json:"amount"`
|
||||
// Amount Integer amount of Telegram Stars, rounded to 0; can be negative
|
||||
Amount int `json:"amount"`
|
||||
// NanostarAmount Optional. The number of 1/1000000000 shares of Telegram Stars; from -999999999 to
|
||||
// 999999999; can be negative if and only if amount is non-positive
|
||||
NanostarAmount int `json:"nanostar_amount"`
|
||||
}
|
||||
|
||||
// AcceptedGiftTypes represents the types of gifts accepted by a user or chat.
|
||||
// Since: Bot API 9.0
|
||||
type AcceptedGiftTypes struct {
|
||||
UnlimitedGifts bool `json:"unlimited_gifts"`
|
||||
LimitedGifts bool `json:"limited_gifts"`
|
||||
UniqueGifts bool `json:"unique_gifts"`
|
||||
// UnlimitedGifts True, if unlimited regular gifts are accepted
|
||||
UnlimitedGifts bool `json:"unlimited_gifts"`
|
||||
// LimitedGifts True, if limited regular gifts are accepted
|
||||
LimitedGifts bool `json:"limited_gifts"`
|
||||
// UniqueGifts True, if unique gifts or gifts that can be upgraded to unique for free are accepted
|
||||
UniqueGifts bool `json:"unique_gifts"`
|
||||
// PremiumSubscription True, if a Telegram Premium subscription is accepted
|
||||
PremiumSubscription bool `json:"premium_subscription"`
|
||||
GiftsFromChannels bool `json:"gifts_from_channels"`
|
||||
// GiftsFromChannels True, if transfers of unique gifts from channels are accepted
|
||||
GiftsFromChannels bool `json:"gifts_from_channels"`
|
||||
}
|
||||
|
||||
// GiftBackground represents the background of a gift.
|
||||
// Since: Bot API 9.0
|
||||
type GiftBackground struct {
|
||||
// CenterColor Center color of the background in RGB format
|
||||
CenterColor int `json:"center_color"`
|
||||
EdgeColor int `json:"edge_color"`
|
||||
TextColor int `json:"text_color"`
|
||||
// EdgeColor Edge color of the background in RGB format
|
||||
EdgeColor int `json:"edge_color"`
|
||||
// TextColor Text color of the background in RGB format
|
||||
TextColor int `json:"text_color"`
|
||||
}
|
||||
|
||||
// Gift represents a gift that can be sent.
|
||||
// Since: Bot API 9.0
|
||||
type Gift struct {
|
||||
ID string `json:"id"`
|
||||
Sticker Sticker `json:"sticker"`
|
||||
StarCount int `json:"star_count"`
|
||||
UpdateStarCount *int `json:"update_star_count,omitempty"`
|
||||
IsPremium *bool `json:"is_premium,omitempty"`
|
||||
HasColors *bool `json:"has_colors,omitempty"`
|
||||
TotalCount *int `json:"total_count,omitempty"`
|
||||
RemainingCount *int `json:"remaining_count,omitempty"`
|
||||
PersonalTotalCount *int `json:"personal_total_count,omitempty"`
|
||||
PersonalRemainingCount *int `json:"personal_remaining_count,omitempty"`
|
||||
Background *GiftBackground `json:"background,omitempty"`
|
||||
UniqueGiftVariantColor *int `json:"unique_gift_variant_color,omitempty"`
|
||||
PublisherChat *Chat `json:"publisher_chat,omitempty"`
|
||||
// ID Unique identifier of the gift
|
||||
ID string `json:"id"`
|
||||
// Sticker The sticker that represents the gift
|
||||
Sticker Sticker `json:"sticker"`
|
||||
// StarCount The number of Telegram Stars that must be paid to send the sticker
|
||||
StarCount int `json:"star_count"`
|
||||
// UpdateStarCount is the number of Stars required to upgrade the gift.
|
||||
UpdateStarCount *int `json:"update_star_count,omitempty"`
|
||||
// IsPremium Optional. True, if the gift can only be purchased by Telegram Premium subscribers
|
||||
IsPremium *bool `json:"is_premium,omitempty"`
|
||||
// HasColors Optional. True, if the gift can be used (after being upgraded) to customize a user's appearance
|
||||
HasColors *bool `json:"has_colors,omitempty"`
|
||||
// TotalCount Optional. The total number of gifts of this type that can be sent by all users; for limited
|
||||
// gifts only
|
||||
TotalCount *int `json:"total_count,omitempty"`
|
||||
// RemainingCount Optional. The number of remaining gifts of this type that can be sent by all users; for
|
||||
// limited gifts only
|
||||
RemainingCount *int `json:"remaining_count,omitempty"`
|
||||
// PersonalTotalCount Optional. The total number of gifts of this type that can be sent by the bot; for
|
||||
// limited gifts only
|
||||
PersonalTotalCount *int `json:"personal_total_count,omitempty"`
|
||||
// PersonalRemainingCount Optional. The number of remaining gifts of this type that can be sent by the bot;
|
||||
// for limited gifts only
|
||||
PersonalRemainingCount *int `json:"personal_remaining_count,omitempty"`
|
||||
// Background Optional. Background of the gift
|
||||
Background *GiftBackground `json:"background,omitempty"`
|
||||
// UniqueGiftVariantColor identifies the color used by unique variants of the gift.
|
||||
UniqueGiftVariantColor *int `json:"unique_gift_variant_color,omitempty"`
|
||||
// PublisherChat Optional. Information about the chat that published the gift
|
||||
PublisherChat *Chat `json:"publisher_chat,omitempty"`
|
||||
}
|
||||
|
||||
// Gifts represents a list of gifts.
|
||||
// Since: Bot API 9.0
|
||||
type Gifts struct {
|
||||
// Gifts The list of gifts
|
||||
Gifts []Gift `json:"gifts"`
|
||||
}
|
||||
|
||||
// UniqueGiftModel describes the model component of a unique gift.
|
||||
// Since: Bot API 9.0
|
||||
type UniqueGiftModel struct {
|
||||
Name string `json:"name"`
|
||||
Sticker Sticker `json:"sticker"`
|
||||
RarityPerMille int `json:"rarity_per_mille"`
|
||||
Rarity string `json:"rarity,omitempty"`
|
||||
// Name Name of the model
|
||||
Name string `json:"name"`
|
||||
// Sticker The sticker that represents the unique gift
|
||||
Sticker Sticker `json:"sticker"`
|
||||
// RarityPerMille The number of unique gifts that receive this model for every 1000 gift upgrades. Always 0
|
||||
// for crafted gifts.
|
||||
RarityPerMille int `json:"rarity_per_mille"`
|
||||
// Rarity Optional. Rarity of the model if it is a crafted model. Currently, can be “uncommon”,
|
||||
// “rare”, “epic”, or “legendary”.
|
||||
Rarity string `json:"rarity,omitempty"`
|
||||
}
|
||||
|
||||
// UniqueGiftSymbol describes the symbol component of a unique gift.
|
||||
// Since: Bot API 9.0
|
||||
type UniqueGiftSymbol struct {
|
||||
Name string `json:"name"`
|
||||
Sticker Sticker `json:"sticker"`
|
||||
RarityPerMille int `json:"rarity_per_mille"`
|
||||
// Name Name of the symbol
|
||||
Name string `json:"name"`
|
||||
// Sticker The sticker that represents the unique gift
|
||||
Sticker Sticker `json:"sticker"`
|
||||
// RarityPerMille The number of unique gifts that receive this model for every 1000 gifts upgraded
|
||||
RarityPerMille int `json:"rarity_per_mille"`
|
||||
}
|
||||
|
||||
// UniqueGiftBackdropColors describes the colors of a unique gift backdrop.
|
||||
// Since: Bot API 9.0
|
||||
type UniqueGiftBackdropColors struct {
|
||||
// CenterColor The color in the center of the backdrop in RGB format
|
||||
CenterColor int `json:"center_color"`
|
||||
EdgeColor int `json:"edge_color"`
|
||||
// EdgeColor The color on the edges of the backdrop in RGB format
|
||||
EdgeColor int `json:"edge_color"`
|
||||
// SymbolColor The color to be applied to the symbol in RGB format
|
||||
SymbolColor int `json:"symbol_color"`
|
||||
TextColor int `json:"text_color"`
|
||||
// TextColor The color for the text on the backdrop in RGB format
|
||||
TextColor int `json:"text_color"`
|
||||
}
|
||||
|
||||
// UniqueGiftBackdrop describes the backdrop of a unique gift.
|
||||
// Since: Bot API 9.0
|
||||
type UniqueGiftBackdrop struct {
|
||||
Name string `json:"name"`
|
||||
Colors UniqueGiftBackdropColors `json:"colors"`
|
||||
RarityPerMille int `json:"rarity_per_mille"`
|
||||
// Name Name of the backdrop
|
||||
Name string `json:"name"`
|
||||
// Colors Colors of the backdrop
|
||||
Colors UniqueGiftBackdropColors `json:"colors"`
|
||||
// RarityPerMille The number of unique gifts that receive this backdrop for every 1000 gifts upgraded
|
||||
RarityPerMille int `json:"rarity_per_mille"`
|
||||
}
|
||||
|
||||
// UniqueGiftColors represents color information for a unique gift.
|
||||
// Since: Bot API 9.3
|
||||
type UniqueGiftColors struct {
|
||||
ModelCustomEmojiID string `json:"model_custom_emoji_id"`
|
||||
SymbolCustomEmojiID string `json:"symbol_custom_emoji_id"`
|
||||
LightThemeMainColor int `json:"light_theme_main_color"`
|
||||
LightThemeOtherColors []int `json:"light_theme_other_colors"`
|
||||
DarkThemeMainColor int `json:"dark_theme_main_color"`
|
||||
DarkThemeOtherColors []int `json:"dark_theme_other_colors"`
|
||||
// ModelCustomEmojiID Custom emoji identifier of the unique gift's model
|
||||
ModelCustomEmojiID string `json:"model_custom_emoji_id"`
|
||||
// SymbolCustomEmojiID Custom emoji identifier of the unique gift's symbol
|
||||
SymbolCustomEmojiID string `json:"symbol_custom_emoji_id"`
|
||||
// LightThemeMainColor Main color used in light themes; RGB format
|
||||
LightThemeMainColor int `json:"light_theme_main_color"`
|
||||
// LightThemeOtherColors List of 1-3 additional colors used in light themes; RGB format
|
||||
LightThemeOtherColors []int `json:"light_theme_other_colors"`
|
||||
// DarkThemeMainColor Main color used in dark themes; RGB format
|
||||
DarkThemeMainColor int `json:"dark_theme_main_color"`
|
||||
// DarkThemeOtherColors List of 1-3 additional colors used in dark themes; RGB format
|
||||
DarkThemeOtherColors []int `json:"dark_theme_other_colors"`
|
||||
}
|
||||
|
||||
// UniqueGift represents a unique gift.
|
||||
// Since: Bot API 9.0
|
||||
type UniqueGift struct {
|
||||
GiftID string `json:"gift_id"`
|
||||
BaseName string `json:"base_name"`
|
||||
Name string `json:"name"`
|
||||
Number int `json:"number"`
|
||||
Model UniqueGiftModel `json:"model"`
|
||||
Symbol UniqueGiftSymbol `json:"symbol"`
|
||||
// GiftID Identifier of the regular gift from which the gift was upgraded
|
||||
GiftID string `json:"gift_id"`
|
||||
// BaseName Human-readable name of the regular gift from which this unique gift was upgraded
|
||||
BaseName string `json:"base_name"`
|
||||
// Name Unique name of the gift. This name can be used in https://t.me/nft/... links and story areas.
|
||||
Name string `json:"name"`
|
||||
// Number Unique number of the upgraded gift among gifts upgraded from the same regular gift
|
||||
Number int `json:"number"`
|
||||
// Model Model of the gift
|
||||
Model UniqueGiftModel `json:"model"`
|
||||
// Symbol Symbol of the gift
|
||||
Symbol UniqueGiftSymbol `json:"symbol"`
|
||||
// Backdrop Backdrop of the gift
|
||||
Backdrop UniqueGiftBackdrop `json:"backdrop"`
|
||||
|
||||
IsPremium bool `json:"is_premium,omitempty"`
|
||||
IsBurned bool `json:"is_burned,omitempty"`
|
||||
IsFromBlockchain bool `json:"is_from_blockchain,omitempty"`
|
||||
Colors *UniqueGiftColors `json:"colors,omitempty"`
|
||||
PublisherChat *Chat `json:"publisher_chat,omitempty"`
|
||||
// IsPremium Optional. True, if the original regular gift was exclusively purchaseable by Telegram Premium
|
||||
// subscribers
|
||||
IsPremium bool `json:"is_premium,omitempty"`
|
||||
// IsBurned Optional. True, if the gift was used to craft another gift and isn't available anymore
|
||||
IsBurned bool `json:"is_burned,omitempty"`
|
||||
// IsFromBlockchain Optional. True, if the gift is assigned from the TON blockchain and can't be resold or
|
||||
// transferred in Telegram
|
||||
IsFromBlockchain bool `json:"is_from_blockchain,omitempty"`
|
||||
// Colors Optional. The color scheme that can be used by the gift's owner for the chat's name, replies to
|
||||
// messages and link previews; for business account gifts and gifts that are currently on sale only
|
||||
Colors *UniqueGiftColors `json:"colors,omitempty"`
|
||||
// PublisherChat Optional. Information about the chat that published the gift
|
||||
PublisherChat *Chat `json:"publisher_chat,omitempty"`
|
||||
}
|
||||
|
||||
// GiftInfo contains information about a received gift.
|
||||
// Since: Bot API 9.0
|
||||
type GiftInfo struct {
|
||||
// Gift Information about the gift
|
||||
Gift Gift `json:"gift"`
|
||||
|
||||
OwnedGiftID string `json:"owned_gift_id,omitempty"`
|
||||
ConvertStarCount int `json:"convert_star_count,omitempty"`
|
||||
PrepaidUpgradeStarCount int `json:"prepaid_upgrade_star_count,omitempty"`
|
||||
IsUpgradeSeparate bool `json:"is_upgrade_separate,omitempty"`
|
||||
CanBeUpgraded bool `json:"can_be_upgraded,omitempty"`
|
||||
Text string `json:"text,omitempty"`
|
||||
Entities []MessageEntity `json:"entities,omitempty"`
|
||||
IsPrivate bool `json:"is_private,omitempty"`
|
||||
UniqueGiftNumber int `json:"unique_gift_number,omitempty"`
|
||||
// OwnedGiftID Optional. Unique identifier of the received gift for the bot; only present for gifts received
|
||||
// on behalf of business accounts
|
||||
OwnedGiftID string `json:"owned_gift_id,omitempty"`
|
||||
// ConvertStarCount Optional. Number of Telegram Stars that can be claimed by the receiver by converting the
|
||||
// gift; omitted if conversion to Telegram Stars is impossible
|
||||
ConvertStarCount int `json:"convert_star_count,omitempty"`
|
||||
// PrepaidUpgradeStarCount Optional. Number of Telegram Stars that were prepaid for the ability to upgrade
|
||||
// the gift
|
||||
PrepaidUpgradeStarCount int `json:"prepaid_upgrade_star_count,omitempty"`
|
||||
// IsUpgradeSeparate Optional. True, if the gift's upgrade was purchased after the gift was sent
|
||||
IsUpgradeSeparate bool `json:"is_upgrade_separate,omitempty"`
|
||||
// CanBeUpgraded Optional. True, if the gift can be upgraded to a unique gift
|
||||
CanBeUpgraded bool `json:"can_be_upgraded,omitempty"`
|
||||
// Text Optional. Text of the message that was added to the gift
|
||||
Text string `json:"text,omitempty"`
|
||||
// Entities Optional. Special entities that appear in the text
|
||||
Entities []MessageEntity `json:"entities,omitempty"`
|
||||
// IsPrivate Optional. True, if the sender and gift text are shown only to the gift receiver; otherwise,
|
||||
// everyone will be able to see them
|
||||
IsPrivate bool `json:"is_private,omitempty"`
|
||||
// UniqueGiftNumber Optional. Unique number reserved for this gift when upgraded. See the number field in
|
||||
// UniqueGift.
|
||||
UniqueGiftNumber int `json:"unique_gift_number,omitempty"`
|
||||
}
|
||||
|
||||
// UniqueGiftInfo contains information about a received unique gift.
|
||||
// Since: Bot API 9.0
|
||||
type UniqueGiftInfo struct {
|
||||
Gift UniqueGift `json:"gift"`
|
||||
Origin string `json:"origin"`
|
||||
LastResaleCurrency string `json:"last_resale_currency,omitempty"`
|
||||
LastResaleAmount int `json:"last_resale_amount,omitempty"`
|
||||
OwnedGiftID string `json:"owned_gift_id,omitempty"`
|
||||
TransferStarCount int `json:"transfer_star_count,omitempty"`
|
||||
NextTransferDate int `json:"next_transfer_date,omitempty"`
|
||||
// Gift Information about the gift
|
||||
Gift UniqueGift `json:"gift"`
|
||||
// Origin Origin of the gift. Currently, either “upgrade” for gifts upgraded from regular gifts,
|
||||
// “transfer” for gifts transferred from other users or channels, “resale” for gifts bought from
|
||||
// other users, “gifted_upgrade” for upgrades purchased after the gift was sent, or “offer” for
|
||||
// gifts bought or sold through gift purchase offers.
|
||||
Origin string `json:"origin"`
|
||||
// LastResaleCurrency Optional. For gifts bought from other users, the currency in which the payment for the
|
||||
// gift was done. Currently, one of “XTR” for Telegram Stars or “TON” for TON grams.
|
||||
LastResaleCurrency string `json:"last_resale_currency,omitempty"`
|
||||
// LastResaleAmount Optional. For gifts bought from other users, the price paid for the gift in either
|
||||
// Telegram Stars or nanograms
|
||||
LastResaleAmount int `json:"last_resale_amount,omitempty"`
|
||||
// OwnedGiftID Optional. Unique identifier of the received gift for the bot; only present for gifts received
|
||||
// on behalf of business accounts
|
||||
OwnedGiftID string `json:"owned_gift_id,omitempty"`
|
||||
// TransferStarCount Optional. Number of Telegram Stars that must be paid to transfer the gift; omitted if
|
||||
// the bot cannot transfer the gift
|
||||
TransferStarCount int `json:"transfer_star_count,omitempty"`
|
||||
// NextTransferDate Optional. Point in time (Unix timestamp) when the gift can be transferred. If it is in
|
||||
// the past, then the gift can be transferred now.
|
||||
NextTransferDate int `json:"next_transfer_date,omitempty"`
|
||||
}
|
||||
|
||||
// OwnedGiftType represents the type of an owned gift.
|
||||
@@ -473,92 +708,167 @@ const (
|
||||
// OwnedGift represents a gift owned by a user or chat.
|
||||
// Since: Bot API 9.0
|
||||
type OwnedGift struct {
|
||||
Type OwnedGiftType `json:"type"`
|
||||
OwnedGiftID string `json:"ownen_gift_id,omitempty"`
|
||||
SendDate int `json:"send_date,omitempty"`
|
||||
IsSaved bool `json:"is_saved,omitempty"`
|
||||
// Type identifies the regular or unique owned-gift variant.
|
||||
Type OwnedGiftType `json:"type"`
|
||||
// OwnedGiftID uniquely identifies a business account's owned gift when available.
|
||||
OwnedGiftID string `json:"owned_gift_id,omitempty"`
|
||||
// SendDate Date the gift was sent in Unix time
|
||||
SendDate int `json:"send_date,omitempty"`
|
||||
// IsSaved Optional. True, if the gift is displayed on the account's profile page; for gifts received on
|
||||
// behalf of business accounts only
|
||||
IsSaved bool `json:"is_saved,omitempty"`
|
||||
|
||||
// Gift contains the regular gift for the regular variant.
|
||||
// Fields specific to "regular" type
|
||||
Gift Gift `json:"gift"`
|
||||
SenderUser *User `json:"sender_user,omitempty"`
|
||||
Text string `json:"text,omitempty"`
|
||||
Entities []MessageEntity `json:"entities,omitempty"`
|
||||
IsPrivate bool `json:"is_private,omitempty"`
|
||||
CanBeUpgraded bool `json:"can_be_upgraded,omitempty"`
|
||||
WasRefunded bool `json:"was_refunded,omitempty"`
|
||||
ConvertStarCount int `json:"convert_star_count,omitempty"`
|
||||
PrepaidUpgradeStarCount int `json:"prepaid_upgrade_star_count,omitempty"`
|
||||
IsUpgradeSeparate bool `json:"is_upgrade_separate,omitempty"`
|
||||
UniqueGiftNumber int `json:"unique_gift_number,omitempty"`
|
||||
Gift Gift `json:"gift"`
|
||||
// SenderUser Optional. Sender of the gift if it is a known user
|
||||
SenderUser *User `json:"sender_user,omitempty"`
|
||||
// Text Optional. Text of the message that was added to the gift
|
||||
Text string `json:"text,omitempty"`
|
||||
// Entities Optional. Special entities that appear in the text
|
||||
Entities []MessageEntity `json:"entities,omitempty"`
|
||||
// IsPrivate Optional. True, if the sender and gift text are shown only to the gift receiver; otherwise,
|
||||
// everyone will be able to see them
|
||||
IsPrivate bool `json:"is_private,omitempty"`
|
||||
// CanBeUpgraded Optional. True, if the gift can be upgraded to a unique gift; for gifts received on behalf
|
||||
// of business accounts only
|
||||
CanBeUpgraded bool `json:"can_be_upgraded,omitempty"`
|
||||
// WasRefunded Optional. True, if the gift was refunded and isn't available anymore
|
||||
WasRefunded bool `json:"was_refunded,omitempty"`
|
||||
// ConvertStarCount Optional. Number of Telegram Stars that can be claimed by the receiver instead of the
|
||||
// gift; omitted if the gift cannot be converted to Telegram Stars; for gifts received on behalf of business
|
||||
// accounts only
|
||||
ConvertStarCount int `json:"convert_star_count,omitempty"`
|
||||
// PrepaidUpgradeStarCount Optional. Number of Telegram Stars that were paid for the ability to upgrade the
|
||||
// gift
|
||||
PrepaidUpgradeStarCount int `json:"prepaid_upgrade_star_count,omitempty"`
|
||||
// IsUpgradeSeparate Optional. True, if the gift's upgrade was purchased after the gift was sent; for gifts
|
||||
// received on behalf of business accounts only
|
||||
IsUpgradeSeparate bool `json:"is_upgrade_separate,omitempty"`
|
||||
// UniqueGiftNumber Optional. Unique number reserved for this gift when upgraded. See the number field in
|
||||
// UniqueGift.
|
||||
UniqueGiftNumber int `json:"unique_gift_number,omitempty"`
|
||||
|
||||
// CanBeTransferred Optional. True, if the gift can be transferred to another owner; for gifts received on
|
||||
// behalf of business accounts only
|
||||
// Fields specific to "unique" type
|
||||
CanBeTransferred bool `json:"can_be_transferred,omitempty"`
|
||||
TransferStarCount int `json:"transfer_star_count,omitempty"`
|
||||
NextTransferDate int `json:"next_transfer_date,omitempty"`
|
||||
CanBeTransferred bool `json:"can_be_transferred,omitempty"`
|
||||
// TransferStarCount Optional. Number of Telegram Stars that must be paid to transfer the gift; omitted if
|
||||
// the bot cannot transfer the gift
|
||||
TransferStarCount int `json:"transfer_star_count,omitempty"`
|
||||
// NextTransferDate Optional. Point in time (Unix timestamp) when the gift can be transferred. If it is in
|
||||
// the past, then the gift can be transferred now.
|
||||
NextTransferDate int `json:"next_transfer_date,omitempty"`
|
||||
}
|
||||
|
||||
// OwnedGifts represents a list of owned gifts with pagination.
|
||||
// Since: Bot API 9.0
|
||||
type OwnedGifts struct {
|
||||
TotalCount int `json:"total_count"`
|
||||
Gifts []OwnedGift `json:"gifts"`
|
||||
NextOffset string `json:"next_offset"`
|
||||
// TotalCount The total number of gifts owned by the user or the chat
|
||||
TotalCount int `json:"total_count"`
|
||||
// Gifts The list of gifts
|
||||
Gifts []OwnedGift `json:"gifts"`
|
||||
// NextOffset Optional. Offset for the next request. If empty, then there are no more results.
|
||||
NextOffset string `json:"next_offset"`
|
||||
}
|
||||
|
||||
// GiveawayCreated represents a service message about a giveaway being created.
|
||||
// Since: Bot API 7.0
|
||||
type GiveawayCreated struct {
|
||||
// PrizeStarCount Optional. The number of Telegram Stars to be split between giveaway winners; for Telegram
|
||||
// Star giveaways only
|
||||
PrizeStarCount int `json:"prize_star_count,omitempty"`
|
||||
}
|
||||
|
||||
// Giveaway represents a message about a scheduled giveaway.
|
||||
// Since: Bot API 7.0
|
||||
type Giveaway struct {
|
||||
Chats []Chat `json:"chats"`
|
||||
WinnersSelectionDate int `json:"winners_selection_date"`
|
||||
WinnerCount int `json:"winner_count"`
|
||||
// Chats The list of chats which the user must join to participate in the giveaway
|
||||
Chats []Chat `json:"chats"`
|
||||
// WinnersSelectionDate Point in time (Unix timestamp) when winners of the giveaway will be selected
|
||||
WinnersSelectionDate int `json:"winners_selection_date"`
|
||||
// WinnerCount The number of users which are supposed to be selected as winners of the giveaway
|
||||
WinnerCount int `json:"winner_count"`
|
||||
|
||||
OnlyNewMembers bool `json:"only_new_members,omitempty"`
|
||||
HasPublicWinners bool `json:"has_public_winners,omitempty"`
|
||||
PrizeDescription string `json:"prize_description,omitempty"`
|
||||
CountryCodes []string `json:"country_codes,omitempty"`
|
||||
PrizeStarCount int `json:"prize_star_count,omitempty"`
|
||||
PremiumSubscriptionMonthCount int `json:"premium_subscription_month_count,omitempty"`
|
||||
// OnlyNewMembers Optional. True, if only users who join the chats after the giveaway started should be
|
||||
// eligible to win
|
||||
OnlyNewMembers bool `json:"only_new_members,omitempty"`
|
||||
// HasPublicWinners Optional. True, if the list of giveaway winners will be visible to everyone
|
||||
HasPublicWinners bool `json:"has_public_winners,omitempty"`
|
||||
// PrizeDescription Optional. Description of additional giveaway prize
|
||||
PrizeDescription string `json:"prize_description,omitempty"`
|
||||
// CountryCodes Optional. A list of two-letter ISO 3166-1 alpha-2 country codes indicating the countries
|
||||
// from which eligible users for the giveaway must come. If empty, then all users can participate in the
|
||||
// giveaway. Users with a phone number that was bought on Fragment can always participate in giveaways.
|
||||
CountryCodes []string `json:"country_codes,omitempty"`
|
||||
// PrizeStarCount Optional. The number of Telegram Stars to be split between giveaway winners; for Telegram
|
||||
// Star giveaways only
|
||||
PrizeStarCount int `json:"prize_star_count,omitempty"`
|
||||
// PremiumSubscriptionMonthCount Optional. The number of months the Telegram Premium subscription won from
|
||||
// the giveaway will be active for; for Telegram Premium giveaways only
|
||||
PremiumSubscriptionMonthCount int `json:"premium_subscription_month_count,omitempty"`
|
||||
}
|
||||
|
||||
// GiveawayWinners represents a message about the completion of a giveaway with public winners.
|
||||
// Since: Bot API 7.0
|
||||
type GiveawayWinners struct {
|
||||
Chat Chat `json:"chat"`
|
||||
GiveawayMessageID int `json:"giveaway_message_id"`
|
||||
WinnersSelectionDate int `json:"winners_selection_date"`
|
||||
WinnerCount int `json:"winner_count"`
|
||||
Winners []User `json:"winners"`
|
||||
// Chat The chat that created the giveaway
|
||||
Chat Chat `json:"chat"`
|
||||
// GiveawayMessageID Identifier of the message with the giveaway in the chat
|
||||
GiveawayMessageID int `json:"giveaway_message_id"`
|
||||
// WinnersSelectionDate Point in time (Unix timestamp) when winners of the giveaway were selected
|
||||
WinnersSelectionDate int `json:"winners_selection_date"`
|
||||
// WinnerCount Total number of winners in the giveaway
|
||||
WinnerCount int `json:"winner_count"`
|
||||
// Winners List of up to 100 winners of the giveaway
|
||||
Winners []User `json:"winners"`
|
||||
|
||||
AdditionalChatCount int `json:"additional_chat_count,omitempty"`
|
||||
PrizeStarCount int `json:"prize_star_count,omitempty"`
|
||||
PremiumSubscriptionMonthCount int `json:"premium_subscription_month_count,omitempty"`
|
||||
UnclaimedPrizeCount int `json:"unclaimed_prize_count,omitempty"`
|
||||
OnlyNewMembers bool `json:"only_new_members,omitempty"`
|
||||
WasRefunded bool `json:"was_refunded,omitempty"`
|
||||
PrizeDescription string `json:"prize_description,omitempty"`
|
||||
// AdditionalChatCount Optional. The number of other chats the user had to join in order to be eligible for
|
||||
// the giveaway
|
||||
AdditionalChatCount int `json:"additional_chat_count,omitempty"`
|
||||
// PrizeStarCount Optional. The number of Telegram Stars that were split between giveaway winners; for
|
||||
// Telegram Star giveaways only
|
||||
PrizeStarCount int `json:"prize_star_count,omitempty"`
|
||||
// PremiumSubscriptionMonthCount Optional. The number of months the Telegram Premium subscription won from
|
||||
// the giveaway will be active for; for Telegram Premium giveaways only
|
||||
PremiumSubscriptionMonthCount int `json:"premium_subscription_month_count,omitempty"`
|
||||
// UnclaimedPrizeCount Optional. Number of undistributed prizes
|
||||
UnclaimedPrizeCount int `json:"unclaimed_prize_count,omitempty"`
|
||||
// OnlyNewMembers Optional. True, if only users who had joined the chats after the giveaway started were
|
||||
// eligible to win
|
||||
OnlyNewMembers bool `json:"only_new_members,omitempty"`
|
||||
// WasRefunded Optional. True, if the giveaway was canceled because the payment for it was refunded
|
||||
WasRefunded bool `json:"was_refunded,omitempty"`
|
||||
// PrizeDescription Optional. Description of additional giveaway prize
|
||||
PrizeDescription string `json:"prize_description,omitempty"`
|
||||
}
|
||||
|
||||
// GiveawayCompleted represents a service message about the completion of a giveaway without public winners.
|
||||
// Since: Bot API 7.0
|
||||
type GiveawayCompleted struct {
|
||||
WinnerCount int `json:"winner_count"`
|
||||
UnclaimedPrizeCount int `json:"unclaimed_prize_count,omitempty"`
|
||||
GiveawayMessage *Message `json:"giveaway_message,omitempty"`
|
||||
IsStarGiveaway bool `json:"is_star_giveaway,omitempty"`
|
||||
// WinnerCount Number of winners in the giveaway
|
||||
WinnerCount int `json:"winner_count"`
|
||||
// UnclaimedPrizeCount Optional. Number of undistributed prizes
|
||||
UnclaimedPrizeCount int `json:"unclaimed_prize_count,omitempty"`
|
||||
// GiveawayMessage Optional. Message with the giveaway that was completed, if it wasn't deleted
|
||||
GiveawayMessage *Message `json:"giveaway_message,omitempty"`
|
||||
// IsStarGiveaway Optional. True, if the giveaway is a Telegram Star giveaway. Otherwise, currently, the
|
||||
// giveaway is a Telegram Premium giveaway.
|
||||
IsStarGiveaway bool `json:"is_star_giveaway,omitempty"`
|
||||
}
|
||||
|
||||
// WriteAccessAllowed represents a service message about a user allowing a bot to write messages.
|
||||
// Since: Bot API 6.4
|
||||
type WriteAccessAllowed struct {
|
||||
FromRequest bool `json:"from_request,omitempty"`
|
||||
WebAppName string `json:"web_app_name,omitempty"`
|
||||
FromAttachmentMenu bool `json:"from_attachment_menu,omitempty"`
|
||||
// FromRequest Optional. True, if the access was granted after the user accepted an explicit request from a
|
||||
// Web App sent by the method requestWriteAccess
|
||||
FromRequest bool `json:"from_request,omitempty"`
|
||||
// WebAppName Optional. Name of the Web App, if the access was granted when the Web App was launched from a
|
||||
// link
|
||||
WebAppName string `json:"web_app_name,omitempty"`
|
||||
// FromAttachmentMenu Optional. True, if the access was granted when the bot was added to the attachment or
|
||||
// side menu
|
||||
FromAttachmentMenu bool `json:"from_attachment_menu,omitempty"`
|
||||
}
|
||||
|
||||
// BackgroundFillType represents the type of a background fill.
|
||||
@@ -577,14 +887,21 @@ const (
|
||||
// BackgroundFill describes the way a background is filled.
|
||||
// Since: Bot API 7.5
|
||||
type BackgroundFill struct {
|
||||
// Type identifies the concrete fill variant.
|
||||
Type BackgroundFillType `json:"type"`
|
||||
|
||||
// Color The color of the background fill in the RGB24 format
|
||||
Color int `json:"color,omitempty"`
|
||||
|
||||
TopColor int `json:"top_color,omitempty"`
|
||||
BottomColor int `json:"bottom_color,omitempty"`
|
||||
// TopColor Top color of the gradient in the RGB24 format
|
||||
TopColor int `json:"top_color,omitempty"`
|
||||
// BottomColor Bottom color of the gradient in the RGB24 format
|
||||
BottomColor int `json:"bottom_color,omitempty"`
|
||||
// RotationAngle Clockwise rotation angle of the background fill in degrees; 0-359
|
||||
RotationAngle int `json:"rotation_angle,omitempty"`
|
||||
|
||||
// Colors A list of the 3 or 4 base colors that are used to generate the freeform gradient in the RGB24
|
||||
// format
|
||||
Colors []int `json:"colors,omitempty"`
|
||||
}
|
||||
|
||||
@@ -606,18 +923,29 @@ const (
|
||||
// BackgroundType describes the type of a background.
|
||||
// Since: Bot API 7.5
|
||||
type BackgroundType struct {
|
||||
// Type identifies the concrete background variant.
|
||||
Type BackgroundTypeType `json:"type"`
|
||||
|
||||
Fill *BackgroundFill `json:"fill,omitempty"`
|
||||
DarkThemeDimming int `json:"dark_theme_dimming,omitempty"`
|
||||
// Fill contains the background fill for fill and pattern variants.
|
||||
Fill *BackgroundFill `json:"fill,omitempty"`
|
||||
// DarkThemeDimming Dimming of the background in dark themes, as a percentage; 0-100
|
||||
DarkThemeDimming int `json:"dark_theme_dimming,omitempty"`
|
||||
|
||||
Document *Document `json:"document,omitempty"`
|
||||
IsBlurred bool `json:"is_blurred,omitempty"`
|
||||
IsMoving bool `json:"is_moving,omitempty"`
|
||||
// Document contains the wallpaper or pattern document for document-backed variants.
|
||||
Document *Document `json:"document,omitempty"`
|
||||
// IsBlurred Optional. True, if the wallpaper is downscaled to fit in a 450x450 square and then box-blurred
|
||||
// with radius 12
|
||||
IsBlurred bool `json:"is_blurred,omitempty"`
|
||||
// IsMoving Optional. True, if the background moves slightly when the device is tilted
|
||||
IsMoving bool `json:"is_moving,omitempty"`
|
||||
|
||||
Intensity int `json:"intensity,omitempty"`
|
||||
// Intensity Intensity of the pattern when it is shown above the filled background; 0-100
|
||||
Intensity int `json:"intensity,omitempty"`
|
||||
// IsInverted Optional. True, if the background fill must be applied only to the pattern itself. All other
|
||||
// pixels are black in this case. For dark themes only.
|
||||
IsInverted bool `json:"is_inverted,omitempty"`
|
||||
|
||||
// ThemeName Name of the chat theme, which is usually an emoji
|
||||
ThemeName string `json:"theme_name,omitempty"`
|
||||
}
|
||||
|
||||
|
||||
+35
-27
@@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
@@ -133,6 +134,7 @@ func (r UploaderRequest[R, P]) doRequest(ctx context.Context, up *Uploader) (R,
|
||||
}
|
||||
url := fmt.Sprintf("%s/bot%s%s/%s", up.api.apiURL, up.api.token, methodPrefix, r.method)
|
||||
|
||||
retries := 0
|
||||
for {
|
||||
if up.api.Limiter != nil {
|
||||
if err := up.api.Limiter.Check(ctx, up.api.dropOverflowLimit, r.chatID); err != nil {
|
||||
@@ -140,23 +142,21 @@ func (r UploaderRequest[R, P]) doRequest(ctx context.Context, up *Uploader) (R,
|
||||
}
|
||||
}
|
||||
|
||||
buf, contentType, err := prepareMultipart(r.files, r.params)
|
||||
requestBody, contentType := prepareMultipartStream(r.files, r.params)
|
||||
req, err := http.NewRequestWithContext(ctx, "POST", url, requestBody)
|
||||
if err != nil {
|
||||
return zero, err
|
||||
}
|
||||
req, err := http.NewRequestWithContext(ctx, "POST", url, buf)
|
||||
if err != nil {
|
||||
return zero, err
|
||||
_ = requestBody.Close()
|
||||
return zero, fmt.Errorf("failed to create upload request: %w", err)
|
||||
}
|
||||
req.Header.Set("Content-Type", contentType)
|
||||
req.Header.Set("Accept", "application/json")
|
||||
req.Header.Set("User-Agent", fmt.Sprintf("Laniakea/%s", utils.VersionString))
|
||||
req.ContentLength = int64(buf.Len())
|
||||
|
||||
up.logger.Debugln("UPLOADER REQ", url)
|
||||
resp, err := up.api.client.Do(req)
|
||||
_ = requestBody.Close()
|
||||
if err != nil {
|
||||
return zero, err
|
||||
return zero, fmt.Errorf("HTTP upload request failed: %w", err)
|
||||
}
|
||||
|
||||
body, err := readBody(resp.Body)
|
||||
@@ -172,6 +172,11 @@ func (r UploaderRequest[R, P]) doRequest(ctx context.Context, up *Uploader) (R,
|
||||
}
|
||||
|
||||
if !response.Ok {
|
||||
responseErr := &ResponseError{
|
||||
Code: response.ErrorCode,
|
||||
Description: response.Description,
|
||||
Parameters: response.Parameters,
|
||||
}
|
||||
if response.ErrorCode == 429 && response.Parameters != nil && response.Parameters.RetryAfter != nil {
|
||||
after := *response.Parameters.RetryAfter
|
||||
up.logger.Warnf("Rate limited, retry after %d seconds (chat: %d)", after, r.chatID)
|
||||
@@ -182,19 +187,19 @@ func (r UploaderRequest[R, P]) doRequest(ctx context.Context, up *Uploader) (R,
|
||||
up.api.Limiter.SetGlobalLock(after)
|
||||
}
|
||||
}
|
||||
if retries >= up.api.maxRetries {
|
||||
return zero, fmt.Errorf("%w after %d retries: %w", ErrRetryLimit, retries, responseErr)
|
||||
}
|
||||
retries++
|
||||
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return zero, ctx.Err()
|
||||
case <-time.After(time.Duration(after) * time.Second):
|
||||
case <-time.After(retryDelay(after)):
|
||||
continue
|
||||
}
|
||||
}
|
||||
return zero, &ResponseError{
|
||||
Code: response.ErrorCode,
|
||||
Description: response.Description,
|
||||
Parameters: response.Parameters,
|
||||
}
|
||||
return zero, responseErr
|
||||
}
|
||||
return response.Result, nil
|
||||
}
|
||||
@@ -232,36 +237,39 @@ func (r UploaderRequest[R, P]) Do(up *Uploader) (R, error) {
|
||||
return r.DoWithContext(context.Background(), up)
|
||||
}
|
||||
|
||||
func prepareMultipart[P any](files []UploaderFile, params P) (*bytes.Buffer, string, error) {
|
||||
buf := bytes.NewBuffer(nil)
|
||||
w := multipart.NewWriter(buf)
|
||||
func prepareMultipartStream[P any](files []UploaderFile, params P) (io.ReadCloser, string) {
|
||||
reader, writer := io.Pipe()
|
||||
multipartWriter := multipart.NewWriter(writer)
|
||||
contentType := multipartWriter.FormDataContentType()
|
||||
go func() {
|
||||
err := writeMultipart(multipartWriter, files, params)
|
||||
_ = writer.CloseWithError(err)
|
||||
}()
|
||||
return reader, contentType
|
||||
}
|
||||
|
||||
func writeMultipart[P any](w *multipart.Writer, files []UploaderFile, params P) error {
|
||||
for _, file := range files {
|
||||
fw, err := w.CreateFormFile(string(file.field), file.filename)
|
||||
if err != nil {
|
||||
_ = w.Close()
|
||||
return nil, "", err
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = fw.Write(file.data)
|
||||
_, err = io.Copy(fw, bytes.NewReader(file.data))
|
||||
if err != nil {
|
||||
_ = w.Close()
|
||||
return nil, "", err
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
err := utils.Encode(w, params)
|
||||
if err != nil {
|
||||
_ = w.Close()
|
||||
return nil, "", err
|
||||
return err
|
||||
}
|
||||
|
||||
err = w.Close()
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
|
||||
return buf, w.FormDataContentType(), nil
|
||||
return w.Close()
|
||||
}
|
||||
|
||||
func uploaderTypeByExt(filename string) UploaderFileType {
|
||||
|
||||
@@ -278,19 +278,17 @@ func TestPrepareMultipartRichMessageUsesAttachName(t *testing.T) {
|
||||
}},
|
||||
}
|
||||
|
||||
buf, contentType, err := prepareMultipart(
|
||||
body, contentType := prepareMultipartStream(
|
||||
[]UploaderFile{NewUploaderFile("animation.mp4", []byte("animation")).SetAttachName("animation")},
|
||||
params,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("prepareMultipart returned error: %v", err)
|
||||
}
|
||||
defer func() { _ = body.Close() }()
|
||||
|
||||
_, contentTypeParams, err := mime.ParseMediaType(contentType)
|
||||
if err != nil {
|
||||
t.Fatalf("ParseMediaType returned error: %v", err)
|
||||
}
|
||||
reader := multipart.NewReader(buf, contentTypeParams["boundary"])
|
||||
reader := multipart.NewReader(body, contentTypeParams["boundary"])
|
||||
|
||||
parts := make(map[string]string)
|
||||
var fileData []byte
|
||||
@@ -324,6 +322,43 @@ func TestPrepareMultipartRichMessageUsesAttachName(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestUploaderStopsAfterConfiguredRetryLimit(t *testing.T) {
|
||||
calls := 0
|
||||
client := &http.Client{Transport: roundTripFunc(func(req *http.Request) (*http.Response, error) {
|
||||
_, _ = io.Copy(io.Discard, req.Body)
|
||||
calls++
|
||||
return &http.Response{
|
||||
StatusCode: http.StatusOK,
|
||||
Body: io.NopCloser(strings.NewReader(
|
||||
`{"ok":false,"error_code":429,"description":"retry","parameters":{"retry_after":0}}`,
|
||||
)),
|
||||
}, nil
|
||||
})}
|
||||
|
||||
api := NewAPI(NewAPIOpts("token").
|
||||
SetAPIURL("https://example.test").
|
||||
SetHTTPClient(client).
|
||||
SetMaxRetries(1))
|
||||
defer func() { _ = api.Close() }()
|
||||
uploader := NewUploader(api)
|
||||
defer func() { _ = uploader.Close() }()
|
||||
|
||||
_, err := uploader.SendPhoto(
|
||||
UploadPhoto{ChatID: 42},
|
||||
NewUploaderFile("photo.jpg", []byte("img")),
|
||||
)
|
||||
if !errors.Is(err, ErrRetryLimit) {
|
||||
t.Fatalf("expected ErrRetryLimit, got %v", err)
|
||||
}
|
||||
var responseErr *ResponseError
|
||||
if !errors.As(err, &responseErr) || responseErr.Code != http.StatusTooManyRequests {
|
||||
t.Fatalf("expected wrapped 429 ResponseError, got %v", err)
|
||||
}
|
||||
if calls != 2 {
|
||||
t.Fatalf("request count = %d, want 2", calls)
|
||||
}
|
||||
}
|
||||
|
||||
func readMultipartRequest(req *http.Request) (map[string]string, string, []byte, error) {
|
||||
_, params, err := mime.ParseMediaType(req.Header.Get("Content-Type"))
|
||||
if err != nil {
|
||||
|
||||
+379
-120
@@ -45,29 +45,59 @@ func (u *Uploader) SendRichMessageDraftWithContext(ctx context.Context, params S
|
||||
// Since: Bot API 1.0
|
||||
// See https://core.telegram.org/bots/api#sendphoto
|
||||
type UploadPhoto struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// Caption Optional. Photo caption (may also be used when resending photos by file_id), 0-1024 characters
|
||||
// after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the photo caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// ShowCaptionAboveMedia Optional. Pass True if the caption must be shown above the message media
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
// HasSpoiler Optional. Pass True if the photo needs to be covered with a spoiler animation
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendPhoto uploads a photo via multipart and sends it as a message.
|
||||
@@ -92,31 +122,61 @@ func (u *Uploader) SendPhotoWithContext(ctx context.Context, params UploadPhoto,
|
||||
// Since: Bot API 1.2
|
||||
// See https://core.telegram.org/bots/api#sendaudio
|
||||
type UploadAudio struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// Caption Optional. Audio caption, 0-1024 characters after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the audio caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
|
||||
Duration int `json:"duration,omitempty"`
|
||||
// Duration Optional. Duration of the audio in seconds
|
||||
Duration int `json:"duration,omitempty"`
|
||||
// Performer Optional. Performer
|
||||
Performer string `json:"performer,omitempty"`
|
||||
Title string `json:"title,omitempty"`
|
||||
// Title Optional. Track name
|
||||
Title string `json:"title,omitempty"`
|
||||
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendAudio uploads an audio file via multipart and sends it as a message.
|
||||
@@ -141,28 +201,58 @@ func (u *Uploader) SendAudioWithContext(ctx context.Context, params UploadAudio,
|
||||
// Since: Bot API 1.0
|
||||
// See https://core.telegram.org/bots/api#senddocument
|
||||
type UploadDocument struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// Caption Optional. Document caption (may also be used when resending documents by file_id), 0-1024
|
||||
// characters after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the document caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
|
||||
DisableContentTypeDetection bool `json:"disable_content_type_detection,omitempty"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// DisableContentTypeDetection Optional. Disables automatic server-side content type detection for files
|
||||
// uploaded using multipart/form-data
|
||||
DisableContentTypeDetection bool `json:"disable_content_type_detection,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendDocument uploads a document via multipart and sends it as a message.
|
||||
@@ -187,35 +277,70 @@ func (u *Uploader) SendDocumentWithContext(ctx context.Context, params UploadDoc
|
||||
// Since: Bot API 1.0
|
||||
// See https://core.telegram.org/bots/api#sendvideo
|
||||
type UploadVideo struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
// Duration Optional. Duration of sent video in seconds
|
||||
Duration int `json:"duration,omitempty"`
|
||||
Width int `json:"width,omitempty"`
|
||||
Height int `json:"height,omitempty"`
|
||||
// Width Optional. Video width
|
||||
Width int `json:"width,omitempty"`
|
||||
// Height Optional. Video height
|
||||
Height int `json:"height,omitempty"`
|
||||
|
||||
StartTimestamp int64 `json:"start_timestamp,omitempty"`
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// StartTimestamp Optional. Start timestamp for the video in the message
|
||||
StartTimestamp int64 `json:"start_timestamp,omitempty"`
|
||||
// Caption Optional. Video caption (may also be used when resending videos by file_id), 0-1024 characters
|
||||
// after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the video caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
SupportsStreaming bool `json:"supports_streaming,omitempty"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// ShowCaptionAboveMedia Optional. Pass True if the caption must be shown above the message media
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
// HasSpoiler Optional. Pass True if the video needs to be covered with a spoiler animation
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
// SupportsStreaming Optional. Pass True if the uploaded video is suitable for streaming
|
||||
SupportsStreaming bool `json:"supports_streaming,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendVideo uploads a video via multipart and sends it as a message.
|
||||
@@ -240,33 +365,66 @@ func (u *Uploader) SendVideoWithContext(ctx context.Context, params UploadVideo,
|
||||
// Since: Bot API 4.0
|
||||
// See https://core.telegram.org/bots/api#sendanimation
|
||||
type UploadAnimation struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
// Duration Optional. Duration of sent animation in seconds
|
||||
Duration int `json:"duration,omitempty"`
|
||||
Width int `json:"width,omitempty"`
|
||||
Height int `json:"height,omitempty"`
|
||||
// Width Optional. Animation width
|
||||
Width int `json:"width,omitempty"`
|
||||
// Height Optional. Animation height
|
||||
Height int `json:"height,omitempty"`
|
||||
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// Caption Optional. Animation caption (may also be used when resending animation by file_id), 0-1024
|
||||
// characters after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the animation caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// ShowCaptionAboveMedia Optional. Pass True if the caption must be shown above the message media
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
// HasSpoiler Optional. Pass True if the animation needs to be covered with a spoiler animation
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendAnimation uploads an animation via multipart and sends it as a message.
|
||||
@@ -291,28 +449,56 @@ func (u *Uploader) SendAnimationWithContext(ctx context.Context, params UploadAn
|
||||
// Since: Bot API 1.2
|
||||
// See https://core.telegram.org/bots/api#sendvoice
|
||||
type UploadVoice struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// Caption Optional. Voice message caption, 0-1024 characters after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the voice message caption. See formatting options for
|
||||
// more details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
Duration int `json:"duration,omitempty"`
|
||||
// Duration Optional. Duration of the voice message in seconds
|
||||
Duration int `json:"duration,omitempty"`
|
||||
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendVoice uploads a voice note via multipart and sends it as a message.
|
||||
@@ -337,26 +523,50 @@ func (u *Uploader) SendVoiceWithContext(ctx context.Context, params UploadVoice,
|
||||
// Since: Bot API 3.0
|
||||
// See https://core.telegram.org/bots/api#sendvideonote
|
||||
type UploadVideoNote struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target bot, supergroup or
|
||||
// channel in the format @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
|
||||
// Duration Optional. Duration of sent video in seconds
|
||||
Duration int `json:"duration,omitempty"`
|
||||
Length int `json:"length,omitempty"`
|
||||
// Length Optional. Video width and height, i.e. diameter of the video message
|
||||
Length int `json:"length,omitempty"`
|
||||
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendVideoNote uploads a video note via multipart and sends it as a message.
|
||||
@@ -381,6 +591,8 @@ func (u *Uploader) SendVideoNoteWithContext(ctx context.Context, params UploadVi
|
||||
// Since: Bot API 3.1
|
||||
// See https://core.telegram.org/bots/api#setchatphoto
|
||||
type UploadChatPhoto struct {
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel in the format
|
||||
// @username
|
||||
ChatID int64 `json:"chat_id"`
|
||||
}
|
||||
|
||||
@@ -407,12 +619,29 @@ func (u *Uploader) SetChatPhotoWithContext(ctx context.Context, params UploadCha
|
||||
// Use this type when uploading a self-signed certificate file.
|
||||
// See https://core.telegram.org/bots/api#setwebhook
|
||||
type UploadSetWebhook struct {
|
||||
URL string `json:"url"`
|
||||
IPAddress string `json:"ip_address,omitempty"`
|
||||
MaxConnections int8 `json:"max_connections,omitempty"`
|
||||
AllowedUpdates []UpdateType `json:"allowed_updates,omitempty"`
|
||||
DropPendingUpdates bool `json:"drop_pending_updates,omitempty"`
|
||||
SecretToken string `json:"secret_token,omitempty"`
|
||||
// URL Required. HTTPS URL to send updates to. Use an empty string to remove webhook integration.
|
||||
URL string `json:"url"`
|
||||
// IPAddress Optional. The fixed IP address which will be used to send webhook requests instead of the IP
|
||||
// address resolved through DNS
|
||||
IPAddress string `json:"ip_address,omitempty"`
|
||||
// MaxConnections Optional. The maximum allowed number of simultaneous HTTPS connections to the webhook for
|
||||
// update delivery, 1-100. Defaults to 40. Use lower values to limit the load on your bot's server, and
|
||||
// higher values to increase your bot's throughput.
|
||||
MaxConnections int8 `json:"max_connections,omitempty"`
|
||||
// AllowedUpdates Optional. A JSON-serialized list of the update types you want your bot to receive. For
|
||||
// example, specify ["message", "edited_channel_post", "callback_query"] to only receive updates of these
|
||||
// types. See Update for a complete list of available update types. Specify an empty list to receive all
|
||||
// update types except chat_member, message_reaction, and message_reaction_count (default). If not
|
||||
// specified, the previous setting will be used. Please note that this parameter doesn't affect updates
|
||||
// created before the call to the setWebhook, so unwanted updates may be received for a short period of
|
||||
// time.
|
||||
AllowedUpdates []UpdateType `json:"allowed_updates,omitempty"`
|
||||
// DropPendingUpdates Optional. Pass True to drop all pending updates
|
||||
DropPendingUpdates bool `json:"drop_pending_updates,omitempty"`
|
||||
// SecretToken Optional. A secret token to be sent in a header “X-Telegram-Bot-Api-Secret-Token” in
|
||||
// every webhook request, 1-256 characters. Only characters A-Z, a-z, 0-9, _ and - are allowed. The header
|
||||
// is useful to ensure that the request comes from a webhook set by you.
|
||||
SecretToken string `json:"secret_token,omitempty"`
|
||||
}
|
||||
|
||||
// SetWebhook uploads a certificate and sets a webhook URL.
|
||||
@@ -437,29 +666,59 @@ func (u *Uploader) SetWebhookWithContext(ctx context.Context, params UploadSetWe
|
||||
// Since: Bot API 10.0
|
||||
// See https://core.telegram.org/bots/api#sendlivephoto
|
||||
type UploadLivePhoto struct {
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
ChatID int64 `json:"chat_id"`
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
// BusinessConnectionID Optional. Unique identifier of the business connection on behalf of which the
|
||||
// message will be sent
|
||||
BusinessConnectionID string `json:"business_connection_id,omitempty"`
|
||||
// ChatID Required. Unique identifier for the target chat or username of the target channel (in the format
|
||||
// @channelusername)
|
||||
ChatID int64 `json:"chat_id"`
|
||||
// MessageThreadID Optional. Unique identifier for the target message thread (topic) of a forum; for forum
|
||||
// supergroups and private chats of bots with forum topic mode enabled only
|
||||
MessageThreadID int `json:"message_thread_id,omitempty"`
|
||||
// DirectMessagesTopicID Optional. Identifier of the direct messages topic to which the message will be
|
||||
// sent; required if the message is sent to a direct messages chat
|
||||
DirectMessagesTopicID int `json:"direct_messages_topic_id,omitempty"`
|
||||
|
||||
// ReceiverUserID identifies the user who can see the ephemeral message.
|
||||
ReceiverUserID int64 `json:"receiver_user_id,omitempty"` // Since: Bot API 10.2
|
||||
// CallbackQueryID identifies the callback query that triggered an ephemeral response.
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
Caption string `json:"caption,omitempty"`
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
CallbackQueryID string `json:"callback_query_id,omitempty"` // Since: Bot API 10.2
|
||||
// Caption Optional. Video caption (may also be used when resending videos by file_id), 0-1024 characters
|
||||
// after entities parsing
|
||||
Caption string `json:"caption,omitempty"`
|
||||
// ParseMode Optional. Mode for parsing entities in the video caption. See formatting options for more
|
||||
// details.
|
||||
ParseMode ParseMode `json:"parse_mode,omitempty"`
|
||||
// CaptionEntities Optional. A JSON-serialized list of special entities that appear in the caption, which
|
||||
// can be specified instead of parse_mode
|
||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
// ShowCaptionAboveMedia Optional. Pass True if the caption must be shown above the message media
|
||||
ShowCaptionAboveMedia bool `json:"show_caption_above_media,omitempty"`
|
||||
// HasSpoiler Optional. Pass True if the video needs to be covered with a spoiler animation
|
||||
HasSpoiler bool `json:"has_spoiler,omitempty"`
|
||||
// DisableNotification Optional. Sends the message silently. Users will receive a notification with no
|
||||
// sound.
|
||||
DisableNotification bool `json:"disable_notification,omitempty"`
|
||||
// ProtectContent Optional. Protects the contents of the sent message from forwarding and saving
|
||||
ProtectContent bool `json:"protect_content,omitempty"`
|
||||
// AllowPaidBroadcast Optional. Pass True to allow up to 1000 messages per second, ignoring broadcasting
|
||||
// limits for a fee of 0.1 Telegram Stars per message. The relevant Stars will be withdrawn from the bot's
|
||||
// balance.
|
||||
AllowPaidBroadcast bool `json:"allow_paid_broadcast,omitempty"`
|
||||
// MessageEffectID Optional. Unique identifier of the message effect to be added to the message; for private
|
||||
// chats only
|
||||
MessageEffectID string `json:"message_effect_id,omitempty"`
|
||||
|
||||
// SuggestedPostParameters Optional. A JSON-serialized object containing the parameters of the suggested
|
||||
// post to send; for direct messages chats only. If the message is sent as a reply to another suggested
|
||||
// post, then that suggested post is automatically declined.
|
||||
SuggestedPostParameters *SuggestedPostParameters `json:"suggested_post_parameters,omitempty"`
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
// ReplyParameters Optional. Description of the message to reply to
|
||||
ReplyParameters *ReplyParameters `json:"reply_parameters,omitempty"`
|
||||
// ReplyMarkup Optional. Additional interface options. A JSON-serialized object for an inline keyboard,
|
||||
// custom reply keyboard, instructions to remove a reply keyboard or to force a reply from the user.
|
||||
ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
|
||||
}
|
||||
|
||||
// SendLivePhoto uploads a live-photo video and its static image via multipart.
|
||||
|
||||
+49
-18
@@ -6,9 +6,14 @@ import "context"
|
||||
// Since: Bot API 1.4
|
||||
// See https://core.telegram.org/bots/api#getuserprofilephotos
|
||||
type GetUserProfilePhotos struct {
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
Offset int `json:"offset,omitempty"`
|
||||
Limit int `json:"limit,omitempty"`
|
||||
// Offset Optional. Sequential number of the first photo to be returned. By default, all photos are
|
||||
// returned.
|
||||
Offset int `json:"offset,omitempty"`
|
||||
// Limit Optional. Limits the number of photos to be retrieved. Values between 1-100 are accepted. Defaults
|
||||
// to 100.
|
||||
Limit int `json:"limit,omitempty"`
|
||||
}
|
||||
|
||||
// GetUserProfilePhotos returns a list of profile pictures for a user.
|
||||
@@ -32,9 +37,14 @@ func (api *API) GetUserProfilePhotosWithContext(ctx context.Context, params GetU
|
||||
// Since: Bot API 9.3
|
||||
// See https://core.telegram.org/bots/api#getuserprofileaudios
|
||||
type GetUserProfileAudios struct {
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
Offset int `json:"offset,omitempty"`
|
||||
Limit int `json:"limit,omitempty"`
|
||||
// Offset Optional. Sequential number of the first audio to be returned. By default, all audios are
|
||||
// returned.
|
||||
Offset int `json:"offset,omitempty"`
|
||||
// Limit Optional. Limits the number of audios to be retrieved. Values between 1-100 are accepted. Defaults
|
||||
// to 100.
|
||||
Limit int `json:"limit,omitempty"`
|
||||
}
|
||||
|
||||
// GetUserProfileAudios returns a list of profile audios for a user.
|
||||
@@ -58,9 +68,13 @@ func (api *API) GetUserProfileAudiosWithContext(ctx context.Context, params GetU
|
||||
// Since: Bot API 8.0
|
||||
// See https://core.telegram.org/bots/api#setuseremojistatus
|
||||
type SetUserEmojiStatus struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
EmojiID string `json:"emoji_status_custom_emoji_id,omitempty"`
|
||||
ExpirationDate int `json:"emoji_status_expiration_date,omitempty"`
|
||||
// UserID Required. Unique identifier of the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
// EmojiID Optional. Custom emoji identifier of the emoji status to set. Pass an empty string to remove the
|
||||
// status.
|
||||
EmojiID string `json:"emoji_status_custom_emoji_id,omitempty"`
|
||||
// ExpirationDate Optional. Expiration date of the emoji status, if any
|
||||
ExpirationDate int `json:"emoji_status_expiration_date,omitempty"`
|
||||
}
|
||||
|
||||
// SetUserEmojiStatus sets a custom emoji status for a user.
|
||||
@@ -85,15 +99,29 @@ func (api *API) SetUserEmojiStatusWithContext(ctx context.Context, params SetUse
|
||||
// Since: Bot API 9.3
|
||||
// See https://core.telegram.org/bots/api#getusergifts
|
||||
type GetUserGifts struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
ExcludeUnlimited bool `json:"exclude_unlimited,omitempty"`
|
||||
ExcludeLimitedUpgradable bool `json:"exclude_limited_upgradable,omitempty"`
|
||||
ExcludeLimitedNonUpgradable bool `json:"exclude_limited_non_upgradable,omitempty"`
|
||||
ExcludeUnique bool `json:"exclude_unique,omitempty"`
|
||||
ExcludeFromBlockchain bool `json:"exclude_from_blockchain,omitempty"`
|
||||
SortByPrice bool `json:"sort_by_price,omitempty"`
|
||||
Offset string `json:"offset,omitempty"`
|
||||
Limit int `json:"limit,omitempty"`
|
||||
// UserID Required. Unique identifier of the user
|
||||
UserID int64 `json:"user_id"`
|
||||
// ExcludeUnlimited Optional. Pass True to exclude gifts that can be purchased an unlimited number of times
|
||||
ExcludeUnlimited bool `json:"exclude_unlimited,omitempty"`
|
||||
// ExcludeLimitedUpgradable Optional. Pass True to exclude gifts that can be purchased a limited number of
|
||||
// times and can be upgraded to unique
|
||||
ExcludeLimitedUpgradable bool `json:"exclude_limited_upgradable,omitempty"`
|
||||
// ExcludeLimitedNonUpgradable Optional. Pass True to exclude gifts that can be purchased a limited number
|
||||
// of times and can't be upgraded to unique
|
||||
ExcludeLimitedNonUpgradable bool `json:"exclude_limited_non_upgradable,omitempty"`
|
||||
// ExcludeUnique Optional. Pass True to exclude unique gifts
|
||||
ExcludeUnique bool `json:"exclude_unique,omitempty"`
|
||||
// ExcludeFromBlockchain Optional. Pass True to exclude gifts that were assigned from the TON blockchain and
|
||||
// can't be resold or transferred in Telegram
|
||||
ExcludeFromBlockchain bool `json:"exclude_from_blockchain,omitempty"`
|
||||
// SortByPrice Optional. Pass True to sort results by gift price instead of send date. Sorting is applied
|
||||
// before pagination.
|
||||
SortByPrice bool `json:"sort_by_price,omitempty"`
|
||||
// Offset Optional. Offset of the first entry to return as received from the previous request; use an empty
|
||||
// string to get the first chunk of results
|
||||
Offset string `json:"offset,omitempty"`
|
||||
// Limit Optional. The maximum number of gifts to be returned; 1-100. Defaults to 100.
|
||||
Limit int `json:"limit,omitempty"`
|
||||
}
|
||||
|
||||
// GetUserGifts returns gifts owned by a user.
|
||||
@@ -117,9 +145,12 @@ func (api *API) GetUserGiftsWithContext(ctx context.Context, params GetUserGifts
|
||||
// Since: Bot API 10.0
|
||||
// See https://core.telegram.org/bots/api#getuserpersonalchatmessages
|
||||
type GetUserPersonalChatMessages struct {
|
||||
// UserID Required. Unique identifier for the target user
|
||||
UserID int64 `json:"user_id"`
|
||||
Offset int `json:"offset,omitempty"`
|
||||
Limit int `json:"limit,omitempty"`
|
||||
// Offset is the zero-based offset of the first message to return.
|
||||
Offset int `json:"offset,omitempty"`
|
||||
// Limit Required. The maximum number of messages to return; 1-20
|
||||
Limit int `json:"limit,omitempty"`
|
||||
}
|
||||
|
||||
// GetUserPersonalChatMessages returns messages from the personal chat of the user with the bot.
|
||||
|
||||
+64
-26
@@ -4,24 +4,49 @@ package tgapi
|
||||
// Since: Bot API 1.0
|
||||
// See https://core.telegram.org/bots/api#user
|
||||
type User struct {
|
||||
ID int64 `json:"id"`
|
||||
FirstName string `json:"first_name"`
|
||||
LastName *string `json:"last_name,omitempty"`
|
||||
Username *string `json:"username,omitempty"`
|
||||
// ID Unique identifier for this user or bot. This number may have more than 32 significant bits and some
|
||||
// programming languages may have difficulty/silent defects in interpreting it. But it has at most 52
|
||||
// significant bits, so a 64-bit integer or double-precision float type are safe for storing this
|
||||
// identifier.
|
||||
ID int64 `json:"id"`
|
||||
// FirstName User's or bot's first name
|
||||
FirstName string `json:"first_name"`
|
||||
// LastName Optional. User's or bot's last name
|
||||
LastName *string `json:"last_name,omitempty"`
|
||||
// Username Optional. User's or bot's username
|
||||
Username *string `json:"username,omitempty"`
|
||||
|
||||
IsBot bool `json:"is_bot"` // Since: Bot API 3.3
|
||||
LanguageCode *string `json:"language_code,omitempty"` // Since: Bot API 3.0
|
||||
IsPremium *bool `json:"is_premium,omitempty"` // Since: Bot API 6.1
|
||||
AddedToAttachmentMenu *bool `json:"added_to_attachment_menu,omitempty"` // Since: Bot API 6.1
|
||||
CanJoinGroups *bool `json:"can_join_groups,omitempty"` // Since: Bot API 4.6
|
||||
CanReadAllGroupMessages *bool `json:"can_read_all_group_messages,omitempty"` // Since: Bot API 4.6
|
||||
SupportsInlineQueries *bool `json:"supports_inline_queries,omitempty"` // Since: Bot API 4.6
|
||||
CanConnectToBusiness *bool `json:"can_connect_to_business,omitempty"` // Since: Bot API 7.2
|
||||
HasMainWebApp *bool `json:"has_main_web_app,omitempty"` // Since: Bot API 7.8
|
||||
HasTopicsEnabled *bool `json:"has_topics_enabled,omitempty"` // Since: Bot API 9.3
|
||||
AllowsUsersToCreateTopics *bool `json:"allows_users_to_create_topics,omitempty"` // Since: Bot API 9.4
|
||||
CanManageBots *bool `json:"can_manage_bots,omitempty"` // Since: Bot API 9.6
|
||||
SupportsGuestQueries *bool `json:"supports_guest_queries,omitempty"` // Since: Bot API 10.0
|
||||
// IsBot True, if this user is a bot
|
||||
IsBot bool `json:"is_bot"` // Since: Bot API 3.3
|
||||
// LanguageCode Optional. IETF language tag of the user's language
|
||||
LanguageCode *string `json:"language_code,omitempty"` // Since: Bot API 3.0
|
||||
// IsPremium Optional. True, if this user is a Telegram Premium user
|
||||
IsPremium *bool `json:"is_premium,omitempty"` // Since: Bot API 6.1
|
||||
// AddedToAttachmentMenu Optional. True, if this user added the bot to the attachment menu
|
||||
AddedToAttachmentMenu *bool `json:"added_to_attachment_menu,omitempty"` // Since: Bot API 6.1
|
||||
// CanJoinGroups Optional. True, if the bot can be invited to groups. Returned only in getMe.
|
||||
CanJoinGroups *bool `json:"can_join_groups,omitempty"` // Since: Bot API 4.6
|
||||
// CanReadAllGroupMessages Optional. True, if privacy mode is disabled for the bot. Returned only in getMe.
|
||||
CanReadAllGroupMessages *bool `json:"can_read_all_group_messages,omitempty"` // Since: Bot API 4.6
|
||||
// SupportsInlineQueries Optional. True, if the bot supports inline queries. Returned only in getMe.
|
||||
SupportsInlineQueries *bool `json:"supports_inline_queries,omitempty"` // Since: Bot API 4.6
|
||||
// CanConnectToBusiness Optional. True, if the bot can be connected to a user account to manage it. Returned
|
||||
// only in getMe.
|
||||
CanConnectToBusiness *bool `json:"can_connect_to_business,omitempty"` // Since: Bot API 7.2
|
||||
// HasMainWebApp Optional. True, if the bot has a main Web App. Returned only in getMe.
|
||||
HasMainWebApp *bool `json:"has_main_web_app,omitempty"` // Since: Bot API 7.8
|
||||
// HasTopicsEnabled Optional. True, if the bot has forum topic mode enabled in private chats. Returned only
|
||||
// in getMe.
|
||||
HasTopicsEnabled *bool `json:"has_topics_enabled,omitempty"` // Since: Bot API 9.3
|
||||
// AllowsUsersToCreateTopics Optional. True, if the bot allows users to create and delete topics in private
|
||||
// chats. Returned only in getMe.
|
||||
AllowsUsersToCreateTopics *bool `json:"allows_users_to_create_topics,omitempty"` // Since: Bot API 9.4
|
||||
// CanManageBots Optional. True, if other bots can be created to be controlled by the bot. Returned only in
|
||||
// getMe.
|
||||
CanManageBots *bool `json:"can_manage_bots,omitempty"` // Since: Bot API 9.6
|
||||
// SupportsGuestQueries Optional. True, if the bot supports guest queries from chats it is not a member of.
|
||||
// Returned only in getMe.
|
||||
SupportsGuestQueries *bool `json:"supports_guest_queries,omitempty"` // Since: Bot API 10.0
|
||||
|
||||
// SupportsJoinRequestQueries reports that the bot supports join request
|
||||
// queries and can be assigned to process them. Returned only in getMe.
|
||||
@@ -32,33 +57,46 @@ type User struct {
|
||||
// Since: Bot API 1.4
|
||||
// See https://core.telegram.org/bots/api#userprofilephotos
|
||||
type UserProfilePhotos struct {
|
||||
TotalCount int `json:"total_count"`
|
||||
Photos [][]PhotoSize `json:"photos"`
|
||||
// TotalCount Total number of profile pictures the target user has
|
||||
TotalCount int `json:"total_count"`
|
||||
// Photos Requested profile pictures (in up to 4 sizes each)
|
||||
Photos [][]PhotoSize `json:"photos"`
|
||||
}
|
||||
|
||||
// UserProfileAudios represents a user's profile audios.
|
||||
// Since: Bot API 9.3
|
||||
// See https://core.telegram.org/bots/api#userprofileaudios
|
||||
type UserProfileAudios struct {
|
||||
TotalCount int `json:"total_count"`
|
||||
Audios []Audio `json:"audios"`
|
||||
// TotalCount Total number of profile audios for the target user
|
||||
TotalCount int `json:"total_count"`
|
||||
// Audios Requested profile audios
|
||||
Audios []Audio `json:"audios"`
|
||||
}
|
||||
|
||||
// UserRating represents a user's rating with level progression.
|
||||
// Since: Bot API 9.3
|
||||
// See https://core.telegram.org/bots/api#userrating
|
||||
type UserRating struct {
|
||||
Level int `json:"level"`
|
||||
Rating int `json:"rating"`
|
||||
// Level Current level of the user, indicating their reliability when purchasing digital goods and services.
|
||||
// A higher level suggests a more trustworthy customer; a negative level is likely reason for concern.
|
||||
Level int `json:"level"`
|
||||
// Rating Numerical value of the user's rating; the higher the rating, the better
|
||||
Rating int `json:"rating"`
|
||||
// CurrentLevelRating The rating value required to get the current level
|
||||
CurrentLevelRating int `json:"current_level_rating"`
|
||||
NextLevelRating int `json:"next_level_rating"`
|
||||
// NextLevelRating Optional. The rating value required to get to the next level; omitted if the maximum
|
||||
// level was reached
|
||||
NextLevelRating int `json:"next_level_rating"`
|
||||
}
|
||||
|
||||
// Birthdate represents a user's birthdate.
|
||||
// Since: Bot API 7.2
|
||||
// See https://core.telegram.org/bots/api#birthdate
|
||||
type Birthdate struct {
|
||||
Day int `json:"day"`
|
||||
// Day Day of the user's birth; 1-31
|
||||
Day int `json:"day"`
|
||||
// Month Month of the user's birth; 1-12
|
||||
Month int `json:"month"`
|
||||
Year int `json:"year"`
|
||||
// Year Optional. Year of the user's birth
|
||||
Year int `json:"year"`
|
||||
}
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
package tgapi
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestTelegramWireFieldNames(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
value any
|
||||
keys []string
|
||||
bad []string
|
||||
}{
|
||||
{
|
||||
name: "successful payment provider charge",
|
||||
value: SuccessfulPayment{ProviderPaymentChargeID: "provider"},
|
||||
keys: []string{"provider_payment_charge_id"},
|
||||
bad: []string{"proviced_payment_charge_id"},
|
||||
},
|
||||
{
|
||||
name: "refunded payment provider charge",
|
||||
value: RefundedPayment{ProviderPaymentChargeID: "provider"},
|
||||
keys: []string{"provider_payment_charge_id"},
|
||||
bad: []string{"proviced_payment_charge_id"},
|
||||
},
|
||||
{
|
||||
name: "owned gift id",
|
||||
value: OwnedGift{OwnedGiftID: "gift"},
|
||||
keys: []string{"owned_gift_id"},
|
||||
bad: []string{"ownen_gift_id"},
|
||||
},
|
||||
{
|
||||
name: "input checklist permissions",
|
||||
value: InputChecklist{
|
||||
OtherCanAddTasks: true,
|
||||
OtherCanMarkTasksAsDone: true,
|
||||
},
|
||||
keys: []string{"others_can_add_tasks", "others_can_mark_tasks_as_done"},
|
||||
bad: []string{"other_can_add_tasks", "other_can_mark_tasks_as_done"},
|
||||
},
|
||||
{
|
||||
name: "available reactions",
|
||||
value: ChatFullInfo{AvailableReaction: []ReactionType{{Type: "emoji"}}},
|
||||
keys: []string{"available_reactions"},
|
||||
bad: []string{"available_reaction"},
|
||||
},
|
||||
{
|
||||
name: "reply quote parse mode",
|
||||
value: ReplyParameters{QuoteParsingMode: "HTML"},
|
||||
keys: []string{"quote_parse_mode"},
|
||||
bad: []string{"quote_parsing_mode"},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
data, err := json.Marshal(tt.value)
|
||||
if err != nil {
|
||||
t.Fatalf("Marshal returned error: %v", err)
|
||||
}
|
||||
for _, key := range tt.keys {
|
||||
if !strings.Contains(string(data), `"`+key+`"`) {
|
||||
t.Errorf("expected key %q in %s", key, data)
|
||||
}
|
||||
}
|
||||
for _, key := range tt.bad {
|
||||
if strings.Contains(string(data), `"`+key+`"`) {
|
||||
t.Errorf("unexpected misspelled key %q in %s", key, data)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user