all repos — telegram-bot-api @ 23ed97b145bdc331428d0e094fdc973627293a89

Golang bindings for the Telegram Bot API

helpers.go (view raw)

  1package tgbotapi
  2
  3import (
  4	"net/url"
  5)
  6
  7// NewMessage creates a new Message.
  8//
  9// chatID is where to send it, text is the message text.
 10func NewMessage(chatID int64, text string) MessageConfig {
 11	return MessageConfig{
 12		BaseChat: BaseChat{
 13			ChatID:           chatID,
 14			ReplyToMessageID: 0,
 15		},
 16		Text:                  text,
 17		DisableWebPagePreview: false,
 18	}
 19}
 20
 21// NewDeleteMessage creates a request to delete a message.
 22func NewDeleteMessage(chatID int64, messageID int) DeleteMessageConfig {
 23	return DeleteMessageConfig{
 24		ChatID:    chatID,
 25		MessageID: messageID,
 26	}
 27}
 28
 29// NewMessageToChannel creates a new Message that is sent to a channel
 30// by username.
 31//
 32// username is the username of the channel, text is the message text.
 33func NewMessageToChannel(username string, text string) MessageConfig {
 34	return MessageConfig{
 35		BaseChat: BaseChat{
 36			ChannelUsername: username,
 37		},
 38		Text: text,
 39	}
 40}
 41
 42// NewForward creates a new forward.
 43//
 44// chatID is where to send it, fromChatID is the source chat,
 45// and messageID is the ID of the original message.
 46func NewForward(chatID int64, fromChatID int64, messageID int) ForwardConfig {
 47	return ForwardConfig{
 48		BaseChat:   BaseChat{ChatID: chatID},
 49		FromChatID: fromChatID,
 50		MessageID:  messageID,
 51	}
 52}
 53
 54// NewPhotoUpload creates a new photo uploader.
 55//
 56// chatID is where to send it, file is a string path to the file,
 57// FileReader, or FileBytes.
 58//
 59// Note that you must send animated GIFs as a document.
 60func NewPhotoUpload(chatID int64, file interface{}) PhotoConfig {
 61	return PhotoConfig{
 62		BaseFile: BaseFile{
 63			BaseChat:    BaseChat{ChatID: chatID},
 64			File:        file,
 65			UseExisting: false,
 66		},
 67	}
 68}
 69
 70// NewPhotoShare shares an existing photo.
 71// You may use this to reshare an existing photo without reuploading it.
 72//
 73// chatID is where to send it, fileID is the ID of the file
 74// already uploaded.
 75func NewPhotoShare(chatID int64, fileID string) PhotoConfig {
 76	return PhotoConfig{
 77		BaseFile: BaseFile{
 78			BaseChat:    BaseChat{ChatID: chatID},
 79			FileID:      fileID,
 80			UseExisting: true,
 81		},
 82	}
 83}
 84
 85// NewAudioUpload creates a new audio uploader.
 86//
 87// chatID is where to send it, file is a string path to the file,
 88// FileReader, or FileBytes.
 89func NewAudioUpload(chatID int64, file interface{}) AudioConfig {
 90	return AudioConfig{
 91		BaseFile: BaseFile{
 92			BaseChat:    BaseChat{ChatID: chatID},
 93			File:        file,
 94			UseExisting: false,
 95		},
 96	}
 97}
 98
 99// NewAudioShare shares an existing audio file.
