missions.go 17 KB

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