base

package
v0.3.2 Latest Latest
Warning

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

Go to latest
Published: Feb 13, 2024 License: MIT Imports: 12 Imported by: 6

Documentation

Overview

Package base defines basic types and a wrapper around the original tgbotapi.BotAPI struct.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewReplier

func NewReplier(appenv *ApplicationEnv, reqenv *RequestEnv, msg *tgbotapi.Message) func(string)

NewReplier is a shortcut to reply with text in the user's language. Example:

reply := base.NewReplier(handler.appenv, reqenv, msg)
reply("messages.success")

Types

type ApplicationEnv

type ApplicationEnv struct {
	// Bot is used when you need to send a request to Telegram Bot API.
	Bot ExtendedBotAPI
	// Database is a reference to a [sql.DB]-like object.
	Database *pgxpool.Pool
	// Ctx is a context of the application; It's state will be switched to Done when the application is received the SIGTERM signal.
	Ctx context.Context
}

ApplicationEnv is a container for all application scoped resources.

type BotAPI

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

BotAPI is a wrapper around the original tgbotapi.BotAPI struct. It implements the ExtendedBotAPI interface.

func NewBotAPI

func NewBotAPI(api *tgbotapi.BotAPI) *BotAPI

func (*BotAPI) GetName

func (bot *BotAPI) GetName() string

func (*BotAPI) GetStandardAPI

func (bot *BotAPI) GetStandardAPI() *tgbotapi.BotAPI

func (*BotAPI) Reply

func (bot *BotAPI) Reply(msg *tgbotapi.Message, text string)

func (*BotAPI) ReplyWithInlineKeyboard

func (bot *BotAPI) ReplyWithInlineKeyboard(msg *tgbotapi.Message, text string, buttons []tgbotapi.InlineKeyboardButton)

func (*BotAPI) ReplyWithKeyboard

func (bot *BotAPI) ReplyWithKeyboard(msg *tgbotapi.Message, text string, options []string)

func (*BotAPI) ReplyWithMarkdown

func (bot *BotAPI) ReplyWithMarkdown(msg *tgbotapi.Message, text string)

func (*BotAPI) ReplyWithMessageCustomizer

func (bot *BotAPI) ReplyWithMessageCustomizer(msg *tgbotapi.Message, text string, customizer MessageCustomizer)

func (*BotAPI) Request

func (bot *BotAPI) Request(c tgbotapi.Chattable) error

Request is a simple wrapper around tgbotapi.BotAPI.Request.

func (*BotAPI) Send

func (bot *BotAPI) Send(c tgbotapi.Chattable) (tgbotapi.Message, error)

Send is an even simpler wrapper around tgbotapi.BotAPI.Send.

func (*BotAPI) SetCommands

func (bot *BotAPI) SetCommands(locpool *loc.Pool, langCodes []string, handlers []CommandHandler)

type CallbackHandler

type CallbackHandler interface {
	GetCallbackPrefix() string
	Handle(reqenv *RequestEnv, query *tgbotapi.CallbackQuery)
}

CallbackHandler is a handler for the tgbotapi.CallbackQuery update type.

type CommandHandler

type CommandHandler interface {
	MessageHandler

	GetCommands() []string
	GetScopes() []CommandScope
}

CommandHandler is a MessageHandler which is considered as a public command that will be registered automatically. https://core.telegram.org/bots/api#setmycommands Inject CommandHandlerTrait to get the default implementation of CanHandle().

func ConvertHandlersToCommands

func ConvertHandlersToCommands(handlers []MessageHandler) []CommandHandler

type CommandHandlerTrait

type CommandHandlerTrait struct {
	HandlerRefForTrait CommandHandler
}

func (CommandHandlerTrait) CanHandle

func (t CommandHandlerTrait) CanHandle(_ *RequestEnv, msg *tgbotapi.Message) bool

type CommandScope added in v0.3.0

type CommandScope string
const (
	CommandScopeDefault         CommandScope = "default"
	CommandScopeAllPrivateChats CommandScope = "all_private_chats"
	CommandScopeAllGroupChats   CommandScope = "all_group_chats"
	CommandScopeAllChatAdmins   CommandScope = "all_chat_administrators"
)

type ExtendedBotAPI

