battle_register.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // package battle_register -- регестрирует танк в битве
  2. package battle_register
  3. import (
  4. "fmt"
  5. "log"
  6. "strings"
  7. "wartank/pkg/components/section"
  8. "wartank/pkg/components/sectionnet"
  9. "wartank/pkg/types"
  10. )
  11. // BattleRegister -- регистрирует танк к началу атаки
  12. type BattleRegister struct {
  13. *section.Section
  14. bot types.IBot
  15. net *sectionnet.SectionNet
  16. }
  17. // NewBattleRegister -- возвращает новый ожидатель битвы
  18. func NewBattleRegister(bot types.IBot) (*BattleRegister, error) {
  19. if bot == nil {
  20. return nil, fmt.Errorf("NewBattleRegister(): IBot == nil")
  21. }
  22. sf := &BattleRegister{
  23. bot: bot,
  24. }
  25. var err error
  26. { // ISection (ожидание)
  27. sf.Section, err = section.NewSection(bot, `<title>Сражения</title>`)
  28. if err != nil {
  29. return nil, fmt.Errorf("NewBattleRegister(): in create *Section, err=\n\t%w", err)
  30. }
  31. }
  32. return sf, nil
  33. }
  34. // Run -- запускает регистратор в работу
  35. func (sf *BattleRegister) Run() {
  36. sf.net = sectionnet.NewSectionNet(sf.bot, sf, "http://wartank.ru/pve")
  37. }
  38. // Register -- регистрирует танк на сражение
  39. func (sf *BattleRegister) Register() {
  40. if err := sf.net.UpdateLst("Ближайшее сражение"); err != nil { // Здесь может уже обратный отсчёт перед сражением
  41. return
  42. }
  43. var (
  44. strOut string
  45. lstBattle = sf.GetLst()
  46. isFind bool
  47. )
  48. for _, strOut = range lstBattle {
  49. if strings.Contains(strOut, `>Взвод, подъем! В атаку!<`) {
  50. isFind = true
  51. break
  52. }
  53. if strings.Contains(strOut, `<div class="white medium cntr bold mb5">Вы в рядах участников</div>`) {
  54. // log._rintf("INFO BattleRegister.Register(): уже зарегистрирован\n")
  55. return
  56. }
  57. }
  58. if !isFind { // Возможно, ожидание или битва уже идёт
  59. return
  60. }
  61. // Найдено приглашение на участие
  62. lstUp := strings.Split(strOut, `<a class="simple-but border" href="`)
  63. linkUp := lstUp[1]
  64. lstUp = strings.Split(linkUp, `"><span><span>Взвод, подъем! В атаку!</span></span></a>`)
  65. linkUp = "http://wartank.ru/" + lstUp[0]
  66. lstBattle, err := sf.net.Get(linkUp)
  67. if err != nil {
  68. // log._rintf("ERRO BattleRegister.Register(): при выполнении GET-команды на подъём в атаку, err=\n\t%v\n", err)
  69. return
  70. }
  71. if err = sf.Update(lstBattle); err != nil {
  72. log.Printf("BattleRegister.Register(): при обновлении lstBattle, err=\n\t%v\n", err)
  73. }
  74. // log._rintf("INFO BattleRegister.Register(): регистрация прошла успешно\n")
  75. }