// package labor -- лаборатория на базе
package labor
import (
"fmt"
"log"
"strings"
"time"
"wartank/pkg/types"
)
// Лаборатория на базе
type Лаборатория struct {
бот types.ИБот
}
// НоваяЛаборатория -- возвращает новую лабораторию
func НоваяЛаборатория(бот types.ИБот) (*Лаборатория, error) {
if бот == nil {
return nil, fmt.Errorf("НоваяЛаборатория(): ИБот == nil")
}
сам := &Лаборатория{
бот: бот,
}
return сам, nil
}
// Пуск -- запуск в работу
func (сам *Лаборатория) Пуск() {
go сам.пуск()
}
// Запукает в работу в отдельном потоке
func (сам *Лаборатория) пуск() {
time.Sleep(time.Millisecond * 4500)
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/buildings
клиент := сам.бот.Сеть().КлиентСеть()
фнПостроить := func() error {
лстСтр, ош := клиент.Get("https://wartank.ru/buildings")
if ош != nil {
return fmt.Errorf("Лаборатория.улучшить(): при получении страницы постройки лаборатории с сервера, ош=\n\t%w", ош)
}
еслиНашли := false
//
Построить |
for _, стр := range лстСтр {
if strings.Contains(стр, `Построить | `) {
еслиНашли = true
break
}
}
if !еслиНашли {
return nil
}
// https://wartank.ru/building-upgrade/Laboratory
_, ош = клиент.Get("https://wartank.ru/building-upgrade/Laboratory")
if ош != nil {
return fmt.Errorf("Лаборатория.улучшить(): при построении лаборатории, ош=\n\t%w", ош)
}
return nil
}
фнКупить := func() error {
лстСтр, ош := клиент.Get("https://wartank.ru/building-upgrade/Laboratory")
if ош != nil {
return fmt.Errorf("Лаборатория.улучшить(): при получении страницы покупки лаборатории с сервера, ош=\n\t%w", ош)
}
стрВых := ""
//
for _, стрВых = range лстСтр {
if strings.Contains(стрВых, ``)
// https://wartank.ru/building-upgrade/Laboratory?117-1.ILinkListener-upgradeLink-link
стрВых = "https://wartank.ru/building-upgrade/" + стрВых
_, ош = клиент.Get(стрВых)
if ош != nil {
return fmt.Errorf("Лаборатория.улучшить(): при покупки лаборатории, ош=\n\t%w", ош)
}
return nil
}
счётОш := 5
for счётОш > 0 {
time.Sleep(time.Millisecond * 350)
счётОш--
ош := фнПостроить()
if ош != nil {
log.Printf("Лаборатория.улучшить(): получить, ош=\n\t%v\n", ош)
continue
}
ош = фнКупить()
if ош != nil {
log.Printf("Лаборатория.улучшить(): оплатить, ош=\n\t%v\n", ош)
continue
}
// FIXME: надо сделать подтверждение оплаты
break
}
return nil
}