100// You may use this to reshare an existing audio file without
101// reuploading it.
102//
103// chatID is where to send it, fileID is the ID of the audio
104// already uploaded.
105func NewAudioShare(chatID int64, fileID string) AudioConfig {
106	return AudioConfig{
107		BaseFile: BaseFile{
108			BaseChat:    BaseChat{ChatID: chatID},
109			FileID:      fileID,
110			UseExisting: true,
111		},
112	}
113}
114
115// NewDocumentUpload creates a new document uploader.
116//
117// chatID is where to send it, file is a string path to the file,
118// FileReader, or FileBytes.
119func NewDocumentUpload(chatID int64, file interface{}) DocumentConfig {
120	return DocumentConfig{
121		BaseFile: BaseFile{
122			BaseChat:    BaseChat{ChatID: chatID},
123			File:        file,
124			UseExisting: false,
125		},
126	}
127}
128
129// NewDocumentShare shares an existing document.
130// You may use this to reshare an existing document without
131// reuploading it.
132//
133// chatID is where to send it, fileID is the ID of the document
134// already uploaded.
135func NewDocumentShare(chatID int64, fileID string) DocumentConfig {
136	return DocumentConfig{
137		BaseFile: BaseFile{
138			BaseChat:    BaseChat{ChatID: chatID},
139			FileID:      fileID,
140			UseExisting: true,
141		},
142	}
143}
144
145// NewStickerUpload creates a new sticker uploader.
146//
147// chatID is where to send it, file is a string path to the file,
148// FileReader, or FileBytes.
149func NewStickerUpload(chatID int64, file interface{}) StickerConfig {
150	return StickerConfig{
151		BaseFile: BaseFile{
152			BaseChat:    BaseChat{ChatID: chatID},
153			File:        file,
154			UseExisting: false,
155		},
156	}
157}
158
159// NewStickerShare shares an existing sticker.
160// You may use this to reshare an existing sticker without
161// reuploading it.
162//
163// chatID is where to send it, fileID is the ID of the sticker
164// already uploaded.
165func NewStickerShare(chatID int64, fileID string) StickerConfig {
166	return StickerConfig{
167		BaseFile: BaseFile{
168			BaseChat:    BaseChat{ChatID: chatID},
169			FileID:      fileID,
170			UseExisting: true,
171		},
172	}
173}
174
175// NewVideoUpload creates a new video uploader.
176//
177// chatID is where to send it, file is a string path to the file,
178// FileReader, or FileBytes.
179func NewVideoUpload(chatID int64, file interface{}) VideoConfig {
180	return VideoConfig{
181		BaseFile: BaseFile{
182			BaseChat:    BaseChat{ChatID: chatID},
183			File:        file,
184			UseExisting: false,
185		},
186	}
187}
188
189// NewVideoShare shares an existing video.
190// You may use this to reshare an existing video without reuploading it.
191//
192// chatID is where to send it, fileID is the ID of the video
193// already uploaded.
194func NewVideoShare(chatID int64, fileID string) VideoConfig {
195	return VideoConfig{
196		BaseFile: BaseFile{
197			BaseChat:    BaseChat{ChatID: chatID},
198			FileID:      fileID,
199			UseExisting: true,
200		},
201	}
202}
203
204// NewAnimationUpload creates a new animation uploader.
205//
206// chatID is where to send it, file is a string path to the file,
207// FileReader, or FileBytes.
208func NewAnimationUpload(chatID int64, file interface{}) AnimationConfig {
209	return AnimationConfig{
210		BaseFile: BaseFile{
211			BaseChat:    BaseChat{ChatID: chatID},
212			File:        file,
213			UseExisting: false,
214		},
215	}
216}
217
218// NewAnimationShare shares an existing animation.
219// You may use this to reshare an existing animation without reuploading it.
220//
221// chatID is where to send it, fileID is the ID of the animation
222// already uploaded.
223func NewAnimationShare(chatID int64, fileID string) AnimationConfig {
224	return AnimationConfig{
225		BaseFile: BaseFile{
226			BaseChat:    BaseChat{ChatID: chatID},
227			FileID:      fileID,
228			UseExisting: true,
229		},
230	}
231}
232
233// NewVideoNoteUpload creates a new video note uploader.
234//
235// chatID is where to send it, file is a string path to the file,
236// FileReader, or FileBytes.
237func NewVideoNoteUpload(chatID int64, length int, file interface{}) VideoNoteConfig {
238	return VideoNoteConfig{
239		BaseFile: BaseFile{
240			BaseChat:    BaseChat{ChatID: chatID},
241			File:        file,
242			UseExisting: false,
243		},
244		Length: length,
245	}
246}
247
248// NewVideoNoteShare shares an existing video.
249// You may use this to reshare an existing video without reuploading it.
250//
251// chatID is where to send it, fileID is the ID of the video
252// already uploaded.
253func NewVideoNoteShare(chatID int64, length int, fileID string) VideoNoteConfig {
254	return VideoNoteConfig{
255		BaseFile: BaseFile{
256			BaseChat:    BaseChat{ChatID: chatID},
257			FileID:      fileID,
258			UseExisting: true,
259		},
260		Length: length,
261	}
262}
263
264// NewVoiceUpload creates a new voice uploader.
265//
266// chatID is where to send it, file is a string path to the file,
267// FileReader, or FileBytes.
268func NewVoiceUpload(chatID int64, file interface{}) VoiceConfig {
269	return VoiceConfig{
270		BaseFile: BaseFile{
271			BaseChat:    BaseChat{ChatID: chatID},
272			File:        file,
273			UseExisting: false,
274		},
275	}
276}
277
278// NewVoiceShare shares an existing voice.
279// You may use this to reshare an existing voice without reuploading it.
280//
281// chatID is where to send it, fileID is the ID of the video
282// already uploaded.
283func NewVoiceShare(chatID int64, fileID string) VoiceConfig {
284	return VoiceConfig{
285		BaseFile: BaseFile{
286			BaseChat:    BaseChat{ChatID: chatID},
287			FileID:      fileID,
288			UseExisting: true,
289		},
290	}
291}
292
293// NewMediaGroup creates a new media group. Files should be an array of
294// two to ten InputMediaPhoto or InputMediaVideo.
295func NewMediaGroup(chatID int64, files []interface{}) MediaGroupConfig {
296	return MediaGroupConfig{
297		ChatID: chatID,
298		Media:  files,
299	}
300}
301
302// NewInputMediaPhoto creates a new InputMediaPhoto.
303func NewInputMediaPhoto(media string) InputMediaPhoto {
304	return InputMediaPhoto{
305		Type:  "photo",
306		Media: media,
307	}
308}
309
310// NewInputMediaVideo creates a new InputMediaVideo.
311func NewInputMediaVideo(media string) InputMediaVideo {
312	return InputMediaVideo{
313		Type:  "video",
314		Media: media,
315	}
316}
317
318// NewContact allows you to send a shared contact.
319func NewContact(chatID int64, phoneNumber, firstName string) ContactConfig {
320	return ContactConfig{
321		BaseChat: BaseChat{
322			ChatID: chatID,
323		},
324		PhoneNumber: phoneNumber,
325		FirstName:   firstName,
326	}
327}
328
329// NewLocation shares your location.
330//
331// chatID is where to send it, latitude and longitude are coordinates.
332func NewLocation(chatID int64, latitude float64, longitude float64) LocationConfig {
333	return LocationConfig{
334		BaseChat: BaseChat{
335			ChatID: chatID,
336		},
337		Latitude:  latitude,
338		Longitude: longitude,
339	}
340}
341
342// NewVenue allows you to send a venue and its location.
343func NewVenue(chatID int64, title, address string, latitude, longitude float64) VenueConfig {
344	return VenueConfig{
345		BaseChat: BaseChat{
346			ChatID: chatID,
347		},
348		Title:     title,
349		Address:   address,
350		Latitude:  latitude,
351		Longitude: longitude,
352	}
353}
354
355// NewChatAction sets a chat action.
356// Actions last for 5 seconds, or until your next action.
357//
358// chatID is where to send it, action should be set via Chat constants.
359func NewChatAction(chatID int64, action string) ChatActionConfig {
360	return ChatActionConfig{
361		BaseChat: BaseChat{ChatID: chatID},
362		Action:   action,
363	}
364}
365
366// NewUserProfilePhotos gets user profile photos.
367//
368// userID is the ID of the user you wish to get profile photos from.
369func NewUserProfilePhotos(userID int) UserProfilePhotosConfig {
370	return UserProfilePhotosConfig{
371		UserID: userID,
372		Offset: 0,
373		Limit:  0,
374	}
375}
376
377// NewUpdate gets updates since the last Offset.
378//
379// offset is the last Update ID to include.
380// You likely want to set this to the last Update ID plus 1.
381func NewUpdate(offset int) UpdateConfig {
382	return UpdateConfig{
383		Offset:  offset,
384		Limit:   0,
385		Timeout: 0,
386	}
387}
388
389// NewWebhook creates a new webhook.
390//
391// link is the url parsable link you wish to get the updates.
392func NewWebhook(link string) WebhookConfig {
393	u, _ := url.Parse(link)
394
395	return WebhookConfig{
396		URL: u,
397	}
398}
399
400// NewWebhookWithCert creates a new webhook with a certificate.
401//
402// link is the url you wish to get webhooks,
403// file contains a string to a file, FileReader, or FileBytes.
404func NewWebhookWithCert(link string, file interface{}) WebhookConfig {
405	u, _ := url.Parse(link)
406
407	return WebhookConfig{
408		URL:         u,
409		Certificate: file,
410	}
411}
412
413// NewInlineQueryResultArticle creates a new inline query article.
414func NewInlineQueryResultArticle(id, title, messageText string) InlineQueryResultArticle {
415	return InlineQueryResultArticle{
416		Type:  "article",
417		ID:    id,
418		Title: title,
419		InputMessageContent: InputTextMessageContent{
420			Text: messageText,
421		},
422	}
423}
424
425// NewInlineQueryResultArticleMarkdown creates a new inline query article with Markdown parsing.
426func NewInlineQueryResultArticleMarkdown(id, title, messageText string) InlineQueryResultArticle {
427	return InlineQueryResultArticle{
428		Type:  "article",
429		ID:    id,
430		Title: title,
431		InputMessageContent: InputTextMessageContent{
432			Text:      messageText,
433			ParseMode: "Markdown",
434		},
435	}
436}
437
438// NewInlineQueryResultArticleHTML creates a new inline query article with HTML parsing.
439func NewInlineQueryResultArticleHTML(id, title, messageText string) InlineQueryResultArticle {
440	return InlineQueryResultArticle{
441		Type:  "article",
442		ID:    id,
443		Title: title,
444		InputMessageContent: InputTextMessageContent{
445			Text:      messageText,
446			ParseMode: "HTML",
447		},
448	}
449}
450
451// NewInlineQueryResultGIF creates a new inline query GIF.
452func NewInlineQueryResultGIF(id, url string) InlineQueryResultGIF {
453	return InlineQueryResultGIF{
454		Type: "gif",
455		ID:   id,
456		URL:  url,
457	}
458}
459
460// NewInlineQueryResultMPEG4GIF creates a new inline query MPEG4 GIF.
461func NewInlineQueryResultMPEG4GIF(id, url string) InlineQueryResultMPEG4GIF {
462	return InlineQueryResultMPEG4GIF{
463		Type: "mpeg4_gif",
464		ID:   id,
465		URL:  url,
466	}
467}
468
469// NewInlineQueryResultPhoto creates a new inline query photo.
470func NewInlineQueryResultPhoto(id, url string) InlineQueryResultPhoto {
471	return InlineQueryResultPhoto{
472		Type: "photo",
473		ID:   id,
474		URL:  url,
475	}
476}
477
478// NewInlineQueryResultPhotoWithThumb creates a new inline query photo.
479func NewInlineQueryResultPhotoWithThumb(id, url, thumb string) InlineQueryResultPhoto {
480	return InlineQueryResultPhoto{
481		Type:     "photo",
482		ID:       id,
483		URL:      url,
484		ThumbURL: thumb,
485	}
486}
487
488// NewInlineQueryResultVideo creates a new inline query video.
489func NewInlineQueryResultVideo(id, url string) InlineQueryResultVideo {
490	return InlineQueryResultVideo{
491		Type: "video",
492		ID:   id,
493		URL:  url,
494	}
495}
496
497// NewInlineQueryResultAudio creates a new inline query audio.
498func NewInlineQueryResultAudio(id, url, title string) InlineQueryResultAudio {
499	return InlineQueryResultAudio{
500		Type:  "audio",
501		ID:    id,
502		URL:   url,
503		Title: title,
504	}
505}
506
507// NewInlineQueryResultVoice creates a new inline query voice.
508func NewInlineQueryResultVoice(id, url, title string) InlineQueryResultVoice {
509	return InlineQueryResultVoice{
510		Type:  "voice",
511		ID:    id,
512		URL:   url,
513		Title: title,
514	}
515}
516
517// NewInlineQueryResultDocument creates a new inline query document.
518func NewInlineQueryResultDocument(id, url, title, mimeType string) InlineQueryResultDocument {
519	return InlineQueryResultDocument{
520		Type:     "document",
521		ID:       id,
522		URL:      url,
523		Title:    title,
524		MimeType: mimeType,
525	}
526}
527
528// NewInlineQueryResultLocation creates a new inline query location.
529func NewInlineQueryResultLocation(id, title string, latitude, longitude float64) InlineQueryResultLocation {
530	return InlineQueryResultLocation{
531		Type:      "location",
532		ID:        id,
533		Title:     title,
534		Latitude:  latitude,
535		Longitude: longitude,
536	}
537}
538
539// NewEditMessageText allows you to edit the text of a message.
540func NewEditMessageText(chatID int64, messageID int, text string) EditMessageTextConfig {
541	return EditMessageTextConfig{
542		BaseEdit: BaseEdit{
543			ChatID:    chatID,
544			MessageID: messageID,
545		},
546		Text: text,
547	}
548}
549
550// NewEditMessageCaption allows you to edit the caption of a message.
551func NewEditMessageCaption(chatID int64, messageID int, caption string) EditMessageCaptionConfig {
552	return EditMessageCaptionConfig{
553		BaseEdit: BaseEdit{
554			ChatID:    chatID,
555			MessageID: messageID,
556		},
557		Caption: caption,
558	}
559}
560
561// NewEditMessageReplyMarkup allows you to edit the inline
562// keyboard markup.
563func NewEditMessageReplyMarkup(chatID int64, messageID int, replyMarkup InlineKeyboardMarkup) EditMessageReplyMarkupConfig {
564	return EditMessageReplyMarkupConfig{
565		BaseEdit: BaseEdit{
566			ChatID:      chatID,
567			MessageID:   messageID,
568			ReplyMarkup: &replyMarkup,
569		},
570	}
571}
572
573// NewHideKeyboard hides the keyboard, with the option for being selective
574// or hiding for everyone.
575func NewHideKeyboard(selective bool) ReplyKeyboardHide {
576	log.Println("NewHideKeyboard is deprecated, please use NewRemoveKeyboard")
577
578	return ReplyKeyboardHide{
579		HideKeyboard: true,
580		Selective:    selective,
581	}
582}
583
584// NewRemoveKeyboard hides the keyboard, with the option for being selective
585// or hiding for everyone.
586func NewRemoveKeyboard(selective bool) ReplyKeyboardRemove {
587	return ReplyKeyboardRemove{
588		RemoveKeyboard: true,
589		Selective:      selective,
590	}
591}
592
593// NewKeyboardButton creates a regular keyboard button.
594func NewKeyboardButton(text string) KeyboardButton {
595	return KeyboardButton{
596		Text: text,
597	}
598}
599
600// NewKeyboardButtonContact creates a keyboard button that requests
601// user contact information upon click.
602func NewKeyboardButtonContact(text string) KeyboardButton {
603	return KeyboardButton{
604		Text:           text,
605		RequestContact: true,
606	}
607}
608
609// NewKeyboardButtonLocation creates a keyboard button that requests
610// user location information upon click.
611func NewKeyboardButtonLocation(text string) KeyboardButton {
612	return KeyboardButton{
613		Text:            text,
614		RequestLocation: true,
615	}
616}
617
618// NewKeyboardButtonRow creates a row of keyboard buttons.
619func NewKeyboardButtonRow(buttons ...KeyboardButton) []KeyboardButton {
620	var row []KeyboardButton
621
622	row = append(row, buttons...)
623
624	return row
625}
626
627// NewReplyKeyboard creates a new regular keyboard with sane defaults.
628func NewReplyKeyboard(rows ...[]KeyboardButton) ReplyKeyboardMarkup {
629	var keyboard [][]KeyboardButton
630
631	keyboard = append(keyboard, rows...)
632
633	return ReplyKeyboardMarkup{
634		ResizeKeyboard: true,
635		Keyboard:       keyboard,
636	}
637}
638
639// NewInlineKeyboardButtonData creates an inline keyboard button with text
640// and data for a callback.
641func NewInlineKeyboardButtonData(text, data string) InlineKeyboardButton {
642	return InlineKeyboardButton{
643		Text:         text,
644		CallbackData: &data,
645	}
646}
647
648// NewInlineKeyboardButtonURL creates an inline keyboard button with text
649// which goes to a URL.
650func NewInlineKeyboardButtonURL(text, url string) InlineKeyboardButton {
651	return InlineKeyboardButton{
652		Text: text,
653		URL:  &url,
654	}
655}
656
657// NewInlineKeyboardButtonSwitch creates an inline keyboard button with
658// text which allows the user to switch to a chat or return to a chat.
659func NewInlineKeyboardButtonSwitch(text, sw string) InlineKeyboardButton {
660	return InlineKeyboardButton{
661		Text:              text,
662		SwitchInlineQuery: &sw,
663	}
664}
665
666// NewInlineKeyboardRow creates an inline keyboard row with buttons.
667func NewInlineKeyboardRow(buttons ...InlineKeyboardButton) []InlineKeyboardButton {
668	var row []InlineKeyboardButton
669
670	row = append(row, buttons...)
671
672	return row
673}
674
675// NewInlineKeyboardMarkup creates a new inline keyboard.
676func NewInlineKeyboardMarkup(rows ...[]InlineKeyboardButton) InlineKeyboardMarkup {
677	var keyboard [][]InlineKeyboardButton
678
679	keyboard = append(keyboard, rows...)
680
681	return InlineKeyboardMarkup{
682		InlineKeyboard: keyboard,
683	}
684}
685
686// NewCallback creates a new callback message.
687func NewCallback(id, text string) CallbackConfig {
688	return CallbackConfig{
689		CallbackQueryID: id,
690		Text:            text,
691		ShowAlert:       false,
692	}
693}
694
695// NewCallbackWithAlert creates a new callback message that alerts
696// the user.
697func NewCallbackWithAlert(id, text string) CallbackConfig {
698	return CallbackConfig{
699		CallbackQueryID: id,
700		Text:            text,
701		ShowAlert:       true,
702	}
703}
704
705// NewInvoice creates a new Invoice request to the user.
706func NewInvoice(chatID int64, title, description, payload, providerToken, startParameter, currency string, prices *[]LabeledPrice) InvoiceConfig {
707	return InvoiceConfig{
708		BaseChat:       BaseChat{ChatID: chatID},
709		Title:          title,
710		Description:    description,
711		Payload:        payload,
712		ProviderToken:  providerToken,
713		StartParameter: startParameter,
714		Currency:       currency,
715		Prices:         prices}
716}
717
718// NewSetChatPhotoUpload creates a new chat photo uploader.
719//
720// chatID is where to send it, file is a string path to the file,
721// FileReader, or FileBytes.
722//
723// Note that you must send animated GIFs as a document.
724func NewSetChatPhotoUpload(chatID int64, file interface{}) SetChatPhotoConfig {
725	return SetChatPhotoConfig{
726		BaseFile: BaseFile{
727			BaseChat:    BaseChat{ChatID: chatID},
728			File:        file,
729			UseExisting: false,
730		},
731	}
732}
733
734// NewSetChatPhotoShare shares an existing photo.
735// You may use this to reshare an existing photo without reuploading it.
736//
737// chatID is where to send it, fileID is the ID of the file
738// already uploaded.
739func NewSetChatPhotoShare(chatID int64, fileID string) SetChatPhotoConfig {
740	return SetChatPhotoConfig{
741		BaseFile: BaseFile{
742			BaseChat:    BaseChat{ChatID: chatID},
743			FileID:      fileID,
744			UseExisting: true,
745		},
746	}
747}
748
749// NewChatTitle allows you to update the title of a chat.
750func NewChatTitle(chatID int64, title string) SetChatTitleConfig {
751	return SetChatTitleConfig{
752		ChatID: chatID,
753		Title:  title,
754	}
755}
756
757// NewChatDescription allows you to update the description of a chat.
758func NewChatDescription(chatID int64, description string) SetChatDescriptionConfig {
759	return SetChatDescriptionConfig{
760		ChatID:      chatID,
761		Description: description,
762	}
763}
764
765// NewChatPhoto allows you to update the photo for a chat.
766func NewChatPhoto(chatID int64, photo interface{}) SetChatPhotoConfig {
767	return SetChatPhotoConfig{
768		BaseFile: BaseFile{
769			BaseChat: BaseChat{
770				ChatID: chatID,
771			},
772			File: photo,
773		},
774	}
775}
776
777// NewDeleteChatPhoto allows you to delete the photo for a chat.
778func NewDeleteChatPhoto(chatID int64, photo interface{}) DeleteChatPhotoConfig {
779	return DeleteChatPhotoConfig{
780		ChatID: chatID,
781	}
782}