telejoon

package module
v0.0.97 Latest Latest
Warning

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

Go to latest
Published: Nov 19, 2023 License: GPL-3.0 Imports: 14 Imported by: 0

README

go-telejoon

Telegram bot framework using generics making it easier to write bots.

TODOs

  • Add more handlers for groups, channels, etc. (currently identified as middleware)

Note:

  • This is a work in progress and is not ready for production use.

Docs

Here

Install Project Generator:

go install github.com/aliforever/go-telejoon/tgbot

Generate Project:

tgbot --token=BOT_TOKEN_HERE --module_path=MODULE_PATH_HERE

Documentation

Index

Constants

View Source
const (
	DefaultHandler   = "DEFAULT"
	TextHandler      = "TEXT"
	PhotoHandler     = "PHOTO"
	AudioHandler     = "AUDIO"
	DocumentHandler  = "DOCUMENT"
	StickerHandler   = "STICKER"
	VideoHandler     = "VIDEO"
	VoiceHandler     = "VOICE"
	LocationHandler  = "LOCATION"
	ContactHandler   = "CONTACT"
	VideoNoteHandler = "VIDEO_NOTE"
	VenueHandler     = "VENUE"
	PollHandler      = "POLL"
	DiceHandler      = "DICE"
)

Variables

View Source
var UserLanguageNotFoundErr = errors.New("user_language_not_found")

Functions

func Start

func Start(client *tgbotapi.TelegramBot, processor Processor)

Types

type Action

type Action interface {
	Name(update *StateUpdate) string
}

type ActionBuilder

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

func NewStaticActionBuilder

func NewStaticActionBuilder() *ActionBuilder

NewStaticActionBuilder creates a new ActionBuilder.

func (*ActionBuilder) AddConditionalRawButton added in v0.0.97

func (b *ActionBuilder) AddConditionalRawButton(
	cond func(update *StateUpdate) bool,
	button TextBuilder,
	opts ...*ButtonOptions,
) *ActionBuilder

AddConditionalRawButton adds a raw button to the ActionBuilder with a condition.

func (*ActionBuilder) AddConditionalTextButton added in v0.0.96

func (b *ActionBuilder) AddConditionalTextButton(
	cond func(update *StateUpdate) bool,
	button TextBuilder,
	text TextBuilder,
	opts ...*ButtonOptions,
) *ActionBuilder

AddConditionalTextButton adds a textHandler action to the ActionBuilder with a condition.

func (*ActionBuilder) AddCustomButton

func (b *ActionBuilder) AddCustomButton(action Action) *ActionBuilder

AddCustomButton adds a custom action of button type to the ActionBuilder.

func (*ActionBuilder) AddCustomCommand

func (b *ActionBuilder) AddCustomCommand(action Action) *ActionBuilder

AddCustomCommand adds a custom action of command type to the ActionBuilder.

func (*ActionBuilder) AddInlineMenuButton

func (b *ActionBuilder) AddInlineMenuButton(
	button TextBuilder,
	inlineMenu string,
	opts ...*ButtonOptions,
) *ActionBuilder

AddInlineMenuButton adds an inline menu action to the ActionBuilder.

func (*ActionBuilder) AddInlineMenuCommand

func (b *ActionBuilder) AddInlineMenuCommand(command TextBuilder, inlineMenu string) *ActionBuilder

AddInlineMenuCommand adds an inline menu command to the ActionBuilder.

func (*ActionBuilder) AddRawButton

func (b *ActionBuilder) AddRawButton(button TextBuilder, opts ...*ButtonOptions) *ActionBuilder

AddRawButton adds a raw button to the ActionBuilder.

func (*ActionBuilder) AddStateButton

func (b *ActionBuilder) AddStateButton(button TextBuilder, state string, opts ...*ButtonOptions) *ActionBuilder

AddStateButton adds a state action to the ActionBuilder.

func (*ActionBuilder) AddStateButtonWithHook added in v0.0.89

func (b *ActionBuilder) AddStateButtonWithHook(
	button TextBuilder,
	state string,
	hook UpdateHandler,
	opts ...*ButtonOptions,
) *ActionBuilder

