Additional changes for Telegram API updates.

bot-api-6.1
Syfaro 2016-11-24 23:50:35 -06:00
parent f3a33ae6f1
commit 0a57807db7
5 changed files with 82 additions and 13 deletions

1
bot.go
View File

@ -525,6 +525,7 @@ func (bot *BotAPI) AnswerCallbackQuery(config CallbackConfig) (APIResponse, erro
if config.URL != "" {
v.Add("url", config.URL)
}
v.Add("cache_time", strconv.Itoa(config.CacheTime))
bot.debugLog("answerCallbackQuery", v, nil)

View File

@ -7,6 +7,7 @@ import (
"net/http"
"os"
"testing"
"time"
)
const (
@ -25,6 +26,7 @@ func getBot(t *testing.T) (*tgbotapi.BotAPI, error) {
bot, err := tgbotapi.NewBotAPI(TestToken)
if err != nil {
t.Error(err)
t.Fail()
}
@ -35,6 +37,7 @@ func TestNewBotAPI_notoken(t *testing.T) {
_, err := tgbotapi.NewBotAPI("")
if err == nil {
t.Error(err)
t.Fail()
}
}
@ -47,6 +50,7 @@ func TestGetUpdates(t *testing.T) {
_, err := bot.GetUpdates(u)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -59,6 +63,7 @@ func TestSendWithMessage(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -71,6 +76,7 @@ func TestSendWithMessageReply(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -82,6 +88,7 @@ func TestSendWithMessageForward(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -94,6 +101,7 @@ func TestSendWithNewPhoto(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -109,6 +117,7 @@ func TestSendWithNewPhotoWithFileBytes(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -124,6 +133,7 @@ func TestSendWithNewPhotoWithFileReader(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -137,6 +147,7 @@ func TestSendWithNewPhotoReply(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -149,6 +160,7 @@ func TestSendWithExistingPhoto(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -160,6 +172,7 @@ func TestSendWithNewDocument(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -171,6 +184,7 @@ func TestSendWithExistingDocument(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -187,6 +201,7 @@ func TestSendWithNewAudio(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -202,6 +217,7 @@ func TestSendWithExistingAudio(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -214,6 +230,7 @@ func TestSendWithNewVoice(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -226,6 +243,7 @@ func TestSendWithExistingVoice(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -236,6 +254,7 @@ func TestSendWithContact(t *testing.T) {
contact := tgbotapi.NewContact(ChatID, "5551234567", "Test")
if _, err := bot.Send(contact); err != nil {
t.Error(err)
t.Fail()
}
}
@ -246,6 +265,7 @@ func TestSendWithLocation(t *testing.T) {
_, err := bot.Send(tgbotapi.NewLocation(ChatID, 40, 40))
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -256,6 +276,7 @@ func TestSendWithVenue(t *testing.T) {
venue := tgbotapi.NewVenue(ChatID, "A Test Location", "123 Test Street", 40, 40)
if _, err := bot.Send(venue); err != nil {
t.Error(err)
t.Fail()
}
}
@ -270,6 +291,7 @@ func TestSendWithNewVideo(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -284,6 +306,7 @@ func TestSendWithExistingVideo(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -296,6 +319,7 @@ func TestSendWithNewSticker(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -308,6 +332,7 @@ func TestSendWithExistingSticker(t *testing.T) {
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -316,10 +341,11 @@ func TestSendWithNewStickerAndKeyboardHide(t *testing.T) {
bot, _ := getBot(t)
msg := tgbotapi.NewStickerUpload(ChatID, "tests/image.jpg")
msg.ReplyMarkup = tgbotapi.ReplyKeyboardHide{true, false}
msg.ReplyMarkup = tgbotapi.ReplyKeyboardRemove{true, false}
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -328,12 +354,12 @@ func TestSendWithExistingStickerAndKeyboardHide(t *testing.T) {
bot, _ := getBot(t)
msg := tgbotapi.NewStickerShare(ChatID, ExistingStickerFileID)
msg.ReplyMarkup = tgbotapi.ReplyKeyboardHide{true, false}
msg.ReplyMarkup = tgbotapi.ReplyKeyboardRemove{true, false}
_, err := bot.Send(msg)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -346,6 +372,7 @@ func TestGetFile(t *testing.T) {
_, err := bot.GetFile(file)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -356,6 +383,7 @@ func TestSendChatConfig(t *testing.T) {
_, err := bot.Send(tgbotapi.NewChatAction(ChatID, tgbotapi.ChatTyping))
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -365,6 +393,7 @@ func TestSendEditMessage(t *testing.T) {
msg, err := bot.Send(tgbotapi.NewMessage(ChatID, "Testing editing."))
if err != nil {
t.Error(err)
t.Fail()
}
@ -378,6 +407,7 @@ func TestSendEditMessage(t *testing.T) {
_, err = bot.Send(edit)
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -387,6 +417,7 @@ func TestGetUserProfilePhotos(t *testing.T) {
_, err := bot.GetUserProfilePhotos(tgbotapi.NewUserProfilePhotos(ChatID))
if err != nil {
t.Error(err)
t.Fail()
}
}
@ -394,11 +425,14 @@ func TestGetUserProfilePhotos(t *testing.T) {
func TestSetWebhookWithCert(t *testing.T) {
bot, _ := getBot(t)
time.Sleep(time.Second * 2)
bot.RemoveWebhook()
wh := tgbotapi.NewWebhookWithCert("https://example.com/tgbotapi-test/"+bot.Token, "tests/cert.pem")
_, err := bot.SetWebhook(wh)
if err != nil {
t.Error(err)
t.Fail()
}
@ -408,11 +442,14 @@ func TestSetWebhookWithCert(t *testing.T) {
func TestSetWebhookWithoutCert(t *testing.T) {
bot, _ := getBot(t)
time.Sleep(time.Second * 2)
bot.RemoveWebhook()
wh := tgbotapi.NewWebhook("https://example.com/tgbotapi-test/" + bot.Token)
_, err := bot.SetWebhook(wh)
if err != nil {
t.Error(err)
t.Fail()
}
@ -427,6 +464,7 @@ func TestUpdatesChan(t *testing.T) {
_, err := bot.GetUpdatesChan(ucfg)
if err != nil {
t.Error(err)
t.Fail()
}
}

View File

@ -296,6 +296,9 @@ func (config AudioConfig) values() (url.Values, error) {
if config.Title != "" {
v.Add("title", config.Title)
}
if config.Caption != "" {
v.Add("caption", config.Caption)
}
return v, nil
}
@ -314,6 +317,9 @@ func (config AudioConfig) params() (map[string]string, error) {
if config.Title != "" {
params["title"] = config.Title
}
if config.Caption != "" {
params["caption"] = config.Caption
}
return params, nil
}
@ -561,13 +567,14 @@ func (config GameConfig) method() string {
// SetGameScoreConfig allows you to update the game score in a chat.
type SetGameScoreConfig struct {
UserID int
Score int
ChatID int
ChannelUsername string
MessageID int
InlineMessageID string
EditMessage bool
UserID int
Score int
Force bool
DisableEditMessage bool
ChatID int
ChannelUsername string
MessageID int
InlineMessageID string
}
func (config SetGameScoreConfig) values() (url.Values, error) {
@ -585,7 +592,7 @@ func (config SetGameScoreConfig) values() (url.Values, error) {
} else {
v.Add("inline_message_id", config.InlineMessageID)
}
v.Add("edit_message", strconv.FormatBool(config.EditMessage))
v.Add("disable_edit_message", strconv.FormatBool(config.DisableEditMessage))
return v, nil
}
@ -756,6 +763,7 @@ type CallbackConfig struct {
Text string `json:"text"`
ShowAlert bool `json:"show_alert"`
URL string `json:"url"`
CacheTime int `json:"cache_time"`
}
// ChatMemberConfig contains information about a user in a chat for use

View File

@ -1,6 +1,7 @@
package tgbotapi
import (
"log"
"net/url"
)
@ -20,6 +21,7 @@ func NewMessage(chatID int64, text string) MessageConfig {
// NewMessageToChannel creates a new Message that is sent to a channel
// by username.
//
// username is the username of the channel, text is the message text.
func NewMessageToChannel(username string, text string) MessageConfig {
return MessageConfig{
@ -479,12 +481,23 @@ func NewEditMessageReplyMarkup(chatID int64, messageID int, replyMarkup InlineKe
// NewHideKeyboard hides the keyboard, with the option for being selective
// or hiding for everyone.
func NewHideKeyboard(selective bool) ReplyKeyboardHide {
log.Println("NewHideKeyboard is deprecated, please use NewRemoveKeyboard")
return ReplyKeyboardHide{
HideKeyboard: true,
Selective: selective,
}
}
// NewRemoveKeyboard hides the keyboard, with the option for being selective
// or hiding for everyone.
func NewRemoveKeyboard(selective bool) ReplyKeyboardRemove {
return ReplyKeyboardRemove{
RemoveKeyboard: true,
Selective: selective,
}
}
// NewKeyboardButton creates a regular keyboard button.
func NewKeyboardButton(text string) KeyboardButton {
return KeyboardButton{

View File

@ -21,8 +21,8 @@ type APIResponse struct {
// ResponseParameters are various errors that can be returned in APIResponse.
type ResponseParameters struct {
MigrateToChatID int `json:"migrate_to_chat_id"` // optional
RetryAfter int `json:"retry_after"` // optional
MigrateToChatID int64 `json:"migrate_to_chat_id"` // optional
RetryAfter int `json:"retry_after"` // optional
}
// Update is an update response, from GetUpdates.
@ -30,6 +30,8 @@ type Update struct {
UpdateID int `json:"update_id"`
Message *Message `json:"message"`
EditedMessage *Message `json:"edited_message"`
ChannelPost *Message `json:"channel_post"`
EditedChannelPost *Message `json:"edited_channel_post"`
InlineQuery *InlineQuery `json:"inline_query"`
ChosenInlineResult *ChosenInlineResult `json:"chosen_inline_result"`
CallbackQuery *CallbackQuery `json:"callback_query"`
@ -111,6 +113,7 @@ type Message struct {
Chat *Chat `json:"chat"`
ForwardFrom *User `json:"forward_from"` // optional
ForwardFromChat *Chat `json:"forward_from_chat"` // optional
ForwardFromMessageID int `json:"forward_from_message_id"` // optional
ForwardDate int `json:"forward_date"` // optional
ReplyToMessage *Message `json:"reply_to_message"` // optional
EditDate int `json:"edit_date"` // optional
@ -323,6 +326,12 @@ type ReplyKeyboardHide struct {
Selective bool `json:"selective"` // optional
}
// ReplyKeyboardRemove allows the Bot to hide a custom keyboard.
type ReplyKeyboardRemove struct {
RemoveKeyboard bool `json:"remove_keyboard"`
Selective bool `json:"selective"`
}
// InlineKeyboardMarkup is a custom keyboard presented for an inline bot.
type InlineKeyboardMarkup struct {
InlineKeyboard [][]InlineKeyboardButton `json:"inline_keyboard"`