// 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 }