using AutoManager.Commons; using AutoManager.Recognition.Russ; using HtmlAgilityPack; using System; using System.Collections.Generic; using System.ComponentModel.Composition; using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; using AutoManager.Plugins; namespace All1Group.DueBux { [PluginInfo(PluginName = "[All1Group] DueBux")] [Export(typeof(All1PluginScript))] class DueBux : All1PluginScript { private Queue<string> _linkQueue; private string getGridChances(string inputStr, string leftSideStr) { Regex regex = new Regex(string.Format("{0}\s*:\s*([^,<]+)", leftSideStr)); //Chance(s) left: 13</span> Match m = regex.Match(inputStr); if (m.Groups.Count > 1) { return m.Groups[1].Value; } return null; } private string getVerLink(string inputStr, string leftSideStr) { Regex regex = new Regex(string.Format("{0}\s*"\s*([^,"]+)", leftSideStr)); Match m = regex.Match(inputStr); if (m.Groups.Count > 1) { return m.Groups[1].Value; } return null; } // O. Begin public override All1ActionResult Begin(object arg) { Client.GetRequest("/"); return new All1NextMethodResult { NextMethod = SubmitLogin }; } // I. Đăng nhập private All1ActionResult SubmitLogin(object arg) { Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("email", Username); dic.Add("pass", Password); // data: email=f17withlove%40gmail.com&pass=DoiPassRoi%3AP // sau đó gửi request, request thuộc loại POST Client.PostRequest("login.php", dic, Client.Host + "/login.php"); // Trường hợp login fail thì quay lại hàm SubmitLogin if (!Client.ResponseStr.Contains("/logout.php")) //?i=lo& { return new All1NextMethodResult { NextMethod = SubmitLogin }; } // Trường hợp login ok thì bắt đầu tới hàm lấy list ads else { return new All1NextMethodResult { NextMethod = GetAdsList }; } }// OK vậy là Login xong, giở debug thử xem tool có login giống như trên web không // II. Lấy danh sách ads private All1ActionResult GetAdsList(object arg) { // 4. Vào link chứa ads Client.GetRequest("dash/index.php"); // 5. Lấy list ads theo những gì vừa quan sát HtmlNodeCollection nodes = Client.ResponseDoc.DocumentNode.SelectNodes("//div[@id='addblock']"); //addblock _linkQueue = new Queue<string>(); if (nodes != null) { foreach (HtmlNode node in nodes) { // Ads đã view thì bỏ qua if (node.OuterHtml.Contains("background:grey")) continue; // Lấy ads chưa view else { if (!IsCheatLink(node.ParentNode.ParentNode.InnerText)) { string url = node.Attributes["onclick"].Value; // Xử lý html và string sẽ đi sâu vào ở các bài sau _linkQueue.Enqueue("/dash/" + url.Replace("')", "").Replace("window.open('", "")); } } } } return new All1NextMethodResult { NextMethod = ProcessAdPage }; } // III. View ads private All1ActionResult ProcessAdPage(object arg) { if (_linkQueue.Count <= 0) { return new All1NextMethodResult { NextMethod = End }; } // 1. Vào link mỗi ads string currentAdLink = _linkQueue.Peek(); Client.GetRequest(currentAdLink, Client.Host + "/dash/index.php"); //url: // 2. Lấy timer (thời gian đếm ngược với mỗi ads) string timerStr; if (Client.ResponseStr.Contains("270")) timerStr = "30"; else if (Client.ResponseStr.Contains("90")) timerStr = "10"; else timerStr = "30"; // Lấy link verify ads để gửi request string verLink = getVerLink(Client.ResponseStr, "url: "); int timer = int.Parse(timerStr); return new All1WaitingAdResult { WaitingTime = timer, RemainAds = _linkQueue.Count, NextMethod = (o) => { // 3. Theo dõi request lên server để 1 ads được trả tiền => viết code theo Client.GetRequest("dash/" + verLink, Client.ResponseFullUrl, true); _linkQueue.Dequeue(); return new All1NextMethodResult { NextMethod = ProcessAdPage }; } }; } // Hàm view grid -> tạm bỏ qua private All1ActionResult GridViewing(object arg) { int gridLeft = 1; if (gridLeft <= 0) { return new All1NextMethodResult { NextMethod = GridViewing }; } Random rd = new Random(); Client.GetRequest("dash/play_grid.php", Client.Host + "/dash/play_grid.php"); Client.GetRequest("dash/gridview.php?c=" + rd.Next(0, 20) + "&m=" + rd.Next(100, 600)); string verLink = getVerLink(Client.ResponseStr, "url: "); try { gridLeft = int.Parse(getGridChances(Client.ResponseStr, "Chance\(s\) left").Trim()); } catch { gridLeft--; } return new All1WaitingAdResult { WaitingTime = 5, RemainAds = _linkQueue.Count, NextMethod = (o) => { Client.GetRequest("dash/" + verLink, Client.ResponseFullUrl, true); return new All1NextMethodResult { NextMethod = GridViewing }; } }; } // IV. Kết thúc public override All1ActionResult End(object arg) { Client.GetRequest("dash/"); HtmlNode textNode = Client.ResponseDoc.DocumentNode.SelectSingleNode("//strong[@style='color:white']"); //addblock //color:white Amount = ParseHelper.GetAmount(textNode.InnerText.Trim().Replace("$", "")); return new All1ActionResult { Message = "Finish" }; } } }