initial commit
This commit is contained in:
28
plugins/admin.go
Normal file
28
plugins/admin.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package plugins
|
||||
|
||||
import (
|
||||
"kurumibot/database"
|
||||
|
||||
"kurumibot/laniakea"
|
||||
)
|
||||
|
||||
func RegisterAdmin(b *laniakea.Bot) {
|
||||
p := laniakea.NewPlugin("Admin")
|
||||
p = p.Command(uploadPhoto, "uploadPhoto")
|
||||
|
||||
b.AddPlugins(p.Build())
|
||||
}
|
||||
|
||||
func uploadPhoto(ctx *laniakea.MsgContext) {
|
||||
user, err := database.GetOrCreateUser(ctx.FromID, ctx.Msg.From.FirstName)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
if !user.Group.IsAdmin {
|
||||
return
|
||||
}
|
||||
|
||||
photoId := ctx.Msg.Photo[0].FileID
|
||||
ctx.AnswerPhoto(photoId, photoId)
|
||||
}
|
||||
356
plugins/economy.go
Normal file
356
plugins/economy.go
Normal file
@@ -0,0 +1,356 @@
|
||||
package plugins
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"kurumibot/database"
|
||||
"kurumibot/utils"
|
||||
"math"
|
||||
"math/rand/v2"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"kurumibot/laniakea"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
func RegisterEconomy(bot *laniakea.Bot) {
|
||||
economy := laniakea.NewPlugin("Economy")
|
||||
economy = economy.Command(profile, "profile", "профиль")
|
||||
economy = economy.Command(work, "work", "работать")
|
||||
economy = economy.Command(collect, "collect", "собрать")
|
||||
economy = economy.Command(code, "code", "код")
|
||||
|
||||
economy = economy.Command(vacancies, "vacancies", "вакансии")
|
||||
economy = economy.Command(getAJob, "getajob", "устроиться")
|
||||
|
||||
economy = economy.Command(aboutGroup, "group", "о группе")
|
||||
|
||||
economy = economy.Command(about, "about", "о боте")
|
||||
|
||||
go passiveIncome(bot)
|
||||
|
||||
bot.AddPlugins(economy.Build())
|
||||
}
|
||||
|
||||
func about(ctx *laniakea.MsgContext) {
|
||||
out := []string{
|
||||
"Версия Go: 1.23.4",
|
||||
fmt.Sprintf("Версия laniakea: %s", laniakea.VERSION_STRING),
|
||||
}
|
||||
ctx.Answer(strings.Join(out, "\n"))
|
||||
}
|
||||
|
||||
func passiveIncome(b *laniakea.Bot) {
|
||||
for {
|
||||
users, err := database.GetAllUsers()
|
||||
if err != nil {
|
||||
b.Logger().Error(err)
|
||||
continue
|
||||
}
|
||||
|
||||
for _, user := range users {
|
||||
if user.Business == nil && user.Maid == nil && user.Miner == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
if time.Now().Before(user.IncomeTime.Add(time.Hour * 3)) {
|
||||
continue
|
||||
}
|
||||
|
||||
moneyIncome := decimal.NewFromInt(0)
|
||||
expIncome := decimal.NewFromInt(0)
|
||||
btcIncome := decimal.NewFromInt(0)
|
||||
|
||||
if user.Business != nil {
|
||||
moneyIncome = moneyIncome.Add(user.Business.Income).Mul(user.Group.Multiplier)
|
||||
}
|
||||
if user.Maid != nil {
|
||||
expIncome = expIncome.Add(user.Maid.Income).Mul(user.Group.Multiplier)
|
||||
}
|
||||
if user.Miner != nil {
|
||||
btcIncome = btcIncome.Add(user.Miner.Income).Mul(user.Group.Multiplier)
|
||||
}
|
||||
|
||||
waifus, err := database.GetUserWaifus(user.ID)
|
||||
if err != nil {
|
||||
b.Logger().Error(err)
|
||||
continue
|
||||
}
|
||||
for _, waifu := range waifus {
|
||||
moneyIncome = moneyIncome.Mul(waifu.MoneyBonus)
|
||||
expIncome = expIncome.Mul(waifu.ExpBonus)
|
||||
btcIncome = btcIncome.Mul(waifu.MoneyBonus)
|
||||
}
|
||||
|
||||
expIncome = expIncome.Mul(decimal.NewFromFloat(0.25))
|
||||
moneyIncome = moneyIncome.Mul(decimal.NewFromFloat(0.25))
|
||||
btcIncome = btcIncome.Mul(decimal.NewFromFloat(0.25))
|
||||
|
||||
user.ExpIncome += int(expIncome.IntPart())
|
||||
user.MoneyIncome = user.MoneyIncome.Add(moneyIncome)
|
||||
user.BtcIncome = user.BtcIncome.Add(btcIncome)
|
||||
user.IncomeTime = time.Now().Add(-time.Hour * 2)
|
||||
database.Database.Save(user)
|
||||
|
||||
b.Logger().Debug(fmt.Sprintf("У %d было пассивно собрано. След. сбор через час\n", user.TelegramID))
|
||||
}
|
||||
|
||||
time.Sleep(time.Second * 5)
|
||||
}
|
||||
}
|
||||
|
||||
func profile(ctx *laniakea.MsgContext) {
|
||||
user, err := database.GetOrCreateUser(ctx.FromID, ctx.Update.Message.From.FirstName)
|
||||
if err != nil {
|
||||
ctx.Answer(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
pair := "нет"
|
||||
if user.Pair != nil {
|
||||
pair = user.Pair.Name
|
||||
}
|
||||
|
||||
fraction := "нет"
|
||||
if user.Fraction != nil {
|
||||
fraction = user.Fraction.Name
|
||||
}
|
||||
_, needXp := database.CountLevel(user.Exp)
|
||||
|
||||
out := []string{
|
||||
fmt.Sprintf("🖤%s, %s🖤", user.Greeting, user.Name),
|
||||
fmt.Sprintf("🆔ID: %d", user.ID),
|
||||
fmt.Sprintf("🔰Фракция: %s", fraction),
|
||||
fmt.Sprintf("📊Группа: %s (ID: %d, x%.1f)", user.Group.Name, user.Group.ID, user.Group.Multiplier.InexactFloat64()),
|
||||
fmt.Sprintf("❤️Пара: %s", pair),
|
||||
fmt.Sprintf("💡Уровень: %d (%d опыта, %d опыта до повышения)", user.Level, user.Exp, needXp-user.Exp),
|
||||
fmt.Sprintf("💴Баланс: %s¥ %s, %s₿", utils.DecimalComma(&user.Balance), utils.Short(user.Balance.String()), utils.DecimalComma(&user.BTC)),
|
||||
fmt.Sprintf("💼Работа: %s (ID: %d)", user.Work.Name, user.Work.ID),
|
||||
fmt.Sprintf("🚘Авто: %s (ID: %d)", user.Auto.Name, user.Auto.ID),
|
||||
fmt.Sprintf("🏢Бизнес: %s (ID: %d)", user.Business.Name, user.Business.ID),
|
||||
fmt.Sprintf("👩🦳Горничная: %s (ID: %d)", user.Maid.Name, user.Maid.ID),
|
||||
fmt.Sprintf("🖥Майнер: %s (ID: %d)", user.Miner.Name, user.Miner.ID),
|
||||
}
|
||||
ctx.Answer(strings.Join(out, "\n"))
|
||||
}
|
||||
|
||||
func work(ctx *laniakea.MsgContext) {
|
||||
user, err := database.GetOrCreateUser(ctx.FromID, ctx.Update.Message.From.FirstName)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
if time.Now().Before(user.WorkTime.Add(time.Minute * 10)) {
|
||||
nextTime := time.Since(user.WorkTime.Add(time.Minute * 10))
|
||||
seconds := int(math.Round(math.Abs(nextTime.Seconds())))
|
||||
minutes := seconds / 60
|
||||
seconds -= minutes * 60
|
||||
ctx.Answer(fmt.Sprintf("Приходи через %02d:%02d", minutes, seconds))
|
||||
return
|
||||
}
|
||||
work := user.Work
|
||||
exp := rand.IntN(work.MaxExp-work.MinExp) + work.MinExp
|
||||
// Count exp
|
||||
expToAdd := decimal.NewFromInt(int64(exp)).Mul(user.Group.Multiplier)
|
||||
// Count money
|
||||
moneyToAdd := work.MoneyIncome.Mul(user.Group.Multiplier)
|
||||
|
||||
waifus, err := database.GetUserWaifus(user.ID)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
for _, waifu := range waifus {
|
||||
expToAdd = expToAdd.Mul(waifu.ExpBonus)
|
||||
moneyToAdd = moneyToAdd.Mul(waifu.MoneyBonus)
|
||||
}
|
||||
user.Exp += int(expToAdd.IntPart())
|
||||
user.Balance = user.Balance.Add(moneyToAdd)
|
||||
user.WorkTime = time.Now()
|
||||
user.Level, _ = database.CountLevel(user.Exp)
|
||||
database.Database.Save(user)
|
||||
ctx.Answer(fmt.Sprintf("Ты заработал %s¥ и %d опыта.\nПриходи через 10 минут.", utils.DecimalComma(&work.MoneyIncome), expToAdd.IntPart()))
|
||||
}
|
||||
|
||||
func collect(ctx *laniakea.MsgContext) {
|
||||
user, err := database.GetOrCreateUser(ctx.FromID, ctx.Update.Message.From.FirstName)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
if user.Business == nil && user.Maid == nil && user.Miner == nil {
|
||||
ctx.Answer("Нечего собирать!")
|
||||
return
|
||||
}
|
||||
|
||||
if time.Now().Before(user.IncomeTime.Add(time.Hour * 2)) {
|
||||
nextTime := time.Since(user.IncomeTime.Add(time.Hour * 2))
|
||||
seconds := int(math.Round(math.Abs(nextTime.Seconds())))
|
||||
minutes := seconds / 60
|
||||
seconds -= minutes * 60
|
||||
hours := minutes / 60
|
||||
minutes -= hours * 60
|
||||
ctx.Answer(fmt.Sprintf("Приходи через %02d:%02d:%02d", hours, minutes, seconds))
|
||||
return
|
||||
}
|
||||
|
||||
moneyIncome := decimal.NewFromInt(0)
|
||||
expIncome := decimal.NewFromInt(0)
|
||||
btcIncome := decimal.NewFromInt(0)
|
||||
|
||||
if user.Business != nil {
|
||||
moneyIncome = moneyIncome.Add(user.Business.Income).Mul(user.Group.Multiplier)
|
||||
}
|
||||
if user.Maid != nil {
|
||||
expIncome = expIncome.Add(user.Maid.Income).Mul(user.Group.Multiplier)
|
||||
}
|
||||
if user.Miner != nil {
|
||||
btcIncome = btcIncome.Add(user.Miner.Income).Mul(user.Group.Multiplier)
|
||||
}
|
||||
|
||||
waifus, err := database.GetUserWaifus(user.ID)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, waifu := range waifus {
|
||||
moneyIncome = moneyIncome.Mul(waifu.MoneyBonus)
|
||||
expIncome = expIncome.Mul(waifu.ExpBonus)
|
||||
btcIncome = btcIncome.Mul(waifu.MoneyBonus)
|
||||
}
|
||||
|
||||
incomeText := []string{}
|
||||
|
||||
if moneyIncome.IntPart() > 0 {
|
||||
incomeText = append(incomeText, fmt.Sprintf("%s¥", utils.DecimalComma(&moneyIncome)))
|
||||
}
|
||||
if expIncome.IntPart() > 0 {
|
||||
incomeText = append(incomeText, fmt.Sprintf("%d опыта", expIncome.IntPart()))
|
||||
}
|
||||
if btcIncome.InexactFloat64() > 0 {
|
||||
incomeText = append(incomeText, fmt.Sprintf("%.6f₿", btcIncome.InexactFloat64()))
|
||||
}
|
||||
|
||||
passiveIncomeText := []string{}
|
||||
if user.MoneyIncome.IntPart() > 0 {
|
||||
user.Balance = user.Balance.Add(user.MoneyIncome)
|
||||
passiveIncomeText = append(passiveIncomeText, fmt.Sprintf("%s¥", utils.DecimalComma(&user.MoneyIncome)))
|
||||
user.MoneyIncome = decimal.NewFromInt(0)
|
||||
}
|
||||
if user.ExpIncome > 0 {
|
||||
user.Exp += user.ExpIncome
|
||||
passiveIncomeText = append(passiveIncomeText, fmt.Sprintf("%d опыта", user.ExpIncome))
|
||||
user.ExpIncome = 0
|
||||
}
|
||||
if user.BtcIncome.InexactFloat64() > 0 {
|
||||
user.BTC = user.BTC.Add(user.BtcIncome)
|
||||
passiveIncomeText = append(passiveIncomeText, fmt.Sprintf("%.6f₿", user.BtcIncome.InexactFloat64()))
|
||||
user.BtcIncome = decimal.NewFromFloat(0.0000000)
|
||||
}
|
||||
|
||||
user.Balance = user.Balance.Add(moneyIncome)
|
||||
user.Exp += int(expIncome.IntPart())
|
||||
user.Level, _ = database.CountLevel(user.Exp)
|
||||
user.BTC = user.BTC.Add(btcIncome)
|
||||
user.IncomeTime = time.Now()
|
||||
|
||||
database.Database.Save(user)
|
||||
|
||||
out := []string{
|
||||
fmt.Sprintf("Ты собрал %s.", strings.Join(incomeText, ", ")),
|
||||
}
|
||||
|
||||
if len(passiveIncomeText) > 0 {
|
||||
out = append(out, fmt.Sprintf("Пока тебя не было, было собрано %s.", strings.Join(passiveIncomeText, ", ")))
|
||||
}
|
||||
|
||||
out = append(out, "Приходи через 02:00:00")
|
||||
|
||||
ctx.Answer(strings.Join(out, "\n"))
|
||||
}
|
||||
|
||||
func code(ctx *laniakea.MsgContext) {
|
||||
// user, err := database.Get
|
||||
}
|
||||
|
||||
func vacancies(ctx *laniakea.MsgContext) {
|
||||
works, err := database.GetAllWorks()
|
||||
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
out := []string{
|
||||
"Список вакансий:",
|
||||
}
|
||||
|
||||
for _, work := range works {
|
||||
out = append(out, fmt.Sprintf("%d) %s", work.ID, work.Name))
|
||||
}
|
||||
|
||||
ctx.Answer(strings.Join(out, "\n"))
|
||||
}
|
||||
|
||||
func getAJob(ctx *laniakea.MsgContext) {
|
||||
if len(ctx.Args) == 0 {
|
||||
ctx.Answer("Недостаточно аргументов")
|
||||
return
|
||||
}
|
||||
|
||||
user, err := database.GetOrCreateUser(ctx.FromID, ctx.Msg.From.FirstName)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
workId, err := strconv.Atoi(ctx.Args[0])
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
work, err := database.GetWorkById(workId)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
if user.Level < work.RequiredLevel {
|
||||
ctx.Answer("Уровень слишком низкий для этой работы!")
|
||||
return
|
||||
}
|
||||
user.WorkID = workId
|
||||
user.Work = work
|
||||
database.Database.Save(user)
|
||||
ctx.Answer("Ты успешно устроился на работу!")
|
||||
}
|
||||
|
||||
func aboutGroup(ctx *laniakea.MsgContext) {
|
||||
user, err := database.GetOrCreateUser(ctx.FromID, ctx.Msg.From.FirstName)
|
||||
if err != nil {
|
||||
ctx.Error(err)
|
||||
return
|
||||
}
|
||||
group := user.Group
|
||||
out := []string{
|
||||
fmt.Sprintf("%s, %s!", user.Greeting, user.Name),
|
||||
fmt.Sprintf("📝Твоя группа: %s", group.Name),
|
||||
fmt.Sprintf("📉Твоя скидка: %.0f%%", 100-group.Sale.InexactFloat64()*100),
|
||||
fmt.Sprintf("📈Твой множитель: x%.2f", group.Multiplier.InexactFloat64()),
|
||||
fmt.Sprintf("👩🏼Максимум вайфу: %d", group.MaxWaifus),
|
||||
}
|
||||
if group.IsVip {
|
||||
out = append(out, "🎏Доступ к ВИП функциям: ✅")
|
||||
}
|
||||
if group.IsAdmin {
|
||||
out = append(out, "🖥️Доступ к админ функциям: ✅")
|
||||
}
|
||||
if group.IsVip {
|
||||
out = append(out, "🔓Бета-тестер: ✅")
|
||||
}
|
||||
|
||||
ctx.Answer(strings.Join(out, "\n"))
|
||||
}
|
||||
7
plugins/relations.go
Normal file
7
plugins/relations.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package plugins
|
||||
|
||||
import "kurumibot/laniakea"
|
||||
|
||||
func RegisterRelations(b *laniakea.Bot) {
|
||||
|
||||
}
|
||||
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