type ExtendedBotAPI interface {
	// GetName returns the name of the bot got from the getMe() request.
	GetName() string
	// SetCommands for the bot. Use [ConvertHandlersToCommands] to pass [MessageHandler] as argument for this method.
	// Descriptions must be provided as keys for [loc.Context] in the format "commands.%s.description".
	// https://core.telegram.org/bots/api#setmycommands
	SetCommands(locpool *loc.Pool, langCodes []string, handlers []CommandHandler)
	// ReplyWithMessageCustomizer is the most common method to send text messages as a reply. Use this method if you want
	// to change several options like a message in Markdown with an inline keyboard.
	ReplyWithMessageCustomizer(*tgbotapi.Message, string, MessageCustomizer)
	// Reply with just a text message, without any customizations.
	Reply(msg *tgbotapi.Message, text string)
	ReplyWithMarkdown(msg *tgbotapi.Message, text string)
	// ReplyWithKeyboard uses a one time reply keyboard.
	// https://core.telegram.org/bots/api#replykeyboardmarkup
	ReplyWithKeyboard(msg *tgbotapi.Message, text string, options []string)
	// ReplyWithInlineKeyboard attaches an inline keyboard to the message.
	// https://core.telegram.org/bots/api#inlinekeyboardmarkup
	ReplyWithInlineKeyboard(msg *tgbotapi.Message, text string, buttons []tgbotapi.InlineKeyboardButton)
	// Request is the most common method that can be used to send any request to Telegram.
	Request(tgbotapi.Chattable) error
	// Send is like the Request method but returns the sent message back with non-empty ID field.
	Send(tgbotapi.Chattable) (tgbotapi.Message, error)
	// GetStandardAPI lets you use all standard methods of the library.
	GetStandardAPI() *tgbotapi.BotAPI
}

ExtendedBotAPI is a set of more convenient methods to work with Telegram Bot API.

type FakeBotAPI

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

FakeBotAPI is a mock for the BotAPI struct. Use the GetOutput() method to get either the text of the sent message, or the request itself.

func (*FakeBotAPI) ClearOutput

func (bot *FakeBotAPI) ClearOutput()

ClearOutput deletes all data from internal buffers.

func (*FakeBotAPI) GetName

func (bot *FakeBotAPI) GetName() string

func (*FakeBotAPI) GetOutput

func (bot *FakeBotAPI) GetOutput() interface{}

GetOutput returns either a string after usage of Reply*() methods or a tgbotapi.Chattable after Request()

func (*FakeBotAPI) GetStandardAPI

func (bot *FakeBotAPI) GetStandardAPI() *tgbotapi.BotAPI

func (*FakeBotAPI) Reply

func (bot *FakeBotAPI) Reply(_ *tgbotapi.Message, text string)

func (*FakeBotAPI) ReplyWithInlineKeyboard

func (bot *FakeBotAPI) ReplyWithInlineKeyboard(_ *tgbotapi.Message, text string, _ []tgbotapi.InlineKeyboardButton)

func (*FakeBotAPI) ReplyWithKeyboard

func (bot *FakeBotAPI) ReplyWithKeyboard(_ *tgbotapi.Message, text string, _ []string)

func (*FakeBotAPI) ReplyWithMarkdown

func (bot *FakeBotAPI) ReplyWithMarkdown(_ *tgbotapi.Message, text string)

func (*FakeBotAPI) ReplyWithMessageCustomizer

func (bot *FakeBotAPI) ReplyWithMessageCustomizer(_ *tgbotapi.Message, text string, _ MessageCustomizer)

func (*FakeBotAPI) Request

func (bot *FakeBotAPI) Request(c tgbotapi.Chattable) error

func (*FakeBotAPI) Send

func (*FakeBotAPI) SetCommands

func (bot *FakeBotAPI) SetCommands(*loc.Pool, []string, []CommandHandler)

type InlineHandler

type InlineHandler interface {
	CanHandle(reqenv *RequestEnv, query *tgbotapi.InlineQuery) bool
	Handle(reqenv *RequestEnv, query *tgbotapi.InlineQuery)
}

InlineHandler is a handler for the tgbotapi.InlineQuery update type.

type MessageCustomizer

type MessageCustomizer func(msgConfig *tgbotapi.MessageConfig)

MessageCustomizer is a function that can change the message before it will be sent to Telegram. See BotAPI.ReplyWithMessageCustomizer for more information.

var (
	NoOpCustomizer     MessageCustomizer = func(msgConfig *tgbotapi.MessageConfig) {}
	MarkdownCustomizer MessageCustomizer = func(msgConfig *tgbotapi.MessageConfig) {
		msgConfig.ParseMode = tgbotapi.ModeMarkdown
	}
)

type MessageHandler

type MessageHandler interface {
	CanHandle(reqenv *RequestEnv, msg *tgbotapi.Message) bool
	Handle(reqenv *RequestEnv, msg *tgbotapi.Message)
}

MessageHandler is a handler for the tgbotapi.Message update type.

type RequestEnv

type RequestEnv struct {
	// Lang is a localization container. You can get a message in the user's language by key, using its [loc.Context.Tr] method.
	Lang *loc.Context
	// Options is a container for user options fetched from the database.
	Options settings.UserOptions
}

RequestEnv is a container for all request related common resources. It's passed to all kinds of handlers.

func NewRequestEnv

func NewRequestEnv(langCtx *loc.Context, opts settings.UserOptions) *RequestEnv

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL