diff --git a/database/psql/rp.go b/database/psql/rp.go index 711f64e..58136a9 100644 --- a/database/psql/rp.go +++ b/database/psql/rp.go @@ -33,6 +33,7 @@ type RPRepository struct { func NewRPRepository(db *sqlx.DB) *RPRepository { return &RPRepository{db: db} } + func (rep *RPRepository) GetOrCreateUser(id int64) (*RPUser, error) { user, err := rep.GetUser(id) if errors.Is(err, sql.ErrNoRows) { @@ -91,6 +92,6 @@ func (rep *RPRepository) GetAllScenarios() ([]*RPScenarios, error) { } func (rep *RPRepository) GetScenario(id int) (*RPScenarios, error) { scenario := new(RPScenarios) - err := rep.db.Select(scenario, "SELECT * FROM rp_scenarios WHERE id=$1;", id) + err := rep.db.Get(scenario, "SELECT * FROM rp_scenarios WHERE id=$1;", id) return scenario, err } diff --git a/plugins/rp.go b/plugins/rp.go index e71ec68..f771094 100644 --- a/plugins/rp.go +++ b/plugins/rp.go @@ -21,6 +21,7 @@ func RegisterRP(bot *laniakea.Bot) { rp = rp.Payload(selectWaifu, "rp.selwaifu") rp = rp.Command(rpPresetsList, "rpplist") rp = rp.Command(rpPresetSet, "rppset") + rp = rp.Command(rpScenarioList, "rpscenlist") rp = rp.Command(newChat, "newchat") rp = rp.Command(rpUserPromptGet, "rpuserpget") rp = rp.Command(rpUserPromptSet, "rpuserpset") @@ -43,6 +44,7 @@ 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() @@ -81,6 +83,20 @@ func rpPresetSet(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { } ctx.Answer(fmt.Sprintf("Был выбран пресет %s", preset.Name)) } + +func rpScenarioList(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { + rep := psql.NewRPRepository(db.PostgresSQL) + scenarios, err := rep.GetAllScenarios() + if err != nil { + ctx.Error(err) + return + } + out := make([]string, len(scenarios)) + for i, scenario := range scenarios { + out[i] = fmt.Sprintf("%d) *%s*", scenario.ID, scenario.Name) + } + ctx.Answer(strings.Join(out, "\n")) +} func newChat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { waifuId := red.RPGetSelectedWaifu(db, ctx.FromID) if waifuId == 0 { @@ -94,8 +110,22 @@ func newChat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { return } - prompt := strings.Join(ctx.Args[1:], " ") - err = red.RPSetChatPrompt(db, ctx.FromID, waifuId, prompt) + scenarioId, err := strconv.Atoi(ctx.Args[0]) + if err != nil { + ctx.Error(err) + return + } + rep := psql.NewRPRepository(db.PostgresSQL) + scenario, err := rep.GetScenario(scenarioId) + if err != nil { + if errors.Is(err, sql.ErrNoRows) { + ctx.Answerf("Сценарий %d не найден", scenarioId) + } else { + ctx.Error(err) + } + return + } + err = red.RPSetChatPrompt(db, ctx.FromID, waifuId, scenario.Prompt) if err != nil { ctx.Error(err) return @@ -105,8 +135,9 @@ func newChat(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { ctx.Error(err) return } - ctx.Answer("Был создан новый чат.") + ctx.Answer("Был создан новый чат") } + func rpUserPromptGet(ctx *laniakea.MsgContext, db *laniakea.DatabaseContext) { rep := psql.NewRPRepository(db.PostgresSQL) user, err := rep.GetOrCreateUser(int64(ctx.FromID)) diff --git a/scripts/postgres/04-waifus.sql b/scripts/postgres/04-waifus.sql index 779fc95..ba757bd 100644 --- a/scripts/postgres/04-waifus.sql +++ b/scripts/postgres/04-waifus.sql @@ -16,12 +16,12 @@ CREATE INDEX waifus_index ON waifus(fandom, owner_id); BEGIN TRANSACTION; INSERT INTO waifus VALUES (1,314834933, 'Яэ Мико',5,2.00,2.00,10000000000000,'Genshin Impact','AgACAgIAAxkBAAIDcWlmSJkt21sUDXnOQHRDbDfth-lUAALgD2sbmScwS0VleT_h7f0qAQADAgADeQADOAQ', 'Яэ Мико — высокая женщина-кицунэ (лисочеловека). Основные черты внешности:Волосы: Длинные, светло-лиловые, розовеющие к концам, часто собранные на макушке.Глаза: Нежно-пурпурные или фиолетовые, с ярким красным макияжем у внешних уголков, как у лисы.Уши: Лисьи, розовые.Кожа: Светлая.Рост: Высокая, около 165.1 см.Одежда:Наряд: Белый традиционный костюм жрицы (хакуи) с красными элементами.Аксессуары: Золотой головной убор (часто в виде цветка), золотые серьги с пурпурными камнями.Обувь: Белые сандалии с красной подошвой.Образ:В целом, образ Яэ Мико сочетает в себе черты хитрой и игривой лисы-ёкай и утонченности жрицы, что отражается в её ярких чертах и элегантной одежде.Она известна своим хитрым, непредсказуемым и элегантным характером, сочетающим мудрость древнего духа-кицунэ с озорной натурой и любовью к манипуляциям и розыгрышам, но при этом она остается верной подругой и влиятельной личностью, управляющей издательством \"Яэ\". Она умна, любит интриги, но её настоящие чувства, проявляются через поступки, а не слова.'); -INSERT INTO waifus VALUES (2, null, 'Зарянка', 5, 2.0, 2.0, 10000000000000, 'Honkai: Star rail', 'AgACAgIAAxkBAAIDaWlmRp7AdVif-UGg3_fa0jgJtVA6AAIu7TEbaHsZS7HGDnXa8gXJAQADAgADcwADOAQ', 'Зарянка (Robin) в Honkai: Star Rail — это изящная и скромная певица-галовианка с Пенаконии, обладающая волнующим голосом, характерными для её расы великолепными нимбами и ушными перьями, а также внешностью, призванной привлекать внимание; её рост составляет около 173,5 см, она использует силу Гармонии для музыки и резонанса. \nКлючевые черты внешности:\nРаса: Галовианка (Пенакония).\nВозраст: 20-25 лет (биологический).\nРост: 173.5 см.\nОсобенности: Великолепные нимбы, ушные перья, волнующий голос.\nРоль: Певица, известная во всей вселенной.\nЭлемент: Физический.\nПуть: Гармония. \nОписание в игре:\nВнешний вид: Изящная, скромная девушка из Галовианцев с Пенаконии.\nТалант: Использует силу Гармонии, чтобы передавать свою музыку и резонировать со всеми формами жизни, от фанатов до других существ.\nВдохновение: Имя отсылает к реальной птице малиновке, известной своим ярким оперением. \nВ целом, Зарянка — это яркий и запоминающийся персонаж, чья внешность сочетает изящество, элементы её расы (нимбы, перья) и стиль, подобающий знаменитой певице из мира Honkai: Star Rail.'); +INSERT INTO waifus VALUES (2, null, 'Зарянка', 5, 2.0, 2.0, 10000000000000, 'Honkai: Star rail', 'AgACAgIAAxkBAAIDaWlmRp7AdVif-UGg3_fa0jgJtVA6AAIu7TEbaHsZS7HGDnXa8gXJAQADAgADcwADOAQ', 'Зарянка — это изящная и скромная певица-галовианка, обладающая волнующим голосом, характерными для её расы великолепными нимбами и ушными перьями, а также внешностью, призванной привлекать внимание; её рост составляет около 173,5 см, она использует силу Гармонии для музыки и резонанса. Ключевые черты внешности: Раса: Галовианка (Пенакония). Возраст: 20-25 лет (биологический). Рост: 173.5 см. Особенности: Великолепные нимбы, ушные перья, волнующий голос. Роль: Певица, известная во всей вселенной. Элемент: Физический. Путь: Гармония. Описание в игре: Внешний вид: Изящная, скромная девушка из Галовианцев с Пенаконии. Талант: Использует силу Гармонии, чтобы передавать свою музыку и резонировать со всеми формами жизни, от фанатов до других существ. Вдохновение: Имя отсылает к реальной птице малиновке, известной своим ярким оперением. Характер персонажа (Зарянка) Личность: Изящная, скромная певица-галовианка родом с Пенаконии. Символизм: Птичка Зарянка символизирует справедливость и добро, отважно защищающую их, что отражено в её сюжете, где она «умирает» и «возрождается» в грёзах. У неё есть брат Воскресенье'); INSERT INTO waifus VALUES (3, null, 'Мияби', 5, 2.0, 2.0, 10000000000000, 'Zenless Zone Zero', 'AgACAgIAAxkBAAIL02lvK79Y9o8XK0KaIcuMMlEQ5JG6AAJdEGsbA6N5S0Zuc2c6S3giAQADAgADcwADOAQ ', ''); INSERT INTO waifus VALUES (4, null, 'Джейн Доу', 5, 2.0, 2.0, 10000000000000, 'Zenless Zone Zero', 'AgACAgIAAxkBAAIL1WlvLNu3lH8OEEN00XPePRDQnmloAAJkEGsbA6N5SwEK4RXuMK-yAQADAgADcwADOAQ', ''); INSERT INTO waifus VALUES (5, null, 'Элизия', 5, 2.0, 2.0, 10000000000000, 'Honkai: Star rail', 'AgACAgIAAxkBAAIL1mlvLPQpjTnZ4Ok1KjERIFdByLryAAJlEGsbA6N5SxUEOOHNFSCdAQADAgADcwADOAQ', ''); INSERT INTO waifus VALUES (6, null, 'Светлячок', 5, 2.0, 2.0, 10000000000000, 'Honkai: Star rail', 'AgACAgIAAxkBAAIL12lvLReROZAH1gKY-IL57U5ElUBcAAJnEGsbA6N5S5HV_my-RbTqAQADAgADcwADOAQ', ''); -INSERT INTO waifus VALUES (7, null, 'Клоринда', 5, 2.0, 2.0, 10000000000000, 'Genshin Impact', 'AgACAgIAAxkBAAIL2GlvLRyWLv6LGH6pJ71xn-6KoCF2AAJoEGsbA6N5SzBJlZ4WM9sGAQADAgADcwADOAQ', ''); +INSERT INTO waifus VALUES (7, null, 'Клоринда', 5, 2.0, 2.0, 10000000000000, 'Genshin Impact', 'AgACAgIAAxkBAAIL2GlvLRyWLv6LGH6pJ71xn-6KoCF2AAJoEGsbA6N5SzBJlZ4WM9sGAQADAgADcwADOAQ', 'Клоринда — высокая девушка с фиолетовыми глазами, носит строгое, вдохновлённое мушкетёрами, одеяние. Основные черты внешности: Рост 168 см, волосы собраны в длинный хвост спереди оставлены свободные пряди, глаза фиолетовые. Одежда: Облегающее форменное платье и белая рубашка, короткая накидка-пиджак с эполетами, треуголка с пером и отворотами, высокие ботинки на каблуках с отворотами, металлические элементы бронзового цвета, ремешки на чулках, асимметричный элемент, похожий на шарф с кистями, сзади. Ключевые черты характера и поведения: Воин и Правосудие: Она — воплощение справедливости, её боятся злодеи и те, кто стремится к славе обманным путём. Непоколебимая: Несмотря на потерю близких, она не сдалась, а стала защитником Фонтейна, демонстрируя силу и решимость. Загадочность: Публично не даёт интервью, окутывая свой успех тайной, но её «ритуал» очищения меча — это на самом деле медитация для сохранения спокойствия и концентрации. Практичность: Сочетает ближний и дальний бой, используя пистолет и меч, что делает её эффективной против любых врагов.'); INSERT INTO waifus VALUES (8, null, 'Райден Эи', 5, 2.0, 2.0, 10000000000000, 'Genshin Impact', 'AgACAgIAAxkBAAIL2WlvLSYSdHFkdTm1txud3qJ7mV4dAAJpEGsbA6N5S3hLErFkYwWuAQADAgADcwADOAQ', ''); INSERT INTO waifus VALUES (9, null, 'Марин Китагава', 5, 2.0, 2.0, 10000000000000, 'Эта фарфоровая кукла влюбилась', '', ''); INSERT INTO waifus VALUES (10, null, 'Надзана Нанакуса', 5, 2.0, 2.0, 10000000000000, 'Песнь ночных сов', '', '');