initial commit
This commit is contained in:
175
plugins/waifus.go
Normal file
175
plugins/waifus.go
Normal file
@@ -0,0 +1,175 @@
|
||||
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"))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user