telebot

package module
v0.1.19 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 29, 2024 License: MIT Imports: 23 Imported by: 8

README

GfBot

"I never knew creating Telegram bots could be so sexy!"

go get -u github.com/jxo-me/gfbot

Overview

Telebot is a bot framework for Telegram Bot API. This package provides the best of its kind API for command routing, inline query requests and keyboards, as well as callbacks. Actually, I went a couple steps further, so instead of making a 1:1 API wrapper I chose to focus on the beauty of API and performance. Some strong sides of Telebot are:

  • Real concise API
  • Command routing
  • Middleware
  • Transparent File API
  • Effortless bot callbacks

All the methods of Telebot API are extremely easy to memorize and get used to. Also, consider Telebot a highload-ready solution. I'll test and benchmark the most popular actions and if necessary, optimize against them without sacrificing API quality.

Getting Started

Let's take a look at the minimal Telebot setup:

package main

import (
	"log"
	"os"
	"time"

	tele "github.com/jxo-me/gfbot"
)

func main() {
	pref := tele.Settings{
		Token:  os.Getenv("TOKEN"),
		Poller: &tele.LongPoller{Timeout: 10 * time.Second},
	}

	b, err := tele.NewBot(pref)
	if err != nil {
		log.Fatal(err)
		return
	}

	b.Handle("/hello", func(c tele.Context) error {
		return c.Send("Hello!")
	})

	b.Start()
}

Simple, innit? Telebot's routing system takes care of delivering updates to their endpoints, so in order to get to handle any meaningful event, all you got to do is just plug your function into one of the Telebot-provided endpoints. You can find the full list here.

There are dozens of supported endpoints (see package consts). Let me know if you'd like to see some endpoint or endpoint ideas implemented. This system is completely extensible, so I can introduce them without breaking backwards compatibility.

Context

Context is a special type that wraps a huge update structure and represents the context of the current event. It provides several helpers, which allow getting, for example, the chat that this update had been sent in, no matter what kind of update this is.

b.Handle(tele.OnText, func(c tele.Context) error {
	// All the text messages that weren't
	// captured by existing handlers.

	var (
		user = c.Sender()
		text = c.Text()
	)

	// Use full-fledged bot's functions
	// only if you need a result:
	msg, err := b.Send(user, text)
	if err != nil {
		return err
	}

	// Instead, prefer a context short-hand:
	return c.Send(text)
})

b.Handle(tele.OnChannelPost, func(c tele.Context) error {
	// Channel posts only.
	msg := c.Message()
})

b.Handle(tele.OnPhoto, func(c tele.Context) error {
	// Photos only.
	photo := c.Message().Photo
})

b.Handle(tele.OnQuery, func(c tele.Context) error {
	// Incoming inline queries.
	return c.Answer(...)
})

Middleware

Telebot has a simple and recognizable way to set up middleware — chained functions with access to Context, called before the handler execution.

Import a middleware package to get some basic out-of-box middleware implementations:

import "github.com/jxo-me/gfbot/middleware"
// Global-scoped middleware:
b.Use(middleware.Logger())
b.Use(middleware.AutoRespond())

// Group-scoped middleware:
adminOnly := b.Group()
adminOnly.Use(middleware.Whitelist(adminIDs...))
adminOnly.Handle("/ban", onBan)
adminOnly.Handle("/kick", onKick)

// Handler-scoped middleware:
b.Handle(tele.OnText, onText, middleware.IgnoreVia())

Custom middleware example:

// AutoResponder automatically responds to every callback update.
func AutoResponder(next tele.HandlerFunc) tele.HandlerFunc {
	return func(c tele.Context) error {
		if c.Callback() != nil {
			defer c.Respond()
		}
		return next(c) // continue execution chain
	}
}

Poller

Telebot doesn't really care how you provide it with incoming updates, as long as you set it up with a Poller, or call ProcessUpdate for each update:

// Poller is a provider of Updates.
//
// All pollers must implement Poll(), which accepts bot
// pointer and subscription channel and start polling
// synchronously straight away.
type Poller interface {
	// Poll is supposed to take the bot object
	// subscription channel and start polling
	// for Updates immediately.
	//
	// Poller must listen for stop constantly and close
	// it as soon as it's done polling.
	Poll(b *Bot, updates chan Update, stop chan struct{})
}

Commands

When handling commands, Telebot supports both direct (/command) and group-like syntax (/command@botname) and will never deliver messages addressed to some other bot, even if privacy mode is off.

For simplified deep-linking, Telebot also extracts payload:

// Command: /start <PAYLOAD>
b.Handle("/start", func(c tele.Context) error {
	fmt.Println(c.Message().Payload) // <PAYLOAD>
})

For multiple arguments use:

// Command: /tags <tag1> <tag2> <...>
b.Handle("/tags", func(c tele.Context) error {
	tags := c.Args() // list of arguments splitted by a space
	for _, tag := range tags {
		// iterate through passed arguments
	}
})

Files

Telegram allows files up to 50 MB in size.

Telebot allows to both upload (from disk or by URL) and download (from Telegram) files in bot's scope. Also, sending any kind of media with a File created from disk will upload the file to Telegram automatically:

a := &tele.Audio{File: tele.FromDisk("file.ogg")}

fmt.Println(a.OnDisk()) // true
fmt.Println(a.InCloud()) // false

// Will upload the file from disk and send it to the recipient
b.Send(recipient, a)

// Next time you'll be sending this very *Audio, Telebot won't
// re-upload the same file but rather utilize its Telegram FileID
b.Send(otherRecipient, a)

fmt.Println(a.OnDisk()) // true
fmt.Println(a.InCloud()) // true
fmt.Println(a.FileID) // <Telegram file ID>

You might want to save certain Files in order to avoid re-uploading. Feel free to marshal them into whatever format, File only contain public fields, so no data will ever be lost.

Sendable

Send is undoubtedly the most important method in Telebot. Send() accepts a Recipient (could be user, group or a channel) and a Sendable. Other types other than the Telebot-provided media types (Photo, Audio, Video, etc.) are Sendable. If you create composite types of your own, and they satisfy the Sendable interface, Telebot will be able to send them out.

// Sendable is any object that can send itself.
//
// This is pretty cool, since it lets bots implement
// custom Sendables for complex kinds of media or
// chat objects spanning across multiple messages.
type Sendable interface {
	Send(*Bot, Recipient, *SendOptions) (*Message, error)
}

The only type at the time that doesn't fit Send() is Album and there is a reason for that. Albums were added not so long ago, so they are slightly quirky for backwards compatibilities sake. In fact, an Album can be sent, but never received. Instead, Telegram returns a []Message, one for each media object in the album:

p := &tele.Photo{File: tele.FromDisk("chicken.jpg")}
v := &tele.Video{File: tele.FromURL("http://video.mp4")}

msgs, err := b.SendAlbum(user, tele.Album{p, v})
Send options

Send options are objects and flags you can pass to Send(), Edit() and friends as optional arguments (following the recipient and the text/media). The most important one is called SendOptions, it lets you control all the properties of the message supported by Telegram. The only drawback is that it's rather inconvenient to use at times, so Send() supports multiple shorthands:

// regular send options
b.Send(user, "text", &tele.SendOptions{
	// ...
})

// ReplyMarkup is a part of SendOptions,
// but often it's the only option you need
b.Send(user, "text", &tele.ReplyMarkup{
	// ...
})

// flags: no notification && no web link preview
b.Send(user, "text", tele.Silent, tele.NoPreview)

Full list of supported option-flags you can find here.

Editable

If you want to edit some existing message, you don't really need to store the original *Message object. In fact, upon edit, Telegram only requires chat_id and message_id. So you don't really need the Message as a whole. Also, you might want to store references to certain messages in the database, so I thought it made sense for any Go struct to be editable as a Telegram message, to implement Editable:

// Editable is an interface for all objects that
// provide "message signature", a pair of 32-bit
// message ID and 64-bit chat ID, both required
// for edit operations.
//
// Use case: DB model struct for messages to-be
// edited with, say two columns: msg_id,chat_id
// could easily implement MessageSig() making
// instances of stored messages editable.
type Editable interface {
	// MessageSig is a "message signature".
	//
	// For inline messages, return chatID = 0.
	MessageSig() (messageID int, chatID int64)
}

For example, Message type is Editable. Here is the implementation of StoredMessage type, provided by Telebot:

// StoredMessage is an example struct suitable for being
// stored in the database as-is or being embedded into
// a larger struct, which is often the case (you might
// want to store some metadata alongside, or might not.)
type StoredMessage struct {
	MessageID int   `sql:"message_id" json:"message_id"`
	ChatID    int64 `sql:"chat_id" json:"chat_id"`
}

func (x StoredMessage) MessageSig() (int, int64) {
	return x.MessageID, x.ChatID
}

Why bother at all? Well, it allows you to do things like this:

// just two integer columns in the database
var msgs []tele.StoredMessage
db.Find(&msgs) // gorm syntax

for _, msg := range msgs {
	bot.Edit(&msg, "Updated text")
	// or
	bot.Delete(&msg)
}

I find it incredibly neat. Worth noting, at this point of time there exists another method in the Edit family, EditCaption() which is of a pretty rare use, so I didn't bother including it to Edit(), just like I did with SendAlbum() as it would inevitably lead to unnecessary complications.

var m *Message

// change caption of a photo, audio, etc.
bot.EditCaption(m, "new caption")

Keyboards

Telebot supports both kinds of keyboards Telegram provides: reply and inline keyboards. Any button can also act as endpoints for Handle().

var (
	// Universal markup builders.
	menu     = &tele.ReplyMarkup{ResizeKeyboard: true}
	selector = &tele.ReplyMarkup{}

	// Reply buttons.
	btnHelp     = menu.Text("ℹ Help")
	btnSettings = menu.Text("⚙ Settings")

	// Inline buttons.
	//
	// Pressing it will cause the client to
	// send the bot a callback.
	//
	// Make sure Unique stays unique as per button kind
	// since it's required for callback routing to work.
	//
	btnPrev = selector.Data("⬅", "prev", ...)
	btnNext = selector.Data("➡", "next", ...)
)

menu.Reply(
	menu.Row(btnHelp),
	menu.Row(btnSettings),
)
selector.Inline(
	selector.Row(btnPrev, btnNext),
)

b.Handle("/start", func(c tele.Context) error {
	return c.Send("Hello!", menu)
})

// On reply button pressed (message)
b.Handle(&btnHelp, func(c tele.Context) error {
	return c.Edit("Here is some help: ...")
})

// On inline button pressed (callback)
b.Handle(&btnPrev, func(c tele.Context) error {
	return c.Respond()
})

You can use markup constructor for every type of possible button:

r := b.NewMarkup()

// Reply buttons:
r.Text("Hello!")
r.Contact("Send phone number")
r.Location("Send location")
r.Poll(tele.PollQuiz)

// Inline buttons:
r.Data("Show help", "help") // data is optional
r.Data("Delete item", "delete", item.ID)
r.URL("Visit", "https://google.com")
r.Query("Search", query)
r.QueryChat("Share", query)
r.Login("Login", &tele.Login{...})

Inline mode

So if you want to handle incoming inline queries you better plug the tele.OnQuery endpoint and then use the Answer() method to send a list of inline queries back. I think at the time of writing, Telebot supports all of the provided result types (but not the cached ones). This is what it looks like:

b.Handle(tele.OnQuery, func(c tele.Context) error {
	urls := []string{
		"http://photo.jpg",
		"http://photo2.jpg",
	}

	results := make(tele.Results, len(urls)) // []tele.Result
	for i, url := range urls {
		result := &tele.PhotoResult{
			URL:      url,
			ThumbURL: url, // required for photos
		}

		results[i] = result
		// needed to set a unique string ID for each result
		results[i].SetResultID(strconv.Itoa(i))
	}

	return c.Answer(&tele.QueryResponse{
		Results:   results,
		CacheTime: 60, // a minute
	})
})

There's not much to talk about really. It also supports some form of authentication through deep-linking. For that, use fields SwitchPMText and SwitchPMParameter of QueryResponse.

Contributing

  1. Fork it
  2. Clone v3: git clone -b v3 https://github.com/tucnak/telebot
  3. Create your feature branch: git checkout -b v3-feature
  4. Make changes and add them: git add .
  5. Commit: git commit -m "add some feature"
  6. Push: git push origin v3-feature
  7. Pull request

License

Telebot is distributed under MIT.

Documentation

Overview

Package telebot is a framework for Telegram bots.

Example:

package main

import (
	"time"
	tele "github.com/jxo-me/gfbot"
)

func main() {
	b, err := tele.NewBot(tele.Settings{
		Token:  "...",
		Poller: &tele.LongPoller{Timeout: 10 * time.Second},
	})
	if err != nil {
		return
	}

	b.Handle("/start", func(c tele.Context) error {
		return c.Send("Hello world!")
	})

	b.Start()
}

Index

Constants

View Source
const (
	// Basic message handlers.
	OnText                 = "\atext"
	OnEdited               = "\aedited"
	OnPhoto                = "\aphoto"
	OnAudio                = "\aaudio"
	OnAnimation            = "\aanimation"
	OnDocument             = "\adocument"
	OnSticker              = "\asticker"
	OnVideo                = "\avideo"
	OnVoice                = "\avoice"
	OnVideoNote            = "\avideo_note"
	OnContact              = "\acontact"
	OnLocation             = "\alocation"
	OnVenue                = "\avenue"
	OnDice                 = "\adice"
	OnInvoice              = "\ainvoice"
	OnPayment              = "\apayment"
	OnGame                 = "\agame"
	OnPoll                 = "\apoll"
	OnPollAnswer           = "\apoll_answer"
	OnPinned               = "\apinned"
	OnChannelPost          = "\achannel_post"
	OnEditedChannelPost    = "\aedited_channel_post"
	OnTopicCreated         = "\atopic_created"
	OnTopicReopened        = "\atopic_reopened"
	OnTopicClosed          = "\atopic_closed"
	OnTopicEdited          = "\atopic_edited"
	OnGeneralTopicHidden   = "\ageneral_topic_hidden"
	OnGeneralTopicUnhidden = "\ageneral_topic_unhidden"
	OnWriteAccessAllowed   = "\awrite_access_allowed"

	OnAddedToGroup      = "\aadded_to_group"
	OnUserJoined        = "\auser_joined"
	OnUserLeft          = "\auser_left"
	OnUserShared        = "\auser_shared"
	OnChatShared        = "\achat_shared"
	OnNewGroupTitle     = "\anew_chat_title"
	OnNewGroupPhoto     = "\anew_chat_photo"
	OnGroupPhotoDeleted = "\achat_photo_deleted"
	OnGroupCreated      = "\agroup_created"
	OnSuperGroupCreated = "\asupergroup_created"
	OnChannelCreated    = "\achannel_created"

	// OnMigration happens when group switches to
	// a supergroup. You might want to update
	// your internal references to this chat
	// upon switching as its ID will change.
	OnMigration = "\amigration"

	OnMedia           = "\amedia"
	OnCallback        = "\acallback"
	OnQuery           = "\aquery"
	OnInlineResult    = "\ainline_result"
	OnShipping        = "\ashipping_query"
	OnCheckout        = "\apre_checkout_query"
	OnMyChatMember    = "\amy_chat_member"
	OnChatMember      = "\achat_member"
	OnChatJoinRequest = "\achat_join_request"
	OnProximityAlert  = "\aproximity_alert_triggered"
	OnAutoDeleteTimer = "\amessage_auto_delete_timer_changed"
	OnWebApp          = "\aweb_app"

	OnVideoChatStarted      = "\avideo_chat_started"
	OnVideoChatEnded        = "\avideo_chat_ended"
	OnVideoChatParticipants = "\avideo_chat_participants_invited"
	OnVideoChatScheduled    = "\avideo_chat_scheduled"

	OnBoost        = "\aboost_updated"
	OnBoostRemoved = "\aboost_removed"
)

These are one of the possible events Handle() can deal with.

For convenience, all Telebot-provided endpoints start with an "alert" character \a.

View Source
const DefaultApiURL = "https://api.telegram.org"
View Source
const DefaultMaxRoutines = 50

Variables

View Source
var (
	ErrAuthDateMissing  = errors.New("auth_date is missing")
	ErrSignMissing      = errors.New("sign is missing")
	ErrSignInvalid      = errors.New("sign is invalid")
	ErrUnexpectedFormat = errors.New("init data has unexpected format")
	ErrExpired          = errors.New("init data is expired")
)

webapp errors

View Source
var (
	ErrTooLarge     = NewError(400, "Request Entity Too Large")
	ErrUnauthorized = NewError(401, "Unauthorized")
	ErrNotFound     = NewError(404, "Not Found")
	ErrInternal     = NewError(500, "Internal Server Error")
)

General errors

View Source
var (
	ErrBadButtonData          = NewError(400, "Bad Request: BUTTON_DATA_INVALID")
	ErrBadUserID              = NewError(400, "Bad Request: USER_ID_INVALID")
	ErrBadPollOptions         = NewError(400, "Bad Request: expected an Array of String as options")
	ErrBadURLContent          = NewError(400, "Bad Request: failed to get HTTP URL content")
	ErrCantEditMessage        = NewError(400, "Bad Request: message can't be edited")
	ErrCantRemoveOwner        = NewError(400, "Bad Request: can't remove chat owner")
	ErrCantUploadFile         = NewError(400, "Bad Request: can't upload file by URL")
	ErrCantUseMediaInAlbum    = NewError(400, "Bad Request: can't use the media of the specified type in the album")
	ErrChatAboutNotModified   = NewError(400, "Bad Request: chat description is not modified")
	ErrChatNotFound           = NewError(400, "Bad Request: chat not found")
	ErrEmptyChatID            = NewError(400, "Bad Request: chat_id is empty")
	ErrEmptyMessage           = NewError(400, "Bad Request: message must be non-empty")
	ErrEmptyText              = NewError(400, "Bad Request: text is empty")
	ErrFailedImageProcess     = NewError(400, "Bad Request: IMAGE_PROCESS_FAILED", "Image process failed")
	ErrGroupMigrated          = NewError(400, "Bad Request: group chat was upgraded to a supergroup chat")
	ErrMessageNotModified     = NewError(400, "Bad Request: message is not modified")
	ErrNoRightsToDelete       = NewError(400, "Bad Request: message can't be deleted")
	ErrNoRightsToRestrict     = NewError(400, "Bad Request: not enough rights to restrict/unrestrict chat member")
	ErrNoRightsToSend         = NewError(400, "Bad Request: have no rights to send a message")
	ErrNoRightsToSendGifs     = NewError(400, "Bad Request: CHAT_SEND_GIFS_FORBIDDEN", "sending GIFS is not allowed in this chat")
	ErrNoRightsToSendPhoto    = NewError(400, "Bad Request: not enough rights to send photos to the chat")
	ErrNoRightsToSendStickers = NewError(400, "Bad Request: not enough rights to send stickers to the chat")
	ErrNotFoundToDelete       = NewError(400, "Bad Request: message to delete not found")
	ErrNotFoundToForward      = NewError(400, "Bad Request: message to forward not found")
	ErrNotFoundToReply        = NewError(400, "Bad Request: reply message not found")
	ErrQueryTooOld            = NewError(400, "Bad Request: query is too old and response timeout expired or query ID is invalid")
	ErrSameMessageContent     = NewError(400, "Bad Request: message is not modified: specified new message content and reply markup are exactly the same as a current content and reply markup of the message")
	ErrStickerEmojisInvalid   = NewError(400, "Bad Request: invalid sticker emojis")
	ErrStickerSetInvalid      = NewError(400, "Bad Request: STICKERSET_INVALID", "Stickerset is invalid")
	ErrStickerSetInvalidName  = NewError(400, "Bad Request: invalid sticker set name is specified")
	ErrStickerSetNameOccupied = NewError(400, "Bad Request: sticker set name is already occupied")
	ErrTooLongMarkup          = NewError(400, "Bad Request: reply markup is too long")
	ErrTooLongMessage         = NewError(400, "Bad Request: message is too long")
	ErrUserIsAdmin            = NewError(400, "Bad Request: user is an administrator of the chat")
	ErrWrongFileID            = NewError(400, "Bad Request: wrong file identifier/HTTP URL specified")
	ErrWrongFileIDCharacter   = NewError(400, "Bad Request: wrong remote file id specified: Wrong character in the string")
	ErrWrongFileIDLength      = NewError(400, "Bad Request: wrong remote file id specified: Wrong string length")
	ErrWrongFileIDPadding     = NewError(400, "Bad Request: wrong remote file id specified: Wrong padding in the string")
	ErrWrongFileIDSymbol      = NewError(400, "Bad Request: wrong remote file id specified: can't unserialize it. Wrong last symbol")
	ErrWrongTypeOfContent     = NewError(400, "Bad Request: wrong type of the web page content")
	ErrWrongURL               = NewError(400, "Bad Request: wrong HTTP URL specified")
	ErrForwardMessage         = NewError(400, "Bad Request: administrators of the chat restricted message forwarding")
	ErrUserAlreadyParticipant = NewError(400, "Bad Request: USER_ALREADY_PARTICIPANT", "User is already a participant")
	ErrHideRequesterMissing   = NewError(400, "Bad Request: HIDE_REQUESTER_MISSING")
	ErrChannelsTooMuch        = NewError(400, "Bad Request: CHANNELS_TOO_MUCH")
	ErrChannelsTooMuchUser    = NewError(400, "Bad Request: USER_CHANNELS_TOO_MUCH")
)

Bad request errors

View Source
var (
	ErrBlockedByUser        = NewError(403, "Forbidden: bot was blocked by the user")
	ErrKickedFromGroup      = NewError(403, "Forbidden: bot was kicked from the group chat")
	ErrKickedFromSuperGroup = NewError(403, "Forbidden: bot was kicked from the supergroup chat")
	ErrKickedFromChannel    = NewError(403, "Forbidden: bot was kicked from the channel chat")
	ErrNotStartedByUser     = NewError(403, "Forbidden: bot can't initiate conversation with a user")
	ErrUserIsDeactivated    = NewError(403, "Forbidden: user is deactivated")
	ErrNotChannelMember     = NewError(403, "Forbidden: bot is not a member of the channel chat")
)

Forbidden errors

View Source
var (
	Cube = &Dice{Type: "🎲"}
	Dart = &Dice{Type: "🎯"}
	Ball = &Dice{Type: "🏀"}
	Goal = &Dice{Type: "⚽"}
	Slot = &Dice{Type: "🎰"}
	Bowl = &Dice{Type: "🎳"}
)
View Source
var (
	ErrBadRecipient    = errors.New("telebot: recipient is nil")
	ErrUnsupportedWhat = errors.New("telebot: unsupported what argument")
	ErrCouldNotUpdate  = errors.New("telebot: could not fetch new updates")
	ErrTrueResult      = errors.New("telebot: result is True")
	ErrBadContext      = errors.New("telebot: context does not contain message")
)
View Source
var AllowedUpdates = []string{
	"message",
	"edited_message",
	"channel_post",
	"edited_channel_post",
	"message_reaction",
	"message_reaction_count",
	"inline_query",
	"chosen_inline_result",
	"callback_query",
	"shipping_query",
	"pre_checkout_query",
	"poll",
	"poll_answer",
	"my_chat_member",
	"chat_member",
	"chat_join_request",
	"chat_boost",
	"removed_chat_boost",
}
View Source
var KeyNotFound = errors.New("conversation key not found")
View Source
var SupportedCurrencies = make(map[string]Currency)

Functions

func Err

func Err(s string) error

Err returns Error instance by given description.

func ErrIs added in v0.1.17

func ErrIs(s string, err error) bool

ErrIs checks if the error with given description matches an error err.

func Flag added in v0.1.17

