| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- // 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)
- ош := сам.номерПолуч()
- if ош != nil {
- log.Printf("ТанкПараметры.пуск(): при получении параметров танка, ош=\n\t%v\n", ош)
- сам.бот.Сервер().Отменить()
- return
- }
- 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
- )
- // <a class="simple-but border mb5" href="34479487?22-1.ILinkListener-modules-slots-0-slot-root-pimpLink-link">
- for _, стрВых = range лстСтр {
- if strings.Contains(стрВых, `<a class="simple-but border mb5" href="`+сам.номер) {
- еслиНашли = true
- break
- }
- }
- if !еслиНашли {
- return fmt.Errorf("ТанкПараметры.улучшить(): не нашёл кнопку улучшения")
- }
- стрВых = strings.TrimPrefix(стрВых, `<a class="simple-but border mb5" href="`)
- стрВых = strings.TrimSuffix(стрВых, `">`)
- // 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(стрНомер, `<a class="simple-but border" href="power/`)
- стрВыход = strings.TrimSuffix(стрВыход, `"><span><span>Повысить параметры</span></span></a>`)
- _, ош = strconv.Atoi(стрВыход)
- if ош != nil {
- return fmt.Errorf("ТанкПараметры.номерПолуч(): ошибка преобразования собственного номера(%s), ош=\n\t%w", стрВыход, ош)
- }
- сам.номер = стрВыход
- return nil
- }
|