Totally new, universal API
parent
d3f7ac7197
commit
da026b435e
162
bot.go
162
bot.go
|
@ -90,7 +90,7 @@ func (bot *BotAPI) MakeMessageRequest(endpoint string, params url.Values) (Messa
|
||||||
var message Message
|
var message Message
|
||||||
json.Unmarshal(resp.Result, &message)
|
json.Unmarshal(resp.Result, &message)
|
||||||
|
|
||||||
bot.DebugLog(endpoint, params, message)
|
bot.debugLog(endpoint, params, message)
|
||||||
|
|
||||||
return message, nil
|
return message, nil
|
||||||
}
|
}
|
||||||
|
@ -188,11 +188,16 @@ func (bot *BotAPI) GetMe() (User, error) {
|
||||||
return user, nil
|
return user, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bot *BotAPI) Send(c BaseChat) error {
|
func (bot *BotAPI) Send(c Chattable) (Message, error) {
|
||||||
return nil
|
switch c.(type) {
|
||||||
|
case Fileable:
|
||||||
|
return bot.sendFile(c.(Fileable))
|
||||||
|
default:
|
||||||
|
return bot.sendChattable(c)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bot *BotAPI) DebugLog(context string, v url.Values, message interface{}) {
|
func (bot *BotAPI) debugLog(context string, v url.Values, message interface{}) {
|
||||||
if bot.Debug {
|
if bot.Debug {
|
||||||
log.Printf("%s req : %+v\n", context, v)
|
log.Printf("%s req : %+v\n", context, v)
|
||||||
log.Printf("%s resp: %+v\n", context, message)
|
log.Printf("%s resp: %+v\n", context, message)
|
||||||
|
@ -237,25 +242,21 @@ func (bot *BotAPI) uploadAndSend(method string, config Fileable) (Message, error
|
||||||
return message, nil
|
return message, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bot *BotAPI) sendFile(method string, config Fileable) (Message, error) {
|
func (bot *BotAPI) sendFile(config Fileable) (Message, error) {
|
||||||
if config.UseExistingFile() {
|
if config.UseExistingFile() {
|
||||||
return bot.sendExisting(method, config)
|
return bot.sendExisting(config.Method(), config)
|
||||||
}
|
}
|
||||||
|
|
||||||
return bot.uploadAndSend(method, config)
|
return bot.uploadAndSend(config.Method(), config)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendMessage sends a Message to a chat.
|
func (bot *BotAPI) sendChattable(config Chattable) (Message, error) {
|
||||||
//
|
|
||||||
// Requires ChatID and Text.
|
|
||||||
// DisableWebPagePreview, ReplyToMessageID, and ReplyMarkup are optional.
|
|
||||||
func (bot *BotAPI) SendMessage(config MessageConfig) (Message, error) {
|
|
||||||
v, err := config.Values()
|
v, err := config.Values()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Message{}, err
|
return Message{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
message, err := bot.MakeMessageRequest("SendMessage", v)
|
message, err := bot.MakeMessageRequest(config.Method(), v)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Message{}, err
|
return Message{}, err
|
||||||
|
@ -264,120 +265,6 @@ func (bot *BotAPI) SendMessage(config MessageConfig) (Message, error) {
|
||||||
return message, nil
|
return message, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ForwardMessage forwards a message from one chat to another.
|
|
||||||
//
|
|
||||||
// Requires ChatID (destination), FromChatID (source), and MessageID.
|
|
||||||
func (bot *BotAPI) ForwardMessage(config ForwardConfig) (Message, error) {
|
|
||||||
v, err := config.Values()
|
|
||||||
if err != nil {
|
|
||||||
return Message{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
message, err := bot.MakeMessageRequest("forwardMessage", v)
|
|
||||||
if err != nil {
|
|
||||||
return Message{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return message, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SendLocation sends a location to a chat.
|
|
||||||
//
|
|
||||||
// Requires ChatID, Latitude, and Longitude.
|
|
||||||
// ReplyToMessageID and ReplyMarkup are optional.
|
|
||||||
func (bot *BotAPI) SendLocation(config LocationConfig) (Message, error) {
|
|
||||||
v, err := config.Values()
|
|
||||||
if err != nil {
|
|
||||||
return Message{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
message, err := bot.MakeMessageRequest("sendLocation", v)
|
|
||||||
if err != nil {
|
|
||||||
return Message{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return message, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// SendPhoto sends or uploads a photo to a chat.
|
|
||||||
//
|
|
||||||
// Requires ChatID and FileID OR File.
|
|
||||||
// Caption, ReplyToMessageID, and ReplyMarkup are optional.
|
|
||||||
// File should be either a string, FileBytes, or FileReader.
|
|
||||||
func (bot *BotAPI) SendPhoto(config PhotoConfig) (Message, error) {
|
|
||||||
return bot.sendFile("SendPhoto", config)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SendAudio sends or uploads an audio clip to a chat.
|
|
||||||
// If using a file, the file must be in the .mp3 format.
|
|
||||||
//
|
|
||||||
// When the fields title and performer are both empty and
|
|
||||||
// the mime-type of the file to be sent is not audio/mpeg,
|
|
||||||
// the file must be an .ogg file encoded with OPUS.
|
|
||||||
// You may use the tgutils.EncodeAudio func to assist you with this, if needed.
|
|
||||||
//
|
|
||||||
// Requires ChatID and FileID OR File.
|
|
||||||
// ReplyToMessageID and ReplyMarkup are optional.
|
|
||||||
// File should be either a string, FileBytes, or FileReader.
|
|
||||||
func (bot *BotAPI) SendAudio(config AudioConfig) (Message, error) {
|
|
||||||
return bot.sendFile("sendAudio", config)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SendDocument sends or uploads a document to a chat.
|
|
||||||
//
|
|
||||||
// Requires ChatID and FileID OR File.
|
|
||||||
// ReplyToMessageID and ReplyMarkup are optional.
|
|
||||||
// File should be either a string, FileBytes, or FileReader.
|
|
||||||
func (bot *BotAPI) SendDocument(config DocumentConfig) (Message, error) {
|
|
||||||
return bot.sendFile("sendDocument", config)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SendVoice sends or uploads a playable voice to a chat.
|
|
||||||
// If using a file, the file must be encoded as an .ogg with OPUS.
|
|
||||||
// You may use the tgutils.EncodeAudio func to assist you with this, if needed.
|
|
||||||
//
|
|
||||||
// Requires ChatID and FileID OR File.
|
|
||||||
// ReplyToMessageID and ReplyMarkup are optional.
|
|
||||||
// File should be either a string, FileBytes, or FileReader.
|
|
||||||
func (bot *BotAPI) SendVoice(config VoiceConfig) (Message, error) {
|
|
||||||
return bot.sendFile("sendVoice", config)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SendSticker sends or uploads a sticker to a chat.
|
|
||||||
//
|
|
||||||
// Requires ChatID and FileID OR File.
|
|
||||||
// ReplyToMessageID and ReplyMarkup are optional.
|
|
||||||
// File should be either a string, FileBytes, or FileReader.
|
|
||||||
func (bot *BotAPI) SendSticker(config StickerConfig) (Message, error) {
|
|
||||||
return bot.sendFile("sendSticker", config)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SendVideo sends or uploads a video to a chat.
|
|
||||||
//
|
|
||||||
// Requires ChatID and FileID OR File.
|
|
||||||
// ReplyToMessageID and ReplyMarkup are optional.
|
|
||||||
// File should be either a string, FileBytes, or FileReader.
|
|
||||||
func (bot *BotAPI) SendVideo(config VideoConfig) (Message, error) {
|
|
||||||
return bot.sendFile("sendVideo", config)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SendChatAction sets a current action in a chat.
|
|
||||||
//
|
|
||||||
// Requires ChatID and a valid Action (see Chat constants).
|
|
||||||
func (bot *BotAPI) SendChatAction(config ChatActionConfig) error {
|
|
||||||
v, err := config.Values()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = bot.MakeRequest("sendChatAction", v)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetUserProfilePhotos gets a user's profile photos.
|
// GetUserProfilePhotos gets a user's profile photos.
|
||||||
//
|
//
|
||||||
// Requires UserID.
|
// Requires UserID.
|
||||||
|
@ -400,7 +287,7 @@ func (bot *BotAPI) GetUserProfilePhotos(config UserProfilePhotosConfig) (UserPro
|
||||||
var profilePhotos UserProfilePhotos
|
var profilePhotos UserProfilePhotos
|
||||||
json.Unmarshal(resp.Result, &profilePhotos)
|
json.Unmarshal(resp.Result, &profilePhotos)
|
||||||
|
|
||||||
bot.DebugLog("GetUserProfilePhoto", v, profilePhotos)
|
bot.debugLog("GetUserProfilePhoto", v, profilePhotos)
|
||||||
|
|
||||||
return profilePhotos, nil
|
return profilePhotos, nil
|
||||||
}
|
}
|
||||||
|
@ -420,7 +307,7 @@ func (bot *BotAPI) GetFile(config FileConfig) (File, error) {
|
||||||
var file File
|
var file File
|
||||||
json.Unmarshal(resp.Result, &file)
|
json.Unmarshal(resp.Result, &file)
|
||||||
|
|
||||||
bot.DebugLog("GetFile", v, file)
|
bot.debugLog("GetFile", v, file)
|
||||||
|
|
||||||
return file, nil
|
return file, nil
|
||||||
}
|
}
|
||||||
|
@ -530,3 +417,20 @@ func (bot *BotAPI) ListenForWebhook(pattern string) {
|
||||||
bot.Updates <- update
|
bot.Updates <- update
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SendChatAction sets a current action in a chat.
|
||||||
|
//
|
||||||
|
// Requires ChatID and a valid Action (see Chat constants).
|
||||||
|
func (bot *BotAPI) SendChatAction(config ChatActionConfig) error {
|
||||||
|
v, err := config.Values()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = bot.MakeRequest("sendChatAction", v)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
44
configs.go
44
configs.go
|
@ -40,6 +40,7 @@ const (
|
||||||
|
|
||||||
type Chattable interface {
|
type Chattable interface {
|
||||||
Values() (url.Values, error)
|
Values() (url.Values, error)
|
||||||
|
Method() string
|
||||||
}
|
}
|
||||||
|
|
||||||
type Fileable interface {
|
type Fileable interface {
|
||||||
|
@ -133,6 +134,10 @@ func (config MessageConfig) Values() (url.Values, error) {
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config MessageConfig) Method() string {
|
||||||
|
return "SendMessage"
|
||||||
|
}
|
||||||
|
|
||||||
// ForwardConfig contains information about a ForwardMessage request.
|
// ForwardConfig contains information about a ForwardMessage request.
|
||||||
type ForwardConfig struct {
|
type ForwardConfig struct {
|
||||||
BaseChat
|
BaseChat
|
||||||
|
@ -143,17 +148,14 @@ type ForwardConfig struct {
|
||||||
|
|
||||||
func (config ForwardConfig) Values() (url.Values, error) {
|
func (config ForwardConfig) Values() (url.Values, error) {
|
||||||
v, _ := config.BaseChat.Values()
|
v, _ := config.BaseChat.Values()
|
||||||
|
|
||||||
if config.FromChannelUsername != "" {
|
|
||||||
v.Add("chat_id", config.FromChannelUsername)
|
|
||||||
} else {
|
|
||||||
v.Add("chat_id", strconv.Itoa(config.FromChatID))
|
|
||||||
}
|
|
||||||
v.Add("message_id", strconv.Itoa(config.MessageID))
|
v.Add("message_id", strconv.Itoa(config.MessageID))
|
||||||
|
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config ForwardConfig) Method() string {
|
||||||
|
return "forwardMessage"
|
||||||
|
}
|
||||||
|
|
||||||
// PhotoConfig contains information about a SendPhoto request.
|
// PhotoConfig contains information about a SendPhoto request.
|
||||||
type PhotoConfig struct {
|
type PhotoConfig struct {
|
||||||
BaseFile
|
BaseFile
|
||||||
|
@ -209,6 +211,10 @@ func (config PhotoConfig) Name() string {
|
||||||
return "photo"
|
return "photo"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config PhotoConfig) Method() string {
|
||||||
|
return "SendPhoto"
|
||||||
|
}
|
||||||
|
|
||||||
// AudioConfig contains information about a SendAudio request.
|
// AudioConfig contains information about a SendAudio request.
|
||||||
type AudioConfig struct {
|
type AudioConfig struct {
|
||||||
BaseFile
|
BaseFile
|
||||||
|
@ -278,6 +284,10 @@ func (config AudioConfig) Name() string {
|
||||||
return "audio"
|
return "audio"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config AudioConfig) Method() string {
|
||||||
|
return "SendAudio"
|
||||||
|
}
|
||||||
|
|
||||||
// DocumentConfig contains information about a SendDocument request.
|
// DocumentConfig contains information about a SendDocument request.
|
||||||
type DocumentConfig struct {
|
type DocumentConfig struct {
|
||||||
BaseFile
|
BaseFile
|
||||||
|
@ -326,6 +336,10 @@ func (config DocumentConfig) Name() string {
|
||||||
return "document"
|
return "document"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config DocumentConfig) Method() string {
|
||||||
|
return "sendDocument"
|
||||||
|
}
|
||||||
|
|
||||||
// StickerConfig contains information about a SendSticker request.
|
// StickerConfig contains information about a SendSticker request.
|
||||||
type StickerConfig struct {
|
type StickerConfig struct {
|
||||||
BaseFile
|
BaseFile
|
||||||
|
@ -374,6 +388,10 @@ func (config StickerConfig) Name() string {
|
||||||
return "sticker"
|
return "sticker"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config StickerConfig) Method() string {
|
||||||
|
return "sendSticker"
|
||||||
|
}
|
||||||
|
|
||||||
// VideoConfig contains information about a SendVideo request.
|
// VideoConfig contains information about a SendVideo request.
|
||||||
type VideoConfig struct {
|
type VideoConfig struct {
|
||||||
BaseFile
|
BaseFile
|
||||||
|
@ -430,6 +448,10 @@ func (config VideoConfig) Name() string {
|
||||||
return "viceo"
|
return "viceo"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config VideoConfig) Method() string {
|
||||||
|
return "sendVideo"
|
||||||
|
}
|
||||||
|
|
||||||
// VoiceConfig contains information about a SendVoice request.
|
// VoiceConfig contains information about a SendVoice request.
|
||||||
type VoiceConfig struct {
|
type VoiceConfig struct {
|
||||||
BaseFile
|
BaseFile
|
||||||
|
@ -485,6 +507,10 @@ func (config VoiceConfig) Name() string {
|
||||||
return "voice"
|
return "voice"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config VoiceConfig) Method() string {
|
||||||
|
return "sendVoice"
|
||||||
|
}
|
||||||
|
|
||||||
// LocationConfig contains information about a SendLocation request.
|
// LocationConfig contains information about a SendLocation request.
|
||||||
type LocationConfig struct {
|
type LocationConfig struct {
|
||||||
BaseChat
|
BaseChat
|
||||||
|
@ -515,6 +541,10 @@ func (config LocationConfig) Values() (url.Values, error) {
|
||||||
return v, nil
|
return v, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (config LocationConfig) Method() string {
|
||||||
|
return "sendLocation"
|
||||||
|
}
|
||||||
|
|
||||||
// ChatActionConfig contains information about a SendChatAction request.
|
// ChatActionConfig contains information about a SendChatAction request.
|
||||||
type ChatActionConfig struct {
|
type ChatActionConfig struct {
|
||||||
BaseChat
|
BaseChat
|
||||||
|
|
Loading…
Reference in New Issue