ai work
This commit is contained in:
@@ -2,7 +2,6 @@ package plugins
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"kurumibot/database"
|
||||
"kurumibot/database/psql"
|
||||
"kurumibot/utils"
|
||||
"math"
|
||||
@@ -35,12 +34,12 @@ func RegisterEconomy(bot *laniakea.Bot) {
|
||||
bot.AddPlugins(economy.Build())
|
||||
}
|
||||
|
||||
func about(msgCtx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
|
||||
func about(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
|
||||
out := []string{
|
||||
fmt.Sprintf("Go: %s", "1.25.5"),
|
||||
fmt.Sprintf("Версия laniakea: %s", laniakea.VersionString),
|
||||
}
|
||||
msgCtx.Answer(strings.Join(out, "\n"))
|
||||
ctx.Answer(strings.Join(out, "\n"))
|
||||
}
|
||||
|
||||
func passiveIncome(b *laniakea.Bot) {
|
||||
@@ -95,7 +94,7 @@ func passiveIncome(b *laniakea.Bot) {
|
||||
user.MoneyIncome = user.MoneyIncome.Add(moneyIncome)
|
||||
user.BtcIncome = user.BtcIncome.Add(btcIncome)
|
||||
user.IncomeTime = time.Now().Add(-time.Hour * 2)
|
||||
database.PostgresDatabase.Save(user)
|
||||
psql.UpdateUser(user)
|
||||
|
||||
b.Logger().Debug(fmt.Sprintf("У %d было пассивно собрано. След. сбор через час\n", user.ID))
|
||||
}
|
||||
@@ -103,9 +102,9 @@ func passiveIncome(b *laniakea.Bot) {
|
||||
}
|
||||
|
||||
func profile(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
|
||||
user, err := psql.GetOrCreateUser(ctx.FromID, ctx.Update.Message.From.FirstName)
|
||||
user, err := psql.GetOrCreateUser(ctx.FromID, ctx.Msg.From.FirstName)
|
||||
if err != nil {
|
||||
ctx.Answer(err.Error())
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -187,12 +186,16 @@ func work(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
|
||||
}
|
||||
user.Exp += int(expToAdd.IntPart())
|
||||
user.Balance = user.Balance.Add(moneyToAdd)
|
||||
user.WorkTime = time.Now()
|
||||
user.WorkTime = time.Now().Add(-time.Hour * 3)
|
||||
user.Level, _ = psql.CountLevel(user.Exp)
|
||||
database.PostgresDatabase.Save(user)
|
||||
_, err = psql.UpdateUser(user)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
ctx.Answer(fmt.Sprintf(
|
||||
"Ты заработал %s¥ и %d опыта.\nПриходи через 10 минут.",
|
||||
utils.DecimalComma(&work.MoneyIncome),
|
||||
utils.DecimalComma(&moneyToAdd),
|
||||
expToAdd.IntPart(),
|
||||
))
|
||||
}
|
||||
@@ -281,7 +284,7 @@ func collect(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
|
||||
user.BTC = user.BTC.Add(btcIncome)
|
||||
user.IncomeTime = time.Now()
|
||||
|
||||
database.PostgresDatabase.Save(user)
|
||||
psql.UpdateUser(user)
|
||||
|
||||
out := []string{
|
||||
fmt.Sprintf("Ты собрал %s.", strings.Join(incomeText, ", ")),
|
||||
@@ -345,8 +348,7 @@ func getAJob(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
return
|
||||
}
|
||||
user.WorkID = workId
|
||||
user.Work = work
|
||||
db.PostgresSQL.Save(user)
|
||||
psql.UpdateUser(user)
|
||||
ctx.Answer("Ты успешно устроился на работу!")
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package plugins
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"kurumibot/database/mdb"
|
||||
"kurumibot/database/psql"
|
||||
@@ -14,10 +16,12 @@ import (
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
func RegisterTestRP(bot *laniakea.Bot) {
|
||||
func RegisterRP(bot *laniakea.Bot) {
|
||||
rp := laniakea.NewPlugin("RP")
|
||||
rp = rp.Command(selectWaifu, "rpwaifu", "рпвайфу")
|
||||
rp = rp.Payload(selectWaifu, "rp.selwaifu")
|
||||
rp = rp.Command(rpPresetsList, "rpplist")
|
||||
rp = rp.Command(rpPresetSet, "rppset")
|
||||
rp = rp.Command(newChat, "newchat")
|
||||
rp = rp.Command(generate, "g", "gen", "г")
|
||||
|
||||
@@ -38,7 +42,41 @@ func selectWaifu(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
|
||||
ctx.Answer(fmt.Sprintf("Была выбрана вайфу %d", waifuId))
|
||||
}
|
||||
|
||||
func rpPresetsList(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
rep := psql.NewRPRepository(db.PostgresSQL)
|
||||
presets, err := rep.GetAllPresets()
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
out := make([]string, len(presets))
|
||||
for i, preset := range presets {
|
||||
out[i] = fmt.Sprintf("%s) *%s*\n%s", preset.ID, preset.Name, preset.Description)
|
||||
}
|
||||
ctx.Answer(strings.Join(out, "\n"))
|
||||
}
|
||||
func rpPresetSet(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
if len(ctx.Args) == 0 || ctx.Args[0] == "" {
|
||||
return
|
||||
}
|
||||
presetId := ctx.Args[0]
|
||||
rep := psql.NewRPRepository(db.PostgresSQL)
|
||||
user, err := rep.GetOrCreateUser(int64(ctx.FromID))
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
preset, err := rep.UpdateUserPreset(user, presetId)
|
||||
if err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
ctx.Answer("Данный пресет не найден")
|
||||
} else {
|
||||
ctx.Error(err)
|
||||
}
|
||||
return
|
||||
}
|
||||
ctx.Answer(fmt.Sprintf("Был выбран пресет %s", preset.Name))
|
||||
}
|
||||
func newChat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
waifuId := red.RPGetSelectedWaifu(db, ctx.FromID)
|
||||
if waifuId == 0 {
|
||||
@@ -86,11 +124,23 @@ func generate(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
rpRep := psql.NewRPRepository(db.PostgresSQL)
|
||||
rpUser, err := rpRep.GetUser(int64(ctx.FromID))
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
preset, err := rpRep.GetUserPreset(rpUser)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
systemPrompt := ai.Message{
|
||||
Role: "system",
|
||||
Content: fmt.Sprintf(
|
||||
"%s %s %s",
|
||||
ai.FormatPrompt(ai.PreHistoryPrompt, waifu.Name, ctx.Msg.From.FirstName),
|
||||
ai.FormatPrompt(preset.PreHistory, waifu.Name, ctx.Msg.From.FirstName),
|
||||
fmt.Sprintf("Вот краткое описание твоего персонажа: %s", waifu.RpPrompt),
|
||||
red.RPGetChatPrompt(db, ctx.FromID, waifuId),
|
||||
),
|
||||
@@ -112,7 +162,7 @@ func generate(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
api := ai.NewOpenAIAPI(ai.CosmoRPUrl, os.Getenv("PAWAN_KEY"), "cosmorp-2.5")
|
||||
userMessage := strings.Join(ctx.Args, " ")
|
||||
messages = append(messages, ai.Message{
|
||||
Role: "system", Content: ai.FormatPrompt(ai.PostHistoryPrompt, waifu.Name, ctx.Msg.From.FirstName),
|
||||
Role: "system", Content: ai.FormatPrompt(preset.PostHistory, waifu.Name, ctx.Msg.From.FirstName),
|
||||
}, ai.Message{
|
||||
Role: "user", Content: userMessage,
|
||||
})
|
||||
@@ -121,6 +171,7 @@ func generate(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
m := ctx.Answer("Генерация запущена...")
|
||||
res, err := api.CreateCompletion(ai.CreateCompletionReq{
|
||||
Messages: append([]ai.Message{systemPrompt}, messages...),
|
||||
@@ -137,6 +188,12 @@ func generate(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
|
||||
response = append(response, m.Content)
|
||||
err = mdb.UpdateChatHistory(db, chatId, m.Role, m.Content)
|
||||
}
|
||||
rpUser.UsedTokens = rpUser.UsedTokens + res.Usage.TotalTokens
|
||||
err = rpRep.UpdateUser(rpUser)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
m.Delete()
|
||||
ctx.Answer(laniakea.EscapeMarkdown(strings.Join(response, "\n")))
|
||||
|
||||
Reference in New Issue
Block a user