package missions import ( "fmt" "log" "strings" "time" "wartank/pkg/section" "wartank/pkg/types" "wartank/server/serv_bots/warbot/angar/missions/missionsnet" ) /* Сканирует миссии на предмет забрать золотишко. */ // Миссии -- забирает золотишко type Миссии struct { *section.Секция бот types.ИБот сеть *missionsnet.MissionsNet } // НовМиссии -- возвращает новый *Миссии func НовМиссии(бот types.ИБот) (*Миссии, error) { section, err := section.НовСекция(бот, "Миссии", `Миссии`) if err != nil { return nil, fmt.Errorf("НовМиссии(): in create *Section, err=\n\t%w", err) } сам := &Миссии{ Секция: section, бот: бот, } сам.сеть, err = missionsnet.NewMissionsNet(сам) if err != nil { return nil, fmt.Errorf("НовМиссии(): in create *SectionNet, err=\n\t%w", err) } return сам, nil } // Пуск -- запускает в работу сбор миссий func (сам *Миссии) Пуск() error { go сам.пуск() return nil } // обрабатывает конвой func (сам *Миссии) пуск() { time.Sleep(time.Second * 5) for { // Время истекло // time.Sleep(time.Minute * 1) select { case <-сам.бот.Кнт().Done(): return default: сам.проверНаграда() time.Sleep(time.Minute * 1) } } } // Забирает всё самое вкусное func (сам *Миссии) проверНаграда() { сам.сражениеЗащита() сам.сражениеНаступление() сам.проведиВойну() сам.battle5Fiting() сам.battle6win() сам.battle10Fiting() сам.battleDogFyting() сам.makeResource() сам.kill3tanks() сам.топливоДив() сам.upMan() } // Проверяет награду за уничтожить 3 танка в бою func (сам *Миссии) kill3tanks() { var ( strOut string lstMissions = сам.СписПолучить() еслиНайдено bool ind int ) for ind, strOut = range lstMissions { if strings.Contains(strOut, `Уничтожь в бою 3 танка
`) { еслиНайдено = true break } } if !еслиНайдено { return } // Получить награду ind += 23 strOut = lstMissions[ind] if !strings.Contains(strOut, `>Получить награду<`) { return } lstLink := strings.Split(strOut, `Получить награду`) strLink = "https://wartank.ru/missions/" + lstLink[0] lstMissions, err := сам.сеть.Get(strLink) if err != nil { // log._rintf("ERRO Миссии.kill3tanks(): при выполнении GET-запроса, err=\n\t%v\n", err) return } if err := сам.СтрОбновить(lstMissions); err != nil { // log._rintf("ERRO Миссии.kill3tanks(): при обновлении lstMissions, err=\n\t%v\n", err) return } } // Проверяет награду оборонительного сражения func (сам *Миссии) сражениеЗащита() { var ( strOut string еслиНайдено bool ) ош := сам.сеть.Обновить() if ош != nil { log.Printf("Миссии.сражениеЗащита(): при обновлении списка строк миссий, ош:=\n\t%v\n", ош) return } списМиссия := сам.СписПолучить() // Получить награду for _, strOut = range списМиссия { if strings.Contains(strOut, `.ILinkListener-missions-cc-0-c-awardLink`) { еслиНайдено = true break } } if !еслиНайдено { return } // Получить награду _ссылка := strings.TrimPrefix(strOut, `Получить награду`) strLink := "https://wartank.ru/missions/" + _ссылка списМиссия, err := сам.сеть.Get(strLink) if err != nil { // log._rintf("ERRO Миссии.battleDefence(): при выполнении GET-запроса, err=\n\t%v\n", err) return } if err := сам.СтрОбновить(списМиссия); err != nil { // log._rintf("ERRO Миссии.battleDefence(): при обновлении lstMissions, err=\n\t%v\n", err) return } } // Проверяет награду за одну войну func (сам *Миссии) проведиВойну() { var ( strOut string lstMissions = сам.СписПолучить() еслиНайдено bool ind int ) for ind, strOut = range lstMissions { if strings.Contains(strOut, `Проведи одну войну
`) { еслиНайдено = true break } } if !еслиНайдено { return } // Получить награду ind += 23 strOut = lstMissions[ind] if !strings.Contains(strOut, `>Получить награду<`) { return } lstLink := strings.Split(strOut, `Получить награду`) strLink = "https://wartank.ru/missions/" + lstLink[0] lstMissions, err := сам.сеть.Get(strLink) if err != nil { // log._rintf("ERRO Миссии.battleWar(): при выполнении GET-запроса, err=\n\t%v\n", err) return } if err := сам.СтрОбновить(lstMissions); err != nil { // log._rintf("ERRO Миссии.battleWar(): при обновлении lstMissions, err=\n\t%v\n", err) return } } // Проверяет награду наступательного сражения func (сам *Миссии) сражениеНаступление() { var ( strOut string еслиНайдено bool ind int lstMissions = сам.СписПолучить() ) if len(lstMissions) == 0 { if ош := сам.сеть.Обновить(); ош != nil { log.Printf("Миссии.сражениеНаступление(): при обновлении HTML миссий, ош=\n\t%v\n", ош) return } lstMissions = сам.СписПолучить() } for ind, strOut = range lstMissions { if strings.Contains(strOut, "Проведи одно наступательное сражение
") { еслиНайдено = true break } } if !еслиНайдено { return } // Получить награду ind += 23 strOut = lstMissions[ind] if !strings.Contains(strOut, `>Получить награду<`) { return } lstLink := strings.Split(strOut, `Получить награду`) strLink = "https://wartank.ru/missions/" + lstLink[0] lstMissions, err := сам.сеть.Get(strLink) if err != nil { // log._rintf("ERRO Миссии.battleAttack(): при выполнении GET-запроса, err=\n\t%v\n", err) return } if err := сам.СтрОбновить(lstMissions); err != nil { // log._rintf("ERRO Миссии.battleAttack(): при обновлении lstMissions, err=\n\t%v\n", err) return } } // Проверяет награду за схватку func (сам *Миссии) battleDogFyting() { var ( strOut string lstMissions = сам.СписПолучить() еслиНайдено bool ind int ) for ind, strOut = range lstMissions { if strings.Contains(strOut, `Проведи одну схватку
`) { еслиНайдено = true break } } if !еслиНайдено { return } // Получить награду ind += 23 strOut = lstMissions[ind] if !strings.Contains(strOut, `>Получить награду<`) { return } lstLink := strings.Split(strOut, `Получить награду`) strLink = "https://wartank.ru/missions/" + lstLink[0] lstMissions, err := сам.сеть.Get(strLink) if err != nil { // log._rintf("ERRO Миссии.battleDogFyting(): при выполнении GET-запроса, err=\n\t%v\n", err) return } if err := сам.СтрОбновить(lstMissions); err != nil { // log._rintf("ERRO Миссии.battleDogFyting(): при обновлении lstMissions, err=\n\t%v\n", err) return } } // Проверяет награду за ресурсы func (сам *Миссии) makeResource() { var ( strOut string lstMissions = сам.СписПолучить() еслиНайдено bool ind int ) for ind, strOut = range lstMissions { if strings.Contains(strOut, `Произведи на базе 10 ресурсов
`) { еслиНайдено = true break } } if !еслиНайдено { return } // Получить награду ind += 23 strOut = lstMissions[ind] if !strings.Contains(strOut, `>Получить награду<`) { return } lstLink := strings.Split(strOut, `Получить награду`) strLink = "https://wartank.ru/missions/" + lstLink[0] lstMissions, err := сам.сеть.Get(strLink) if err != nil { // log._rintf("ERRO Миссии.makeResource(): при выполнении GET-запроса, err=\n\t%v\n", err) return } if err := сам.СтрОбновить(lstMissions); err != nil { // log._rintf("ERRO Миссии.makeResource(): при обновлении lstMissions, err=\n\t%v\n", err) return } } // Проверяет награду за ресурсы func (сам *Миссии) upMan() { var ( strOut string lstMissions = сам.СписПолучить() еслиНайдено bool ind int ) for ind, strOut = range lstMissions { if strings.Contains(strOut, `Прокачай экипаж на 100 опыта экипажа
`) { еслиНайдено = true break } } if !еслиНайдено { return } // Получить награду ind += 23 strOut = lstMissions[ind] if !strings.Contains(strOut, `>Получить награду<`) { return } lstLink := strings.Split(strOut, `Получить награду`) strLink = "https://wartank.ru/missions/" + lstLink[0] lstMissions, err := сам.сеть.Get(strLink) if err != nil { // log._rintf("ERRO Миссии.upMan(): при выполнении GET-запроса, err=\n\t%v\n", err) return } if err := сам.СтрОбновить(lstMissions); err != nil { // log._rintf("ERRO Миссии.upMan(): при обновлении lstMissions, err=\n\t%v\n", err) return } // log._rintf("INFO Миссии.upMan(): награда получена\n") } // Проверяет награду за топливо func (сам *Миссии) топливоДив() { var ( strOut string lstMissions = сам.СписПолучить() еслиНайдено bool ind int ) for ind, strOut = range lstMissions { if strings.Contains(strOut, `Получи топливо в дивизии
`) { еслиНайдено = true break } } if !еслиНайдено { return } // Получить награду ind += 19 strOut = lstMissions[ind] if !strings.Contains(strOut, `>Получить наградуПолучить награду`) strLink = "https://wartank.ru/missions/" + lstLink[0] lstMissions, err := сам.сеть.Get(strLink) if err != nil { // log._rintf("ERRO Миссии.makeFuel(): при выполнении GET-запроса, err=\n\t%v\n", err) return } if err := сам.СтрОбновить(lstMissions); err != nil { // log._rintf("ERRO Миссии.makeFuel(): при обновлении lstMissions, err=\n\t%v\n", err) return } // log._rintf("INFO Миссии.makeFuel(): награда получена") } // Проверяет награду 5 боёв func (сам *Миссии) battle5Fiting() { var ( strOut string lstMissions = сам.СписПолучить() еслиНайдено bool ind int ) for ind, strOut = range lstMissions { if strings.Contains(strOut, `Проведи 5 боев
`) { еслиНайдено = true break } } if !еслиНайдено { return } // Получить награду ind += 23 strOut = lstMissions[ind] if !strings.Contains(strOut, `>Получить награду<`) { return } lstLink := strings.Split(strOut, `Получить награду`) strLink = "https://wartank.ru/missions/" + lstLink[0] lstMissions, err := сам.сеть.Get(strLink) if err != nil { // log._rintf("ERRO Миссии.battle5Fiting(): при выполнении GET-запроса, err=\n\t%v\n", err) return } if err := сам.СтрОбновить(lstMissions); err != nil { // log._rintf("ERRO Миссии.battle5Fiting(): при обновлении lstMissions, err=\n\t%v\n", err) return } } // Проверяет награду 10 боёв func (сам *Миссии) battle10Fiting() { var ( strOut string lstMissions = сам.СписПолучить() еслиНайдено bool ind int ) for ind, strOut = range lstMissions { if strings.Contains(strOut, `Уничтожь в бою 10 танков
`) { еслиНайдено = true break } } if !еслиНайдено { return } // Получить награду ind += 23 strOut = lstMissions[ind] if !strings.Contains(strOut, `>Получить награду<`) { return } lstLink := strings.Split(strOut, `Получить награду`) strLink = "https://wartank.ru/missions/" + lstLink[0] lstMissions, err := сам.сеть.Get(strLink) if err != nil { // log._rintf("ERRO Миссии.battle10Fiting(): при выполнении GET-запроса, err=\n\t%v\n", err) return } if err := сам.СтрОбновить(lstMissions); err != nil { // log._rintf("ERRO Миссии.battle10Fiting(): при обновлении lstMissions, err=\n\t%v\n", err) return } } // Проверяет награду за 6 побед подряд func (сам *Миссии) battle6win() { var ( strOut string lstMissions = сам.СписПолучить() еслиНайдено bool ind int ) for ind, strOut = range lstMissions { if strings.Contains(strOut, `Победи 6 раз подряд
`) { еслиНайдено = true break } } if !еслиНайдено { return } // Получить награду ind += 25 strOut = lstMissions[ind] if !strings.Contains(strOut, `>Получить награду<`) { return } lstLink := strings.Split(strOut, `Получить награду`) strLink = "https://wartank.ru/missions/" + lstLink[0] lstMissions, err := сам.сеть.Get(strLink) if err != nil { // log._rintf("ERRO Миссии.battle6win(): при выполнении GET-запроса, err=\n\t%v\n", err) return } if err := сам.СтрОбновить(lstMissions); err != nil { // log._rintf("ERRO Миссии.battle6win(): при обновлении lstMissions, err=\n\t%v\n", err) return } }