battle_wait.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. // package battle_wait -- заставляет ожидать начало битвы
  2. package battle_wait
  3. import (
  4. "fmt"
  5. // "log"
  6. "strings"
  7. "time"
  8. "wartank/pkg/alias"
  9. "wartank/pkg/components/scene_net"
  10. "wartank/pkg/section"
  11. "wartank/pkg/types"
  12. )
  13. // СражениеОжидание -- ожидатель начала битвы
  14. type СхваткаОжидание struct {
  15. *section.Секция
  16. bot types.ИБот
  17. net *scene_net.СценаСеть
  18. }
  19. // НовСражениеОжидание -- возвращает новый ожидатель битвы
  20. func НовСражениеОжидание(bot types.ИБот) (*СхваткаОжидание, error) {
  21. section, err := section.НовСекция(bot, "Ожидание сражения", `<title>Сражения</title>`)
  22. if err != nil {
  23. return nil, fmt.Errorf("NewBattleWait(): in create ISection, err=\n\t%w", err)
  24. }
  25. сам := &СхваткаОжидание{
  26. Секция: section,
  27. bot: bot,
  28. }
  29. сам.net, err = scene_net.НовСекцияСеть(сам, "https://wartank.ru/pve")
  30. if err != nil {
  31. return nil, fmt.Errorf("NewBattleWait(): in create *SectionNet, err=\n\t%w", err)
  32. }
  33. return сам, nil
  34. }
  35. // Ожидать -- ожидает начало сражения
  36. func (сам *СхваткаОжидание) Ожидать() {
  37. // Зайти в цикл ожидания сражения
  38. for {
  39. // countTime := сам.ВремяОпрос().Получ()
  40. // if countTime > 0 {
  41. // time.Sleep(time.Millisecond * 500)
  42. // // log.Printf("BattleWait.Wait(): countTime=%v\n", сам.CountDown().String())
  43. // continue
  44. // }
  45. стрВрем := сам.ждать()
  46. if стрВрем == "" {
  47. return
  48. }
  49. лстВрем := strings.Split(стрВрем, ":")
  50. стрЧас := лстВрем[0]
  51. if стрЧас > "00" {
  52. time.Sleep(time.Hour * 1)
  53. continue
  54. }
  55. стрМин := лстВрем[1]
  56. if стрМин > "10" {
  57. time.Sleep(time.Minute * 10)
  58. continue
  59. }
  60. if стрМин > "01" {
  61. time.Sleep(time.Minute * 1)
  62. continue
  63. }
  64. if "00:00:05" < стрВрем && стрВрем < "00:00:59" {
  65. time.Sleep(time.Second * 5)
  66. continue
  67. }
  68. time.Sleep(time.Second * 1)
  69. }
  70. }
  71. // Ждёт пока время не обнулится
  72. func (сам *СхваткаОжидание) ждать() string {
  73. if ош := сам.net.Обновить(); ош != nil { // Здесь может уже обратный отсчёт перед сражением
  74. return ""
  75. }
  76. var (
  77. strOut string
  78. lstBattle = сам.СписПолучить()
  79. еслиНайдено bool
  80. )
  81. for _, strOut = range lstBattle {
  82. if strings.Contains(strOut, `<span>до начала `) {
  83. еслиНайдено = true
  84. break
  85. }
  86. // if strings.Contains(strOut, `>ОБЫЧНЫЕ<`) { // Это уже битва
  87. // if len(сам.chBattle) == 0 {
  88. // сам.chBattle <- 1
  89. // }
  90. // return
  91. // }
  92. }
  93. if !еслиНайдено { // Сражение уже идёт
  94. return ""
  95. }
  96. // Найдена строка ожидания начала сражения
  97. lstTime := strings.Split(strOut, `<span>до начала `)
  98. strTime := lstTime[1]
  99. lstTime = strings.Split(strTime, ` (`)
  100. strTime = lstTime[0]
  101. if err := сам.Секция.Уст(alias.Время(strTime)); err != nil { // Возможно уже всё
  102. // log._rintf("WARN BattleWait.Wait(): при установке времени ожидания сражения(%v)\n\terr=%v\n", strTime, err)
  103. return ""
  104. }
  105. return strTime
  106. }