AddStateButtonWithHook adds a state action to the ActionBuilder with hook.

func (*ActionBuilder) AddStateCommand

func (b *ActionBuilder) AddStateCommand(command TextBuilder, state string) *ActionBuilder

AddStateCommand adds a state command to the ActionBuilder.

func (*ActionBuilder) AddTextButton

func (b *ActionBuilder) AddTextButton(button TextBuilder, text TextBuilder, opts ...*ButtonOptions) *ActionBuilder

AddTextButton adds a textHandler action to the ActionBuilder.

func (*ActionBuilder) AddTextCommand

func (b *ActionBuilder) AddTextCommand(command TextBuilder, text string) *ActionBuilder

AddTextCommand adds a textHandler command to the ActionBuilder.

func (*ActionBuilder) SetButtonFormation

func (b *ActionBuilder) SetButtonFormation(formation ...int) *ActionBuilder

func (*ActionBuilder) SetMaxButtonPerRow

func (b *ActionBuilder) SetMaxButtonPerRow(max int) *ActionBuilder

SetMaxButtonPerRow sets the maximum number of buttons per row.

type ActionBuilderKind

type ActionBuilderKind interface {
	// contains filtered or unexported methods
}

type ActionKind

type ActionKind string
const (
	ActionKindText       ActionKind = "TEXT"
	ActionKindInlineMenu ActionKind = "INLINE_MENU"
	ActionKindState      ActionKind = "STATE"
	ActionKindRaw        ActionKind = "RAW"
)

type ButtonOptions

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

func NewButtonOptions

func NewButtonOptions(breakBefore, BreakAfter bool) *ButtonOptions

NewButtonOptions creates a new ButtonOptions.

type CallbackHandler

type CallbackHandler func(
	client *tgbotapi.TelegramBot,
	update *StateUpdate,
	args ...string,
) (SwitchAction, error)

type DefaultUserLanguageRepository

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

DefaultUserLanguageRepository is a default implementation of UserLanguageRepository.

func (*DefaultUserLanguageRepository) GetUserLanguage

func (u *DefaultUserLanguageRepository) GetUserLanguage(userID int64) (string, error)

GetUserLanguage gets a language for a user.

func (*DefaultUserLanguageRepository) SetUserLanguage

func (u *DefaultUserLanguageRepository) SetUserLanguage(userID int64, languageTag string) error

SetUserLanguage sets a language for a user.

type DeferredActionBuilder

type DeferredActionBuilder func(update *StateUpdate) *ActionBuilder

func NewDeferredActionBuilder

func NewDeferredActionBuilder(
	builder func(update *StateUpdate) *ActionBuilder,
) DeferredActionBuilder

NewDeferredActionBuilder creates a new DeferredActionBuilder.

type DeferredInlineActionBuilder

type DeferredInlineActionBuilder func(update *StateUpdate) *InlineActionBuilder

func NewDeferredInlineActionBuilder

func NewDeferredInlineActionBuilder(builder func(update *StateUpdate) *InlineActionBuilder) DeferredInlineActionBuilder

NewDeferredInlineActionBuilder creates a new DeferredInlineActionBuilder.

func (DeferredInlineActionBuilder) Build

Build builds the deferred action builder.

type DeferredTextBuilder

type DeferredTextBuilder func(update *StateUpdate) string

func NewDeferredText

func NewDeferredText(text func(update *StateUpdate) string) DeferredTextBuilder

NewDeferredText returns a new DeferredTextBuilder

func (DeferredTextBuilder) String

func (t DeferredTextBuilder) String(update *StateUpdate) string

type DynamicHandler

type DynamicHandler struct {
	UpdateHandler
}

type DynamicHandlerAudio

type DynamicHandlerAudio struct {
	UpdateHandler
}

type DynamicHandlerContact

type DynamicHandlerContact struct {
	UpdateHandler
}

type DynamicHandlerDice

type DynamicHandlerDice struct {
	UpdateHandler
}

type DynamicHandlerDocument

type DynamicHandlerDocument struct {
	UpdateHandler
}

