missions.go 17 KB

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