battle_register.go 2.6 KB

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