func Flag(b bool) *bool

Flag returns a pointer to the given bool. Useful for passing the three-state flags to a Bot API. For example, see ReplyRecipient type.

func Forever

func Forever() int64

Forever is a ExpireUnixtime of "forever" banning.

func Sign added in v0.1.14

func Sign(payload map[string]string, key string, authDate time.Time) string

Sign signs passed payload using specified key. Function removes such technical parameters as "hash" and "auth_date".

func SignQueryString added in v0.1.14

func SignQueryString(qs, key string, authDate time.Time) (string, error)

SignQueryString signs passed query string.

func StateKey added in v0.1.15

func StateKey(ctx Context, strategy KeyStrategy) string

func Validate added in v0.1.17

func Validate(initData, token string, expIn time.Duration) error

Validate validates passed init data. This method expects initData to be passed in the exact raw format as it could be found in window.Telegram.WebApp.initData. Returns true in case init data is signed correctly, and it is allowed to trust it.

Current code is implementation of algorithmic code described in official docs: https://core.telegram.org/bots/webapps#validating-data-received-via-the-web-app

initData - init data passed from application; token - TWA bot secret token which was used to create init data; expIn - maximum init data lifetime. It is strongly recommended to use this parameter. In case, exp duration is less than or equal to 0, function does not check if parameters are expired.

Types

type Album

type Album []Inputtable

Album lets you group multiple media into a single message.

func (Album) SetCaption added in v0.1.17

func (a Album) SetCaption(caption string)

type Animation

type Animation struct {
	File

	Width    int `json:"width"`
	Height   int `json:"height"`
	Duration int `json:"duration,omitempty"`

	// (Optional)
	Caption   string `json:"caption,omitempty"`
	Thumbnail *Photo `json:"thumbnail,omitempty"`
	MIME      string `json:"mime_type,omitempty"`
	FileName  string `json:"file_name,omitempty"`
}

Animation object represents a animation file.

func (*Animation) InputMedia

func (a *Animation) InputMedia() InputMedia

func (*Animation) MediaFile

func (a *Animation) MediaFile() *File

func (*Animation) MediaType

func (a *Animation) MediaType() string

func (*Animation) Send

func (a *Animation) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers animation through bot b to recipient.

type ArticleResult

type ArticleResult struct {
	ResultBase

	// Title of the result.
	Title string `json:"title"`

	// Message text. Shortcut (and mutually exclusive to) specifying
	// InputMessageContent.
	Text string `json:"message_text,omitempty"`

	// Optional. URL of the result.
	URL string `json:"url,omitempty"`

	// Optional. Pass True, if you don't want the URL to be shown in the message.
	HideURL bool `json:"hide_url,omitempty"`

	// Optional. Short description of the result.
	Description string `json:"description,omitempty"`

	// Optional. URL of the thumbnail for the result.
	ThumbURL string `json:"thumbnail_url,omitempty"`

	// Optional. Width of the thumbnail for the result.
	ThumbWidth int `json:"thumbnail_width,omitempty"`

	// Optional. Height of the thumbnail for the result.
	ThumbHeight int `json:"thumbnail_height,omitempty"`
}

ArticleResult represents a link to an article or web page.

type Audio

type Audio struct {
	File

	Duration int `json:"duration,omitempty"`

	// (Optional)
	Caption   string `json:"caption,omitempty"`
	Thumbnail *Photo `json:"thumbnail,omitempty"`
	Title     string `json:"title,omitempty"`
	Performer string `json:"performer,omitempty"`
	MIME      string `json:"mime_type,omitempty"`
	FileName  string `json:"file_name,omitempty"`
}

Audio object represents an audio file.

func (*Audio) InputMedia

func (a *Audio) InputMedia() InputMedia

func (*Audio) MediaFile

func (a *Audio) MediaFile() *File

func (*Audio) MediaType

func (a *Audio) MediaType() string

func (*Audio) Send

func (a *Audio) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers media through bot b to recipient.

type AudioResult

type AudioResult struct {
	ResultBase

	// Title.
	Title string `json:"title"`

	// A valid URL for the audio file.
	URL string `json:"audio_url"`

	// Optional. Performer.
	Performer string `json:"performer,omitempty"`

	// Optional. Audio duration in seconds.
	Duration int `json:"audio_duration,omitempty"`

	// Optional. Caption, 0-1024 characters.
	Caption string `json:"caption,omitempty"`

	// If Cache != "", it'll be used instead
	Cache string `json:"audio_file_id,omitempty"`
}

AudioResult represents a link to an mp3 audio file.

type AutoDeleteTimer

type AutoDeleteTimer struct {
	Unixtime int `json:"message_auto_delete_time"`
}

AutoDeleteTimer represents a service message about a change in auto-delete timer settings.

type Boost added in v0.1.17

type Boost struct {
	// Unique identifier of the boost.
	ID string `json:"boost_id"`

	// Point in time (Unix timestamp) when the chat was boosted.
	AddUnixtime int64 `json:"add_date"`

	// Point in time (Unix timestamp) when the boost will automatically expire,
	// unless the booster's Telegram Premium subscription is prolonged.
	ExpirationUnixtime int64 `json:"expiration_date"`

	// Source of the added boost.
	Source *BoostSource `json:"source"`
}

Boost contains information about a chat boost.

func (*Boost) AddDate added in v0.1.17

func (c *Boost) AddDate() time.Time

AddDate returns the moment of time when the chat has been boosted in local time.

func (*Boost) ExpirationDate added in v0.1.17

func (c *Boost) ExpirationDate() time.Time

ExpirationDate returns the moment of time when the boost of the channel will expire in local time.

type BoostAdded added in v0.1.17

type BoostAdded struct {
	// Number of boosts added by the user.
	Count int `json:"boost_count"`
}

BoostAdded represents a service message about a user boosting a chat.

type BoostRemoved added in v0.1.17

type BoostRemoved struct {
	// Chat which was boosted.
	Chat *Chat `json:"chat"`

	// Unique identifier of the boost.
	BoostID string `json:"boost_id"`

	// Point in time (Unix timestamp) when the boost was removed.
	RemoveUnixtime int64 `json:"remove_date"`

	// Source of the removed boost.
	Source *BoostSource `json:"source"`
}

BoostRemoved represents a boost removed from a chat.

type BoostSource added in v0.1.17

type BoostSource struct {
	// Source of the boost, always (“premium”, “gift_code”, “giveaway”).
	Source BoostSourceType `json:"source"`

	// User that boosted the chat.
	Booster *User `json:"user"`

	// Identifier of a message in the chat with the giveaway; the message
	// could have been deleted already. May be 0 if the message isn't sent yet.
	GiveawayMessageID int `json:"giveaway_message_id,omitempty"`

	// (Optional) True, if the giveaway was completed, but there was
	// no user to win the prize.
	Unclaimed bool `json:"is_unclaimed,omitempty"`
}

BoostSource describes the source of a chat boost.

type BoostSourceType added in v0.1.17

type BoostSourceType = string

BoostSourceType describes a type of boost.

const (
	BoostPremium  BoostSourceType = "premium"
	BoostGiftCode BoostSourceType = "gift_code"
	BoostGiveaway BoostSourceType = "giveaway"
)

type BoostUpdated added in v0.1.17

type BoostUpdated struct {
	// Chat which was boosted.
	Chat *Chat `json:"chat"`

	// Information about the chat boost.
	Boost *Boost `json:"boost"`
}

BoostUpdated represents a boost added to a chat or changed.

type Bot

type Bot struct {
	Me      *User
	Token   string
	URL     string
	Updates chan Update
	Poller  Poller
	// contains filtered or unexported fields
}

Bot represents a separate Telegram bot instance.

func NewBot

func NewBot(pref Settings) (*Bot, error)

NewBot does try to build a Bot with token `token`, which is a secret API key assigned to particular bot.

func (*Bot) Accept

func (b *Bot) Accept(query *PreCheckoutQuery, errorMessage ...string) error

Accept finalizes the deal.

func (*Bot) AddStickerToSet added in v0.1.17

func (b *Bot) AddStickerToSet(of Recipient, name string, sticker InputSticker) error

AddStickerToSet adds a new sticker to the existing sticker set.

func (*Bot) AdminsOf

func (b *Bot) AdminsOf(chat *Chat) ([]ChatMember, error)

AdminsOf returns a member list of chat admins.

On success, returns an Array of ChatMember objects that contains information about all chat administrators except other bots.

If the chat is a group or a supergroup and no administrators were appointed, only the creator will be returned.

func (*Bot) Answer

func (b *Bot) Answer(query *Query, resp *QueryResponse) error

Answer sends a response for a given inline query. A query can only be responded to once, subsequent attempts to respond to the same query will result in an error.

func (*Bot) AnswerWebApp

func (b *Bot) AnswerWebApp(query *Query, r Result) (*WebAppMessage, error)

AnswerWebApp sends a response for a query from Web App and returns information about an inline message sent by a Web App on behalf of a user

func (*Bot) ApproveJoinRequest

func (b *Bot) ApproveJoinRequest(chat Recipient, user *User) error

ApproveJoinRequest approves a chat join request.

func (*Bot) Ban

func (b *Bot) Ban(chat *Chat, member *ChatMember, revokeMessages ...bool) error

Ban will ban user from chat until `member.RestrictedUntil`.

func (*Bot) BanSenderChat

func (b *Bot) BanSenderChat(chat *Chat, sender Recipient) error

BanSenderChat will use this method to ban a channel chat in a supergroup or a channel. Until the chat is unbanned, the owner of the banned chat won't be able to send messages on behalf of any of their channels.

func (*Bot) ChatByID

func (b *Bot) ChatByID(id int64) (*Chat, error)

ChatByID fetches chat info of its ID.

Including current name of the user for one-on-one conversations, current username of a user, group or channel, etc.

func (*Bot) ChatByUsername

func (b *Bot) ChatByUsername(name string) (*Chat, error)

ChatByUsername fetches chat info by its username.

func (*Bot) ChatMemberOf

func (b *Bot) ChatMemberOf(chat, user Recipient) (*ChatMember, error)

ChatMemberOf returns information about a member of a chat.

func (*Bot) Close

func (b *Bot) Close() (bool, error)

Close closes the bot instance before moving it from one local server to another.

func (*Bot) CloseGeneralTopic added in v0.1.17

func (b *Bot) CloseGeneralTopic(chat *Chat) error

CloseGeneralTopic closes an open 'General' topic in a forum supergroup chat.

func (*Bot) CloseTopic added in v0.1.17

func (b *Bot) CloseTopic(chat *Chat, topic *Topic) error

CloseTopic closes an open topic in a forum supergroup chat.

func (*Bot) Commands

func (b *Bot) Commands(opts ...interface{}) ([]Command, error)

Commands returns the current list of the bot's commands for the given scope and user language.

func (*Bot) Copy

func (b *Bot) Copy(to Recipient, msg Editable, options ...interface{}) (*Message, error)

Copy behaves just like Forward() but the copied message doesn't have a link to the original message (see Bots API).

This function will panic upon nil Editable.

func (*Bot) CopyMany added in v0.1.18

func (b *Bot) CopyMany(to Recipient, msgs []Editable, opts ...*SendOptions) ([]Message, error)

CopyMany this method makes a copy of messages of any kind. If some of the specified messages can't be found or copied, they are skipped. Service messages, giveaway messages, giveaway winners messages, and invoice messages can't be copied. A quiz poll can be copied only if the value of the field correct_option_id is known to the bot. The method is analogous to the method forwardMessages, but the copied messages don't have a link to the original message. Album grouping is kept for copied messages.

func (b *Bot) CreateInviteLink(chat Recipient, link *ChatInviteLink) (*ChatInviteLink, error)

CreateInviteLink creates an additional invite link for a chat.

func (b *Bot) CreateInvoiceLink(i Invoice) (string, error)

CreateInvoiceLink creates a link for a payment invoice.

func (*Bot) CreateStickerSet

func (b *Bot) CreateStickerSet(of Recipient, set *StickerSet) error

CreateStickerSet creates a new sticker set.

func (*Bot) CreateTopic added in v0.1.17

func (b *Bot) CreateTopic(chat *Chat, topic *Topic) (*Topic, error)

CreateTopic creates a topic in a forum supergroup chat.

func (*Bot) CurrentUsage added in v0.1.15

func (b *Bot) CurrentUsage() int

CurrentUsage returns the current number of concurrently processing updates.

func (*Bot) CustomEmojiStickers

func (b *Bot) CustomEmojiStickers(ids []string) ([]Sticker, error)

CustomEmojiStickers returns the information about custom emoji stickers by their ids.

func (*Bot) DeclineJoinRequest

func (b *Bot) DeclineJoinRequest(chat Recipient, user *User) error

DeclineJoinRequest declines a chat join request.

func (*Bot) DefaultRights

func (b *Bot) DefaultRights(forChannels bool) (*Rights, error)

DefaultRights returns the current default administrator rights of the bot.

func (*Bot) Delete

func (b *Bot) Delete(msg Editable) error

Delete removes the message, including service messages. This function will panic upon nil Editable.

  • A message can only be deleted if it was sent less than 48 hours ago.
  • A dice message in a private chat can only be deleted if it was sent more than 24 hours ago.
  • Bots can delete outgoing messages in private chats, groups, and supergroups.
  • Bots can delete incoming messages in private chats.
  • Bots granted can_post_messages permissions can delete outgoing messages in channels.
  • If the bot is an administrator of a group, it can delete any message there.
  • If the bot has can_delete_messages permission in a supergroup or a channel, it can delete any message there.

func (*Bot) DeleteCommands

func (b *Bot) DeleteCommands(opts ...interface{}) error

DeleteCommands deletes the list of the bot's commands for the given scope and user language.

func (*Bot) DeleteGroupPhoto

func (b *Bot) DeleteGroupPhoto(chat *Chat) error

DeleteGroupPhoto should be used to just remove group photo.

func (*Bot) DeleteGroupStickerSet

func (b *Bot) DeleteGroupStickerSet(chat *Chat) error

DeleteGroupStickerSet should be used to just remove group sticker set.

func (*Bot) DeleteMany added in v0.1.18

func (b *Bot) DeleteMany(msgs []Editable) error

DeleteMany deletes multiple messages simultaneously. If some of the specified messages can't be found, they are skipped.

func (*Bot) DeleteSticker

func (b *Bot) DeleteSticker(sticker string) error

DeleteSticker deletes a sticker from a set created by the bot.

func (*Bot) DeleteStickerSet added in v0.1.17

func (b *Bot) DeleteStickerSet(name string) error

DeleteStickerSet deletes a sticker set that was created by the bot.

func (*Bot) DeleteTopic added in v0.1.17

func (b *Bot) DeleteTopic(chat *Chat, topic *Topic) error

DeleteTopic deletes a forum topic along with all its messages in a forum supergroup chat.

func (*Bot) Download

func (b *Bot) Download(file *File, localFilename string) error

Download saves the file from Telegram servers locally. Maximum file size to download is 20 MB.

func (*Bot) Edit

func (b *Bot) Edit(msg Editable, what interface{}, opts ...interface{}) (*Message, error)

Edit is magic, it lets you change already sent message. This function will panic upon nil Editable.

If edited message is sent by the bot, returns it, otherwise returns nil and ErrTrueResult.

Use cases:

b.Edit(m, m.Text, newMarkup)
b.Edit(m, "new <b>text</b>", tele.ModeHTML)
b.Edit(m, &tele.ReplyMarkup{...})
b.Edit(m, &tele.Photo{File: ...})
b.Edit(m, tele.Location{42.1337, 69.4242})
b.Edit(c, "edit inline message from the callback")
b.Edit(r, "edit message from chosen inline result")

func (*Bot) EditCaption

func (b *Bot) EditCaption(msg Editable, caption string, opts ...interface{}) (*Message, error)

EditCaption edits already sent photo caption with known recipient and message id. This function will panic upon nil Editable.

If edited message is sent by the bot, returns it, otherwise returns nil and ErrTrueResult.

func (*Bot) EditGeneralTopic added in v0.1.17

func (b *Bot) EditGeneralTopic(chat *Chat, topic *Topic) error

EditGeneralTopic edits name of the 'General' topic in a forum supergroup chat.

func (b *Bot) EditInviteLink(chat Recipient, link *ChatInviteLink) (*ChatInviteLink, error)

EditInviteLink edits a non-primary invite link created by the bot.

func (*Bot) EditMedia

func (b *Bot) EditMedia(msg Editable, media Inputtable, opts ...interface{}) (*Message, error)

EditMedia edits already sent media with known recipient and message id. This function will panic upon nil Editable.

If edited message is sent by the bot, returns it, otherwise returns nil and ErrTrueResult.

Use cases:

b.EditMedia(m, &tele.Photo{File: tele.FromDisk("chicken.jpg")})
b.EditMedia(m, &tele.Video{File: tele.FromURL("http://video.mp4")})

func (*Bot) EditReplyMarkup

func (b *Bot) EditReplyMarkup(msg Editable, markup *ReplyMarkup) (*Message, error)

EditReplyMarkup edits reply markup of already sent message. This function will panic upon nil Editable. Pass nil or empty ReplyMarkup to delete it from the message.

If edited message is sent by the bot, returns it, otherwise returns nil and ErrTrueResult.

func (*Bot) EditTopic added in v0.1.17

func (b *Bot) EditTopic(chat *Chat, topic *Topic) error

EditTopic edits name and icon of a topic in a forum supergroup chat.

func (*Bot) File

func (b *Bot) File(file *File) (io.ReadCloser, error)

File gets a file from Telegram servers.

func (*Bot) FileByID

func (b *Bot) FileByID(fileID string) (File, error)

FileByID returns full file object including File.FilePath, allowing you to download the file from the server.

Usually, Telegram-provided File objects miss FilePath so you might need to perform an additional request to fetch them.

func (*Bot) Forward

func (b *Bot) Forward(to Recipient, msg Editable, opts ...interface{}) (*Message, error)

Forward behaves just like Send() but of all options it only supports Silent (see Bots API). This function will panic upon nil Editable.

func (*Bot) ForwardMany added in v0.1.18

func (b *Bot) ForwardMany(to Recipient, msgs []Editable, opts ...*SendOptions) ([]Message, error)

ForwardMany method forwards multiple messages of any kind. If some of the specified messages can't be found or forwarded, they are skipped. Service messages and messages with protected content can't be forwarded. Album grouping is kept for forwarded messages.

func (*Bot) GameScores

func (b *Bot) GameScores(user Recipient, msg Editable) ([]GameHighScore, error)

GameScores returns the score of the specified user and several of their neighbors in a game.

This function will panic upon nil Editable.

Currently, it returns scores for the target user, plus two of their closest neighbors on each side. Will also return the top three users if the user and his neighbors are not among them.

func (*Bot) Group

func (b *Bot) Group() *Group

Group returns a new group.

func (*Bot) Handle

func (b *Bot) Handle(endpoint interface{}, h IHandler, m ...MiddlewareFunc)

Handle lets you set the handler for some command name or one of the supported endpoints. It also applies middleware if such passed to the function.

Example:

b.Handle("/start", func (c tele.Context) error {
	return c.Reply("Hello!")
})

b.Handle(&inlineButton, func (c tele.Context) error {
	return c.Respond(&tele.CallbackResponse{Text: "Hello!"})
})

Middleware usage:

b.Handle("/ban", onBan, middleware.Whitelist(ids...))

func (*Bot) HideGeneralTopic added in v0.1.17

func (b *Bot) HideGeneralTopic(chat *Chat) error

HideGeneralTopic hides the 'General' topic in a forum supergroup chat.

func (*Bot) Hook added in v0.1.16

func (b *Bot) Hook() IHook
func (b *Bot) InviteLink(chat *Chat) (string, error)

InviteLink should be used to export chat's invite link.

func (*Bot) Leave

func (b *Bot) Leave(chat Recipient) error

Leave makes bot leave a group, supergroup or channel.

func (*Bot) Len

func (b *Bot) Len(chat *Chat) (int, error)

Len returns the number of members in a chat.

func (*Bot) Logout

func (b *Bot) Logout() (bool, error)

Logout logs out from the cloud Bot API server before launching the bot locally.

func (*Bot) MaxUsage added in v0.1.15

func (b *Bot) MaxUsage() int

MaxUsage returns the maximum number of concurrently processing updates.

func (*Bot) MenuButton

func (b *Bot) MenuButton(chat *User) (*MenuButton, error)

MenuButton returns the current value of the bot's menu button in a private chat, or the default menu button.

func (*Bot) MyDescription added in v0.1.17

func (b *Bot) MyDescription(language string) (*BotInfo, error)

MyDescription the current bot description for the given user language.

func (*Bot) MyName added in v0.1.17

func (b *Bot) MyName(language string) (*BotInfo, error)

MyName returns the current bot name for the given user language.

func (*Bot) MyShortDescription added in v0.1.17

func (b *Bot) MyShortDescription(language string) (*BotInfo, error)

MyShortDescription the current bot short description for the given user language.

func (*Bot) NewContext

func (b *Bot) NewContext(u Update) Context

NewContext returns a new native context object, field by the passed update.

func (*Bot) NewMarkup

func (b *Bot) NewMarkup() *ReplyMarkup

NewMarkup simply returns newly created markup instance.

func (*Bot) Notify

func (b *Bot) Notify(to Recipient, action ChatAction, threadID ...int) error

Notify updates the chat action for recipient.

Chat action is a status message that recipient would see where you typically see "Harry is typing" status message. The only difference is that bots' chat actions live only for 5 seconds and die just once the client receives a message from the bot.

Currently, Telegram supports only a narrow range of possible actions, these are aligned as constants of this package.

func (*Bot) OnError

func (b *Bot) OnError(err error, c Context)

func (*Bot) Pin

func (b *Bot) Pin(msg Editable, opts ...interface{}) error

Pin pins a message in a supergroup or a channel.

It supports Silent option. This function will panic upon nil Editable.

func (*Bot) ProcessUpdate

func (b *Bot) ProcessUpdate(u Update)

ProcessUpdate processes a single incoming update. A started bot calls this function automatically.

func (*Bot) ProfilePhotosOf

func (b *Bot) ProfilePhotosOf(user *User) ([]Photo, error)

ProfilePhotosOf returns list of profile pictures for a user.

func (*Bot) Promote

func (b *Bot) Promote(chat *Chat, member *ChatMember) error

Promote lets you update member's admin rights, such as:

  • can change info
  • can post messages
  • can edit messages
  • can delete messages
  • can invite users
  • can restrict members
  • can pin messages
  • can promote members

func (*Bot) Raw

func (b *Bot) Raw(method string, payload interface{}) ([]byte, error)

Raw lets you call any method of Bot API manually. It also handles API errors, so you only need to unwrap result field from json data.

func (*Bot) React added in v0.1.17

func (b *Bot) React(to Recipient, msg Editable, opts ...ReactionOptions) error

React changes the chosen reactions on a message. Service messages can't be reacted to. Automatically forwarded messages from a channel to its discussion group have the same available reactions as messages in the channel.

func (*Bot) RemoveWebhook

func (b *Bot) RemoveWebhook(dropPending ...bool) error

RemoveWebhook removes webhook integration.

func (*Bot) ReopenGeneralTopic added in v0.1.17

func (b *Bot) ReopenGeneralTopic(chat *Chat) error

ReopenGeneralTopic reopens a closed 'General' topic in a forum supergroup chat.

func (*Bot) ReopenTopic added in v0.1.17

func (b *Bot) ReopenTopic(chat *Chat, topic *Topic) error

ReopenTopic reopens a closed topic in a forum supergroup chat.

func (*Bot) Reply

func (b *Bot) Reply(to *Message, what interface{}, opts ...interface{}) (*Message, error)

