ソースを参照

d05 Подкрутка регистрации

SVI 2 年 前
コミット
c98f4ce586

+ 3 - 4
server/serv_bots/warbot/angar/battle/battle.go

@@ -19,9 +19,9 @@ type Сражение struct {
 	бот    types.ИБот
 	клиент *http.Client
 
-	регистрация *battle_register.BattleRegister    // Регистратор на сражение
-	ожидание    *battle_wait.СражениеОжидание      // Ождатель начала сражения
-	действие    *battle_worker.СражениеИсполнитель // Исполнитель сражения
+	регистрация *battle_register.СражениеРегистрация // Регистратор на сражение
+	ожидание    *battle_wait.СражениеОжидание        // Ождатель начала сражения
+	действие    *battle_worker.СражениеИсполнитель   // Исполнитель сражения
 
 }
 
@@ -62,7 +62,6 @@ func (sf *Сражение) Пуск() error {
 
 // запускает в работу сражение
 func (sf *Сражение) пуск() {
-	// sf.CountDown().SetInt(2)
 	for {
 		select {
 		case <-sf.бот.Кнт().Done():

+ 38 - 41
server/serv_bots/warbot/angar/battle/battle_register/battle_register.go

@@ -5,28 +5,31 @@ import (
 	"fmt"
 	"log"
 	"strings"
+	"time"
 
 	"wartank/pkg/components/section"
 	"wartank/pkg/components/sectionnet"
 	"wartank/pkg/types"
 )
 
-// BattleRegister -- регистрирует танк к началу атаки
-type BattleRegister struct {
+// СражениеРегистрация -- регистрирует танк к началу атаки
+type СражениеРегистрация struct {
 	*section.Section
-	bot types.ИБот
-	net *sectionnet.SectionNet
+	bot          types.ИБот
+	net          *sectionnet.SectionNet
+	счётРегистер int // Счётчик регистраций на сражение
 }
 
 // NewBattleRegister -- возвращает новый ожидатель битвы
-func NewBattleRegister(bot types.ИБот) (*BattleRegister, error) {
+func NewBattleRegister(bot types.ИБот) (*СражениеРегистрация, error) {
 	section, err := section.NewSection(bot, "Сражение", `<title>Сражения</title>`)
 	if err != nil {
 		return nil, fmt.Errorf("NewBattleRegister(): in create ISection, err=\n\t%w", err)
 	}
-	sf := &BattleRegister{
-		Section: section,
-		bot:     bot,
+	sf := &СражениеРегистрация{
+		Section:      section,
+		bot:          bot,
+		счётРегистер: 10_000,
 	}
 	sf.net, err = sectionnet.NewSectionNet(sf, "https://wartank.ru/pve")
 	if err != nil {
@@ -36,40 +39,34 @@ func NewBattleRegister(bot types.ИБот) (*BattleRegister, error) {
 }
 
 // Зарегистрироваться -- регистрирует танк на сражение
-func (sf *BattleRegister) Зарегистрироваться() {
-	if err := sf.net.UpdateLst(); err != nil { // Здесь может уже обратный отсчёт перед сражением
-		return
-	}
-	var (
-		strOut    string
-		lstBattle = sf.СписПолучить()
-		isFind    bool
-	)
-	for _, strOut = range lstBattle {
-		if strings.Contains(strOut, `>Взвод, подъем! В атаку!<`) {
-			isFind = true
-			break
-		}
-		if strings.Contains(strOut, `<div class="white medium cntr bold mb5">Вы в рядах участников</div>`) {
-			// log._rintf("INFO BattleRegister.Register(): уже зарегистрирован\n")
-			return
-		}
-	}
-	if !isFind { // Возможно, ожидание или битва уже идёт
-		return
-	}
+func (sf *СражениеРегистрация) Зарегистрироваться() {
 	// Найдено приглашение на участие
-	lstUp := strings.Split(strOut, `<a class="simple-but border" href="`)
-	linkUp := lstUp[1]
-	lstUp = strings.Split(linkUp, `"><span><span>Взвод, подъем! В атаку!</span></span></a>`)
-	linkUp = "https://wartank.ru/" + lstUp[0]
-	lstBattle, err := sf.net.Get(linkUp)
-	if err != nil {
-		// log._rintf("ERRO BattleRegister.Register(): при выполнении GET-команды на подъём в атаку, err=\n\t%v\n", err)
-		return
+	// https://wartank.ru/pve?{count}-1.ILinkListener-currentOverview-apply
+	фнРегис := func() []string {
+		стрСсылка := "https://wartank.ru/pve?0-1.ILinkListener-currentOverview-apply"
+		стрКонтроль := "https://wartank.ru/pve?0-1.ILinkListener-currentOverview-apply"
+		for {
+			time.Sleep(time.Second * 1)
+			лстСражение, err := sf.net.Get(стрСсылка)
+			if err != nil {
+				log.Printf("ERRO СражениеРегистрация.Зарегистрироваться(): при выполнении GET-команды на подъём в атаку, err=\n\t%v\n", err)
+			}
+			if len(лстСражение) < 113 {
+				continue
+			}
+			стрКонтроль = лстСражение[113]
+			if !strings.Contains(стрКонтроль, "ILinkListener-currentOverview-apply") {
+				return лстСражение
+			}
+			log.Printf("СражениеРегистрация.Зарегистрироваться(): регистрация не прошла\n")
+			стрСсылка = strings.TrimPrefix(стрКонтроль, `<a class="simple-but border" href="`)
+			стрСсылка = strings.TrimSuffix(стрСсылка, `.ILinkListener-currentOverview-apply"><span><span>Взвод, подъем! В атаку!</span></span></a>`)
+			стрСсылка = "https://wartank.ru/" + стрСсылка + ".ILinkListener-currentOverview-apply"
+		}
 	}
-	if err = sf.СтрОбновить(lstBattle); err != nil {
-		log.Printf("BattleRegister.Register(): при обновлении lstBattle, err=\n\t%v\n", err)
+
+	if err := sf.СтрОбновить(фнРегис()); err != nil {
+		log.Printf("СражениеРегистрация.Зарегистрироваться(): при обновлении lstBattle, err=\n\t%v\n", err)
 	}
-	// log._rintf("INFO BattleRegister.Register(): регистрация прошла успешно\n")
+	// log._rintf("INFO СражениеРегистрация.Зарегистрироваться(): регистрация прошла успешно\n")
 }