missions.go 17 KB

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