setting and scenario in chat stat

This commit is contained in:
2026-01-27 22:03:39 +03:00
parent 5798d83ee2
commit bb99bdebef
3 changed files with 85 additions and 51 deletions

View File

@@ -29,16 +29,12 @@ func RegisterRP(bot *laniakea.Bot) {
rp.Payload(rpScenarioList, "rp.scenario_list")
rp.Payload(rpSettingList, "rp.setting_list")
rp.Payload(chatStat, "rp.chat_stat")
rp.Payload(newChatStage1, "rp.new_chat_s1")
rp.Payload(newChatStage2, "rp.new_chat_s2")
rp.Payload(newChat, "rp.new_chat")
rp.Command(rpUserPromptGet, "rpuserpget")
rp.Command(rpUserPromptSet, "rpuserpset")
rp.Command(generate, "g", "gen", "г")
rp.Payload(compress, "rp.compress_chat")
rp.Payload(generalClose, "general.close")
bot.AddPlugins(rp.Build())
@@ -95,7 +91,7 @@ func rpInfo(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
fmt.Sprintf("*Выбранная вайфу*: %s", waifu.Name),
fmt.Sprintf("*Выбранный пресет*: %s", laniakea.EscapeMarkdown(rpUser.Preset.Name)),
fmt.Sprintf("*Выбранная модель*: %s", rpUser.Model.Name),
fmt.Sprintf("*Твое описание персонажа*: %s", rpUser.UserPrompt),
fmt.Sprintf("*Твоё описание персонажа*: %s", rpUser.UserPrompt),
}
kb := laniakea.NewInlineKeyboard(2)
@@ -283,12 +279,8 @@ func chatStat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
}
chatId := redisRpRep.GetChatId(ctx.FromID, waifuId)
if chatId == "" {
chatId = uuid.New().String()
err := redisRpRep.SetChatId(ctx.FromID, waifuId, chatId)
if err != nil {
ctx.Error(err)
return
}
ctx.Answer("Нет активного чата")
return
}
messageCount, err := mdb.GetChatHistorySize(db, chatId)
if err != nil {
@@ -306,6 +298,24 @@ func chatStat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
fmt.Sprintf("*Кол-во сообщений*: %d", messageCount),
fmt.Sprintf("*Кол-во токенов*: %d", tokens),
}
psqlRpRep := psql.NewRPRepository(db)
scenarioId := redisRpRep.GetChatScenarioID(ctx.FromID, waifuId)
if scenarioId > 0 {
scenario, err := psqlRpRep.GetScenario(scenarioId)
if err != nil {
ctx.Error(err)
}
out = append(out, fmt.Sprintf("*Выбранный сценарий*: %s (ID: %d)", scenario.Name, scenario.ID))
}
settingId := redisRpRep.GetChatSettingID(ctx.FromID, waifuId)
if settingId > 0 {
setting, err := psqlRpRep.GetSetting(settingId)
if err != nil {
ctx.Error(err)
}
out = append(out, fmt.Sprintf("*Выбранный сеттинг*: %s (ID: %d)", setting.Name, setting.ID))
}
ctx.EditCallback(strings.Join(out, "\n"), kb)
}
@@ -423,34 +433,28 @@ func newChat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
}
}
err = redisRpRep.SetChatSettingID(ctx.FromID, waifuId, settingId)
if err != nil {
ctx.Error(err)
}
err = redisRpRep.SetChatScenarioID(ctx.FromID, waifuId, scenarioId)
if err != nil {
ctx.Error(err)
}
err = redisRpRep.SetCounter(ctx.FromID, waifuId, 0)
if err != nil {
ctx.Error(err)
return
}
err = redisRpRep.SetChatTokens(ctx.FromID, waifuId, 0)
if err != nil {
ctx.Error(err)
return
}
kb := laniakea.NewInlineKeyboard(2)
kb.AddCallbackButton("На главную", "rp.info").AddCallbackButton("Закрыть", "general.close")
ctx.EditCallback(`Был создан новый чат.\nДля общения используй "/г промпт"`, kb)
ctx.EditCallback("Был создан новый чат. Для общения используй `/г промпт`.", kb)
}
func rpUserPromptGet(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
rep := psql.NewRPRepository(db)
user, err := rep.GetOrCreateUser(int64(ctx.FromID))
if err != nil {
ctx.Error(err)
return
}
if user.UserPrompt == "" {
ctx.Answer("У тебя нет описания")
return
}
ctx.Answerf("Вот твое РП описание пользователя\n%s", user.UserPrompt)
}
func rpUserPromptSet(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
if len(ctx.Args) == 0 || ctx.Args[0] == "" {
return
@@ -468,37 +472,29 @@ func rpUserPromptSet(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
ctx.Error(err)
return
}
ctx.Answer("Описание пользователя было обновлено.")
ctx.Answer("Описание пользователя было обновлено")
}
func generate(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
redisRpRep := red.NewRPRepository(db)
rpRep := psql.NewRPRepository(db)
rpUser, err := rpRep.GetOrCreateUser(int64(ctx.FromID))
if err != nil {
ctx.Error(err)
return
}
waifuId := redisRpRep.GetSelectedWaifu(ctx.FromID)
if waifuId == 0 {
ctx.Answer("Не выбрана вайфу")
return
}
chatId := redisRpRep.GetChatId(ctx.FromID, waifuId)
if chatId == "" {
chatId = uuid.New().String()
err := redisRpRep.SetChatId(ctx.FromID, waifuId, chatId)
if err != nil {
ctx.Error(err)
return
}
}
waifuRep := psql.NewWaifuRepository(db)
waifu, err := waifuRep.GetById(waifuId)
if err != nil {
ctx.Error(err)
return
}
rpUser, err := rpRep.GetOrCreateUser(int64(ctx.FromID))
if err != nil {
ctx.Error(err)
return
}
preset, err := rpRep.GetUserPreset(rpUser)
if err != nil {
ctx.Error(err)
@@ -524,6 +520,11 @@ func generate(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
Content: ai.FormatPrompt(preset.PostHistory, waifu.Name, ctx.From.FirstName),
}
chatId, err := redisRpRep.GetOrCreateChatId(ctx.FromID, waifuId)
if err != nil {
ctx.Error(err)
return
}
history, err := mdb.GetChatHistory(db, chatId)
if err != nil {
ctx.Error(err)
@@ -589,14 +590,10 @@ func compress(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) {
ctx.Answer("Не выбрана вайфу")
return
}
chatId := redisRpRep.GetChatId(ctx.FromID, waifuId)
if chatId == "" {
chatId = uuid.New().String()
err := redisRpRep.SetChatId(ctx.FromID, waifuId, chatId)
if err != nil {
ctx.Error(err)
return
}
chatId, err := redisRpRep.GetOrCreateChatId(ctx.FromID, waifuId)
if err != nil {
ctx.Error(err)
return
}
history, err := mdb.GetChatHistory(db, chatId)
if err != nil {