missions.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. package missions
  2. import (
  3. "fmt"
  4. "log"
  5. "strings"
  6. "time"
  7. "wartank/pkg/components/section"
  8. "wartank/pkg/types"
  9. "wartank/server/serv_bots/warbot/angar/missions/missionsnet"
  10. )
  11. /*
  12. Сканирует миссии на предмет забрать золотишко.
  13. */
  14. // Миссии -- забирает золотишко
  15. type Миссии struct {
  16. *section.Section
  17. бот types.ИБот
  18. сеть *missionsnet.MissionsNet
  19. }
  20. // НовМиссии -- возвращает новый *Миссии
  21. func НовМиссии(бот types.ИБот) (*Миссии, error) {
  22. section, err := section.NewSection(бот, "Миссии", `<title>Миссии</title>`)
  23. if err != nil {
  24. return nil, fmt.Errorf("НовМиссии(): in create *Section, err=\n\t%w", err)
  25. }
  26. сам := &Миссии{
  27. Section: section,
  28. бот: бот,
  29. }
  30. сам.сеть, err = missionsnet.NewMissionsNet(сам)
  31. if err != nil {
  32. return nil, fmt.Errorf("НовМиссии(): in create *SectionNet, err=\n\t%w", err)
  33. }
  34. return сам, nil
  35. }
  36. // Пуск -- запускает в работу сбор миссий
  37. func (сам *Миссии) Пуск() error {
  38. go сам.пуск()
  39. return nil
  40. }
  41. // обрабатывает конвой
  42. func (sf *Миссии) пуск() {
  43. defer func() {
  44. sf.ВремяОпрос().Стоп()
  45. }()
  46. time.Sleep(time.Second * 5)
  47. for { // Время истекло
  48. select {
  49. case <-sf.бот.Кнт().Done():
  50. sf.ВремяОпрос().Стоп()
  51. return
  52. case <-sf.ВремяОпрос().КаналСиг():
  53. // if err := sf.сеть.UpdateLst(); err != nil {
  54. // // log._rintf("ERRO Миссии.run(): при обновлении lstMissions, err=\n\t%v\n", err)
  55. // return
  56. // }
  57. // sf.проверНаграда()
  58. default:
  59. sf.проверНаграда()
  60. time.Sleep(time.Minute * 1)
  61. }
  62. }
  63. }
  64. // Забирает всё самое вкусное
  65. func (sf *Миссии) проверНаграда() {
  66. sf.сражениеЗащита()
  67. sf.сражениеНаступление()
  68. sf.проведиВойну()
  69. sf.battle5Fiting()
  70. sf.battle6win()
  71. sf.battle10Fiting()
  72. sf.battleDogFyting()
  73. sf.makeResource()
  74. sf.kill3tanks()
  75. sf.топливоДив()
  76. sf.upMan()
  77. }
  78. // Проверяет награду за уничтожить 3 танка в бою
  79. func (sf *Миссии) kill3tanks() {
  80. var (
  81. strOut string
  82. lstMissions = sf.СписПолучить()
  83. isFind bool
  84. ind int
  85. )
  86. for ind, strOut = range lstMissions {
  87. if strings.Contains(strOut, `Уничтожь в бою 3 танка<br/>`) {
  88. isFind = true
  89. break
  90. }
  91. }
  92. if !isFind {
  93. return
  94. }
  95. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  96. ind += 23
  97. strOut = lstMissions[ind]
  98. if !strings.Contains(strOut, `>Получить награду<`) {
  99. return
  100. }
  101. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  102. strLink := lstLink[1]
  103. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  104. strLink = "https://wartank.ru/missions/" + lstLink[0]
  105. lstMissions, err := sf.сеть.Get(strLink)
  106. if err != nil {
  107. // log._rintf("ERRO Миссии.kill3tanks(): при выполнении GET-запроса, err=\n\t%v\n", err)
  108. return
  109. }
  110. if err := sf.СтрОбновить(lstMissions); err != nil {
  111. // log._rintf("ERRO Миссии.kill3tanks(): при обновлении lstMissions, err=\n\t%v\n", err)
  112. return
  113. }
  114. }
  115. // Проверяет награду оборонительного сражения
  116. func (sf *Миссии) сражениеЗащита() {
  117. var (
  118. strOut string
  119. lstMissions = sf.СписПолучить()
  120. isFind bool
  121. ind int
  122. )
  123. for ind, strOut = range lstMissions {
  124. if strings.Contains(strOut, `Проведи одно оборонительное сражение<br/>`) {
  125. isFind = true
  126. break
  127. }
  128. }
  129. if !isFind {
  130. return
  131. }
  132. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  133. ind += 23
  134. strOut = lstMissions[ind]
  135. if !strings.Contains(strOut, `>Получить награду<`) {
  136. return
  137. }
  138. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  139. strLink := lstLink[1]
  140. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  141. strLink = "https://wartank.ru/missions/" + lstLink[0]
  142. lstMissions, err := sf.сеть.Get(strLink)
  143. if err != nil {
  144. // log._rintf("ERRO Миссии.battleDefence(): при выполнении GET-запроса, err=\n\t%v\n", err)
  145. return
  146. }
  147. if err := sf.СтрОбновить(lstMissions); err != nil {
  148. // log._rintf("ERRO Миссии.battleDefence(): при обновлении lstMissions, err=\n\t%v\n", err)
  149. return
  150. }
  151. }
  152. // Проверяет награду за одну войну
  153. func (sf *Миссии) проведиВойну() {
  154. var (
  155. strOut string
  156. lstMissions = sf.СписПолучить()
  157. isFind bool
  158. ind int
  159. )
  160. for ind, strOut = range lstMissions {
  161. if strings.Contains(strOut, `Проведи одну войну<br/>`) {
  162. isFind = true
  163. break
  164. }
  165. }
  166. if !isFind {
  167. return
  168. }
  169. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  170. ind += 23
  171. strOut = lstMissions[ind]
  172. if !strings.Contains(strOut, `>Получить награду<`) {
  173. return
  174. }
  175. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  176. strLink := lstLink[1]
  177. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  178. strLink = "https://wartank.ru/missions/" + lstLink[0]
  179. lstMissions, err := sf.сеть.Get(strLink)
  180. if err != nil {
  181. // log._rintf("ERRO Миссии.battleWar(): при выполнении GET-запроса, err=\n\t%v\n", err)
  182. return
  183. }
  184. if err := sf.СтрОбновить(lstMissions); err != nil {
  185. // log._rintf("ERRO Миссии.battleWar(): при обновлении lstMissions, err=\n\t%v\n", err)
  186. return
  187. }
  188. }
  189. // Проверяет награду наступательного сражения
  190. func (сам *Миссии) сражениеНаступление() {
  191. var (
  192. strOut string
  193. isFind bool
  194. ind int
  195. lstMissions = сам.СписПолучить()
  196. )
  197. if len(lstMissions) == 0 {
  198. if ош := сам.сеть.UpdateLst(); ош != nil {
  199. log.Printf("Миссии.сражениеНаступление(): при обновлении HTML миссий, ош=\n\t%v\n", ош)
  200. return
  201. }
  202. lstMissions = сам.СписПолучить()
  203. }
  204. for ind, strOut = range lstMissions {
  205. if strings.Contains(strOut, "Проведи одно наступательное сражение<br/>") {
  206. isFind = true
  207. break
  208. }
  209. }
  210. if !isFind {
  211. return
  212. }
  213. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  214. ind += 23
  215. strOut = lstMissions[ind]
  216. if !strings.Contains(strOut, `>Получить награду<`) {
  217. return
  218. }
  219. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  220. strLink := lstLink[1]
  221. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  222. strLink = "https://wartank.ru/missions/" + lstLink[0]
  223. lstMissions, err := сам.сеть.Get(strLink)
  224. if err != nil {
  225. // log._rintf("ERRO Миссии.battleAttack(): при выполнении GET-запроса, err=\n\t%v\n", err)
  226. return
  227. }
  228. if err := сам.СтрОбновить(lstMissions); err != nil {
  229. // log._rintf("ERRO Миссии.battleAttack(): при обновлении lstMissions, err=\n\t%v\n", err)
  230. return
  231. }
  232. }
  233. // Проверяет награду за схватку
  234. func (sf *Миссии) battleDogFyting() {
  235. var (
  236. strOut string
  237. lstMissions = sf.СписПолучить()
  238. isFind bool
  239. ind int
  240. )
  241. for ind, strOut = range lstMissions {
  242. if strings.Contains(strOut, `Проведи одну схватку<br/>`) {
  243. isFind = true
  244. break
  245. }
  246. }
  247. if !isFind {
  248. return
  249. }
  250. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  251. ind += 23
  252. strOut = lstMissions[ind]
  253. if !strings.Contains(strOut, `>Получить награду<`) {
  254. return
  255. }
  256. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  257. strLink := lstLink[1]
  258. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  259. strLink = "https://wartank.ru/missions/" + lstLink[0]
  260. lstMissions, err := sf.сеть.Get(strLink)
  261. if err != nil {
  262. // log._rintf("ERRO Миссии.battleDogFyting(): при выполнении GET-запроса, err=\n\t%v\n", err)
  263. return
  264. }
  265. if err := sf.СтрОбновить(lstMissions); err != nil {
  266. // log._rintf("ERRO Миссии.battleDogFyting(): при обновлении lstMissions, err=\n\t%v\n", err)
  267. return
  268. }
  269. }
  270. // Проверяет награду за ресурсы
  271. func (sf *Миссии) makeResource() {
  272. var (
  273. strOut string
  274. lstMissions = sf.СписПолучить()
  275. isFind bool
  276. ind int
  277. )
  278. for ind, strOut = range lstMissions {
  279. if strings.Contains(strOut, `Произведи на базе 10 ресурсов<br/>`) {
  280. isFind = true
  281. break
  282. }
  283. }
  284. if !isFind {
  285. return
  286. }
  287. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  288. ind += 23
  289. strOut = lstMissions[ind]
  290. if !strings.Contains(strOut, `>Получить награду<`) {
  291. return
  292. }
  293. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  294. strLink := lstLink[1]
  295. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  296. strLink = "https://wartank.ru/missions/" + lstLink[0]
  297. lstMissions, err := sf.сеть.Get(strLink)
  298. if err != nil {
  299. // log._rintf("ERRO Миссии.makeResource(): при выполнении GET-запроса, err=\n\t%v\n", err)
  300. return
  301. }
  302. if err := sf.СтрОбновить(lstMissions); err != nil {
  303. // log._rintf("ERRO Миссии.makeResource(): при обновлении lstMissions, err=\n\t%v\n", err)
  304. return
  305. }
  306. }
  307. // Проверяет награду за ресурсы
  308. func (sf *Миссии) upMan() {
  309. var (
  310. strOut string
  311. lstMissions = sf.СписПолучить()
  312. isFind bool
  313. ind int
  314. )
  315. for ind, strOut = range lstMissions {
  316. if strings.Contains(strOut, `Прокачай экипаж на 100 опыта экипажа<br/>`) {
  317. isFind = true
  318. break
  319. }
  320. }
  321. if !isFind {
  322. return
  323. }
  324. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  325. ind += 23
  326. strOut = lstMissions[ind]
  327. if !strings.Contains(strOut, `>Получить награду<`) {
  328. return
  329. }
  330. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  331. strLink := lstLink[1]
  332. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  333. strLink = "https://wartank.ru/missions/" + lstLink[0]
  334. lstMissions, err := sf.сеть.Get(strLink)
  335. if err != nil {
  336. // log._rintf("ERRO Миссии.upMan(): при выполнении GET-запроса, err=\n\t%v\n", err)
  337. return
  338. }
  339. if err := sf.СтрОбновить(lstMissions); err != nil {
  340. // log._rintf("ERRO Миссии.upMan(): при обновлении lstMissions, err=\n\t%v\n", err)
  341. return
  342. }
  343. // log._rintf("INFO Миссии.upMan(): награда получена\n")
  344. }
  345. // Проверяет награду за топливо
  346. func (sf *Миссии) топливоДив() {
  347. var (
  348. strOut string
  349. lstMissions = sf.СписПолучить()
  350. isFind bool
  351. ind int
  352. )
  353. for ind, strOut = range lstMissions {
  354. if strings.Contains(strOut, `Получи топливо в дивизии<br/>`) {
  355. isFind = true
  356. break
  357. }
  358. }
  359. if !isFind {
  360. return
  361. }
  362. // <a class="simple-but border" href="?157-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  363. ind += 19
  364. strOut = lstMissions[ind]
  365. if !strings.Contains(strOut, `>Получить награду</`) {
  366. return
  367. }
  368. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  369. strLink := lstLink[1]
  370. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  371. strLink = "https://wartank.ru/missions/" + lstLink[0]
  372. lstMissions, err := sf.сеть.Get(strLink)
  373. if err != nil {
  374. // log._rintf("ERRO Миссии.makeFuel(): при выполнении GET-запроса, err=\n\t%v\n", err)
  375. return
  376. }
  377. if err := sf.СтрОбновить(lstMissions); err != nil {
  378. // log._rintf("ERRO Миссии.makeFuel(): при обновлении lstMissions, err=\n\t%v\n", err)
  379. return
  380. }
  381. // log._rintf("INFO Миссии.makeFuel(): награда получена")
  382. }
  383. // Проверяет награду 5 боёв
  384. func (sf *Миссии) battle5Fiting() {
  385. var (
  386. strOut string
  387. lstMissions = sf.СписПолучить()
  388. isFind bool
  389. ind int
  390. )
  391. for ind, strOut = range lstMissions {
  392. if strings.Contains(strOut, `Проведи 5 боев<br/>`) {
  393. isFind = true
  394. break
  395. }
  396. }
  397. if !isFind {
  398. return
  399. }
  400. // <a class="simple-but border" href="?113-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  401. ind += 23
  402. strOut = lstMissions[ind]
  403. if !strings.Contains(strOut, `>Получить награду<`) {
  404. return
  405. }
  406. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  407. strLink := lstLink[1]
  408. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  409. strLink = "https://wartank.ru/missions/" + lstLink[0]
  410. lstMissions, err := sf.сеть.Get(strLink)
  411. if err != nil {
  412. // log._rintf("ERRO Миссии.battle5Fiting(): при выполнении GET-запроса, err=\n\t%v\n", err)
  413. return
  414. }
  415. if err := sf.СтрОбновить(lstMissions); err != nil {
  416. // log._rintf("ERRO Миссии.battle5Fiting(): при обновлении lstMissions, err=\n\t%v\n", err)
  417. return
  418. }
  419. }
  420. // Проверяет награду 10 боёв
  421. func (sf *Миссии) battle10Fiting() {
  422. var (
  423. strOut string
  424. lstMissions = sf.СписПолучить()
  425. isFind bool
  426. ind int
  427. )
  428. for ind, strOut = range lstMissions {
  429. if strings.Contains(strOut, `Уничтожь в бою 10 танков<br/>`) {
  430. isFind = true
  431. break
  432. }
  433. }
  434. if !isFind {
  435. return
  436. }
  437. // <a class="simple-but border" href="?113-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  438. ind += 23
  439. strOut = lstMissions[ind]
  440. if !strings.Contains(strOut, `>Получить награду<`) {
  441. return
  442. }
  443. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  444. strLink := lstLink[1]
  445. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  446. strLink = "https://wartank.ru/missions/" + lstLink[0]
  447. lstMissions, err := sf.сеть.Get(strLink)
  448. if err != nil {
  449. // log._rintf("ERRO Миссии.battle10Fiting(): при выполнении GET-запроса, err=\n\t%v\n", err)
  450. return
  451. }
  452. if err := sf.СтрОбновить(lstMissions); err != nil {
  453. // log._rintf("ERRO Миссии.battle10Fiting(): при обновлении lstMissions, err=\n\t%v\n", err)
  454. return
  455. }
  456. }
  457. // Проверяет награду за 6 побед подряд
  458. func (sf *Миссии) battle6win() {
  459. var (
  460. strOut string
  461. lstMissions = sf.СписПолучить()
  462. isFind bool
  463. ind int
  464. )
  465. for ind, strOut = range lstMissions {
  466. if strings.Contains(strOut, `Победи 6 раз подряд<br/>`) {
  467. isFind = true
  468. break
  469. }
  470. }
  471. if !isFind {
  472. return
  473. }
  474. // <a class="simple-but border" href="?113-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  475. ind += 25
  476. strOut = lstMissions[ind]
  477. if !strings.Contains(strOut, `>Получить награду<`) {
  478. return
  479. }
  480. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  481. strLink := lstLink[1]
  482. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  483. strLink = "https://wartank.ru/missions/" + lstLink[0]
  484. lstMissions, err := sf.сеть.Get(strLink)
  485. if err != nil {
  486. // log._rintf("ERRO Миссии.battle6win(): при выполнении GET-запроса, err=\n\t%v\n", err)
  487. return
  488. }
  489. if err := sf.СтрОбновить(lstMissions); err != nil {
  490. // log._rintf("ERRO Миссии.battle6win(): при обновлении lstMissions, err=\n\t%v\n", err)
  491. return
  492. }
  493. }