battle_wait.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. сам := &СхваткаОжидание{
  20. бот: бот,
  21. }
  22. аренаКонфиг := arena.АренаКонфиг{
  23. Бот_: бот,
  24. АренаИмя_: "Ожидание сражения",
  25. СтрКонтроль_: `<title>Сражения</title>`,
  26. ФнПуск_: сам.пуск,
  27. СтрУрл_: "https://wartank.ru/pve",
  28. }
  29. сам.ИАрена = arena.НовАрена(аренаКонфиг)
  30. сам.сеть = arena_net.НовАренаСеть(сам, "https://wartank.ru/pve")
  31. return сам
  32. }
  33. func (сам *СхваткаОжидание) пуск() {
  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. сам.сеть.Обновить()
  74. var (
  75. strOut string
  76. lstBattle = сам.СписПолучить()
  77. еслиНайдено bool
  78. )
  79. for _, strOut = range lstBattle {
  80. if strings.Contains(strOut, `<span>до начала `) {
  81. еслиНайдено = true
  82. break
  83. }
  84. // if strings.Contains(strOut, `>ОБЫЧНЫЕ<`) { // Это уже битва
  85. // if len(сам.chBattle) == 0 {
  86. // сам.chBattle <- 1
  87. // }
  88. // return
  89. // }
  90. }
  91. if !еслиНайдено { // Сражение уже идёт
  92. return ""
  93. }
  94. // Найдена строка ожидания начала сражения
  95. lstTime := strings.Split(strOut, `<span>до начала `)
  96. strTime := lstTime[1]
  97. lstTime = strings.Split(strTime, ` (`)
  98. strTime = lstTime[0]
  99. if err := сам.ОбратВремяУст(alias.Время(strTime)); err != nil { // Возможно уже всё
  100. // log._rintf("WARN BattleWait.Wait(): при установке времени ожидания сражения(%v)\n\terr=%v\n", strTime, err)
  101. return ""
  102. }
  103. return strTime
  104. }