Files
YaeMikoBot/plugins/waifus.go
2025-08-27 23:26:36 +03:00

176 lines
4.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package plugins
import (
"fmt"
"kurumibot/database"
"kurumibot/utils"
"strconv"
"strings"
"time"
"kurumibot/laniakea"
)
func RegisterWaifus(bot *laniakea.Bot) {
waifus := laniakea.NewPlugin("Waifus")
waifus.Command(myWaifu, "mywaifu", "моивайфу")
waifus.Command(sellWaifu, "sellwaifu")
waifus.Command(waifuList, "wlist", "waifulist", "влист", "вайфулист")
waifus.Command(waifuInfo, "winfo", "waifuinfo", "винфо")
waifus.Command(waifuSearch, "wsearch", "waifusearch", "впоиск")
bot.AddPlugins(waifus.Build())
}
func myWaifu(ctx *laniakea.MsgContext) {
user, err := database.GetUser(ctx.FromID)
if err != nil {
ctx.Answer(err.Error())
return
}
out := []string{
fmt.Sprintf("%s, %s!", user.Greeting, user.Name),
"Список твоих вайфу:",
}
waifus, err := database.GetUserWaifus(user.ID)
if err != nil {
ctx.Error(err)
return
}
for _, w := range waifus {
s := fmt.Sprintf("*%s* из \"*%s*\" (%d☆, ID: %d)", w.Name, w.Fandom, w.Rarity, w.ID)
out = append(out, s)
}
ctx.Answer(strings.Join(out, "\n"))
}
func sellWaifu(ctx *laniakea.MsgContext) {
}
func waifuList(ctx *laniakea.MsgContext) {
waifus, err := database.GetAllWaifus()
if err != nil {
ctx.Answer(err.Error())
return
}
out := []string{}
for _, 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)
}
ctx.Answer(strings.Join(out, "\n"))
}
func waifuInfo(ctx *laniakea.MsgContext) {
rawArgs := strings.TrimSpace(ctx.Text)
args := strings.Split(rawArgs, " ")
if len(args) != 1 {
ctx.Answer("Не указан ID вайфу!")
return
}
waifuId, err := strconv.Atoi(args[0])
if err != nil {
ctx.Answer("Во время выполнения команды произошла ошибка!")
return
}
waifu, err := database.GetWaifuById(waifuId)
if err != nil {
ctx.Error(err)
return
}
out := []string{
fmt.Sprintf("*%s* из \"*%s*\"", waifu.Name, waifu.Fandom),
fmt.Sprintf("Редкость: %d☆", waifu.Rarity),
fmt.Sprintf("Бонус к деньгам: x%.2f", waifu.MoneyBonus.InexactFloat64()),
fmt.Sprintf("Бонус к опыту: x%.2f", waifu.ExpBonus.InexactFloat64()),
fmt.Sprintf("Рыночная стоимость: %s¥", utils.DecimalComma(&waifu.MarketPrice)),
}
if len(waifu.Image) > 0 {
ctx.AnswerPhoto(waifu.Image, strings.Join(out, "\n"))
} else {
ctx.Answer(strings.Join(out, "\n"))
}
}
func waifuSearch(ctx *laniakea.MsgContext) {
user, err := database.GetOrCreateUser(ctx.FromID, ctx.Msg.From.FirstName)
if err != nil {
ctx.Error(err)
return
}
if time.Now().Before(user.WaifuSearchTime.Add(time.Hour * 4)) {
ctx.Answer("Вайфу можно искать раз в 4 часа.")
return
}
count, err := database.GetFreeWaifusCount()
if err != nil {
ctx.Error(err)
return
}
if count == 0 {
ctx.Answer("Не осталось свободных вайфу... :(\nПопробуй позже или купи на рынке!")
return
}
rand := utils.RandRange(0, 100)
if 10 < rand && rand < 90 {
ctx.Answer("Ты ничего не нашел!")
return
}
var freeWaifus []*database.Waifu
rarity := 3
if rand == 0 {
rarity = 5
} else if rand > 0 && rand < 7 {
rarity = 4
}
fmt.Println(rarity)
freeWaifus, err = database.GetFreeWaifusWithRarity(rarity)
if err != nil {
ctx.Error(err)
return
}
if len(freeWaifus) == 0 {
ctx.Answer("Ты ничего не нашел!")
return
}
findedWaifuIndex := utils.RandRange(0, len(freeWaifus))
waifu := freeWaifus[findedWaifuIndex]
out := []string{
"Ты нашел новую вайфу!",
fmt.Sprintf("*%s* из \"*%s*\"", waifu.Name, waifu.Fandom),
fmt.Sprintf("Редкость: %d☆", waifu.Rarity),
fmt.Sprintf("Бонус к деньгам: x%.2f", waifu.MoneyBonus.InexactFloat64()),
fmt.Sprintf("Бонус к опыту: x%.2f", waifu.ExpBonus.InexactFloat64()),
fmt.Sprintf("Рыночная стоимость: %s¥", utils.DecimalComma(&waifu.MarketPrice)),
}
if len(waifu.Image) > 0 {
ctx.AnswerPhoto(waifu.Image, strings.Join(out, "\n"))
} else {
ctx.Answer(strings.Join(out, "\n"))
}
}