// ==UserScript== // @name 淘跨1688自动发消息 // @namespace http://tampermonkey.net/ // @version 2025-10-23_12_20 // @description try to take over the world! // @author You // @match https://distributor.taobao.global/apps/open/imchat* // @icon https://www.google.com/s2/favicons?sz=64&domain=taobao.global // @connect erp.mtkjn.com // @connect 127.0.0.1 // @connect 192.168.0.26 // @grant GM_xmlhttpRequest // ==/UserScript== function getUrlParams(url) { const searchParams = new URLSearchParams(url.split('?')[1]); const params = {}; for (const [key, value] of searchParams.entries()) { params[key] = value; } return params; } const urlParams = getUrlParams(window.location.href); function callApi_followUp(){ GM_xmlhttpRequest({ method: "post", url: 'http://127.0.0.1:58080/buffet/admin-api/order/follow-up/follow-up', // url: 'https://erp.mtkjn.com/buffet/admin-api/order/follow-up/follow-up', data : JSON.stringify({ businessId: urlParams.purchaseOrderId, businessType: 'PURCHASE_ORDER', systemAutoFollow: true, content: "系统自动跟单", nextFollowCount: 3, }), dataType: "json", headers: { "Content-Type" : "application/json", "Authorization": "Bearer " + urlParams.buffetToken }, onload: function(response){ const responseText = response.responseText console.log('请求成功响应',responseText); window.close(); }, onerror: function(response){ console.log("请求失败",response); } }); } (function() { 'use strict'; // Your code here... console.log('淘跨1688自动发消息 loading') if(urlParams.sendMessage){ let intervalCount = 0 let loadMoreCount = 0 const interval = setInterval(()=>{ intervalCount = intervalCount + 1; console.log('sendMessage循环执行: ',intervalCount) // rc-scrollbars-view: 这是聊天窗口 if(document.getElementsByClassName('rc-scrollbars-view').length===0){ // 聊天窗口还没有加载 }else if(document.getElementsByClassName('rc-scrollbars-view')[0].innerText === '您尚未选择联系人'){ // 聊天窗口刚加载好, 还没有选中联系人 }else if(document.getElementsByClassName('rc-scrollbars-view')[0].innerText ==='下拉或点此加载更多'){ // 正在加载历史对话 }else if (document.getElementsByClassName('rc-scrollbars-view')[0].childNodes[0].innerText === '下拉或点此加载更多' && loadMoreCount < 1) { // 默认显示最近20条聊天内容, 点击可以再加载20条 // 通过点击滚动不行 // document.getElementsByClassName('rc-scrollbars-view')[0].childNodes[0].click() // 先只加载更多一次 console.log('加载更多消息一次') loadMoreCount++; document.getElementsByClassName('rc-scrollbars-view')[0].scrollTop = -10; } else { // 滚动到最新的消息,设置一个非常大的值就可以了 document.getElementsByClassName('rc-scrollbars-view')[0].scrollTop = 100000; console.log('历史聊天内容数量', document.getElementsByClassName('rc-scrollbars-view')[0].childNodes.length); // console.log('历史聊天内容', document.getElementsByClassName('rc-scrollbars-view')[0].innerText); if (document.getElementsByClassName('rc-scrollbars-view')[0].innerText.includes(urlParams.sendMessage)) { // 已经发送过了 console.log('自动填充发送消息', '相同消息已经发送过了, 跳过填充') // 推送一样跟单成功的消息, 后面可以接口加一层缓存, 避免重复推送, 影响也不大 if (urlParams.autoSend === 'true') { callApi_followUp() } } else { console.log('自动填充发送消息', '开始') const edit_dom = document.getElementsByClassName('send-box')[0].getElementsByClassName('edit')[0]; edit_dom.innerText = urlParams.sendMessage edit_dom.dispatchEvent(new InputEvent('input')) if (urlParams.autoSend === 'true') { console.log('点击发送按钮自动发送消息') document.getElementsByClassName('send-text')[0].click() clearInterval(interval); setTimeout(()=>{ // 点击发送之后, 等待2秒钟检查对话框中是否有该消息, 有的话表示发送成功 callApi_followUp() },2000) } } clearInterval(interval); } if(intervalCount>60){ // 加一个兜底的限制 clearInterval(interval) } },1000) } })();