Merge pull request #392 from go-telegram-bot-api/bot-api-5.0
Updates for Bot API 5.0 and 5.1bot-api-6.1
commit
d10c681b05
22
bot.go
22
bot.go
|
@ -387,7 +387,7 @@ func (bot *BotAPI) GetFile(config FileConfig) (File, error) {
|
||||||
// GetUpdates fetches updates.
|
// GetUpdates fetches updates.
|
||||||
// If a WebHook is set, this will not return any data!
|
// If a WebHook is set, this will not return any data!
|
||||||
//
|
//
|
||||||
// Offset, Limit, and Timeout are optional.
|
// Offset, Limit, Timeout, and AllowedUpdates are optional.
|
||||||
// To avoid stale items, set Offset to one higher than the previous item.
|
// To avoid stale items, set Offset to one higher than the previous item.
|
||||||
// Set Timeout to a large number to reduce requests so you can get updates
|
// Set Timeout to a large number to reduce requests so you can get updates
|
||||||
// instantly instead of having to wait between requests.
|
// instantly instead of having to wait between requests.
|
||||||
|
@ -668,3 +668,23 @@ func (bot *BotAPI) GetMyCommands() ([]BotCommand, error) {
|
||||||
|
|
||||||
return commands, err
|
return commands, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CopyMessage copy messages of any kind. The method is analogous to the method
|
||||||
|
// forwardMessage, but the copied message doesn't have a link to the original
|
||||||
|
// message. Returns the MessageID of the sent message on success.
|
||||||
|
func (bot *BotAPI) CopyMessage(config CopyMessageConfig) (MessageID, error) {
|
||||||
|
params, err := config.params()
|
||||||
|
if err != nil {
|
||||||
|
return MessageID{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := bot.MakeRequest(config.method(), params)
|
||||||
|
if err != nil {
|
||||||
|
return MessageID{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var messageID MessageID
|
||||||
|
err = json.Unmarshal(resp.Result, &messageID)
|
||||||
|
|
||||||
|
return messageID, err
|
||||||
|
}
|
||||||
|
|
63
bot_test.go
63
bot_test.go
|
@ -73,7 +73,7 @@ func TestSendWithMessage(t *testing.T) {
|
||||||
bot, _ := getBot(t)
|
bot, _ := getBot(t)
|
||||||
|
|
||||||
msg := NewMessage(ChatID, "A test message from the test library in telegram-bot-api")
|
msg := NewMessage(ChatID, "A test message from the test library in telegram-bot-api")
|
||||||
msg.ParseMode = "markdown"
|
msg.ParseMode = ModeMarkdown
|
||||||
_, err := bot.Send(msg)
|
_, err := bot.Send(msg)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -104,6 +104,26 @@ func TestSendWithMessageForward(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCopyMessage(t *testing.T) {
|
||||||
|
bot, _ := getBot(t)
|
||||||
|
|
||||||
|
msg := NewMessage(ChatID, "A test message from the test library in telegram-bot-api")
|
||||||
|
message, err := bot.Send(msg)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
copyMessageConfig := NewCopyMessage(SupergroupChatID, message.Chat.ID, message.MessageID)
|
||||||
|
messageID, err := bot.CopyMessage(copyMessageConfig)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if messageID.MessageID == message.MessageID {
|
||||||
|
t.Error("copied message ID was the same as original message")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestSendWithNewPhoto(t *testing.T) {
|
func TestSendWithNewPhoto(t *testing.T) {
|
||||||
bot, _ := getBot(t)
|
bot, _ := getBot(t)
|
||||||
|
|
||||||
|
@ -518,7 +538,7 @@ func TestSetWebhookWithCert(t *testing.T) {
|
||||||
|
|
||||||
time.Sleep(time.Second * 2)
|
time.Sleep(time.Second * 2)
|
||||||
|
|
||||||
bot.Request(RemoveWebhookConfig{})
|
bot.Request(DeleteWebhookConfig{})
|
||||||
|
|
||||||
wh := NewWebhookWithCert("https://example.com/tgbotapi-test/"+bot.Token, "tests/cert.pem")
|
wh := NewWebhookWithCert("https://example.com/tgbotapi-test/"+bot.Token, "tests/cert.pem")
|
||||||
_, err := bot.Request(wh)
|
_, err := bot.Request(wh)
|
||||||
|
@ -532,7 +552,7 @@ func TestSetWebhookWithCert(t *testing.T) {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
bot.Request(RemoveWebhookConfig{})
|
bot.Request(DeleteWebhookConfig{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSetWebhookWithoutCert(t *testing.T) {
|
func TestSetWebhookWithoutCert(t *testing.T) {
|
||||||
|
@ -540,7 +560,7 @@ func TestSetWebhookWithoutCert(t *testing.T) {
|
||||||
|
|
||||||
time.Sleep(time.Second * 2)
|
time.Sleep(time.Second * 2)
|
||||||
|
|
||||||
bot.Request(RemoveWebhookConfig{})
|
bot.Request(DeleteWebhookConfig{})
|
||||||
|
|
||||||
wh := NewWebhook("https://example.com/tgbotapi-test/" + bot.Token)
|
wh := NewWebhook("https://example.com/tgbotapi-test/" + bot.Token)
|
||||||
_, err := bot.Request(wh)
|
_, err := bot.Request(wh)
|
||||||
|
@ -560,7 +580,7 @@ func TestSetWebhookWithoutCert(t *testing.T) {
|
||||||
t.Errorf("failed to set webhook: %s", info.LastErrorMessage)
|
t.Errorf("failed to set webhook: %s", info.LastErrorMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
bot.Request(RemoveWebhookConfig{})
|
bot.Request(DeleteWebhookConfig{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSendWithMediaGroup(t *testing.T) {
|
func TestSendWithMediaGroup(t *testing.T) {
|
||||||
|
@ -724,7 +744,7 @@ func TestDeleteMessage(t *testing.T) {
|
||||||
bot, _ := getBot(t)
|
bot, _ := getBot(t)
|
||||||
|
|
||||||
msg := NewMessage(ChatID, "A test message from the test library in telegram-bot-api")
|
msg := NewMessage(ChatID, "A test message from the test library in telegram-bot-api")
|
||||||
msg.ParseMode = "markdown"
|
msg.ParseMode = ModeMarkdown
|
||||||
message, _ := bot.Send(msg)
|
message, _ := bot.Send(msg)
|
||||||
|
|
||||||
deleteMessageConfig := DeleteMessageConfig{
|
deleteMessageConfig := DeleteMessageConfig{
|
||||||
|
@ -742,7 +762,7 @@ func TestPinChatMessage(t *testing.T) {
|
||||||
bot, _ := getBot(t)
|
bot, _ := getBot(t)
|
||||||
|
|
||||||
msg := NewMessage(SupergroupChatID, "A test message from the test library in telegram-bot-api")
|
msg := NewMessage(SupergroupChatID, "A test message from the test library in telegram-bot-api")
|
||||||
msg.ParseMode = "markdown"
|
msg.ParseMode = ModeMarkdown
|
||||||
message, _ := bot.Send(msg)
|
message, _ := bot.Send(msg)
|
||||||
|
|
||||||
pinChatMessageConfig := PinChatMessageConfig{
|
pinChatMessageConfig := PinChatMessageConfig{
|
||||||
|
@ -761,7 +781,7 @@ func TestUnpinChatMessage(t *testing.T) {
|
||||||
bot, _ := getBot(t)
|
bot, _ := getBot(t)
|
||||||
|
|
||||||
msg := NewMessage(SupergroupChatID, "A test message from the test library in telegram-bot-api")
|
msg := NewMessage(SupergroupChatID, "A test message from the test library in telegram-bot-api")
|
||||||
msg.ParseMode = "markdown"
|
msg.ParseMode = ModeMarkdown
|
||||||
message, _ := bot.Send(msg)
|
message, _ := bot.Send(msg)
|
||||||
|
|
||||||
// We need pin message to unpin something
|
// We need pin message to unpin something
|
||||||
|
@ -777,6 +797,7 @@ func TestUnpinChatMessage(t *testing.T) {
|
||||||
|
|
||||||
unpinChatMessageConfig := UnpinChatMessageConfig{
|
unpinChatMessageConfig := UnpinChatMessageConfig{
|
||||||
ChatID: message.Chat.ID,
|
ChatID: message.Chat.ID,
|
||||||
|
MessageID: message.MessageID,
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := bot.Request(unpinChatMessageConfig); err != nil {
|
if _, err := bot.Request(unpinChatMessageConfig); err != nil {
|
||||||
|
@ -784,6 +805,32 @@ func TestUnpinChatMessage(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUnpinAllChatMessages(t *testing.T) {
|
||||||
|
bot, _ := getBot(t)
|
||||||
|
|
||||||
|
msg := NewMessage(SupergroupChatID, "A test message from the test library in telegram-bot-api")
|
||||||
|
msg.ParseMode = ModeMarkdown
|
||||||
|
message, _ := bot.Send(msg)
|
||||||
|
|
||||||
|
pinChatMessageConfig := PinChatMessageConfig{
|
||||||
|
ChatID: message.Chat.ID,
|
||||||
|
MessageID: message.MessageID,
|
||||||
|
DisableNotification: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := bot.Request(pinChatMessageConfig); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
unpinAllChatMessagesConfig := UnpinAllChatMessagesConfig{
|
||||||
|
ChatID: message.Chat.ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := bot.Request(unpinAllChatMessagesConfig); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestPolls(t *testing.T) {
|
func TestPolls(t *testing.T) {
|
||||||
bot, _ := getBot(t)
|
bot, _ := getBot(t)
|
||||||
|
|
||||||
|
|
304
configs.go
304
configs.go
|
@ -42,6 +42,54 @@ const (
|
||||||
ModeHTML = "HTML"
|
ModeHTML = "HTML"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Constant values for update types
|
||||||
|
const (
|
||||||
|
// New incoming message of any kind — text, photo, sticker, etc.
|
||||||
|
UpdateTypeMessage = "message"
|
||||||
|
|
||||||
|
// New version of a message that is known to the bot and was edited
|
||||||
|
UpdateTypeEditedMessage = "edited_message"
|
||||||
|
|
||||||
|
// New incoming channel post of any kind — text, photo, sticker, etc.
|
||||||
|
UpdateTypeChannelPost = "channel_post"
|
||||||
|
|
||||||
|
// New version of a channel post that is known to the bot and was edited
|
||||||
|
UpdateTypeEditedChannelPost = "edited_channel_post"
|
||||||
|
|
||||||
|
// New incoming inline query
|
||||||
|
UpdateTypeInlineQuery = "inline_query"
|
||||||
|
|
||||||
|
// The result of an inline query that was chosen by a user and sent to their
|
||||||
|
// chat partner. Please see the documentation on the feedback collecting for
|
||||||
|
// details on how to enable these updates for your bot.
|
||||||
|
UpdateTypeChosenInlineResult = "chosen_inline_result"
|
||||||
|
|
||||||
|
// New incoming callback query
|
||||||
|
UpdateTypeCallbackQuery = "callback_query"
|
||||||
|
|
||||||
|
// New incoming shipping query. Only for invoices with flexible price
|
||||||
|
UpdateTypeShippingQuery = "shipping_query"
|
||||||
|
|
||||||
|
// New incoming pre-checkout query. Contains full information about checkout
|
||||||
|
UpdateTypePreCheckoutQuery = "pre_checkout_query"
|
||||||
|
|
||||||
|
// New poll state. Bots receive only updates about stopped polls and polls
|
||||||
|
// which are sent by the bot
|
||||||
|
UpdateTypePoll = "poll"
|
||||||
|
|
||||||
|
// A user changed their answer in a non-anonymous poll. Bots receive new votes
|
||||||
|
// only in polls that were sent by the bot itself.
|
||||||
|
UpdateTypePollAnswer = "poll_answer"
|
||||||
|
|
||||||
|
// 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.
|
||||||
|
UpdateTypeMyChatMember = "my_chat_member"
|
||||||
|
|
||||||
|
// The bot must be an administrator in the chat and must explicitly specify
|
||||||
|
// this update in the list of allowed_updates to receive these updates.
|
||||||
|
UpdateTypeChatMember = "chat_member"
|
||||||
|
)
|
||||||
|
|
||||||
// Library errors
|
// Library errors
|
||||||
const (
|
const (
|
||||||
// ErrBadFileType happens when you pass an unknown type
|
// ErrBadFileType happens when you pass an unknown type
|
||||||
|
@ -63,6 +111,33 @@ type Fileable interface {
|
||||||
useExistingFile() bool
|
useExistingFile() bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LogOutConfig is a request to log out of the cloud Bot API server.
|
||||||
|
//
|
||||||
|
// Note that you may not log back in for at least 10 minutes.
|
||||||
|
type LogOutConfig struct{}
|
||||||
|
|
||||||
|
func (LogOutConfig) method() string {
|
||||||
|
return "logOut"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (LogOutConfig) params() (Params, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CloseConfig is a request to close the bot instance on a local server.
|
||||||
|
//
|
||||||
|
// Note that you may not close an instance for the first 10 minutes after the
|
||||||
|
// bot has started.
|
||||||
|
type CloseConfig struct{}
|
||||||
|
|
||||||
|
func (CloseConfig) method() string {
|
||||||
|
return "close"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (CloseConfig) params() (Params, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
// BaseChat is base type for all chat config types.
|
// BaseChat is base type for all chat config types.
|
||||||
type BaseChat struct {
|
type BaseChat struct {
|
||||||
ChatID int64 // required
|
ChatID int64 // required
|
||||||
|
@ -70,6 +145,7 @@ type BaseChat struct {
|
||||||
ReplyToMessageID int
|
ReplyToMessageID int
|
||||||
ReplyMarkup interface{}
|
ReplyMarkup interface{}
|
||||||
DisableNotification bool
|
DisableNotification bool
|
||||||
|
AllowSendingWithoutReply bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (chat *BaseChat) params() (Params, error) {
|
func (chat *BaseChat) params() (Params, error) {
|
||||||
|
@ -78,6 +154,7 @@ func (chat *BaseChat) params() (Params, error) {
|
||||||
params.AddFirstValid("chat_id", chat.ChatID, chat.ChannelUsername)
|
params.AddFirstValid("chat_id", chat.ChatID, chat.ChannelUsername)
|
||||||
params.AddNonZero("reply_to_message_id", chat.ReplyToMessageID)
|
params.AddNonZero("reply_to_message_id", chat.ReplyToMessageID)
|
||||||
params.AddBool("disable_notification", chat.DisableNotification)
|
params.AddBool("disable_notification", chat.DisableNotification)
|
||||||
|
params.AddBool("allow_sending_without_reply", chat.AllowSendingWithoutReply)
|
||||||
|
|
||||||
err := params.AddInterface("reply_markup", chat.ReplyMarkup)
|
err := params.AddInterface("reply_markup", chat.ReplyMarkup)
|
||||||
|
|
||||||
|
@ -140,6 +217,7 @@ type MessageConfig struct {
|
||||||
BaseChat
|
BaseChat
|
||||||
Text string
|
Text string
|
||||||
ParseMode string
|
ParseMode string
|
||||||
|
Entities []MessageEntity
|
||||||
DisableWebPagePreview bool
|
DisableWebPagePreview bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,8 +230,9 @@ func (config MessageConfig) params() (Params, error) {
|
||||||
params.AddNonEmpty("text", config.Text)
|
params.AddNonEmpty("text", config.Text)
|
||||||
params.AddBool("disable_web_page_preview", config.DisableWebPagePreview)
|
params.AddBool("disable_web_page_preview", config.DisableWebPagePreview)
|
||||||
params.AddNonEmpty("parse_mode", config.ParseMode)
|
params.AddNonEmpty("parse_mode", config.ParseMode)
|
||||||
|
err = params.AddInterface("entities", config.Entities)
|
||||||
|
|
||||||
return params, nil
|
return params, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config MessageConfig) method() string {
|
func (config MessageConfig) method() string {
|
||||||
|
@ -184,19 +263,54 @@ func (config ForwardConfig) method() string {
|
||||||
return "forwardMessage"
|
return "forwardMessage"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CopyMessageConfig contains information about a copyMessage request.
|
||||||
|
type CopyMessageConfig struct {
|
||||||
|
BaseChat
|
||||||
|
FromChatID int64
|
||||||
|
FromChannelUsername string
|
||||||
|
MessageID int
|
||||||
|
Caption string
|
||||||
|
ParseMode string
|
||||||
|
CaptionEntities []MessageEntity
|
||||||
|
}
|
||||||
|
|
||||||
|
func (config CopyMessageConfig) params() (Params, error) {
|
||||||
|
params, err := config.BaseChat.params()
|
||||||
|
if err != nil {
|
||||||
|
return params, err
|
||||||
|
}
|
||||||
|
|
||||||
|
params.AddFirstValid("from_chat_id", config.FromChatID, config.FromChannelUsername)
|
||||||
|
params.AddNonZero("message_id", config.MessageID)
|
||||||
|
params.AddNonEmpty("caption", config.Caption)
|
||||||
|
params.AddNonEmpty("parse_mode", config.ParseMode)
|
||||||
|
err = params.AddInterface("caption_entities", config.CaptionEntities)
|
||||||
|
|
||||||
|
return params, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (config CopyMessageConfig) method() string {
|
||||||
|
return "copyMessage"
|
||||||
|
}
|
||||||
|
|
||||||
// PhotoConfig contains information about a SendPhoto request.
|
// PhotoConfig contains information about a SendPhoto request.
|
||||||
type PhotoConfig struct {
|
type PhotoConfig struct {
|
||||||
BaseFile
|
BaseFile
|
||||||
Caption string
|
Caption string
|
||||||
ParseMode string
|
ParseMode string
|
||||||
|
CaptionEntities []MessageEntity
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config PhotoConfig) params() (Params, error) {
|
func (config PhotoConfig) params() (Params, error) {
|
||||||
params, err := config.BaseFile.params()
|
params, err := config.BaseFile.params()
|
||||||
|
if err != nil {
|
||||||
|
return params, err
|
||||||
|
}
|
||||||
|
|
||||||
params.AddNonEmpty(config.name(), config.FileID)
|
params.AddNonEmpty(config.name(), config.FileID)
|
||||||
params.AddNonEmpty("caption", config.Caption)
|
params.AddNonEmpty("caption", config.Caption)
|
||||||
params.AddNonEmpty("parse_mode", config.ParseMode)
|
params.AddNonEmpty("parse_mode", config.ParseMode)
|
||||||
|
err = params.AddInterface("caption_entities", config.CaptionEntities)
|
||||||
|
|
||||||
return params, err
|
return params, err
|
||||||
}
|
}
|
||||||
|
@ -214,6 +328,7 @@ type AudioConfig struct {
|
||||||
BaseFile
|
BaseFile
|
||||||
Caption string
|
Caption string
|
||||||
ParseMode string
|
ParseMode string
|
||||||
|
CaptionEntities []MessageEntity
|
||||||
Duration int
|
Duration int
|
||||||
Performer string
|
Performer string
|
||||||
Title string
|
Title string
|
||||||
|
@ -231,8 +346,9 @@ func (config AudioConfig) params() (Params, error) {
|
||||||
params.AddNonEmpty("title", config.Title)
|
params.AddNonEmpty("title", config.Title)
|
||||||
params.AddNonEmpty("caption", config.Caption)
|
params.AddNonEmpty("caption", config.Caption)
|
||||||
params.AddNonEmpty("parse_mode", config.ParseMode)
|
params.AddNonEmpty("parse_mode", config.ParseMode)
|
||||||
|
err = params.AddInterface("caption_entities", config.CaptionEntities)
|
||||||
|
|
||||||
return params, nil
|
return params, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config AudioConfig) name() string {
|
func (config AudioConfig) name() string {
|
||||||
|
@ -248,6 +364,8 @@ type DocumentConfig struct {
|
||||||
BaseFile
|
BaseFile
|
||||||
Caption string
|
Caption string
|
||||||
ParseMode string
|
ParseMode string
|
||||||
|
CaptionEntities []MessageEntity
|
||||||
|
DisableContentTypeDetection bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config DocumentConfig) params() (Params, error) {
|
func (config DocumentConfig) params() (Params, error) {
|
||||||
|
@ -256,6 +374,7 @@ func (config DocumentConfig) params() (Params, error) {
|
||||||
params.AddNonEmpty(config.name(), config.FileID)
|
params.AddNonEmpty(config.name(), config.FileID)
|
||||||
params.AddNonEmpty("caption", config.Caption)
|
params.AddNonEmpty("caption", config.Caption)
|
||||||
params.AddNonEmpty("parse_mode", config.ParseMode)
|
params.AddNonEmpty("parse_mode", config.ParseMode)
|
||||||
|
params.AddBool("disable_content_type_detection", config.DisableContentTypeDetection)
|
||||||
|
|
||||||
return params, err
|
return params, err
|
||||||
}
|
}
|
||||||
|
@ -295,17 +414,22 @@ type VideoConfig struct {
|
||||||
Duration int
|
Duration int
|
||||||
Caption string
|
Caption string
|
||||||
ParseMode string
|
ParseMode string
|
||||||
|
CaptionEntities []MessageEntity
|
||||||
SupportsStreaming bool
|
SupportsStreaming bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config VideoConfig) params() (Params, error) {
|
func (config VideoConfig) params() (Params, error) {
|
||||||
params, err := config.BaseChat.params()
|
params, err := config.BaseChat.params()
|
||||||
|
if err != nil {
|
||||||
|
return params, err
|
||||||
|
}
|
||||||
|
|
||||||
params.AddNonEmpty(config.name(), config.FileID)
|
params.AddNonEmpty(config.name(), config.FileID)
|
||||||
params.AddNonZero("duration", config.Duration)
|
params.AddNonZero("duration", config.Duration)
|
||||||
params.AddNonEmpty("caption", config.Caption)
|
params.AddNonEmpty("caption", config.Caption)
|
||||||
params.AddNonEmpty("parse_mode", config.ParseMode)
|
params.AddNonEmpty("parse_mode", config.ParseMode)
|
||||||
params.AddBool("supports_streaming", config.SupportsStreaming)
|
params.AddBool("supports_streaming", config.SupportsStreaming)
|
||||||
|
err = params.AddInterface("caption_entities", config.CaptionEntities)
|
||||||
|
|
||||||
return params, err
|
return params, err
|
||||||
}
|
}
|
||||||
|
@ -324,15 +448,20 @@ type AnimationConfig struct {
|
||||||
Duration int
|
Duration int
|
||||||
Caption string
|
Caption string
|
||||||
ParseMode string
|
ParseMode string
|
||||||
|
CaptionEntities []MessageEntity
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config AnimationConfig) params() (Params, error) {
|
func (config AnimationConfig) params() (Params, error) {
|
||||||
params, err := config.BaseChat.params()
|
params, err := config.BaseChat.params()
|
||||||
|
if err != nil {
|
||||||
|
return params, err
|
||||||
|
}
|
||||||
|
|
||||||
params.AddNonEmpty(config.name(), config.FileID)
|
params.AddNonEmpty(config.name(), config.FileID)
|
||||||
params.AddNonZero("duration", config.Duration)
|
params.AddNonZero("duration", config.Duration)
|
||||||
params.AddNonEmpty("caption", config.Caption)
|
params.AddNonEmpty("caption", config.Caption)
|
||||||
params.AddNonEmpty("parse_mode", config.ParseMode)
|
params.AddNonEmpty("parse_mode", config.ParseMode)
|
||||||
|
err = params.AddInterface("caption_entities", config.CaptionEntities)
|
||||||
|
|
||||||
return params, err
|
return params, err
|
||||||
}
|
}
|
||||||
|
@ -375,16 +504,21 @@ type VoiceConfig struct {
|
||||||
BaseFile
|
BaseFile
|
||||||
Caption string
|
Caption string
|
||||||
ParseMode string
|
ParseMode string
|
||||||
|
CaptionEntities []MessageEntity
|
||||||
Duration int
|
Duration int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config VoiceConfig) params() (Params, error) {
|
func (config VoiceConfig) params() (Params, error) {
|
||||||
params, err := config.BaseChat.params()
|
params, err := config.BaseChat.params()
|
||||||
|
if err != nil {
|
||||||
|
return params, err
|
||||||
|
}
|
||||||
|
|
||||||
params.AddNonEmpty(config.name(), config.FileID)
|
params.AddNonEmpty(config.name(), config.FileID)
|
||||||
params.AddNonZero("duration", config.Duration)
|
params.AddNonZero("duration", config.Duration)
|
||||||
params.AddNonEmpty("caption", config.Caption)
|
params.AddNonEmpty("caption", config.Caption)
|
||||||
params.AddNonEmpty("parse_mode", config.ParseMode)
|
params.AddNonEmpty("parse_mode", config.ParseMode)
|
||||||
|
err = params.AddInterface("caption_entities", config.CaptionEntities)
|
||||||
|
|
||||||
return params, err
|
return params, err
|
||||||
}
|
}
|
||||||
|
@ -402,7 +536,10 @@ type LocationConfig struct {
|
||||||
BaseChat
|
BaseChat
|
||||||
Latitude float64 // required
|
Latitude float64 // required
|
||||||
Longitude float64 // required
|
Longitude float64 // required
|
||||||
|
HorizontalAccuracy float64 // optional
|
||||||
LivePeriod int // optional
|
LivePeriod int // optional
|
||||||
|
Heading int // optional
|
||||||
|
ProximityAlertRadius int // optional
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config LocationConfig) params() (Params, error) {
|
func (config LocationConfig) params() (Params, error) {
|
||||||
|
@ -410,7 +547,10 @@ func (config LocationConfig) params() (Params, error) {
|
||||||
|
|
||||||
params.AddNonZeroFloat("latitude", config.Latitude)
|
params.AddNonZeroFloat("latitude", config.Latitude)
|
||||||
params.AddNonZeroFloat("longitude", config.Longitude)
|
params.AddNonZeroFloat("longitude", config.Longitude)
|
||||||
|
params.AddNonZeroFloat("horizontal_accuracy", config.HorizontalAccuracy)
|
||||||
params.AddNonZero("live_period", config.LivePeriod)
|
params.AddNonZero("live_period", config.LivePeriod)
|
||||||
|
params.AddNonZero("heading", config.Heading)
|
||||||
|
params.AddNonZero("proximity_alert_radius", config.ProximityAlertRadius)
|
||||||
|
|
||||||
return params, err
|
return params, err
|
||||||
}
|
}
|
||||||
|
@ -424,6 +564,9 @@ type EditMessageLiveLocationConfig struct {
|
||||||
BaseEdit
|
BaseEdit
|
||||||
Latitude float64 // required
|
Latitude float64 // required
|
||||||
Longitude float64 // required
|
Longitude float64 // required
|
||||||
|
HorizontalAccuracy float64 // optional
|
||||||
|
Heading int // optional
|
||||||
|
ProximityAlertRadius int // optional
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config EditMessageLiveLocationConfig) params() (Params, error) {
|
func (config EditMessageLiveLocationConfig) params() (Params, error) {
|
||||||
|
@ -431,6 +574,9 @@ func (config EditMessageLiveLocationConfig) params() (Params, error) {
|
||||||
|
|
||||||
params.AddNonZeroFloat("latitude", config.Latitude)
|
params.AddNonZeroFloat("latitude", config.Latitude)
|
||||||
params.AddNonZeroFloat("longitude", config.Longitude)
|
params.AddNonZeroFloat("longitude", config.Longitude)
|
||||||
|
params.AddNonZeroFloat("horizontal_accuracy", config.HorizontalAccuracy)
|
||||||
|
params.AddNonZero("heading", config.Heading)
|
||||||
|
params.AddNonZero("proximity_alert_radius", config.ProximityAlertRadius)
|
||||||
|
|
||||||
return params, err
|
return params, err
|
||||||
}
|
}
|
||||||
|
@ -460,6 +606,9 @@ type VenueConfig struct {
|
||||||
Title string // required
|
Title string // required
|
||||||
Address string // required
|
Address string // required
|
||||||
FoursquareID string
|
FoursquareID string
|
||||||
|
FoursquareType string
|
||||||
|
GooglePlaceID string
|
||||||
|
GooglePlaceType string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config VenueConfig) params() (Params, error) {
|
func (config VenueConfig) params() (Params, error) {
|
||||||
|
@ -470,6 +619,9 @@ func (config VenueConfig) params() (Params, error) {
|
||||||
params["title"] = config.Title
|
params["title"] = config.Title
|
||||||
params["address"] = config.Address
|
params["address"] = config.Address
|
||||||
params.AddNonEmpty("foursquare_id", config.FoursquareID)
|
params.AddNonEmpty("foursquare_id", config.FoursquareID)
|
||||||
|
params.AddNonEmpty("foursquare_type", config.FoursquareType)
|
||||||
|
params.AddNonEmpty("google_place_id", config.GooglePlaceID)
|
||||||
|
params.AddNonEmpty("google_place_type", config.GooglePlaceType)
|
||||||
|
|
||||||
return params, err
|
return params, err
|
||||||
}
|
}
|
||||||
|
@ -514,6 +666,7 @@ type SendPollConfig struct {
|
||||||
CorrectOptionID int64
|
CorrectOptionID int64
|
||||||
Explanation string
|
Explanation string
|
||||||
ExplanationParseMode string
|
ExplanationParseMode string
|
||||||
|
ExplanationEntities []MessageEntity
|
||||||
OpenPeriod int
|
OpenPeriod int
|
||||||
CloseDate int
|
CloseDate int
|
||||||
IsClosed bool
|
IsClosed bool
|
||||||
|
@ -526,7 +679,9 @@ func (config SendPollConfig) params() (Params, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
params["question"] = config.Question
|
params["question"] = config.Question
|
||||||
err = params.AddInterface("options", config.Options)
|
if err = params.AddInterface("options", config.Options); err != nil {
|
||||||
|
return params, err
|
||||||
|
}
|
||||||
params["is_anonymous"] = strconv.FormatBool(config.IsAnonymous)
|
params["is_anonymous"] = strconv.FormatBool(config.IsAnonymous)
|
||||||
params.AddNonEmpty("type", config.Type)
|
params.AddNonEmpty("type", config.Type)
|
||||||
params["allows_multiple_answers"] = strconv.FormatBool(config.AllowsMultipleAnswers)
|
params["allows_multiple_answers"] = strconv.FormatBool(config.AllowsMultipleAnswers)
|
||||||
|
@ -536,6 +691,7 @@ func (config SendPollConfig) params() (Params, error) {
|
||||||
params.AddNonEmpty("explanation_parse_mode", config.ExplanationParseMode)
|
params.AddNonEmpty("explanation_parse_mode", config.ExplanationParseMode)
|
||||||
params.AddNonZero("open_period", config.OpenPeriod)
|
params.AddNonZero("open_period", config.OpenPeriod)
|
||||||
params.AddNonZero("close_date", config.CloseDate)
|
params.AddNonZero("close_date", config.CloseDate)
|
||||||
|
err = params.AddInterface("explanation_entities", config.ExplanationEntities)
|
||||||
|
|
||||||
return params, err
|
return params, err
|
||||||
}
|
}
|
||||||
|
@ -646,15 +802,20 @@ type EditMessageTextConfig struct {
|
||||||
BaseEdit
|
BaseEdit
|
||||||
Text string
|
Text string
|
||||||
ParseMode string
|
ParseMode string
|
||||||
|
Entities []MessageEntity
|
||||||
DisableWebPagePreview bool
|
DisableWebPagePreview bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config EditMessageTextConfig) params() (Params, error) {
|
func (config EditMessageTextConfig) params() (Params, error) {
|
||||||
params, err := config.BaseEdit.params()
|
params, err := config.BaseEdit.params()
|
||||||
|
if err != nil {
|
||||||
|
return params, err
|
||||||
|
}
|
||||||
|
|
||||||
params["text"] = config.Text
|
params["text"] = config.Text
|
||||||
params.AddNonEmpty("parse_mode", config.ParseMode)
|
params.AddNonEmpty("parse_mode", config.ParseMode)
|
||||||
params.AddBool("disable_web_page_preview", config.DisableWebPagePreview)
|
params.AddBool("disable_web_page_preview", config.DisableWebPagePreview)
|
||||||
|
err = params.AddInterface("entities", config.Entities)
|
||||||
|
|
||||||
return params, err
|
return params, err
|
||||||
}
|
}
|
||||||
|
@ -668,13 +829,18 @@ type EditMessageCaptionConfig struct {
|
||||||
BaseEdit
|
BaseEdit
|
||||||
Caption string
|
Caption string
|
||||||
ParseMode string
|
ParseMode string
|
||||||
|
CaptionEntities []MessageEntity
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config EditMessageCaptionConfig) params() (Params, error) {
|
func (config EditMessageCaptionConfig) params() (Params, error) {
|
||||||
params, err := config.BaseEdit.params()
|
params, err := config.BaseEdit.params()
|
||||||
|
if err != nil {
|
||||||
|
return params, err
|
||||||
|
}
|
||||||
|
|
||||||
params["caption"] = config.Caption
|
params["caption"] = config.Caption
|
||||||
params.AddNonEmpty("parse_mode", config.ParseMode)
|
params.AddNonEmpty("parse_mode", config.ParseMode)
|
||||||
|
err = params.AddInterface("caption_entities", config.CaptionEntities)
|
||||||
|
|
||||||
return params, err
|
return params, err
|
||||||
}
|
}
|
||||||
|
@ -773,6 +939,7 @@ type UpdateConfig struct {
|
||||||
Offset int
|
Offset int
|
||||||
Limit int
|
Limit int
|
||||||
Timeout int
|
Timeout int
|
||||||
|
AllowedUpdates []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (UpdateConfig) method() string {
|
func (UpdateConfig) method() string {
|
||||||
|
@ -785,6 +952,7 @@ func (config UpdateConfig) params() (Params, error) {
|
||||||
params.AddNonZero("offset", config.Offset)
|
params.AddNonZero("offset", config.Offset)
|
||||||
params.AddNonZero("limit", config.Limit)
|
params.AddNonZero("limit", config.Limit)
|
||||||
params.AddNonZero("timeout", config.Timeout)
|
params.AddNonZero("timeout", config.Timeout)
|
||||||
|
params.AddInterface("allowed_updates", config.AllowedUpdates)
|
||||||
|
|
||||||
return params, nil
|
return params, nil
|
||||||
}
|
}
|
||||||
|
@ -793,8 +961,10 @@ func (config UpdateConfig) params() (Params, error) {
|
||||||
type WebhookConfig struct {
|
type WebhookConfig struct {
|
||||||
URL *url.URL
|
URL *url.URL
|
||||||
Certificate interface{}
|
Certificate interface{}
|
||||||
|
IPAddress string
|
||||||
MaxConnections int
|
MaxConnections int
|
||||||
AllowedUpdates []string
|
AllowedUpdates []string
|
||||||
|
DropPendingUpdates bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config WebhookConfig) method() string {
|
func (config WebhookConfig) method() string {
|
||||||
|
@ -808,8 +978,10 @@ func (config WebhookConfig) params() (Params, error) {
|
||||||
params["url"] = config.URL.String()
|
params["url"] = config.URL.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
params.AddNonEmpty("ip_address", config.IPAddress)
|
||||||
params.AddNonZero("max_connections", config.MaxConnections)
|
params.AddNonZero("max_connections", config.MaxConnections)
|
||||||
params.AddInterface("allowed_updates", config.AllowedUpdates)
|
params.AddInterface("allowed_updates", config.AllowedUpdates)
|
||||||
|
params.AddBool("drop_pending_updates", config.DropPendingUpdates)
|
||||||
|
|
||||||
return params, nil
|
return params, nil
|
||||||
}
|
}
|
||||||
|
@ -826,16 +998,21 @@ func (config WebhookConfig) useExistingFile() bool {
|
||||||
return config.URL != nil
|
return config.URL != nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RemoveWebhookConfig is a helper to remove a webhook.
|
// DeleteWebhookConfig is a helper to delete a webhook.
|
||||||
type RemoveWebhookConfig struct {
|
type DeleteWebhookConfig struct {
|
||||||
|
DropPendingUpdates bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config RemoveWebhookConfig) method() string {
|
func (config DeleteWebhookConfig) method() string {
|
||||||
return "deleteWebhook"
|
return "deleteWebhook"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config RemoveWebhookConfig) params() (Params, error) {
|
func (config DeleteWebhookConfig) params() (Params, error) {
|
||||||
return nil, nil
|
params := make(Params)
|
||||||
|
|
||||||
|
params.AddBool("drop_pending_updates", config.DropPendingUpdates)
|
||||||
|
|
||||||
|
return params, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// FileBytes contains information about a set of bytes to upload
|
// FileBytes contains information about a set of bytes to upload
|
||||||
|
@ -920,6 +1097,7 @@ type ChatMemberConfig struct {
|
||||||
// UnbanChatMemberConfig allows you to unban a user.
|
// UnbanChatMemberConfig allows you to unban a user.
|
||||||
type UnbanChatMemberConfig struct {
|
type UnbanChatMemberConfig struct {
|
||||||
ChatMemberConfig
|
ChatMemberConfig
|
||||||
|
OnlyIfBanned bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config UnbanChatMemberConfig) method() string {
|
func (config UnbanChatMemberConfig) method() string {
|
||||||
|
@ -931,6 +1109,7 @@ func (config UnbanChatMemberConfig) params() (Params, error) {
|
||||||
|
|
||||||
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername, config.ChannelUsername)
|
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername, config.ChannelUsername)
|
||||||
params.AddNonZero("user_id", config.UserID)
|
params.AddNonZero("user_id", config.UserID)
|
||||||
|
params.AddBool("only_if_banned", config.OnlyIfBanned)
|
||||||
|
|
||||||
return params, nil
|
return params, nil
|
||||||
}
|
}
|
||||||
|
@ -939,6 +1118,7 @@ func (config UnbanChatMemberConfig) params() (Params, error) {
|
||||||
type KickChatMemberConfig struct {
|
type KickChatMemberConfig struct {
|
||||||
ChatMemberConfig
|
ChatMemberConfig
|
||||||
UntilDate int64
|
UntilDate int64
|
||||||
|
RevokeMessages bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config KickChatMemberConfig) method() string {
|
func (config KickChatMemberConfig) method() string {
|
||||||
|
@ -951,6 +1131,7 @@ func (config KickChatMemberConfig) params() (Params, error) {
|
||||||
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername)
|
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername)
|
||||||
params.AddNonZero("user_id", config.UserID)
|
params.AddNonZero("user_id", config.UserID)
|
||||||
params.AddNonZero64("until_date", config.UntilDate)
|
params.AddNonZero64("until_date", config.UntilDate)
|
||||||
|
params.AddBool("revoke_messages", config.RevokeMessages)
|
||||||
|
|
||||||
return params, nil
|
return params, nil
|
||||||
}
|
}
|
||||||
|
@ -981,10 +1162,13 @@ func (config RestrictChatMemberConfig) params() (Params, error) {
|
||||||
// PromoteChatMemberConfig contains fields to promote members of chat
|
// PromoteChatMemberConfig contains fields to promote members of chat
|
||||||
type PromoteChatMemberConfig struct {
|
type PromoteChatMemberConfig struct {
|
||||||
ChatMemberConfig
|
ChatMemberConfig
|
||||||
|
IsAnonymous bool
|
||||||
|
CanManageChat bool
|
||||||
CanChangeInfo bool
|
CanChangeInfo bool
|
||||||
CanPostMessages bool
|
CanPostMessages bool
|
||||||
CanEditMessages bool
|
CanEditMessages bool
|
||||||
CanDeleteMessages bool
|
CanDeleteMessages bool
|
||||||
|
CanManageVoiceChats bool
|
||||||
CanInviteUsers bool
|
CanInviteUsers bool
|
||||||
CanRestrictMembers bool
|
CanRestrictMembers bool
|
||||||
CanPinMessages bool
|
CanPinMessages bool
|
||||||
|
@ -1001,10 +1185,13 @@ func (config PromoteChatMemberConfig) params() (Params, error) {
|
||||||
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername, config.ChannelUsername)
|
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername, config.ChannelUsername)
|
||||||
params.AddNonZero("user_id", config.UserID)
|
params.AddNonZero("user_id", config.UserID)
|
||||||
|
|
||||||
|
params.AddBool("is_anonymous", config.IsAnonymous)
|
||||||
|
params.AddBool("can_manage_chat", config.CanManageChat)
|
||||||
params.AddBool("can_change_info", config.CanChangeInfo)
|
params.AddBool("can_change_info", config.CanChangeInfo)
|
||||||
params.AddBool("can_post_messages", config.CanPostMessages)
|
params.AddBool("can_post_messages", config.CanPostMessages)
|
||||||
params.AddBool("can_edit_messages", config.CanEditMessages)
|
params.AddBool("can_edit_messages", config.CanEditMessages)
|
||||||
params.AddBool("can_delete_messages", config.CanDeleteMessages)
|
params.AddBool("can_delete_messages", config.CanDeleteMessages)
|
||||||
|
params.AddBool("can_manage_voice_chats", config.CanManageVoiceChats)
|
||||||
params.AddBool("can_invite_users", config.CanInviteUsers)
|
params.AddBool("can_invite_users", config.CanInviteUsers)
|
||||||
params.AddBool("can_restrict_members", config.CanRestrictMembers)
|
params.AddBool("can_restrict_members", config.CanRestrictMembers)
|
||||||
params.AddBool("can_pin_messages", config.CanPinMessages)
|
params.AddBool("can_pin_messages", config.CanPinMessages)
|
||||||
|
@ -1115,6 +1302,77 @@ func (config ChatInviteLinkConfig) params() (Params, error) {
|
||||||
return params, nil
|
return params, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateChatInviteLinkConfig allows you to create an additional invite link for
|
||||||
|
// a chat. The bot must be an administrator in the chat for this to work and
|
||||||
|
// must have the appropriate admin rights. The link can be revoked using the
|
||||||
|
// RevokeChatInviteLinkConfig.
|
||||||
|
type CreateChatInviteLinkConfig struct {
|
||||||
|
ChatConfig
|
||||||
|
ExpireDate int
|
||||||
|
MemberLimit int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (CreateChatInviteLinkConfig) method() string {
|
||||||
|
return "createChatInviteLink"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (config CreateChatInviteLinkConfig) params() (Params, error) {
|
||||||
|
params := make(Params)
|
||||||
|
|
||||||
|
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername)
|
||||||
|
params.AddNonZero("expire_date", config.ExpireDate)
|
||||||
|
params.AddNonZero("member_limit", config.MemberLimit)
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// EditChatInviteLinkConfig allows you to edit a non-primary invite link created
|
||||||
|
// by the bot. The bot must be an administrator in the chat for this to work and
|
||||||
|
// must have the appropriate admin rights.
|
||||||
|
type EditChatInviteLinkConfig struct {
|
||||||
|
ChatConfig
|
||||||
|
InviteLink string
|
||||||
|
ExpireDate int
|
||||||
|
MemberLimit int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (EditChatInviteLinkConfig) method() string {
|
||||||
|
return "editChatInviteLink"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (config EditChatInviteLinkConfig) params() (Params, error) {
|
||||||
|
params := make(Params)
|
||||||
|
|
||||||
|
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername)
|
||||||
|
params["invite_link"] = config.InviteLink
|
||||||
|
params.AddNonZero("expire_date", config.ExpireDate)
|
||||||
|
params.AddNonZero("member_limit", config.MemberLimit)
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// RevokeChatInviteLinkConfig allows you to revoke an invite link created by the
|
||||||
|
// bot. If the primary link is revoked, a new link is automatically generated.
|
||||||
|
// The bot must be an administrator in the chat for this to work and must have
|
||||||
|
// the appropriate admin rights.
|
||||||
|
type RevokeChatInviteLinkConfig struct {
|
||||||
|
ChatConfig
|
||||||
|
InviteLink string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (RevokeChatInviteLinkConfig) method() string {
|
||||||
|
return "revokeChatInviteLink"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (config RevokeChatInviteLinkConfig) params() (Params, error) {
|
||||||
|
params := make(Params)
|
||||||
|
|
||||||
|
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername)
|
||||||
|
params["invite_link"] = config.InviteLink
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
// LeaveChatConfig allows you to leave a chat.
|
// LeaveChatConfig allows you to leave a chat.
|
||||||
type LeaveChatConfig struct {
|
type LeaveChatConfig struct {
|
||||||
ChatID int64
|
ChatID int64
|
||||||
|
@ -1302,10 +1560,13 @@ func (config PinChatMessageConfig) params() (Params, error) {
|
||||||
return params, nil
|
return params, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnpinChatMessageConfig contains information of chat to unpin.
|
// UnpinChatMessageConfig contains information of a chat message to unpin.
|
||||||
|
//
|
||||||
|
// If MessageID is not specified, it will unpin the most recent pin.
|
||||||
type UnpinChatMessageConfig struct {
|
type UnpinChatMessageConfig struct {
|
||||||
ChatID int64
|
ChatID int64
|
||||||
ChannelUsername string
|
ChannelUsername string
|
||||||
|
MessageID int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config UnpinChatMessageConfig) method() string {
|
func (config UnpinChatMessageConfig) method() string {
|
||||||
|
@ -1315,6 +1576,26 @@ func (config UnpinChatMessageConfig) method() string {
|
||||||
func (config UnpinChatMessageConfig) params() (Params, error) {
|
func (config UnpinChatMessageConfig) params() (Params, error) {
|
||||||
params := make(Params)
|
params := make(Params)
|
||||||
|
|
||||||
|
params.AddFirstValid("chat_id", config.ChatID, config.ChannelUsername)
|
||||||
|
params.AddNonZero("message_id", config.MessageID)
|
||||||
|
|
||||||
|
return params, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnpinAllChatMessagesConfig contains information of all messages to unpin in
|
||||||
|
// a chat.
|
||||||
|
type UnpinAllChatMessagesConfig struct {
|
||||||
|
ChatID int64
|
||||||
|
ChannelUsername string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (config UnpinAllChatMessagesConfig) method() string {
|
||||||
|
return "unpinAllChatMessages"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (config UnpinAllChatMessagesConfig) params() (Params, error) {
|
||||||
|
params := make(Params)
|
||||||
|
|
||||||
params.AddFirstValid("chat_id", config.ChatID, config.ChannelUsername)
|
params.AddFirstValid("chat_id", config.ChatID, config.ChannelUsername)
|
||||||
|
|
||||||
return params, nil
|
return params, nil
|
||||||
|
@ -1731,8 +2012,9 @@ func (config SetMyCommandsConfig) params() (Params, error) {
|
||||||
type DiceConfig struct {
|
type DiceConfig struct {
|
||||||
BaseChat
|
BaseChat
|
||||||
// Emoji on which the dice throw animation is based.
|
// Emoji on which the dice throw animation is based.
|
||||||
// Currently, must be one of “🎲”, “🎯”, or “🏀”.
|
// Currently, must be one of 🎲, 🎯, 🏀, ⚽, 🎳, or 🎰.
|
||||||
// Dice can have values 1-6 for “🎲” and “🎯”, and values 1-5 for “🏀”.
|
// Dice can have values 1-6 for 🎲, 🎯, and 🎳, values 1-5 for 🏀 and ⚽,
|
||||||
|
// and values 1-64 for 🎰.
|
||||||
// Defaults to “🎲”
|
// Defaults to “🎲”
|
||||||
Emoji string
|
Emoji string
|
||||||
}
|
}
|
||||||
|
|
18
helpers.go
18
helpers.go
|
@ -52,6 +52,18 @@ func NewForward(chatID int64, fromChatID int64, messageID int) ForwardConfig {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewCopyMessage creates a new copy message.
|
||||||
|
//
|
||||||
|
// chatID is where to send it, fromChatID is the source chat,
|
||||||
|
// and messageID is the ID of the original message.
|
||||||
|
func NewCopyMessage(chatID int64, fromChatID int64, messageID int) CopyMessageConfig {
|
||||||
|
return CopyMessageConfig{
|
||||||
|
BaseChat: BaseChat{ChatID: chatID},
|
||||||
|
FromChatID: fromChatID,
|
||||||
|
MessageID: messageID,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// NewPhotoUpload creates a new photo uploader.
|
// NewPhotoUpload creates a new photo uploader.
|
||||||
//
|
//
|
||||||
// chatID is where to send it, file is a string path to the file,
|
// chatID is where to send it, file is a string path to the file,
|
||||||
|
@ -528,7 +540,7 @@ func NewInlineQueryResultCachedGIF(id, gifID string) InlineQueryResultCachedGIF
|
||||||
return InlineQueryResultCachedGIF{
|
return InlineQueryResultCachedGIF{
|
||||||
Type: "gif",
|
Type: "gif",
|
||||||
ID: id,
|
ID: id,
|
||||||
GifID: gifID,
|
GIFID: gifID,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -542,11 +554,11 @@ func NewInlineQueryResultMPEG4GIF(id, url string) InlineQueryResultMPEG4GIF {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewInlineQueryResultCachedMPEG4GIF create a new inline query with cached MPEG4 GIF.
|
// NewInlineQueryResultCachedMPEG4GIF create a new inline query with cached MPEG4 GIF.
|
||||||
func NewInlineQueryResultCachedMPEG4GIF(id, MPEG4GifID string) InlineQueryResultCachedMPEG4GIF {
|
func NewInlineQueryResultCachedMPEG4GIF(id, MPEG4GIFID string) InlineQueryResultCachedMPEG4GIF {
|
||||||
return InlineQueryResultCachedMPEG4GIF{
|
return InlineQueryResultCachedMPEG4GIF{
|
||||||
Type: "mpeg4_gif",
|
Type: "mpeg4_gif",
|
||||||
ID: id,
|
ID: id,
|
||||||
MPEG4FileID: MPEG4GifID,
|
MPEG4FileID: MPEG4GIFID,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
511
types.go
511
types.go
|
@ -96,6 +96,18 @@ type Update struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
PollAnswer *PollAnswer `json:"poll_answer,omitempty"`
|
PollAnswer *PollAnswer `json:"poll_answer,omitempty"`
|
||||||
|
// MyChatMember is 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.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
MyChatMember *ChatMemberUpdated `json:"my_chat_member"`
|
||||||
|
// ChatMember is 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.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
ChatMember *ChatMemberUpdated `json:"chat_member"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdatesChannel is the channel for getting updates.
|
// UpdatesChannel is the channel for getting updates.
|
||||||
|
@ -198,6 +210,11 @@ type Chat struct {
|
||||||
LastName string `json:"last_name,omitempty"`
|
LastName string `json:"last_name,omitempty"`
|
||||||
// Photo is a chat photo
|
// Photo is a chat photo
|
||||||
Photo *ChatPhoto `json:"photo"`
|
Photo *ChatPhoto `json:"photo"`
|
||||||
|
// Bio is the bio of the other party in a private chat. Returned only in
|
||||||
|
// getChat
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
Bio string `json:"bio,omitempty"`
|
||||||
// Description for groups, supergroups and channel chats
|
// Description for groups, supergroups and channel chats
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -233,6 +250,17 @@ type Chat struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
CanSetStickerSet bool `json:"can_set_sticker_set,omitempty"`
|
CanSetStickerSet bool `json:"can_set_sticker_set,omitempty"`
|
||||||
|
// LinkedChatID is a unique identifier for the linked chat, i.e. the
|
||||||
|
// discussion group identifier for a channel and vice versa; for supergroups
|
||||||
|
// and channel chats.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
LinkedChatID int64 `json:"linked_chat_id,omitempty"`
|
||||||
|
// Location is for supergroups, the location to which the supergroup is
|
||||||
|
// connected. Returned only in getChat.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
Location *ChatLocation `json:"location"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsPrivate returns if the Chat is a private conversation.
|
// IsPrivate returns if the Chat is a private conversation.
|
||||||
|
@ -268,6 +296,13 @@ type Message struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
From *User `json:"from,omitempty"`
|
From *User `json:"from,omitempty"`
|
||||||
|
// SenderChat is the sender of the message, sent on behalf of a chat. The
|
||||||
|
// channel itself for channel messages. The supergroup itself for messages
|
||||||
|
// from anonymous group administrators. The linked channel for messages
|
||||||
|
// automatically forwarded to the discussion group
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
SenderChat *Chat `json:"sender_chat,omitempty"`
|
||||||
// Date of the message was sent in Unix time
|
// Date of the message was sent in Unix time
|
||||||
Date int `json:"date"`
|
Date int `json:"date"`
|
||||||
// Chat is the conversation the message belongs to
|
// Chat is the conversation the message belongs to
|
||||||
|
@ -440,6 +475,11 @@ type Message struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
ChannelChatCreated bool `json:"channel_chat_created,omitempty"`
|
ChannelChatCreated bool `json:"channel_chat_created,omitempty"`
|
||||||
|
// MessageAutoDeleteTimerChanged is a service message: auto-delete timer
|
||||||
|
// settings changed in the chat.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
MessageAutoDeleteTimerChanged *MessageAutoDeleteTimerChanged `json:"message_auto_delete_timer_changed"`
|
||||||
// MigrateToChatID is the group has been migrated to a supergroup with the specified identifier.
|
// MigrateToChatID is the group has been migrated to a supergroup with the specified identifier.
|
||||||
// This number may be greater than 32 bits and some programming languages
|
// This number may be greater than 32 bits and some programming languages
|
||||||
// may have difficulty/silent defects in interpreting it.
|
// may have difficulty/silent defects in interpreting it.
|
||||||
|
@ -480,6 +520,24 @@ type Message struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
PassportData *PassportData `json:"passport_data,omitempty"`
|
PassportData *PassportData `json:"passport_data,omitempty"`
|
||||||
|
// ProximityAlertTriggered is a service message. A user in the chat
|
||||||
|
// triggered another user's proximity alert while sharing Live Location
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
ProximityAlertTriggered *ProximityAlertTriggered `json:"proximity_alert_triggered"`
|
||||||
|
// VoiceChatStarted is a service message: voice chat started.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
VoiceChatStarted *VoiceChatStarted `json:"voice_chat_started"`
|
||||||
|
// VoiceChatEnded is a service message: voice chat ended.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
VoiceChatEnded *VoiceChatEnded `json:"voice_chat_ended"`
|
||||||
|
// VoiceChatParticipantsInvited is a service message: new participants
|
||||||
|
// invited to a voice chat.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
VoiceChatParticipantsInvited *VoiceChatParticipantsInvited `json:"voice_chat_participants_invited"`
|
||||||
// ReplyMarkup is the Inline keyboard attached to the message.
|
// ReplyMarkup is the Inline keyboard attached to the message.
|
||||||
// login_url buttons are represented as ordinary url buttons.
|
// login_url buttons are represented as ordinary url buttons.
|
||||||
//
|
//
|
||||||
|
@ -556,6 +614,11 @@ func (m *Message) CommandArguments() string {
|
||||||
return m.Text[entity.Length+1:]
|
return m.Text[entity.Length+1:]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MessageID represents a unique message identifier.
|
||||||
|
type MessageID struct {
|
||||||
|
MessageID int `json:"message_id"`
|
||||||
|
}
|
||||||
|
|
||||||
// MessageEntity represents one special entity in a text message.
|
// MessageEntity represents one special entity in a text message.
|
||||||
type MessageEntity struct {
|
type MessageEntity struct {
|
||||||
// Type of the entity.
|
// Type of the entity.
|
||||||
|
@ -724,6 +787,10 @@ type Audio struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
Title string `json:"title,omitempty"`
|
Title string `json:"title,omitempty"`
|
||||||
|
// FileName is the original filename as defined by sender
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
FileName string `json:"file_name,omitempty"`
|
||||||
// MimeType of the file as defined by sender
|
// MimeType of the file as defined by sender
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -784,6 +851,10 @@ type Video struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
Thumbnail *PhotoSize `json:"thumb,omitempty"`
|
Thumbnail *PhotoSize `json:"thumb,omitempty"`
|
||||||
|
// FileName is the original filename as defined by sender
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
FileName string `json:"file_name,omitempty"`
|
||||||
// MimeType of a file as defined by sender
|
// MimeType of a file as defined by sender
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -937,6 +1008,26 @@ type Location struct {
|
||||||
Longitude float64 `json:"longitude"`
|
Longitude float64 `json:"longitude"`
|
||||||
// Latitude as defined by sender
|
// Latitude as defined by sender
|
||||||
Latitude float64 `json:"latitude"`
|
Latitude float64 `json:"latitude"`
|
||||||
|
// HorizontalAccuracy is the radius of uncertainty for the location,
|
||||||
|
// measured in meters; 0-1500
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
HorizontalAccuracy float64 `json:"horizontal_accuracy,omitempty"`
|
||||||
|
// LivePeriod is time relative to the message sending date, during which the
|
||||||
|
// location can be updated, in seconds. For active live locations only.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
LivePeriod int `json:"live_period,omitempty"`
|
||||||
|
// Heading is the direction in which user is moving, in degrees; 1-360. For
|
||||||
|
// active live locations only.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
Heading int `json:"heading,omitempty"`
|
||||||
|
// ProximityAlertRadius is the maximum distance for proximity alerts about
|
||||||
|
// approaching another chat member, in meters. For sent live locations only.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
ProximityAlertRadius int `json:"proximity_alert_radius,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Venue represents a venue.
|
// Venue represents a venue.
|
||||||
|
@ -955,6 +1046,52 @@ type Venue struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
FoursquareType string `json:"foursquare_type,omitempty"`
|
FoursquareType string `json:"foursquare_type,omitempty"`
|
||||||
|
// GooglePlaceID is the Google Places identifier of the venue
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
GooglePlaceID string `json:"google_place_id,omitempty"`
|
||||||
|
// GooglePlaceType is the Google Places type of the venue
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
GooglePlaceType string `json:"google_place_type,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ProximityAlertTriggered represents a service message sent when a user in the
|
||||||
|
// chat triggers a proximity alert sent by another user.
|
||||||
|
type ProximityAlertTriggered struct {
|
||||||
|
// Traveler is the user that triggered the alert
|
||||||
|
Traveler User `json:"traveler"`
|
||||||
|
// Watcher is the user that set the alert
|
||||||
|
Watcher User `json:"watcher"`
|
||||||
|
// Distance is the distance between the users
|
||||||
|
Distance int `json:"distance"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// MessageAutoDeleteTimerChanged represents a service message about a change in
|
||||||
|
// auto-delete timer settings.
|
||||||
|
type MessageAutoDeleteTimerChanged struct {
|
||||||
|
// New auto-delete time for messages in the chat.
|
||||||
|
MessageAutoDeleteTime int `json:"message_auto_delete_time"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// VoiceChatStarted represents a service message about a voice chat started in
|
||||||
|
// the chat.
|
||||||
|
type VoiceChatStarted struct{}
|
||||||
|
|
||||||
|
// VoiceChatEnded represents a service message about a voice chat ended in the
|
||||||
|
// chat.
|
||||||
|
type VoiceChatEnded struct {
|
||||||
|
// Voice chat duration; in seconds.
|
||||||
|
Duration int `json:"duration"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// VoiceChatParticipantsInvited represents a service message about new members
|
||||||
|
// invited to a voice chat.
|
||||||
|
type VoiceChatParticipantsInvited struct {
|
||||||
|
// New members that were invited to the voice chat.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
Users []User `json:"users"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// UserProfilePhotos contains a set of user profile photos.
|
// UserProfilePhotos contains a set of user profile photos.
|
||||||
|
@ -1256,6 +1393,29 @@ type ChatPhoto struct {
|
||||||
BigFileUniqueID string `json:"big_file_unique_id"`
|
BigFileUniqueID string `json:"big_file_unique_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChatInviteLink represents an invite link for a chat.
|
||||||
|
type ChatInviteLink struct {
|
||||||
|
// InviteLink is 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 of the link.
|
||||||
|
Creator User `json:"creator"`
|
||||||
|
// IsPrimary is true, if the link is primary.
|
||||||
|
IsPrimary bool `json:"is_primary"`
|
||||||
|
// IsRevoked is true, if the link is revoked.
|
||||||
|
IsRevoked bool `json:"is_revoked"`
|
||||||
|
// ExpireDate is the point in time (Unix timestamp) when the link will
|
||||||
|
// expire or has been expired.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
ExpireDate int `json:"expire_date"`
|
||||||
|
// MemberLimit is the maximum number of users that can be members of the
|
||||||
|
// chat simultaneously after joining the chat via this invite link; 1-99999.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
MemberLimit int `json:"member_limit"`
|
||||||
|
}
|
||||||
|
|
||||||
// ChatMember contains information about one member of a chat.
|
// ChatMember contains information about one member of a chat.
|
||||||
type ChatMember struct {
|
type ChatMember struct {
|
||||||
// User information about the user
|
// User information about the user
|
||||||
|
@ -1273,6 +1433,11 @@ type ChatMember struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
CustomTitle string `json:"custom_title,omitempty"`
|
CustomTitle string `json:"custom_title,omitempty"`
|
||||||
|
// IsAnonymous owner and administrators only. True, if the user's presence
|
||||||
|
// in the chat is hidden
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
IsAnonymous bool `json:"is_anonymous"`
|
||||||
// UntilDate restricted and kicked only.
|
// UntilDate restricted and kicked only.
|
||||||
// Date when restrictions will be lifted for this user;
|
// Date when restrictions will be lifted for this user;
|
||||||
// unix time.
|
// unix time.
|
||||||
|
@ -1284,6 +1449,14 @@ type ChatMember struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
CanBeEdited bool `json:"can_be_edited,omitempty"`
|
CanBeEdited bool `json:"can_be_edited,omitempty"`
|
||||||
|
// CanManageChat administrators only.
|
||||||
|
// True, if the administrator can access the chat event log, chat
|
||||||
|
// statistics, message statistics in channels, see channel members, see
|
||||||
|
// anonymous administrators in supergoups and ignore slow mode. Implied by
|
||||||
|
// any other administrator privilege.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CanManageChat bool `json:"can_manage_chat"`
|
||||||
// CanPostMessages administrators only.
|
// CanPostMessages administrators only.
|
||||||
// True, if the administrator can post in the channel;
|
// True, if the administrator can post in the channel;
|
||||||
// channels only.
|
// channels only.
|
||||||
|
@ -1301,6 +1474,11 @@ type ChatMember struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
CanDeleteMessages bool `json:"can_delete_messages,omitempty"`
|
CanDeleteMessages bool `json:"can_delete_messages,omitempty"`
|
||||||
|
// CanManageVoiceChats administrators only.
|
||||||
|
// True, if the administrator can manage voice chats.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CanManageVoiceChats bool `json:"can_manage_voice_chats"`
|
||||||
// CanRestrictMembers administrators only.
|
// CanRestrictMembers administrators only.
|
||||||
// True, if the administrator can restrict, ban or unban chat members.
|
// True, if the administrator can restrict, ban or unban chat members.
|
||||||
//
|
//
|
||||||
|
@ -1370,6 +1548,25 @@ func (chat ChatMember) HasLeft() bool { return chat.Status == "left" }
|
||||||
// WasKicked returns if the ChatMember was kicked from the chat.
|
// WasKicked returns if the ChatMember was kicked from the chat.
|
||||||
func (chat ChatMember) WasKicked() bool { return chat.Status == "kicked" }
|
func (chat ChatMember) WasKicked() bool { return chat.Status == "kicked" }
|
||||||
|
|
||||||
|
// ChatMemberUpdated represents changes in the status of a chat member.
|
||||||
|
type ChatMemberUpdated struct {
|
||||||
|
// Chat the user belongs to.
|
||||||
|
Chat Chat `json:"chat"`
|
||||||
|
// From is the performer of the action, which resulted in the change.
|
||||||
|
From User `json:"from"`
|
||||||
|
// Date the change was done in Unix time.
|
||||||
|
Date int `json:"date"`
|
||||||
|
// Previous information about the chat member.
|
||||||
|
OldChatMember ChatMember `json:"old_chat_member"`
|
||||||
|
// New information about the chat member.
|
||||||
|
NewChatMember ChatMember `json:"new_chat_member"`
|
||||||
|
// InviteLink is the link which was used by the user to join the chat;
|
||||||
|
// for joining by invite link events only.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
InviteLink *ChatInviteLink `json:"invite_link"`
|
||||||
|
}
|
||||||
|
|
||||||
// ChatPermissions describes actions that a non-administrator user is
|
// ChatPermissions describes actions that a non-administrator user is
|
||||||
// allowed to take in a chat. All fields are optional.
|
// allowed to take in a chat. All fields are optional.
|
||||||
type ChatPermissions struct {
|
type ChatPermissions struct {
|
||||||
|
@ -1416,6 +1613,16 @@ type ChatPermissions struct {
|
||||||
CanPinMessages bool `json:"can_pin_messages,omitempty"`
|
CanPinMessages bool `json:"can_pin_messages,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChatLocation represents a location to which a chat is connected.
|
||||||
|
type ChatLocation struct {
|
||||||
|
// Location is the location to which the supergroup is connected. Can't be a
|
||||||
|
// live location.
|
||||||
|
Location Location `json:"location"`
|
||||||
|
// Address is the location address; 1-64 characters, as defined by the chat
|
||||||
|
// owner
|
||||||
|
Address string `json:"address"`
|
||||||
|
}
|
||||||
|
|
||||||
// BotCommand represents a bot command.
|
// BotCommand represents a bot command.
|
||||||
type BotCommand struct {
|
type BotCommand struct {
|
||||||
// Command text of the command, 1-32 characters.
|
// Command text of the command, 1-32 characters.
|
||||||
|
@ -1460,6 +1667,11 @@ type BaseInputMedia struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
ParseMode string `json:"parse_mode,omitempty"`
|
ParseMode string `json:"parse_mode,omitempty"`
|
||||||
|
// CaptionEntities is a list of special entities that appear in the caption,
|
||||||
|
// which can be specified instead of parse_mode
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CaptionEntities []MessageEntity `json:"caption_entities"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// InputMediaPhoto is a photo to send as part of a media group.
|
// InputMediaPhoto is a photo to send as part of a media group.
|
||||||
|
@ -1525,6 +1737,12 @@ type InputMediaAudio struct {
|
||||||
// InputMediaDocument is a general file to send as part of a media group.
|
// InputMediaDocument is a general file to send as part of a media group.
|
||||||
type InputMediaDocument struct {
|
type InputMediaDocument struct {
|
||||||
BaseInputMedia
|
BaseInputMedia
|
||||||
|
// DisableContentTypeDetection disables automatic server-side content type
|
||||||
|
// detection for files uploaded using multipart/form-data. Always true, if
|
||||||
|
// the document is sent as part of an album
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
DisableContentTypeDetection bool `json:"disable_content_type_detection,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sticker represents a sticker.
|
// Sticker represents a sticker.
|
||||||
|
@ -1648,6 +1866,10 @@ type WebhookInfo struct {
|
||||||
HasCustomCertificate bool `json:"has_custom_certificate"`
|
HasCustomCertificate bool `json:"has_custom_certificate"`
|
||||||
// PendingUpdateCount number of updates awaiting delivery.
|
// PendingUpdateCount number of updates awaiting delivery.
|
||||||
PendingUpdateCount int `json:"pending_update_count"`
|
PendingUpdateCount int `json:"pending_update_count"`
|
||||||
|
// IPAddress is the currently used webhook IP address
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
IPAddress string `json:"ip_address,omitempty"`
|
||||||
// LastErrorDate unix time for the most recent error
|
// LastErrorDate unix time for the most recent error
|
||||||
// that happened when trying to deliver an update via webhook.
|
// that happened when trying to deliver an update via webhook.
|
||||||
//
|
//
|
||||||
|
@ -1694,16 +1916,10 @@ type InlineQuery struct {
|
||||||
// InlineQueryResultCachedAudio is an inline query response with cached audio.
|
// InlineQueryResultCachedAudio is an inline query response with cached audio.
|
||||||
type InlineQueryResultCachedAudio struct {
|
type InlineQueryResultCachedAudio struct {
|
||||||
// Type of the result, must be audio
|
// Type of the result, must be audio
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes
|
// ID unique identifier for this result, 1-64 bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// AudioID a valid file identifier for the audio file
|
// AudioID a valid file identifier for the audio file
|
||||||
//
|
|
||||||
// required
|
|
||||||
AudioID string `json:"audio_file_id"`
|
AudioID string `json:"audio_file_id"`
|
||||||
// Caption 0-1024 characters after entities parsing
|
// Caption 0-1024 characters after entities parsing
|
||||||
//
|
//
|
||||||
|
@ -1715,6 +1931,11 @@ type InlineQueryResultCachedAudio struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
ParseMode string `json:"parse_mode,omitempty"`
|
ParseMode string `json:"parse_mode,omitempty"`
|
||||||
|
// CaptionEntities is a list of special entities that appear in the caption,
|
||||||
|
// which can be specified instead of parse_mode
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CaptionEntities []MessageEntity `json:"caption_entities"`
|
||||||
// ReplyMarkup inline keyboard attached to the message
|
// ReplyMarkup inline keyboard attached to the message
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -1728,21 +1949,15 @@ type InlineQueryResultCachedAudio struct {
|
||||||
// InlineQueryResultCachedDocument is an inline query response with cached document.
|
// InlineQueryResultCachedDocument is an inline query response with cached document.
|
||||||
type InlineQueryResultCachedDocument struct {
|
type InlineQueryResultCachedDocument struct {
|
||||||
// Type of the result, must be document
|
// Type of the result, must be document
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes
|
// ID unique identifier for this result, 1-64 bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// DocumentID a valid file identifier for the file
|
// DocumentID a valid file identifier for the file
|
||||||
//
|
|
||||||
// required
|
|
||||||
DocumentID string `json:"document_file_id"`
|
DocumentID string `json:"document_file_id"`
|
||||||
// Title for the result
|
// Title for the result
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
Title string `json:"title,omitempty"` // required
|
Title string `json:"title,omitempty"`
|
||||||
// Caption of the document to be sent, 0-1024 characters after entities parsing
|
// Caption of the document to be sent, 0-1024 characters after entities parsing
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -1757,6 +1972,11 @@ type InlineQueryResultCachedDocument struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
ParseMode string `json:"parse_mode,omitempty"`
|
ParseMode string `json:"parse_mode,omitempty"`
|
||||||
|
// CaptionEntities is a list of special entities that appear in the caption,
|
||||||
|
// which can be specified instead of parse_mode
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CaptionEntities []MessageEntity `json:"caption_entities"`
|
||||||
// ReplyMarkup inline keyboard attached to the message
|
// ReplyMarkup inline keyboard attached to the message
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -1770,17 +1990,11 @@ type InlineQueryResultCachedDocument struct {
|
||||||
// InlineQueryResultCachedGIF is an inline query response with cached gif.
|
// InlineQueryResultCachedGIF is an inline query response with cached gif.
|
||||||
type InlineQueryResultCachedGIF struct {
|
type InlineQueryResultCachedGIF struct {
|
||||||
// Type of the result, must be gif.
|
// Type of the result, must be gif.
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes.
|
// ID unique identifier for this result, 1-64 bytes.
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// GifID a valid file identifier for the GIF file.
|
// GifID a valid file identifier for the GIF file.
|
||||||
//
|
GIFID string `json:"gif_file_id"`
|
||||||
// required
|
|
||||||
GifID string `json:"gif_file_id"`
|
|
||||||
// Title for the result
|
// Title for the result
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -1795,6 +2009,11 @@ type InlineQueryResultCachedGIF struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
ParseMode string `json:"parse_mode,omitempty"`
|
ParseMode string `json:"parse_mode,omitempty"`
|
||||||
|
// CaptionEntities is a list of special entities that appear in the caption,
|
||||||
|
// which can be specified instead of parse_mode
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CaptionEntities []MessageEntity `json:"caption_entities"`
|
||||||
// ReplyMarkup inline keyboard attached to the message.
|
// ReplyMarkup inline keyboard attached to the message.
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -1809,16 +2028,10 @@ type InlineQueryResultCachedGIF struct {
|
||||||
// H.264/MPEG-4 AVC video without sound gif.
|
// H.264/MPEG-4 AVC video without sound gif.
|
||||||
type InlineQueryResultCachedMPEG4GIF struct {
|
type InlineQueryResultCachedMPEG4GIF struct {
|
||||||
// Type of the result, must be mpeg4_gif
|
// Type of the result, must be mpeg4_gif
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes
|
// ID unique identifier for this result, 1-64 bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// MGifID a valid file identifier for the MP4 file
|
// MPEG4FileID a valid file identifier for the MP4 file
|
||||||
//
|
|
||||||
// required
|
|
||||||
MPEG4FileID string `json:"mpeg4_file_id"`
|
MPEG4FileID string `json:"mpeg4_file_id"`
|
||||||
// Title for the result
|
// Title for the result
|
||||||
//
|
//
|
||||||
|
@ -1834,6 +2047,12 @@ type InlineQueryResultCachedMPEG4GIF struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
ParseMode string `json:"parse_mode,omitempty"`
|
ParseMode string `json:"parse_mode,omitempty"`
|
||||||
|
// ParseMode mode for parsing entities in the video caption.
|
||||||
|
// See formatting options for more details
|
||||||
|
// (https://core.telegram.org/bots/api#formatting-options).
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CaptionEntities []MessageEntity `json:"caption_entities"`
|
||||||
// ReplyMarkup inline keyboard attached to the message.
|
// ReplyMarkup inline keyboard attached to the message.
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -1847,16 +2066,10 @@ type InlineQueryResultCachedMPEG4GIF struct {
|
||||||
// InlineQueryResultCachedPhoto is an inline query response with cached photo.
|
// InlineQueryResultCachedPhoto is an inline query response with cached photo.
|
||||||
type InlineQueryResultCachedPhoto struct {
|
type InlineQueryResultCachedPhoto struct {
|
||||||
// Type of the result, must be photo.
|
// Type of the result, must be photo.
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes.
|
// ID unique identifier for this result, 1-64 bytes.
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// PhotoID a valid file identifier of the photo.
|
// PhotoID a valid file identifier of the photo.
|
||||||
//
|
|
||||||
// required
|
|
||||||
PhotoID string `json:"photo_file_id"`
|
PhotoID string `json:"photo_file_id"`
|
||||||
// Title for the result.
|
// Title for the result.
|
||||||
//
|
//
|
||||||
|
@ -1876,6 +2089,11 @@ type InlineQueryResultCachedPhoto struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
ParseMode string `json:"parse_mode,omitempty"`
|
ParseMode string `json:"parse_mode,omitempty"`
|
||||||
|
// CaptionEntities is a list of special entities that appear in the caption,
|
||||||
|
// which can be specified instead of parse_mode
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CaptionEntities []MessageEntity `json:"caption_entities"`
|
||||||
// ReplyMarkup inline keyboard attached to the message.
|
// ReplyMarkup inline keyboard attached to the message.
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -1889,25 +2107,13 @@ type InlineQueryResultCachedPhoto struct {
|
||||||
// InlineQueryResultCachedSticker is an inline query response with cached sticker.
|
// InlineQueryResultCachedSticker is an inline query response with cached sticker.
|
||||||
type InlineQueryResultCachedSticker struct {
|
type InlineQueryResultCachedSticker struct {
|
||||||
// Type of the result, must be sticker
|
// Type of the result, must be sticker
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes
|
// ID unique identifier for this result, 1-64 bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// StickerID a valid file identifier of the sticker
|
// StickerID a valid file identifier of the sticker
|
||||||
//
|
|
||||||
// required
|
|
||||||
StickerID string `json:"sticker_file_id"`
|
StickerID string `json:"sticker_file_id"`
|
||||||
// Title is a title
|
// Title is a title
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
// ParseMode mode for parsing entities in the video caption.
|
|
||||||
// See formatting options for more details
|
|
||||||
// (https://core.telegram.org/bots/api#formatting-options).
|
|
||||||
//
|
|
||||||
// optional
|
|
||||||
ParseMode string `json:"parse_mode,omitempty"`
|
|
||||||
// ReplyMarkup inline keyboard attached to the message
|
// ReplyMarkup inline keyboard attached to the message
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -1921,20 +2127,12 @@ type InlineQueryResultCachedSticker struct {
|
||||||
// InlineQueryResultCachedVideo is an inline query response with cached video.
|
// InlineQueryResultCachedVideo is an inline query response with cached video.
|
||||||
type InlineQueryResultCachedVideo struct {
|
type InlineQueryResultCachedVideo struct {
|
||||||
// Type of the result, must be video
|
// Type of the result, must be video
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes
|
// ID unique identifier for this result, 1-64 bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// VideoID a valid file identifier for the video file
|
// VideoID a valid file identifier for the video file
|
||||||
//
|
|
||||||
// required
|
|
||||||
VideoID string `json:"video_file_id"`
|
VideoID string `json:"video_file_id"`
|
||||||
// Title for the result
|
// Title for the result
|
||||||
//
|
|
||||||
// required
|
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
// Description short description of the result
|
// Description short description of the result
|
||||||
//
|
//
|
||||||
|
@ -1950,6 +2148,11 @@ type InlineQueryResultCachedVideo struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
ParseMode string `json:"parse_mode,omitempty"`
|
ParseMode string `json:"parse_mode,omitempty"`
|
||||||
|
// CaptionEntities is a list of special entities that appear in the caption,
|
||||||
|
// which can be specified instead of parse_mode
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CaptionEntities []MessageEntity `json:"caption_entities"`
|
||||||
// ReplyMarkup inline keyboard attached to the message
|
// ReplyMarkup inline keyboard attached to the message
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -1963,20 +2166,12 @@ type InlineQueryResultCachedVideo struct {
|
||||||
// InlineQueryResultCachedVoice is an inline query response with cached voice.
|
// InlineQueryResultCachedVoice is an inline query response with cached voice.
|
||||||
type InlineQueryResultCachedVoice struct {
|
type InlineQueryResultCachedVoice struct {
|
||||||
// Type of the result, must be voice
|
// Type of the result, must be voice
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes
|
// ID unique identifier for this result, 1-64 bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// VoiceID a valid file identifier for the voice message
|
// VoiceID a valid file identifier for the voice message
|
||||||
//
|
|
||||||
// required
|
|
||||||
VoiceID string `json:"voice_file_id"`
|
VoiceID string `json:"voice_file_id"`
|
||||||
// Title voice message title
|
// Title voice message title
|
||||||
//
|
|
||||||
// required
|
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
// Caption 0-1024 characters after entities parsing
|
// Caption 0-1024 characters after entities parsing
|
||||||
//
|
//
|
||||||
|
@ -1988,6 +2183,11 @@ type InlineQueryResultCachedVoice struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
ParseMode string `json:"parse_mode,omitempty"`
|
ParseMode string `json:"parse_mode,omitempty"`
|
||||||
|
// CaptionEntities is a list of special entities that appear in the caption,
|
||||||
|
// which can be specified instead of parse_mode
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CaptionEntities []MessageEntity `json:"caption_entities"`
|
||||||
// ReplyMarkup inline keyboard attached to the message
|
// ReplyMarkup inline keyboard attached to the message
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -2041,25 +2241,28 @@ type InlineQueryResultArticle struct {
|
||||||
// InlineQueryResultAudio is an inline query response audio.
|
// InlineQueryResultAudio is an inline query response audio.
|
||||||
type InlineQueryResultAudio struct {
|
type InlineQueryResultAudio struct {
|
||||||
// Type of the result, must be audio
|
// Type of the result, must be audio
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes
|
// ID unique identifier for this result, 1-64 bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// URL a valid url for the audio file
|
// URL a valid url for the audio file
|
||||||
//
|
|
||||||
// required
|
|
||||||
URL string `json:"audio_url"`
|
URL string `json:"audio_url"`
|
||||||
// Title is a title
|
// Title is a title
|
||||||
//
|
|
||||||
// required
|
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
// Caption 0-1024 characters after entities parsing
|
// Caption 0-1024 characters after entities parsing
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
Caption string `json:"caption,omitempty"`
|
Caption string `json:"caption,omitempty"`
|
||||||
|
// ParseMode mode for parsing entities in the video caption.
|
||||||
|
// See formatting options for more details
|
||||||
|
// (https://core.telegram.org/bots/api#formatting-options).
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
ParseMode string `json:"parse_mode,omitempty"`
|
||||||
|
// CaptionEntities is a list of special entities that appear in the caption,
|
||||||
|
// which can be specified instead of parse_mode
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CaptionEntities []MessageEntity `json:"caption_entities"`
|
||||||
// Performer is a performer
|
// Performer is a performer
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -2096,16 +2299,10 @@ type InlineQueryResultContact struct {
|
||||||
// InlineQueryResultGame is an inline query response game.
|
// InlineQueryResultGame is an inline query response game.
|
||||||
type InlineQueryResultGame struct {
|
type InlineQueryResultGame struct {
|
||||||
// Type of the result, must be game
|
// Type of the result, must be game
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes
|
// ID unique identifier for this result, 1-64 bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// GameShortName short name of the game
|
// GameShortName short name of the game
|
||||||
//
|
|
||||||
// required
|
|
||||||
GameShortName string `json:"game_short_name"`
|
GameShortName string `json:"game_short_name"`
|
||||||
// ReplyMarkup inline keyboard attached to the message
|
// ReplyMarkup inline keyboard attached to the message
|
||||||
//
|
//
|
||||||
|
@ -2116,28 +2313,18 @@ type InlineQueryResultGame struct {
|
||||||
// InlineQueryResultDocument is an inline query response document.
|
// InlineQueryResultDocument is an inline query response document.
|
||||||
type InlineQueryResultDocument struct {
|
type InlineQueryResultDocument struct {
|
||||||
// Type of the result, must be document
|
// Type of the result, must be document
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes
|
// ID unique identifier for this result, 1-64 bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// Title for the result
|
// Title for the result
|
||||||
//
|
|
||||||
// required
|
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
// Caption of the document to be sent, 0-1024 characters after entities parsing
|
// Caption of the document to be sent, 0-1024 characters after entities parsing
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
Caption string `json:"caption,omitempty"`
|
Caption string `json:"caption,omitempty"`
|
||||||
// URL a valid url for the file
|
// URL a valid url for the file
|
||||||
//
|
|
||||||
// required
|
|
||||||
URL string `json:"document_url"`
|
URL string `json:"document_url"`
|
||||||
// MimeType of the content of the file, either “application/pdf” or “application/zip”
|
// MimeType of the content of the file, either “application/pdf” or “application/zip”
|
||||||
//
|
|
||||||
// required
|
|
||||||
MimeType string `json:"mime_type"`
|
MimeType string `json:"mime_type"`
|
||||||
// Description short description of the result
|
// Description short description of the result
|
||||||
//
|
//
|
||||||
|
@ -2168,20 +2355,12 @@ type InlineQueryResultDocument struct {
|
||||||
// InlineQueryResultGIF is an inline query response GIF.
|
// InlineQueryResultGIF is an inline query response GIF.
|
||||||
type InlineQueryResultGIF struct {
|
type InlineQueryResultGIF struct {
|
||||||
// Type of the result, must be gif.
|
// Type of the result, must be gif.
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes.
|
// ID unique identifier for this result, 1-64 bytes.
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// URL a valid URL for the GIF file. File size must not exceed 1MB.
|
// URL a valid URL for the GIF file. File size must not exceed 1MB.
|
||||||
//
|
|
||||||
// required
|
|
||||||
URL string `json:"gif_url"`
|
URL string `json:"gif_url"`
|
||||||
// ThumbURL url of the static (JPEG or GIF) or animated (MPEG4) thumbnail for the result.
|
// ThumbURL url of the static (JPEG or GIF) or animated (MPEG4) thumbnail for the result.
|
||||||
//
|
|
||||||
// required
|
|
||||||
ThumbURL string `json:"thumb_url"`
|
ThumbURL string `json:"thumb_url"`
|
||||||
// Width of the GIF
|
// Width of the GIF
|
||||||
//
|
//
|
||||||
|
@ -2203,6 +2382,17 @@ type InlineQueryResultGIF struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
Caption string `json:"caption,omitempty"`
|
Caption string `json:"caption,omitempty"`
|
||||||
|
// ParseMode mode for parsing entities in the video caption.
|
||||||
|
// See formatting options for more details
|
||||||
|
// (https://core.telegram.org/bots/api#formatting-options).
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
ParseMode string `json:"parse_mode,omitempty"`
|
||||||
|
// CaptionEntities is a list of special entities that appear in the caption,
|
||||||
|
// which can be specified instead of parse_mode
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CaptionEntities []MessageEntity `json:"caption_entities"`
|
||||||
// ReplyMarkup inline keyboard attached to the message
|
// ReplyMarkup inline keyboard attached to the message
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -2216,25 +2406,36 @@ type InlineQueryResultGIF struct {
|
||||||
// InlineQueryResultLocation is an inline query response location.
|
// InlineQueryResultLocation is an inline query response location.
|
||||||
type InlineQueryResultLocation struct {
|
type InlineQueryResultLocation struct {
|
||||||
// Type of the result, must be location
|
// Type of the result, must be location
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 Bytes
|
// ID unique identifier for this result, 1-64 Bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// Latitude of the location in degrees
|
// Latitude of the location in degrees
|
||||||
//
|
|
||||||
// required
|
|
||||||
Latitude float64 `json:"latitude"`
|
Latitude float64 `json:"latitude"`
|
||||||
// Longitude of the location in degrees
|
// Longitude of the location in degrees
|
||||||
//
|
|
||||||
// required
|
|
||||||
Longitude float64 `json:"longitude"`
|
Longitude float64 `json:"longitude"`
|
||||||
// Title of the location
|
// Title of the location
|
||||||
//
|
|
||||||
// required
|
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
|
// HorizontalAccuracy is the radius of uncertainty for the location,
|
||||||
|
// measured in meters; 0-1500
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
HorizontalAccuracy float64 `json:"horizontal_accuracy"`
|
||||||
|
// LivePeriod is the period in seconds for which the location can be
|
||||||
|
// updated, should be between 60 and 86400.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
LivePeriod int `json:"live_period"`
|
||||||
|
// Heading is for live locations, a direction in which the user is moving,
|
||||||
|
// in degrees. Must be between 1 and 360 if specified.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
Heading int `json:"heading"`
|
||||||
|
// ProximityAlertRadius is for live locations, a maximum distance for
|
||||||
|
// proximity alerts about approaching another chat member, in meters. Must
|
||||||
|
// be between 1 and 100000 if specified.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
ProximityAlertRadius int `json:"proximity_alert_radius"`
|
||||||
// ReplyMarkup inline keyboard attached to the message
|
// ReplyMarkup inline keyboard attached to the message
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -2260,16 +2461,10 @@ type InlineQueryResultLocation struct {
|
||||||
// InlineQueryResultMPEG4GIF is an inline query response MPEG4 GIF.
|
// InlineQueryResultMPEG4GIF is an inline query response MPEG4 GIF.
|
||||||
type InlineQueryResultMPEG4GIF struct {
|
type InlineQueryResultMPEG4GIF struct {
|
||||||
// Type of the result, must be mpeg4_gif
|
// Type of the result, must be mpeg4_gif
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes
|
// ID unique identifier for this result, 1-64 bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// URL a valid URL for the MP4 file. File size must not exceed 1MB
|
// URL a valid URL for the MP4 file. File size must not exceed 1MB
|
||||||
//
|
|
||||||
// required
|
|
||||||
URL string `json:"mpeg4_url"`
|
URL string `json:"mpeg4_url"`
|
||||||
// Width video width
|
// Width video width
|
||||||
//
|
//
|
||||||
|
@ -2293,6 +2488,17 @@ type InlineQueryResultMPEG4GIF struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
Caption string `json:"caption,omitempty"`
|
Caption string `json:"caption,omitempty"`
|
||||||
|
// ParseMode mode for parsing entities in the video caption.
|
||||||
|
// See formatting options for more details
|
||||||
|
// (https://core.telegram.org/bots/api#formatting-options).
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
ParseMode string `json:"parse_mode,omitempty"`
|
||||||
|
// CaptionEntities is a list of special entities that appear in the caption,
|
||||||
|
// which can be specified instead of parse_mode
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CaptionEntities []MessageEntity `json:"caption_entities"`
|
||||||
// ReplyMarkup inline keyboard attached to the message
|
// ReplyMarkup inline keyboard attached to the message
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -2306,12 +2512,8 @@ type InlineQueryResultMPEG4GIF struct {
|
||||||
// InlineQueryResultPhoto is an inline query response photo.
|
// InlineQueryResultPhoto is an inline query response photo.
|
||||||
type InlineQueryResultPhoto struct {
|
type InlineQueryResultPhoto struct {
|
||||||
// Type of the result, must be article.
|
// Type of the result, must be article.
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 Bytes.
|
// ID unique identifier for this result, 1-64 Bytes.
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// URL a valid URL of the photo. Photo must be in jpeg format.
|
// URL a valid URL of the photo. Photo must be in jpeg format.
|
||||||
// Photo size must not exceed 5MB.
|
// Photo size must not exceed 5MB.
|
||||||
|
@ -2352,6 +2554,11 @@ type InlineQueryResultPhoto struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
ReplyMarkup *InlineKeyboardMarkup `json:"reply_markup,omitempty"`
|
ReplyMarkup *InlineKeyboardMarkup `json:"reply_markup,omitempty"`
|
||||||
|
// CaptionEntities is a list of special entities that appear in the caption,
|
||||||
|
// which can be specified instead of parse_mode
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CaptionEntities []MessageEntity `json:"caption_entities"`
|
||||||
// InputMessageContent content of the message to be sent instead of the photo.
|
// InputMessageContent content of the message to be sent instead of the photo.
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -2361,28 +2568,16 @@ type InlineQueryResultPhoto struct {
|
||||||
// InlineQueryResultVenue is an inline query response venue.
|
// InlineQueryResultVenue is an inline query response venue.
|
||||||
type InlineQueryResultVenue struct {
|
type InlineQueryResultVenue struct {
|
||||||
// Type of the result, must be venue
|
// Type of the result, must be venue
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 Bytes
|
// ID unique identifier for this result, 1-64 Bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// Latitude of the venue location in degrees
|
// Latitude of the venue location in degrees
|
||||||
//
|
|
||||||
// required
|
|
||||||
Latitude float64 `json:"latitude"`
|
Latitude float64 `json:"latitude"`
|
||||||
// Longitude of the venue location in degrees
|
// Longitude of the venue location in degrees
|
||||||
//
|
|
||||||
// required
|
|
||||||
Longitude float64 `json:"longitude"`
|
Longitude float64 `json:"longitude"`
|
||||||
// Title of the venue
|
// Title of the venue
|
||||||
//
|
|
||||||
// required
|
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
// Address of the venue
|
// Address of the venue
|
||||||
//
|
|
||||||
// required
|
|
||||||
Address string `json:"address"`
|
Address string `json:"address"`
|
||||||
// FoursquareID foursquare identifier of the venue if known
|
// FoursquareID foursquare identifier of the venue if known
|
||||||
//
|
//
|
||||||
|
@ -2393,6 +2588,14 @@ type InlineQueryResultVenue struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
FoursquareType string `json:"foursquare_type,omitempty"`
|
FoursquareType string `json:"foursquare_type,omitempty"`
|
||||||
|
// GooglePlaceID is the Google Places identifier of the venue
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
GooglePlaceID string `json:"google_place_id,omitempty"`
|
||||||
|
// GooglePlaceType is the Google Places type of the venue
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
GooglePlaceType string `json:"google_place_type,omitempty"`
|
||||||
// ReplyMarkup inline keyboard attached to the message
|
// ReplyMarkup inline keyboard attached to the message
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -2418,28 +2621,18 @@ type InlineQueryResultVenue struct {
|
||||||
// InlineQueryResultVideo is an inline query response video.
|
// InlineQueryResultVideo is an inline query response video.
|
||||||
type InlineQueryResultVideo struct {
|
type InlineQueryResultVideo struct {
|
||||||
// Type of the result, must be video
|
// Type of the result, must be video
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes
|
// ID unique identifier for this result, 1-64 bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// URL a valid url for the embedded video player or video file
|
// URL a valid url for the embedded video player or video file
|
||||||
//
|
|
||||||
// required
|
|
||||||
URL string `json:"video_url"`
|
URL string `json:"video_url"`
|
||||||
// MimeType of the content of video url, “text/html” or “video/mp4”
|
// MimeType of the content of video url, “text/html” or “video/mp4”
|
||||||
//
|
|
||||||
// required
|
|
||||||
MimeType string `json:"mime_type"`
|
MimeType string `json:"mime_type"`
|
||||||
//
|
//
|
||||||
// ThumbURL url of the thumbnail (jpeg only) for the video
|
// ThumbURL url of the thumbnail (jpeg only) for the video
|
||||||
// optional
|
// optional
|
||||||
ThumbURL string `json:"thumb_url,omitempty"`
|
ThumbURL string `json:"thumb_url,omitempty"`
|
||||||
// Title for the result
|
// Title for the result
|
||||||
//
|
|
||||||
// required
|
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
// Caption of the video to be sent, 0-1024 characters after entities parsing
|
// Caption of the video to be sent, 0-1024 characters after entities parsing
|
||||||
//
|
//
|
||||||
|
@ -2476,25 +2669,28 @@ type InlineQueryResultVideo struct {
|
||||||
// InlineQueryResultVoice is an inline query response voice.
|
// InlineQueryResultVoice is an inline query response voice.
|
||||||
type InlineQueryResultVoice struct {
|
type InlineQueryResultVoice struct {
|
||||||
// Type of the result, must be voice
|
// Type of the result, must be voice
|
||||||
//
|
|
||||||
// required
|
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
// ID unique identifier for this result, 1-64 bytes
|
// ID unique identifier for this result, 1-64 bytes
|
||||||
//
|
|
||||||
// required
|
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
// URL a valid URL for the voice recording
|
// URL a valid URL for the voice recording
|
||||||
//
|
|
||||||
// required
|
|
||||||
URL string `json:"voice_url"`
|
URL string `json:"voice_url"`
|
||||||
// Title recording title
|
// Title recording title
|
||||||
//
|
|
||||||
// required
|
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
// Caption 0-1024 characters after entities parsing
|
// Caption 0-1024 characters after entities parsing
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
Caption string `json:"caption,omitempty"`
|
Caption string `json:"caption,omitempty"`
|
||||||
|
// ParseMode mode for parsing entities in the video caption.
|
||||||
|
// See formatting options for more details
|
||||||
|
// (https://core.telegram.org/bots/api#formatting-options).
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
ParseMode string `json:"parse_mode,omitempty"`
|
||||||
|
// CaptionEntities is a list of special entities that appear in the caption,
|
||||||
|
// which can be specified instead of parse_mode
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
CaptionEntities []MessageEntity `json:"caption_entities"`
|
||||||
// Duration recording duration in seconds
|
// Duration recording duration in seconds
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -2540,6 +2736,11 @@ type InputTextMessageContent struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
ParseMode string `json:"parse_mode,omitempty"`
|
ParseMode string `json:"parse_mode,omitempty"`
|
||||||
|
// Entities is a list of special entities that appear in message text, which
|
||||||
|
// can be specified instead of parse_mode
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
Entities []MessageEntity `json:"entities,omitempty"`
|
||||||
// DisableWebPagePreview disables link previews for links in the sent message
|
// DisableWebPagePreview disables link previews for links in the sent message
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
|
@ -2553,11 +2754,27 @@ type InputLocationMessageContent struct {
|
||||||
Latitude float64 `json:"latitude"`
|
Latitude float64 `json:"latitude"`
|
||||||
// Longitude of the location in degrees
|
// Longitude of the location in degrees
|
||||||
Longitude float64 `json:"longitude"`
|
Longitude float64 `json:"longitude"`
|
||||||
|
// HorizontalAccuracy is the radius of uncertainty for the location,
|
||||||
|
// measured in meters; 0-1500
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
HorizontalAccuracy float64 `json:"horizontal_accuracy"`
|
||||||
// LivePeriod is the period in seconds for which the location can be
|
// LivePeriod is the period in seconds for which the location can be
|
||||||
// updated, should be between 60 and 86400
|
// updated, should be between 60 and 86400
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
LivePeriod int `json:"live_period,omitempty"`
|
LivePeriod int `json:"live_period,omitempty"`
|
||||||
|
// Heading is for live locations, a direction in which the user is moving,
|
||||||
|
// in degrees. Must be between 1 and 360 if specified.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
Heading int `json:"heading"`
|
||||||
|
// ProximityAlertRadius is for live locations, a maximum distance for
|
||||||
|
// proximity alerts about approaching another chat member, in meters. Must
|
||||||
|
// be between 1 and 100000 if specified.
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
ProximityAlertRadius int `json:"proximity_alert_radius"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// InputVenueMessageContent contains a venue for displaying
|
// InputVenueMessageContent contains a venue for displaying
|
||||||
|
@ -2579,6 +2796,14 @@ type InputVenueMessageContent struct {
|
||||||
//
|
//
|
||||||
// optional
|
// optional
|
||||||
FoursquareType string `json:"foursquare_type,omitempty"`
|
FoursquareType string `json:"foursquare_type,omitempty"`
|
||||||
|
// GooglePlaceID is the Google Places identifier of the venue
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
GooglePlaceID string `json:"google_place_id"`
|
||||||
|
// GooglePlaceType is the Google Places type of the venue
|
||||||
|
//
|
||||||
|
// optional
|
||||||
|
GooglePlaceType string `json:"google_place_type"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// InputContactMessageContent contains a contact for displaying
|
// InputContactMessageContent contains a contact for displaying
|
||||||
|
|
|
@ -282,15 +282,20 @@ var (
|
||||||
_ Chattable = AnimationConfig{}
|
_ Chattable = AnimationConfig{}
|
||||||
_ Chattable = AudioConfig{}
|
_ Chattable = AudioConfig{}
|
||||||
_ Chattable = CallbackConfig{}
|
_ Chattable = CallbackConfig{}
|
||||||
_ Chattable = ChatAdministratorsConfig{}
|
|
||||||
_ Chattable = ChatActionConfig{}
|
_ Chattable = ChatActionConfig{}
|
||||||
|
_ Chattable = ChatAdministratorsConfig{}
|
||||||
_ Chattable = ChatInfoConfig{}
|
_ Chattable = ChatInfoConfig{}
|
||||||
_ Chattable = ChatInviteLinkConfig{}
|
_ Chattable = ChatInviteLinkConfig{}
|
||||||
|
_ Chattable = CloseConfig{}
|
||||||
_ Chattable = ContactConfig{}
|
_ Chattable = ContactConfig{}
|
||||||
|
_ Chattable = CopyMessageConfig{}
|
||||||
|
_ Chattable = CreateChatInviteLinkConfig{}
|
||||||
_ Chattable = DeleteChatPhotoConfig{}
|
_ Chattable = DeleteChatPhotoConfig{}
|
||||||
_ Chattable = DeleteChatStickerSetConfig{}
|
_ Chattable = DeleteChatStickerSetConfig{}
|
||||||
_ Chattable = DeleteMessageConfig{}
|
_ Chattable = DeleteMessageConfig{}
|
||||||
|
_ Chattable = DeleteWebhookConfig{}
|
||||||
_ Chattable = DocumentConfig{}
|
_ Chattable = DocumentConfig{}
|
||||||
|
_ Chattable = EditChatInviteLinkConfig{}
|
||||||
_ Chattable = EditMessageCaptionConfig{}
|
_ Chattable = EditMessageCaptionConfig{}
|
||||||
_ Chattable = EditMessageLiveLocationConfig{}
|
_ Chattable = EditMessageLiveLocationConfig{}
|
||||||
_ Chattable = EditMessageMediaConfig{}
|
_ Chattable = EditMessageMediaConfig{}
|
||||||
|
@ -306,14 +311,15 @@ var (
|
||||||
_ Chattable = KickChatMemberConfig{}
|
_ Chattable = KickChatMemberConfig{}
|
||||||
_ Chattable = LeaveChatConfig{}
|
_ Chattable = LeaveChatConfig{}
|
||||||
_ Chattable = LocationConfig{}
|
_ Chattable = LocationConfig{}
|
||||||
|
_ Chattable = LogOutConfig{}
|
||||||
_ Chattable = MediaGroupConfig{}
|
_ Chattable = MediaGroupConfig{}
|
||||||
_ Chattable = MessageConfig{}
|
_ Chattable = MessageConfig{}
|
||||||
_ Chattable = PhotoConfig{}
|
_ Chattable = PhotoConfig{}
|
||||||
_ Chattable = PinChatMessageConfig{}
|
_ Chattable = PinChatMessageConfig{}
|
||||||
_ Chattable = PreCheckoutConfig{}
|
_ Chattable = PreCheckoutConfig{}
|
||||||
_ Chattable = PromoteChatMemberConfig{}
|
_ Chattable = PromoteChatMemberConfig{}
|
||||||
_ Chattable = RemoveWebhookConfig{}
|
|
||||||
_ Chattable = RestrictChatMemberConfig{}
|
_ Chattable = RestrictChatMemberConfig{}
|
||||||
|
_ Chattable = RevokeChatInviteLinkConfig{}
|
||||||
_ Chattable = SendPollConfig{}
|
_ Chattable = SendPollConfig{}
|
||||||
_ Chattable = SetChatDescriptionConfig{}
|
_ Chattable = SetChatDescriptionConfig{}
|
||||||
_ Chattable = SetChatPhotoConfig{}
|
_ Chattable = SetChatPhotoConfig{}
|
||||||
|
@ -321,8 +327,8 @@ var (
|
||||||
_ Chattable = SetGameScoreConfig{}
|
_ Chattable = SetGameScoreConfig{}
|
||||||
_ Chattable = ShippingConfig{}
|
_ Chattable = ShippingConfig{}
|
||||||
_ Chattable = StickerConfig{}
|
_ Chattable = StickerConfig{}
|
||||||
_ Chattable = StopPollConfig{}
|
|
||||||
_ Chattable = StopMessageLiveLocationConfig{}
|
_ Chattable = StopMessageLiveLocationConfig{}
|
||||||
|
_ Chattable = StopPollConfig{}
|
||||||
_ Chattable = UnbanChatMemberConfig{}
|
_ Chattable = UnbanChatMemberConfig{}
|
||||||
_ Chattable = UnpinChatMessageConfig{}
|
_ Chattable = UnpinChatMessageConfig{}
|
||||||
_ Chattable = UpdateConfig{}
|
_ Chattable = UpdateConfig{}
|
||||||
|
|
Loading…
Reference in New Issue