runners and fixes

This commit is contained in:
2026-01-28 21:50:58 +03:00
parent 84ff8134d9
commit b31b57878d
11 changed files with 92 additions and 84 deletions

1
.gitignore vendored
View File

@@ -1,5 +1,6 @@
logs/
.idea/
laniakea/
config.json
.env.production
.env.ai

View File

@@ -2,9 +2,10 @@ package mdb
import (
"context"
"git.nix13.pw/scuroneko/laniakea"
"kurumibot/database"
"time"
"git.nix13.pw/scuroneko/laniakea"
)
type ConsoleLogEntry struct {

View File

@@ -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
}

View File

@@ -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"
)

View File

@@ -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"
)

View File

@@ -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"
)

14
go.mod
View File

@@ -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

18
go.sum
View File

@@ -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=

View File

@@ -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())

View File

@@ -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)

View File

@@ -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")