arena_missions.go 17 KB

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