package handlers import ( "context" "fmt" "gitea.russia9.dev/russia9/muskrat/storage" "gitea.russia9.dev/russia9/muskrat/types" "gitea.russia9.dev/russia9/muskrat/userbot" "gitea.russia9.dev/russia9/muskrat/utils" "gopkg.in/telebot.v3" "regexp" "strconv" "strings" ) func List(ctx telebot.Context) error { accounts := make([]types.Account, 0) storage.DB.Find(&accounts, "\"user\" = ?", strconv.FormatInt(ctx.Sender().ID, 10)) if len(accounts) == 0 { return ctx.Send("Чтобы добавить аккаунт, /add") } markup := &telebot.ReplyMarkup{} rows := make([]telebot.Row, 0) for _, account := range accounts { rows = append(rows, markup.Row(markup.Data(fmt.Sprintf("%s %s %d", account.Corp, account.Name, account.Level), "account", strconv.FormatInt(account.ID, 10)))) } markup.Inline(rows...) return ctx.Send("Список аккаунтов:", markup) } func Account(ctx telebot.Context) error { if len(ctx.Data()) == 0 { return ctx.Delete() } var account types.Account storage.DB.First(&account, strings.Split(ctx.Data(), "|")[0]) markup := &telebot.ReplyMarkup{} id := strconv.FormatInt(account.ID, 10) markup.Inline( markup.Row( markup.Data(fmt.Sprintf("Еда: %s", utils.BoolEmoji(account.Eat)), "edit", id, "eat"), markup.Data(fmt.Sprintf("Еда на 200: %s", utils.BoolEmoji(account.Eat200)), "edit", id, "eat_200"), ), markup.Row( markup.Data(fmt.Sprintf("Команда еды: %s", account.EatCommand), "edit", id, "eat_command"), markup.Data(fmt.Sprintf("Шанс на еду: %d", account.EatChance), "edit", id, "eat_chance"), ), markup.Row( markup.Data(fmt.Sprintf("Лвлап: %s", utils.BoolEmoji(account.Levelup)), "edit", id, "levelup"), markup.Data(fmt.Sprintf("Скилл: %s", utils.BoolLevelup(account.LevelupSkill)), "edit", id, "levelup_skill"), ), markup.Row( markup.Data(fmt.Sprintf("Пины: %s", utils.BoolEmoji(account.Pin)), "edit", id, "pin"), markup.Data(fmt.Sprintf("Чат: %d", account.PinChat), "edit", id, "pin_chat"), markup.Data(fmt.Sprintf("Пауза: %.1f", account.PinDelay), "edit", id, "pin_delay"), markup.Data(fmt.Sprintf("Шанс: %d", account.PinChance), "edit", id, "pin_chance"), ), markup.Row( markup.Data(fmt.Sprintf("Репорты: %s", utils.BoolEmoji(account.Report)), "edit", id, "report"), markup.Data(fmt.Sprintf("Чат: %d", account.ReportChat), "edit", id, "report_chat"), markup.Data(fmt.Sprintf("Пауза: %.1f", account.ReportDelay), "edit", id, "report_delay"), markup.Data(fmt.Sprintf("Шанс: %d", account.ReportChance), "edit", id, "report_chance"), ), markup.Row( markup.Data(fmt.Sprintf("Мобы: %s", utils.BoolEmoji(account.Mob)), "edit", id, "mob"), markup.Data(fmt.Sprintf("Пауза: %.1f", account.MobDelay), "edit", id, "mob_delay"), markup.Data(fmt.Sprintf("Шанс: %d", account.MobChance), "edit", id, "mob_chance"), ), markup.Row( markup.Data(fmt.Sprintf("Акула: %s", utils.BoolEmoji(account.Shark)), "edit", id, "shark"), markup.Data(fmt.Sprintf("Пауза: %.1f", account.SharkDelay), "edit", id, "shark_delay"), markup.Data(fmt.Sprintf("Команда: %s", utils.SharkEmoji(account.SharkTeam)), "edit", id, "shark_team"), ), markup.Row( markup.Data(fmt.Sprintf("Сон: %s", utils.BoolEmoji(account.Sleep)), "edit", id, "sleep"), markup.Data(fmt.Sprintf("Сон в отеле? %s", utils.BoolEmoji(account.SleepHotel)), "edit", id, "sleep_hotel"), ), markup.Row( markup.Data(fmt.Sprintf("Слив моты: %s", utils.BoolEmoji(account.Motivation)), "edit", id, "motivation"), markup.Data(fmt.Sprintf("Слив по кд: %s", utils.BoolEmoji(account.MotivationKD)), "edit", id, "motivation_kd"), ), markup.Row( markup.Data(fmt.Sprintf("Команда для слива: %s", account.MotivationCommand), "edit", id, "motivation_command"), ), ) return ctx.EditOrSend(fmt.Sprintf("Аккаунт %s %s:", account.Corp, account.Name), markup) } func Edit(ctx telebot.Context) error { data := strings.Split(ctx.Data(), "|") if len(data) != 2 { return nil } id, err := strconv.ParseInt(data[0], 10, 64) if err != nil { return err } if userbot.Userbots[id].Account == nil { return nil } account := userbot.Userbots[id].Account switch data[1] { case "eat": account.Eat = !account.Eat case "eat_200": account.Eat200 = !account.Eat200 case "levelup": account.Levelup = !account.Levelup case "levelup_skill": account.LevelupSkill = !account.LevelupSkill case "pin": account.Pin = !account.Pin case "report": account.Report = !account.Report case "mob": account.Mob = !account.Mob case "shark": account.Shark = !account.Shark case "shark_team": account.SharkTeam = !account.SharkTeam case "sleep": account.Sleep = !account.Sleep case "sleep_hotel": account.SleepHotel = !account.SleepHotel case "motivation": account.Motivation = !account.Motivation case "motivation_kd": account.MotivationKD = !account.MotivationKD default: err = storage.SetState(context.Background(), ctx.Sender().ID, "edit", data...) if err != nil { return err } return ctx.Send(fmt.Sprintf("Введите значение %s:", data[1])) } userbot.Userbots[id].Account = account storage.DB.Save(&account) return Account(ctx) } func EditInput(ctx telebot.Context, data []string) error { defer storage.ClearState(context.Background(), ctx.Sender().ID) if len(data) != 2 { return nil } id, err := strconv.ParseInt(data[0], 10, 64) if err != nil { return err } if userbot.Userbots[id] == nil { return nil } account := userbot.Userbots[id].Account switch data[1] { case "eat_command": if !regexp.MustCompile("/.*").MatchString(ctx.Text()) { return ctx.Send("Неправильный формат") } account.EatCommand = ctx.Text() case "eat_chance": account.EatChance, err = strconv.Atoi(ctx.Text()) if err != nil { return ctx.Send("Неправильный формат") } case "pin_chat": account.PinChat, err = strconv.ParseInt(ctx.Text(), 10, 64) if err != nil { return ctx.Send("Неправильный формат") } case "pin_delay": account.PinDelay, err = strconv.ParseFloat(ctx.Text(), 64) if err != nil { return ctx.Send("Неправильный формат") } case "pin_chance": account.PinChance, err = strconv.Atoi(ctx.Text()) if err != nil { return ctx.Send("Неправильный формат") } case "report_chat": account.ReportChat, err = strconv.ParseInt(ctx.Text(), 10, 64) if err != nil { return ctx.Send("Неправильный формат") } case "report_delay": account.ReportDelay, err = strconv.ParseFloat(ctx.Text(), 64) if err != nil { return ctx.Send("Неправильный формат") } case "report_chance": account.ReportChance, err = strconv.Atoi(ctx.Text()) if err != nil { return ctx.Send("Неправильный формат") } case "mob_delay": account.MobDelay, err = strconv.ParseFloat(ctx.Text(), 64) if err != nil { return ctx.Send("Неправильный формат") } case "mob_chance": account.MobChance, err = strconv.Atoi(ctx.Text()) if err != nil { return ctx.Send("Неправильный формат") } case "shark_delay": account.SharkDelay, err = strconv.ParseFloat(ctx.Text(), 64) if err != nil { return ctx.Send("Неправильный формат") } case "motivation_command": if !regexp.MustCompile("/.*").MatchString(ctx.Text()) { return ctx.Send("Неправильный формат") } account.MotivationCommand = ctx.Text() } userbot.Userbots[id].Account = account storage.DB.Save(&account) return ctx.Send("Изменено") }