Reply behaves just like Send() with an exception of "reply-to" indicator. This function will panic upon nil Message.

func (*Bot) Respond

func (b *Bot) Respond(c *Callback, resp ...*CallbackResponse) error

Respond sends a response for a given callback query. A callback can only be responded to once, subsequent attempts to respond to the same callback will result in an error.

Example:

b.Respond(c)
b.Respond(c, response)

func (*Bot) Restrict

func (b *Bot) Restrict(chat *Chat, member *ChatMember) error

Restrict lets you restrict a subset of member's rights until member.RestrictedUntil, such as:

  • can send messages
  • can send media
  • can send other
  • can add web page previews
func (b *Bot) RevokeInviteLink(chat Recipient, link string) (*ChatInviteLink, error)

RevokeInviteLink revokes an invite link created by the bot.

func (*Bot) Send

func (b *Bot) Send(to Recipient, what interface{}, opts ...interface{}) (*Message, error)

Send accepts 2+ arguments, starting with destination chat, followed by some Sendable (or string!) and optional send options.

NOTE:

Since most arguments are of type interface{}, but have pointer
method receivers, make sure to pass them by-pointer, NOT by-value.

What is a send option exactly? It can be one of the following types:

  • *SendOptions (the actual object accepted by Telegram API)
  • *ReplyMarkup (a component of SendOptions)
  • Option (a shortcut flag for popular options)
  • ParseMode (HTML, Markdown, etc)

func (*Bot) SendAlbum

func (b *Bot) SendAlbum(to Recipient, a Album, opts ...interface{}) ([]Message, error)

SendAlbum sends multiple instances of media as a single message. To include the caption, make sure the first Inputtable of an album has it. From all existing options, it only supports tele.Silent.

func (*Bot) SetAdminTitle

func (b *Bot) SetAdminTitle(chat *Chat, user *User, title string) error

SetAdminTitle sets a custom title for an administrator. A title should be 0-16 characters length, emoji are not allowed.

func (*Bot) SetCommands

func (b *Bot) SetCommands(opts ...interface{}) error

SetCommands changes the list of the bot's commands.

func (*Bot) SetCustomEmojiStickerSetThumb added in v0.1.17

func (b *Bot) SetCustomEmojiStickerSetThumb(name, id string) error

SetCustomEmojiStickerSetThumb sets the thumbnail of a custom emoji sticker set.

func (*Bot) SetDefaultRights

func (b *Bot) SetDefaultRights(rights Rights, forChannels bool) error

SetDefaultRights changes the default administrator rights requested by the bot when it's added as an administrator to groups or channels.

func (*Bot) SetGameScore

func (b *Bot) SetGameScore(user Recipient, msg Editable, score GameHighScore) (*Message, error)

SetGameScore sets the score of the specified user in a game.

If the message was sent by the bot, returns the edited Message, otherwise returns nil and ErrTrueResult.

func (*Bot) SetGroupDescription

func (b *Bot) SetGroupDescription(chat *Chat, description string) error

SetGroupDescription should be used to update group description.

func (*Bot) SetGroupPermissions

func (b *Bot) SetGroupPermissions(chat *Chat, perms Rights) error

SetGroupPermissions sets default chat permissions for all members.

func (*Bot) SetGroupPhoto

func (b *Bot) SetGroupPhoto(chat *Chat, p *Photo) error

SetGroupPhoto should be used to update group photo.

func (*Bot) SetGroupStickerSet

func (b *Bot) SetGroupStickerSet(chat *Chat, setName string) error

SetGroupStickerSet should be used to update group's group sticker set.

func (*Bot) SetGroupTitle

func (b *Bot) SetGroupTitle(chat *Chat, title string) error

SetGroupTitle should be used to update group title.

func (*Bot) SetMenuButton

func (b *Bot) SetMenuButton(chat *User, mb interface{}) error

SetMenuButton changes the bot's menu button in a private chat, or the default menu button.

It accepts two kinds of menu button arguments:

  • MenuButtonType for simple menu buttons (default, commands)
  • MenuButton complete structure for web_app menu button type

func (*Bot) SetMyDescription added in v0.1.8

func (b *Bot) SetMyDescription(desc, language string) error

SetMyDescription change's the bot description, which is shown in the chat with the bot if the chat is empty.

func (*Bot) SetMyName added in v0.1.8

func (b *Bot) SetMyName(name, language string) error

SetMyName change's the bot name.

func (*Bot) SetMyShortDescription added in v0.1.8

func (b *Bot) SetMyShortDescription(desc, language string) error

SetMyShortDescription change's the bot short description, which is shown on the bot's profile page and is sent together with the link when users share the bot.

func (*Bot) SetStickerEmojis added in v0.1.17

func (b *Bot) SetStickerEmojis(sticker string, emojis []string) error

SetStickerEmojis changes the list of emoji assigned to a regular or custom emoji sticker.

func (*Bot) SetStickerKeywords added in v0.1.17

func (b *Bot) SetStickerKeywords(sticker string, keywords []string) error

SetStickerKeywords changes search keywords assigned to a regular or custom emoji sticker.

func (*Bot) SetStickerMaskPosition added in v0.1.17

func (b *Bot) SetStickerMaskPosition(sticker string, mask MaskPosition) error

SetStickerMaskPosition changes the mask position of a mask sticker.

func (*Bot) SetStickerPosition

func (b *Bot) SetStickerPosition(sticker string, position int) error

SetStickerPosition moves a sticker in set to a specific position.

func (*Bot) SetStickerSetThumb

func (b *Bot) SetStickerSetThumb(of Recipient, set *StickerSet) error

SetStickerSetThumb sets a thumbnail of the sticker set. Animated thumbnails can be set for animated sticker sets only.

Thumbnail must be a PNG image, up to 128 kilobytes in size and have width and height exactly 100px, or a TGS animation up to 32 kilobytes in size.

Animated sticker set thumbnail can't be uploaded via HTTP URL.

func (*Bot) SetStickerSetTitle added in v0.1.17

func (b *Bot) SetStickerSetTitle(s StickerSet) error

SetStickerSetTitle sets the title of a created sticker set.

func (*Bot) SetWebhook

func (b *Bot) SetWebhook(w IHook) error

SetWebhook configures a bot to receive incoming updates via an outgoing webhook.

func (*Bot) Ship

func (b *Bot) Ship(query *ShippingQuery, what ...interface{}) error

Ship replies to the shipping query, if you sent an invoice requesting an address and the parameter is_flexible was specified.

Example:

b.Ship(query)          // OK
b.Ship(query, opts...) // OK with options
b.Ship(query, "Oops!") // Error message

func (*Bot) Start

func (b *Bot) Start()

Start brings bot into motion by consuming incoming updates (see Bot.Updates channel).

func (*Bot) StickerSet

func (b *Bot) StickerSet(name string) (*StickerSet, error)

StickerSet returns a sticker set on success.

func (*Bot) Stop

func (b *Bot) Stop()

Stop gracefully shuts the poller down.

func (*Bot) StopLiveLocation

func (b *Bot) StopLiveLocation(msg Editable, opts ...interface{}) (*Message, error)

StopLiveLocation stops broadcasting live message location before Location.LivePeriod expires.

It supports ReplyMarkup. This function will panic upon nil Editable.

If the message is sent by the bot, returns it, otherwise returns nil and ErrTrueResult.

func (*Bot) StopPoll

func (b *Bot) StopPoll(msg Editable, opts ...interface{}) (*Poll, error)

StopPoll stops a poll which was sent by the bot and returns the stopped Poll object with the final results.

It supports ReplyMarkup. This function will panic upon nil Editable.

func (*Bot) Store added in v0.1.16

func (b *Bot) Store() IStorage

func (*Bot) TopicIconStickers added in v0.1.17

func (b *Bot) TopicIconStickers() ([]Sticker, error)

TopicIconStickers gets custom emoji stickers, which can be used as a forum topic icon by any user.

func (*Bot) Trigger added in v0.1.18

func (b *Bot) Trigger(endpoint interface{}, c Context) error

Trigger executes the registered handler by the endpoint.

func (*Bot) Unban

func (b *Bot) Unban(chat *Chat, user *User, forBanned ...bool) error

Unban will unban user from chat, who would have thought eh? forBanned does nothing if the user is not banned.

func (*Bot) UnbanSenderChat

func (b *Bot) UnbanSenderChat(chat *Chat, sender Recipient) error

UnbanSenderChat will use this method to unban a previously banned channel chat in a supergroup or channel. The bot must be an administrator for this to work and must have the appropriate administrator rights.

func (*Bot) UnhideGeneralTopic added in v0.1.17

func (b *Bot) UnhideGeneralTopic(chat *Chat) error

UnhideGeneralTopic unhides the 'General' topic in a forum supergroup chat.

func (*Bot) Unpin

func (b *Bot) Unpin(chat Recipient, messageID ...int) error

Unpin unpins a message in a supergroup or a channel. It supports tb.Silent option.

func (*Bot) UnpinAll

func (b *Bot) UnpinAll(chat Recipient) error

UnpinAll unpins all messages in a supergroup or a channel. It supports tb.Silent option.

func (*Bot) UnpinAllGeneralTopicMessages added in v0.1.17

func (b *Bot) UnpinAllGeneralTopicMessages(chat *Chat) error

UnpinAllGeneralTopicMessages clears the list of pinned messages in a General forum topic. The bot must be an administrator in the chat for this to work and must have the can_pin_messages administrator right in the supergroup.

func (*Bot) UnpinAllTopicMessages added in v0.1.17

func (b *Bot) UnpinAllTopicMessages(chat *Chat, topic *Topic) error

UnpinAllTopicMessages clears the list of pinned messages in a forum topic. The bot must be an administrator in the chat for this to work and must have the can_pin_messages administrator right in the supergroup.

func (*Bot) UploadSticker

func (b *Bot) UploadSticker(to Recipient, format StickerSetFormat, f File) (*File, error)

UploadSticker uploads a sticker file for later use.

func (*Bot) Use

func (b *Bot) Use(middleware ...MiddlewareFunc)

Use adds middleware to the global bot chain.

func (*Bot) UserBoosts added in v0.1.17

func (b *Bot) UserBoosts(chat, user Recipient) ([]Boost, error)

UserBoosts gets the list of boosts added to a chat by a user. Requires administrator rights in the chat.

func (*Bot) ValidateWebAppData added in v0.1.14

func (b *Bot) ValidateWebAppData(initDataStr string, expIn time.Duration) (bool, error)

ValidateWebAppData validate data received via the Web App https://core.telegram.org/bots/webapps#validating-data-received-via-the-web-app

func (*Bot) Webhook

func (b *Bot) Webhook() (*IHook, error)

Webhook returns the current webhook status.

type BotInfo added in v0.1.17

type BotInfo struct {
	Name             string `json:"name,omitempty"`
	Description      string `json:"description,omitempty"`
	ShortDescription string `json:"short_description,omitempty"`
}

BotInfo represents a single object of BotName, BotDescription, BotShortDescription instances.

type Btn

type Btn struct {
	Unique          string          `json:"unique,omitempty"`
	Text            string          `json:"text,omitempty"`
	URL             string          `json:"url,omitempty"`
	Data            string          `json:"callback_data,omitempty"`
	InlineQuery     string          `json:"switch_inline_query,omitempty"`
	InlineQueryChat string          `json:"switch_inline_query_current_chat,omitempty"`
	Login           *Login          `json:"login_url,omitempty"`
	WebApp          *WebApp         `json:"web_app,omitempty"`
	Contact         bool            `json:"request_contact,omitempty"`
	Location        bool            `json:"request_location,omitempty"`
	Poll            PollType        `json:"request_poll,omitempty"`
	User            *ReplyRecipient `json:"request_user,omitempty"`
	Chat            *ReplyRecipient `json:"request_chat,omitempty"`
}

Btn is a constructor button, which will later become either a reply, or an inline button.

func (*Btn) CallbackUnique

func (t *Btn) CallbackUnique() string

CallbackUnique implements CallbackEndpoint.

func (Btn) Inline

func (b Btn) Inline() *InlineButton

func (Btn) Reply

func (b Btn) Reply() *ReplyButton

type Callback

type Callback struct {
	ID string `json:"id"`

	// For message sent to channels, Sender may be empty
	Sender *User `json:"from"`

	// Message will be set if the button that originated the query
	// was attached to a message sent by a bot.
	Message *Message `json:"message,omitempty"`

	// MessageID will be set if the button was attached to a message
	// sent via the bot in inline mode.
	MessageID string `json:"inline_message_id,omitempty"`

	// Data associated with the callback button. Be aware that
	// a bad client can send arbitrary data in this field.
	Data string `json:"data,omitempty"`

	// ChatInstance is a global identifier, uniquely corresponding to
	// the chat to which the message with the callback button was sent.
	ChatInstance string `json:"chat_instance"`

	// GameShortName is a unique identifier of the game for which a URL
	// is requested from the bot when a user presses the Play button of
	// that game. GameShortName may be empty
	GameShortName string `json:"game_short_name"`

	// Unique displays an unique of the button from which the
	// callback was fired. Sets immediately before the handling,
	// while the Data field stores only with payload.
	Unique string `json:"-"`
}

Callback object represents a query from a callback button in an inline keyboard.

func (*Callback) IsInline

func (c *Callback) IsInline() bool

IsInline says whether message is an inline message.

func (*Callback) MessageSig

func (c *Callback) MessageSig() (string, int64)

MessageSig satisfies Editable interface.

type CallbackEndpoint

type CallbackEndpoint interface {
	CallbackUnique() string
}

CallbackEndpoint is an interface any element capable of responding to a callback `\f<unique>`.

type CallbackResponse

type CallbackResponse struct {
	// The ID of the callback to which this is a response.
	//
	// Note: Telebot sets this field automatically!
	CallbackID string `json:"callback_query_id"`

	// Text of the notification. If not specified, nothing will be
	// shown to the user.
	Text string `json:"text,omitempty"`

	// (Optional) If true, an alert will be shown by the client instead
	// of a notification at the top of the chat screen. Defaults to false.
	ShowAlert bool `json:"show_alert,omitempty"`

	// (Optional) URL that will be opened by the user's client.
	// If you have created a Game and accepted the conditions via
	// @BotFather, specify the URL that opens your game.
	//
	// Note: this will only work if the query comes from a game
	// callback button. Otherwise, you may use deep-linking:
	// https://telegram.me/your_bot?start=XXXX
	URL string `json:"url,omitempty"`
}

CallbackResponse builds a response to a Callback query.

type Chat

type Chat struct {
	ID int64 `json:"id"`

	// See ChatType and consts.
	Type ChatType `json:"type"`

	// Won't be there for ChatPrivate.
	Title string `json:"title"`

	FirstName string `json:"first_name"`
	LastName  string `json:"last_name"`
	Username  string `json:"username"`

	// Returns only in getChat
	Bio                      string        `json:"bio,omitempty"`
	Photo                    *ChatPhoto    `json:"photo,omitempty"`
	Description              string        `json:"description,omitempty"`
	InviteLink               string        `json:"invite_link,omitempty"`
	PinnedMessage            *Message      `json:"pinned_message,omitempty"`
	Permissions              *Rights       `json:"permissions,omitempty"`
	Reactions                []Reaction    `json:"available_reactions"`
	SlowMode                 int           `json:"slow_mode_delay,omitempty"`
	StickerSet               string        `json:"sticker_set_name,omitempty"`
	CanSetStickerSet         bool          `json:"can_set_sticker_set,omitempty"`
	CustomEmojiSetName       string        `json:"custom_emoji_sticker_set_name"`
	LinkedChatID             int64         `json:"linked_chat_id,omitempty"`
	ChatLocation             *ChatLocation `json:"location,omitempty"`
	Private                  bool          `json:"has_private_forwards,omitempty"`
	Protected                bool          `json:"has_protected_content,omitempty"`
	NoVoiceAndVideo          bool          `json:"has_restricted_voice_and_video_messages"`
	HasHiddenMembers         bool          `json:"has_hidden_members,omitempty"`
	AggressiveAntiSpam       bool          `json:"has_aggressive_anti_spam_enabled,omitempty"`
	CustomEmojiID            string        `json:"emoji_status_custom_emoji_id"`
	EmojiExpirationUnixtime  int64         `json:"emoji_status_expiration_date"`
	BackgroundEmojiID        string        `json:"background_custom_emoji_id"`
	AccentColorID            int           `json:"accent_color_id"`
	ProfileAccentColorID     int           `json:"profile_accent_color_id"`
	ProfileBackgroundEmojiID string        `json:"profile_background_custom_emoji_id"`
	HasVisibleHistory        bool          `json:"has_visible_history"`
	UnrestrictBoosts         int           `json:"unrestrict_boost_count"`
}

Chat object represents a Telegram user, bot, group or a channel.

func (*Chat) Recipient

func (c *Chat) Recipient() string

Recipient returns chat ID (see Recipient interface).

func (*Chat) Time added in v0.1.17

func (c *Chat) Time() time.Time

Time returns the moment of the emoji status expiration.

type ChatAction

type ChatAction string

ChatAction is a client-side status indicating bot activity.

const (
	Typing            ChatAction = "typing"
	UploadingPhoto    ChatAction = "upload_photo"
	UploadingVideo    ChatAction = "upload_video"
	UploadingAudio    ChatAction = "upload_audio"
	UploadingDocument ChatAction = "upload_document"
	UploadingVNote    ChatAction = "upload_video_note"
	RecordingVideo    ChatAction = "record_video"
	RecordingAudio    ChatAction = "record_audio"
	RecordingVNote    ChatAction = "record_video_note"
	FindingLocation   ChatAction = "find_location"
	ChoosingSticker   ChatAction = "choose_sticker"
)

type ChatID

type ChatID int64

ChatID represents a chat or an user integer ID, which can be used as recipient in bot methods. It is very useful in cases where you have special group IDs, for example in your config, and don't want to wrap it into *tele.Chat every time you send messages.

Example:

group := tele.ChatID(-100756389456)
b.Send(group, "Hello!")

type Config struct {
	AdminGroup tele.ChatID `json:"admin_group"`
}
b.Send(conf.AdminGroup, "Hello!")

func (ChatID) Recipient

func (i ChatID) Recipient() string

Recipient returns chat ID (see Recipient interface).

type ChatInviteLink struct {
	// The invite link.
	InviteLink string `json:"invite_link"`

	// Invite link name.
	Name string `json:"name"`

	// The creator of the link.
	Creator *User `json:"creator"`

	// If the link is primary.
	IsPrimary bool `json:"is_primary"`

	// If the link is revoked.
	IsRevoked bool `json:"is_revoked"`

	// (Optional) Point in time when the link will expire,
	// use ExpireDate() to get time.Time.
	ExpireUnixtime int64 `json:"expire_date,omitempty"`

	// (Optional) Maximum number of users that can be members of
	// the chat simultaneously.
	MemberLimit int `json:"member_limit,omitempty"`

	// (Optional) True, if users joining the chat via the link need to
	// be approved by chat administrators. If True, member_limit can't be specified.
	JoinRequest bool `json:"creates_join_request"`

	// (Optional) Number of pending join requests created using this link.
	PendingCount int `json:"pending_join_request_count"`
}

ChatInviteLink object represents an invite for a chat.

func (*ChatInviteLink) ExpireDate

func (c *ChatInviteLink) ExpireDate() time.Time

ExpireDate returns the moment of the link expiration in local time.

type ChatJoinRequest

type ChatJoinRequest struct {
	// Chat to which the request was sent.
	Chat *Chat `json:"chat"`

	// Sender is the user that sent the join request.
	Sender *User `json:"from"`

	// UserChatID is an ID of a private chat with the user
	// who sent the join request. The bot can use this ID
	// for 5 minutes to send messages until the join request
	// is processed, assuming no other administrator contacted the user.
	UserChatID int64 `json:"user_chat_id"`

	// Unixtime, use ChatJoinRequest.Time() to get time.Time.
	Unixtime int64 `json:"date"`

	// Bio of the user, optional.
	Bio string `json:"bio"`

	// InviteLink is the chat invite link that was used by
	//the user to send the join request, optional.
	InviteLink *ChatInviteLink `json:"invite_link"`
}

ChatJoinRequest represents a join request sent to a chat.

func (ChatJoinRequest) Time

func (r ChatJoinRequest) Time() time.Time

Time returns the moment of chat join request sending in local time.

type ChatLocation

type ChatLocation struct {
	Location Location `json:"location,omitempty"`
	Address  string   `json:"address,omitempty"`
}

ChatLocation represents a location to which a chat is connected.

type ChatMember

type ChatMember struct {
	Rights

	User      *User        `json:"user"`
	Role      MemberStatus `json:"status"`
	Title     string       `json:"custom_title"`
	Anonymous bool         `json:"is_anonymous"`
	Member    bool         `json:"is_member,omitempty"`

	// Date when restrictions will be lifted for the user, unix time.
	//
	// If user is restricted for more than 366 days or less than
	// 30 seconds from the current time, they are considered to be
	// restricted forever.
	//
	// Use tele.Forever().
	//
	RestrictedUntil int64 `json:"until_date,omitempty"`

	JoinToSend    string `json:"join_to_send_messages"`
	JoinByRequest string `json:"join_by_request"`
}

ChatMember object represents information about a single chat member.

type ChatMemberUpdate

type ChatMemberUpdate struct {
	// Chat where the user belongs to.
	Chat *Chat `json:"chat"`

	// Sender which user the action was triggered.
	Sender *User `json:"from"`

	// Unixtime, use Date() to get time.Time.
	Unixtime int64 `json:"date"`

	// Previous information about the chat member.
	OldChatMember *ChatMember `json:"old_chat_member"`

	// New information about the chat member.
	NewChatMember *ChatMember `json:"new_chat_member"`

	// (Optional) InviteLink which was used by the user to
	// join the chat; for joining by invite link events only.
	InviteLink *ChatInviteLink `json:"invite_link"`

	// (Optional) True, if the user joined the chat via a chat folder invite link.
	ViaFolderLink bool `json:"via_chat_folder_invite_link"`
}

ChatMemberUpdate object represents changes in the status of a chat member.

func (*ChatMemberUpdate) Time

func (c *ChatMemberUpdate) Time() time.Time

Time returns the moment of the change in local time.

type ChatPhoto

type ChatPhoto struct {
	// File identifiers of small (160x160) chat photo
	SmallFileID   string `json:"small_file_id"`
	SmallUniqueID string `json:"small_file_unique_id"`

	// File identifiers of big (640x640) chat photo
	BigFileID   string `json:"big_file_id"`
	BigUniqueID string `json:"big_file_unique_id"`
}

ChatPhoto object represents a chat photo.

type ChatShared added in v0.1.8

type ChatShared struct {
	// Identifier of the request
	RequestId int64 `json:"request_id"`
	// Identifier of the shared chat. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float type are safe for storing this identifier. The bot may not have access to the chat and could be unable to use this identifier, unless the chat is already known to the bot by some other means.
	ChatId int64 `json:"chat_id"`
}

type ChatType

type ChatType string

ChatType represents one of the possible chat types.

const (
	ChatPrivate        ChatType = "private"
	ChatGroup          ChatType = "group"
	ChatSuperGroup     ChatType = "supergroup"
	ChatChannel        ChatType = "channel"
	ChatChannelPrivate ChatType = "privatechannel"
)

type Command

type Command struct {
	// Text is a text of the command, 1-32 characters.
	// Can contain only lowercase English letters, digits and underscores.
	Text string `json:"command"`

	// Description of the command, 3-256 characters.
	Description string `json:"description"`
}

Command represents a bot command.

type CommandParams

type CommandParams struct {
	Commands     []Command     `json:"commands,omitempty"`
	Scope        *CommandScope `json:"scope,omitempty"`
	LanguageCode string        `json:"language_code,omitempty"`
}

