battle_register.go 2.7 KB

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