| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- // 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
- // <td style="width:50%;padding-left:1px;"><a class="simple-but border mb5" href="building-upgrade/Laboratory"><span><span>Построить</span></span></a></td>
- for _, стр := range лстСтр {
- if strings.Contains(стр, `<td style="width:50%;padding-left:1px;"><a class="simple-but border mb5" href="building-upgrade/Laboratory"><span><span>Построить</span></span></a></td>`) {
- еслиНашли = 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", ош)
- }
- стрВых := ""
- // <a class="simple-but border mb5" href="Laboratory?118-1.ILinkListener-upgradeLink-link">
- for _, стрВых = range лстСтр {
- if strings.Contains(стрВых, `<a class="simple-but border mb5" href="Laboratory?`) {
- break
- }
- }
- if стрВых == "" {
- return nil
- }
- стрВых = strings.TrimPrefix(стрВых, `<a class="simple-but border mb5" href="`)
- стрВых = strings.TrimSuffix(стрВых, `">`)
- // 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
- }
|