type DynamicHandlerLocation

type DynamicHandlerLocation struct {
	UpdateHandler
}

type DynamicHandlerPhoto

type DynamicHandlerPhoto struct {
	UpdateHandler
}

type DynamicHandlerPoll

type DynamicHandlerPoll struct {
	UpdateHandler
}

type DynamicHandlerSticker

type DynamicHandlerSticker struct {
	UpdateHandler
}

type DynamicHandlerText

type DynamicHandlerText struct {
	UpdateHandler
}

type DynamicHandlerVenue

type DynamicHandlerVenue struct {
	UpdateHandler
}

type DynamicHandlerVideo

type DynamicHandlerVideo struct {
	UpdateHandler
}

type DynamicHandlerVideoNote

type DynamicHandlerVideoNote struct {
	UpdateHandler
}

type DynamicHandlerVoice

type DynamicHandlerVoice struct {
	UpdateHandler
}

type EngineWithPrivateStateHandlers

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

func WithPrivateStateHandlers

func WithPrivateStateHandlers(
	userRepo UserRepository, defaultState string, opts ...*Options) *EngineWithPrivateStateHandlers

func (*EngineWithPrivateStateHandlers) AddCallbackQueryHandler

func (e *EngineWithPrivateStateHandlers) AddCallbackQueryHandler(
	data string,
	fn func(*tgbotapi.TelegramBot, *StateUpdate, ...string) (SwitchAction, error),
) *EngineWithPrivateStateHandlers

AddCallbackQueryHandler adds a callback query Handler

func (*EngineWithPrivateStateHandlers) AddInlineMenu

AddInlineMenu adds an inline state Handler

func (*EngineWithPrivateStateHandlers) AddMiddleware

func (*EngineWithPrivateStateHandlers) AddStaticMenu

AddStaticMenu adds a static state Handler

func (*EngineWithPrivateStateHandlers) Process

func (e *EngineWithPrivateStateHandlers) Process(client *tgbotapi.TelegramBot, update tgbotapi.Update)

func (*EngineWithPrivateStateHandlers) SendInlineMenu

func (e *EngineWithPrivateStateHandlers) SendInlineMenu(
	client *tgbotapi.TelegramBot, update *StateUpdate, menu string, shouldEdit bool) error

func (*EngineWithPrivateStateHandlers) SwitchState

func (e *EngineWithPrivateStateHandlers) SwitchState(
	userID int64, client *tgbotapi.TelegramBot, update *StateUpdate, state string) error

func (*EngineWithPrivateStateHandlers) SwitchUserState

func (e *EngineWithPrivateStateHandlers) SwitchUserState(
	client *tgbotapi.TelegramBot, userID int64, state string) error

func (*EngineWithPrivateStateHandlers) WithLanguageConfig

WithLanguageConfig adds a language config to the engine

func (*EngineWithPrivateStateHandlers) WithPanicHandler added in v0.0.77

type Handler

type Handler interface {
	Handle(client *tgbotapi.TelegramBot, update *StateUpdate) (SwitchAction, bool)
}

func NewDefaultHandler

func NewDefaultHandler(handler UpdateHandler) Handler

NewDefaultHandler creates a new DefaultHandler

func NewDynamicHandlerAudio

func NewDynamicHandlerAudio(handler UpdateHandler) Handler

NewDynamicHandlerAudio creates a new DynamicHandlerAudio

func NewDynamicHandlerContact

func NewDynamicHandlerContact(handler UpdateHandler) Handler

NewDynamicHandlerContact creates a new DynamicHandlerContact

func NewDynamicHandlerDice

func NewDynamicHandlerDice(handler UpdateHandler) Handler

NewDynamicHandlerDice creates a new DynamicHandlerDice

func NewDynamicHandlerDocument

func NewDynamicHandlerDocument(handler UpdateHandler) Handler

NewDynamicHandlerDocument creates a new DynamicHandlerDocument

func NewDynamicHandlerLocation

func NewDynamicHandlerLocation(handler UpdateHandler) Handler

NewDynamicHandlerLocation creates a new DynamicHandlerLocation

