From b31b57878d0f60d58dd8d33995dc4f4e88e4e68d Mon Sep 17 00:00:00 2001 From: ScuroNeko Date: Wed, 28 Jan 2026 21:50:58 +0300 Subject: [PATCH] runners and fixes --- .gitignore | 1 + database/mdb/logs.go | 3 +- database/psql/users.go | 4 +- database/psql/waifus.go | 2 +- database/psql/works.go | 2 +- database/red/rp_chats.go | 2 +- go.mod | 14 ++--- go.sum | 18 +++--- main.go | 2 +- plugins/economy.go | 126 +++++++++++++++++++++------------------ plugins/rp.go | 2 +- 11 files changed, 92 insertions(+), 84 deletions(-) diff --git a/.gitignore b/.gitignore index df82527..587ef72 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ logs/ .idea/ +laniakea/ config.json .env.production .env.ai diff --git a/database/mdb/logs.go b/database/mdb/logs.go index 4b5ff3b..ce9dcea 100644 --- a/database/mdb/logs.go +++ b/database/mdb/logs.go @@ -2,9 +2,10 @@ package mdb import ( "context" - "git.nix13.pw/scuroneko/laniakea" "kurumibot/database" "time" + + "git.nix13.pw/scuroneko/laniakea" ) type ConsoleLogEntry struct { diff --git a/database/psql/users.go b/database/psql/users.go index b1d8226..21fe25c 100644 --- a/database/psql/users.go +++ b/database/psql/users.go @@ -8,7 +8,6 @@ import ( "time" "git.nix13.pw/scuroneko/laniakea" - "github.com/shopspring/decimal" "github.com/vinovest/sqlx" ) @@ -151,8 +150,9 @@ func (rep *UserRepository) Update(user *User) (*User, error) { return rep.GetById(user.ID) } -func GetAllUsers() ([]*User, error) { +func (rep *UserRepository) GetAll() ([]*User, error) { users := make([]*User, 0) + return users, nil } diff --git a/database/psql/waifus.go b/database/psql/waifus.go index ef6d20e..48a361f 100644 --- a/database/psql/waifus.go +++ b/database/psql/waifus.go @@ -2,8 +2,8 @@ package psql import ( "database/sql" - "git.nix13.pw/scuroneko/laniakea" + "git.nix13.pw/scuroneko/laniakea" "github.com/shopspring/decimal" "github.com/vinovest/sqlx" ) diff --git a/database/psql/works.go b/database/psql/works.go index a3e4a84..4ee9295 100644 --- a/database/psql/works.go +++ b/database/psql/works.go @@ -1,9 +1,9 @@ package psql import ( - "git.nix13.pw/scuroneko/laniakea" "kurumibot/database" + "git.nix13.pw/scuroneko/laniakea" "github.com/shopspring/decimal" "github.com/vinovest/sqlx" ) diff --git a/database/red/rp_chats.go b/database/red/rp_chats.go index bef0ca6..2bf30a0 100644 --- a/database/red/rp_chats.go +++ b/database/red/rp_chats.go @@ -3,8 +3,8 @@ package red import ( "context" "fmt" - "git.nix13.pw/scuroneko/laniakea" + "git.nix13.pw/scuroneko/laniakea" "github.com/google/uuid" "github.com/redis/go-redis/v9" ) diff --git a/go.mod b/go.mod index e0846ea..7ff9376 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,9 @@ module kurumibot -go 1.25.6 +go 1.25 require ( - git.nix13.pw/scuroneko/laniakea v0.2.6 + git.nix13.pw/scuroneko/laniakea v0.3.0 git.nix13.pw/scuroneko/slog v1.0.0 github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 @@ -11,19 +11,19 @@ require ( github.com/redis/go-redis/v9 v9.17.3 github.com/shopspring/decimal v1.4.0 github.com/vinovest/sqlx v1.7.1 - go.mongodb.org/mongo-driver/v2 v2.4.2 + go.mongodb.org/mongo-driver/v2 v2.5.0 ) +//replace git.nix13.pw/scuroneko/laniakea v0.3.0 => ./laniakea + require ( 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 - github.com/golang/snappy v1.0.0 // indirect - github.com/klauspost/compress v1.18.2 // indirect + github.com/klauspost/compress v1.18.3 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/muir/sqltoken v0.1.0 // indirect - github.com/stretchr/testify v1.11.1 // indirect + github.com/muir/sqltoken v0.2.1 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.2.0 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect diff --git a/go.sum b/go.sum index e9b6413..06ea9da 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -git.nix13.pw/scuroneko/laniakea v0.2.6 h1:IfI6dR48EWZPEu7r2E/iyMA9Yn+w3SYNEQbZwWJkeAE= -git.nix13.pw/scuroneko/laniakea v0.2.6/go.mod h1:6PSB7tsSvAVPUFcmEyj8CtpVCVfnscJdsWZylcjCvM4= +git.nix13.pw/scuroneko/laniakea v0.3.0 h1:Hx0FPQaEtorcly0ILLnWCj4IPYuxpRCYVmwqNjKdCG4= +git.nix13.pw/scuroneko/laniakea v0.3.0/go.mod h1:OVSuOuAQLUwBoFWH/+oTlQqwra1e49zED9Xoc9DeJcg= git.nix13.pw/scuroneko/slog v1.0.0 h1:PI0YePrmCopjrljUfwCtBIEwNYB+PBgDzPcCXbetpcE= git.nix13.pw/scuroneko/slog v1.0.0/go.mod h1:3Qm2wzkR5KjwOponMfG7TcGSDjmYaFqRAmLvSPTuWJI= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= @@ -18,16 +18,14 @@ github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/go-sql-driver/mysql v1.9.0 h1:Y0zIbQXhQKmQgTp44Y1dp3wTXcn804QoTptLZT1vtvo= github.com/go-sql-driver/mysql v1.9.0/go.mod h1:pDetrLJeA3oMujJuvXc8RJoasr589B6A9fwzD3QMrqw= -github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= -github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk= -github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.3 h1:9PJRvfbmTabkOX8moIpXPbMMbYN60bWImDDU7L+/6zw= +github.com/klauspost/compress v1.18.3/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= @@ -36,8 +34,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= -github.com/muir/sqltoken v0.1.0 h1:edosEGsOClOZNfgGQNQSgxR9O6LiVefm2rDRqp2InuI= -github.com/muir/sqltoken v0.1.0/go.mod h1:lgOIORnKekMsuc/ZwdPOfwz/PtWLPCke43cEbT3uDuY= +github.com/muir/sqltoken v0.2.1 h1:19KvJrCj9aOMfU921hjnizWPlQmPTe+tb36zupOY2FA= +github.com/muir/sqltoken v0.2.1/go.mod h1:sSlj5M0VqQ4OuedmxwWs1TmzzRXaH3DLf5ukzg6meIo= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/redis/go-redis/v9 v9.17.3 h1:fN29NdNrE17KttK5Ndf20buqfDZwGNgoUr9qjl1DQx4= @@ -57,8 +55,8 @@ github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gi github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 h1:ilQV1hzziu+LLM3zUTJ0trRztfwgjqKnBWNtSRkbmwM= github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfSfmXjznFBSZNN13rSJjlIOI1fUNAtF7rmI= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.mongodb.org/mongo-driver/v2 v2.4.2 h1:HrJ+Auygxceby9MLp3YITobef5a8Bv4HcPFIkml1U7U= -go.mongodb.org/mongo-driver/v2 v2.4.2/go.mod h1:jHeEDJHJq7tm6ZF45Issun9dbogjfnPySb1vXA7EeAI= +go.mongodb.org/mongo-driver/v2 v2.5.0 h1:yXUhImUjjAInNcpTcAlPHiT7bIXhshCTL3jVBkF3xaE= +go.mongodb.org/mongo-driver/v2 v2.5.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= diff --git a/main.go b/main.go index 620bdda..aa966b2 100644 --- a/main.go +++ b/main.go @@ -23,7 +23,7 @@ func main() { Redis: database.RedisClient, } bot = bot.ErrorTemplate("Во время выполнения команды произошла ошибка!\nСообщите об этом разработчику!\n\n%s") - bot = bot.InitDatabaseContext(dbCtx) + bot = bot.DatabaseContext(dbCtx) bot.AddDatabaseLogger(plugins.DatabaseLogger) bot.AddMiddleware(plugins.InitLogMiddleware()) diff --git a/plugins/economy.go b/plugins/economy.go index bb18493..6bca334 100644 --- a/plugins/economy.go +++ b/plugins/economy.go @@ -29,7 +29,8 @@ func RegisterEconomy(bot *laniakea.Bot) { economy = economy.Command(about, "about", "о боте") - //go passiveIncome(bot) + runner := laniakea.NewRunner("economy.PassiveIncome", passiveIncome).Timeout(time.Minute).Build() + bot.AddRunner(runner) bot.AddPlugins(economy.Build()) } @@ -44,64 +45,71 @@ func about(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) { ctx.Answer(strings.Join(out, "\n")) } -//func passiveIncome(b *laniakea.Bot) { -// for { -// time.Sleep(time.Minute * 5) -// -// users, err := psql.GetAllUsers() -// if err != nil { -// b.Logger().Error(err) -// continue -// } -// -// for _, user := range users { -// if user.Business == nil && user.Maid == nil && user.Miner == nil { -// continue -// } -// -// if time.Now().Before(user.IncomeTime.Add(time.Hour * 3)) { -// continue -// } -// -// moneyIncome := decimal.NewFromInt(0) -// expIncome := decimal.NewFromInt(0) -// btcIncome := decimal.NewFromInt(0) -// -// if user.Business != nil { -// moneyIncome = moneyIncome.Add(user.Business.Income).Mul(user.Group.Multiplier) -// } -// if user.Maid != nil { -// expIncome = expIncome.Add(user.Maid.Income).Mul(user.Group.Multiplier) -// } -// if user.Miner != nil { -// btcIncome = btcIncome.Add(user.Miner.Income).Mul(user.Group.Multiplier) -// } -// -// waifus, err := psql.GetUserWaifus(user.ID) -// if err != nil { -// b.Logger().Error(err) -// continue -// } -// for _, waifu := range waifus { -// moneyIncome = moneyIncome.Mul(waifu.MoneyBonus) -// expIncome = expIncome.Mul(waifu.ExpBonus) -// btcIncome = btcIncome.Mul(waifu.MoneyBonus) -// } -// -// expIncome = expIncome.Mul(decimal.NewFromFloat(0.25)) -// moneyIncome = moneyIncome.Mul(decimal.NewFromFloat(0.25)) -// btcIncome = btcIncome.Mul(decimal.NewFromFloat(0.25)) -// -// user.ExpIncome += int(expIncome.IntPart()) -// user.MoneyIncome = user.MoneyIncome.Add(moneyIncome) -// user.BtcIncome = user.BtcIncome.Add(btcIncome) -// user.IncomeTime = time.Now().Add(-time.Hour * 2) -// psql.UpdateUser(user) -// -// b.Logger().Debug(fmt.Sprintf("У %d было пассивно собрано. След. сбор через час\n", user.ID)) -// } -// } -//} +func passiveIncome(b *laniakea.Bot) error { + ctx := b.GetDBContext() + waifuRep := psql.NewWaifuRepository(ctx) + userRep := psql.NewUserRepository(ctx) + + for { + users, err := userRep.GetAll() + if err != nil { + b.Logger().Error(err) + continue + } + + for _, user := range users { + if user.Business == nil && user.Maid == nil && user.Miner == nil { + continue + } + + if time.Now().Before(user.IncomeTime.Add(time.Hour * 3)) { + continue + } + + moneyIncome := decimal.NewFromInt(0) + expIncome := decimal.NewFromInt(0) + btcIncome := decimal.NewFromInt(0) + + if user.Business != nil { + moneyIncome = moneyIncome.Add(user.Business.Income).Mul(user.Group.Multiplier) + } + if user.Maid != nil { + expIncome = expIncome.Add(user.Maid.Income).Mul(user.Group.Multiplier) + } + if user.Miner != nil { + btcIncome = btcIncome.Add(user.Miner.Income).Mul(user.Group.Multiplier) + } + + waifus, err := waifuRep.GetByUserId(user.ID) + if err != nil { + b.Logger().Error(err) + continue + } + for _, waifu := range waifus { + moneyIncome = moneyIncome.Mul(waifu.MoneyBonus) + expIncome = expIncome.Mul(waifu.ExpBonus) + btcIncome = btcIncome.Mul(waifu.MoneyBonus) + } + + expIncome = expIncome.Mul(decimal.NewFromFloat(0.25)) + moneyIncome = moneyIncome.Mul(decimal.NewFromFloat(0.25)) + btcIncome = btcIncome.Mul(decimal.NewFromFloat(0.25)) + + user.ExpIncome += int(expIncome.IntPart()) + user.MoneyIncome = user.MoneyIncome.Add(moneyIncome) + user.BtcIncome = user.BtcIncome.Add(btcIncome) + user.IncomeTime = time.Now().Add(-time.Hour * 2) + + _, err = userRep.Update(user) + if err != nil { + b.Logger().Error(err) + continue + } + + b.Logger().Debug(fmt.Sprintf("У %d было пассивно собрано. След. сбор через час\n", user.ID)) + } + } +} func profile(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { rep := psql.NewUserRepository(db) diff --git a/plugins/rp.go b/plugins/rp.go index b09a6e2..8f9d42e 100644 --- a/plugins/rp.go +++ b/plugins/rp.go @@ -18,6 +18,7 @@ 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") @@ -32,7 +33,6 @@ func RegisterRP(bot *laniakea.Bot) { rp.Payload(newChatStage1, "rp.new_chat_s1") rp.Payload(newChatStage2, "rp.new_chat_s2") rp.Payload(newChat, "rp.new_chat") - rp.Command(rpUserPromptSet, "rpuserpset") rp.Command(generate, "g", "gen", "г") rp.Payload(compress, "rp.compress_chat")