laniakea v0.6

This commit is contained in:
2026-02-18 14:06:58 +03:00
parent dd83373689
commit 57fb633893
12 changed files with 101 additions and 75 deletions

6
go.mod
View File

@@ -4,7 +4,7 @@ go 1.26.0
require ( require (
git.nix13.pw/scuroneko/extypes v1.2.0 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 git.nix13.pw/scuroneko/slog v1.0.2
github.com/google/uuid v1.6.0 github.com/google/uuid v1.6.0
github.com/joho/godotenv v1.5.1 github.com/joho/godotenv v1.5.1
@@ -15,8 +15,8 @@ require (
go.mongodb.org/mongo-driver/v2 v2.5.0 go.mongodb.org/mongo-driver/v2 v2.5.0
) )
//replace git.nix13.pw/scuroneko/laniakea v0.5.0 => ./laniakea //replace git.nix13.pw/scuroneko/laniakea v0.6.2 => ./laniakea
//replace git.nix13.pw/scuroneko/extypes v1.1.0 => ../go-extypes //replace git.nix13.pw/scuroneko/extypes v1.2.0 => ../go-extypes
//replace git.nix13.pw/scuroneko/slog v1.0.2 => ../slog //replace git.nix13.pw/scuroneko/slog v1.0.2 => ../slog
require ( require (

4
go.sum
View File

@@ -2,8 +2,8 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= 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 h1:2n2hD6KsMAted+6MGhAyeWyli2Qzc9G2y+pQNB7C1dM=
git.nix13.pw/scuroneko/extypes v1.2.0/go.mod h1:uZVs8Yo3RrYAG9dMad6qR6lsYY67t+459D9c65QAYAw= 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.6.2 h1:YsXvTPB10lmunWiLGlYorrZ5qbYJp00xy8HSA/4EdyI=
git.nix13.pw/scuroneko/laniakea v0.5.0/go.mod h1:KZNqECXWJQUdDGJDfG2naPC60vWwCMRG0oRKVuhYlBs= 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 h1:vZyUROygxC2d5FJHUQM/30xFEHY1JT/aweDZXA4rm2g=
git.nix13.pw/scuroneko/slog v1.0.2/go.mod h1:3Qm2wzkR5KjwOponMfG7TcGSDjmYaFqRAmLvSPTuWJI= git.nix13.pw/scuroneko/slog v1.0.2/go.mod h1:3Qm2wzkR5KjwOponMfG7TcGSDjmYaFqRAmLvSPTuWJI=
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=

View File

@@ -17,6 +17,7 @@ func main() {
database.ConnectRedis() database.ConnectRedis()
bot := laniakea.NewBot(laniakea.LoadSettingsFromEnv()) bot := laniakea.NewBot(laniakea.LoadSettingsFromEnv())
defer bot.Close()
bot = bot.ErrorTemplate("Во время выполнения команды произошла ошибка!\nСообщите об этом разработчику!\n\n%s") bot = bot.ErrorTemplate("Во время выполнения команды произошла ошибка!\nСообщите об этом разработчику!\n\n%s")
bot = bot.DatabaseContext(&laniakea.DatabaseContext{ bot = bot.DatabaseContext(&laniakea.DatabaseContext{
PostgresSQL: database.PostgresDatabase, PostgresSQL: database.PostgresDatabase,
@@ -37,6 +38,8 @@ func main() {
plugins.RegisterAi(bot) plugins.RegisterAi(bot)
plugins.RegisterFun(bot) plugins.RegisterFun(bot)
defer bot.Close() if err := bot.AutoGenerateCommands(); err != nil {
panic(err)
}
bot.Run() bot.Run()
} }

View File

@@ -14,16 +14,16 @@ import (
func RegisterAdmin(b *laniakea.Bot) { func RegisterAdmin(b *laniakea.Bot) {
p := laniakea.NewPlugin("Admin") p := laniakea.NewPlugin("Admin")
p.Command(uploadPhoto, "uploadPhoto") p.AddCommand(laniakea.NewCommand(uploadPhoto, "uploadPhoto").SkipCommandAutoGen())
p.Command(emojiId, "emojiId") p.AddCommand(laniakea.NewCommand(emojiId, "emojiId").SkipCommandAutoGen())
p.Command(getProxy, "proxy") p.AddCommand(laniakea.NewCommand(getProxy, "proxy").SkipCommandAutoGen())
p.Command(execSql, "sql") p.AddCommand(laniakea.NewCommand(execSql, "sql").SkipCommandAutoGen())
p.AddMiddleware(AdminMiddleware()) p.AddMiddleware(AdminMiddleware())
b.AddPlugins(p.Build()) b.AddPlugins(p)
} }
func AdminMiddleware() *laniakea.PluginMiddleware { func AdminMiddleware() laniakea.Middleware {
m := laniakea.NewPluginMiddleware(func(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) bool { m := laniakea.NewMiddleware("AdminMiddleware", func(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) bool {
rep := psql.NewUserRepository(db) rep := psql.NewUserRepository(db)
u, err := rep.GetById(ctx.FromID) u, err := rep.GetById(ctx.FromID)
if err != nil { if err != nil {
@@ -31,7 +31,7 @@ func AdminMiddleware() *laniakea.PluginMiddleware {
} }
return u.Group.IsAdmin return u.Group.IsAdmin
}) })
return m return *m
} }
func execSql(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { func execSql(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {

View File

@@ -11,8 +11,8 @@ import (
func RegisterAi(bot *laniakea.Bot) { func RegisterAi(bot *laniakea.Bot) {
p := laniakea.NewPlugin("AI") p := laniakea.NewPlugin("AI")
p.Command(gpt, "gpt") p.AddCommand(p.NewCommand(gpt, "gpt").SkipCommandAutoGen())
bot.AddPlugins(p.Build()) bot.AddPlugins(p)
} }
func gpt(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { func gpt(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {

View File

@@ -15,22 +15,29 @@ import (
) )
func RegisterEconomy(bot *laniakea.Bot) { func RegisterEconomy(bot *laniakea.Bot) {
economy := laniakea.NewPlugin("Economy") p := laniakea.NewPlugin("Economy")
economy.Command(profile, "profile", "профиль") p.AddCommand(p.NewCommand(profile, "profile"))
economy.Command(work, "work", "работать") p.AddCommand(p.NewCommand(profile, "профиль").SkipCommandAutoGen())
economy.Command(collect, "collect", "собрать") p.AddCommand(p.NewCommand(work, "work"))
economy.Command(code, "code", "код") 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", "вакансии") p.AddCommand(p.NewCommand(vacancies, "vacancies"))
economy.Command(getAJob, "getajob", "устроиться") 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( bot.AddRunner(laniakea.NewRunner(
"economy.PassiveIncome", passiveIncome, "economy.PassiveIncome", passiveIncome,
).Timeout(time.Minute).Build()) ).Timeout(time.Minute).Build())
bot.AddPlugins(economy.Build()) bot.AddPlugins(p)
} }
func passiveIncome(b *laniakea.Bot) error { func passiveIncome(b *laniakea.Bot) error {
@@ -383,12 +390,15 @@ func aboutGroup(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
if group.IsVip { if group.IsVip {
out = append(out, "🎏Доступ к ВИП функциям: ✅") out = append(out, "🎏Доступ к ВИП функциям: ✅")
} }
if group.IsPremium {
out = append(out, "🎏Доступ к премиум функциям: ✅")
}
if group.IsTester {
out = append(out, "🔓Бета-тестер: ✅")
}
if group.IsAdmin { if group.IsAdmin {
out = append(out, "🖥️Доступ к админ функциям: ✅") out = append(out, "🖥️Доступ к админ функциям: ✅")
} }
if group.IsVip {
out = append(out, "🔓Бета-тестер: ✅")
}
ctx.Answer(strings.Join(out, "\n")) ctx.Answer(strings.Join(out, "\n"))
} }

View File

@@ -8,9 +8,9 @@ import (
func RegisterFun(bot *laniakea.Bot) { func RegisterFun(bot *laniakea.Bot) {
p := laniakea.NewPlugin("Fun") p := laniakea.NewPlugin("Fun")
p.Command(beautyFont, "bf") p.AddCommand(p.NewCommand(beautyFont, "bf"))
p.Command(beautyFontHeart, "bfh") p.AddCommand(p.NewCommand(beautyFontHeart, "bfh"))
bot.AddPlugins(p.Build()) bot.AddPlugins(p)
} }
var ligatures = map[string]string{ var ligatures = map[string]string{

View File

@@ -16,13 +16,13 @@ import (
func RegisterLogs(bot *laniakea.Bot) { func RegisterLogs(bot *laniakea.Bot) {
p := laniakea.NewPlugin("Logs") p := laniakea.NewPlugin("Logs")
p.Command(getLogs, "logs") p.AddCommand(p.NewCommand(getLogs, "logs").SkipCommandAutoGen())
p.Command(getMsgLogs, "msglogs") p.AddCommand(p.NewCommand(getMsgLogs, "msglogs").SkipCommandAutoGen())
p.AddMiddleware(AdminMiddleware()) p.AddMiddleware(AdminMiddleware())
bot.AddPlugins(p.Build()) bot.AddPlugins(p)
} }
func InitLogMiddleware() laniakea.Middleware { 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) { 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 return out
} }
func logMiddleware(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { func logMiddleware(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) bool {
if ctx.Msg == nil { if ctx.Msg == nil {
return return true
} }
entry := &mdb.MessageLogEntry{ entry := &mdb.MessageLogEntry{
MessageID: ctx.Msg.MessageID, MessageID: ctx.Msg.MessageID,
@@ -76,6 +76,7 @@ func logMiddleware(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
if err != nil { if err != nil {
ctx.Bot.Logger().Errorln(err) ctx.Bot.Logger().Errorln(err)
} }
return true
} }
type DatabaseWriter struct { type DatabaseWriter struct {

View File

@@ -4,5 +4,5 @@ import "git.nix13.pw/scuroneko/laniakea"
func RegisterRelations(b *laniakea.Bot) { func RegisterRelations(b *laniakea.Bot) {
p := laniakea.NewPlugin("Relations") p := laniakea.NewPlugin("Relations")
b.AddPlugins(p.Build()) b.AddPlugins(p)
} }

View File

@@ -21,30 +21,36 @@ import (
func RegisterRP(bot *laniakea.Bot) { func RegisterRP(bot *laniakea.Bot) {
rp := laniakea.NewPlugin("RP") rp := laniakea.NewPlugin("RP")
rp.Command(rpUserPromptSet, "rpuserpset") rp.AddCommand(rp.NewCommand(rpUserPromptSet, "rpuserpset"))
rp.Command(rpInfo, "rp", "рп") rp.AddCommand(rp.NewCommand(rpInfo, "rp").SetDescription("РП профиль пользователя"))
rp.Payload(rpInfo, "rp.info") rp.AddCommand(rp.NewCommand(rpInfo, "рп").SkipCommandAutoGen())
rp.Payload(rpWaifuList, "rp.waifu_list") rp.AddPayload(rp.NewCommand(rpInfo, "rp.info"))
rp.Payload(rpWaifuSet, "rp.waifu_set") rp.AddPayload(rp.NewCommand(rpWaifuList, "rp.waifu_list"))
rp.Payload(rpPresetsList, "rp.preset_list") rp.AddPayload(rp.NewCommand(rpWaifuSet, "rp.waifu_set"))
rp.Payload(rpPresetSet, "rp.preset_set") rp.AddPayload(rp.NewCommand(rpPresetsList, "rp.preset_list"))
rp.Payload(rpModelList, "rp.model_list") rp.AddPayload(rp.NewCommand(rpPresetSet, "rp.preset_set"))
rp.Payload(rpModelSet, "rp.model_set") rp.AddPayload(rp.NewCommand(rpModelList, "rp.model_list"))
rp.Payload(rpScenarioList, "rp.scenario_list") rp.AddPayload(rp.NewCommand(rpModelSet, "rp.model_set"))
rp.Payload(rpSettingList, "rp.setting_list") rp.AddPayload(rp.NewCommand(rpScenarioList, "rp.scenario_list"))
rp.Payload(chatStat, "rp.chat_stat") rp.AddPayload(rp.NewCommand(rpSettingList, "rp.setting_list"))
rp.Payload(newChatStage1, "rp.new_chat_s1") rp.AddPayload(rp.NewCommand(chatStat, "rp.chat_stat"))
rp.Payload(newChatStage2, "rp.new_chat_s2") rp.AddPayload(rp.NewCommand(newChatStage1, "rp.new_chat_s1"))
rp.Payload(newChat, "rp.new_chat") rp.AddPayload(rp.NewCommand(newChatStage2, "rp.new_chat_s2"))
rp.Command(generate, "g", "gen", "г") rp.AddPayload(rp.NewCommand(newChat, "rp.new_chat"))
rp.Payload(compress, "rp.compress_chat") rp.AddCommand(rp.NewCommand(
rp.Payload(regenerateResponse, "rp.regenerate") 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.AddPayload(rp.NewCommand(compressSettingStage1, "rp.compress_setting_s1"))
rp.Payload(compressSettingStage2, "rp.compress_setting_s2") rp.AddPayload(rp.NewCommand(compressSettingStage2, "rp.compress_setting_s2"))
rp.Payload(compressSetting, "rp.compress_setting") rp.AddPayload(rp.NewCommand(compressSetting, "rp.compress_setting"))
bot.AddPlugins(rp.Build()) bot.AddPlugins(rp)
} }
func rpInfo(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { func rpInfo(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
@@ -899,6 +905,7 @@ func compressSettingStage1(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext
kb := laniakea.NewInlineKeyboard(2) kb := laniakea.NewInlineKeyboard(2)
kb.AddCallbackButton("По сообщениям", "rp.compress_setting_s2", "messages") kb.AddCallbackButton("По сообщениям", "rp.compress_setting_s2", "messages")
kb.AddCallbackButton("По токенам", "rp.compress_setting_s2", "tokens") kb.AddCallbackButton("По токенам", "rp.compress_setting_s2", "tokens")
kb.AddCallbackButton("Отключить", "rp.compress_setting", "none", 0)
kb.AddLine().AddCallbackButton("На главную", "rp.info") kb.AddLine().AddCallbackButton("На главную", "rp.info")
out := []string{ out := []string{

View File

@@ -11,10 +11,11 @@ import (
func RegisterService(bot *laniakea.Bot) { func RegisterService(bot *laniakea.Bot) {
p := laniakea.NewPlugin("service") p := laniakea.NewPlugin("service")
p.Payload(generalClose, "general.close") p.AddPayload(p.NewCommand(generalClose, "general.close"))
p.Command(about, "about", "о боте") p.AddCommand(p.NewCommand(about, "about"))
bot.AddPlugins(p.Build()) p.AddCommand(p.NewCommand(about, "о боте").SkipCommandAutoGen())
bot.AddPlugins(p)
} }
func about(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) { func about(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {

View File

@@ -14,22 +14,26 @@ import (
) )
func RegisterWaifus(bot *laniakea.Bot) { func RegisterWaifus(bot *laniakea.Bot) {
waifus := laniakea.NewPlugin("Waifus") p := laniakea.NewPlugin("Waifus")
waifus.Command(myWaifu, "mywaifu", "моивайфу") p.AddCommand(p.NewCommand(myWaifu, "mywaifu"))
waifus.Command(waifuList, "wlist", "waifulist", "влист", "вайфулист") 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") p.AddPayload(p.NewCommand(myWaifu, "waifu.my"))
waifus.Payload(waifuList, "waifu.list") p.AddPayload(p.NewCommand(waifuList, "waifu.list"))
waifus.Payload(waifuSell, "waifu.sell") p.AddPayload(p.NewCommand(waifuSell, "waifu.sell"))
waifus.Payload(buyWaifu, "waifu.buy") p.AddPayload(p.NewCommand(buyWaifu, "waifu.buy"))
waifus.Payload(waifuInfo, "waifu.info") p.AddPayload(p.NewCommand(waifuInfo, "waifu.info"))
waifus.Payload(waifuSearch, "waifu.search") p.AddPayload(p.NewCommand(waifuSearch, "waifu.search"))
waifus.Payload(waifuNotImplemented, "waifu.confirm_buy") p.AddPayload(p.NewCommand(waifuNotImplemented, "waifu.confirm_buy"))
waifus.Payload(waifuNotImplemented, "waifu.confirm_sell") p.AddPayload(p.NewCommand(waifuNotImplemented, "waifu.confirm_sell"))
bot.AddPlugins(waifus.Build()) bot.AddPlugins(p)
} }
func myWaifu(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { func myWaifu(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {