battle_register.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // package battle_register -- регестрирует танк в битве
  2. package battle_register
  3. import (
  4. "fmt"
  5. "log"
  6. "strings"
  7. "time"
  8. "wartank/pkg/components/scene_net"
  9. "wartank/pkg/section"
  10. "wartank/pkg/types"
  11. )
  12. // СражениеРегистрация -- регистрирует танк к началу атаки
  13. type СхваткаРегистрация struct {
  14. *section.Секция
  15. бот types.ИБот
  16. сеть *scene_net.СценаСеть
  17. счётРегистер int // Счётчик регистраций на сражение
  18. }
  19. // НовСражениеРегистрация -- возвращает новый ожидатель битвы
  20. func НовСражениеРегистрация(бот types.ИБот) (*СхваткаРегистрация, error) {
  21. секция, ош := section.НовСекция(бот, "Сражение", `<title>Сражения</title>`)
  22. if ош != nil {
  23. return nil, fmt.Errorf("НовСражениеРегистрация(): in create ISection, err=\n\t%w", ош)
  24. }
  25. сам := &СхваткаРегистрация{
  26. Секция: секция,
  27. бот: бот,
  28. счётРегистер: 10_000,
  29. }
  30. сам.сеть, ош = scene_net.НовСекцияСеть(сам, "https://wartank.ru/pve")
  31. if ош != nil {
  32. return nil, fmt.Errorf("НовСражениеРегистрация(): in create *SectionNet, err=\n\t%w", ош)
  33. }
  34. return сам, nil
  35. }
  36. // Зарегистрироваться -- регистрирует танк на сражение
  37. func (сам *СхваткаРегистрация) Зарегистрироваться() {
  38. // Найдено приглашение на участие
  39. // https://wartank.ru/pve?{count}-1.ILinkListener-currentOverview-apply
  40. фнРегис := func() []string {
  41. стрСсылка := "https://wartank.ru/pve?0-1.ILinkListener-currentOverview-apply"
  42. стрКонтроль := "https://wartank.ru/pve?0-1.ILinkListener-currentOverview-apply"
  43. for {
  44. time.Sleep(time.Second * 1)
  45. лстСражение, err := сам.сеть.Get(стрСсылка)
  46. if err != nil {
  47. log.Printf("ERRO СражениеРегистрация.Зарегистрироваться(): при выполнении GET-команды на подъём в атаку, err=\n\t%v\n", err)
  48. }
  49. if len(лстСражение) < 113 {
  50. continue
  51. }
  52. стрКонтроль = лстСражение[113]
  53. if !strings.Contains(стрКонтроль, "ILinkListener-currentOverview-apply") {
  54. return лстСражение
  55. }
  56. log.Printf("СражениеРегистрация.Зарегистрироваться(): регистрация не прошла\n")
  57. стрСсылка = strings.TrimPrefix(стрКонтроль, `<a class="simple-but border" href="`)
  58. стрСсылка = strings.TrimSuffix(стрСсылка, `.ILinkListener-currentOverview-apply"><span><span>Взвод, подъем! В атаку!</span></span></a>`)
  59. стрСсылка = "https://wartank.ru/" + стрСсылка + ".ILinkListener-currentOverview-apply"
  60. }
  61. }
  62. if ош := сам.СтрОбновить(фнРегис()); ош != nil {
  63. log.Printf("СражениеРегистрация.Зарегистрироваться(): при обновлении lstBattle, err=\n\t%v\n", ош)
  64. }
  65. // log._rintf("INFO СражениеРегистрация.Зарегистрироваться(): регистрация прошла успешно\n")
  66. }