func NewDynamicHandlerPhoto

func NewDynamicHandlerPhoto(handler UpdateHandler) Handler

NewDynamicHandlerPhoto creates a new DynamicHandlerPhoto

func NewDynamicHandlerPoll

func NewDynamicHandlerPoll(handler UpdateHandler) Handler

NewDynamicHandlerPoll creates a new DynamicHandlerPoll

func NewDynamicHandlerSticker

func NewDynamicHandlerSticker(handler UpdateHandler) Handler

NewDynamicHandlerSticker creates a new DynamicHandlerSticker

func NewDynamicHandlerText

func NewDynamicHandlerText(handler UpdateHandler) Handler

NewDynamicHandlerText creates a new DynamicHandlerText

func NewDynamicHandlerVenue

func NewDynamicHandlerVenue(handler UpdateHandler) Handler

NewDynamicHandlerVenue creates a new DynamicHandlerVenue

func NewDynamicHandlerVideo

func NewDynamicHandlerVideo(handler UpdateHandler) Handler

NewDynamicHandlerVideo creates a new DynamicHandlerVideo

func NewDynamicHandlerVideoNote

func NewDynamicHandlerVideoNote(handler UpdateHandler) Handler

NewDynamicHandlerVideoNote creates a new DynamicHandlerVideoNote

func NewDynamicHandlerVoice

func NewDynamicHandlerVoice(handler UpdateHandler) Handler

NewDynamicHandlerVoice creates a new DynamicHandlerVoice

type InlineAction

type InlineAction interface {
	Name(update *StateUpdate) string
	Data(update *StateUpdate) string
	Options() *ButtonOptions
}

type InlineActionBuilder

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

func NewInlineActionBuilder

func NewInlineActionBuilder() *InlineActionBuilder

NewInlineActionBuilder creates a new InlineActionBuilder.

func (*InlineActionBuilder) AddAlertButton

func (b *InlineActionBuilder) AddAlertButton(
	button TextBuilder, data TextBuilder, alertText string, opts ...*ButtonOptions) *InlineActionBuilder

func (*InlineActionBuilder) AddAlertButtonWithDialog

func (b *InlineActionBuilder) AddAlertButtonWithDialog(
	button TextBuilder, data TextBuilder, alertText string, opts ...*ButtonOptions) *InlineActionBuilder

func (*InlineActionBuilder) AddCallbackButton

func (b *InlineActionBuilder) AddCallbackButton(
	button TextBuilder,
	data TextBuilder,
	handler CallbackHandler,
	opts ...*ButtonOptions,
) *InlineActionBuilder

func (*InlineActionBuilder) AddInlineMenuButton

func (b *InlineActionBuilder) AddInlineMenuButton(
	button TextBuilder, data TextBuilder, inlineMenu string, opts ...*ButtonOptions) *InlineActionBuilder

func (*InlineActionBuilder) AddInlineMenuButtonWithEdit

func (b *InlineActionBuilder) AddInlineMenuButtonWithEdit(
	button TextBuilder, data TextBuilder, inlineMenu string, opts ...*ButtonOptions) *InlineActionBuilder

func (*InlineActionBuilder) AddStateButton

func (b *InlineActionBuilder) AddStateButton(
	button TextBuilder,
	data TextBuilder,
	state string,
	opts ...*ButtonOptions,
) *InlineActionBuilder

func (*InlineActionBuilder) AddUrlButton

func (b *InlineActionBuilder) AddUrlButton(
	button, address TextBuilder, opts ...*ButtonOptions) *InlineActionBuilder

AddUrlButton adds a new url button to the InlineActionBuilder.

func (*InlineActionBuilder) Build

func (*InlineActionBuilder) SetButtonFormation

func (b *InlineActionBuilder) SetButtonFormation(formation ...int) *InlineActionBuilder

func (*InlineActionBuilder) SetMaxButtonPerRow

func (b *InlineActionBuilder) SetMaxButtonPerRow(max int) *InlineActionBuilder

SetMaxButtonPerRow sets the maximum number of buttons per row.

type InlineActionBuilderKind

