| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // package battle_register -- регестрирует танк в битве
- package battle_register
- import (
- "fmt"
- "log"
- "strings"
- "wartank/pkg/components/section"
- "wartank/pkg/components/sectionnet"
- "wartank/pkg/types"
- )
- // BattleRegister -- регистрирует танк к началу атаки
- type BattleRegister struct {
- *section.Section
- server types.IServer
- bot types.IServBot
- net *sectionnet.SectionNet
- }
- // NewBattleRegister -- возвращает новый ожидатель битвы
- func NewBattleRegister(server types.IServer, bot types.IServBot) (*BattleRegister, error) {
- { // Предусловия
- if server == nil {
- return nil, fmt.Errorf("NewBattleRegister(): IServer == nil")
- }
- if bot == nil {
- return nil, fmt.Errorf("NewBattleRegister():IServBot == nil")
- }
- }
- sf := &BattleRegister{
- server: server,
- bot: bot,
- }
- var err error
- { // ISection (ожидание)
- sf.Section, err = section.NewSection(server, `<title>Сражения</title>`)
- if err != nil {
- return nil, fmt.Errorf("NewBattleRegister(): in create *Section, err=\n\t%w", err)
- }
- }
- return sf, nil
- }
- // Run -- запускает регистратор в работу
- func (sf *BattleRegister) Run() {
- sf.net = sectionnet.NewSectionNet(sf.server, sf.bot, sf, "http://wartank.ru/pve")
- }
- // Register -- регистрирует танк на сражение
- func (sf *BattleRegister) Register() {
- if err := sf.net.UpdateLst("Ближайшее сражение"); err != nil { // Здесь может уже обратный отсчёт перед сражением
- return
- }
- var (
- strOut string
- lstBattle = sf.GetLst()
- 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
- }
- // Найдено приглашение на участие
- lstUp := strings.Split(strOut, `<a class="simple-but border" href="`)
- linkUp := lstUp[1]
- lstUp = strings.Split(linkUp, `"><span><span>Взвод, подъем! В атаку!</span></span></a>`)
- linkUp = "http://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
- }
- if err = sf.Update(lstBattle); err != nil {
- log.Printf("BattleRegister.Register(): при обновлении lstBattle, err=\n\t%v\n", err)
- }
- // log._rintf("INFO BattleRegister.Register(): регистрация прошла успешно\n")
- }
|