arena_laborator.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. // package arena_laborator -- лаборатория на базе
  2. package arena_laborator
  3. import (
  4. "fmt"
  5. "log"
  6. "strings"
  7. "time"
  8. . "wartank/app/lev0/types"
  9. )
  10. // АренаЛаборатория на базе
  11. type АренаЛаборатория struct {
  12. бот ИБот
  13. }
  14. // НоваяЛаборатория -- возвращает новую лабораторию
  15. func НоваяЛаборатория(бот ИБот) (*АренаЛаборатория, error) {
  16. if бот == nil {
  17. return nil, fmt.Errorf("НоваяЛаборатория(): ИБот == nil")
  18. }
  19. сам := &АренаЛаборатория{
  20. бот: бот,
  21. }
  22. return сам, nil
  23. }
  24. // Пуск -- запуск в работу
  25. func (сам *АренаЛаборатория) Пуск() {
  26. go сам.пуск()
  27. }
  28. // Запускает в работу в отдельном потоке
  29. func (сам *АренаЛаборатория) пуск() {
  30. time.Sleep(time.Millisecond * 4500)
  31. for {
  32. select {
  33. case <-сам.бот.Контекст().Done():
  34. return
  35. default:
  36. сам.работать()
  37. }
  38. }
  39. }
  40. // Основной метод работы
  41. func (сам *АренаЛаборатория) работать() {
  42. defer time.Sleep(time.Second * 300)
  43. if ош := сам.улучшить(); ош != nil {
  44. log.Printf("Лаборатория.работать(): ош=\n\t%v\n", ош)
  45. return
  46. }
  47. }
  48. // Улучшает параметры лаборатории
  49. func (сам *АренаЛаборатория) улучшить() error {
  50. // https://wartank.ru/buildings
  51. клиент := сам.бот.Сеть().ВебВоркер()
  52. фнПостроить := func() error {
  53. лстСтр := клиент.Получ("https://wartank.ru/buildings")
  54. еслиНашли := false
  55. // <td style="width:50%;padding-left:1px;"><a class="simple-but border mb5" href="building-upgrade/Laboratory"><span><span>Построить</span></span></a></td>
  56. for _, стр := range лстСтр {
  57. if strings.Contains(стр, `<td style="width:50%;padding-left:1px;"><a class="simple-but border mb5" href="building-upgrade/Laboratory"><span><span>Построить</span></span></a></td>`) {
  58. еслиНашли = true
  59. break
  60. }
  61. }
  62. if !еслиНашли {
  63. return nil
  64. }
  65. // https://wartank.ru/building-upgrade/Laboratory
  66. _ = клиент.Получ("https://wartank.ru/building-upgrade/Laboratory")
  67. return nil
  68. }
  69. фнКупить := func() error {
  70. лстСтр := клиент.Получ("https://wartank.ru/building-upgrade/Laboratory")
  71. стрВых := ""
  72. // <a class="simple-but border mb5" href="Laboratory?118-1.ILinkListener-upgradeLink-link">
  73. for _, стрВых = range лстСтр {
  74. if strings.Contains(стрВых, `<a class="simple-but border mb5" href="Laboratory?`) {
  75. break
  76. }
  77. }
  78. if стрВых == "" {
  79. return nil
  80. }
  81. стрВых = strings.TrimPrefix(стрВых, `<a class="simple-but border mb5" href="`)
  82. стрВых = strings.TrimSuffix(стрВых, `">`)
  83. // https://wartank.ru/building-upgrade/Laboratory?117-1.ILinkListener-upgradeLink-link
  84. стрВых = "https://wartank.ru/building-upgrade/" + стрВых
  85. _ = клиент.Получ(стрВых)
  86. return nil
  87. }
  88. счётОш := 5
  89. for счётОш > 0 {
  90. time.Sleep(time.Millisecond * 350)
  91. счётОш--
  92. ош := фнПостроить()
  93. if ош != nil {
  94. log.Printf("Лаборатория.улучшить(): получить, ош=\n\t%v\n", ош)
  95. continue
  96. }
  97. ош = фнКупить()
  98. if ош != nil {
  99. log.Printf("Лаборатория.улучшить(): оплатить, ош=\n\t%v\n", ош)
  100. continue
  101. }
  102. // FIXME: надо сделать подтверждение оплаты
  103. break
  104. }
  105. return nil
  106. }