// 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, `Сражения`) 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, `
Вы в рядах участников
`) { // log._rintf("INFO BattleRegister.Register(): уже зарегистрирован\n") return } } if !isFind { // Возможно, ожидание или битва уже идёт return } // Найдено приглашение на участие lstUp := strings.Split(strOut, `Взвод, подъем! В атаку!`) 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") }