missions.go 17 KB

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