using AllBase; using AllBase.Helper; using AllBase.Model.Result; using CefSharp; using CefSharp.WinForms; using TemuKJD.ChatForms.ChatHelper; using TemuKJD.ChatForms.ChatModel; using TemuKJD.Helper; using TemuKJD.KJDForms.BaseForms; using TemuKJD.KJDForms.ShopForms; using TemuKJD.KJDForms.ToolForms; using NaiBa.CefHelper; using NaiBa.CefHelper.Handler; using NaiBa.Util.Extension; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Media; using System.Runtime.InteropServices; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Work; namespace TemuKJD.ChatForms { public partial class ChatForm : BaseForm { public delegate void SearchResultReceivedHandler(ShopLoginInfo shop); /// /// 查询结果事件通知 /// public event SearchResultReceivedHandler SearchResultReceived; public delegate void InfomationReceivedHandler(string infomation); /// /// 消息事件通知,比如:异常等通知 /// /// public event InfomationReceivedHandler InfomationReceived; public static ShopLoginInfo currentShop = null; //ChromiumWebBrowser mainWebBrowser = new ChromiumWebBrowser("https://im.jinritemai.com/pc_seller/main/chat?selfId=4292110529608375"); ChromiumWebBrowser mainWebBrowser = null; /// /// 弹出框列表 /// public static List lstChatMessageForm = new List(); public static Dictionary dicRowColor = new Dictionary(); public int LocationXY = 0; public int LocationSize = 200; private Point mouseOffset;//记录鼠标指针的坐标 private bool isMouseDown;//记录鼠标左键是否按下 const int Guying_HTLEFT = 10; const int Guying_HTRIGHT = 11; const int Guying_HTTOP = 12; const int Guying_HTTOPLEFT = 13; const int Guying_HTTOPRIGHT = 14; const int Guying_HTBOTTOM = 15; const int Guying_HTBOTTOMLEFT = 0x10; const int Guying_HTBOTTOMRIGHT = 17; protected override void WndProc(ref Message m) { switch (m.Msg) { case 0x0084: base.WndProc(ref m); Point vPoint = new Point((int)m.LParam & 0xFFFF, (int)m.LParam >> 16 & 0xFFFF); vPoint = PointToClient(vPoint); if (this.WindowState != FormWindowState.Maximized) { if (vPoint.X <= 5) if (vPoint.Y <= 5) m.Result = (IntPtr)Guying_HTTOPLEFT; else if (vPoint.Y >= ClientSize.Height - 5) m.Result = (IntPtr)Guying_HTBOTTOMLEFT; else m.Result = (IntPtr)Guying_HTLEFT; else if (vPoint.X >= ClientSize.Width - 5) if (vPoint.Y <= 5) m.Result = (IntPtr)Guying_HTTOPRIGHT; else if (vPoint.Y >= ClientSize.Height - 5) m.Result = (IntPtr)Guying_HTBOTTOMRIGHT; else m.Result = (IntPtr)Guying_HTRIGHT; else if (vPoint.Y <= 5) m.Result = (IntPtr)Guying_HTTOP; else if (vPoint.Y >= ClientSize.Height - 5) m.Result = (IntPtr)Guying_HTBOTTOM; } break; case 0x0201: //鼠标左键按下的消息 m.Msg = 0x00A1; //更改消息为非客户区按下鼠标 m.LParam = IntPtr.Zero; //默认值 m.WParam = new IntPtr(2);//鼠标放在标题栏内 base.WndProc(ref m); break; default: base.WndProc(ref m); break; } } public ChatForm() { InitializeComponent(); this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); ChatConfig.LoadChatSetting(); this.FormClosed += ChatForm_FormClosed; } private void ChatForm_FormClosed(object sender, FormClosedEventArgs e) { Process.GetCurrentProcess().Kill(); } private void ChatForm_Load(object sender, EventArgs e) { if (BaseClass.LogoImage != null) pbLogo.Image = BaseClass.LogoImage; if (BaseClass.Ico != null) this.Icon = BaseClass.Ico; else this.Icon = BaseClass.Ico = ImageBuild.ConvertToIcon(Properties.Resources.icon); SetTitle(); this.chkIsAutoReLogin.CheckedChanged -= chkIsAutoReLogin_CheckedChanged; this.chkIsAutoReply.CheckedChanged -= chkIsAutoReply_CheckedChanged; this.txtAutoReplyText.TextChanged -= txtAutoReplyText_TextChanged; this.cmbMessage.SelectedIndexChanged -= cmbMessage_SelectedIndexChanged; if (this.cmbMessage.Items.Contains(ChatConfig.ChatSettingConfig.MessageSound)) this.cmbMessage.SelectedItem = ChatConfig.ChatSettingConfig.MessageSound; else this.cmbMessage.SelectedIndex = 0; this.chkIsAutoReLogin.Checked = GlobalConfig.DouShopSettingParam.IsAutoDragLogin = ChatConfig.ChatSettingConfig.IsAutoReLogin; this.chkIsAutoReply.Checked = ChatConfig.ChatSettingConfig.IsAutoReply; this.txtAutoReplyText.Text = ChatConfig.ChatSettingConfig.AutoReplayText; this.chkIsAutoReLogin.CheckedChanged += chkIsAutoReLogin_CheckedChanged; this.chkIsAutoReply.CheckedChanged += chkIsAutoReply_CheckedChanged; this.txtAutoReplyText.TextChanged += txtAutoReplyText_TextChanged; this.cmbMessage.SelectedIndexChanged += cmbMessage_SelectedIndexChanged; SearchResultReceived += Chat_SearchResultReceived; InfomationReceived += Collect_InfomationReceived; if (mainWebBrowser == null) { mainWebBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); mainWebBrowser.KeyboardHandler = new KeyboardHandler(); mainWebBrowser.Dock = DockStyle.Fill; var lifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.NewTitleWindow); lifeSpanHandler.parent = mainWebBrowser; lifeSpanHandler.OnPop += MainLifeHandler_OnPop; mainWebBrowser.LifeSpanHandler = lifeSpanHandler; //mainWebBrowser.AddressChanged += mainWebBrowser_UrlChanged; mainWebBrowser.FrameLoadEnd += cefWebBrowser1_FrameLoadEnd; mainPanel.Controls.Add(mainWebBrowser); } Task.Run(() => { // 直到店铺加载完后再加载客服内容 while (!StartUp.IsShopInit) Thread.Sleep(100); SetMainBrowserUrl(GlobalConfig.ShopLoginList.FirstOrDefault()); LoadShop(); InitAutoExecute(); }); } public void SetTitle() { lblVersionInfo.Text = BaseClass.ToolName + " V" + BaseClass.Varsion + " - " + BaseClass.NickName; lblVersionName.Text = "[" + BaseClass.UserVersionString + "]"; Text = BaseClass.ShopName + "-" + BaseClass.ToolName; } private void cefWebBrowser1_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) { //ChromiumWebBrowser cefWebBrowser1 = (ChromiumWebBrowser)sender; //string url = cefWebBrowser1.Address; //if (url.Contains("/mallcenter/info/basic") && cefWebBrowser3.IsBrowserInitialized) //{ // Thread.Sleep(5000); // var shop = GetShopLoginInfo.Shops.Find(s => s != null && s.ShopName == ShopName); // string code = "document.getElementsByClassName('new-part')[1].innerHTML=\"
" + shop.Name + "?

当前状态不支持修改店铺名,您可一键开新店铺

\""; // cefWebBrowser3.GetBrowser().MainFrame.ExecuteJavaScriptAsync(code); //} } private void Chat_SearchResultReceived(ShopLoginInfo shop) { var r = dgvShop.Rows.Cast().FirstOrDefault(x => x.Cells["columnShopId"].Value.ToString() == shop.ShopId); if (r != null) { for (int i = 0; i < dgvShop.Rows.Count; i++) { var row = dgvShop.Rows[i]; if (row.Cells[0].Value.ToString() == shop.ShopId && shop != currentShop) { if (ShopChatCount.ContainsKey(shop.ShopId) && ShopChatCount[shop.ShopId] > 0) { Task.Run(() => { for (int j = 0; j < 4; j++) { Invoke(new Action(() => { row.DefaultCellStyle.BackColor = Color.White; })); Thread.Sleep(100); Invoke(new Action(() => { row.DefaultCellStyle.BackColor = Color.FromArgb(245, 95, 50); })); Thread.Sleep(100); Invoke(new Action(() => { row.DefaultCellStyle.BackColor = Color.FromArgb(245, 45, 10); })); Thread.Sleep(100); } }); } else if (row.DefaultCellStyle.BackColor != Color.White) { row.DefaultCellStyle.BackColor = Color.White; } break; } } } } private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData) { //{"check_spam_resp":{"decision":"PASS","verify_type":"","check_spam_detail":{}},"code":0,"data":{"reqId":"","action":null,"openStatus":2},"msg":"","request_arrived_time":1634629395771,"server_execution_end_time":1634629395782,"st":0} //{"check_spam_resp":{"decision":"PASS","verify_type":"","check_spam_detail":{}},"code":0,"data":{"reqId":"","action":null,"openStatus":2},"msg":"","request_arrived_time":1634629395771,"server_execution_end_time":1634629395782,"st":0} //{"ev_type":"batch","list":[{"ev_type":"http","payload":{"api":"xhr","request":{"url":"https://mssdk.snssdk.com/web/report?msToken=qPvfFS_fmS_qrYGcuc8r7tPrFv1vGGyKXz047DsUQwWwS71nflFsNILpxusx7CqhfcCoQqWRqYcsW3uWf8tDwormkmLX_Om59l2butcdH109&X-Bogus=DFSzswVLpIZCR-r8SzOrXdCr9FuN","protocol":"https","domain":"mssdk.snssdk.com","query":"msToken=qPvfFS_fmS_qrYGcuc8r7tPrFv1vGGyKXz047DsUQwWwS71nflFsNILpxusx7CqhfcCoQqWRqYcsW3uWf8tDwormkmLX_Om59l2butcdH109&X-Bogus=DFSzswVLpIZCR-r8SzOrXdCr9FuN","path":"/web/report","hash":"","method":"post","timestamp":1634629435132},"response":{"status":200,"is_custom_error":false,"timestamp":1634629435231,"headers":{"content-type":"text/plain; charset=utf-8"}},"duration":99},"common":{"bid":"mona_plugin","pid":"/pc_seller/main/chat","view_id":"/pc_seller/main/chat_1634628536182","user_id":"pigeon","device_id":"f24e230e-778c-46e5-a9b5-ed2df437c133","session_id":"f6dd538f-2d9d-4cb7-8c54-c06e238a71c8","release":"","env":"production","url":"https://im.jinritemai.com/pc_seller/main/chat","protocol":"https","domain":"im.jinritemai.com","path":"/pc_seller/main/chat","query":"","timestamp":1634629435132,"sdk_version":"0.3.10","sdk_name":"SDK_SLARDAR_WEB","context":{},"network_type":"4g","sample_rate":1}}]} //{"check_spam_resp":{"decision":"PASS","verify_type":"","check_spam_detail":{}},"code":0,"data":{"count":8},"msg":"","page":0,"request_arrived_time":1634629460322,"server_execution_end_time":1634629460336,"size":0,"st":0,"total":0} //{"check_spam_resp":{"decision":"PASS","verify_type":"","check_spam_detail":{}},"code":0,"data":{"count":1},"msg":"","page":0,"request_arrived_time":1634629460415,"server_execution_end_time":1634629460432,"size":0,"st":0,"total":0} if (responseData.Contains("un_replay_customer_num") || responseData.Contains("你好")) { Task.Run(() => { }); } } private void Collect_InfomationReceived(string infomation) { //try //{ // this.Invoke(new Action(() => // { // lblMsg.Text = infomation; // var data = infomation.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries); // if (data.Length == 2) // { // if (data[1] == FastCarCollect.FASTCAR_QUOTA_FINISH) // { // var shop = gridShop.Rows.Cast().FirstOrDefault(x => x.Cells["columnShopName"].Value.ToString() == data[0]); // if (shop != null) // { // shop.Cells["columnMsg"].Value = data[1]; // } // } // } // if (infomation == "修改出价结束") // this.btnStart.Enabled = true; // if (infomation == "暂停推广结束") // this.btnStop.Enabled = true; // })); //} //catch { } } void SearchNewMessageNofity(ShopLoginInfo shop) { if (SearchResultReceived != null) { Task.Run(() => { SearchResultReceived(shop); Thread.Sleep(1000); }); } } void InfomationNotify(string msg) { if (InfomationReceived != null) { InfomationReceived(msg); Thread.Sleep(200); } } public void DgvShopClick(ShopLoginInfo shop) { var r = dgvShop.Rows.Cast().FirstOrDefault(x => x.Cells["columnShopId"].Value.ToString() == shop.ShopId); if (r != null) { r.Cells[0].Selected = true; var sender = this.dgvShop; DataGridViewCellEventArgs e = new DataGridViewCellEventArgs(0, r.Index); dgvShop_CellClick(sender, e); } } private void dgvShop_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex < 0 || e.RowIndex < 0) return; string shopId = dgvShop.Rows[e.RowIndex].Cells["ColumnShopID"].Value?.ToString(); if (string.IsNullOrEmpty(shopId)) return; var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == shopId); if (shop == null) return; if (dgvShop.Columns[e.ColumnIndex].HeaderText == "登录状态" && dgvShop.Rows[e.RowIndex].Cells[e.ColumnIndex].Value?.ToString() == "未登录 点击登录") { Task.Run(() => { // 如需登录,引导至登录窗口,禁止从聊天窗口登录。 Invoke(new Action(() => { // 登录抖音小店 ShopLoginForm lf = new ShopLoginForm(shop); lf.ShowDialog(); if (ShopListForm.Instance == null) ShopListForm.Instance = new ShopListForm(); })); ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); LoadShop(new List() { shop }); if (shop.LoginStatus == "登录成功") { ShowChat(shop); while (shop.Chat.IsLoading) { Thread.Sleep(50); } } }); } } private void dgvShop_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex < 0 || e.RowIndex < 0) return; string shopId = dgvShop.Rows[e.RowIndex].Cells[0].Value?.ToString(); if (string.IsNullOrEmpty(shopId)) return; dgvShop.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White; var shop = GlobalConfig.ShopLoginList.Where(s => s.ShopId == shopId).FirstOrDefault(); if (shop == null) return; if (shop?.Chat != null) { //SetJsReaload(shop); currentShop = shop; shop.Chat.Dock = DockStyle.Fill; shop.Chat.BringToFront(); } Task.Run(() => { SetMainBrowserUrl(shop); }); } /// /// 更新店铺后台首页 /// /// private void SetMainBrowserUrl(ShopLoginInfo shop) { if (shop == null) return; var cookieManager = mainWebBrowser.RequestContext.GetCookieManager(null); cookieManager.DeleteCookiesAsync("jinritemai.com", null).Wait(); CEFBrowser.SetCookieAsync("jinritemai.com", shop.Cookies, cookieManager); mainWebBrowser.Load("https://fxg.jinritemai.com/ffa/mshop/homepage/index"); } /// /// /// /// /// false表示已经掉线,需要登录 public bool AutoCheckShopLoginStatus(ShopLoginInfo shop) { if (shop == null) return false; var browser = shop.Chat; if (browser.IsBrowserInitialized) { var jsStr = "function getNeedLogin() {\r\n" + "var bodyHtml = document.body.innerHTML;\r\n" + "return bodyHtml.indexOf('登录即代表同意') >= 0 || bodyHtml.indexOf('请输入密码') >= 0 || bodyHtml.indexOf('登录过期') >= 0 /*|| bodyHtml.indexOf('重新登录') >= 0*//*修改密码后出现*/;\r\n" + "}\r\n" + "getNeedLogin();\r\n"; var html = ""; if (browser.IsBrowserInitialized) { var t1 = browser.GetMainFrame().EvaluateScriptAsync(jsStr); t1.Wait(); html = t1.Result?.Result?.ToString()?.ToLower(); } if (html == "true") { Invoke(new Action(() => { browser.Load("about:blank"); })); return true; } } return false; } /// /// 店铺掉线自动重登 /// /// public void AutoReLogin(ShopLoginInfo shop) { try { // 如需登录,引导至登录窗口,禁止从聊天窗口登录。 Invoke(new Action(() => { // 登录抖音小店 ShopLoginForm lf = new ShopLoginForm(shop); lf.ShowDialog(); if (ShopListForm.Instance == null) ShopListForm.Instance = new ShopListForm(); })); ShopListForm.Instance.CheckShopLogin(new string[] { shop.ShopAccount }, false); LoadShop(new List() { shop }); if (shop.LoginStatus == "登录成功") { ShowChat(shop); while (shop.Chat.IsLoading) { Thread.Sleep(50); } } } catch { } } string GetBrowserHtml(ChromiumWebBrowser browser) { try { if (browser == null) return null; var task = browser.GetBrowser().MainFrame.GetSourceAsync(); bool isflag = task.Wait(5000); if (!isflag) return null; //Thread.Sleep(500); return task.Result; } catch { return null; } } public void ShowChat(ShopLoginInfo shop) { while (shop.Chat?.IsBrowserInitialized != true) { Thread.Sleep(50); } // 设置cef cookie if (shop.Chat != null && shop.Chat.IsBrowserInitialized) { var cookieManager = shop.Chat.RequestContext.GetCookieManager(null); cookieManager.DeleteCookiesAsync("jinritemai.com", null).Wait(); CEFBrowser.SetCookieAsync("jinritemai.com", shop.Cookies, shop.Chat.RequestContext.GetCookieManager(null)); //shop.Chat.Load("https://im.jinritemai.com/pc_seller/main/chat?selfId=4292110529608375"); if (shop.LoginStatus == "登录成功") shop.Chat.Load("https://im.jinritemai.com/pc_seller/main/chat"); } } public void LoadShop(List shopList = null) { if (shopList == null) shopList = new List(); if (shopList.Count == 0) shopList.AddRange(GlobalConfig.ShopLoginList); for (int i = 0; i < shopList.Count; i++) { var shop = shopList[i]; ShopLoginInfo result = new ShopLoginInfo(); result.ShopId = shop.ShopId; result.ShopAccount = shop.ShopAccount; result.LoginStatus = shop.LoginStatus; var r = dgvShop.Rows.Cast().FirstOrDefault(x => x.Cells["columnShopId"].Value.ToString() == shop.ShopId); this.Invoke(new Action(() => { int iGrid = 0; if (r == null) iGrid = dgvShop.Rows.Add(); else iGrid = r.Index; dgvShop.Rows[iGrid].Cells["ColumnShopID"].Value = shop.ShopId; // 店铺ID dgvShop.Rows[iGrid].Cells["ColumnShopName"].Value = shop.ShopAccount; // 店铺名称 dgvShop.Rows[iGrid].Cells["ColumnShopStatus"].Value = shop.LoginStatus == "未登录" ? "未登录 点击登录" : shop.LoginStatus; // 登录状态 dicRowColor[dgvShop.Rows[iGrid]] = dgvShop.Rows[iGrid].DefaultCellStyle.BackColor; if (shop.Chat == null) { LocationXY += 5; shop.X = LocationXY % LocationSize; shop.Y = LocationXY / LocationSize; RequestContextSettings requestContextSettings = new RequestContextSettings(); requestContextSettings.PersistSessionCookies = false; requestContextSettings.PersistUserPreferences = false; try { var cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); //new ChromiumWebBrowser("https://im.jinritemai.com/pc_seller/main/chat?selfId=4292110529608375"); CustomResourceRequestHandler resourceRequestHandler = new CustomResourceRequestHandler(); resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete; cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler); cefWebBrowser.KeyboardHandler = new KeyboardHandler(); var lifeHandler = new LifeSpanHandlerLocal(PopWindowType.NewTitleWindow); lifeHandler.OnPop += LifeHandler_OnPop; lifeHandler.parent = cefWebBrowser; cefWebBrowser.LifeSpanHandler = lifeHandler; cefWebBrowser.RequestContext = new RequestContext(requestContextSettings); cefWebBrowser.Dock = DockStyle.Fill; //DockStyle.None; cefWebBrowser.Location = new Point(shop.X, shop.Y); shop.Chat = cefWebBrowser; panel1.Controls.Add(shop.Chat); if (i == 0) currentShop = shop; Task.Run(() => { ShowChat(shop); }); } catch (Exception ex) { return; } } })); } } private void MainLifeHandler_OnPop(object sender, PopData e) { var targetUrl = e.Url; var lifeHandler = sender as LifeSpanHandlerLocal; Task.Run(() => { if (lifeHandler.parent != null) { var cookies = CEFBrowser.GetCookieList("", lifeHandler.parent.RequestContext.GetCookieManager(null)); Invoke(new Action(() => { CefForm cefForm = new CefForm(targetUrl, cookies); cefForm.Show(); })); } }); } private void LifeHandler_OnPop(object sender, PopData e) { var targetUrl = e.Url; var lifeHandler = sender as LifeSpanHandlerLocal; Task.Run(() => { if (e.Url.StartsWith("https://haohuo.jinritemai.com/views/product/item")) { var productId = BaseRegex.GetMatchRegexString(ref targetUrl, "&id=(\\d{5,30})"); if (!string.IsNullOrEmpty(productId)) { long product_id = productId.ParseToLong(); if (product_id > 0) { string urlx = BaseClass.LoginApiUrl + "?obj=upshopid/upid_dd&act=get"; string datax = "&pid=" + product_id + "&table=" + (product_id % 1024); string htmlx = GetHtml.PostUtf8(urlx, UserLogin.GetSignaturex("", "") + datax); string id = BaseRegex.GetMatchRegexString(htmlx, @"([\d]+)"); if (htmlx.StartsWith("tb")) targetUrl = "https://item.taobao.com/item.htm?id=" + id; if (htmlx.StartsWith("pd")) targetUrl = "https://mobile.yangkeduo.com/goods.html?goods_id=" + id; if (htmlx.StartsWith("al")) targetUrl = "https://detail.1688.com/offer/" + id + ".html"; if (htmlx.StartsWith("dy")) targetUrl = "https://weidian.com/item.html?itemID=" + id; } } } if (lifeHandler.parent != null) { var cookies = CEFBrowser.GetCookieList("", lifeHandler.parent.RequestContext.GetCookieManager(null)); Invoke(new Action(() => { CefForm cefForm = new CefForm(targetUrl, cookies); cefForm.Show(); })); } }); } public Dictionary ShopChatCount = new Dictionary(); /// /// 获取店铺是否有信息 /// /// /// private void button4_Click(object sender, EventArgs e) { //string url = " https://fxg.jinritemai.com/byteshop/broadcast/getIMUnReplyCustomerNum?appid=1&__token=cbaf9d55f488de9de759c2e9de4f9152&_lid=246050185023&_signature=_02B4Z6wo00901prG3SwAAIDBKjcx559pBB6awtmAAMZ2InLzVWKpqWJnptmwhx6Axo5nVtr92zD-a2wI1GAiNviGKrpRnJTAL.hhmniDgXMMnFfzXb7nVj4tluChrVjjRQtlDCcwZSSPWy.13f"; //string refere = "https://fxg.jinritemai.com/ffa/mshop/homepage/index"; //string cookies = "ttcid=e377739c28ce4d18874fa6254b5aae0725; d_ticket=fd4f4a000273570e1b0a578f3c4b63e9c94fb; n_mh=7LrrRmeUceh3vjPZWa4C3h7B_APxodsUr7zuYy75V90; passport_csrf_token_default=b4ef061103fdd818fe8746ec1fae1aef; passport_csrf_token=b4ef061103fdd818fe8746ec1fae1aef; gfpart_1.0.0.94_74391=1; gfpart_1.0.0.695_75006=0; SHOP_ID=9050819; PIGEON_CID=4292110529608375; uidpasaddaehruigqreajf=0; s_v_web_id=verify_kqc1ijuf_5YXfMRjv_Moz5_4gr6_8XNu_0p8ukrjQchfx; ttwid=1%7CQ2FXDv1XIHPVZa_hjjk6pZMPJKpmh59Y9QK9SmHGygE%7C1624866462%7Cba22e39f1164af8fa41006ee4c3be28cc85a33c88bb6c8ac62c67dc10e947420; sso_uid_tt=c365c31887ab82602bc259ea1b07a262; sso_uid_tt_ss=c365c31887ab82602bc259ea1b07a262; toutiao_sso_user=ebe18833115e031bff671e946179e29a; toutiao_sso_user_ss=ebe18833115e031bff671e946179e29a; odin_tt=d28cc07aacedc7065370ef3130a156b0307970e1a25f4cc0771804fad95158f8062f22e2e561a5be77c3ac019926791629bec184551ea5e752dc57925bf8c65a; gfpart_1.0.0.4760_75570=1; ucas_sso_c0_ss=CkEKBTEuMC4wEJ6Ig6Db5d_sYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0C1_uWGBki1sqKJBlCOvKLE77ansWBYbhIUidlOg6VtyUt7SIO_Fb0g2QfJAPc; ucas_sso_c0=CkEKBTEuMC4wEJ6Ig6Db5d_sYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0C1_uWGBki1sqKJBlCOvKLE77ansWBYbhIUidlOg6VtyUt7SIO_Fb0g2QfJAPc; ucas_c0_ss=CkEKBTEuMC4wEI6Ij_7O5d_sYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0C1_uWGBki1sqKJBlCOvKLE77ansWBYbhIU1pl84_FKJDuhWOeYpRoGfYdTYro; sid_guard=6b626ebb4c35cfa047b5336166d9f38f%7C1624866613%7C5184000%7CFri%2C+27-Aug-2021+07%3A50%3A13+GMT; uid_tt=124a8219f77a85f9a7440449283ba2af; uid_tt_ss=124a8219f77a85f9a7440449283ba2af; sid_tt=6b626ebb4c35cfa047b5336166d9f38f; sessionid=6b626ebb4c35cfa047b5336166d9f38f; sessionid_ss=6b626ebb4c35cfa047b5336166d9f38f; ucas_c0=CkEKBTEuMC4wEI6Ij_7O5d_sYBjmJiC9k9DP4oyUBCiwITC39dDb7fTPB0C1_uWGBki1sqKJBlCOvKLE77ansWBYbhIU1pl84_FKJDuhWOeYpRoGfYdTYro; PHPSESSID=867244d48bdc5b1e00fcfbfb70b0c755; PHPSESSID_SS=867244d48bdc5b1e00fcfbfb70b0c755; need_choose_shop=0; login_info=%7B%22for_im_reply%22%3A%22867244d48bdc5b1e00fcfbfb70b0c755%22%7D; gftoken=NmI2MjZlYmI0Y3wxNjI0ODY2NjI3NDB8fDAGBgYGBgY; source=seo.baidu; Hm_lvt_b6520b076191ab4b36812da4c90f7a5e=1624517617,1624600241,1624866399,1625023259; Hm_lpvt_b6520b076191ab4b36812da4c90f7a5e=1625023261; tt_scid=IxysFV-v2TAGPLjDxdlg8h-dhjnwZ9NA7Cqz2oaUqu4irVH4n1Yiz3Hu72AeZh4F8425; MONITOR_WEB_ID=4292110529608375"; //string html = GetPostTaobaoHtml.UploadTaobao(url, refere, true, cookies); //int count = BaseRegex.GetIntJson(ref html, "un_replay_customer_num"); //string shopId = "111111"; //int oldCount = 0; //if (ShopChatCount.ContainsKey(shopId)) //{ // oldCount = ShopChatCount[shopId]; //} //if (oldCount == count) // return;//countinue; //ShopChatCount[shopId] = count; //if (count > 0) //{ // var shop = GlobalConfig.DouShopLoginList.Where(s => s.ShopId == shopId).FirstOrDefault(); // SearchNewMessageNofity(shop); //} } private void min_Click(object sender, EventArgs e) { WindowState = FormWindowState.Minimized; ShowInTaskbar = true; } private void max_Click(object sender, EventArgs e) { if (WindowState.Equals(FormWindowState.Normal)) { WindowState = FormWindowState.Maximized; max.Style.BackgroundImage = Properties.Resources.normal; max.StyleMouseOver.BackgroundImage = Properties.Resources.normal_hover; } else if (WindowState.Equals(FormWindowState.Maximized)) { WindowState = FormWindowState.Normal; max.Style.BackgroundImage = Properties.Resources.max; max.StyleMouseOver.BackgroundImage = Properties.Resources.max_hover; } } private void close_Click(object sender, EventArgs e) { if (BaseMsgForm.ShowConfirm("是否关闭客户端?", "系统提示", FormLevel.SMALL).DialogResult.Equals(DialogResult.Cancel)) return; this.Close(); } private void panel2_DoubleClick(object sender, EventArgs e) { if (WindowState.Equals(FormWindowState.Normal)) { WindowState = FormWindowState.Maximized; return; } if (WindowState.Equals(FormWindowState.Maximized)) { WindowState = FormWindowState.Normal; } } public void InitAutoExecute() { Task.Run(() => { while (true) { foreach (var shop in GlobalConfig.ShopLoginList) { try { Thread.Sleep(new Random(DateTime.Now.Millisecond).Next(300, 500)); bool needReLogin = AutoCheckShopLoginStatus(shop); if (ChatConfig.ChatSettingConfig.IsAutoReLogin && needReLogin) AutoReLogin(shop); if (shop.LoginStatus != "登录成功") continue; Thread.Sleep(new Random(DateTime.Now.Millisecond).Next(300, 500)); AutoReConnect(shop); Thread.Sleep(new Random(DateTime.Now.Millisecond).Next(300, 500)); AutoCloseMaskWindow(shop); Thread.Sleep(new Random(DateTime.Now.Millisecond).Next(300, 500)); var isNewMessage = AutoGetNewMessage(shop); while (isNewMessage && ChatConfig.ChatSettingConfig.IsAutoReply) { AutoReplyWithJs(shop); Thread.Sleep(new Random(DateTime.Now.Millisecond).Next(300, 500)); isNewMessage = AutoGetNewMessage(shop); } } catch (Exception ex) { } } } }); Task.Run(() => { var sleepTime = 1000; while (true) { Thread.Sleep(sleepTime); var jsStr = "function getVideo() {\r\n" + " var videos = document.getElementsByTagName('video')\r\n" + " if (videos && videos.length > 0) {\r\n" + " var src = videos[0].src;\r\n" + " videos[0].parentElement.parentElement.click();\r\n" + " return src;\r\n" + " //return '';\r\n" + " }\r\n" + " return '';\r\n" + "}" + "getVideo();\r\n"; if (currentShop?.Chat != null && currentShop.Chat.IsBrowserInitialized) { var t = currentShop.Chat.GetMainFrame().EvaluateScriptAsync(jsStr); t.Wait(); if (!string.IsNullOrEmpty(t.Result?.Result?.ToString())) { Invoke(new Action(() => { AllBase.GetHtml.OpenUrl(t.Result.Result.ToString()); })); } } } }); Task.Run(() => { var sleepTime = 2500; while (true) { try { Thread.Sleep(sleepTime); var jsStr1 = "function ClosePopWindow() {\r\n" + " var result = 'no_pop'\r\n" + " var item = document.getElementsByClassName('anticon-close-circle');\r\n" + " for(i = 0; i < item.length; i++) {\r\n" + " item[i].click();\r\n" + " result = 'success'\r\n" + " }\r\n" + " return result;\r\n" + "}\r\n" + "ClosePopWindow();\r\n"; var jsStr2 = "function clickPopWindow() {\r\n" + "var child = document.body.firstElementChild;\r\n" + "var element1 = null;\r\n" + " while (child) {\r\n" + " if (child.innerHTML.indexOf('知道了') >= 0) {\r\n" + " element1 = child;\r\n" + " if (child.firstElementChild) {\r\n" + " child = child.firstElementChild; continue;\r\n" + " } else break;\r\n" + " }\r\n" + " child = child.nextElementSibling;\r\n" + " }\r\n" + " if (element1) {\r\n" + " element1.click(); return 'success';\r\n" + " } else return 'no_pop';\r\n" + "}\r\n" + "clickPopWindow();\r\n"; if (mainWebBrowser.IsBrowserInitialized) { var t1 = mainWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr1); t1.Wait(); var t2 = mainWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr2); t2.Wait(); if (t1.Result?.Result?.ToString() == "success" || t2.Result?.Result?.ToString() == "success") sleepTime = Randomx.GetId(550, 650); else sleepTime = Randomx.GetId(2500, 3000); } } catch (Exception ex) { } } }); } private void chkIsAutoReLogin_CheckedChanged(object sender, EventArgs e) { ChatConfig.ChatSettingConfig.IsAutoReLogin = chkIsAutoReLogin.Checked; ChatConfig.SaveChatSettingParam(); GlobalConfig.DouShopSettingParam.IsAutoDragLogin = chkIsAutoReLogin.Checked; } private void chkIsAutoReply_CheckedChanged(object sender, EventArgs e) { ChatConfig.ChatSettingConfig.IsAutoReply = chkIsAutoReply.Checked; ChatConfig.SaveChatSettingParam(); } private void txtAutoReplyText_TextChanged(object sender, EventArgs e) { ChatConfig.ChatSettingConfig.AutoReplayText = txtAutoReplyText.Text; ChatConfig.SaveChatSettingParam(); } private void cmbMessage_SelectedIndexChanged(object sender, EventArgs e) { ChatConfig.ChatSettingConfig.MessageSound = this.cmbMessage.SelectedItem.ToString(); ChatConfig.SaveChatSettingParam(); } private void panel2_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { mouseOffset = new Point(-e.X, -e.Y); isMouseDown = true; } } private void panel2_MouseMove(object sender, MouseEventArgs e) { if (isMouseDown) { var control = sender as Control; if (control == null) return; //获取鼠标的位置 Point mousePos = MousePosition; var x = mouseOffset.X; var y = mouseOffset.Y; while (control.Parent != null && control.Parent != this) { x -= control.Location.X; y -= control.Location.Y; control = control.Parent; } mousePos.Offset(x, y); Location = mousePos; } } private void panel2_MouseUp(object sender, MouseEventArgs e) { isMouseDown = false; } /// /// 自动关闭遮罩层 /// /// public void AutoCloseMaskWindow(ShopLoginInfo shop) { if (shop?.Chat != null) { var browser = shop.Chat; var jsStr = "function clickMaskWindow() {\r\n" + " var masks = document.getElementsByClassName('ant-modal-wrap');\r\n" + " for (i = 0; i < masks.length; i++) {\r\n" + " masks[i].click();\r\n" + " }\r\n" + "}\r\n" + "clickMaskWindow();\r\n"; var t = browser.GetMainFrame().EvaluateScriptAsync(jsStr); t.Wait(); } } /// /// 自动重连 /// /// public void AutoReConnect(ShopLoginInfo shop) { if (shop?.Chat != null) { var browser = shop.Chat; var jsStr = "function reConnect() {\r\n" + "var child = document.body.firstElementChild;\r\n" + "var element1 = null;\r\n" + " while (child) {\r\n" + " if (child.innerHTML.indexOf('重新连接') >= 0) {\r\n" + " element1 = child;\r\n" + " if (child.firstElementChild) {\r\n" + " child = child.firstElementChild; continue;\r\n" + " } else break;\r\n" + " }\r\n" + " child = child.nextElementSibling;\r\n" + " }\r\n" + " if (element1) {\r\n" + " element1.click(); return 'success';\r\n" + " } else return 'failed'\r\n" + "}\r\n" + "reConnect();\r\n"; var t = browser.GetMainFrame().EvaluateScriptAsync(jsStr); t.Wait(); } } /// /// 自动回复 /// /// public void AutoReplyWithJs(ShopLoginInfo shop) { #if DEBUG //if (shop.ShopId != "9050819") // 测试模式只回复开箱小店 // return; #endif if (shop?.Chat == null) return; var webBrowser = shop.Chat; var host = webBrowser.GetBrowser().GetHost(); // 获取回复框坐标 int x = 0, y = 0; string code = "function getPos() { var box = document.getElementsByTagName('textarea');" + "if (box[0] == null) return '-|-';" + "var actualLeft = box[0].offsetLeft;" + "var actualTop = box[0].offsetTop;" + "var current = box[0].offsetParent;" + "while (current !== null) { actualLeft += current.offsetLeft; actualTop += current.offsetTop; current = current.offsetParent; }" + "return '' + actualLeft + '|' + actualTop;}" + "getPos();"; var task = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(code); task.Wait(); var result = task.Result?.Result?.ToString(); if (result != null && result != "-|-") { var arr = result.Split('|'); if (arr.Length == 2) { x = Convert.ToInt32(arr[0]); y = Convert.ToInt32(arr[1]); } Thread.Sleep(new Random(DateTime.Now.Millisecond).Next(500, 1000)); // 输入自动回复内容 string content = ChatConfig.ChatSettingConfig.AutoReplayText; var jsStr = "var txt1 = document.getElementsByTagName('textarea')[0]; txt1.focus(); txt1.click(); txt1.value='" + content + " '"; var response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); response.Wait(2000); // 模拟输入退格键 host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 8, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.None }); Thread.Sleep(250 + new Random(DateTime.Now.Millisecond).Next(250)); jsStr = "function getTextAreaText() { var txtArea = document.getElementsByTagName('textarea')[0]; if (txtArea) return txtArea.value; return ''; } getTextAreaText();"; var response1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr); response1.Wait(2000); if (response1.Result?.Result?.ToString() != content && response1.Result?.Result?.ToString() != content + " ") { LogSave.Add("自动回复失败,尝试使用剪贴板自动回复功能。-----" + response1.Result?.Result?.ToString()); int x1 = x + new Random(DateTime.Now.Millisecond).Next(5, 75); int y1 = y + new Random(DateTime.Now.Millisecond).Next(5, 25); host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, false, 1, CefEventFlags.None); // 按下鼠标左键 Thread.Sleep(70 + new Random(DateTime.Now.Millisecond).Next(50)); host.SendMouseClickEvent(x1, y1, MouseButtonType.Left, true, 1, CefEventFlags.None); // 松开鼠标左键 Thread.Sleep(500 + new Random(DateTime.Now.Millisecond).Next(500)); Invoke(new Action(() => { Clipboard.Clear(); Clipboard.SetDataObject("" + content); // 获取自动回复文字 })); // 黏贴 ctrl + v host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 86, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.ControlDown }); Thread.Sleep(250 + new Random(DateTime.Now.Millisecond).Next(250)); } // 回车回复 host.SendKeyEvent(new CefSharp.KeyEvent() { WindowsKeyCode = 13, Type = KeyEventType.RawKeyDown, Modifiers = CefEventFlags.None }); Thread.Sleep(250 + new Random(DateTime.Now.Millisecond).Next(250)); } } /// /// 判断是否有新留言 /// /// /// public bool AutoGetNewMessage(ShopLoginInfo shop) { bool isNewMessage = false; if (shop?.Chat != null) { var browser = shop.Chat; var jsStr = ""; jsStr += "function clickCurrentMessage() {\r\n"; jsStr += " var child = document.body.firstElementChild;\r\n"; jsStr += " var element1 = null;\r\n"; jsStr += " while (child) {\r\n"; jsStr += " var bodyHtml = child.innerHTML;\r\n"; jsStr += " if (bodyHtml.indexOf('messageList') >= 0)\r\n"; jsStr += " bodyHtml = bodyHtml.substring(0, bodyHtml.indexOf('messageList'));\r\n"; jsStr += " if (bodyHtml.indexOf('接待人数') >= 0)\r\n"; jsStr += " bodyHtml = bodyHtml.substring(0, bodyHtml.indexOf('接待人数'));\r\n"; jsStr += " if (bodyHtml.indexOf('<30秒<') >= 0 || bodyHtml.indexOf('>30秒<') >= 0 || bodyHtml.indexOf('分30秒<') >= 0 " + "|| bodyHtml.indexOf('>1分钟<') >= 0 || bodyHtml.indexOf('>2分钟<') >= 0 || bodyHtml.indexOf('>3分钟<') >= 0 " + "|| bodyHtml.indexOf('>4分钟<') >= 0 || bodyHtml.indexOf('>5分钟<') >= 0 || bodyHtml.indexOf('>6分钟<') >= 0 " + "|| bodyHtml.indexOf('>7分钟<') >= 0 || bodyHtml.indexOf('>8分钟<') >= 0 || bodyHtml.indexOf('>9分钟<') >= 0 " + "|| bodyHtml.indexOf('>10分钟<') >= 0) {\r\n"; jsStr += " element1 = child;\r\n"; jsStr += " if (child.firstElementChild) {\r\n"; jsStr += " child = child.firstElementChild; continue;\r\n"; jsStr += " } else break;\r\n"; jsStr += " }\r\n"; jsStr += " child = child.nextElementSibling;\r\n"; jsStr += " }\r\n"; jsStr += " if (element1) {\r\n"; if (ChatConfig.ChatSettingConfig.IsAutoReply) // 如果是自动回复,点击一下稍后要回复的用户名。 jsStr += " element1.click(); "; jsStr += " return 'success';\r\n"; jsStr += " } else {"; jsStr += " return 'no_message';"; jsStr += " }\r\n"; jsStr += "}\r\n"; jsStr += "clickCurrentMessage();\r\n"; var t = browser.GetMainFrame().EvaluateScriptAsync(jsStr); t.Wait(); if (t.Result?.Result?.ToString().StartsWith("success") == true) isNewMessage = true; //jsStr = ""; //jsStr += "var result='';\r\n"; //jsStr += "var nodes=[];\r\n"; //jsStr += "nodes.push(document.body);\r\n"; //jsStr += "function getItems() {\r\n"; //jsStr += " for (i = 0; i < nodes.length; i++) {\r\n"; //jsStr += " var node1 = nodes[i];\r\n"; //jsStr += " if ((node1.nodeType != 3) && (node1.nodeName != 'SCRIPT') &&\r\n"; //jsStr += " ((node1.innerHTML + '<').indexOf('30秒<') >= 0 || (node1.innerHTML + '<').indexOf('分钟<') >= 0 || (node1.innerHTML + '<').indexOf('小时<') >= 0)) {\r\n"; //jsStr += " if (!node1.firstElementChild || node1.endWith) { result += node1.parentElement.parentElement.innerHTML + '-----'; }\r\n"; //jsStr += " else { for (j = 0; j < node1.childNodes.length; j++) nodes.push(node1.childNodes[j]); }\r\n"; //jsStr += " }\r\n"; //jsStr += " }\r\n"; //jsStr += " return result;\r\n"; //jsStr += "}\r\n"; //jsStr += "getItems();\r\n"; } if (isNewMessage) { ShopChatCount[shop.ShopId] = 1; SearchNewMessageNofity(shop); if (!ChatConfig.ChatSettingConfig.IsNotShowMessageWindow) ShowMessageForm(shop); ShowFlash(); playSound(); } else { ShopChatCount[shop.ShopId] = 0; SearchNewMessageNofity(shop); CloseMessageForm(shop); } return isNewMessage; } /// /// 显示右下角消息弹框 /// /// private void ShowMessageForm(ShopLoginInfo shop) { if (!lstChatMessageForm.Any(f => f.shop == shop)) { Invoke(new Action(() => { ChatMessageForm cmf = new ChatMessageForm(shop, this); cmf.Dragable = false; cmf.ShowMinimizedBox = false; lstChatMessageForm.Add(cmf); Point p = new Point(Screen.PrimaryScreen.WorkingArea.Width - cmf.Width, Screen.PrimaryScreen.WorkingArea.Height); cmf.PointToScreen(p); cmf.Location = p; cmf.Show(); })); } } private void CloseMessageForm(ShopLoginInfo shop) { var form = lstChatMessageForm.FirstOrDefault(f => f.shop == shop); if (form != null) { Invoke(new Action(() => { lstChatMessageForm.Remove(form); form.Close(); this.TopMost = false; })); } } /// /// 任务栏闪烁 /// public void ShowFlash() { Task.Run(() => { for (int i = 0; i < 5; i++) { Invoke(new Action(() => { FlashWindow(Handle, true); })); Thread.Sleep(1100); } }); } /// /// 任务栏闪烁 /// /// /// /// [DllImport("user32.dll")] public static extern bool FlashWindow( IntPtr hWnd, // handle to window bool bInver // flash status ); private void button1_Click(object sender, EventArgs e) { var shop = GlobalConfig.ShopLoginList.FirstOrDefault(s => s.ShopId == "9050819"); Task.Run(() => { AutoReplyWithJs(shop); }); } private void pnlSet_Click(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { if (mainWebBrowser != null) { AllBase.GetHtml.OpenUrl(textBox1.Text); } } [DllImport("winmm.dll")] public static extern uint mciSendString(string lpstrCommand, string lpstrReturnString, uint uReturnLength, uint hWndCallback); /// /// 播放提示音 /// public void playSound() { string musicname = "默认提示音"; if (!string.IsNullOrEmpty(ChatConfig.ChatSettingConfig.MessageSound)) musicname = ChatConfig.ChatSettingConfig.MessageSound; if (musicname == "无") return; if (musicname == "默认提示音") musicname = "9527.wav"; else musicname = musicname + ".mp3"; if (musicname.Contains("wav")) { try { SoundPlayer sound = new SoundPlayer("temp/" + musicname); sound.Play(); } catch { } } if (musicname.Contains("mp3")) { try { mciSendString(@"close ""temp/" + musicname + @"""", null, 0, 0); mciSendString(@"open ""temp/" + musicname + @"""", null, 0, 0); mciSendString(@"play ""temp/" + musicname + @"""", null, 0, 0); } catch { } } } private void pnlRefresh_Click(object sender, EventArgs e) { LoadShop(); } private void chkNotShowMessageWindow_CheckedChanged(object sender, EventArgs e) { ChatConfig.ChatSettingConfig.IsNotShowMessageWindow = chkNotShowMessageWindow.Checked; ChatConfig.SaveChatSettingParam(); } } }