battle_wait.go 3.1 KB

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