more keyboards

This commit is contained in:
2026-01-22 16:41:47 +03:00
parent 015d5b904a
commit 1ef0bd503a
4 changed files with 80 additions and 43 deletions

View File

@@ -14,11 +14,21 @@ import (
func RegisterWaifus(bot *laniakea.Bot) {
waifus := laniakea.NewPlugin("Waifus")
waifus.Command(myWaifu, "mywaifu", "моивайфу")
waifus.Command(sellWaifu, "sellwaifu")
waifus.Command(myWaifu, "mywaifu", "моивайфу")
waifus.Command(myWaifu, "waifu.my")
waifus.Command(waifuList, "wlist", "waifulist", "влист", "вайфулист")
waifus.Payload(waifuList, "waifu.list")
waifus.Command(waifuInfo, "winfo", "waifuinfo", "винфо")
waifus.Payload(waifuInfo, "waifu.info")
waifus.Command(waifuSearch, "wsearch", "waifusearch", "впоиск")
waifus.Payload(waifuSearch, "waifu.search")
waifus.Payload(waifuNotImplemented, "waifu.confirm_buy")
bot.AddPlugins(waifus.Build())
}
@@ -26,26 +36,34 @@ func RegisterWaifus(bot *laniakea.Bot) {
func myWaifu(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
user, err := psql.GetUser(ctx.FromID)
if err != nil {
ctx.Answer(err.Error())
ctx.Error(err)
return
}
out := []string{
fmt.Sprintf("%s, %s!", user.Greeting, user.Name),
"Список твоих вайфу:",
}
waifus, err := psql.GetUserWaifus(user.ID)
if err != nil {
ctx.Error(err)
return
}
kb := laniakea.NewInlineKeyboard(2)
out := []string{
fmt.Sprintf("%s, %s!", user.Greeting, user.Name),
"Список твоих вайфу:",
}
for _, w := range waifus {
s := fmt.Sprintf("*%s* из \"*%s*\" (%d☆, ID: %d)", w.Name, w.Fandom, w.Rarity, w.ID)
out = append(out, s)
kb.AddCallbackButton(w.Name, "waifu.info", w.ID)
}
ctx.Answer(strings.Join(out, "\n"))
kb.AddLine()
kb.AddCallbackButton("Искать", "waifu.search")
if ctx.CallbackMsgId > 0 {
ctx.EditCallback(strings.Join(out, "\n"), kb)
} else {
ctx.Keyboard(strings.Join(out, "\n"), kb)
}
}
func sellWaifu(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
@@ -58,33 +76,36 @@ func waifuList(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
ctx.Answer(err.Error())
return
}
var out []string
out := make([]string, len(waifus))
for _, w := range waifus {
kb := laniakea.NewInlineKeyboard(1)
for i, w := range waifus {
var owner string
if w.Owner == nil {
owner = "нет"
} else {
owner = w.Owner.Name
}
s := fmt.Sprintf("*%s* из \"*%s*\" (%d☆, ID: %d) Владелец: %v", w.Name, w.Fandom, w.Rarity, w.ID, owner)
out = append(out, s)
out[i] = fmt.Sprintf("*%s* из \"*%s*\" (%d☆, ID: %d) Владелец: *%s*", w.Name, w.Fandom, w.Rarity, w.ID, owner)
kb.AddCallbackButton(w.Name, "waifu.info", w.ID)
}
ctx.Answer(strings.Join(out, "\n"))
if ctx.CallbackMsgId > 0 {
ctx.EditCallback(strings.Join(out, "\n"), kb)
} else {
ctx.Keyboard(strings.Join(out, "\n"), kb)
}
}
func waifuInfo(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
rawArgs := strings.TrimSpace(ctx.Text)
args := strings.Split(rawArgs, " ")
if len(args) != 1 {
if len(ctx.Args) != 1 {
ctx.Answer("Не указан ID вайфу!")
return
}
waifuId, err := strconv.Atoi(args[0])
waifuId, err := strconv.Atoi(ctx.Args[0])
if err != nil {
ctx.Answer("Во время выполнения команды произошла ошибка!")
ctx.Error(err)
return
}
@@ -101,10 +122,16 @@ func waifuInfo(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
fmt.Sprintf("Бонус к опыту: x%.2f", waifu.ExpBonus.InexactFloat64()),
fmt.Sprintf("Рыночная стоимость: %s¥", utils.DecimalComma(&waifu.MarketPrice)),
}
kb := laniakea.NewInlineKeyboard(1)
if !waifu.OwnerID.Valid {
kb.AddCallbackButton("Купить", "waifu.confirm_buy")
}
kb.AddCallbackButton("Назад", "waifu.list")
if len(waifu.Image) > 0 {
ctx.AnswerPhoto(waifu.Image, strings.Join(out, "\n"))
} else {
ctx.Answer(strings.Join(out, "\n"))
ctx.EditCallback(strings.Join(out, "\n"), kb)
}
}
@@ -115,8 +142,9 @@ func waifuSearch(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
return
}
kb := laniakea.NewInlineKeyboard(2).AddCallbackButton("Мои вайфу", "waifu.my").AddCallbackButton("Все вайфу", "waifu.list")
if time.Now().Before(user.WaifuSearchTime.Add(time.Hour * 4)) {
ctx.Answer("Вайфу можно искать раз в 4 часа.")
ctx.EditCallback("Вайфу можно искать раз в 4 часа.", kb)
return
}
@@ -126,13 +154,13 @@ func waifuSearch(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
return
}
if count == 0 {
ctx.Answer("Не осталось свободных вайфу... :(\nПопробуй позже или купи на рынке!")
ctx.EditCallback("Не осталось свободных вайфу... :(\nПопробуй позже или купи на рынке!", kb)
return
}
rand := utils.RandRange(0, 100)
if 10 < rand && rand < 90 {
ctx.Answer("Ты ничего не нашел!")
ctx.EditCallback("Ты ничего не нашел!", kb)
return
}
@@ -144,8 +172,6 @@ func waifuSearch(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
rarity = 4
}
fmt.Println(rarity)
freeWaifus, err = psql.GetFreeWaifusWithRarity(rarity)
if err != nil {
ctx.Error(err)
@@ -153,7 +179,7 @@ func waifuSearch(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
}
if len(freeWaifus) == 0 {
ctx.Answer("Ты ничего не нашел!")
ctx.EditCallback("Ты ничего не нашел!", kb)
return
}
@@ -170,6 +196,11 @@ func waifuSearch(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
if len(waifu.Image) > 0 {
ctx.AnswerPhoto(waifu.Image, strings.Join(out, "\n"))
} else {
ctx.Answer(strings.Join(out, "\n"))
ctx.EditCallback(strings.Join(out, "\n"), kb)
}
}
func waifuNotImplemented(ctx *laniakea.MsgContext, _ *laniakea.DatabaseContext) {
kb := laniakea.NewInlineKeyboard(2).AddCallbackButton("Мои вайфу", "waifu.my").AddCallbackButton("Все вайфу", "waifu.list")
ctx.EditCallback("Данная функция ещё не реализована", kb)
}