all repos — telegram-bot-api @ a45216f441cd4adc8bda63ea430a24ffa778ab6f

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