tank_params.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. // package tank_params -- параметры танка повышение
  2. package tank_params
  3. import (
  4. "fmt"
  5. "log"
  6. "strconv"
  7. "strings"
  8. "time"
  9. "wartank/pkg/types"
  10. )
  11. // ТанкПараметры -- параметры танка повышение
  12. type ТанкПараметры struct {
  13. бот types.ИБот
  14. номер string // Номер танка в игре
  15. }
  16. // НовТанкПараметры -- возвращает новые параметры танка
  17. func НовТанкПараметры(бот types.ИБот) (*ТанкПараметры, error) {
  18. if бот == nil {
  19. return nil, fmt.Errorf("НовТанкПараметры(): ИБот == nil")
  20. }
  21. сам := &ТанкПараметры{
  22. бот: бот,
  23. }
  24. return сам, nil
  25. }
  26. // Пуск -- запуск в работу
  27. func (сам *ТанкПараметры) Пуск() {
  28. go сам.пуск()
  29. }
  30. // Запукает в работу в отдельном потоке
  31. func (сам *ТанкПараметры) пуск() {
  32. time.Sleep(time.Second * 4)
  33. сам.номерПолуч()
  34. for {
  35. select {
  36. case <-сам.бот.Кнт().Done():
  37. return
  38. default:
  39. сам.работать()
  40. }
  41. }
  42. }
  43. // Основной метод работы
  44. func (сам *ТанкПараметры) работать() {
  45. defer time.Sleep(time.Second * 300)
  46. if ош := сам.улучшить(); ош != nil {
  47. log.Printf("ТанкПараметры.работать(): ош=\n\t%v\n", ош)
  48. return
  49. }
  50. }
  51. // Улучшает параметры танка
  52. func (сам *ТанкПараметры) улучшить() error {
  53. // https://wartank.ru/pimp/34479487
  54. клиент := сам.бот.Сеть().КлиентСеть()
  55. фнУлучшить := func() error {
  56. лстСтр, ош := клиент.Get("https://wartank.ru/pimp/" + сам.номер)
  57. if ош != nil {
  58. return fmt.Errorf("ТанкПараметры.улучшить(): при получении страницы улучшения танка с сервера, ош=\n\t%w", ош)
  59. }
  60. var (
  61. стрВых string
  62. еслиНашли bool
  63. )
  64. // <a class="simple-but border mb5" href="34479487?22-1.ILinkListener-modules-slots-0-slot-root-pimpLink-link">
  65. for _, стрВых = range лстСтр {
  66. if strings.Contains(стрВых, `<a class="simple-but border mb5" href="`+сам.номер) {
  67. еслиНашли = true
  68. break
  69. }
  70. }
  71. if !еслиНашли {
  72. return fmt.Errorf("ТанкПараметры.улучшить(): не нашёл кнопку улучшения")
  73. }
  74. стрВых = strings.TrimPrefix(стрВых, `<a class="simple-but border mb5" href="`)
  75. стрВых = strings.TrimSuffix(стрВых, `">`)
  76. // https://wartank.ru/pimp/34479487?21-1.ILinkListener-modules-slots-0-slot-root-pimpLink-link
  77. стрСсыль := "https://wartank.ru/pimp/" + стрВых
  78. _, ош = клиент.Get(стрСсыль)
  79. if ош != nil {
  80. return fmt.Errorf("ТанкПараметры.улучшить(): при улучшении танка с сервера, ош=\n\t%w", ош)
  81. }
  82. return nil
  83. }
  84. счётОш := 5
  85. for счётОш > 0 {
  86. ош := фнУлучшить()
  87. if ош == nil {
  88. return nil
  89. }
  90. log.Printf("ТанкПараметры.улучшить(): ош=\n\t%v\n", ош)
  91. счётОш--
  92. time.Sleep(time.Millisecond * 350)
  93. }
  94. return nil
  95. }
  96. // Получает собственный номер танка с сервера
  97. func (сам *ТанкПараметры) номерПолуч() error {
  98. клиент := сам.бот.Сеть().КлиентСеть()
  99. лстСтр, ош := клиент.Get("https://wartank.ru/angar")
  100. if ош != nil {
  101. return fmt.Errorf("ТанкПараметры.номерПолуч(): при получении страницы ангара с сервера, ош=\n\t%w", ош)
  102. }
  103. var (
  104. стрНомер string
  105. еслиНашёл bool
  106. )
  107. // https://wartank.ru/power/34479487
  108. for _, стрНомер = range лстСтр {
  109. if strings.Contains(стрНомер, `href="power/`) {
  110. еслиНашёл = true
  111. break
  112. }
  113. }
  114. if !еслиНашёл {
  115. return fmt.Errorf("ТанкПараметры.номерПолуч(): не нашёл собственный номер на сервере")
  116. }
  117. стрВыход := strings.TrimPrefix(стрНомер, `<a class="simple-but border" href="power/`)
  118. стрВыход = strings.TrimSuffix(стрВыход, `"><span><span>Повысить параметры</span></span></a>`)
  119. _, ош = strconv.Atoi(стрВыход)
  120. if ош != nil {
  121. return fmt.Errorf("ТанкПараметры.номерПолуч(): ошибка преобразования собственного номера(%s), ош=\n\t%w", стрВыход, ош)
  122. }
  123. сам.номер = стрВыход
  124. return nil
  125. }