From 57fb6338931dc0f218b8d5656afe513f42fee89f Mon Sep 17 00:00:00 2001 From: ScuroNeko Date: Wed, 18 Feb 2026 14:06:58 +0300 Subject: [PATCH] laniakea v0.6 --- go.mod | 6 +++--- go.sum | 4 ++-- main.go | 5 ++++- plugins/admin.go | 16 +++++++------- plugins/ai.go | 4 ++-- plugins/economy.go | 34 ++++++++++++++++++----------- plugins/fun.go | 6 +++--- plugins/logs.go | 13 +++++------ plugins/relations.go | 2 +- plugins/rp.go | 51 +++++++++++++++++++++++++------------------- plugins/service.go | 7 +++--- plugins/waifus.go | 28 +++++++++++++----------- 12 files changed, 101 insertions(+), 75 deletions(-) diff --git a/go.mod b/go.mod index 8fe713c..435b44b 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.26.0 require ( git.nix13.pw/scuroneko/extypes v1.2.0 - git.nix13.pw/scuroneko/laniakea v0.5.0 + git.nix13.pw/scuroneko/laniakea v0.6.2 git.nix13.pw/scuroneko/slog v1.0.2 github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 @@ -15,8 +15,8 @@ require ( go.mongodb.org/mongo-driver/v2 v2.5.0 ) -//replace git.nix13.pw/scuroneko/laniakea v0.5.0 => ./laniakea -//replace git.nix13.pw/scuroneko/extypes v1.1.0 => ../go-extypes +//replace git.nix13.pw/scuroneko/laniakea v0.6.2 => ./laniakea +//replace git.nix13.pw/scuroneko/extypes v1.2.0 => ../go-extypes //replace git.nix13.pw/scuroneko/slog v1.0.2 => ../slog require ( diff --git a/go.sum b/go.sum index 8484a9a..b3fbd92 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= git.nix13.pw/scuroneko/extypes v1.2.0 h1:2n2hD6KsMAted+6MGhAyeWyli2Qzc9G2y+pQNB7C1dM= git.nix13.pw/scuroneko/extypes v1.2.0/go.mod h1:uZVs8Yo3RrYAG9dMad6qR6lsYY67t+459D9c65QAYAw= -git.nix13.pw/scuroneko/laniakea v0.5.0 h1:Pi+VWmN5XUiaUFYuOz5BevuUFuwR8qTvnFM7RjMOjBU= -git.nix13.pw/scuroneko/laniakea v0.5.0/go.mod h1:KZNqECXWJQUdDGJDfG2naPC60vWwCMRG0oRKVuhYlBs= +git.nix13.pw/scuroneko/laniakea v0.6.2 h1:YsXvTPB10lmunWiLGlYorrZ5qbYJp00xy8HSA/4EdyI= +git.nix13.pw/scuroneko/laniakea v0.6.2/go.mod h1:ABjrmhKkTbhTwlMs+bLCr2e+ANnHbYTeidaicl2F0Z4= git.nix13.pw/scuroneko/slog v1.0.2 h1:vZyUROygxC2d5FJHUQM/30xFEHY1JT/aweDZXA4rm2g= git.nix13.pw/scuroneko/slog v1.0.2/go.mod h1:3Qm2wzkR5KjwOponMfG7TcGSDjmYaFqRAmLvSPTuWJI= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= diff --git a/main.go b/main.go index b18c771..ead8abf 100644 --- a/main.go +++ b/main.go @@ -17,6 +17,7 @@ func main() { database.ConnectRedis() bot := laniakea.NewBot(laniakea.LoadSettingsFromEnv()) + defer bot.Close() bot = bot.ErrorTemplate("Во время выполнения команды произошла ошибка!\nСообщите об этом разработчику!\n\n%s") bot = bot.DatabaseContext(&laniakea.DatabaseContext{ PostgresSQL: database.PostgresDatabase, @@ -37,6 +38,8 @@ func main() { plugins.RegisterAi(bot) plugins.RegisterFun(bot) - defer bot.Close() + if err := bot.AutoGenerateCommands(); err != nil { + panic(err) + } bot.Run() } diff --git a/plugins/admin.go b/plugins/admin.go index f662fbd..68e72a7 100644 --- a/plugins/admin.go +++ b/plugins/admin.go @@ -14,16 +14,16 @@ import ( func RegisterAdmin(b *laniakea.Bot) { p := laniakea.NewPlugin("Admin") - p.Command(uploadPhoto, "uploadPhoto") - p.Command(emojiId, "emojiId") - p.Command(getProxy, "proxy") - p.Command(execSql, "sql") + p.AddCommand(laniakea.NewCommand(uploadPhoto, "uploadPhoto").SkipCommandAutoGen()) + p.AddCommand(laniakea.NewCommand(emojiId, "emojiId").SkipCommandAutoGen()) + p.AddCommand(laniakea.NewCommand(getProxy, "proxy").SkipCommandAutoGen()) + p.AddCommand(laniakea.NewCommand(execSql, "sql").SkipCommandAutoGen()) p.AddMiddleware(AdminMiddleware()) - b.AddPlugins(p.Build()) + b.AddPlugins(p) } -func AdminMiddleware() *laniakea.PluginMiddleware { - m := laniakea.NewPluginMiddleware(func(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) bool { +func AdminMiddleware() laniakea.Middleware { + m := laniakea.NewMiddleware("AdminMiddleware", func(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) bool { rep := psql.NewUserRepository(db) u, err := rep.GetById(ctx.FromID) if err != nil { @@ -31,7 +31,7 @@ func AdminMiddleware() *laniakea.PluginMiddleware { } return u.Group.IsAdmin }) - return m + return *m } func execSql(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { diff --git a/plugins/ai.go b/plugins/ai.go index 79d754f..5addf3f 100644 --- a/plugins/ai.go +++ b/plugins/ai.go @@ -11,8 +11,8 @@ import ( func RegisterAi(bot *laniakea.Bot) { p := laniakea.NewPlugin("AI") - p.Command(gpt, "gpt") - bot.AddPlugins(p.Build()) + p.AddCommand(p.NewCommand(gpt, "gpt").SkipCommandAutoGen()) + bot.AddPlugins(p) } func gpt(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { diff --git a/plugins/economy.go b/plugins/economy.go index d818f9c..b017a28 100644 --- a/plugins/economy.go +++ b/plugins/economy.go @@ -15,22 +15,29 @@ import ( ) func RegisterEconomy(bot *laniakea.Bot) { - economy := laniakea.NewPlugin("Economy") - economy.Command(profile, "profile", "профиль") - economy.Command(work, "work", "работать") - economy.Command(collect, "collect", "собрать") - economy.Command(code, "code", "код") + p := laniakea.NewPlugin("Economy") + p.AddCommand(p.NewCommand(profile, "profile")) + p.AddCommand(p.NewCommand(profile, "профиль").SkipCommandAutoGen()) + p.AddCommand(p.NewCommand(work, "work")) + p.AddCommand(p.NewCommand(work, "работать").SkipCommandAutoGen()) + p.AddCommand(p.NewCommand(collect, "collect")) + p.AddCommand(p.NewCommand(collect, "собрать").SkipCommandAutoGen()) + p.AddCommand(p.NewCommand(code, "code")) + p.AddCommand(p.NewCommand(code, "код").SkipCommandAutoGen()) - economy.Command(vacancies, "vacancies", "вакансии") - economy.Command(getAJob, "getajob", "устроиться") + p.AddCommand(p.NewCommand(vacancies, "vacancies")) + p.AddCommand(p.NewCommand(vacancies, "вакансии").SkipCommandAutoGen()) + p.AddCommand(p.NewCommand(getAJob, "getajob")) + p.AddCommand(p.NewCommand(getAJob, "устроиться").SkipCommandAutoGen()) - economy.Command(aboutGroup, "group", "о группе") + p.AddCommand(p.NewCommand(aboutGroup, "group")) + p.AddCommand(p.NewCommand(aboutGroup, "о группе").SkipCommandAutoGen()) bot.AddRunner(laniakea.NewRunner( "economy.PassiveIncome", passiveIncome, ).Timeout(time.Minute).Build()) - bot.AddPlugins(economy.Build()) + bot.AddPlugins(p) } func passiveIncome(b *laniakea.Bot) error { @@ -383,12 +390,15 @@ func aboutGroup(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { if group.IsVip { out = append(out, "🎏Доступ к ВИП функциям: ✅") } + if group.IsPremium { + out = append(out, "🎏Доступ к премиум функциям: ✅") + } + if group.IsTester { + out = append(out, "🔓Бета-тестер: ✅") + } if group.IsAdmin { out = append(out, "🖥️Доступ к админ функциям: ✅") } - if group.IsVip { - out = append(out, "🔓Бета-тестер: ✅") - } ctx.Answer(strings.Join(out, "\n")) } diff --git a/plugins/fun.go b/plugins/fun.go index 155eac5..509b12d 100644 --- a/plugins/fun.go +++ b/plugins/fun.go @@ -8,9 +8,9 @@ import ( func RegisterFun(bot *laniakea.Bot) { p := laniakea.NewPlugin("Fun") - p.Command(beautyFont, "bf") - p.Command(beautyFontHeart, "bfh") - bot.AddPlugins(p.Build()) + p.AddCommand(p.NewCommand(beautyFont, "bf")) + p.AddCommand(p.NewCommand(beautyFontHeart, "bfh")) + bot.AddPlugins(p) } var ligatures = map[string]string{ diff --git a/plugins/logs.go b/plugins/logs.go index 8f0c467..139c97a 100644 --- a/plugins/logs.go +++ b/plugins/logs.go @@ -16,13 +16,13 @@ import ( func RegisterLogs(bot *laniakea.Bot) { p := laniakea.NewPlugin("Logs") - p.Command(getLogs, "logs") - p.Command(getMsgLogs, "msglogs") + p.AddCommand(p.NewCommand(getLogs, "logs").SkipCommandAutoGen()) + p.AddCommand(p.NewCommand(getMsgLogs, "msglogs").SkipCommandAutoGen()) p.AddMiddleware(AdminMiddleware()) - bot.AddPlugins(p.Build()) + bot.AddPlugins(p) } func InitLogMiddleware() laniakea.Middleware { - return laniakea.NewMiddleware("LogMiddleware", logMiddleware).SetAsync(true).Build() + return *laniakea.NewMiddleware("LogMiddleware", logMiddleware).SetAsync(true) } func getLogs(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { @@ -61,9 +61,9 @@ func encodeLogs[T comparable](logs extypes.Slice[T]) extypes.Slice[string] { return out } -func logMiddleware(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { +func logMiddleware(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) bool { if ctx.Msg == nil { - return + return true } entry := &mdb.MessageLogEntry{ MessageID: ctx.Msg.MessageID, @@ -76,6 +76,7 @@ func logMiddleware(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { if err != nil { ctx.Bot.Logger().Errorln(err) } + return true } type DatabaseWriter struct { diff --git a/plugins/relations.go b/plugins/relations.go index 024dffe..744603e 100644 --- a/plugins/relations.go +++ b/plugins/relations.go @@ -4,5 +4,5 @@ import "git.nix13.pw/scuroneko/laniakea" func RegisterRelations(b *laniakea.Bot) { p := laniakea.NewPlugin("Relations") - b.AddPlugins(p.Build()) + b.AddPlugins(p) } diff --git a/plugins/rp.go b/plugins/rp.go index 9c6b67d..3a21ff0 100644 --- a/plugins/rp.go +++ b/plugins/rp.go @@ -21,30 +21,36 @@ import ( func RegisterRP(bot *laniakea.Bot) { rp := laniakea.NewPlugin("RP") - rp.Command(rpUserPromptSet, "rpuserpset") - rp.Command(rpInfo, "rp", "рп") - rp.Payload(rpInfo, "rp.info") - rp.Payload(rpWaifuList, "rp.waifu_list") - rp.Payload(rpWaifuSet, "rp.waifu_set") - rp.Payload(rpPresetsList, "rp.preset_list") - rp.Payload(rpPresetSet, "rp.preset_set") - rp.Payload(rpModelList, "rp.model_list") - rp.Payload(rpModelSet, "rp.model_set") - rp.Payload(rpScenarioList, "rp.scenario_list") - rp.Payload(rpSettingList, "rp.setting_list") - rp.Payload(chatStat, "rp.chat_stat") - rp.Payload(newChatStage1, "rp.new_chat_s1") - rp.Payload(newChatStage2, "rp.new_chat_s2") - rp.Payload(newChat, "rp.new_chat") - rp.Command(generate, "g", "gen", "г") - rp.Payload(compress, "rp.compress_chat") - rp.Payload(regenerateResponse, "rp.regenerate") + rp.AddCommand(rp.NewCommand(rpUserPromptSet, "rpuserpset")) + rp.AddCommand(rp.NewCommand(rpInfo, "rp").SetDescription("РП профиль пользователя")) + rp.AddCommand(rp.NewCommand(rpInfo, "рп").SkipCommandAutoGen()) + rp.AddPayload(rp.NewCommand(rpInfo, "rp.info")) + rp.AddPayload(rp.NewCommand(rpWaifuList, "rp.waifu_list")) + rp.AddPayload(rp.NewCommand(rpWaifuSet, "rp.waifu_set")) + rp.AddPayload(rp.NewCommand(rpPresetsList, "rp.preset_list")) + rp.AddPayload(rp.NewCommand(rpPresetSet, "rp.preset_set")) + rp.AddPayload(rp.NewCommand(rpModelList, "rp.model_list")) + rp.AddPayload(rp.NewCommand(rpModelSet, "rp.model_set")) + rp.AddPayload(rp.NewCommand(rpScenarioList, "rp.scenario_list")) + rp.AddPayload(rp.NewCommand(rpSettingList, "rp.setting_list")) + rp.AddPayload(rp.NewCommand(chatStat, "rp.chat_stat")) + rp.AddPayload(rp.NewCommand(newChatStage1, "rp.new_chat_s1")) + rp.AddPayload(rp.NewCommand(newChatStage2, "rp.new_chat_s2")) + rp.AddPayload(rp.NewCommand(newChat, "rp.new_chat")) + rp.AddCommand(rp.NewCommand( + generate, "g", + *laniakea.NewCommandArg("prompt", laniakea.CommandValueAnyType), + ).SetDescription("Генерация РП")) + rp.AddCommand(rp.NewCommand(generate, "gen").SkipCommandAutoGen()) + rp.AddCommand(rp.NewCommand(generate, "г").SkipCommandAutoGen()) + rp.AddPayload(rp.NewCommand(compress, "rp.compress_chat")) + rp.AddPayload(rp.NewCommand(regenerateResponse, "rp.regenerate")) - rp.Payload(compressSettingStage1, "rp.compress_setting_s1") - rp.Payload(compressSettingStage2, "rp.compress_setting_s2") - rp.Payload(compressSetting, "rp.compress_setting") + rp.AddPayload(rp.NewCommand(compressSettingStage1, "rp.compress_setting_s1")) + rp.AddPayload(rp.NewCommand(compressSettingStage2, "rp.compress_setting_s2")) + rp.AddPayload(rp.NewCommand(compressSetting, "rp.compress_setting")) - bot.AddPlugins(rp.Build()) + bot.AddPlugins(rp) } func rpInfo(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { @@ -899,6 +905,7 @@ func compressSettingStage1(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext kb := laniakea.NewInlineKeyboard(2) kb.AddCallbackButton("По сообщениям", "rp.compress_setting_s2", "messages") kb.AddCallbackButton("По токенам", "rp.compress_setting_s2", "tokens") + kb.AddCallbackButton("Отключить", "rp.compress_setting", "none", 0) kb.AddLine().AddCallbackButton("На главную", "rp.info") out := []string{ diff --git a/plugins/service.go b/plugins/service.go index 8292a1b..5a8306b 100644 --- a/plugins/service.go +++ b/plugins/service.go @@ -11,10 +11,11 @@ import ( func RegisterService(bot *laniakea.Bot) { p := laniakea.NewPlugin("service") - p.Payload(generalClose, "general.close") + p.AddPayload(p.NewCommand(generalClose, "general.close")) - p.Command(about, "about", "о боте") - bot.AddPlugins(p.Build()) + p.AddCommand(p.NewCommand(about, "about")) + p.AddCommand(p.NewCommand(about, "о боте").SkipCommandAutoGen()) + bot.AddPlugins(p) } func about(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) { diff --git a/plugins/waifus.go b/plugins/waifus.go index a9aeb37..b7138df 100644 --- a/plugins/waifus.go +++ b/plugins/waifus.go @@ -14,22 +14,26 @@ import ( ) func RegisterWaifus(bot *laniakea.Bot) { - waifus := laniakea.NewPlugin("Waifus") + p := laniakea.NewPlugin("Waifus") - waifus.Command(myWaifu, "mywaifu", "моивайфу") - waifus.Command(waifuList, "wlist", "waifulist", "влист", "вайфулист") + p.AddCommand(p.NewCommand(myWaifu, "mywaifu")) + p.AddCommand(p.NewCommand(myWaifu, "моивайфу").SkipCommandAutoGen()) + p.AddCommand(p.NewCommand(waifuList, "wlist")) + p.AddCommand(p.NewCommand(waifuList, "waifulist")) + p.AddCommand(p.NewCommand(waifuList, "влист").SkipCommandAutoGen()) + p.AddCommand(p.NewCommand(waifuList, "вайфулист").SkipCommandAutoGen()) - waifus.Payload(myWaifu, "waifu.my") - waifus.Payload(waifuList, "waifu.list") - waifus.Payload(waifuSell, "waifu.sell") - waifus.Payload(buyWaifu, "waifu.buy") - waifus.Payload(waifuInfo, "waifu.info") - waifus.Payload(waifuSearch, "waifu.search") + p.AddPayload(p.NewCommand(myWaifu, "waifu.my")) + p.AddPayload(p.NewCommand(waifuList, "waifu.list")) + p.AddPayload(p.NewCommand(waifuSell, "waifu.sell")) + p.AddPayload(p.NewCommand(buyWaifu, "waifu.buy")) + p.AddPayload(p.NewCommand(waifuInfo, "waifu.info")) + p.AddPayload(p.NewCommand(waifuSearch, "waifu.search")) - waifus.Payload(waifuNotImplemented, "waifu.confirm_buy") - waifus.Payload(waifuNotImplemented, "waifu.confirm_sell") + p.AddPayload(p.NewCommand(waifuNotImplemented, "waifu.confirm_buy")) + p.AddPayload(p.NewCommand(waifuNotImplemented, "waifu.confirm_sell")) - bot.AddPlugins(waifus.Build()) + bot.AddPlugins(p) } func myWaifu(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {