missions.go 16 KB

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