CommandParams controls parameters for commands-related methods (setMyCommands, deleteMyCommands and getMyCommands).

type CommandScope

type CommandScope struct {
	Type   CommandScopeType `json:"type"`
	ChatID int64            `json:"chat_id,omitempty"`
	UserID int64            `json:"user_id,omitempty"`
}

CommandScope object represents a scope to which bot commands are applied.

type CommandScopeType

type CommandScopeType = string
const (
	CommandScopeDefault         CommandScopeType = "default"
	CommandScopeAllPrivateChats CommandScopeType = "all_private_chats"
	CommandScopeAllGroupChats   CommandScopeType = "all_group_chats"
	CommandScopeAllChatAdmin    CommandScopeType = "all_chat_administrators"
	CommandScopeChat            CommandScopeType = "chat"
	CommandScopeChatAdmin       CommandScopeType = "chat_administrators"
	CommandScopeChatMember      CommandScopeType = "chat_member"
)

type Contact

type Contact struct {
	PhoneNumber string `json:"phone_number"`
	FirstName   string `json:"first_name"`

	// (Optional)
	LastName string `json:"last_name"`
	UserID   int64  `json:"user_id,omitempty"`
}

Contact object represents a contact to Telegram user.

type ContactResult

type ContactResult struct {
	ResultBase

	// Contact's phone number.
	PhoneNumber string `json:"phone_number"`

	// Optional. Additional data about the contact in the form of a vCard, 0-2048 bytes.
	VCard string `json:"vcard,omitempty"`

	// Contact's first name.
	FirstName string `json:"first_name"`

	// Optional. Contact's last name.
	LastName string `json:"last_name,omitempty"`

	// Optional. URL of the thumbnail for the result.
	ThumbURL string `json:"thumbnail_url,omitempty"`

	// Optional. Width of the thumbnail for the result.
	ThumbWidth int `json:"thumbnail_width,omitempty"`

	// Optional. Height of the thumbnail for the result.
	ThumbHeight int `json:"thumbnail_height,omitempty"`
}

ContactResult represents a contact with a phone number.

type Context

type Context interface {
	// Bot returns the bot instance.
	Bot() *Bot

	// Update returns the original update.
	Update() Update

	// Message returns stored message if such presented.
	Message() *Message

	// Callback returns stored callback if such presented.
	Callback() *Callback

	// Query returns stored query if such presented.
	Query() *Query

	// InlineResult returns stored inline result if such presented.
	InlineResult() *InlineResult

	// ShippingQuery returns stored shipping query if such presented.
	ShippingQuery() *ShippingQuery

	// PreCheckoutQuery returns stored pre checkout query if such presented.
	PreCheckoutQuery() *PreCheckoutQuery

	// Poll returns stored poll if such presented.
	Poll() *Poll

	// PollAnswer returns stored poll answer if such presented.
	PollAnswer() *PollAnswer

	// ChatMember returns chat member changes.
	ChatMember() *ChatMemberUpdate

	// ChatJoinRequest returns the chat join request.
	ChatJoinRequest() *ChatJoinRequest

	// Migration returns both migration from and to chat IDs.
	Migration() (int64, int64)

	// Topic returns the topic changes.
	Topic() *Topic

	// Boost returns the boost instance.
	Boost() *BoostUpdated

	// BoostRemoved returns the boost removed from a chat instance.
	BoostRemoved() *BoostRemoved

	// Sender returns the current recipient, depending on the context type.
	// Returns nil if user is not presented.
	Sender() *User

	// Chat returns the current chat, depending on the context type.
	// Returns nil if chat is not presented.
	Chat() *Chat

	// Recipient combines both Sender and Chat functions. If there is no user
	// the chat will be returned. The native context cannot be without sender,
	// but it is useful in the case when the context created intentionally
	// by the NewContext constructor and have only Chat field inside.
	Recipient() Recipient

	// Text returns the message text, depending on the context type.
	// In the case when no related data presented, returns an empty string.
	Text() string

	// Entities returns the message entities, whether it's media caption's or the text's.
	// In the case when no entities presented, returns a nil.
	Entities() Entities

	// Data returns the current data, depending on the context type.
	// If the context contains command, returns its arguments string.
	// If the context contains payment, returns its payload.
	// In the case when no related data presented, returns an empty string.
	Data() string

	// Args returns a raw slice of command or callback arguments as strings.
	// The message arguments split by space, while the callback's ones by a "|" symbol.
	Args() []string

	// Send sends a message to the current recipient.
	// See Send from bot.go.
	Send(what interface{}, opts ...interface{}) error

	// SendAlbum sends an album to the current recipient.
	// See SendAlbum from bot.go.
	SendAlbum(a Album, opts ...interface{}) error

	// Reply replies to the current message.
	// See Reply from bot.go.
	Reply(what interface{}, opts ...interface{}) error

	// Forward forwards the given message to the current recipient.
	// See Forward from bot.go.
	Forward(msg Editable, opts ...interface{}) error

	// ForwardTo forwards the current message to the given recipient.
	// See Forward from bot.go
	ForwardTo(to Recipient, opts ...interface{}) error

	// Edit edits the current message.
	// See Edit from bot.go.
	Edit(what interface{}, opts ...interface{}) error

	// EditCaption edits the caption of the current message.
	// See EditCaption from bot.go.
	EditCaption(caption string, opts ...interface{}) error

	// EditOrSend edits the current message if the update is callback,
	// otherwise the content is sent to the chat as a separate message.
	EditOrSend(what interface{}, opts ...interface{}) error

	// EditOrReply edits the current message if the update is callback,
	// otherwise the content is replied as a separate message.
	EditOrReply(what interface{}, opts ...interface{}) error

	// Delete removes the current message.
	// See Delete from bot.go.
	Delete() error

	// DeleteAfter waits for the duration to elapse and then removes the
	// message. It handles an error automatically using b.OnError callback.
	// It returns a Timer that can be used to cancel the call using its Stop method.
	DeleteAfter(d time.Duration) *time.Timer

	// Notify updates the chat action for the current recipient.
	// See Notify from bot.go.
	Notify(action ChatAction) error

	// Ship replies to the current shipping query.
	// See Ship from bot.go.
	Ship(what ...interface{}) error

	// Accept finalizes the current deal.
	// See Accept from bot.go.
	Accept(errorMessage ...string) error

	// Answer sends a response to the current inline query.
	// See Answer from bot.go.
	Answer(resp *QueryResponse) error

	// Respond sends a response for the current callback query.
	// See Respond from bot.go.
	Respond(resp ...*CallbackResponse) error

	// RespondText sends a popup response for the current callback query.
	RespondText(text string) error

	// RespondAlert sends an alert response for the current callback query.
	RespondAlert(text string) error

	// Get retrieves data from the context.
	Get(key string) interface{}

	// Set saves data in the context.
	Set(key string, val interface{})
}

Context wraps an update and represents the context of current event.

type Credentials added in v0.1.8

type Credentials struct {
	Data SecureData `json:"secure_data"`
	// Nonce the same nonce given in the request
	Nonce string `json:"nonce"`
}

Credentials contains encrypted data.

type Currency

type Currency struct {
	Code         string      `json:"code"`
	Title        string      `json:"title"`
	Symbol       string      `json:"symbol"`
	Native       string      `json:"native"`
	ThousandsSep string      `json:"thousands_sep"`
	DecimalSep   string      `json:"decimal_sep"`
	SymbolLeft   bool        `json:"symbol_left"`
	SpaceBetween bool        `json:"space_between"`
	Exp          int         `json:"exp"`
	MinAmount    interface{} `json:"min_amount"`
	MaxAmount    interface{} `json:"max_amount"`
}

Currency contains information about supported currency for payments.

func (Currency) FromTotal

func (c Currency) FromTotal(total int) float64

func (Currency) ToTotal

func (c Currency) ToTotal(total float64) int

type DataCredentials added in v0.1.8

type DataCredentials struct {
	// DataHash checksum of encrypted data
	DataHash string `json:"data_hash"`
	// Secret of encrypted data
	Secret string `json:"secret"`
}

DataCredentials contains information required to decrypt data.

type Dice

type Dice struct {
	Type  DiceType `json:"emoji"`
	Value int      `json:"value"`
}

Dice object represents a dice with a random value from 1 to 6 for currently supported base emoji.

func (*Dice) Send

func (d *Dice) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers dice through bot b to recipient.

type DiceType

type DiceType string

DiceType defines dice types.

type Document

type Document struct {
	File

	// (Optional)
	Thumbnail            *Photo `json:"thumbnail,omitempty"`
	Caption              string `json:"caption,omitempty"`
	MIME                 string `json:"mime_type"`
	FileName             string `json:"file_name,omitempty"`
	DisableTypeDetection bool   `json:"disable_content_type_detection,omitempty"`
}

Document object represents a general file (as opposed to Photo or Audio). Telegram users can send files of any type of up to 1.5 GB in size.

func (*Document) InputMedia

func (d *Document) InputMedia() InputMedia

func (*Document) MediaFile

func (d *Document) MediaFile() *File

func (*Document) MediaType

func (d *Document) MediaType() string

func (*Document) Send

func (d *Document) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers media through bot b to recipient.

type DocumentResult

type DocumentResult struct {
	ResultBase

	// Title for the result.
	Title string `json:"title"`

	// A valid URL for the file
	URL string `json:"document_url"`

	// Mime type of the content of the file, either “application/pdf” or
	// “application/zip”.
	MIME string `json:"mime_type"`

	// Optional. Caption of the document to be sent, 0-200 characters.
	Caption string `json:"caption,omitempty"`

	// Optional. Short description of the result.
	Description string `json:"description,omitempty"`

	// Optional. URL of the thumbnail (jpeg only) for the file.
	ThumbURL string `json:"thumbnail_url,omitempty"`

	// Optional. Width of the thumbnail for the result.
	ThumbWidth int `json:"thumbnail_width,omitempty"`

	// Optional. Height of the thumbnail for the result.
	ThumbHeight int `json:"thumbnail_height,omitempty"`

	// If Cache != "", it'll be used instead
	Cache string `json:"document_file_id,omitempty"`
}

DocumentResult represents a link to a file.

type Editable

type Editable interface {
	// MessageSig is a "message signature".
	//
	// For inline messages, return chatID = 0.
	MessageSig() (messageID string, chatID int64)
}

Editable is an interface for all objects that provide "message signature", a pair of 32-bit message ID and 64-bit chat ID, both required for edit operations.

Use case: DB model struct for messages to-be edited with, say two columns: msg_id,chat_id could easily implement MessageSig() making instances of stored messages editable.

type EncryptedCredentials added in v0.1.8

type EncryptedCredentials struct {
	// Base64-encoded encrypted JSON-serialized data with unique user's
	// payload, data hashes and secrets required for EncryptedPassportElement
	// decryption and authentication
	Data string `json:"data"`

	// Base64-encoded data hash for data authentication
	Hash string `json:"hash"`

	// Base64-encoded secret, encrypted with the bot's public RSA key,
	// required for data decryption
	Secret string `json:"secret"`
}

EncryptedCredentials contains data required for decrypting and authenticating EncryptedPassportElement. See the Telegram Passport Documentation for a complete description of the data decryption and authentication processes.

type EncryptedPassportElement added in v0.1.8

type EncryptedPassportElement struct {
	// Element type.
	Type string `json:"type"`

	// Base64-encoded encrypted Telegram Passport element data provided by
	// the user, available for "personal_details", "passport",
	// "driver_license", "identity_card", "identity_passport" and "address"
	// types. Can be decrypted and verified using the accompanying
	// EncryptedCredentials.
	Data string `json:"data,omitempty"`

	// User's verified phone number, available only for "phone_number" type
	PhoneNumber string `json:"phone_number,omitempty"`

	// User's verified email address, available only for "email" type
	Email string `json:"email,omitempty"`

	// Array of encrypted files with documents provided by the user,
	// available for "utility_bill", "bank_statement", "rental_agreement",
	// "passport_registration" and "temporary_registration" types. Files can
	// be decrypted and verified using the accompanying EncryptedCredentials.
	Files []PassportFile `json:"files,omitempty"`

	// Encrypted file with the front side of the document, provided by the
	// user. Available for "passport", "driver_license", "identity_card" and
	// "internal_passport". The file can be decrypted and verified using the
	// accompanying EncryptedCredentials.
	FrontSide *PassportFile `json:"front_side,omitempty"`

	// Encrypted file with the reverse side of the document, provided by the
	// user. Available for "driver_license" and "identity_card". The file can
	// be decrypted and verified using the accompanying EncryptedCredentials.
	ReverseSide *PassportFile `json:"reverse_side,omitempty"`

	// Encrypted file with the selfie of the user holding a document,
	// provided by the user; available for "passport", "driver_license",
	// "identity_card" and "internal_passport". The file can be decrypted
	// and verified using the accompanying EncryptedCredentials.
	Selfie *PassportFile `json:"selfie,omitempty"`

	//Optional. Array of encrypted files with translated versions of documents provided
	//by the user. Available if requested for “passport”, “driver_license”, “identity_card”,
	//“internal_passport”, “utility_bill”, “bank_statement”, “rental_agreement”,
	//“passport_registration” and “temporary_registration” types. Files can be decrypted
	//and verified using the accompanying EncryptedCredentials.
	Translation []PassportFile `json:"translation,omitempty"`

	// Base64-encoded element hash for using in PassportElementErrorUnspecified
	Hash string `json:"hash"`
}

EncryptedPassportElement contains information about documents or other Telegram Passport elements shared with the bot by the user.

type Entities

type Entities []MessageEntity

Entities are used to set message's text entities as a send option.

type EntityType

type EntityType string

EntityType is a MessageEntity type.

const (
	EntityMention       EntityType = "mention"
	EntityTMention      EntityType = "text_mention"
	EntityHashtag       EntityType = "hashtag"
	EntityCashtag       EntityType = "cashtag"
	EntityCommand       EntityType = "bot_command"
	EntityURL           EntityType = "url"
	EntityEmail         EntityType = "email"
	EntityPhone         EntityType = "phone_number"
	EntityBold          EntityType = "bold"
	EntityItalic        EntityType = "italic"
	EntityUnderline     EntityType = "underline"
	EntityStrikethrough EntityType = "strikethrough"
	EntityCode          EntityType = "code"
	EntityCodeBlock     EntityType = "pre"
	EntityTextLink      EntityType = "text_link"
	EntitySpoiler       EntityType = "spoiler"
	EntityCustomEmoji   EntityType = "custom_emoji"
	EntityBlockquote    EntityType = "blockquote"
)

type Error

type Error struct {
	Code        int
	Description string
	Message     string
}

func NewError

func NewError(code int, msgs ...string) *Error

NewError returns new Error instance with given description. First element of msgs is Description. The second is optional Message.

func (*Error) Error

func (err *Error) Error() string

Error implements error interface.

type ExternalReplyInfo added in v0.1.17

type ExternalReplyInfo struct {
	// Origin of the message replied to by the given message.
	Origin *MessageOrigin `json:"origin"`

	// (Optional) Chat the original message belongs to.
	// Available only if the chat is a supergroup or a channel.
	Chat *Chat `json:"chat"`

	// (Optional) Unique message identifier inside the original chat.
	// Available only if the original chat is a supergroup or a channel.
	MessageID int `json:"message_id"`

	// (Optional) ReactionOptions used for link preview generation for the original message,
	// if it is a text message.
	PreviewOptions *PreviewOptions `json:"link_preview_options"`

	// (Optional) Message is an animation, information about the animation.
	Animation *Animation `json:"animation"`

	// (Optional) Message is an audio file, information about the file.
	Audio *Audio `json:"audio"`

	// (Optional) Message is a general file, information about the file.
	Document *Document `json:"document"`

	// (Optional) Message is a photo, available sizes of the photo.
	Photo []Photo `json:"photo"`

	// (Optional) Message is a sticker, information about the sticker.
	Sticker *Sticker `json:"sticker"`

	// (Optional) Message is a forwarded story.
	Story *Story `json:"story"`

	// (Optional) Message is a video, information about the video.
	Video *Video `json:"video"`

	// (Optional) Message is a video note, information about the video message.
	Note *VideoNote `json:"video_note"`

	// (Optional) Message is a voice message, information about the file.
	Voice *Voice `json:"voice"`

	// (Optional) True, if the message media is covered by a spoiler animation.
	HasMediaSpoiler bool `json:"has_media_spoiler"`

	// (Optional) Message is a shared contact, information about the contact.
	Contact *Contact `json:"contact"`

	// (Optional) Message is a dice with random value.
	Dice *Dice `json:"dice"`

	//( Optional) Message is a game, information about the game.
	Game *Game `json:"game"`

	// (Optional) Message is a venue, information about the venue.
	Venue *Venue `json:"venue"`

	// (Optional) Message is a native poll, information about the poll.
	Poll *Poll `json:"poll"`

	// (Optional) Message is a shared location, information about the location.
	Location *Location `json:"location"`

	// (Optional) Message is an invoice for a payment, information about the invoice.
	Invoice *Invoice `json:"invoice"`

	// (Optional) Message is a scheduled giveaway, information about the giveaway.
	Giveaway *Giveaway `json:"giveaway"`

	// (Optional) A giveaway with public winners was completed.
	GiveawayWinners *GiveawayWinners `json:"giveaway_winners"`
}

ExternalReplyInfo contains information about a message that is being replied to, which may come from another chat or forum topic.

type File

type File struct {
	FileID   string `json:"file_id"`
	UniqueID string `json:"file_unique_id"`
	FileSize int64  `json:"file_size,omitempty"`

	// FilePath is used for files on Telegram server.
	FilePath string `json:"file_path,omitempty"`

	// FileLocal is used for files on local file system.
	FileLocal string `json:"file_local,omitempty"`

	// FileURL is used for file on the internet.
	FileURL string `json:"file_url,omitempty"`

	// FileReader is used for file backed with io.Reader.
	FileReader io.Reader `json:"-"`
	// contains filtered or unexported fields
}

File object represents any sort of file.

func FromDisk

func FromDisk(filename string) File

FromDisk constructs a new local (on-disk) file object.

Note, it returns File, not *File for a very good reason: in telebot, File is pretty much an embeddable struct, so upon uploading media you'll need to set embedded File with something. NewFile() returning File makes it a one-liner.

photo := &tele.Photo{File: tele.FromDisk("chicken.jpg")}

func FromReader

func FromReader(reader io.Reader) File

FromReader constructs a new file from io.Reader.

Note, it returns File, not *File for a very good reason: in telebot, File is pretty much an embeddable struct, so upon uploading media you'll need to set embedded File with something. NewFile() returning File makes it a one-liner.

photo := &tele.Photo{File: tele.FromReader(bytes.NewReader(...))}

func FromURL

func FromURL(url string) File

FromURL constructs a new file on provided HTTP URL.

Note, it returns File, not *File for a very good reason: in telebot, File is pretty much an embeddable struct, so upon uploading media you'll need to set embedded File with something. NewFile() returning File makes it a one-liner.

photo := &tele.Photo{File: tele.FromURL("https://site.com/picture.jpg")}

func (*File) InCloud

func (f *File) InCloud() bool

InCloud tells whether the file is present on Telegram servers.

func (*File) OnDisk

func (f *File) OnDisk() bool

OnDisk will return true if file is present on disk.

type FileCredentials added in v0.1.8

type FileCredentials struct {
	// FileHash checksum of encrypted data
	FileHash string `json:"file_hash"`
	// Secret of encrypted data
	Secret string `json:"secret"`
}

FileCredentials contains information required to decrypt files.

type FloodError

type FloodError struct {
	RetryAfter int
	// contains filtered or unexported fields
}

func (FloodError) Error

func (err FloodError) Error() string

Error implements error interface.

type ForumTopic added in v0.1.8

type ForumTopic struct {
	MessageThreadID   int    `json:"message_thread_id"`
	Name              string `json:"name"`
	IconColor         int    `json:"icon_color,omitempty"`
	IconCustomEmojiID string `json:"icon_custom_emoji_id,omitempty"`
}

ForumTopic This object represents a forum topic.

type ForumTopicClosed added in v0.1.8

type ForumTopicClosed struct {
}

ForumTopicClosed This object represents a service message about a forum topic closed in the chat. Currently holds no information.

type ForumTopicCreated added in v0.1.8

type ForumTopicCreated struct {
	// Name of the topic
	Name string `json:"name"`
	// Color of the topic icon in RGB format
	IconColor int `json:"icon_color"`
	// Optional. Unique identifier of the custom emoji shown as the topic icon
	IconCustomEmojiID string `json:"icon_custom_emoji_id,omitempty"`
}

ForumTopicCreated This object represents a service message about a new forum topic created in the chat.

type ForumTopicEdited added in v0.1.8

type ForumTopicEdited struct {
	// Optional. New name of the topic, if it was edited
	Name string `json:"name,omitempty"`
	// Optional. New identifier of the custom emoji shown as the topic icon, if it was edited; an empty string if the icon was removed
	IconCustomEmojiID string `json:"icon_custom_emoji_id,omitempty"`
}

ForumTopicEdited This object represents a service message about an edited forum topic.

type ForumTopicReopened added in v0.1.8

type ForumTopicReopened struct {
}

ForumTopicReopened This object represents a service message about a forum topic reopened in the chat. Currently holds no information.

type Game

type Game struct {
	Name        string `json:"game_short_name,omitempty"`
	Title       string `json:"title"`
	Description string `json:"description"`
	Photo       *Photo `json:"photo"`

	// (Optional)
	Text      string          `json:"text,omitempty"`
	Entities  []MessageEntity `json:"text_entities,omitempty"`
	Animation *Animation      `json:"animation,omitempty"`
}

Game object represents a game. Their short names acts as unique identifiers.

func (*Game) Send

func (g *Game) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers game through bot b to recipient.

type GameHighScore

type GameHighScore struct {
	User     *User `json:"user"`
	Position int   `json:"position"`

	Score  int  `json:"score"`
	Force  bool `json:"force"`
	NoEdit bool `json:"disable_edit_message"`
}

GameHighScore object represents one row of the high scores table for a game.

type GameResult added in v0.1.17

type GameResult struct {
	ResultBase

	// ShortName is a unique identifier of the game.
	ShortName string `json:"game_short_name"`
}

GameResult represents a game. Game is a content type supported by Telegram, which can be sent back to the user as a result for an inline query.

type GeneralForumTopicHidden added in v0.1.8

type GeneralForumTopicHidden struct {
}

GeneralForumTopicHidden This object represents a service message about General forum topic hidden in the chat. Currently holds no information.

type GeneralForumTopicUnhidden added in v0.1.8

type GeneralForumTopicUnhidden struct {
}

GeneralForumTopicUnhidden This object represents a service message about General forum topic unhidden in the chat. Currently holds no information.

type GifResult

type GifResult struct {
	ResultBase

	// A valid URL for the GIF file. File size must not exceed 1MB.
	URL string `json:"gif_url"`

	// Optional. Width of the GIF.
	Width int `json:"gif_width,omitempty"`

	// Optional. Height of the GIF.
	Height int `json:"gif_height,omitempty"`

	// Optional. Duration of the GIF.
	Duration int `json:"gif_duration,omitempty"`

	// URL of the static thumbnail for the result (jpeg or gif).
	ThumbURL string `json:"thumbnail_url"`

	// Optional. MIME type of the thumbnail, must be one of
	// “image/jpeg”, “image/gif”, or “video/mp4”.
	ThumbMIME string `json:"thumbnail_mime_type,omitempty"`

	// Optional. Title for the result.
	Title string `json:"title,omitempty"`

	// Optional. Caption of the GIF file to be sent, 0-200 characters.
	Caption string `json:"caption,omitempty"`

	// If Cache != "", it'll be used instead
	Cache string `json:"gif_file_id,omitempty"`
}

