missions.go 16 KB

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