type InlineActionBuilderKind interface {
	Build(update *StateUpdate) *InlineActionBuilder
}

type InlineMenu

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

func NewInlineMenu

func NewInlineMenu(
	textBuilder TextBuilder,
	actionBuilder InlineActionBuilderKind,
	middlewares ...Middleware,
) *InlineMenu

type Language

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

func (*Language) Get

func (l *Language) Get(id string) (string, error)

Get returns the localized string for the given message ID.

func (*Language) GetWithParams

func (l *Language) GetWithParams(id string, params map[string]interface{}) (string, error)

GetWithParams returns the localized string for the given message ID and parameters.

func (*Language) MustGet

func (l *Language) MustGet(id string) string

MustGet returns the localized string for the given message ID. If the message ID is not found, it will panic.

func (*Language) MustGetWithParams

func (l *Language) MustGetWithParams(id string, params map[string]interface{}) string

MustGetWithParams returns the localized string for the given message ID and parameters.

type LanguageConfig

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

func NewLanguageConfig

func NewLanguageConfig(languages *Languages, repo UserLanguageRepository) *LanguageConfig

func (*LanguageConfig) GetLanguage added in v0.0.86

func (l *LanguageConfig) GetLanguage(tag string) *Language

GetLanguage By Tag

func (*LanguageConfig) WithChangeLanguageMenu

func (l *LanguageConfig) WithChangeLanguageMenu(state string, forceChooseLanguage bool) *LanguageConfig

WithChangeLanguageMenu sets the change language menu state.

func (*LanguageConfig) WithReverseButtonOrderInRowForRTL added in v0.0.91

func (l *LanguageConfig) WithReverseButtonOrderInRowForRTL() *LanguageConfig

WithReverseButtonOrderInRowForRTL sets the reverse button order in row for RTL languages.

type LanguageKeyTextBuilder

type LanguageKeyTextBuilder string

func NewLanguageKeyText

func NewLanguageKeyText(key string) LanguageKeyTextBuilder

NewLanguageKeyText returns a new LanguageKeyTextBuilder

func (LanguageKeyTextBuilder) String

func (t LanguageKeyTextBuilder) String(update *StateUpdate) string

type LanguageKeyWithParamsTextBuilder added in v0.0.73

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

func NewLanguageKeyWithParamsText added in v0.0.73

func NewLanguageKeyWithParamsText(key string, params map[string]interface{}) LanguageKeyWithParamsTextBuilder

NewLanguageKeyWithParamsText returns a new LanguageKeyWithParamsTextBuilder

func (LanguageKeyWithParamsTextBuilder) String added in v0.0.73

type Languages

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

func (*Languages) GetByTag

func (l *Languages) GetByTag(tag string) *Language

GetByTag returns the localizer by the given tag.

type LanguagesBuilder

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

func NewLanguageBuilder

func NewLanguageBuilder(defaultBundle language.Tag, rtlLanguageTags ...language.Tag) *LanguagesBuilder

func (*LanguagesBuilder) Build

func (lb *LanguagesBuilder) Build() (*Languages, error)

Build builds the bundle.

func (*LanguagesBuilder) RegisterTomlFormat

func (lb *LanguagesBuilder) RegisterTomlFormat(tomlFilePaths []string) *LanguagesBuilder

RegisterTomlFormat registers the TOML format for the bundle.

type Middleware

type Middleware struct {
	UpdateHandler
}

func NewMiddleware

func NewMiddleware(handler UpdateHandler) Middleware

NewMiddleware returns a new Middleware that calls Handler.

type Options

type Options struct {
	ErrorGroupID int64
	Logger       *logrus.Logger
}

func NewOptions

func NewOptions() *Options

func (*Options) SetErrorGroupID

func (o *Options) SetErrorGroupID(groupID int64) *Options

func (*Options) SetLogger

func (o *Options) SetLogger(logger *logrus.Logger) *Options

type PanicHandler added in v0.0.77

type PanicHandler func(
	client *tgbotapi.TelegramBot,
	update tgbotapi.Update,
	err interface{},
	trace string,
)