GifResult represents a link to an animated GIF file.

type Giveaway added in v0.1.17

type Giveaway struct {
	// The list of chats which the user must join to participate in the giveaway.
	Chats []Chat `json:"chats"`

	// Point in time (Unix timestamp) when winners of the giveaway will be selected.
	SelectionUnixtime int64 `json:"winners_selection_date"`

	// The number of users which are supposed to be selected as winners of the giveaway.
	WinnerCount int `json:"winner_count"`

	// (Optional) True, if only users who join the chats after the giveaway
	// started should be eligible to win.
	OnlyNewMembers bool `json:"only_new_members"`

	// (Optional) True, if the list of giveaway winners will be visible to everyone.
	HasPublicWinners bool `json:"has_public_winners"`

	// (Optional) Description of additional giveaway prize.
	PrizeDescription string `json:"prize_description"`

	// (Optional) A list of two-letter ISO 3166-1 alpha-2 country codes indicating
	// the countries from which eligible users for the giveaway must come.
	// If empty, then all users can participate in the giveaway. Users with a phone number
	// that was bought on Fragment can always participate in giveaways.
	CountryCodes []string `json:"country_codes"`

	// (Optional) The number of months the Telegram Premium subscription won from
	// the giveaway will be active for.
	PremiumMonthCount int `json:"premium_subscription_month_count"`
}

Giveaway represents a message about a scheduled giveaway.

func (*Giveaway) SelectionDate added in v0.1.17

func (g *Giveaway) SelectionDate() time.Time

SelectionDate returns the moment of when winners of the giveaway were selected in local time.

type GiveawayCompleted added in v0.1.17

type GiveawayCompleted struct {
	// Number of winners in the giveaway.
	WinnerCount int `json:"winner_count"`

	// (Optional) Number of undistributed prizes.
	UnclaimedPrizes int `json:"unclaimed_prize_count"`

	// (Optional) Message with the giveaway that was completed, if it wasn't deleted.
	Message *Message `json:"giveaway_message"`
}

GiveawayCompleted represents a service message about the completion of a giveaway without public winners.

type GiveawayCreated added in v0.1.17

type GiveawayCreated struct{}

GiveawayCreated represents a service message about the creation of a scheduled giveaway. Currently holds no information.

type GiveawayWinners added in v0.1.17

type GiveawayWinners struct {
	// The chat that created the giveaway.
	Chat *Chat `json:"chat"`

	// Identifier of the message with the giveaway in the chat.
	MessageID int `json:"message_id"`

	// Point in time (Unix timestamp) when winners of the giveaway were selected.
	SelectionUnixtime int64 `json:"winners_selection_date"`

	// The number of users which are supposed to be selected as winners of the giveaway.
	WinnerCount int `json:"winner_count"`

	// List of up to 100 winners of the giveaway.
	Winners []User `json:"winners"`

	// (Optional) The number of other chats the user had to join in order
	// to be eligible for the giveaway.
	AdditionalChats int `json:"additional_chat_count"`

	// (Optional) The number of months the Telegram Premium subscription won from
	// the giveaway will be active for.
	PremiumMonthCount int `json:"premium_subscription_month_count"`

	// (Optional) Number of undistributed prizes.
	UnclaimedPrizes int `json:"unclaimed_prize_count"`

	// (Optional) True, if only users who had joined the chats after the giveaway started
	// were eligible to win.
	OnlyNewMembers bool `json:"only_new_members"`

	// (Optional) True, if the giveaway was canceled because the payment for it was refunded.
	Refunded bool `json:"was_refunded"`

	// (Optional) Description of additional giveaway prize.
	PrizeDescription string `json:"prize_description"`
}

GiveawayWinners object represents a message about the completion of a giveaway with public winners.

func (*GiveawayWinners) SelectionDate added in v0.1.17

func (g *GiveawayWinners) SelectionDate() time.Time

SelectionDate returns the moment of when winners of the giveaway were selected in local time.

type Group

type Group struct {
	// contains filtered or unexported fields
}

Group is a separated group of handlers, united by the general middleware.

func (*Group) Handle

func (g *Group) Handle(endpoint interface{}, h HandlerFunc, m ...MiddlewareFunc)

Handle adds endpoint handler to the bot, combining group's middleware with the optional given middleware.

func (*Group) Use

func (g *Group) Use(middleware ...MiddlewareFunc)

Use adds middleware to the chain.

type GroupError

type GroupError struct {
	MigratedTo int64
	// contains filtered or unexported fields
}

func (GroupError) Error

func (err GroupError) Error() string

Error implements error interface.

type HandlerFunc

type HandlerFunc func(Context) error

HandlerFunc represents a handler function, which is used to handle actual endpoints.

func (HandlerFunc) CheckUpdate added in v0.1.15

func (h HandlerFunc) CheckUpdate(ctx Context) bool

func (HandlerFunc) HandleUpdate added in v0.1.15

func (h HandlerFunc) HandleUpdate(ctx Context) error

func (HandlerFunc) Name added in v0.1.15

func (h HandlerFunc) Name() string

type HttpHook added in v0.1.1

type HttpHook struct {
	Listen         string   `json:"url"`
	MaxConnections int      `json:"max_connections"`
	AllowedUpdates []string `json:"allowed_updates"`
	IP             string   `json:"ip_address"`
	DropUpdates    bool     `json:"drop_pending_updates"`
	SecretToken    string   `json:"secret_token"`

	// (HttpHookInfo)
	HasCustomCert     bool   `json:"has_custom_certificate"`
	PendingUpdates    int    `json:"pending_update_count"`
	ErrorUnixtime     int64  `json:"last_error_date"`
	ErrorMessage      string `json:"last_error_message"`
	SyncErrorUnixtime int64  `json:"last_synchronization_error_date"`

	Endpoint *HttpHookEndpoint
	// contains filtered or unexported fields
}

func (*HttpHook) GetFiles added in v0.1.1

func (h *HttpHook) GetFiles() map[string]File

func (*HttpHook) GetParams added in v0.1.1

func (h *HttpHook) GetParams() map[string]string

func (*HttpHook) Handler added in v0.1.1

func (h *HttpHook) Handler(w http.ResponseWriter, r *http.Request)

func (*HttpHook) Poll added in v0.1.1

func (h *HttpHook) Poll(b *Bot, dest chan Update, stop chan struct{})

func (*HttpHook) Signature added in v0.1.14

func (h *HttpHook) Signature(w http.ResponseWriter, r *http.Request)

func (*HttpHook) WaitForStop added in v0.1.1

func (h *HttpHook) WaitForStop(stop chan struct{})

type HttpHookEndpoint added in v0.1.1

type HttpHookEndpoint struct {
	PublicURL string `json:"public_url"`
}

type IDDocumentData added in v0.1.8

type IDDocumentData struct {
	DocumentNumber string `json:"document_no"`
	ExpiryDate     string `json:"expiry_date"`
}

IDDocumentData https://core.telegram.org/passport#iddocumentdata

type IHandler added in v0.1.15

type IHandler interface {
	// CheckUpdate checks whether the update should handled by this handler.
	CheckUpdate(ctx Context) bool
	// HandleUpdate processes the update.
	HandleUpdate(ctx Context) error
	// Name gets the handler name; used to differentiate handlers programmatically. Names should be unique.
	Name() string
}

func CheckHandlerList added in v0.1.15

func CheckHandlerList(handlers []IHandler, ctx Context) IHandler

CheckHandlerList iterates over a list of handlers until a match is found; at which point it is returned.

type IHook added in v0.1.15

type IHook interface {
	GetFiles() map[string]File
	GetParams() map[string]string
	WaitForStop(stop chan struct{})
	Handler(w http.ResponseWriter, r *http.Request)
}

IHook is a provider of Webhook.

type IStorage added in v0.1.15

type IStorage interface {
	// Get returns the state for the specified conversation key.
	// Note that this is checked at each incoming message, so may be a bottleneck for some implementations.
	//
	// If the key is not found (and as such, this conversation has not yet started), this method should return the
	// ConversationKeyNotFound error.
	// Get(key string) (*State, error)
	Get(ctx Context) (*State, error)

	// Set add the conversation state.
	Set(ctx Context, state State) error

	// Next updates the conversation state.
	Next(ctx Context, key string) error

	// UpdateData updates the conversation action state.
	UpdateData(ctx Context, act string, data any) error

	// Delete ends the conversation, removing the key from the storage.
	Delete(ctx Context) error
}

IStorage allows you to define custom backends for retaining conversation conversations. If you are looking to persist conversation data, you should implement this interface with you backend of choice. Note: Make sure to store the entire State struct; future changes may add new fields.

type InMemoryStorage added in v0.1.15

type InMemoryStorage struct {
	// contains filtered or unexported fields
}

InMemoryStorage is a thread-safe in-memory implementation of the IStorage interface.

func NewInMemoryStorage added in v0.1.15

func NewInMemoryStorage(strategy KeyStrategy) *InMemoryStorage

func (*InMemoryStorage) Delete added in v0.1.15

func (c *InMemoryStorage) Delete(ctx Context) error

func (*InMemoryStorage) Get added in v0.1.15

func (c *InMemoryStorage) Get(ctx Context) (*State, error)

func (*InMemoryStorage) Next added in v0.1.16

func (c *InMemoryStorage) Next(ctx Context, keyStr string) error

func (*InMemoryStorage) Set added in v0.1.15

func (c *InMemoryStorage) Set(ctx Context, state State) error

func (*InMemoryStorage) UpdateData added in v0.1.16

func (c *InMemoryStorage) UpdateData(ctx Context, act string, data any) error

type InitData added in v0.1.17

type InitData struct {
	// The date the initialization data was created. Is a number representing a
	// Unix timestamp.
	AuthDateRaw int `json:"auth_date"`

	// Optional. The number of seconds after which a message can be sent via
	// the method answerWebAppQuery.
	// https://core.telegram.org/bots/api#answerwebappquery
	CanSendAfterRaw int `json:"can_send_after"`

	// Optional. An object containing information about the chat with the bot in
	// which the Mini Apps was launched. It is returned only for Mini Apps
	// opened through the attachment menu.
	Chat Chat `json:"chat"`

	// Optional. The type of chat from which the Mini Apps was opened.
	// Returned only for applications opened by direct link.
	ChatType ChatType `json:"chat_type"`

	// Optional. A global identifier indicating the chat from which the Mini
	// Apps was opened. Returned only for applications opened by direct link.
	ChatInstance int64 `json:"chat_instance"`

	// Initialization data signature.
	// https://core.telegram.org/bots/webapps#validating-data-received-via-the-web-app
	Hash string `json:"hash"`

	// Optional. The unique session ID of the Mini App. Used in the process of
	// sending a message via the method answerWebAppQuery.
	// https://core.telegram.org/bots/api#answerwebappquery
	QueryID string `json:"query_id"`

	// Optional. An object containing data about the chat partner of the current
	// user in the chat where the bot was launched via the attachment menu.
	// Returned only for private chats and only for Mini Apps launched via the
	// attachment menu.
	Receiver User `json:"receiver"`

	// Optional. The value of the startattach or startapp query parameter
	// specified in the link. It is returned only for Mini Apps opened through
	// the attachment menu.
	StartParam string `json:"start_param"`

	// Optional. An object containing information about the current user.
	User User `json:"user"`
}

InitData contains init data. https://docs.telegram-mini-apps.com/launch-parameters/init-data#parameters-list

func Parse added in v0.1.14

func Parse(initData string) (InitData, error)

Parse converts passed init data presented as query string to InitData object.

func (*InitData) AuthDate added in v0.1.17

func (d *InitData) AuthDate() time.Time

AuthDate returns AuthDateRaw as time.Time.

func (*InitData) CanSendAfter added in v0.1.17

func (d *InitData) CanSendAfter() time.Time

CanSendAfter returns computed time which depends on CanSendAfterRaw and AuthDate. Originally, CanSendAfterRaw means time in seconds, after which `answerWebAppQuery` method can be called and that's why this value could be computed as time.

type InlineButton

type InlineButton struct {
	// Unique slagish name for this kind of button,
	// try to be as specific as possible.
	//
	// It will be used as a callback endpoint.
	Unique string `json:"unique,omitempty"`

	Text                  string             `json:"text"`
	URL                   string             `json:"url,omitempty"`
	Data                  string             `json:"callback_data,omitempty"`
	InlineQuery           string             `json:"switch_inline_query,omitempty"`
	InlineQueryChat       string             `json:"switch_inline_query_current_chat"`
	InlineQueryChosenChat *SwitchInlineQuery `json:"switch_inline_query_chosen_chat,omitempty"`
	Login                 *Login             `json:"login_url,omitempty"`
	WebApp                *WebApp            `json:"web_app,omitempty"`
}

InlineButton represents a button displayed in the message.

func (*InlineButton) CallbackUnique

func (t *InlineButton) CallbackUnique() string

CallbackUnique returns InlineButton.Unique.

func (*InlineButton) MarshalJSON

func (t *InlineButton) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler interface. It needed to avoid InlineQueryChat and Login or WebApp fields conflict. If you have Login or WebApp field in your button, InlineQueryChat must be skipped.

func (*InlineButton) With

func (t *InlineButton) With(data string) *InlineButton

With returns a copy of the button with data.

type InlineResult

type InlineResult struct {
	Sender    *User     `json:"from"`
	Location  *Location `json:"location,omitempty"`
	ResultID  string    `json:"result_id"`
	Query     string    `json:"query"`
	MessageID string    `json:"inline_message_id"` // inline messages only!
}

InlineResult represents a result of an inline query that was chosen by the user and sent to their chat partner.

func (*InlineResult) MessageSig

func (ir *InlineResult) MessageSig() (string, int64)

MessageSig satisfies Editable interface.

type InputContactMessageContent

type InputContactMessageContent struct {
	// Contact's phone number.
	PhoneNumber string `json:"phone_number"`

	// Contact's first name.
	FirstName string `json:"first_name"`

	// Optional. Contact's last name.
	LastName string `json:"last_name,omitempty"`
}

InputContactMessageContent represents the content of a contact message to be sent as the result of an inline query.

func (*InputContactMessageContent) IsInputMessageContent

func (input *InputContactMessageContent) IsInputMessageContent() bool

type InputLocationMessageContent

type InputLocationMessageContent struct {
	Lat float32 `json:"latitude"`
	Lng float32 `json:"longitude"`
}

InputLocationMessageContent represents the content of a location message to be sent as the result of an inline query.

func (*InputLocationMessageContent) IsInputMessageContent

func (input *InputLocationMessageContent) IsInputMessageContent() bool

type InputMedia

type InputMedia struct {
	Type                 string   `json:"type"`
	Media                string   `json:"media"`
	Caption              string   `json:"caption"`
	Thumbnail            string   `json:"thumbnail,omitempty"`
	ParseMode            string   `json:"parse_mode,omitempty"`
	Entities             Entities `json:"caption_entities,omitempty"`
	Width                int      `json:"width,omitempty"`
	Height               int      `json:"height,omitempty"`
	Duration             int      `json:"duration,omitempty"`
	Title                string   `json:"title,omitempty"`
	Performer            string   `json:"performer,omitempty"`
	Streaming            bool     `json:"supports_streaming,omitempty"`
	DisableTypeDetection bool     `json:"disable_content_type_detection,omitempty"`
	HasSpoiler           bool     `json:"is_spoiler,omitempty"`
}

InputMedia represents a composite InputMedia struct that is used by Telebot in sending and editing media methods.

type InputMessageContent

type InputMessageContent interface {
	IsInputMessageContent() bool
}

InputMessageContent objects represent the content of a message to be sent as a result of an inline query.

type InputSticker added in v0.1.17

type InputSticker struct {
	File
	Sticker      string        `json:"sticker"`
	MaskPosition *MaskPosition `json:"mask_position"`
	Emojis       []string      `json:"emoji_list"`
	Keywords     []string      `json:"keywords"`
}

type InputTextMessageContent

type InputTextMessageContent struct {
	// Text of the message to be sent, 1-4096 characters.
	Text string `json:"message_text"`

	// (Optional) Send Markdown or HTML, if you want Telegram apps to show
	// bold, italic, fixed-width text or inline URLs in your bot's message.
	ParseMode string `json:"parse_mode,omitempty"`

	// (Optional) Link preview generation options for the message.
	PreviewOptions *PreviewOptions `json:"link_preview_options,omitempty"`
}

InputTextMessageContent represents the content of a text message to be sent as the result of an inline query.

func (*InputTextMessageContent) IsInputMessageContent

func (input *InputTextMessageContent) IsInputMessageContent() bool

type InputVenueMessageContent

type InputVenueMessageContent struct {
	Lat float32 `json:"latitude"`
	Lng float32 `json:"longitude"`

	// Name of the venue.
	Title string `json:"title"`

	// Address of the venue.
	Address string `json:"address"`

	// Optional. Foursquare identifier of the venue, if known.
	FoursquareID string `json:"foursquare_id,omitempty"`
}

InputVenueMessageContent represents the content of a venue message to be sent as the result of an inline query.

func (*InputVenueMessageContent) IsInputMessageContent

func (input *InputVenueMessageContent) IsInputMessageContent() bool

type Inputtable

type Inputtable interface {
	Media

	// InputMedia returns already marshalled InputMedia type
	// ready to be used in sending and editing media methods.
	InputMedia() InputMedia
}

Inputtable is a generic type for all kinds of media you can put into an album.

type Invoice

type Invoice struct {
	Title       string  `json:"title"`
	Description string  `json:"description"`
	Payload     string  `json:"payload"`
	Currency    string  `json:"currency"`
	Prices      []Price `json:"prices"`
	Token       string  `json:"provider_token"`
	Data        string  `json:"provider_data"`

	Photo     *Photo `json:"photo"`
	PhotoSize int    `json:"photo_size"`

	// Unique deep-linking parameter that can be used to
	// generate this invoice when used as a start parameter (0).
	Start string `json:"start_parameter"`

	// Shows the total price in the smallest units of the currency.
	// For example, for a price of US$ 1.45 pass amount = 145.
	Total int `json:"total_amount"`

	MaxTipAmount        int   `json:"max_tip_amount"`
	SuggestedTipAmounts []int `json:"suggested_tip_amounts"`

	NeedName            bool `json:"need_name"`
	NeedPhoneNumber     bool `json:"need_phone_number"`
	NeedEmail           bool `json:"need_email"`
	NeedShippingAddress bool `json:"need_shipping_address"`
	SendPhoneNumber     bool `json:"send_phone_number_to_provider"`
	SendEmail           bool `json:"send_email_to_provider"`
	Flexible            bool `json:"is_flexible"`
}

Invoice contains basic information about an invoice.

func (*Invoice) Send

func (i *Invoice) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers invoice through bot b to recipient.

type KeyStrategy added in v0.1.15

type KeyStrategy int64
const (
	// KeyStrategySenderAndChat ensures that each sender get a unique conversation in each chats.
	KeyStrategySenderAndChat KeyStrategy = iota
	// KeyStrategySender gives a unique conversation to each sender, but that conversation is available in all chats.
	KeyStrategySender
	// KeyStrategyChat gives a unique conversation to each chat, which all senders can interact in together.
	KeyStrategyChat
)

Note: If you add a new keystrategy here, make sure to add it to the getStateKey method!

type Location

type Location struct {
	Lat                float32  `json:"latitude"`
	Lng                float32  `json:"longitude"`
	HorizontalAccuracy *float32 `json:"horizontal_accuracy,omitempty"`
	Heading            int      `json:"heading,omitempty"`
	AlertRadius        int      `json:"proximity_alert_radius,omitempty"`

	// Period in seconds for which the location will be updated
	// (see Live Locations, should be between 60 and 86400.)
	LivePeriod int `json:"live_period,omitempty"`
}

Location object represents geographic position.

func (*Location) Send

func (x *Location) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers media through bot b to recipient.

type LocationResult

type LocationResult struct {
	ResultBase

	Location

	// Location title.
	Title string `json:"title"`

	// Optional. Url of the thumbnail for the result.
	ThumbURL string `json:"thumbnail_url,omitempty"`
}

LocationResult represents a location on a map.

type Logger added in v0.1.3

type Logger interface {
	Fatalf(context.Context, string, ...interface{})
	Errorf(context.Context, string, ...interface{})
	Warningf(context.Context, string, ...interface{})
	Infof(context.Context, string, ...interface{})
	Debugf(context.Context, string, ...interface{})
	Noticef(context.Context, string, ...interface{})
}

Logger is the interface to send logs to. It can be set using WithPublisherOptionsLogger() or WithConsumerOptionsLogger().

type Login

type Login struct {
	URL         string `json:"url"`
	Text        string `json:"forward_text,omitempty"`
	Username    string `json:"bot_username,omitempty"`
	WriteAccess bool   `json:"request_write_access,omitempty"`
}

Login represents a parameter of the inline keyboard button used to automatically authorize a user. Serves as a great replacement for the Telegram Login Widget when the user is coming from Telegram.

type LongPoller

type LongPoller struct {
	Limit        int
	Timeout      time.Duration
	LastUpdateID int

	// AllowedUpdates contains the update types
	// you want your bot to receive.
	//
	// Possible values:
	//		message
	// 		edited_message
	// 		channel_post
	// 		edited_channel_post
	// 		inline_query
	// 		chosen_inline_result
	// 		callback_query
	// 		shipping_query
	// 		pre_checkout_query
	// 		poll
	// 		poll_answer
	//
	AllowedUpdates []string `yaml:"allowed_updates"`
}

LongPoller is a classic LongPoller with timeout.

func (*LongPoller) Poll

func (p *LongPoller) Poll(b *Bot, dest chan Update, stop chan struct{})

Poll does long polling.

type M

type M = map[string]interface{}

M is a shortcut for map[string]interface{}. Useful for passing arguments to the layout functions.

type MaskFeature

type MaskFeature = string
const (
	MaskForehead MaskFeature = "forehead"
	MaskEyes     MaskFeature = "eyes"
	MaskMouth    MaskFeature = "mouth"
	MaskChin     MaskFeature = "chin"
)

type MaskPosition

type MaskPosition struct {
	Feature MaskFeature `json:"point"`
	XShift  float32     `json:"x_shift"`
	YShift  float32     `json:"y_shift"`
	Scale   float32     `json:"scale"`
}

MaskPosition describes the position on faces where a mask should be placed by default.

type Media

type Media interface {
	// MediaType returns string-represented media type.
	MediaType() string

	// MediaFile returns a pointer to the media file.
	MediaFile() *File
}

Media is a generic type for all kinds of media that includes File.

type MemberStatus

type MemberStatus string

MemberStatus is one's chat status.

const (
	Creator       MemberStatus = "creator"
	Administrator MemberStatus = "administrator"
	Member        MemberStatus = "member"
	Restricted    MemberStatus = "restricted"
	Left          MemberStatus = "left"
	Kicked        MemberStatus = "kicked"
)
type MenuButton struct {
	Type   MenuButtonType `json:"type"`
	Text   string         `json:"text,omitempty"`
	WebApp *WebApp        `json:"web_app,omitempty"`
}

MenuButton describes the bot's menu button in a private chat.

type MenuButtonType = string
const (
	MenuButtonDefault  MenuButtonType = "default"
	MenuButtonCommands MenuButtonType = "commands"
	MenuButtonWebApp   MenuButtonType = "web_app"
)

type Message

