telegram-bot-api/configs.go

1528 lines
37 KiB
Go
Raw Normal View History

2015-11-20 11:42:26 +01:00
package tgbotapi
import (
"io"
"net/url"
)
// Telegram constants
const (
// APIEndpoint is the endpoint for all API methods,
// with formatting for Sprintf.
2015-11-20 11:42:26 +01:00
APIEndpoint = "https://api.telegram.org/bot%s/%s"
// FileEndpoint is the endpoint for downloading a file from Telegram.
2015-11-20 11:42:26 +01:00
FileEndpoint = "https://api.telegram.org/file/bot%s/%s"
)
// Constant values for ChatActions
const (
ChatTyping = "typing"
ChatUploadPhoto = "upload_photo"
ChatRecordVideo = "record_video"
ChatUploadVideo = "upload_video"
ChatRecordAudio = "record_audio"
ChatUploadAudio = "upload_audio"
ChatUploadDocument = "upload_document"
ChatFindLocation = "find_location"
)
// API errors
const (
// ErrAPIForbidden happens when a token is bad
ErrAPIForbidden = "forbidden"
2015-11-20 11:42:26 +01:00
)
// Constant values for ParseMode in MessageConfig
const (
ModeMarkdown = "Markdown"
ModeHTML = "HTML"
2015-11-20 11:42:26 +01:00
)
// Library errors
const (
// ErrBadFileType happens when you pass an unknown type
ErrBadFileType = "bad file type"
2016-04-14 00:06:18 +02:00
ErrBadURL = "bad or empty url"
)
// Chattable is any config type that can be sent.
2015-11-20 15:08:53 +01:00
type Chattable interface {
params() (Params, error)
method() string
2015-11-20 15:08:53 +01:00
}
// Fileable is any config type that can be sent that includes a file.
2015-11-20 15:08:53 +01:00
type Fileable interface {
Chattable
name() string
getFile() interface{}
useExistingFile() bool
2015-11-20 15:08:53 +01:00
}
// BaseChat is base type for all chat config types.
2015-11-20 15:08:53 +01:00
type BaseChat struct {
2016-03-24 19:22:40 +01:00
ChatID int64 // required
ChannelUsername string
ReplyToMessageID int
ReplyMarkup interface{}
DisableNotification bool
2015-11-20 11:42:26 +01:00
}
func (chat *BaseChat) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2015-11-20 16:30:50 +01:00
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", chat.ChatID, chat.ChannelUsername)
params.AddNonZero("reply_to_message_id", chat.ReplyToMessageID)
params.AddBool("disable_notification", chat.DisableNotification)
2015-11-20 16:30:50 +01:00
2018-10-09 01:37:18 +02:00
err := params.AddInterface("reply_markup", chat.ReplyMarkup)
2015-11-20 16:30:50 +01:00
2018-10-09 01:37:18 +02:00
return params, err
2015-11-20 12:06:51 +01:00
}
// BaseFile is a base type for all file config types.
2015-11-20 15:08:53 +01:00
type BaseFile struct {
BaseChat
File interface{}
FileID string
UseExisting bool
MimeType string
FileSize int
2015-11-20 15:08:53 +01:00
}
func (file BaseFile) params() (Params, error) {
params, err := file.BaseChat.params()
params.AddNonEmpty("mime_type", file.MimeType)
params.AddNonZero("file_size", file.FileSize)
return params, err
2015-11-20 15:08:53 +01:00
}
func (file BaseFile) getFile() interface{} {
2016-01-04 05:48:52 +01:00
return file.File
2015-11-20 15:08:53 +01:00
}
func (file BaseFile) useExistingFile() bool {
2015-11-20 15:31:01 +01:00
return file.UseExisting
}
2016-04-12 19:53:19 +02:00
// BaseEdit is base type of all chat edits.
type BaseEdit struct {
ChatID int64
ChannelUsername string
MessageID int
InlineMessageID string
ReplyMarkup *InlineKeyboardMarkup
}
func (edit BaseEdit) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2016-04-12 19:53:19 +02:00
if edit.InlineMessageID != "" {
2018-10-09 01:37:18 +02:00
params["inline_message_id"] = edit.InlineMessageID
2016-04-12 19:53:19 +02:00
} else {
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", edit.ChatID, edit.ChannelUsername)
params.AddNonZero("message_id", edit.MessageID)
2016-04-12 19:53:19 +02:00
}
2018-10-09 01:37:18 +02:00
err := params.AddInterface("reply_markup", edit.ReplyMarkup)
2016-04-12 19:53:19 +02:00
2018-10-09 01:37:18 +02:00
return params, err
2016-04-12 19:53:19 +02:00
}
2015-11-20 11:42:26 +01:00
// MessageConfig contains information about a SendMessage request.
type MessageConfig struct {
2015-11-20 15:08:53 +01:00
BaseChat
2015-11-20 11:42:26 +01:00
Text string
ParseMode string
DisableWebPagePreview bool
}
func (config MessageConfig) params() (Params, error) {
params, err := config.BaseChat.params()
if err != nil {
return params, err
}
params.AddNonEmpty("text", config.Text)
params.AddBool("disable_web_page_preview", config.DisableWebPagePreview)
params.AddNonEmpty("parse_mode", config.ParseMode)
2015-11-20 12:06:51 +01:00
return params, nil
2015-11-20 12:06:51 +01:00
}
func (config MessageConfig) method() string {
return "sendMessage"
2015-11-20 15:55:32 +01:00
}
2015-11-20 11:42:26 +01:00
// ForwardConfig contains information about a ForwardMessage request.
type ForwardConfig struct {
2015-11-20 15:08:53 +01:00
BaseChat
2016-03-24 19:22:40 +01:00
FromChatID int64 // required
2015-11-20 11:42:26 +01:00
FromChannelUsername string
MessageID int // required
2015-11-20 11:42:26 +01:00
}
func (config ForwardConfig) params() (Params, error) {
params, err := config.BaseChat.params()
if err != nil {
return params, err
}
params.AddNonZero64("from_chat_id", config.FromChatID)
params.AddNonZero("message_id", config.MessageID)
return params, nil
2015-11-20 12:06:51 +01:00
}
func (config ForwardConfig) method() string {
2015-11-20 15:55:32 +01:00
return "forwardMessage"
}
2015-11-20 11:42:26 +01:00
// PhotoConfig contains information about a SendPhoto request.
type PhotoConfig struct {
2015-11-20 15:08:53 +01:00
BaseFile
2018-05-23 21:12:20 +02:00
Caption string
ParseMode string
2015-11-20 11:42:26 +01:00
}
func (config PhotoConfig) params() (Params, error) {
params, err := config.BaseFile.params()
2015-11-20 12:06:51 +01:00
params.AddNonEmpty(config.name(), config.FileID)
params.AddNonEmpty("caption", config.Caption)
params.AddNonEmpty("parse_mode", config.ParseMode)
return params, err
2015-11-20 12:06:51 +01:00
}
func (config PhotoConfig) name() string {
2015-11-20 15:31:01 +01:00
return "photo"
}
func (config PhotoConfig) method() string {
return "sendPhoto"
2015-11-20 15:55:32 +01:00
}
2015-11-20 11:42:26 +01:00
// AudioConfig contains information about a SendAudio request.
type AudioConfig struct {
2015-11-20 15:08:53 +01:00
BaseFile
Caption string
ParseMode string
2015-11-20 16:30:50 +01:00
Duration int
Performer string
Title string
2015-11-20 11:42:26 +01:00
}
func (config AudioConfig) params() (Params, error) {
params, err := config.BaseChat.params()
if err != nil {
return params, err
}
2015-11-20 12:06:51 +01:00
params.AddNonEmpty(config.name(), config.FileID)
params.AddNonZero("duration", config.Duration)
params.AddNonEmpty("performer", config.Performer)
params.AddNonEmpty("title", config.Title)
params.AddNonEmpty("caption", config.Caption)
params.AddNonEmpty("parse_mode", config.ParseMode)
2015-11-20 12:06:51 +01:00
return params, nil
2015-11-20 12:06:51 +01:00
}
func (config AudioConfig) name() string {
2015-11-20 15:31:01 +01:00
return "audio"
}
func (config AudioConfig) method() string {
return "sendAudio"
2015-11-20 15:55:32 +01:00
}
2015-11-20 11:42:26 +01:00
// DocumentConfig contains information about a SendDocument request.
type DocumentConfig struct {
2015-11-20 15:08:53 +01:00
BaseFile
Caption string
ParseMode string
2015-11-20 11:42:26 +01:00
}
func (config DocumentConfig) params() (Params, error) {
params, err := config.BaseFile.params()
2017-02-11 15:13:49 +01:00
params.AddNonEmpty(config.name(), config.FileID)
params.AddNonEmpty("caption", config.Caption)
params.AddNonEmpty("parse_mode", config.ParseMode)
return params, err
2015-11-20 15:08:53 +01:00
}
func (config DocumentConfig) name() string {
2015-11-20 15:31:01 +01:00
return "document"
}
func (config DocumentConfig) method() string {
2015-11-20 15:55:32 +01:00
return "sendDocument"
}
2015-11-20 11:42:26 +01:00
// StickerConfig contains information about a SendSticker request.
type StickerConfig struct {
2015-11-20 15:08:53 +01:00
BaseFile
2015-11-20 11:42:26 +01:00
}
func (config StickerConfig) params() (Params, error) {
params, err := config.BaseChat.params()
2015-11-20 12:06:51 +01:00
params.AddNonEmpty(config.name(), config.FileID)
2015-11-20 15:08:53 +01:00
return params, err
2015-11-20 15:08:53 +01:00
}
func (config StickerConfig) name() string {
2015-11-20 15:31:01 +01:00
return "sticker"
}
func (config StickerConfig) method() string {
2015-11-20 15:55:32 +01:00
return "sendSticker"
}
2015-11-20 11:42:26 +01:00
// VideoConfig contains information about a SendVideo request.
type VideoConfig struct {
2015-11-20 15:08:53 +01:00
BaseFile
Duration int
Caption string
ParseMode string
SupportsStreaming bool
2015-11-20 11:42:26 +01:00
}
func (config VideoConfig) params() (Params, error) {
params, err := config.BaseChat.params()
2015-11-20 12:06:51 +01:00
params.AddNonEmpty(config.name(), config.FileID)
params.AddNonZero("duration", config.Duration)
params.AddNonEmpty("caption", config.Caption)
params.AddNonEmpty("parse_mode", config.ParseMode)
params.AddBool("supports_streaming", config.SupportsStreaming)
2015-11-20 12:06:51 +01:00
return params, err
2015-11-20 15:08:53 +01:00
}
func (config VideoConfig) name() string {
2015-11-20 16:30:50 +01:00
return "video"
2015-11-20 15:31:01 +01:00
}
func (config VideoConfig) method() string {
2015-11-20 15:55:32 +01:00
return "sendVideo"
}
2018-09-06 14:44:42 +02:00
// AnimationConfig contains information about a SendAnimation request.
type AnimationConfig struct {
BaseFile
Duration int
Caption string
ParseMode string
}
func (config AnimationConfig) params() (Params, error) {
params, err := config.BaseChat.params()
2018-09-06 14:44:42 +02:00
params.AddNonEmpty(config.name(), config.FileID)
params.AddNonZero("duration", config.Duration)
params.AddNonEmpty("caption", config.Caption)
params.AddNonEmpty("parse_mode", config.ParseMode)
2018-09-06 14:44:42 +02:00
return params, err
2018-09-06 14:44:42 +02:00
}
func (config AnimationConfig) name() string {
return "animation"
}
func (config AnimationConfig) method() string {
return "sendAnimation"
}
2017-05-22 00:04:12 +02:00
// VideoNoteConfig contains information about a SendVideoNote request.
type VideoNoteConfig struct {
BaseFile
Duration int
Length int
}
func (config VideoNoteConfig) params() (Params, error) {
params, err := config.BaseChat.params()
2017-05-22 00:04:12 +02:00
params.AddNonEmpty(config.name(), config.FileID)
params.AddNonZero("duration", config.Duration)
params.AddNonZero("length", config.Length)
2017-05-22 00:04:12 +02:00
return params, err
2017-05-22 00:04:12 +02:00
}
func (config VideoNoteConfig) name() string {
return "video_note"
}
func (config VideoNoteConfig) method() string {
return "sendVideoNote"
}
2015-11-20 11:42:26 +01:00
// VoiceConfig contains information about a SendVoice request.
type VoiceConfig struct {
2015-11-20 15:08:53 +01:00
BaseFile
Caption string
ParseMode string
Duration int
2015-11-20 11:42:26 +01:00
}
func (config VoiceConfig) params() (Params, error) {
params, err := config.BaseChat.params()
2015-11-20 15:08:53 +01:00
params.AddNonEmpty(config.name(), config.FileID)
params.AddNonZero("duration", config.Duration)
params.AddNonEmpty("caption", config.Caption)
params.AddNonEmpty("parse_mode", config.ParseMode)
2015-11-20 15:08:53 +01:00
return params, err
2015-11-20 15:08:53 +01:00
}
func (config VoiceConfig) name() string {
2015-11-20 15:31:01 +01:00
return "voice"
}
func (config VoiceConfig) method() string {
2015-11-20 15:55:32 +01:00
return "sendVoice"
}
2015-11-20 11:42:26 +01:00
// LocationConfig contains information about a SendLocation request.
type LocationConfig struct {
2015-11-20 15:08:53 +01:00
BaseChat
2017-10-13 16:00:04 +02:00
Latitude float64 // required
Longitude float64 // required
LivePeriod int // optional
2015-11-20 11:42:26 +01:00
}
func (config LocationConfig) params() (Params, error) {
params, err := config.BaseChat.params()
2015-11-20 12:06:51 +01:00
params.AddNonZeroFloat("latitude", config.Latitude)
params.AddNonZeroFloat("longitude", config.Longitude)
params.AddNonZero("live_period", config.LivePeriod)
2015-11-20 12:19:37 +01:00
return params, err
2015-11-20 12:06:51 +01:00
}
func (config LocationConfig) method() string {
2015-11-20 15:55:32 +01:00
return "sendLocation"
}
2017-12-30 00:06:33 +01:00
// EditMessageLiveLocationConfig allows you to update a live location.
type EditMessageLiveLocationConfig struct {
BaseEdit
Latitude float64 // required
Longitude float64 // required
}
func (config EditMessageLiveLocationConfig) params() (Params, error) {
params, err := config.BaseEdit.params()
params.AddNonZeroFloat("latitude", config.Latitude)
params.AddNonZeroFloat("longitude", config.Longitude)
return params, err
}
func (config EditMessageLiveLocationConfig) method() string {
return "editMessageLiveLocation"
}
2017-12-30 00:06:33 +01:00
// StopMessageLiveLocationConfig stops updating a live location.
type StopMessageLiveLocationConfig struct {
BaseEdit
}
func (config StopMessageLiveLocationConfig) params() (Params, error) {
return config.BaseEdit.params()
}
func (config StopMessageLiveLocationConfig) method() string {
return "stopMessageLiveLocation"
}
2016-04-12 15:28:46 +02:00
// VenueConfig contains information about a SendVenue request.
type VenueConfig struct {
BaseChat
Latitude float64 // required
Longitude float64 // required
Title string // required
Address string // required
FoursquareID string
}
func (config VenueConfig) params() (Params, error) {
params, err := config.BaseChat.params()
2016-04-12 15:28:46 +02:00
params.AddNonZeroFloat("latitude", config.Latitude)
params.AddNonZeroFloat("longitude", config.Longitude)
params["title"] = config.Title
params["address"] = config.Address
params.AddNonEmpty("foursquare_id", config.FoursquareID)
2016-04-12 15:28:46 +02:00
return params, err
2016-04-12 15:28:46 +02:00
}
func (config VenueConfig) method() string {
return "sendVenue"
}
2016-04-12 20:02:08 +02:00
// ContactConfig allows you to send a contact.
type ContactConfig struct {
BaseChat
PhoneNumber string
FirstName string
LastName string
VCard string
2016-04-12 20:02:08 +02:00
}
func (config ContactConfig) params() (Params, error) {
params, err := config.BaseChat.params()
params["phone_number"] = config.PhoneNumber
params["first_name"] = config.FirstName
2016-04-12 20:02:08 +02:00
params.AddNonEmpty("last_name", config.LastName)
params.AddNonEmpty("vcard", config.VCard)
2016-04-12 20:02:08 +02:00
return params, err
2016-04-12 20:02:08 +02:00
}
func (config ContactConfig) method() string {
return "sendContact"
}
// GameConfig allows you to send a game.
type GameConfig struct {
BaseChat
GameShortName string
}
func (config GameConfig) params() (Params, error) {
params, err := config.BaseChat.params()
params["game_short_name"] = config.GameShortName
return params, err
}
func (config GameConfig) method() string {
return "sendGame"
}
// SetGameScoreConfig allows you to update the game score in a chat.
type SetGameScoreConfig struct {
UserID int
Score int
Force bool
DisableEditMessage bool
ChatID int64
ChannelUsername string
MessageID int
InlineMessageID string
}
func (config SetGameScoreConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddNonZero("user_id", config.UserID)
params.AddNonZero("scrore", config.Score)
params.AddBool("disable_edit_message", config.DisableEditMessage)
if config.InlineMessageID != "" {
2018-10-09 01:37:18 +02:00
params["inline_message_id"] = config.InlineMessageID
} else {
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.ChannelUsername)
params.AddNonZero("message_id", config.MessageID)
}
2018-10-09 01:37:18 +02:00
return params, nil
}
func (config SetGameScoreConfig) method() string {
return "setGameScore"
}
// GetGameHighScoresConfig allows you to fetch the high scores for a game.
type GetGameHighScoresConfig struct {
UserID int
ChatID int
ChannelUsername string
MessageID int
InlineMessageID string
}
func (config GetGameHighScoresConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddNonZero("user_id", config.UserID)
if config.InlineMessageID != "" {
2018-10-09 01:37:18 +02:00
params["inline_message_id"] = config.InlineMessageID
} else {
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.ChannelUsername)
params.AddNonZero("message_id", config.MessageID)
}
2018-10-09 01:37:18 +02:00
return params, nil
}
func (config GetGameHighScoresConfig) method() string {
return "getGameHighScores"
}
2015-11-20 11:42:26 +01:00
// ChatActionConfig contains information about a SendChatAction request.
type ChatActionConfig struct {
2015-11-20 15:08:53 +01:00
BaseChat
Action string // required
2015-11-20 11:42:26 +01:00
}
func (config ChatActionConfig) params() (Params, error) {
params, err := config.BaseChat.params()
params["action"] = config.Action
return params, err
2015-11-20 12:06:51 +01:00
}
func (config ChatActionConfig) method() string {
2015-11-21 12:44:26 +01:00
return "sendChatAction"
}
2016-04-12 19:53:19 +02:00
// EditMessageTextConfig allows you to modify the text in a message.
type EditMessageTextConfig struct {
BaseEdit
Text string
ParseMode string
DisableWebPagePreview bool
}
func (config EditMessageTextConfig) params() (Params, error) {
params, err := config.BaseEdit.params()
2016-04-12 19:53:19 +02:00
params["text"] = config.Text
params.AddNonEmpty("parse_mode", config.ParseMode)
params.AddBool("disable_web_page_preview", config.DisableWebPagePreview)
2016-04-12 19:53:19 +02:00
return params, err
2016-04-12 19:53:19 +02:00
}
func (config EditMessageTextConfig) method() string {
return "editMessageText"
}
// EditMessageCaptionConfig allows you to modify the caption of a message.
type EditMessageCaptionConfig struct {
BaseEdit
Caption string
ParseMode string
2016-04-12 19:53:19 +02:00
}
func (config EditMessageCaptionConfig) params() (Params, error) {
params, err := config.BaseEdit.params()
2016-04-12 19:53:19 +02:00
params["caption"] = config.Caption
params.AddNonEmpty("parse_mode", config.ParseMode)
2016-04-12 19:53:19 +02:00
return params, err
2016-04-12 19:53:19 +02:00
}
func (config EditMessageCaptionConfig) method() string {
return "editMessageCaption"
}
// EditMessageMediaConfig contains information about editing a message's media.
type EditMessageMediaConfig struct {
BaseEdit
Media interface{}
}
func (EditMessageMediaConfig) method() string {
return "editMessageMedia"
}
func (config EditMessageMediaConfig) params() (Params, error) {
params, err := config.BaseEdit.params()
params.AddInterface("media", config.Media)
return params, err
}
// EditMessageReplyMarkupConfig allows you to modify the reply markup
2016-04-12 19:53:19 +02:00
// of a message.
type EditMessageReplyMarkupConfig struct {
2016-04-12 19:53:19 +02:00
BaseEdit
}
func (config EditMessageReplyMarkupConfig) params() (Params, error) {
return config.BaseEdit.params()
2016-04-12 19:53:19 +02:00
}
func (config EditMessageReplyMarkupConfig) method() string {
2016-04-12 19:53:19 +02:00
return "editMessageReplyMarkup"
}
// UserProfilePhotosConfig contains information about a
// GetUserProfilePhotos request.
2015-11-20 11:42:26 +01:00
type UserProfilePhotosConfig struct {
UserID int
Offset int
Limit int
}
func (UserProfilePhotosConfig) method() string {
return "getUserProfilePhotos"
}
func (config UserProfilePhotosConfig) params() (Params, error) {
params := make(Params)
params.AddNonZero("user_id", config.UserID)
params.AddNonZero("offset", config.Offset)
params.AddNonZero("limit", config.Limit)
return params, nil
}
// FileConfig has information about a file hosted on Telegram.
2015-11-20 11:42:26 +01:00
type FileConfig struct {
FileID string
}
func (FileConfig) method() string {
return "getFile"
}
func (config FileConfig) params() (Params, error) {
params := make(Params)
params["file_id"] = config.FileID
return params, nil
}
2015-11-20 11:42:26 +01:00
// UpdateConfig contains information about a GetUpdates request.
type UpdateConfig struct {
Offset int
Limit int
Timeout int
}
func (UpdateConfig) method() string {
return "getUpdates"
}
func (config UpdateConfig) params() (Params, error) {
params := make(Params)
params.AddNonZero("offset", config.Offset)
params.AddNonZero("limit", config.Limit)
params.AddNonZero("timeout", config.Timeout)
return params, nil
}
2015-11-20 11:42:26 +01:00
// WebhookConfig contains information about a SetWebhook request.
type WebhookConfig struct {
URL *url.URL
Certificate interface{}
MaxConnections int
AllowedUpdates []string
2015-11-20 11:42:26 +01:00
}
func (config WebhookConfig) method() string {
return "setWebhook"
}
func (config WebhookConfig) params() (Params, error) {
params := make(Params)
if config.URL != nil {
params["url"] = config.URL.String()
}
params.AddNonZero("max_connections", config.MaxConnections)
params.AddInterface("allowed_updates", config.AllowedUpdates)
return params, nil
}
func (config WebhookConfig) name() string {
return "certificate"
}
func (config WebhookConfig) getFile() interface{} {
return config.Certificate
}
func (config WebhookConfig) useExistingFile() bool {
return config.URL != nil
}
// RemoveWebhookConfig is a helper to remove a webhook.
type RemoveWebhookConfig struct {
}
func (config RemoveWebhookConfig) method() string {
return "setWebhook"
}
func (config RemoveWebhookConfig) params() (Params, error) {
return nil, nil
}
// FileBytes contains information about a set of bytes to upload
// as a File.
2015-11-20 11:42:26 +01:00
type FileBytes struct {
Name string
Bytes []byte
}
// FileReader contains information about a reader to upload as a File.
// If Size is -1, it will read the entire Reader into memory to
// calculate a Size.
2015-11-20 11:42:26 +01:00
type FileReader struct {
Name string
Reader io.Reader
Size int64
}
// InlineConfig contains information on making an InlineQuery response.
type InlineConfig struct {
2016-04-12 15:28:46 +02:00
InlineQueryID string `json:"inline_query_id"`
Results []interface{} `json:"results"`
CacheTime int `json:"cache_time"`
IsPersonal bool `json:"is_personal"`
NextOffset string `json:"next_offset"`
SwitchPMText string `json:"switch_pm_text"`
SwitchPMParameter string `json:"switch_pm_parameter"`
}
func (config InlineConfig) method() string {
return "answerInlineQuery"
}
func (config InlineConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params["inline_query_id"] = config.InlineQueryID
params.AddNonZero("cache_time", config.CacheTime)
params.AddBool("is_personal", config.IsPersonal)
params.AddNonEmpty("next_offset", config.NextOffset)
params.AddNonEmpty("switch_pm_text", config.SwitchPMText)
params.AddNonEmpty("switch_pm_parameter", config.SwitchPMParameter)
2018-10-09 01:37:18 +02:00
if err := params.AddInterface("results", config.Results); err != nil {
return params, err
}
2018-10-09 01:37:18 +02:00
return params, nil
}
2016-04-12 15:28:46 +02:00
// CallbackConfig contains information on making a CallbackQuery response.
type CallbackConfig struct {
CallbackQueryID string `json:"callback_query_id"`
Text string `json:"text"`
ShowAlert bool `json:"show_alert"`
URL string `json:"url"`
CacheTime int `json:"cache_time"`
}
func (config CallbackConfig) method() string {
return "answerCallbackQuery"
}
func (config CallbackConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params["callback_query_id"] = config.CallbackQueryID
params.AddNonEmpty("text", config.Text)
params.AddBool("show_alert", config.ShowAlert)
params.AddNonEmpty("url", config.URL)
params.AddNonZero("cache_time", config.CacheTime)
2018-10-09 01:37:18 +02:00
return params, nil
}
2016-04-12 15:59:47 +02:00
// ChatMemberConfig contains information about a user in a chat for use
// with administrative functions such as kicking or unbanning a user.
type ChatMemberConfig struct {
ChatID int64
SuperGroupUsername string
ChannelUsername string
UserID int
}
2016-05-22 17:16:28 +02:00
// UnbanChatMemberConfig allows you to unban a user.
type UnbanChatMemberConfig struct {
ChatMemberConfig
}
func (config UnbanChatMemberConfig) method() string {
return "unbanChatMember"
}
func (config UnbanChatMemberConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername, config.ChannelUsername)
params.AddNonZero("user_id", config.UserID)
2018-10-09 01:37:18 +02:00
return params, nil
}
2017-07-01 06:34:09 +02:00
// KickChatMemberConfig contains extra fields to kick user
type KickChatMemberConfig struct {
ChatMemberConfig
UntilDate int64
}
func (config KickChatMemberConfig) method() string {
return "kickChatMember"
}
func (config KickChatMemberConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername)
params.AddNonZero("user_id", config.UserID)
params.AddNonZero64("until_date", config.UntilDate)
2018-10-09 01:37:18 +02:00
return params, nil
}
2017-07-01 06:34:09 +02:00
// RestrictChatMemberConfig contains fields to restrict members of chat
type RestrictChatMemberConfig struct {
ChatMemberConfig
UntilDate int64
CanSendMessages *bool
CanSendMediaMessages *bool
CanSendOtherMessages *bool
CanAddWebPagePreviews *bool
}
func (config RestrictChatMemberConfig) method() string {
return "restrictChatMember"
}
func (config RestrictChatMemberConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername, config.ChannelUsername)
params.AddNonZero("user_id", config.UserID)
2018-10-09 01:37:18 +02:00
params.AddNonNilBool("can_send_messages", config.CanSendMessages)
params.AddNonNilBool("can_send_media_messages", config.CanSendMediaMessages)
params.AddNonNilBool("can_send_other_messages", config.CanSendOtherMessages)
params.AddNonNilBool("can_add_web_page_previews", config.CanAddWebPagePreviews)
params.AddNonZero64("until_date", config.UntilDate)
2018-10-09 01:37:18 +02:00
return params, nil
}
2017-07-01 06:34:09 +02:00
// PromoteChatMemberConfig contains fields to promote members of chat
type PromoteChatMemberConfig struct {
ChatMemberConfig
CanChangeInfo *bool
CanPostMessages *bool
CanEditMessages *bool
CanDeleteMessages *bool
CanInviteUsers *bool
CanRestrictMembers *bool
CanPinMessages *bool
CanPromoteMembers *bool
}
func (config PromoteChatMemberConfig) method() string {
return "promoteChatMember"
}
func (config PromoteChatMemberConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername, config.ChannelUsername)
params.AddNonZero("user_id", config.UserID)
2018-10-09 01:37:18 +02:00
params.AddNonNilBool("can_change_info", config.CanChangeInfo)
params.AddNonNilBool("can_post_messages", config.CanPostMessages)
params.AddNonNilBool("can_edit_messages", config.CanEditMessages)
params.AddNonNilBool("can_delete_messages", config.CanDeleteMessages)
params.AddNonNilBool("can_invite_users", config.CanInviteUsers)
params.AddNonNilBool("can_restrict_members", config.CanRestrictMembers)
params.AddNonNilBool("can_pin_messages", config.CanPinMessages)
params.AddNonNilBool("can_promote_members", config.CanPromoteMembers)
2018-10-09 01:37:18 +02:00
return params, nil
}
2016-05-22 17:16:28 +02:00
// ChatConfig contains information about getting information on a chat.
type ChatConfig struct {
ChatID int64
SuperGroupUsername string
}
func (config ChatConfig) params() (Params, error) {
params := make(Params)
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername)
return params, nil
}
// ChatInfoConfig contains information about getting chat information.
type ChatInfoConfig struct {
ChatConfig
}
func (ChatInfoConfig) method() string {
return "getChat"
}
// ChatMemberCountConfig contains information about getting the number of users in a chat.
type ChatMemberCountConfig struct {
ChatConfig
}
func (ChatMemberCountConfig) method() string {
return "getChatMembersCount"
}
// ChatAdministratorsConfig contains information about getting chat administrators.
type ChatAdministratorsConfig struct {
ChatConfig
}
func (ChatAdministratorsConfig) method() string {
return "getChatAdministrators"
}
// ChatInviteLinkConfig contains information about getting a chat link.
//
// Note that generating a new link will revoke any previous links.
type ChatInviteLinkConfig struct {
ChatConfig
}
func (ChatInviteLinkConfig) method() string {
return "exportChatInviteLink"
}
func (config ChatInviteLinkConfig) params() (Params, error) {
params := make(Params)
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername)
return params, nil
}
// LeaveChatConfig allows you to leave a chat.
type LeaveChatConfig struct {
ChatID int64
ChannelUsername string
}
func (config LeaveChatConfig) method() string {
return "leaveChat"
}
func (config LeaveChatConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.ChannelUsername)
2018-10-09 01:37:18 +02:00
return params, nil
}
// ChatConfigWithUser contains information about a chat and a user.
2016-05-22 17:16:28 +02:00
type ChatConfigWithUser struct {
ChatID int64
SuperGroupUsername string
UserID int
}
2017-06-02 22:18:42 +02:00
func (config ChatConfigWithUser) params() (Params, error) {
params := make(Params)
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername)
params.AddNonZero("user_id", config.UserID)
return params, nil
}
// GetChatMemberConfig is information about getting a specific member in a chat.
type GetChatMemberConfig struct {
ChatConfigWithUser
}
func (GetChatMemberConfig) method() string {
return "getChatMember"
}
2017-06-03 08:59:40 +02:00
// InvoiceConfig contains information for sendInvoice request.
2017-06-02 22:18:42 +02:00
type InvoiceConfig struct {
BaseChat
2018-10-09 06:32:34 +02:00
Title string // required
Description string // required
Payload string // required
ProviderToken string // required
StartParameter string // required
Currency string // required
Prices []LabeledPrice // required
ProviderData string
PhotoURL string
PhotoSize int
PhotoWidth int
PhotoHeight int
NeedName bool
NeedPhoneNumber bool
NeedEmail bool
NeedShippingAddress bool
SendPhoneNumberToProvider bool
SendEmailToProvider bool
IsFlexible bool
2017-06-02 22:18:42 +02:00
}
func (config InvoiceConfig) params() (Params, error) {
params, err := config.BaseChat.params()
2017-06-02 22:18:42 +02:00
if err != nil {
return params, err
2017-06-02 22:18:42 +02:00
}
params["title"] = config.Title
params["description"] = config.Description
params["payload"] = config.Payload
params["provider_token"] = config.ProviderToken
params["start_parameter"] = config.StartParameter
params["currency"] = config.Currency
if err = params.AddInterface("prices", config.Prices); err != nil {
return params, err
2017-06-02 22:18:42 +02:00
}
params.AddNonEmpty("provider_data", config.ProviderData)
params.AddNonEmpty("photo_url", config.PhotoURL)
params.AddNonZero("photo_size", config.PhotoSize)
params.AddNonZero("photo_width", config.PhotoWidth)
params.AddNonZero("photo_height", config.PhotoHeight)
params.AddBool("need_name", config.NeedName)
params.AddBool("need_phone_number", config.NeedPhoneNumber)
params.AddBool("need_email", config.NeedEmail)
params.AddBool("need_shipping_address", config.NeedShippingAddress)
params.AddBool("is_flexible", config.IsFlexible)
params.AddBool("send_phone_number_to_provider", config.SendPhoneNumberToProvider)
params.AddBool("send_email_to_provider", config.SendEmailToProvider)
return params, nil
2017-06-02 22:18:42 +02:00
}
func (config InvoiceConfig) method() string {
return "sendInvoice"
}
2017-06-03 08:59:40 +02:00
// ShippingConfig contains information for answerShippingQuery request.
2017-06-02 22:18:42 +02:00
type ShippingConfig struct {
ShippingQueryID string // required
2017-06-03 08:59:40 +02:00
OK bool // required
2018-10-09 06:32:34 +02:00
ShippingOptions []ShippingOption
2017-06-02 22:18:42 +02:00
ErrorMessage string
}
2017-06-03 08:59:40 +02:00
// PreCheckoutConfig conatins information for answerPreCheckoutQuery request.
2017-06-02 22:18:42 +02:00
type PreCheckoutConfig struct {
PreCheckoutQueryID string // required
2017-06-03 08:59:40 +02:00
OK bool // required
2017-06-02 22:18:42 +02:00
ErrorMessage string
}
// DeleteMessageConfig contains information of a message in a chat to delete.
type DeleteMessageConfig struct {
ChatID int64
MessageID int
}
func (config DeleteMessageConfig) method() string {
return "deleteMessage"
}
func (config DeleteMessageConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddNonZero64("chat_id", config.ChatID)
params.AddNonZero("message_id", config.MessageID)
2018-10-09 01:37:18 +02:00
return params, nil
}
// PinChatMessageConfig contains information of a message in a chat to pin.
type PinChatMessageConfig struct {
ChatID int64
2017-12-29 20:22:53 +01:00
ChannelUsername string
MessageID int
DisableNotification bool
}
func (config PinChatMessageConfig) method() string {
return "pinChatMessage"
}
func (config PinChatMessageConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.ChannelUsername)
params.AddNonZero("message_id", config.MessageID)
params.AddBool("disable_notification", config.DisableNotification)
2018-10-09 01:37:18 +02:00
return params, nil
}
// UnpinChatMessageConfig contains information of chat to unpin.
type UnpinChatMessageConfig struct {
2017-12-29 20:22:53 +01:00
ChatID int64
ChannelUsername string
}
func (config UnpinChatMessageConfig) method() string {
return "unpinChatMessage"
}
func (config UnpinChatMessageConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.ChannelUsername)
2018-10-09 01:37:18 +02:00
return params, nil
}
// SetChatPhotoConfig allows you to set a group, supergroup, or channel's photo.
type SetChatPhotoConfig struct {
2018-03-26 19:22:16 +02:00
BaseFile
}
func (config SetChatPhotoConfig) method() string {
return "setChatPhoto"
}
func (config SetChatPhotoConfig) name() string {
return "photo"
}
func (config SetChatPhotoConfig) getFile() interface{} {
2018-03-26 19:22:16 +02:00
return config.File
}
func (config SetChatPhotoConfig) useExistingFile() bool {
2018-03-26 19:22:16 +02:00
return config.UseExisting
}
// DeleteChatPhotoConfig allows you to delete a group, supergroup, or channel's photo.
type DeleteChatPhotoConfig struct {
ChatID int64
ChannelUsername string
}
func (config DeleteChatPhotoConfig) method() string {
return "deleteChatPhoto"
}
func (config DeleteChatPhotoConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.ChannelUsername)
2018-10-09 01:37:18 +02:00
return params, nil
}
// SetChatTitleConfig allows you to set the title of something other than a private chat.
type SetChatTitleConfig struct {
ChatID int64
ChannelUsername string
Title string
}
func (config SetChatTitleConfig) method() string {
return "setChatTitle"
}
func (config SetChatTitleConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.ChannelUsername)
params["title"] = config.Title
2018-10-09 01:37:18 +02:00
return params, nil
}
// SetChatDescriptionConfig allows you to set the description of a supergroup or channel.
type SetChatDescriptionConfig struct {
ChatID int64
ChannelUsername string
Description string
}
func (config SetChatDescriptionConfig) method() string {
return "setChatDescription"
}
func (config SetChatDescriptionConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.ChannelUsername)
params["description"] = config.Description
2018-10-09 01:37:18 +02:00
return params, nil
}
// GetStickerSetConfig allows you to get the stickers in a set.
type GetStickerSetConfig struct {
Name string
}
func (config GetStickerSetConfig) method() string {
return "getStickerSet"
}
func (config GetStickerSetConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params["name"] = config.Name
2018-10-09 01:37:18 +02:00
return params, nil
}
// UploadStickerConfig allows you to upload a sticker for use in a set later.
type UploadStickerConfig struct {
UserID int64
PNGSticker interface{}
}
func (config UploadStickerConfig) method() string {
return "uploadStickerFile"
}
func (config UploadStickerConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddNonZero64("user_id", config.UserID)
2018-10-09 01:37:18 +02:00
return params, nil
}
func (config UploadStickerConfig) name() string {
return "png_sticker"
}
func (config UploadStickerConfig) getFile() interface{} {
return config.PNGSticker
}
func (config UploadStickerConfig) useExistingFile() bool {
return false
}
// NewStickerSetConfig allows creating a new sticker set.
type NewStickerSetConfig struct {
UserID int64
Name string
Title string
PNGSticker interface{}
Emojis string
ContainsMasks bool
MaskPosition *MaskPosition
}
func (config NewStickerSetConfig) method() string {
return "createNewStickerSet"
}
func (config NewStickerSetConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddNonZero64("user_id", config.UserID)
params["name"] = config.Name
params["title"] = config.Title
if sticker, ok := config.PNGSticker.(string); ok {
2018-10-09 01:37:18 +02:00
params[config.name()] = sticker
}
2018-10-09 01:37:18 +02:00
params["emojis"] = config.Emojis
2018-10-09 01:37:18 +02:00
params.AddBool("contains_masks", config.ContainsMasks)
2018-10-09 01:37:18 +02:00
err := params.AddInterface("mask_position", config.MaskPosition)
2018-10-09 01:37:18 +02:00
return params, err
}
func (config NewStickerSetConfig) getFile() interface{} {
return config.PNGSticker
}
func (config NewStickerSetConfig) name() string {
return "png_sticker"
}
func (config NewStickerSetConfig) useExistingFile() bool {
_, ok := config.PNGSticker.(string)
return ok
}
// AddStickerConfig allows you to add a sticker to a set.
type AddStickerConfig struct {
UserID int64
Name string
PNGSticker interface{}
Emojis string
MaskPosition *MaskPosition
}
func (config AddStickerConfig) method() string {
return "addStickerToSet"
}
func (config AddStickerConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params.AddNonZero64("user_id", config.UserID)
params["name"] = config.Name
params["emojis"] = config.Emojis
if sticker, ok := config.PNGSticker.(string); ok {
2018-10-09 01:37:18 +02:00
params[config.name()] = sticker
}
2018-10-09 01:37:18 +02:00
err := params.AddInterface("mask_position", config.MaskPosition)
2018-10-09 01:37:18 +02:00
return params, err
}
func (config AddStickerConfig) name() string {
return "png_sticker"
}
func (config AddStickerConfig) getFile() interface{} {
return config.PNGSticker
}
func (config AddStickerConfig) useExistingFile() bool {
_, ok := config.PNGSticker.(string)
return ok
}
// SetStickerPositionConfig allows you to change the position of a sticker in a set.
type SetStickerPositionConfig struct {
Sticker string
Position int
}
func (config SetStickerPositionConfig) method() string {
return "setStickerPositionInSet"
}
func (config SetStickerPositionConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params["sticker"] = config.Sticker
params.AddNonZero("position", config.Position)
2018-10-09 01:37:18 +02:00
return params, nil
}
// DeleteStickerConfig allows you to delete a sticker from a set.
type DeleteStickerConfig struct {
Sticker string
}
func (config DeleteStickerConfig) method() string {
return "deleteStickerFromSet"
}
func (config DeleteStickerConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2018-10-09 01:37:18 +02:00
params["sticker"] = config.Sticker
2018-10-09 01:37:18 +02:00
return params, nil
}
2017-12-29 20:06:58 +01:00
// SetChatStickerSetConfig allows you to set the sticker set for a supergroup.
type SetChatStickerSetConfig struct {
ChatID int64
SuperGroupUsername string
StickerSetName string
}
func (config SetChatStickerSetConfig) method() string {
return "setChatStickerSet"
}
func (config SetChatStickerSetConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2017-12-29 20:06:58 +01:00
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername)
params["sticker_set_name"] = config.StickerSetName
2017-12-29 20:06:58 +01:00
2018-10-09 01:37:18 +02:00
return params, nil
2017-12-29 20:06:58 +01:00
}
// DeleteChatStickerSetConfig allows you to remove a supergroup's sticker set.
type DeleteChatStickerSetConfig struct {
ChatID int64
SuperGroupUsername string
}
func (config DeleteChatStickerSetConfig) method() string {
return "deleteChatStickerSet"
}
func (config DeleteChatStickerSetConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2017-12-29 20:06:58 +01:00
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.SuperGroupUsername)
2017-12-29 20:06:58 +01:00
2018-10-09 01:37:18 +02:00
return params, nil
2017-12-29 20:06:58 +01:00
}
2017-12-29 20:22:53 +01:00
// MediaGroupConfig allows you to send a group of media.
//
// Media consist of InputMedia items (InputMediaPhoto, InputMediaVideo).
type MediaGroupConfig struct {
ChatID int64
ChannelUsername string
Media []interface{}
DisableNotification bool
ReplyToMessageID int
}
func (config MediaGroupConfig) method() string {
return "sendMediaGroup"
}
func (config MediaGroupConfig) params() (Params, error) {
2018-10-09 01:37:18 +02:00
params := make(Params)
2017-12-29 20:22:53 +01:00
2018-10-09 01:37:18 +02:00
params.AddFirstValid("chat_id", config.ChatID, config.ChannelUsername)
if err := params.AddInterface("media", config.Media); err != nil {
return params, nil
2017-12-29 20:22:53 +01:00
}
2018-10-09 01:37:18 +02:00
params.AddBool("disable_notification", config.DisableNotification)
params.AddNonZero("reply_to_message_id", config.ReplyToMessageID)
2017-12-29 20:22:53 +01:00
2018-10-09 01:37:18 +02:00
return params, nil
2017-12-29 20:22:53 +01:00
}