From 12c8ce99f072f8475f373e6717eb30002635668a Mon Sep 17 00:00:00 2001 From: ScuroNeko Date: Thu, 12 Mar 2026 18:11:27 +0300 Subject: [PATCH] many changes --- db.docker-compose.yml | 13 +------ go.mod | 11 +++--- go.sum | 14 ++++---- main.go | 25 +++++-------- plugins/admin.go | 10 +++--- plugins/ai.go | 3 +- plugins/ban.go | 4 +-- plugins/economy.go | 28 +++++++-------- plugins/fun.go | 4 +-- plugins/logs.go | 4 +-- plugins/rp.go | 83 ++++++++++++++++++++++--------------------- plugins/service.go | 24 ++++++------- plugins/waifus.go | 64 ++++++++++++++++----------------- 13 files changed, 132 insertions(+), 155 deletions(-) diff --git a/db.docker-compose.yml b/db.docker-compose.yml index c8ff314..c11fe30 100644 --- a/db.docker-compose.yml +++ b/db.docker-compose.yml @@ -28,12 +28,7 @@ services: MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER} MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASS} MONGO_INITDB_DATABASE: ${MONGO_NAME} - healthcheck: - test: [ "CMD", "mongosh", "--quiet", "admin", "--eval", "quit(db.runCommand({ ping: 1 }).ok ? 0 : 2)" ] - interval: 10s - retries: 5 - timeout: 10s - start_period: 10s + GLIBC_TUNABLES: glibc.cpu.hwcaps=-SHSTK volumes: - ./scripts/mongo:/docker-entrypoint-initdb.d - mongo_data:/data/db @@ -43,12 +38,6 @@ services: - bot ports: - "6379:6379" - healthcheck: - test: ["CMD", "redis-cli", "--raw", "ping"] - interval: 5s - retries: 5 - timeout: 10s - start_period: 2s volumes: - redis_data:/data diff --git a/go.mod b/go.mod index 98c9162..7cc2364 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.26.1 require ( git.nix13.pw/scuroneko/extypes v1.2.1 - git.nix13.pw/scuroneko/laniakea v1.0.0-beta.11 + git.nix13.pw/scuroneko/laniakea v1.0.0-beta.16 git.nix13.pw/scuroneko/slog v1.0.2 github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 @@ -15,13 +15,12 @@ require ( go.mongodb.org/mongo-driver/v2 v2.5.0 ) -replace git.nix13.pw/scuroneko/laniakea v1.0.0-beta.11 => ./laniakea - +//replace git.nix13.pw/scuroneko/laniakea v1.0.0-beta.16 => ./laniakea //replace git.nix13.pw/scuroneko/extypes v1.2.1 => ../go-extypes //replace git.nix13.pw/scuroneko/slog v1.0.2 => ../slog require ( - github.com/alitto/pond/v2 v2.6.2 // indirect + github.com/alitto/pond/v2 v2.7.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/fatih/color v1.18.0 // indirect @@ -37,7 +36,7 @@ require ( go.uber.org/atomic v1.11.0 // indirect golang.org/x/crypto v0.48.0 // indirect golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.41.0 // indirect + golang.org/x/sys v0.42.0 // indirect golang.org/x/text v0.34.0 // indirect - golang.org/x/time v0.14.0 // indirect + golang.org/x/time v0.15.0 // indirect ) diff --git a/go.sum b/go.sum index 47ebf06..ffbe1df 100644 --- a/go.sum +++ b/go.sum @@ -2,10 +2,12 @@ filippo.io/edwards25519 v1.1.1 h1:YpjwWWlNmGIDyXOn8zLzqiD+9TyIlPhGFG96P39uBpw= filippo.io/edwards25519 v1.1.1/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= git.nix13.pw/scuroneko/extypes v1.2.1 h1:IYrOjnWKL2EAuJYtYNa+luB1vBe6paE8VY/YD+5/RpQ= git.nix13.pw/scuroneko/extypes v1.2.1/go.mod h1:uZVs8Yo3RrYAG9dMad6qR6lsYY67t+459D9c65QAYAw= +git.nix13.pw/scuroneko/laniakea v1.0.0-beta.16 h1:QL3YGHL11p5For5Cm0I6riHsndBxT5vTHyqH3wtO0Xo= +git.nix13.pw/scuroneko/laniakea v1.0.0-beta.16/go.mod h1:M8jwm195hzAl9bj9Bkl95WfHmWvuBX6micsdtOs/gmE= 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/alitto/pond/v2 v2.6.2 h1:Sphe40g0ILeM1pA2c2K+Th0DGU+pt0A/Kprr+WB24Pw= -github.com/alitto/pond/v2 v2.6.2/go.mod h1:xkjYEgQ05RSpWdfSd1nM3OVv7TBhLdy7rMp3+2Nq+yE= +github.com/alitto/pond/v2 v2.7.0 h1:c76L+yN916m/DRXjGCeUBHHu92uWnh/g1bwVk4zyyXg= +github.com/alitto/pond/v2 v2.7.0/go.mod h1:xkjYEgQ05RSpWdfSd1nM3OVv7TBhLdy7rMp3+2Nq+yE= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= @@ -85,8 +87,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= -golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -95,8 +97,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= -golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= -golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= diff --git a/main.go b/main.go index f5c9dc9..05d93aa 100644 --- a/main.go +++ b/main.go @@ -12,7 +12,6 @@ import ( ) func main() { - log.Println(laniakea.EscapeMarkdownV2("Загрузка...")) _ = godotenv.Load(".env", ".env.production", ".env.ai") database.ConnectPostgres() @@ -20,22 +19,16 @@ func main() { database.ConnectRedis() bot := laniakea.NewBot[database.Context](laniakea.LoadOptsFromEnv()) - defer func(bot *laniakea.Bot[database.Context]) { - err := bot.Close() - if err != nil { - panic(err) - } - }(bot) - bot = bot.ErrorTemplate("Во время выполнения команды произошла ошибка!\nСообщите об этом разработчику!\n\n%s") - bot = bot.DatabaseContext(&database.Context{ + defer func() { + _ = bot.Close() + }() + bot = bot.ErrorTemplate( + "Во время выполнения команды произошла ошибка!\nСообщите об этом разработчику!\n\n%s", + ).DatabaseContext(&database.Context{ Postgres: database.PostgresDatabase, Mongo: database.MongoClient, Redis: database.RedisClient, - }) - bot.AddDatabaseLoggerWriter(plugins.DatabaseLogger) - bot.AddMiddleware(plugins.InitLogMiddleware()) - - bot.AddPlugins( + }).AddDatabaseLoggerWriter(plugins.DatabaseLogger).AddMiddleware(plugins.InitLogMiddleware()).AddPlugins( plugins.RegisterService(), plugins.RegisterAdmin(), plugins.RegisterLogs(), @@ -47,10 +40,8 @@ func main() { plugins.RegisterProxy(), ) - //plugins.RegisterRelations(bot) - if err := bot.AutoGenerateCommands(); err != nil { - panic(err) + log.Println(err) } bot.Run() } diff --git a/plugins/admin.go b/plugins/admin.go index 1d2b775..a80388b 100644 --- a/plugins/admin.go +++ b/plugins/admin.go @@ -17,10 +17,10 @@ import ( func RegisterAdmin() *laniakea.Plugin[database.Context] { p := laniakea.NewPlugin[database.Context]("Admin") - p.AddCommand(laniakea.NewCommand(uploadPhoto, "uploadPhoto").SkipCommandAutoGen()) - p.AddCommand(laniakea.NewCommand(emojiId, "emojiId").SkipCommandAutoGen()) - p.AddCommand(laniakea.NewCommand(execSql, "sql").SkipCommandAutoGen()) - p.AddCommand(laniakea.NewCommand(test, "test").SkipCommandAutoGen()) + p.NewCommand(uploadPhoto, "uploadPhoto").SkipCommandAutoGen() + p.NewCommand(emojiId, "emojiId").SkipCommandAutoGen() + p.NewCommand(execSql, "sql").SkipCommandAutoGen() + p.NewCommand(test, "test").SkipCommandAutoGen() p.AddMiddleware(AdminMiddleware()) return p @@ -75,7 +75,7 @@ func execSql(ctx *laniakea.MsgContext, db *database.Context) { ctx.Error(err) return } - ctx.Answerf("`%s`", data) + ctx.AnswerfMarkdown("```json\n%s\n```", data) } func emojiId(ctx *laniakea.MsgContext, _ *database.Context) { diff --git a/plugins/ai.go b/plugins/ai.go index fd218f8..e1e5e42 100644 --- a/plugins/ai.go +++ b/plugins/ai.go @@ -13,8 +13,7 @@ import ( func RegisterAi() *laniakea.Plugin[database.Context] { p := laniakea.NewPlugin[database.Context]("AI") - p.AddCommand(p.NewCommand(gptTest, "gpt").SkipCommandAutoGen()) - //p.AddCommand(p.NewCommand(gptTest, "gpt2").SkipCommandAutoGen()) + p.NewCommand(gptTest, "gpt").SkipCommandAutoGen() return p } diff --git a/plugins/ban.go b/plugins/ban.go index 6089a79..e0b36e6 100644 --- a/plugins/ban.go +++ b/plugins/ban.go @@ -9,8 +9,8 @@ import ( func RegisterProxy() *laniakea.Plugin[database.Context] { p := laniakea.NewPlugin[database.Context]("Proxy") - p.AddCommand(laniakea.NewCommand(getH2Link, "h2link")) - p.AddCommand(laniakea.NewCommand(getProxy, "proxy")) + p.NewCommand(getH2Link, "h2link") + p.NewCommand(getProxy, "proxy") return p } diff --git a/plugins/economy.go b/plugins/economy.go index 04920cf..f8b7ba7 100644 --- a/plugins/economy.go +++ b/plugins/economy.go @@ -17,22 +17,22 @@ import ( func RegisterEconomy(bot *laniakea.Bot[database.Context]) *laniakea.Plugin[database.Context] { p := laniakea.NewPlugin[database.Context]("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()) + p.NewCommand(profile, "profile") + p.NewCommand(profile, "профиль") + p.NewCommand(work, "work") + p.NewCommand(work, "работать") + p.NewCommand(collect, "collect") + p.NewCommand(collect, "собрать") + p.NewCommand(code, "code") + p.NewCommand(code, "код") - p.AddCommand(p.NewCommand(vacancies, "vacancies")) - p.AddCommand(p.NewCommand(vacancies, "вакансии").SkipCommandAutoGen()) - p.AddCommand(p.NewCommand(getAJob, "getajob")) - p.AddCommand(p.NewCommand(getAJob, "устроиться").SkipCommandAutoGen()) + p.NewCommand(vacancies, "vacancies") + p.NewCommand(vacancies, "вакансии") + p.NewCommand(getAJob, "getajob") + p.NewCommand(getAJob, "устроиться") - p.AddCommand(p.NewCommand(aboutGroup, "group")) - p.AddCommand(p.NewCommand(aboutGroup, "о группе").SkipCommandAutoGen()) + p.NewCommand(aboutGroup, "group") + p.NewCommand(aboutGroup, "о группе") bot.AddRunner(*laniakea.NewRunner[database.Context]( "economy.PassiveIncome", passiveIncome, diff --git a/plugins/fun.go b/plugins/fun.go index d3dbfef..5dadbc7 100644 --- a/plugins/fun.go +++ b/plugins/fun.go @@ -9,8 +9,8 @@ import ( func RegisterFun() *laniakea.Plugin[database.Context] { p := laniakea.NewPlugin[database.Context]("Fun") - p.AddCommand(p.NewCommand(beautyFont, "bf")) - p.AddCommand(p.NewCommand(beautyFontHeart, "bfh")) + p.NewCommand(beautyFont, "bf") + p.NewCommand(beautyFontHeart, "bfh") return p } diff --git a/plugins/logs.go b/plugins/logs.go index de4e33e..f30149d 100644 --- a/plugins/logs.go +++ b/plugins/logs.go @@ -17,8 +17,8 @@ import ( func RegisterLogs() *laniakea.Plugin[database.Context] { p := laniakea.NewPlugin[database.Context]("Logs") - p.AddCommand(p.NewCommand(getLogs, "logs").SkipCommandAutoGen()) - p.AddCommand(p.NewCommand(getMsgLogs, "msglogs").SkipCommandAutoGen()) + p.NewCommand(getLogs, "logs").SkipCommandAutoGen() + p.NewCommand(getMsgLogs, "msglogs").SkipCommandAutoGen() p.AddMiddleware(AdminMiddleware()) return p } diff --git a/plugins/rp.go b/plugins/rp.go index ff78723..d12e401 100644 --- a/plugins/rp.go +++ b/plugins/rp.go @@ -26,34 +26,35 @@ import ( func RegisterRP() *laniakea.Plugin[database.Context] { rp := laniakea.NewPlugin[database.Context]("RP") - 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( + rp.NewCommand(rpUserPromptSet, "rpuserpset") + rp.NewCommand(rpInfo, "rp").SetDescription("РП профиль пользователя") + rp.NewCommand(rpInfo, "рп") + + rp.NewPayload(rpInfo, "rp.info") + rp.NewPayload(rpWaifuList, "rp.waifu_list") + rp.NewPayload(rpWaifuSet, "rp.waifu_set") + rp.NewPayload(rpPresetsList, "rp.preset_list") + rp.NewPayload(rpPresetSet, "rp.preset_set") + rp.NewPayload(rpModelList, "rp.model_list") + rp.NewPayload(rpModelSet, "rp.model_set") + rp.NewPayload(rpScenarioList, "rp.scenario_list") + rp.NewPayload(rpSettingList, "rp.setting_list") + rp.NewPayload(chatStat, "rp.chat_stat") + rp.NewPayload(newChatStage1, "rp.new_chat_s1") + rp.NewPayload(newChatStage2, "rp.new_chat_s2") + rp.NewPayload(newChat, "rp.new_chat") + 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")) + ).SetDescription("Генерация РП") + rp.NewCommand(generate, "gen").SkipCommandAutoGen() + rp.NewCommand(generate, "г").SkipCommandAutoGen() + rp.NewPayload(compress, "rp.compress_chat") + rp.NewPayload(regenerateResponse, "rp.regenerate") - 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")) + rp.NewPayload(compressSettingStage1, "rp.compress_setting_s1") + rp.NewPayload(compressSettingStage2, "rp.compress_setting_s2") + rp.NewPayload(compressSetting, "rp.compress_setting") return rp } @@ -171,14 +172,14 @@ func rpWaifuList(ctx *laniakea.MsgContext, db *database.Context) { owner = waifu.Owner.Name } out[i] = fmt.Sprintf( - "*%s* %d\\* из \"%s\" (владелец: %s)", + "*%s* %d☆ из \"%s\" (владелец: %s)", waifu.Name, waifu.Rarity, waifu.Fandom, owner, ) kb.AddCallbackButton(waifu.Name, "rp.waifu_set", waifu.ID) } kb.AddLine() kb.AddCallbackButtonStyle("На главную", laniakea.ButtonStyleDanger, "rp.info") - ctx.EditCallback(strings.Join(out, "\n"), kb) + ctx.EditCallbackMarkdown(strings.Join(out, "\n"), kb) ctx.AnswerCbQuery() } func rpWaifuSet(ctx *laniakea.MsgContext, db *database.Context) { @@ -202,7 +203,7 @@ func rpWaifuSet(ctx *laniakea.MsgContext, db *database.Context) { kb := laniakea.NewInlineKeyboard(1) kb.AddCallbackButtonStyle("На главную", laniakea.ButtonStyleSuccess, "rp.info") - ctx.EditCallbackf("Была выбрана вайфу %s", kb, waifu.Name) + ctx.EditCallbackfMarkdown("Была выбрана вайфу *%s*", kb, waifu.Name) ctx.AnswerCbQuery() } @@ -217,7 +218,7 @@ func rpPresetsList(ctx *laniakea.MsgContext, db *database.Context) { kb := laniakea.NewInlineKeyboard(2) for i, preset := range presets { out[i] = fmt.Sprintf( - "*%s* - %s", + "*%s* \\- %s", laniakea.EscapeMarkdownV2(preset.Name), preset.Description, ) kb.AddCallbackButton(preset.Name, "rp.preset_set", preset.ID) @@ -265,12 +266,12 @@ func rpModelList(ctx *laniakea.MsgContext, db *database.Context) { out := make([]string, len(models)) kb := laniakea.NewInlineKeyboard(2) for i, model := range models { - out[i] = fmt.Sprintf("*%s* - размер контекста _%dK_", model.Name, model.ContextSize) + out[i] = fmt.Sprintf("*%s* \\- размер контекста _%dK_", laniakea.EscapeMarkdownV2(model.Name), model.ContextSize) kb.AddCallbackButton(model.Name, "rp.model_set", model.ID) } kb.AddLine() kb.AddCallbackButtonStyle("Назад", laniakea.ButtonStyleDanger, "rp.info") - ctx.EditCallbackMarkdown(laniakea.EscapePunctuation(strings.Join(out, "\n")), kb) + ctx.EditCallbackMarkdown(strings.Join(out, "\n"), kb) ctx.AnswerCbQuery() } func rpModelSet(ctx *laniakea.MsgContext, db *database.Context) { @@ -308,10 +309,10 @@ func rpScenarioList(ctx *laniakea.MsgContext, db *database.Context) { out := make([]string, len(scenarios)) kb := laniakea.NewInlineKeyboard(1) for i, scenario := range scenarios { - out[i] = fmt.Sprintf("*%s* - %s\n", scenario.Name, scenario.Description) + out[i] = fmt.Sprintf("*%s* \\- %s\n", scenario.Name, scenario.Description) } kb.AddCallbackButtonStyle("На главную", laniakea.ButtonStyleDanger, "rp.info") - ctx.EditCallbackMarkdown("Список сценариев\n"+laniakea.EscapePunctuation(strings.Join(out, "\n")), kb) + ctx.EditCallbackMarkdown("Список сценариев\n"+strings.Join(out, "\n"), kb) ctx.AnswerCbQuery() } func rpSettingList(ctx *laniakea.MsgContext, db *database.Context) { @@ -324,11 +325,11 @@ func rpSettingList(ctx *laniakea.MsgContext, db *database.Context) { out := make([]string, len(settings)) for i, setting := range settings { - out[i] = fmt.Sprintf("*%s* - %s\n", setting.Name, setting.Description) + out[i] = fmt.Sprintf("*%s* \\- %s\n", setting.Name, setting.Description) } kb := laniakea.NewInlineKeyboard(1) kb.AddCallbackButtonStyle("На главную", laniakea.ButtonStyleSuccess, "rp.info") - ctx.EditCallbackMarkdown(laniakea.EscapePunctuation(strings.Join(out, "\n")), kb) + ctx.EditCallbackMarkdown(strings.Join(out, "\n"), kb) ctx.AnswerCbQuery() } @@ -387,13 +388,13 @@ func newChatStage1(ctx *laniakea.MsgContext, db *database.Context) { } kb := laniakea.NewInlineKeyboard(2) for _, setting := range settings { - out = append(out, fmt.Sprintf("*%s* - %s", setting.Name, setting.Description)) + out = append(out, fmt.Sprintf("*%s* \\- %s", setting.Name, setting.Description)) kb.AddCallbackButton(setting.Name, "rp.new_chat_s2", setting.ID) } kb.AddCallbackButton("Без сеттинга", "rp.new_chat_s2", 0) kb.AddLine() kb.AddCallbackButtonStyle("Назад", laniakea.ButtonStyleDanger, "rp.info") - ctx.EditCallbackMarkdown(laniakea.EscapePunctuation(strings.Join(out, "\n")), kb) + ctx.EditCallbackMarkdown(strings.Join(out, "\n"), kb) ctx.AnswerCbQuery() } func newChatStage2(ctx *laniakea.MsgContext, db *database.Context) { @@ -536,7 +537,7 @@ func newChat(ctx *laniakea.MsgContext, db *database.Context) { kb := laniakea.NewInlineKeyboard(2) kb.AddCallbackButtonStyle("На главную", laniakea.ButtonStyleSuccess, "rp.info") kb.AddCallbackButtonStyle("Закрыть", laniakea.ButtonStyleDanger, "general.close") - ctx.EditCallback("Был создан новый чат. Для общения используй `/г промпт`.", kb) + ctx.EditCallbackMarkdown("Был создан новый чат\\. Для общения используй `/г промпт`", kb) ctx.AnswerCbQuery() } @@ -989,11 +990,11 @@ func compressSettingStage1(ctx *laniakea.MsgContext, _ *database.Context) { out := []string{ "Выбери метод для определения сжатия", - "*По сообщениям* — чат будет сжиматься после достижения определенного кол-ва сообщений в нём", - "*По токенам* — чат будет сжиматься после достижения определенного кол-ва токенов в нём", + "*По сообщениям* \\— чат будет сжиматься после достижения определенного кол-ва сообщений в нём", + "*По токенам* \\— чат будет сжиматься после достижения определенного кол-ва токенов в нём", } - ctx.EditCallback(strings.Join(out, "\n"), kb) + ctx.EditCallbackMarkdown(strings.Join(out, "\n"), kb) } func compressSettingStage2(ctx *laniakea.MsgContext, _ *database.Context) { if len(ctx.Args) == 0 { diff --git a/plugins/service.go b/plugins/service.go index eb9f8cf..7271f16 100644 --- a/plugins/service.go +++ b/plugins/service.go @@ -14,32 +14,30 @@ func RegisterService() *laniakea.Plugin[database.Context] { p := laniakea.NewPlugin[database.Context]("service") p.AddPayload(p.NewCommand(generalClose, "general.close")) - p.AddCommand(p.NewCommand(about, "about")) - p.AddCommand(p.NewCommand(about, "о боте").SkipCommandAutoGen()) + p.NewCommand(about, "about") + p.NewCommand(about, "о боте") return p } func about(ctx *laniakea.MsgContext, _ *database.Context) { formatVersion := func() string { - parts := strings.Split(laniakea.VersionString, "-") - main := parts[0] - if len(parts) > 1 { - beta := strings.Join(strings.Split(parts[1], "."), " ") - return main + " " + beta + v := fmt.Sprintf("%d.%d.%d", laniakea.VersionMajor, laniakea.VersionMinor, laniakea.VersionPatch) + if laniakea.VersionBeta > 0 { + v += fmt.Sprintf(" Beta %d", laniakea.VersionBeta) } - return main + return v } out := []string{ - fmt.Sprintf("Версия Go: %s", runtime.Version()[2:]), - fmt.Sprintf("Версия Laniakea: %s", formatVersion()), - fmt.Sprintf("Время сборки: %s", utils.BuildTime), - fmt.Sprintf("Git хеш: %s", utils.GitCommit), + fmt.Sprintf("*Версия Go*: %s", runtime.Version()[2:]), + fmt.Sprintf("*Версия Laniakea*: %s", formatVersion()), + fmt.Sprintf("*Время сборки*: %s", utils.BuildTime), + fmt.Sprintf("*Git хеш*: %s", utils.GitCommit), } kb := laniakea.NewInlineKeyboard(2) kb.AddUrlButtonStyle("Канал", laniakea.ButtonStylePrimary, "https://t.me/ym_gbot_news") kb.AddUrlButtonStyle("Чат", laniakea.ButtonStylePrimary, "https://t.me/ym_gbot_chat") - ctx.Keyboard(strings.Join(out, "\n"), kb) + ctx.KeyboardMarkdown(laniakea.EscapePunctuation(strings.Join(out, "\n")), kb) } func generalClose(ctx *laniakea.MsgContext, _ *database.Context) { diff --git a/plugins/waifus.go b/plugins/waifus.go index 7e35a58..5c5a23b 100644 --- a/plugins/waifus.go +++ b/plugins/waifus.go @@ -2,7 +2,6 @@ package plugins import ( "fmt" - "log" "strconv" "strings" "time" @@ -17,22 +16,22 @@ import ( func RegisterWaifus() *laniakea.Plugin[database.Context] { p := laniakea.NewPlugin[database.Context]("Waifus") - 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()) + p.NewCommand(myWaifu, "mywaifu").SetDescription("Список твоих вайфу") + p.NewCommand(myWaifu, "моивайфу") + p.NewCommand(waifuList, "wlist").SetDescription("Список всех вайфу") + p.NewCommand(waifuList, "waifulist").SkipCommandAutoGen() + p.NewCommand(waifuList, "влист") + p.NewCommand(waifuList, "вайфулист") - 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")) + p.NewPayload(myWaifu, "waifu.my") + p.NewPayload(waifuList, "waifu.list") + p.NewPayload(waifuSell, "waifu.sell") + p.NewPayload(buyWaifu, "waifu.buy") + p.NewPayload(waifuInfo, "waifu.info") + p.NewPayload(waifuSearch, "waifu.search") - p.AddPayload(p.NewCommand(waifuNotImplemented, "waifu.confirm_buy")) - p.AddPayload(p.NewCommand(waifuNotImplemented, "waifu.confirm_sell")) + p.NewPayload(waifuNotImplemented, "waifu.confirm_buy") + p.NewPayload(waifuNotImplemented, "waifu.confirm_sell") return p } @@ -58,7 +57,7 @@ func myWaifu(ctx *laniakea.MsgContext, db *database.Context) { "Список твоих вайфу:", } for _, w := range waifus { - s := fmt.Sprintf("*%s* из \"*%s*\" (%d☆, ID: %d)", w.Name, w.Fandom, w.Rarity, w.ID) + s := fmt.Sprintf("*%s* из \"*%s*\" \\(%d☆, ID: %d\\)", w.Name, w.Fandom, w.Rarity, w.ID) out = append(out, s) kb.AddCallbackButton(w.Name, "waifu.info", w.ID) } @@ -68,9 +67,9 @@ func myWaifu(ctx *laniakea.MsgContext, db *database.Context) { kb.AddLine() kb.AddCallbackButton("Все вайфу", "waifu.list") if ctx.CallbackMsgId > 0 { - ctx.EditCallback(strings.Join(out, "\n"), kb) + ctx.EditCallbackMarkdown(strings.Join(out, "\n"), kb) } else { - ctx.Keyboard(strings.Join(out, "\n"), kb) + ctx.KeyboardMarkdown(strings.Join(out, "\n"), kb) } } @@ -91,7 +90,7 @@ func waifuList(ctx *laniakea.MsgContext, db *database.Context) { } else { owner = w.Owner.Name } - out[i] = fmt.Sprintf("*%s* из \"*%s*\" (%d☆, ID: %d) Владелец: *%s*", w.Name, w.Fandom, w.Rarity, w.ID, owner) + out[i] = fmt.Sprintf("*%s* из \"*%s*\" \\(%d☆, ID: %d\\) Владелец: *%s*", w.Name, w.Fandom, w.Rarity, w.ID, owner) kb.AddCallbackButton(w.Name, "waifu.info", w.ID) } kb.AddLine() @@ -100,12 +99,12 @@ func waifuList(ctx *laniakea.MsgContext, db *database.Context) { if ctx.CallbackMsgId > 0 { if len(ctx.Msg.Photo) > 0 { ctx.CallbackDelete() - ctx.Keyboard(strings.Join(out, "\n"), kb) + ctx.KeyboardMarkdown(strings.Join(out, "\n"), kb) } else { - ctx.EditCallback(strings.Join(out, "\n"), kb) + ctx.EditCallbackMarkdown(strings.Join(out, "\n"), kb) } } else { - ctx.Keyboard(strings.Join(out, "\n"), kb) + ctx.KeyboardMarkdown(strings.Join(out, "\n"), kb) } } @@ -174,8 +173,8 @@ func waifuInfo(ctx *laniakea.MsgContext, db *database.Context) { out := []string{ fmt.Sprintf("*%s* из \"*%s*\"", waifu.Name, waifu.Fandom), fmt.Sprintf("Редкость: %d☆", waifu.Rarity), - fmt.Sprintf("Бонус к деньгам: x%.2f", waifu.MoneyBonus.InexactFloat64()), - fmt.Sprintf("Бонус к опыту: x%.2f", waifu.ExpBonus.InexactFloat64()), + laniakea.EscapePunctuation(fmt.Sprintf("Бонус к деньгам: x%.2f", waifu.MoneyBonus.InexactFloat64())), + laniakea.EscapePunctuation(fmt.Sprintf("Бонус к опыту: x%.2f", waifu.ExpBonus.InexactFloat64())), fmt.Sprintf("Рыночная стоимость: %s¥", utils.DecimalComma(&waifu.MarketPrice)), } kb := laniakea.NewInlineKeyboard(2) @@ -191,10 +190,9 @@ func waifuInfo(ctx *laniakea.MsgContext, db *database.Context) { kb.AddCallbackButton("Мои вайфу", "waifu.my") if len(waifu.Image) > 0 { ctx.CallbackDelete() - log.Println(waifu.Image) - ctx.AnswerPhotoKeyboard(waifu.Image, strings.Join(out, "\n"), kb) + ctx.AnswerPhotoKeyboardMarkdown(waifu.Image, strings.Join(out, "\n"), kb) } else { - ctx.EditCallback(strings.Join(out, "\n"), kb) + ctx.EditCallbackMarkdown(strings.Join(out, "\n"), kb) } ctx.AnswerCbQuery() } @@ -209,7 +207,7 @@ func waifuSearch(ctx *laniakea.MsgContext, db *database.Context) { kb := laniakea.NewInlineKeyboard(2).AddCallbackButton("Мои вайфу", "waifu.my").AddCallbackButton("Все вайфу", "waifu.list") if time.Now().Before(user.WaifuSearchTime.Add(time.Hour * 4)) { - ctx.EditCallback("Вайфу можно искать раз в 4 часа.", kb) + ctx.EditCallback("Вайфу можно искать раз в 4 часа", kb) return } @@ -220,13 +218,13 @@ func waifuSearch(ctx *laniakea.MsgContext, db *database.Context) { return } if count == 0 { - ctx.EditCallback("Не осталось свободных вайфу... :(\nПопробуй позже или купи на рынке!", kb) + ctx.EditCallbackMarkdown("Не осталось свободных вайфу… :\\(\nПопробуй позже или купи на рынке\\!", kb) return } rand := utils.RandRange(0, 100) if 10 < rand && rand < 90 { - ctx.EditCallback("Ты ничего не нашел!", kb) + ctx.EditCallback("Ты ничего не нашёл\\!", kb) return } @@ -245,7 +243,7 @@ func waifuSearch(ctx *laniakea.MsgContext, db *database.Context) { } if len(freeWaifus) == 0 { - ctx.EditCallback("Ты ничего не нашел!", kb) + ctx.EditCallback("Ты ничего не нашёл\\!", kb) return } @@ -260,9 +258,9 @@ func waifuSearch(ctx *laniakea.MsgContext, db *database.Context) { fmt.Sprintf("Рыночная стоимость: %s¥", utils.DecimalComma(&waifu.MarketPrice)), } if len(waifu.Image) > 0 { - ctx.AnswerPhoto(waifu.Image, strings.Join(out, "\n")) + ctx.AnswerPhotoMarkdown(waifu.Image, strings.Join(out, "\n")) } else { - ctx.EditCallback(strings.Join(out, "\n"), kb) + ctx.EditCallbackMarkdown(strings.Join(out, "\n"), kb) } }