type Processor

type Processor interface {
	Process(client *tgbotapi.TelegramBot, update tgbotapi.Update)
	// contains filtered or unexported methods
}

type StateUpdate

type StateUpdate struct {
	State string

	Update     tgbotapi.Update
	IsSwitched bool
	// contains filtered or unexported fields
}

func (*StateUpdate) Get

func (s *StateUpdate) Get(key interface{}) interface{}

Get gets a value from the context.

func (*StateUpdate) Language

func (s *StateUpdate) Language() *Language

func (*StateUpdate) Set

func (s *StateUpdate) Set(key, value interface{})

Set sets a value for the context.

func (*StateUpdate) SetLanguage

func (s *StateUpdate) SetLanguage(language *Language)

SetLanguage sets the language for the user.

type StaticMenu

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

StaticMenu is a Handler that receives predefined handlers and acts accordingly.

func NewStaticMenu

func NewStaticMenu(
	text TextBuilder,
	builder ActionBuilderKind,
	middlewaresAndDynamicHandlers ...Handler) *StaticMenu

NewStaticMenu creates a new StaticMenu with the given text and action builder.

type StaticMenuMiddleware

type StaticMenuMiddleware func(*tgbotapi.TelegramBot, *StateUpdate) (SwitchAction, bool)

type StaticTextBuilder

type StaticTextBuilder string

func NewStaticText

func NewStaticText(text string) StaticTextBuilder

NewStaticText returns a new StaticTextBuilder

func (StaticTextBuilder) String

func (t StaticTextBuilder) String(_ *StateUpdate) string

type SwitchAction

type SwitchAction interface {
	// contains filtered or unexported methods
}

type SwitchActionInlineMenu

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

func NewSwitchActionInlineMenu

func NewSwitchActionInlineMenu(targetInlineMenu string, edit bool) *SwitchActionInlineMenu

NewSwitchActionInlineMenu creates a new SwitchActionInlineMenu

type SwitchActionState

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

func NewSwitchActionState

func NewSwitchActionState(targetState string) *SwitchActionState

NewSwitchActionState creates a new SwitchActionState

type TextBuilder

type TextBuilder interface {
	String(update *StateUpdate) string
}

type TextBuilderF added in v0.0.74

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

func NewTextBuilderF added in v0.0.74

func NewTextBuilderF(placeholder string, builders ...TextBuilder) TextBuilderF

NewTextBuilderF returns a new TextBuilderF

func (TextBuilderF) String added in v0.0.74

func (t TextBuilderF) String(update *StateUpdate) string

type UpdateHandler

type UpdateHandler func(client *tgbotapi.TelegramBot, update *StateUpdate) (SwitchAction, bool)

func (UpdateHandler) Handle

func (h UpdateHandler) Handle(client *tgbotapi.TelegramBot, update *StateUpdate) (SwitchAction, bool)

type UpdateKeyTextBuilder added in v0.0.73

type UpdateKeyTextBuilder string

func NewUpdateKeyText added in v0.0.73

func NewUpdateKeyText(key string) UpdateKeyTextBuilder

NewUpdateKeyText returns a new UpdateKeyTextBuilder

func (UpdateKeyTextBuilder) String added in v0.0.73

func (t UpdateKeyTextBuilder) String(update *StateUpdate) string

type UserI

type UserI[T any] interface {
	FromTgUser(tgUser *structs.User) T
}

type UserLanguageRepository

type UserLanguageRepository interface {
	SetUserLanguage(userID int64, languageTag string) error
	GetUserLanguage(userID int64) (string, error)
}

func NewDefaultUserLanguageRepository

func NewDefaultUserLanguageRepository() UserLanguageRepository

NewDefaultUserLanguageRepository creates a new DefaultUserLanguageRepository.

type UserRepository

type UserRepository interface {
	UpsertUser(user *structs.User) error
	SetUserState(id int64, state string) error
	GetUserState(id int64) (string, error)
}

func NewDefaultUserRepository

func NewDefaultUserRepository() UserRepository

NewDefaultUserRepository Factory function for defaultUserRepository.

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

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