type Message struct {
	ID int `json:"message_id"`

	// (Optional) Unique identifier of a message thread to which the message belongs; for supergroups only
	ThreadID int `json:"message_thread_id"`

	// For message sent to channels, Sender will be nil
	Sender *User `json:"from"`

	// Unixtime, use Message.Time() to get time.Time
	Unixtime int64 `json:"date"`

	// Conversation the message belongs to.
	Chat *Chat `json:"chat"`

	// Sender of the message, sent on behalf of a chat.
	SenderChat *Chat `json:"sender_chat"`

	// For forwarded messages, sender of the original message.
	OriginalSender *User `json:"forward_from"`

	// For forwarded messages, chat of the original message when
	// forwarded from a channel.
	OriginalChat *Chat `json:"forward_from_chat"`

	// For forwarded messages, identifier of the original message
	// when forwarded from a channel.
	OriginalMessageID int `json:"forward_from_message_id"`

	// For forwarded messages, signature of the post author.
	OriginalSignature string `json:"forward_signature"`

	// For forwarded messages, sender's name from users who
	// disallow adding a link to their account.
	OriginalSenderName string `json:"forward_sender_name"`

	// For forwarded messages, unixtime of the original message.
	OriginalUnixtime int `json:"forward_date"`

	// For information about the original message for forwarded messages.
	Origin *MessageOrigin `json:"forward_origin"`

	// Message is a channel post that was automatically forwarded to the connected discussion group.
	AutomaticForward bool `json:"is_automatic_forward"`

	// For replies, ReplyTo represents the original message.
	//
	// Note that the Message object in this field will not
	// contain further ReplyTo fields even if it
	// itself is a reply.
	ReplyTo *Message `json:"reply_to_message"`

	// (Optional) For replies to a story, the original story
	Story *Story `json:"story"`

	// (Optional) Information about the message that is being replied to,
	// which may come from another chat or forum topic.
	ExternalReplyInfo *ExternalReplyInfo `json:"external_reply"`

	// (Optional) For replies that quote part of the original message,
	// the quoted part of the message.
	Quote *TextQuote `json:"quote"`

	// Shows through which bot the message was sent.
	Via *User `json:"via_bot"`

	// For replies to a story, the original story.
	ReplyToStory *Story `json:"reply_to_story"`

	// (Optional) Time of last edit in Unix.
	LastEdit int64 `json:"edit_date"`

	// (Optional) True, if the message is sent to a forum topic.
	TopicMessage bool `json:"is_topic_message"`

	// (Optional) Message can't be forwarded.
	Protected bool `json:"has_protected_content,omitempty"`

	// AlbumID is the unique identifier of a media message group
	// this message belongs to.
	AlbumID string `json:"media_group_id"`

	// Author signature (in channels).
	Signature string `json:"author_signature"`

	// For a text message, the actual UTF-8 text of the message.
	Text string `json:"text"`

	// For registered commands, will contain the string payload:
	//
	// Ex: `/command <payload>` or `/command@botname <payload>`
	Payload string `json:"-"`

	// For text messages, special entities like usernames, URLs, bot commands,
	// etc. that appear in the text.
	Entities Entities `json:"entities,omitempty"`

	// (Optional) PreviewOptions used for link preview generation for the message,
	// if it is a text message and link preview options were changed.
	PreviewOptions *PreviewOptions `json:"link_preview_options,omitempty"`

	// Some messages containing media, may as well have a caption.
	Caption string `json:"caption,omitempty"`

	// For messages with a caption, special entities like usernames, URLs,
	// bot commands, etc. that appear in the caption.
	CaptionEntities Entities `json:"caption_entities,omitempty"`

	// For an audio recording, information about it.
	Audio *Audio `json:"audio"`

	// For a general file, information about it.
	Document *Document `json:"document"`

	// For a photo, all available sizes (thumbnails).
	Photo *Photo `json:"photo"`

	// For a sticker, information about it.
	Sticker *Sticker `json:"sticker"`

	// For a voice message, information about it.
	Voice *Voice `json:"voice"`

	// For a video note, information about it.
	VideoNote *VideoNote `json:"video_note"`

	// For a video, information about it.
	Video *Video `json:"video"`

	// For an animation, information about it.
	Animation *Animation `json:"animation"`

	// For a contact, contact information itself.
	Contact *Contact `json:"contact"`

	// For a location, its longitude and latitude.
	Location *Location `json:"location"`

	// For a venue, information about it.
	Venue *Venue `json:"venue"`

	// For a poll, information the native poll.
	Poll *Poll `json:"poll"`

	// For a game, information about it.
	Game *Game `json:"game"`

	// For a dice, information about it.
	Dice *Dice `json:"dice"`

	// (Optional) The message is a scheduled giveaway message.
	Giveaway *Giveaway `json:"giveaway"`

	// (Optional) A giveaway with public winners was completed.
	GiveawayWinners *GiveawayWinners `json:"giveaway_winners"`

	// (Optional) Service message: a scheduled giveaway was created.
	GiveawayCreated *GiveawayCreated `json:"giveaway_created"`

	// (Optional) Service message: a giveaway without public winners was completed.
	GiveawayCompleted *GiveawayCompleted `json:"giveaway_completed"`

	// For a service message, represents a user,
	// that just got added to chat, this message came from.
	//
	// Sender leads to User, capable of invite.
	//
	// UserJoined might be the Bot itself.
	UserJoined *User `json:"new_chat_member"`

	// For a service message, represents a user,
	// that just left chat, this message came from.
	//
	// If user was kicked, Sender leads to a User,
	// capable of this kick.
	//
	// UserLeft might be the Bot itself.
	UserLeft *User `json:"left_chat_member"`

	// For a service message, represents a new title
	// for chat this message came from.
	//
	// Sender would lead to a User, capable of change.
	NewGroupTitle string `json:"new_chat_title"`

	// For a service message, represents all available
	// thumbnails of the new chat photo.
	//
	// Sender would lead to a User, capable of change.
	NewGroupPhoto *Photo `json:"new_chat_photo"`

	// For a service message, new members that were added to
	// the group or supergroup and information about them
	// (the bot itself may be one of these members).
	UsersJoined []User `json:"new_chat_members"`

	// For a service message, true if chat photo just
	// got removed.
	//
	// Sender would lead to a User, capable of change.
	GroupPhotoDeleted bool `json:"delete_chat_photo"`

	// For a service message, true if group has been created.
	//
	// You would receive such a message if you are one of
	// initial group chat members.
	//
	// Sender would lead to creator of the chat.
	GroupCreated bool `json:"group_chat_created"`

	// For a service message, true if supergroup has been created.
	//
	// You would receive such a message if you are one of
	// initial group chat members.
	//
	// Sender would lead to creator of the chat.
	SuperGroupCreated bool `json:"supergroup_chat_created"`

	// For a service message, true if channel has been created.
	//
	// You would receive such a message if you are one of
	// initial channel administrators.
	//
	// Sender would lead to creator of the chat.
	ChannelCreated bool `json:"channel_chat_created"`

	// For a service message, the destination (supergroup) you
	// migrated to.
	//
	// You would receive such a message when your chat has migrated
	// to a supergroup.
	//
	// Sender would lead to creator of the migration.
	MigrateTo int64 `json:"migrate_to_chat_id"`

	// For a service message, the Origin (normal group) you migrated
	// from.
	//
	// You would receive such a message when your chat has migrated
	// to a supergroup.
	//
	// Sender would lead to creator of the migration.
	MigrateFrom int64 `json:"migrate_from_chat_id"`

	// Specified message was pinned. Note that the Message object
	// in this field will not contain further ReplyTo fields even
	// if it is itself a reply.
	PinnedMessage *Message `json:"pinned_message"`

	// Message is an invoice for a payment.
	Invoice *Invoice `json:"invoice"`

	// Message is a service message about a successful payment.
	Payment *Payment `json:"successful_payment"`

	// For a service message, a user was shared with the bot.
	UserShared *RecipientShared `json:"users_shared,omitempty"`

	// For a service message, a chat was shared with the bot.
	ChatShared *RecipientShared `json:"chat_shared,omitempty"`

	// The domain name of the website on which the user has logged in.
	ConnectedWebsite string `json:"connected_website,omitempty"`

	// For a service message, a video chat started in the chat.
	VideoChatStarted *VideoChatStarted `json:"video_chat_started,omitempty"`

	// For a service message, a video chat ended in the chat.
	VideoChatEnded *VideoChatEnded `json:"video_chat_ended,omitempty"`

	// For a service message, some users were invited in the video chat.
	VideoChatParticipants *VideoChatParticipants `json:"video_chat_participants_invited,omitempty"`

	// For a service message, a video chat schedule in the chat.
	VideoChatScheduled *VideoChatScheduled `json:"video_chat_scheduled,omitempty"`

	// For a data sent by a Web App.
	WebAppData *WebAppData `json:"web_app_data,omitempty"`

	// For a service message, represents the content of a service message,
	// sent whenever a user in the chat triggers a proximity alert set by another user.
	ProximityAlert *ProximityAlert `json:"proximity_alert_triggered,omitempty"`

	// For a service message, represents about a change in auto-delete timer settings.
	AutoDeleteTimer *AutoDeleteTimer `json:"message_auto_delete_timer_changed,omitempty"`

	// Inline keyboard attached to the message.
	ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`

	// Service message: user boosted the chat.
	BoostAdded *BoostAdded `json:"boost_added"`

	// If the sender of the message boosted the chat, the number of boosts
	// added by the user.
	SenderBoostCount int `json:"sender_boost_count"`

	// Service message: forum topic created
	TopicCreated *Topic `json:"forum_topic_created,omitempty"`

	// Service message: forum topic closed
	TopicClosed *struct{} `json:"forum_topic_closed,omitempty"`

	// Service message: forum topic reopened
	TopicReopened *Topic `json:"forum_topic_reopened,omitempty"`

	// Service message: forum topic deleted
	TopicEdited *Topic `json:"forum_topic_edited,omitempty"`

	// Service message: general forum topic hidden
	GeneralTopicHidden *struct{} `json:"general_topic_hidden,omitempty"`

	// Service message: general forum topic unhidden
	GeneralTopicUnhidden *struct{} `json:"general_topic_unhidden,omitempty"`

	// Service message: represents spoiler information about the message.
	HasMediaSpoiler bool `json:"has_media_spoiler,omitempty"`

	// Service message: the user allowed the bot added to the attachment menu to write messages
	WriteAccessAllowed *WriteAccessAllowed `json:"write_access_allowed,omitempty"`
}

Message object represents a message.

func (*Message) EntityText

func (m *Message) EntityText(e MessageEntity) string

EntityText returns the substring of the message identified by the given MessageEntity.

It's safer than manually slicing Text because Telegram uses UTF-16 indices whereas Go string are []byte.

func (*Message) FromChannel

func (m *Message) FromChannel() bool

FromChannel returns true, if message came from a channel.

func (*Message) FromGroup

func (m *Message) FromGroup() bool

FromGroup returns true, if message came from a group OR a supergroup.

func (*Message) Inaccessible added in v0.1.17

func (m *Message) Inaccessible() bool

Inaccessible shows whether the message is InaccessibleMessage object.

func (*Message) IsForwarded

func (m *Message) IsForwarded() bool

IsForwarded says whether message is forwarded copy of another message or not.

func (*Message) IsReply

func (m *Message) IsReply() bool

IsReply says whether message is a reply to another message.

func (*Message) IsService

func (m *Message) IsService() bool

IsService returns true, if message is a service message, returns false otherwise.

Service messages are automatically sent messages, which typically occur on some global action. For instance, when anyone leaves the chat or chat title changes.

func (*Message) LastEdited

func (m *Message) LastEdited() time.Time

LastEdited returns time.Time of last edit.

func (*Message) Media

func (m *Message) Media() Media

Media returns the message's media if it contains either photo, voice, audio, animation, sticker, document, video or video note.

func (*Message) MessageSig

func (m *Message) MessageSig() (string, int64)

MessageSig satisfies Editable interface (see Editable.)

func (*Message) Private

func (m *Message) Private() bool

Private returns true, if it's a personal message.

func (*Message) Time

func (m *Message) Time() time.Time

Time returns the moment of message creation in local time.

type MessageEntity

type MessageEntity struct {
	// Specifies entity type.
	Type EntityType `json:"type"`

	// Offset in UTF-16 code units to the start of the entity.
	Offset int `json:"offset"`

	// Length of the entity in UTF-16 code units.
	Length int `json:"length"`

	// (Optional) For EntityTextLink entity type only.
	//
	// URL will be opened after user taps on the text.
	URL string `json:"url,omitempty"`

	// (Optional) For EntityTMention entity type only.
	User *User `json:"user,omitempty"`

	// (Optional) For EntityCodeBlock entity type only.
	Language string `json:"language,omitempty"`

	// (Optional) For EntityCustomEmoji entity type only.
	CustomEmoji string `json:"custom_emoji_id"`
}

MessageEntity object represents "special" parts of text messages, including hashtags, usernames, URLs, etc.

type MessageOrigin added in v0.1.17

type MessageOrigin struct {
	// Type of the message origin, always “channel”.
	Type string `json:"type"`

	// Date the message was sent originally in Unix time.
	DateUnixtime int64 `json:"date"`

	// User that sent the message originally.
	Sender *User `json:"sender_user,omitempty"`

	// Name of the user that sent the message originally.
	SenderUsername string `json:"sender_user_name,omitempty"`

	// Chat that sent the message originally.
	SenderChat *Chat `json:"sender_chat,omitempty"`

	// Channel chat to which the message was originally sent.
	Chat *Chat `json:"chat,omitempty"`

	// Unique message identifier inside the chat.
	MessageID int `json:"message_id,omitempty"`

	// (Optional) For messages originally sent by an anonymous chat administrator,
	// original message author signature.
	Signature string `json:"author_signature,omitempty"`
}

MessageOrigin a message reference that has been sent originally by a known user.

func (*MessageOrigin) Time added in v0.1.17

func (mo *MessageOrigin) Time() time.Time

Time returns the moment of message that was sent originally in local time.

type MessageReaction added in v0.1.17

type MessageReaction struct {
	// The chat containing the message the user reacted to.
	Chat *Chat `json:"chat"`

	// Unique identifier of the message inside the chat.
	MessageID int `json:"message_id"`

	// (Optional) The user that changed the reaction,
	// if the user isn't anonymous
	User *User `json:"user"`

	// (Optional) The chat on behalf of which the reaction was changed,
	// if the user is anonymous.
	ActorChat *Chat `json:"actor_chat"`

	// Date of the change in Unix time.
	DateUnixtime int64 `json:"date"`

	// Previous list of reaction types that were set by the user.
	OldReaction []Reaction `json:"old_reaction"`

	// New list of reaction types that have been set by the user.
	NewReaction []Reaction `json:"new_reaction"`
}

MessageReaction object represents a change of a reaction on a message performed by a user.

func (*MessageReaction) Time added in v0.1.17

func (mu *MessageReaction) Time() time.Time

type MessageReactionCount added in v0.1.17

type MessageReactionCount struct {
	// The chat containing the message.
	Chat *Chat `json:"chat"`

	// Unique message identifier inside the chat.
	MessageID int `json:"message_id"`

	// Date of the change in Unix time.
	DateUnixtime int64 `json:"date"`

	// List of reactions that are present on the message.
	Reactions *ReactionCount `json:"reactions"`
}

MessageReactionCount represents reaction changes on a message with anonymous reactions.

func (*MessageReactionCount) Time added in v0.1.17

func (mc *MessageReactionCount) Time() time.Time

Time returns the moment of change in local time.

type MiddlewareFunc

type MiddlewareFunc func(HandlerFunc) HandlerFunc

MiddlewareFunc represents a middleware processing function, which get called before the endpoint group or specific handler.

type MiddlewarePoller

type MiddlewarePoller struct {
	Capacity int // Default: 1
	Poller   Poller
	Filter   func(*Update) bool
}

MiddlewarePoller is a special kind of poller that acts like a filter for updates. It could be used for spam handling, banning or whatever.

For heavy middleware, use increased capacity.

func NewMiddlewarePoller

func NewMiddlewarePoller(original Poller, filter func(*Update) bool) *MiddlewarePoller

NewMiddlewarePoller wait for it... constructs a new middleware poller.

func (*MiddlewarePoller) Poll

func (p *MiddlewarePoller) Poll(b *Bot, dest chan Update, stop chan struct{})

Poll sieves updates through middleware filter.

type Mpeg4GifResult

type Mpeg4GifResult struct {
	ResultBase

	// A valid URL for the MP4 file.
	URL string `json:"mpeg4_url"`

	// Optional. Video width.
	Width int `json:"mpeg4_width,omitempty"`

	// Optional. Video height.
	Height int `json:"mpeg4_height,omitempty"`

	// Optional. Video duration.
	Duration int `json:"mpeg4_duration,omitempty"`

	// URL of the static thumbnail (jpeg or gif) for the result.
	ThumbURL string `json:"thumbnail_url,omitempty"`

	// Optional. MIME type of the thumbnail, must be one of
	// “image/jpeg”, “image/gif”, or “video/mp4”.
	ThumbMIME string `json:"thumbnail_mime_type,omitempty"`

	// Optional. Title for the result.
	Title string `json:"title,omitempty"`

	// Optional. Caption of the MPEG-4 file to be sent, 0-200 characters.
	Caption string `json:"caption,omitempty"`

	// If Cache != "", it'll be used instead
	Cache string `json:"mpeg4_file_id,omitempty"`
}

Mpeg4GifResult represents a link to a video animation (H.264/MPEG-4 AVC video without sound).

type Option

type Option int

Option is a shortcut flag type for certain message features (so-called options). It means that instead of passing fully-fledged SendOptions* to Send(), you can use these flags instead.

Supported options are defined as iota-constants.

const (
	// NoPreview = SendOptions.DisableWebPagePreview
	NoPreview Option = iota

	// Silent = SendOptions.DisableNotification
	Silent

	// AllowWithoutReply = SendOptions.AllowWithoutReply
	AllowWithoutReply

	// Protected = SendOptions.Protected
	Protected

	// ForceReply = ReplyMarkup.ForceReply
	ForceReply

	// OneTimeKeyboard = ReplyMarkup.OneTimeKeyboard
	OneTimeKeyboard

	// RemoveKeyboard = ReplyMarkup.RemoveKeyboard
	RemoveKeyboard
)

type Order

type Order struct {
	Name        string          `json:"name"`
	PhoneNumber string          `json:"phone_number"`
	Email       string          `json:"email"`
	Address     ShippingAddress `json:"shipping_address"`
}

Order represents information about an order.

type ParseMode

type ParseMode = string

ParseMode determines the way client applications treat the text of the message

const (
	ModeDefault    ParseMode = ""
	ModeMarkdown   ParseMode = "Markdown"
	ModeMarkdownV2 ParseMode = "MarkdownV2"
	ModeHTML       ParseMode = "HTML"
)

type PassportData added in v0.1.8

type PassportData struct {
	// Array with information about documents and other Telegram Passport
	// elements that was shared with the bot
	Data []EncryptedPassportElement `json:"data"`

	// Encrypted credentials required to decrypt the data
	Credentials *EncryptedCredentials `json:"credentials"`
}

PassportData contains information about Telegram Passport data shared with the bot by the user.

type PassportElementError added in v0.1.8

type PassportElementError interface{}

PassportElementError represents an error in the Telegram Passport element which was submitted that should be resolved by the user.

type PassportElementErrorDataField added in v0.1.8

type PassportElementErrorDataField struct {
	// Error source, must be data
	Source string `json:"source"`

	// The section of the user's Telegram Passport which has the error, one
	// of "personal_details", "passport", "driver_license", "identity_card",
	// "internal_passport", "address"
	Type string `json:"type"`

	// Name of the data field which has the error
	FieldName string `json:"field_name"`

	// Base64-encoded data hash
	DataHash string `json:"data_hash"`

	// Error message
	Message string `json:"message"`
}

PassportElementErrorDataField represents an issue in one of the data fields that was provided by the user. The error is considered resolved when the field's value changes.

type PassportElementErrorFile added in v0.1.8

type PassportElementErrorFile struct {
	// Error source, must be a file
	Source string `json:"source"`

	// The section of the user's Telegram Passport which has the issue, one
	// of "utility_bill", "bank_statement", "rental_agreement",
	// "passport_registration", "temporary_registration"
	Type string `json:"type"`

	// Base64-encoded file hash
	FileHash string `json:"file_hash"`

	// Error message
	Message string `json:"message"`
}

PassportElementErrorFile represents an issue with a document scan. The error is considered resolved when the file with the document scan changes.

type PassportElementErrorFiles added in v0.1.8

type PassportElementErrorFiles struct {
	// Error source, must be files
	Source string `json:"source"`

	// The section of the user's Telegram Passport which has the issue, one
	// of "utility_bill", "bank_statement", "rental_agreement",
	// "passport_registration", "temporary_registration"
	Type string `json:"type"`

	// List of base64-encoded file hashes
	FileHashes []string `json:"file_hashes"`

	// Error message
	Message string `json:"message"`
}

PassportElementErrorFiles represents an issue with a list of scans. The error is considered resolved when the list of files containing the scans changes.

type PassportElementErrorFrontSide added in v0.1.8

type PassportElementErrorFrontSide struct {
	// Error source, must be front_side
	Source string `json:"source"`

	// The section of the user's Telegram Passport which has the issue, one
	// of "passport", "driver_license", "identity_card", "internal_passport"
	Type string `json:"type"`

	// Base64-encoded hash of the file with the front side of the document
	FileHash string `json:"file_hash"`

	// Error message
	Message string `json:"message"`
}

PassportElementErrorFrontSide represents an issue with the front side of a document. The error is considered resolved when the file with the front side of the document changes.

type PassportElementErrorReverseSide added in v0.1.8

type PassportElementErrorReverseSide struct {
	// Error source, must be reverse_side
	Source string `json:"source"`

	// The section of the user's Telegram Passport which has the issue, one
	// of "driver_license", "identity_card"
	Type string `json:"type"`

	// Base64-encoded hash of the file with the reverse side of the document
	FileHash string `json:"file_hash"`

	// Error message
	Message string `json:"message"`
}

PassportElementErrorReverseSide represents an issue with the reverse side of a document. The error is considered resolved when the file with reverse side of the document changes.

type PassportElementErrorSelfie added in v0.1.8

type PassportElementErrorSelfie struct {
	// Error source, must be selfie
	Source string `json:"source"`

	// The section of the user's Telegram Passport which has the issue, one
	// of "passport", "driver_license", "identity_card", "internal_passport"
	Type string `json:"type"`

	// Base64-encoded hash of the file with the selfie
	FileHash string `json:"file_hash"`

	// Error message
	Message string `json:"message"`
}

PassportElementErrorSelfie represents an issue with the selfie with a document. The error is considered resolved when the file with the selfie changes.

type PassportFile added in v0.1.8

type PassportFile struct {
	File
	// Unix time when the file was uploaded
	FileDate int64 `json:"file_date"`
}

PassportFile represents a file uploaded to Telegram Passport. Currently, all Telegram Passport files are in JPEG format when decrypted and don't exceed 10MB.

type PassportRequestInfoConfig added in v0.1.8

type PassportRequestInfoConfig struct {
	BotID     int            `json:"bot_id"`
	Scope     *PassportScope `json:"scope"`
	Nonce     string         `json:"nonce"`
	PublicKey string         `json:"public_key"`
}

PassportRequestInfoConfig allows you to request passport info

type PassportScope added in v0.1.8

type PassportScope struct {
	V    int                    `json:"v"`
	Data []PassportScopeElement `json:"data"`
}

PassportScope is the requested scopes of data.

type PassportScopeElement added in v0.1.8

type PassportScopeElement interface {
	ScopeType() string
}

PassportScopeElement supports using one or one of several elements.

type PassportScopeElementOne added in v0.1.8

type PassportScopeElementOne struct {
	Type        string `json:"type"` // One of “personal_details”, “passport”, “driver_license”, “identity_card”, “internal_passport”, “address”, “utility_bill”, “bank_statement”, “rental_agreement”, “passport_registration”, “temporary_registration”, “phone_number”, “email”
	Selfie      bool   `json:"selfie"`
	Translation bool   `json:"translation"`
	NativeNames bool   `json:"native_name"`
}

PassportScopeElementOne requires the specified element be provided.

func (*PassportScopeElementOne) ScopeType added in v0.1.8

func (eo *PassportScopeElementOne) ScopeType() string

ScopeType is the scope type.

type PassportScopeElementOneOfSeveral added in v0.1.8

type PassportScopeElementOneOfSeveral struct {
}

PassportScopeElementOneOfSeveral allows you to request any one of the requested documents.

func (*PassportScopeElementOneOfSeveral) ScopeType added in v0.1.8

func (eo *PassportScopeElementOneOfSeveral) ScopeType() string

ScopeType is the scope type.

type Payment

type Payment struct {
	Currency         string `json:"currency"`
	Total            int    `json:"total_amount"`
	Payload          string `json:"invoice_payload"`
	OptionID         string `json:"shipping_option_id"`
	Order            Order  `json:"order_info"`
	TelegramChargeID string `json:"telegram_payment_charge_id"`
	ProviderChargeID string `json:"provider_payment_charge_id"`
}

Payment contains basic information about a successful payment.

type PersonalDetails added in v0.1.8

type PersonalDetails struct {
	FirstName            string `json:"first_name"`
	LastName             string `json:"last_name"`
	MiddleName           string `json:"middle_name"`
	BirthDate            string `json:"birth_date"`
	Gender               string `json:"gender"`
	CountryCode          string `json:"country_code"`
	ResidenceCountryCode string `json:"residence_country_code"`
	FirstNameNative      string `json:"first_name_native"`
	LastNameNative       string `json:"last_name_native"`
	MiddleNameNative     string `json:"middle_name_native"`
}

PersonalDetails https://core.telegram.org/passport#personaldetails

type Photo

type Photo struct {
	File

	Width   int    `json:"width"`
	Height  int    `json:"height"`
	Caption string `json:"caption,omitempty"`
}

Photo object represents a single photo file.

func (*Photo) InputMedia

func (p *Photo) InputMedia() InputMedia

func (*Photo) MediaFile

func (p *Photo) MediaFile() *File

func (*Photo) MediaType

func (p *Photo) MediaType() string

func (*Photo) Send

func (p *Photo) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers media through bot b to recipient.

func (*Photo) UnmarshalJSON

func (p *Photo) UnmarshalJSON(data []byte) error

UnmarshalJSON is custom unmarshaller required to abstract away the hassle of treating different thumbnail sizes. Instead, Telebot chooses the hi-res one and just sticks to it.

I really do find it a beautiful solution.

type PhotoResult

type PhotoResult struct {
	ResultBase

	// A valid URL of the photo. Photo must be in jpeg format.
	// Photo size must not exceed 5MB.
	URL string `json:"photo_url"`

	// Optional. Width of the photo.
	Width int `json:"photo_width,omitempty"`

	// Optional. Height of the photo.
	Height int `json:"photo_height,omitempty"`

	// Optional. Title for the result.
	Title string `json:"title,omitempty"`

	// Optional. Short description of the result.
	Description string `json:"description,omitempty"`

	// Optional. Caption of the photo to be sent, 0-200 characters.
	Caption string `json:"caption,omitempty"`

	// URL of the thumbnail for the photo.
	ThumbURL string `json:"thumbnail_url"`

	// If Cache != "", it'll be used instead
	Cache string `json:"photo_file_id,omitempty"`
}

PhotoResult represents a link to a photo.

type Poll

type Poll struct {
	ID         string       `json:"id"`
	Type       PollType     `json:"type"`
	Question   string       `json:"question"`
	Options    []PollOption `json:"options"`
	VoterCount int          `json:"total_voter_count"`

	// (Optional)
	Closed          bool            `json:"is_closed,omitempty"`
	CorrectOption   int             `json:"correct_option_id,omitempty"`
	MultipleAnswers bool            `json:"allows_multiple_answers,omitempty"`
	Explanation     string          `json:"explanation,omitempty"`
	ParseMode       ParseMode       `json:"explanation_parse_mode,omitempty"`
	Entities        []MessageEntity `json:"explanation_entities"`

	// True by default, shouldn't be omitted.
	Anonymous bool `json:"is_anonymous"`

	// (Mutually exclusive)
	OpenPeriod    int   `json:"open_period,omitempty"`
	CloseUnixdate int64 `json:"close_date,omitempty"`
}

Poll contains information about a poll.

func (*Poll) AddOptions

func (p *Poll) AddOptions(opts ...string)

AddOptions adds text options to the poll.

func (*Poll) CloseDate

func (p *Poll) CloseDate() time.Time

CloseDate returns the close date of poll in local time.

func (*Poll) IsQuiz

func (p *Poll) IsQuiz() bool

IsQuiz says whether poll is a quiz.

func (*Poll) IsRegular

func (p *Poll) IsRegular() bool

IsRegular says whether poll is a regular.

func (*Poll) Send

func (p *Poll) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers poll through bot b to recipient.

type PollAnswer

type PollAnswer struct {
	PollID  string `json:"poll_id"`
	Sender  *User  `json:"user"`
	Chat    *Chat  `json:"voter_chat"`
	Options []int  `json:"option_ids"`
}

PollAnswer represents an answer of a user in a non-anonymous poll.

type PollOption

type PollOption struct {
	Text       string `json:"text"`
	VoterCount int    `json:"voter_count"`
}

PollOption contains information about one answer option in a poll.

type PollType

type PollType string

PollType defines poll types.

const (
	// NOTE:
	// Despite "any" type isn't described in documentation,
	// it needed for proper KeyboardButtonPollType marshaling.
	PollAny PollType = "any"

	PollQuiz    PollType = "quiz"
	PollRegular PollType = "regular"
)

func (PollType) MarshalJSON

func (pt PollType) MarshalJSON() ([]byte, error)

MarshalJSON implements json.Marshaler. It allows passing PollType as a keyboard's poll type instead of KeyboardButtonPollType object.

type Poller

type Poller interface {
	// Poll is supposed to take the bot object
	// subscription channel and start polling
	// for Updates immediately.
	//
	// Poller must listen for stop constantly and close
	// it as soon as it's done polling.
	Poll(b *Bot, updates chan Update, stop chan struct{})
}

Poller is a provider of Updates.

All pollers must implement Poll(), which accepts bot pointer and subscription channel and start polling synchronously straight away.

type PreCheckoutQuery

type PreCheckoutQuery struct {
	Sender   *User  `json:"from"`
	ID       string `json:"id"`
	Currency string `json:"currency"`
	Payload  string `json:"invoice_payload"`
	Total    int    `json:"total_amount"`
	OptionID string `json:"shipping_option_id"`
	Order    Order  `json:"order_info"`
}

PreCheckoutQuery contains information about an incoming pre-checkout query.

type PreviewOptions added in v0.1.17

type PreviewOptions struct {
	// (Optional) True, if the link preview is disabled.
	Disabled bool `json:"is_disabled"`

	// (Optional) URL to use for the link preview. If empty, then the first URL
	// found in the message text will be used.
	URL string `json:"url"`

	// (Optional) True, if the media in the link preview is supposed to be shrunk;
	// ignored if the URL isn't explicitly specified or media size change.
	// isn't supported for the preview.
	SmallMedia bool `json:"prefer_small_media"`

	// (Optional) True, if the media in the link preview is supposed to be enlarged;
	// ignored if the URL isn't explicitly specified or media size change.
	// isn't supported for the preview.
	LargeMedia bool `json:"prefer_large_media"`

	// (Optional) True, if the link preview must be shown above the message text;
	// otherwise, the link preview will be shown below the message text.
	AboveText bool `json:"show_above_text"`
}

PreviewOptions describes the options used for link preview generation.

type Price

type Price struct {
	Label  string `json:"label"`
	Amount int    `json:"amount"`
}

Price represents a portion of the price for goods or services.

type ProximityAlert

type ProximityAlert struct {
	Traveler *User `json:"traveler,omitempty"`
	Watcher  *User `json:"watcher,omitempty"`
	Distance int   `json:"distance"`
}

ProximityAlert sent whenever a user in the chat triggers a proximity alert set by another user.

type Query

type Query struct {
	// Unique identifier for this query. 1-64 bytes.
	ID string `json:"id"`

	// Sender.
	Sender *User `json:"from"`

	// Sender location, only for bots that request user location.
	Location *Location `json:"location"`

	// Text of the query (up to 512 characters).
	Text string `json:"query"`

	// Offset of the results to be returned, can be controlled by the bot.
	Offset string `json:"offset"`

	// ChatType of the type of the chat, from which the inline query was sent.
	ChatType string `json:"chat_type"`
}

Query is an incoming inline query. When the user sends an empty query, your bot could return some default or trending results.

type QueryResponse

type QueryResponse struct {
	// The ID of the query to which this is a response.
	//
	// Note: Telebot sets this field automatically!
	QueryID string `json:"inline_query_id"`

	// The results for the inline query.
	Results Results `json:"results"`

	// (Optional) The maximum amount of time in seconds that the result
	// of the inline query may be cached on the server.
	CacheTime int `json:"cache_time,omitempty"`

	// (Optional) Pass True, if results may be cached on the server side
	// only for the user that sent the query. By default, results may
	// be returned to any user who sends the same query.
	IsPersonal bool `json:"is_personal,omitempty"`

	// (Optional) Pass the offset that a client should send in the next
	// query with the same text to receive more results. Pass an empty
	// string if there are no more results or if you don‘t support
	// pagination. Offset length can’t exceed 64 bytes.
	NextOffset string `json:"next_offset,omitempty"`

	// (Optional) If passed, clients will display a button with specified
	// text that switches the user to a private chat with the bot and sends
	// the bot a start message with the parameter switch_pm_parameter.
	SwitchPMText string `json:"switch_pm_text,omitempty"`

	// (Optional) Parameter for the start message sent to the bot when user
	// presses the switch button.
	SwitchPMParameter string `json:"switch_pm_parameter,omitempty"`

	// (Optional) A JSON-serialized object describing a button to be shown
	// above inline query results.
	Button *QueryResponseButton `json:"button,omitempty"`
}

QueryResponse builds a response to an inline Query.

type QueryResponseButton added in v0.1.17

type QueryResponseButton struct {
	// Label text on the button
	Text string `json:"text"`

	// (Optional) Description of the Web App that will be launched when the
	// user presses the button. The Web App will be able to switch back to the
	// inline mode using the method switchInlineQuery inside the Web App.
	WebApp *WebApp `json:"web_app"`

	// (Optional) Deep-linking parameter for the /start message sent to the bot
	// when a user presses the button. 1-64 characters, only A-Z, a-z, 0-9, _ and - are allowed.
	Start string `json:"start_parameter"`
}

QueryResponseButton represents a button to be shown above inline query results. You must use exactly one of the optional fields.

type Reaction added in v0.1.17

type Reaction struct {
	// Type of the reaction, always “emoji”
	Type string `json:"type"`

	// Reaction emoji.
	Emoji string `json:"emoji,omitempty"`

	// Custom emoji identifier.
	CustomEmoji string `json:"custom_emoji_id,omitempty"`
}

Reaction describes the type of reaction. Describes an instance of ReactionTypeCustomEmoji and ReactionTypeEmoji.

type ReactionCount added in v0.1.17

type ReactionCount struct {
	// Type of the reaction.
	Type Reaction `json:"type"`

	// Number of times the reaction was added.
	Count int `json:"total_count"`
}

ReactionCount represents a reaction added to a message along with the number of times it was added.

type ReactionOptions added in v0.1.17

type ReactionOptions struct {
	// List of reaction types to set on the message.
	Reactions []Reaction `json:"reaction"`

	// Pass True to set the reaction with a big animation.
	Big bool `json:"is_big"`
}

ReactionOptions represents an object of reaction options.

type Recipient

type Recipient interface {
	Recipient() string // must return legit Telegram chat_id or username
}

Recipient is any possible endpoint you can send messages to: either user, group or a channel.

type RecipientShared added in v0.1.17

type RecipientShared struct {
	ID     int32 `json:"request_id"`
	UserID int64 `json:"user_id"`
	ChatID int64 `json:"chat_id"`
}

RecipientShared combines both UserShared and ChatShared objects.

type ReplyButton

type ReplyButton struct {
	Text string `json:"text"`

	Contact  bool            `json:"request_contact,omitempty"`
	Location bool            `json:"request_location,omitempty"`
	Poll     PollType        `json:"request_poll,omitempty"`
	User     *ReplyRecipient `json:"request_users,omitempty"`
	Chat     *ReplyRecipient `json:"request_chat,omitempty"`
	WebApp   *WebApp         `json:"web_app,omitempty"`
}

ReplyButton represents a button displayed in reply-keyboard.

Set either Contact or Location to true in order to request sensitive info, such as user's phone number or current location.

func (*ReplyButton) CallbackUnique

func (t *ReplyButton) CallbackUnique() string

CallbackUnique returns ReplyButton.Text.

type ReplyMarkup

type ReplyMarkup struct {
	// InlineKeyboard is a grid of InlineButtons displayed in the message.
	//
	// Note: DO NOT confuse with ReplyKeyboard and other keyboard properties!
	InlineKeyboard [][]InlineButton `json:"inline_keyboard,omitempty"`

	// ReplyKeyboard is a grid, consisting of keyboard buttons.
	//
	// Note: you don't need to set HideCustomKeyboard field to show custom keyboard.
	ReplyKeyboard [][]ReplyButton `json:"keyboard,omitempty"`

	// ForceReply forces Telegram clients to display
	// a reply interface to the user (act as if the user
	// has selected the bot‘s message and tapped "Reply").
	ForceReply bool `json:"force_reply,omitempty"`

	// Requests clients to resize the keyboard vertically for optimal fit
	// (e.g. make the keyboard smaller if there are just two rows of buttons).
	//
	// Defaults to false, in which case the custom keyboard is always of the
	// same height as the app's standard keyboard.
	ResizeKeyboard bool `json:"resize_keyboard,omitempty"`

	// Requests clients to hide the reply keyboard as soon as it's been used.
	//
	// Defaults to false.
	OneTimeKeyboard bool `json:"one_time_keyboard,omitempty"`

	// Requests clients to remove the reply keyboard.
	//
	// Defaults to false.
	RemoveKeyboard bool `json:"remove_keyboard,omitempty"`

	// Use this param if you want to force reply from
	// specific users only.
	//
	// Targets:
	// 1) Users that are @mentioned in the text of the Message object;
	// 2) If the bot's message is a reply (has SendOptions.ReplyTo),
	//       sender of the original message.
	Selective bool `json:"selective,omitempty"`

	// Placeholder will be shown in the input field when the reply is active.
	Placeholder string `json:"input_field_placeholder,omitempty"`

	// IsPersistent allows to control when the keyboard is shown.
	IsPersistent bool `json:"is_persistent,omitempty"`
}

ReplyMarkup controls two convenient options for bot-user communications such as reply keyboard and inline "keyboard" (a grid of buttons as a part of the message).

func (*ReplyMarkup) Chat added in v0.1.17

func (r *ReplyMarkup) Chat(text string, chat *ReplyRecipient) Btn

func (*ReplyMarkup) Contact

func (r *ReplyMarkup) Contact(text string) Btn

func (*ReplyMarkup) Data

func (r *ReplyMarkup) Data(text, unique string, data ...string) Btn

func (*ReplyMarkup) Inline

func (r *ReplyMarkup) Inline(rows ...Row)

func (*ReplyMarkup) Location

func (r *ReplyMarkup) Location(text string) Btn

func (*ReplyMarkup) Login

func (r *ReplyMarkup) Login(text string, login *Login) Btn

func (*ReplyMarkup) Poll

func (r *ReplyMarkup) Poll(text string, poll PollType) Btn

func (*ReplyMarkup) Query

func (r *ReplyMarkup) Query(text, query string) Btn

func (*ReplyMarkup) QueryChat

func (r *ReplyMarkup) QueryChat(text, query string) Btn

func (*ReplyMarkup) Reply

func (r *ReplyMarkup) Reply(rows ...Row)

func (*ReplyMarkup) Row

func (r *ReplyMarkup) Row(many ...Btn) Row

Row creates a row of buttons.

func (*ReplyMarkup) Split

func (r *ReplyMarkup) Split(max int, btns []Btn) []Row

Split splits the keyboard into the rows with N maximum number of buttons. For example, if you pass six buttons and 3 as the max, you get two rows with three buttons in each.

`Split(3, []Btn{six buttons...}) -> [[1, 2, 3], [4, 5, 6]]` `Split(2, []Btn{six buttons...}) -> [[1, 2],[3, 4],[5, 6]]`

func (*ReplyMarkup) Text

func (r *ReplyMarkup) Text(text string) Btn

func (*ReplyMarkup) URL

func (r *ReplyMarkup) URL(text, url string) Btn

func (*ReplyMarkup) User added in v0.1.17

func (r *ReplyMarkup) User(text string, user *ReplyRecipient) Btn

func (*ReplyMarkup) WebApp

func (r *ReplyMarkup) WebApp(text string, app *WebApp) Btn

type ReplyParams added in v0.1.17

type ReplyParams struct {
	// Identifier of the message that will be replied to in the current chat,
	// or in the chat chat_id if it is specified.
	MessageID int `json:"message_id"`

	// (Optional) If the message to be replied to is from a different chat,
	// unique identifier for the chat or username of the channel.
	ChatID int64 `json:"chat_id"`

	// Optional. Pass True if the message should be sent even if the specified message
	// to be replied to is not found; can be used only for replies in the
	// same chat and forum topic.
	AllowWithoutReply bool `json:"allow_sending_without_reply"`

	// (Optional) Quoted part of the message to be replied to; 0-1024 characters after
	// entities parsing. The quote must be an exact substring of the message to be replied to,
	// including bold, italic, underline, strikethrough, spoiler, and custom_emoji entities.
	// The message will fail to send if the quote isn't found in the original message.
	Quote string `json:"quote"`

	// (Optional) Mode for parsing entities in the quote.
	QuoteParseMode ParseMode `json:"quote_parse_mode"`

	// (Optional) A JSON-serialized list of special entities that appear in the quote.
	// It can be specified instead of quote_parse_mode.
	QuoteEntities []MessageEntity `json:"quote_entities"`

	// (Optional) Position of the quote in the original message in UTF-16 code units.
	QuotePosition int `json:"quote_position"`
}

ReplyParams describes reply parameters for the message that is being sent.

type ReplyRecipient added in v0.1.17

type ReplyRecipient struct {
	ID int32 `json:"request_id"`

	Bot      *bool `json:"user_is_bot,omitempty"`     // user only, optional
	Premium  *bool `json:"user_is_premium,omitempty"` // user only, optional
	Quantity int   `json:"max_quantity,omitempty"`    // user only, optional

	Channel      bool    `json:"chat_is_channel,omitempty"`           // chat only, required
	Forum        *bool   `json:"chat_is_forum,omitempty"`             // chat only, optional
	WithUsername *bool   `json:"chat_has_username,omitempty"`         // chat only, optional
	Created      *bool   `json:"chat_is_created,omitempty"`           // chat only, optional
	UserRights   *Rights `json:"user_administrator_rights,omitempty"` // chat only, optional
	BotRights    *Rights `json:"bot_administrator_rights,omitempty"`  // chat only, optional
	BotMember    *bool   `json:"bot_is_member,omitempty"`             // chat only, optional
}

ReplyRecipient combines both KeyboardButtonRequestUser and KeyboardButtonRequestChat objects. Use inside ReplyButton to request the user or chat sharing with respective settings.

To pass the pointers to bool use a special tele.Flag function, that way you will be able to reflect the three-state bool (nil, false, true).

type Result

type Result interface {
	ResultID() string
	SetResultID(string)
	SetParseMode(ParseMode)
	SetContent(InputMessageContent)
	SetReplyMarkup(*ReplyMarkup)
	Process(*Bot)
}

Result represents one result of an inline query.

type ResultBase

type ResultBase struct {
	// Unique identifier for this result, 1-64 Bytes.
	// If left unspecified, a 64-bit FNV-1 hash will be calculated
	ID string `json:"id"`

	// Ignore. This field gets set automatically.
	Type string `json:"type"`

	// Optional. Send Markdown or HTML, if you want Telegram apps to show
	// bold, italic, fixed-width text or inline URLs in the media caption.
	ParseMode ParseMode `json:"parse_mode,omitempty"`

	// Optional. Content of the message to be sent.
	Content InputMessageContent `json:"input_message_content,omitempty"`

	// Optional. Inline keyboard attached to the message.
	ReplyMarkup *ReplyMarkup `json:"reply_markup,omitempty"`
}

ResultBase must be embedded into all IQRs.

func (*ResultBase) Process

func (r *ResultBase) Process(b *Bot)

func (*ResultBase) ResultID

func (r *ResultBase) ResultID() string

ResultID returns ResultBase.ID.

func (*ResultBase) SetContent

func (r *ResultBase) SetContent(content InputMessageContent)

SetContent sets ResultBase.Content.

func (*ResultBase) SetParseMode

func (r *ResultBase) SetParseMode(mode ParseMode)

SetParseMode sets ResultBase.ParseMode.

func (*ResultBase) SetReplyMarkup

func (r *ResultBase) SetReplyMarkup(markup *ReplyMarkup)

SetReplyMarkup sets ResultBase.ReplyMarkup.

func (*ResultBase) SetResultID

func (r *ResultBase) SetResultID(id string)

SetResultID sets ResultBase.ID.

type Results

type Results []Result

Results is a slice wrapper for convenient marshalling.

func (Results) MarshalJSON

func (results Results) MarshalJSON() ([]byte, error)

MarshalJSON makes sure IQRs have proper IDs and Type variables set.

type Rights

type Rights struct {
	// Anonymous is true, if the user's presence in the chat is hidden.
	Anonymous bool `json:"is_anonymous"`

	CanBeEdited         bool `json:"can_be_edited"`
	CanChangeInfo       bool `json:"can_change_info"`
	CanPostMessages     bool `json:"can_post_messages"`
	CanEditMessages     bool `json:"can_edit_messages"`
	CanDeleteMessages   bool `json:"can_delete_messages"`
	CanPinMessages      bool `json:"can_pin_messages"`
	CanInviteUsers      bool `json:"can_invite_users"`
	CanRestrictMembers  bool `json:"can_restrict_members"`
	CanPromoteMembers   bool `json:"can_promote_members"`
	CanSendMessages     bool `json:"can_send_messages"`
	CanSendPolls        bool `json:"can_send_polls"`
	CanSendOther        bool `json:"can_send_other_messages"`
	CanAddPreviews      bool `json:"can_add_web_page_previews"`
	CanManageVideoChats bool `json:"can_manage_video_chats"`
	CanManageChat       bool `json:"can_manage_chat"`
	CanManageTopics     bool `json:"can_manage_topics"`

	CanSendMedia      bool `json:"can_send_media_messages,omitempty"` // deprecated
	CanSendAudios     bool `json:"can_send_audios"`
	CanSendDocuments  bool `json:"can_send_documents"`
	CanSendPhotos     bool `json:"can_send_photos"`
	CanSendVideos     bool `json:"can_send_videos"`
	CanSendVideoNotes bool `json:"can_send_video_notes"`
	CanSendVoiceNotes bool `json:"can_send_voice_notes"`

	CanPostStories   bool `json:"can_post_stories"`
	CanEditStories   bool `json:"can_edit_stories"`
	CanDeleteStories bool `json:"can_delete_stories"`

	// Independent defines whether the chat permissions are set independently.
	// If not, the can_send_other_messages and can_add_web_page_previews permissions
	// will imply the can_send_messages, can_send_audios, can_send_documents, can_send_photos,
	// can_send_videos, can_send_video_notes, and can_send_voice_notes permissions;
	// the can_send_polls permission will imply the can_send_messages permission.
	//
	// Works for Restrict and SetGroupPermissions methods only.
	Independent bool `json:"-"`
}

Rights is a list of privileges available to chat members.

func AdminRights

func AdminRights() Rights

AdminRights could be used to promote user to admin.

func NoRestrictions

func NoRestrictions() Rights

NoRestrictions should be used when un-restricting or un-promoting user.

member.Rights = tele.NoRestrictions()
b.Restrict(chat, member)

func NoRights

func NoRights() Rights

NoRights is the default Rights{}.

type Row

type Row []Btn

Row represents an array of buttons, a row.

type SecureData added in v0.1.8

type SecureData map[string]*SecureValue

SecureData is a map of the fields and their encrypted values.

type SecureValue added in v0.1.8

type SecureValue struct {
	Data        *DataCredentials   `json:"data"`
	FrontSide   *FileCredentials   `json:"front_side"`
	ReverseSide *FileCredentials   `json:"reverse_side"`
	Selfie      *FileCredentials   `json:"selfie"`
	Translation []*FileCredentials `json:"translation"`
	Files       []*FileCredentials `json:"files"`
}

SecureValue contains encrypted values for a SecureData item.

type SendOptions

type SendOptions struct {
	// If the message is a reply, original message.
	ReplyTo *Message

	// See ReplyMarkup struct definition.
	ReplyMarkup *ReplyMarkup

	// For text messages, disables previews for links in this message.
	DisableWebPagePreview bool

	// Sends the message silently. iOS users will not receive a notification, Android users will receive a notification with no sound.
	DisableNotification bool

	// ParseMode controls how client apps render your message.
	ParseMode ParseMode

	// Entities is a list of special entities that appear in message text, which can be specified instead of parse_mode.
	Entities Entities

	// AllowWithoutReply allows sending messages not a as reply if the replied-to message has already been deleted.
	AllowWithoutReply bool

	// Protected protects the contents of sent message from forwarding and saving.
	Protected bool

	// ThreadID supports sending messages to a thread.
	ThreadID int

	// HasSpoiler marks the message as containing a spoiler.
	HasSpoiler bool

	// ReplyParams Describes the message to reply to
	ReplyParams *ReplyParams
}

SendOptions has most complete control over in what way the message must be sent, providing an API-complete set of custom properties and options.

Despite its power, SendOptions is rather inconvenient to use all the way through bot logic, so you might want to consider storing and re-using it somewhere or be using Option flags instead.

func Placeholder

func Placeholder(text string) *SendOptions

Placeholder is used to set input field placeholder as a send option.

type Sendable

type Sendable interface {
	Send(*Bot, Recipient, *SendOptions) (*Message, error)
}

Sendable is any object that can send itself.

This is pretty cool, since it lets bots implement custom Sendables for complex kind of media or chat objects spanning across multiple messages.

type Settings

type Settings struct {
	URL   string
	Token string

	// Updates channel capacity, defaulted to 100.
	Updates int

	// Poller is the provider of Updates.
	Poller Poller

	Hook IHook
	// Synchronous prevents handlers from running in parallel.
	// It makes ProcessUpdate return after the handler is finished.
	Synchronous bool

	// Verbose forces bot to log all upcoming requests.
	// Use for debugging purposes only.
	Verbose bool

	// ParseMode used to set default parse mode of all sent messages.
	// It attaches to every send, edit or whatever method. You also
	// will be able to override the default mode by passing a new one.
	ParseMode ParseMode

	// OnError is a callback function that will get called on errors
	// resulted from the handler. It is used as post-middleware function.
	// Notice that context can be nil.
	OnError func(error, Context)

	// HTTP Client used to make requests to telegram api
	Client *http.Client

	// Offline allows to create a bot without network for testing purposes.
	Offline bool

	// StateStorage is responsible for storing all running conversations.
	StateStorage IStorage

	// MaxRoutines is used to decide how to limit the number of goroutines spawned by the dispatcher.
	// This defines how many updates can be processed at the same time.
	// If MaxRoutines == 0, DefaultMaxRoutines is used instead.
	// If MaxRoutines < 0, no limits are imposed.
	// If MaxRoutines > 0, that value is used.
	MaxRoutines int
	// contains filtered or unexported fields
}

Settings represents a utility struct for passing certain properties of a bot around and is required to make bots.

type ShippingAddress

type ShippingAddress struct {
	CountryCode string `json:"country_code"`
	State       string `json:"state"`
	City        string `json:"city"`
	StreetLine1 string `json:"street_line1"`
	StreetLine2 string `json:"street_line2"`
	PostCode    string `json:"post_code"`
}

ShippingAddress represents a shipping address.

type ShippingOption

type ShippingOption struct {
	ID     string  `json:"id"`
	Title  string  `json:"title"`
	Prices []Price `json:"prices"`
}

ShippingOption represents one shipping option.

type ShippingQuery

type ShippingQuery struct {
	Sender  *User           `json:"from"`
	ID      string          `json:"id"`
	Payload string          `json:"invoice_payload"`
	Address ShippingAddress `json:"shipping_address"`
}

ShippingQuery contains information about an incoming shipping query.

type State added in v0.1.15

type State struct {
	// Key represents the name of the current state, as defined in the SubHandlers map of handlers.Conversation.
	Key         string
	ServiceName string
	Data        map[string]any
}

State stores all the variables relevant to the current conversation state.

Note: More keys may be added in the future to support additional features. As such, any storage implementations should be flexible, and allow for storing the entire struct rather than individual fields.

func (*State) SetData added in v0.1.16

func (s *State) SetData(data map[string]any) *State

func (*State) SetKey added in v0.1.16

func (s *State) SetKey(key string) *State

func (*State) SetServiceName added in v0.1.16

func (s *State) SetServiceName(srv string) *State

func (*State) UpdateData added in v0.1.16

func (s *State) UpdateData(action string, data any) *State

type StdDebugLogger added in v0.1.3

type StdDebugLogger struct{}

StdDebugLogger logs to stdout up to the `DebugF` level

func (StdDebugLogger) Debugf added in v0.1.3

func (l StdDebugLogger) Debugf(ctx context.Context, format string, v ...interface{})

func (StdDebugLogger) Errorf added in v0.1.3

func (l StdDebugLogger) Errorf(ctx context.Context, format string, v ...interface{})

func (StdDebugLogger) Fatalf added in v0.1.3

func (l StdDebugLogger) Fatalf(ctx context.Context, format string, v ...interface{})

func (StdDebugLogger) Infof added in v0.1.3

func (l StdDebugLogger) Infof(ctx context.Context, format string, v ...interface{})

func (StdDebugLogger) Noticef added in v0.1.3

func (l StdDebugLogger) Noticef(ctx context.Context, format string, v ...interface{})

func (StdDebugLogger) Warningf added in v0.1.3

func (l StdDebugLogger) Warningf(ctx context.Context, format string, v ...interface{})

type Sticker

type Sticker struct {
	File
	Type             StickerSetType `json:"type"`
	Width            int            `json:"width"`
	Height           int            `json:"height"`
	Animated         bool           `json:"is_animated"`
	Video            bool           `json:"is_video"`
	Thumbnail        *Photo         `json:"thumbnail"`
	Emoji            string         `json:"emoji"`
	SetName          string         `json:"set_name"`
	PremiumAnimation *File          `json:"premium_animation"`
	MaskPosition     *MaskPosition  `json:"mask_position"`
	CustomEmoji      string         `json:"custom_emoji_id"`
	Repaint          bool           `json:"needs_repainting"`
}

Sticker object represents a WebP image, so-called sticker.

func (*Sticker) MediaFile

func (s *Sticker) MediaFile() *File

func (*Sticker) MediaType

func (s *Sticker) MediaType() string

func (*Sticker) Send

func (s *Sticker) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers media through bot b to recipient.

type StickerResult

type StickerResult struct {
	ResultBase

	// If Cache != "", it'll be used instead
	Cache string `json:"sticker_file_id,omitempty"`
}

StickerResult represents an inline cached sticker response.

type StickerSet

type StickerSet struct {
	Type          StickerSetType   `json:"sticker_type"`
	Format        StickerSetFormat `json:"sticker_format"`
	Name          string           `json:"name"`
	Title         string           `json:"title"`
	Animated      bool             `json:"is_animated"`
	Video         bool             `json:"is_video"`
	Stickers      []Sticker        `json:"stickers"`
	Thumbnail     *Photo           `json:"thumbnail"`
	Emojis        string           `json:"emojis"`
	ContainsMasks bool             `json:"contains_masks"` // FIXME: can be removed
	MaskPosition  *MaskPosition    `json:"mask_position"`
	Repaint       bool             `json:"needs_repainting"`

	// Input is a field used in createNewStickerSet method to specify a list
	// of pre-defined stickers of type InputSticker to add to the set.
	Input []InputSticker
}

StickerSet represents a sticker set.

type StickerSetFormat added in v0.1.17

type StickerSetFormat = string
const (
	StickerStatic   StickerSetFormat = "static"
	StickerAnimated StickerSetFormat = "animated"
	StickerVideo    StickerSetFormat = "video"
)

type StickerSetType

type StickerSetType = string
const (
	StickerRegular     StickerSetType = "regular"
	StickerMask        StickerSetType = "mask"
	StickerCustomEmoji StickerSetType = "custom_emoji"
)

type StoredMessage

type StoredMessage struct {
	MessageID string `sql:"message_id" json:"message_id"`
	ChatID    int64  `sql:"chat_id" json:"chat_id"`
}

StoredMessage is an example struct suitable for being stored in the database as-is or being embedded into a larger struct, which is often the case (you might want to store some metadata alongside, or might not.)

func (StoredMessage) MessageSig

func (x StoredMessage) MessageSig() (string, int64)

type Story added in v0.1.17

type Story struct {
	// Unique identifier for the story in the chat
	ID int `json:"id"`

	// Chat that posted the story
	Poster *Chat `json:"chat"`
}

type SwitchInlineQuery added in v0.1.17

type SwitchInlineQuery struct {
	// (Optional) The default inline query to be inserted in the input field.
	// If left empty, only the bot's username will be inserted.
	Query string `json:"query"`

	// (Optional) True, if private chats with users can be chosen.
	AllowUserChats bool `json:"allow_user_chats"`

	// (Optional) True, if private chats with bots can be chosen.
	AllowBotChats bool `json:"allow_bot_chats"`

	// (Optional) True, if group and supergroup chats can be chosen.
	AllowGroupChats bool `json:"allow_group_chats"`

	// (Optional) True, if channel chats can be chosen.
	AllowChannelChats bool `json:"allow_channel_chats"`
}

SwitchInlineQuery represents an inline button that switches the current user to inline mode in a chosen chat, with an optional default inline query.

type TextQuote added in v0.1.17

type TextQuote struct {
	// Text of the quoted part of a message that is replied to by the given message.
	Text string `json:"text"`

	// (Optional) Special entities that appear in the quote.
	// Currently, only bold, italic, underline, strikethrough, spoiler,
	// and custom_emoji entities are kept in quotes.
	Entities []MessageEntity `json:"entities"`

	// Approximate quote position in the original message in UTF-16 code units
	// as specified by the sender.
	Position int `json:"position"`

	// (Optional) True, if the quote was chosen manually by the message sender.
	// Otherwise, the quote was added automatically by the server.
	Manual bool `json:"is_manual"`
}

TextQuote contains information about the quoted part of a message that is replied to by the given message.

type Topic added in v0.1.17

type Topic struct {
	Name            string `json:"name"`
	IconColor       int    `json:"icon_color"`
	IconCustomEmoji string `json:"icon_custom_emoji_id"`
	ThreadID        int    `json:"message_thread_id"`
}

type Update

type Update struct {
	ID int `json:"update_id"`

	Message              *Message              `json:"message,omitempty"`
	EditedMessage        *Message              `json:"edited_message,omitempty"`
	ChannelPost          *Message              `json:"channel_post,omitempty"`
	EditedChannelPost    *Message              `json:"edited_channel_post,omitempty"`
	MessageReaction      *MessageReaction      `json:"message_reaction"`
	MessageReactionCount *MessageReactionCount `json:"message_reaction_count"`
	Callback             *Callback             `json:"callback_query,omitempty"`
	Query                *Query                `json:"inline_query,omitempty"`
	InlineResult         *InlineResult         `json:"chosen_inline_result,omitempty"`
	ShippingQuery        *ShippingQuery        `json:"shipping_query,omitempty"`
	PreCheckoutQuery     *PreCheckoutQuery     `json:"pre_checkout_query,omitempty"`
	Poll                 *Poll                 `json:"poll,omitempty"`
	PollAnswer           *PollAnswer           `json:"poll_answer,omitempty"`
	MyChatMember         *ChatMemberUpdate     `json:"my_chat_member,omitempty"`
	ChatMember           *ChatMemberUpdate     `json:"chat_member,omitempty"`
	ChatJoinRequest      *ChatJoinRequest      `json:"chat_join_request,omitempty"`
	Boost                *BoostUpdated         `json:"chat_boost"`
	BoostRemoved         *BoostRemoved         `json:"removed_chat_boost"`
}

Update object represents an incoming update.

type User

type User struct {
	ID int64 `json:"id"`

	FirstName         string   `json:"first_name"`
	LastName          string   `json:"last_name,omitempty"`
	IsForum           bool     `json:"is_forum"`
	Username          string   `json:"username,omitempty"`
	LanguageCode      string   `json:"language_code,omitempty"`
	IsBot             bool     `json:"is_bot,omitempty"`
	IsPremium         bool     `json:"is_premium,omitempty"`
	AddedToMenu       bool     `json:"added_to_attachment_menu,omitempty"`
	Usernames         []string `json:"active_usernames"`
	CustomEmojiStatus string   `json:"emoji_status_custom_emoji_id"`

	// Returns only in getMe
	CanJoinGroups   bool `json:"can_join_groups,omitempty"`
	CanReadMessages bool `json:"can_read_all_group_messages,omitempty"`
	SupportsInline  bool `json:"supports_inline_queries,omitempty"`
}

User object represents a Telegram user, bot.

func (*User) Recipient

func (u *User) Recipient() string

Recipient returns user ID (see Recipient interface).

type UserShared added in v0.1.8

type UserShared struct {
	// Identifier of the request
	RequestId int64 `json:"request_id"`
	// Identifier of the shared user. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float type are safe for storing this identifier. The bot may not have access to the user and could be unable to use this identifier, unless the user is already known to the bot by some other means.
	UserId int64 `json:"user_id"`
}

type Venue

type Venue struct {
	Location Location `json:"location"`
	Title    string   `json:"title"`
	Address  string   `json:"address"`

	// (Optional)
	FoursquareID    string `json:"foursquare_id,omitempty"`
	FoursquareType  string `json:"foursquare_type,omitempty"`
	GooglePlaceID   string `json:"google_place_id,omitempty"`
	GooglePlaceType string `json:"google_place_type,omitempty"`
}

Venue object represents a venue location with name, address and optional foursquare ID.

func (*Venue) Send

func (v *Venue) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers media through bot b to recipient.

type VenueResult

type VenueResult struct {
	ResultBase

	Location

	// Title of the venue.
	Title string `json:"title"`

	// Address of the venue.
	Address string `json:"address"`

	// Optional. Foursquare identifier of the venue if known.
	FoursquareID string `json:"foursquare_id,omitempty"`

	// Optional. URL of the thumbnail for the result.
	ThumbURL string `json:"thumbnail_url,omitempty"`

	// Optional. Width of the thumbnail for the result.
	ThumbWidth int `json:"thumbnail_width,omitempty"`

	// Optional. Height of the thumbnail for the result.
	ThumbHeight int `json:"thumbnail_height,omitempty"`
}

VenueResult represents a venue.

type Video

type Video struct {
	File

	Width    int `json:"width"`
	Height   int `json:"height"`
	Duration int `json:"duration,omitempty"`

	// (Optional)
	Caption   string `json:"caption,omitempty"`
	Thumbnail *Photo `json:"thumbnail,omitempty"`
	Streaming bool   `json:"supports_streaming,omitempty"`
	MIME      string `json:"mime_type,omitempty"`
	FileName  string `json:"file_name,omitempty"`
}

Video object represents a video file.

func (*Video) InputMedia

func (v *Video) InputMedia() InputMedia

func (*Video) MediaFile

func (v *Video) MediaFile() *File

func (*Video) MediaType

func (v *Video) MediaType() string

func (*Video) Send

func (v *Video) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers media through bot b to recipient.

type VideoChatEnded

type VideoChatEnded struct {
	Duration int `json:"duration"` // in seconds
}

VideoChatEnded represents a service message about a video chat ended in the chat.

type VideoChatParticipants

type VideoChatParticipants struct {
	Users []User `json:"users"`
}

VideoChatParticipants represents a service message about new members invited to a video chat

type VideoChatScheduled

type VideoChatScheduled struct {
	Unixtime int64 `json:"start_date"`
}

VideoChatScheduled represents a service message about a video chat scheduled in the chat.

func (*VideoChatScheduled) StartsAt

func (v *VideoChatScheduled) StartsAt() time.Time

StartsAt returns the point when the video chat is supposed to be started by a chat administrator.

type VideoChatStarted

type VideoChatStarted struct{}

VideoChatStarted represents a service message about a video chat started in the chat.

type VideoNote

type VideoNote struct {
	File

	Duration int `json:"duration"`

	// (Optional)
	Thumbnail *Photo `json:"thumbnail,omitempty"`
	Length    int    `json:"length,omitempty"`
}

VideoNote represents a video message.

func (*VideoNote) MediaFile

func (v *VideoNote) MediaFile() *File

func (*VideoNote) MediaType

func (v *VideoNote) MediaType() string

func (*VideoNote) Send

func (v *VideoNote) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers media through bot b to recipient.

type VideoResult

type VideoResult struct {
	ResultBase

	// A valid URL for the embedded video player or video file.
	URL string `json:"video_url"`

	// Mime type of the content of video url, “text/html” or “video/mp4”.
	MIME string `json:"mime_type"`

	// URL of the thumbnail (jpeg only) for the video.
	ThumbURL string `json:"thumbnail_url"`

	// Title for the result.
	Title string `json:"title"`

	// Optional. Caption of the video to be sent, 0-200 characters.
	Caption string `json:"caption,omitempty"`

	// Optional. Video width.
	Width int `json:"video_width,omitempty"`

	// Optional. Video height.
	Height int `json:"video_height,omitempty"`

	// Optional. Video duration in seconds.
	Duration int `json:"video_duration,omitempty"`

	// Optional. Short description of the result.
	Description string `json:"description,omitempty"`

	// If Cache != "", it'll be used instead
	Cache string `json:"video_file_id,omitempty"`
}

VideoResult represents a link to a page containing an embedded video player or a video file.

type Voice

type Voice struct {
	File

	Duration int `json:"duration"`

	// (Optional)
	Caption string `json:"caption,omitempty"`
	MIME    string `json:"mime_type,omitempty"`
}

Voice object represents a voice note.

func (*Voice) MediaFile

func (v *Voice) MediaFile() *File

func (*Voice) MediaType

func (v *Voice) MediaType() string

func (*Voice) Send

func (v *Voice) Send(b *Bot, to Recipient, opt *SendOptions) (*Message, error)

Send delivers media through bot b to recipient.

type VoiceResult

type VoiceResult struct {
	ResultBase

	// A valid URL for the voice recording.
	URL string `json:"voice_url"`

	// Recording title.
	Title string `json:"title"`

	// Optional. Recording duration in seconds.
	Duration int `json:"voice_duration"`

	// Optional. Caption, 0-1024 characters.
	Caption string `json:"caption,omitempty"`

	// If Cache != "", it'll be used instead
	Cache string `json:"voice_file_id,omitempty"`
}

VoiceResult represents a link to a voice recording in an .ogg container encoded with OPUS.

type WebApp

type WebApp struct {
	URL string `json:"url"`
}

WebApp represents a parameter of the inline keyboard button or the keyboard button used to launch Web App.

type WebAppData

type WebAppData struct {
	Data string `json:"data"`
	Text string `json:"button_text"`
}

WebAppData object represents a data sent from a Web App to the bot

type WebAppMessage

type WebAppMessage struct {
	InlineMessageID string `json:"inline_message_id"`
}

WebAppMessage describes an inline message sent by a Web App on behalf of a user.

type Webhook

type Webhook struct {
	Listen         string   `json:"url"`
	MaxConnections int      `json:"max_connections"`
	AllowedUpdates []string `json:"allowed_updates"`
	IP             string   `json:"ip_address"`
	DropUpdates    bool     `json:"drop_pending_updates"`
	SecretToken    string   `json:"secret_token"`

	// (WebhookInfo)
	HasCustomCert     bool   `json:"has_custom_certificate"`
	PendingUpdates    int    `json:"pending_update_count"`
	ErrorUnixtime     int64  `json:"last_error_date"`
	ErrorMessage      string `json:"last_error_message"`
	SyncErrorUnixtime int64  `json:"last_synchronization_error_date"`

	TLS      *WebhookTLS
	Endpoint *WebhookEndpoint
	// contains filtered or unexported fields
}

A Webhook configures the poller for webhooks. It opens a port on the given listen address. If TLS is filled, the listener will use the key and cert to open a secure port. Otherwise it will use plain HTTP.

If you have a loadbalancer ore other infrastructure in front of your service, you must fill the Endpoint structure so this poller will send this data to telegram. If you leave these values empty, your local address will be sent to telegram which is mostly not what you want (at least while developing). If you have a single instance of your bot you should consider to use the LongPoller instead of a WebHook.

You can also leave the Listen field empty. In this case it is up to the caller to add the Webhook to a http-mux.

func (*Webhook) GetFiles added in v0.1.1

func (h *Webhook) GetFiles() map[string]File

func (*Webhook) GetParams added in v0.1.1

func (h *Webhook) GetParams() map[string]string

func (*Webhook) Handler added in v0.1.1

func (h *Webhook) Handler(w http.ResponseWriter, r *http.Request)

func (*Webhook) Poll

func (h *Webhook) Poll(b *Bot, dest chan Update, stop chan struct{})

func (*Webhook) ServeHTTP

func (h *Webhook) ServeHTTP(w http.ResponseWriter, r *http.Request)

The handler simply reads the update from the body of the requests and writes them to the update channel.

func (*Webhook) WaitForStop added in v0.1.1

func (h *Webhook) WaitForStop(stop chan struct{})

type WebhookEndpoint

type WebhookEndpoint struct {
	PublicURL string `json:"public_url"`
	Cert      string `json:"cert"`
}

A WebhookEndpoint describes the endpoint to which telegram will send its requests. This must be a public URL and can be a loadbalancer or something similar. If the endpoint uses TLS and the certificate is self-signed you have to add the certificate path of this certificate so telegram will trust it. This field can be ignored if you have a trusted certificate (letsencrypt, ...).

type WebhookTLS

type WebhookTLS struct {
	Key  string `json:"key"`
	Cert string `json:"cert"`
}

A WebhookTLS specifies the path to a key and a cert so the poller can open a TLS listener.

type WriteAccessAllowed added in v0.1.8

type WriteAccessAllowed struct {
	WebAppName         string `json:"web_app_name,omitempty"`
	FromRequest        bool   `json:"from_request,omitempty"`
	FromAttachmentMenu bool   `json:"from_attachment_menu,omitempty"`
}

WebAppAccessAllowed represents a service message about a user allowing a bot to write messages after adding the bot to the attachment menu or launching a Web App from a link.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL