// package tank_params -- параметры танка повышение
package tank_params
import (
"fmt"
"log"
"strconv"
"strings"
"time"
"wartank/pkg/types"
)
// ТанкПараметры -- параметры танка повышение
type ТанкПараметры struct {
бот types.ИБот
номер string // Номер танка в игре
}
// НовТанкПараметры -- возвращает новые параметры танка
func НовТанкПараметры(бот types.ИБот) (*ТанкПараметры, error) {
if бот == nil {
return nil, fmt.Errorf("НовТанкПараметры(): ИБот == nil")
}
сам := &ТанкПараметры{
бот: бот,
}
return сам, nil
}
// Пуск -- запуск в работу
func (сам *ТанкПараметры) Пуск() {
go сам.пуск()
}
// Запукает в работу в отдельном потоке
func (сам *ТанкПараметры) пуск() {
time.Sleep(time.Second * 4)
сам.номерПолуч()
for {
select {
case <-сам.бот.Кнт().Done():
return
default:
сам.работать()
}
}
}
// Основной метод работы
func (сам *ТанкПараметры) работать() {
defer time.Sleep(time.Second * 300)
if ош := сам.улучшить(); ош != nil {
log.Printf("ТанкПараметры.работать(): ош=\n\t%v\n", ош)
return
}
}
// Улучшает параметры танка
func (сам *ТанкПараметры) улучшить() error {
// https://wartank.ru/pimp/34479487
клиент := сам.бот.Сеть().КлиентСеть()
фнУлучшить := func() error {
лстСтр, ош := клиент.Get("https://wartank.ru/pimp/" + сам.номер)
if ош != nil {
return fmt.Errorf("ТанкПараметры.улучшить(): при получении страницы улучшения танка с сервера, ош=\n\t%w", ош)
}
var (
стрВых string
еслиНашли bool
)
//
for _, стрВых = range лстСтр {
if strings.Contains(стрВых, ``)
// https://wartank.ru/pimp/34479487?21-1.ILinkListener-modules-slots-0-slot-root-pimpLink-link
стрСсыль := "https://wartank.ru/pimp/" + стрВых
_, ош = клиент.Get(стрСсыль)
if ош != nil {
return fmt.Errorf("ТанкПараметры.улучшить(): при улучшении танка с сервера, ош=\n\t%w", ош)
}
return nil
}
счётОш := 5
for счётОш > 0 {
ош := фнУлучшить()
if ош == nil {
return nil
}
log.Printf("ТанкПараметры.улучшить(): ош=\n\t%v\n", ош)
счётОш--
time.Sleep(time.Millisecond * 350)
}
return nil
}
// Получает собственный номер танка с сервера
func (сам *ТанкПараметры) номерПолуч() error {
клиент := сам.бот.Сеть().КлиентСеть()
лстСтр, ош := клиент.Get("https://wartank.ru/angar")
if ош != nil {
return fmt.Errorf("ТанкПараметры.номерПолуч(): при получении страницы ангара с сервера, ош=\n\t%w", ош)
}
var (
стрНомер string
еслиНашёл bool
)
// https://wartank.ru/power/34479487
for _, стрНомер = range лстСтр {
if strings.Contains(стрНомер, `href="power/`) {
еслиНашёл = true
break
}
}
if !еслиНашёл {
return fmt.Errorf("ТанкПараметры.номерПолуч(): не нашёл собственный номер на сервере")
}
стрВыход := strings.TrimPrefix(стрНомер, `Повысить параметры`)
_, ош = strconv.Atoi(стрВыход)
if ош != nil {
return fmt.Errorf("ТанкПараметры.номерПолуч(): ошибка преобразования собственного номера(%s), ош=\n\t%w", стрВыход, ош)
}
сам.номер = стрВыход
return nil
}