Merge branch 'dev' of nix13.pw:ScuroNeko/Laniakea into dev
This commit is contained in:
6
bot.go
6
bot.go
@@ -262,12 +262,6 @@ func (b *Bot) Run() {
|
|||||||
middleware.Execute(ctx, b.dbContext)
|
middleware.Execute(ctx, b.dbContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, plugin := range b.plugins {
|
|
||||||
if plugin.UpdateListener != nil {
|
|
||||||
(*plugin.UpdateListener)(ctx, b.dbContext)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if u.CallbackQuery != nil {
|
if u.CallbackQuery != nil {
|
||||||
b.handleCallback(u, ctx)
|
b.handleCallback(u, ctx)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
13
handler.go
13
handler.go
@@ -7,6 +7,19 @@ import (
|
|||||||
"git.nix13.pw/scuroneko/laniakea/tgapi"
|
"git.nix13.pw/scuroneko/laniakea/tgapi"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (b *Bot) handle(u *tgapi.Update) {
|
||||||
|
ctx := &MsgContext{Bot: b, Update: *u, Api: b.api}
|
||||||
|
for _, middleware := range b.middlewares {
|
||||||
|
middleware.Execute(ctx, b.dbContext)
|
||||||
|
}
|
||||||
|
|
||||||
|
if u.CallbackQuery != nil {
|
||||||
|
b.handleCallback(u, ctx)
|
||||||
|
} else {
|
||||||
|
b.handleMessage(u, ctx)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (b *Bot) handleMessage(update *tgapi.Update, ctx *MsgContext) {
|
func (b *Bot) handleMessage(update *tgapi.Update, ctx *MsgContext) {
|
||||||
if update.Message == nil {
|
if update.Message == nil {
|
||||||
return
|
return
|
||||||
|
|||||||
44
plugins.go
44
plugins.go
@@ -10,48 +10,41 @@ type CommandExecutor func(ctx *MsgContext, dbContext *DatabaseContext)
|
|||||||
|
|
||||||
type PluginBuilder struct {
|
type PluginBuilder struct {
|
||||||
name string
|
name string
|
||||||
commands map[string]*CommandExecutor
|
commands map[string]CommandExecutor
|
||||||
payloads map[string]*CommandExecutor
|
payloads map[string]CommandExecutor
|
||||||
updateListener *CommandExecutor
|
|
||||||
middlewares extypes.Slice[*PluginMiddleware]
|
middlewares extypes.Slice[*PluginMiddleware]
|
||||||
}
|
}
|
||||||
|
|
||||||
type Plugin struct {
|
type Plugin struct {
|
||||||
Name string
|
Name string
|
||||||
Commands map[string]*CommandExecutor
|
Commands map[string]CommandExecutor
|
||||||
Payloads map[string]*CommandExecutor
|
Payloads map[string]CommandExecutor
|
||||||
UpdateListener *CommandExecutor
|
|
||||||
Middlewares extypes.Slice[*PluginMiddleware]
|
Middlewares extypes.Slice[*PluginMiddleware]
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewPlugin(name string) *PluginBuilder {
|
func NewPlugin(name string) *PluginBuilder {
|
||||||
return &PluginBuilder{
|
return &PluginBuilder{
|
||||||
name: name,
|
name: name,
|
||||||
commands: make(map[string]*CommandExecutor),
|
commands: make(map[string]CommandExecutor),
|
||||||
payloads: make(map[string]*CommandExecutor),
|
payloads: make(map[string]CommandExecutor),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PluginBuilder) Command(f CommandExecutor, cmd ...string) *PluginBuilder {
|
func (p *PluginBuilder) Command(f CommandExecutor, cmd ...string) *PluginBuilder {
|
||||||
for _, c := range cmd {
|
for _, c := range cmd {
|
||||||
p.commands[c] = &f
|
p.commands[c] = f
|
||||||
}
|
}
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PluginBuilder) Payload(f CommandExecutor, payloads ...string) *PluginBuilder {
|
func (p *PluginBuilder) Payload(f CommandExecutor, payloads ...string) *PluginBuilder {
|
||||||
for _, payload := range payloads {
|
for _, payload := range payloads {
|
||||||
p.payloads[payload] = &f
|
p.payloads[payload] = f
|
||||||
}
|
}
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *PluginBuilder) UpdateListener(listener CommandExecutor) *PluginBuilder {
|
func (p *PluginBuilder) AddMiddleware(middleware *PluginMiddleware) *PluginBuilder {
|
||||||
p.updateListener = &listener
|
|
||||||
return p
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PluginBuilder) Middleware(middleware *PluginMiddleware) *PluginBuilder {
|
|
||||||
p.middlewares = p.middlewares.Push(middleware)
|
p.middlewares = p.middlewares.Push(middleware)
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
@@ -61,20 +54,17 @@ func (p *PluginBuilder) Build() Plugin {
|
|||||||
log.Printf("no command or payloads for %s", p.name)
|
log.Printf("no command or payloads for %s", p.name)
|
||||||
}
|
}
|
||||||
return Plugin{
|
return Plugin{
|
||||||
Name: p.name,
|
p.name, p.commands,
|
||||||
Commands: p.commands,
|
p.payloads, p.middlewares,
|
||||||
Payloads: p.payloads,
|
|
||||||
UpdateListener: p.updateListener,
|
|
||||||
Middlewares: p.middlewares,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Plugin) Execute(cmd string, ctx *MsgContext, dbContext *DatabaseContext) {
|
func (p *Plugin) Execute(cmd string, ctx *MsgContext, dbContext *DatabaseContext) {
|
||||||
(*p.Commands[cmd])(ctx, dbContext)
|
(p.Commands[cmd])(ctx, dbContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Plugin) ExecutePayload(payload string, ctx *MsgContext, dbContext *DatabaseContext) {
|
func (p *Plugin) ExecutePayload(payload string, ctx *MsgContext, dbContext *DatabaseContext) {
|
||||||
(*p.Payloads[payload])(ctx, dbContext)
|
(p.Payloads[payload])(ctx, dbContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Plugin) executeMiddlewares(ctx *MsgContext, db *DatabaseContext) bool {
|
func (p *Plugin) executeMiddlewares(ctx *MsgContext, db *DatabaseContext) bool {
|
||||||
@@ -102,14 +92,6 @@ type MiddlewareBuilder struct {
|
|||||||
func NewMiddleware(name string, executor CommandExecutor) *MiddlewareBuilder {
|
func NewMiddleware(name string, executor CommandExecutor) *MiddlewareBuilder {
|
||||||
return &MiddlewareBuilder{name: name, executor: executor, order: 0, async: false}
|
return &MiddlewareBuilder{name: name, executor: executor, order: 0, async: false}
|
||||||
}
|
}
|
||||||
func (m *MiddlewareBuilder) SetName(name string) *MiddlewareBuilder {
|
|
||||||
m.name = name
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
func (m *MiddlewareBuilder) SetExecutor(executor CommandExecutor) *MiddlewareBuilder {
|
|
||||||
m.executor = executor
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
func (m *MiddlewareBuilder) SetOrder(order int) *MiddlewareBuilder {
|
func (m *MiddlewareBuilder) SetOrder(order int) *MiddlewareBuilder {
|
||||||
m.order = order
|
m.order = order
|
||||||
return m
|
return m
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ func (b *RunnerBuilder) Build() Runner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *Bot) ExecRunners() {
|
func (b *Bot) ExecRunners() {
|
||||||
|
b.logger.Infoln("Executing runners...")
|
||||||
for _, runner := range b.runners {
|
for _, runner := range b.runners {
|
||||||
if !runner.Onetime && !runner.Async {
|
if !runner.Onetime && !runner.Async {
|
||||||
b.logger.Warnf("Runner %s not onetime, but sync\n", runner.Name)
|
b.logger.Warnf("Runner %s not onetime, but sync\n", runner.Name)
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ type Api struct {
|
|||||||
func NewAPI(token string) *Api {
|
func NewAPI(token string) *Api {
|
||||||
l := slog.CreateLogger().Level(utils.GetLoggerLevel()).Prefix("API")
|
l := slog.CreateLogger().Level(utils.GetLoggerLevel()).Prefix("API")
|
||||||
l.AddWriter(l.CreateJsonStdoutWriter())
|
l.AddWriter(l.CreateJsonStdoutWriter())
|
||||||
client := &http.Client{Timeout: time.Second * 10}
|
client := &http.Client{Timeout: time.Second * 45}
|
||||||
return &Api{token, client, l}
|
return &Api{token, client, l}
|
||||||
}
|
}
|
||||||
func (api *Api) CloseApi() error {
|
func (api *Api) CloseApi() error {
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package tgapi
|
package tgapi
|
||||||
|
|
||||||
|
import "git.nix13.pw/scuroneko/extypes"
|
||||||
|
|
||||||
type MessageReplyMarkup struct {
|
type MessageReplyMarkup struct {
|
||||||
InlineKeyboard [][]InlineKeyboardButton `json:"inline_keyboard"`
|
InlineKeyboard [][]InlineKeyboardButton `json:"inline_keyboard"`
|
||||||
}
|
}
|
||||||
@@ -26,7 +28,7 @@ type Message struct {
|
|||||||
|
|
||||||
Text string `json:"text"`
|
Text string `json:"text"`
|
||||||
|
|
||||||
Photo []*PhotoSize `json:"photo,omitempty"`
|
Photo extypes.Slice[*PhotoSize] `json:"photo,omitempty"`
|
||||||
Caption string `json:"caption,omitempty"`
|
Caption string `json:"caption,omitempty"`
|
||||||
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
CaptionEntities []MessageEntity `json:"caption_entities,omitempty"`
|
||||||
|
|
||||||
|
|||||||
6
utils.go
6
utils.go
@@ -1,5 +1,7 @@
|
|||||||
package laniakea
|
package laniakea
|
||||||
|
|
||||||
|
import "git.nix13.pw/scuroneko/laniakea/utils"
|
||||||
|
|
||||||
func Ptr[T any](v T) *T { return &v }
|
func Ptr[T any](v T) *T { return &v }
|
||||||
|
|
||||||
func Val[T any](p *T, def T) T {
|
func Val[T any](p *T, def T) T {
|
||||||
@@ -8,3 +10,7 @@ func Val[T any](p *T, def T) T {
|
|||||||
}
|
}
|
||||||
return def
|
return def
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const VersionString = utils.VersionString
|
||||||
|
|
||||||
|
var EscapeMarkdown = utils.EscapeMarkdown
|
||||||
|
|||||||
Reference in New Issue
Block a user