小贱鸡自动回复API已经不可以用了,现在改良接入图灵机器人API
360chrome浏览器团队翻译了部分谷歌插件
地址:
具体封装插件的方法请参考开发文档。
具体代码如下:
background.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | //在当前URL下运行 var status = 0; //0停止 1运行 //消息传递监听 onRequest chrome.extension.onRequest.addListener( function (request, sender, sendResponse) { var text = request.text; var nick = request.nick; console.log(sender.tab ? "from a content script:" + sender.tab.url : "from the extension" ); console.log( "收到消息:" + text); if (text != null && text.length > 0) { console.log( "请求机器人获取回复" ); //请求机器人获取回复 tulingQuery(nick,text, function (content,data) { sendResponse({ dstContent : content, reply : data }); }); } else { sendResponse({ reply : "未识别出留言内容" }); } }); chrome.browserAction.onClicked.addListener( function (tab) { if (tab.url.indexOf( "wx.qq.com" ) >= 0) { //对 contentScript 发送消息 if (status == 0) status = 1; else status = 0; console.log( "send request" ); chrome.tabs.sendRequest(tab.id, { status : status }, function (response) { console.log(response); }); //run(); } else { alert( "这个只能在微信web运行!" ); console.log( "只能在微信web运行" ); } }); //图灵机器人回复 function tulingQuery(userid, txt, callback) { $.ajax({ url : '' , type : 'get' , data : { key : 'e64ad48100081ab77b668aa3105fe552' , info : txt, userid : userid }, success : function (data) { console.log(data); if (callback) callback(txt, data.text); }, error : function () {} }); } // chrome.tabs.executeScript(null, {code: "console.log(666);"}); |
content_script.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | window.confirm = function () {} var GSid, wx = new WX(); //消息传递监听 onRequest chrome.extension.onRequest.addListener( function (request, sender, sendResponse) { var status = request.status; console.log(sender.tab ? "from a content script:" + sender.tab.url : "from the extension" ); console.log( "收到消息:" + status); if (status == 1) { //运行 GSid = setInterval( function () { wx.reload(); var item = wx.getReply(); if (item.title == "红包家族" ) { wx.openLatestRoom(); return ; } if (!wx.isReplied(item) && item.text != "" ) { console.log( "判断是否回复过了" ); console.log(item); console.log( "未回复过" ); wx.replyComplete(item); sendToExtension(item, function (content, reply) { //提交回复 console.log( "机器人回复:" + reply); wx.putReply(item, reply + "[机器人测试回复]" ); }); } else { wx.replyComplete(item); wx.openLatestRoom(); } console.log( "扫描回复ing..." ); }, 3000); alert( "自动回复启动" ); console.log( "自动回复启动" ); } else { //停止 clearInterval(GSid); alert( "自动回复停止" ); console.log( "自动回复停止" ); } sendResponse({ farewell : "contentScript 收到了消息" }); }); //对插件发送消息 function sendToExtension(item, callbackFun) { console.log( "send request" ); chrome.extension.sendRequest({ text : item.text, nick : item.nick }, function (response) { var reply = response.reply; var content = response.dstContent; console.log(reply); if (callbackFun) callbackFun(content, reply); }); } //微信操作对象 var wx = new WX(); function WX() { var thisObj = this ; //微信所有者 this .wxOwner = function () { return $( ".display_name" ).text(); }; //获得最新的回复内容 this .getReply = function () { var reply = {}; var $lst = $( "[ng-switch] .you" ); //未回复的列表 var $info = $lst.not( '[reply]' ).first(); //未回复的记录 if ($info != null && $info.length > 0) { reply[ "text" ] = $info.find( ".js_message_plain" ).text(); //未回复的内容 reply[ "nick" ] = $info.find( ".avatar" ).attr( "title" ); //未回复的备注名称 reply[ "title" ] = $info.parents( '.chat_bd.scroll-wrapper:first' ).prev().find( '.title_name' ).text(); //聊天框title reply[ "touser" ] = $info.parents( '[jquery-scrollbar]' ).attr( 'data-cm' ); reply[ "touser" ] = JSON.parse(reply[ "touser" ]).username; reply[ "index" ] = $lst.index($info); reply[ "item" ] = $info; } return reply; }; //提交回复 this .putReply = function (item, replyContent) { //$("#editArea").html("回复:[[" + dstContent + "]] " + replyContent); //$(".btn_send").click(); var json = tl.getJsonMsg(item.touser, "回复:[[" + item.text + "]] " + replyContent); tl.sendMsg(json); }; //已经回复过集合 this .repliedArray = []; //判断是否回复过 this .isReplied = function (obj) { var md5Str = faultylabs.MD5(obj.title + "" + obj.nick + "" + obj.text); if (!thisObj.repliedArray.contains(md5Str)) { return false ; } else { return true ; } } //完成回复 this .replyComplete = function (obj) { var md5Str = faultylabs.MD5(obj.title + "" + obj.nick + "" + obj.text); if (!thisObj.repliedArray.contains(md5Str)) { thisObj.repliedArray.push(md5Str); } } //重载处理回复列表 this .reload = function (callbackFun) { var $lst = $( "[ng-switch] .you" ); //未回复的列表 $.each($lst.not( "[reply]" ), function (idx, item) { var $info = $(item); var reply = {}; if ($info != null && $info.length > 0) { reply[ "text" ] = $info.find( ".js_message_plain" ).text(); //未回复的内容 reply[ "nick" ] = $info.find( ".avatar" ).attr( "title" ); //未回复的备注名称 reply[ "title" ] = $info.parents( '.chat_bd.scroll-wrapper:first' ).prev().find( '.title_name' ).text(); //聊天框title reply[ "touser" ] = $info.parents( '[jquery-scrollbar]' ).attr( 'data-cm' ); reply[ "touser" ] = JSON.parse(reply[ "touser" ]).username; reply[ "index" ] = $lst.index($info); reply[ "item" ] = $info; } if (thisObj.isReplied(reply)) $(item).attr( "reply" , "" ); if (callbackFun) callbackFun(); }); } //打开最新的聊天框 this .openLatestRoom = function () { $( "[ng-repeat='chatContact in chatList track by chatContact.UserName'] .chat_item .icon:first" ).click(); } } //数组拓展方法 Array.prototype.contains = function (obj) { var i = this .length; while (i--) { if ( this [i] === obj) { return true ; } } return false ; } //图灵对象 var tl = { getJsonMsg : function (activeroom, text) { var json = { "BaseRequest" : { "Uin" : +util.getCookie( "wxuin" ), "Sid" : util.getCookie( "wxsid" ), "Skey" : util.getSkey(), "DeviceID" : util.getDeviceID() }, "Msg" : { "Type" : 1, "Content" : text, "FromUserName" : util.getFromUserName(), "ToUserName" : activeroom, "LocalID" : util.Now(), "ClientMsgId" : util.Now() } }; return json; }, // sendMsg : function (json, cbfunc) { var jsonStr = JSON.stringify(json); $.ajax({ url : '' , data : jsonStr, type : 'POST' , dataType : 'json' , success : function (d) { if (cbfunc) cbfunc(d); } }); } // }; // //工具包 var util = { getDeviceID : function () { return "e" + ( "" + Math.random().toFixed(15)).substring(2, 17) }, Now : function () { return + (+ new Date + "" + Math.round(Math.random() * 10000)) }, // getCookie : function (e) { for ( var t = e + "=" , o = document.cookie.split( ";" ), n = 0; n < o.length; n++) { for ( var r = o[n]; " " == r.charAt(0); ) r = r.substring(1); if (-1 != r.indexOf(t)) return r.substring(t.length, r.length) } return "" }, // getSkey : function () { var src = $( ".main_inner .header .avatar img" ).attr( "src" ); var result = /\@crypt_.{0,41}/.exec(src); return result != null && result.length > 0 ? result[0] : "" ; }, getFromUserName : function () { var src = $( ".main_inner .header .avatar img" ).attr( "src" ); var result = /\&username=(\@.+?)\&/.exec(src); return result != null && result.length > 0 ? result[1] : "" ; }, // getActiveRoom : function () { var cmStr = $( "[ng-repeat='chatContact in chatList track by chatContact.UserName'] .active" ).attr( "data-cm" ); var json = JSON.parse(cmStr); return json != null && json.username != null ? json.username : "" ; } // }; // |
manifest.json
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | { "name" : "图灵机器人微信自动回复" , "description" : "图灵机器人微信自动回复" , "version" : "1.1" , "background" : { "scripts" : [ "jquery.min.js" , "md5.js" , "background.js" ] }, "content_scripts" : [{ "matches" : [ "*.qq.com/*" , "*.qq.com/*" ], "js" : [ "jquery.min.js" , "md5.js" , "content_script.js" ] } ], "permissions" : [ "tabs" , "*/*" , "*/*" ], "icons" : { "16" : "icon.png" , "48" : "icon.png" , "128" : "icon.png" }, "browser_action" : { "default_icon" : "icon.png" }, "homepage_url" : "" , "manifest_version" : 2 } |
额外引用的插件:
jquery.min.js
md5.js
文件目录结构如下:
插件和源文件下载地址:
http://pan.baidu.com/s/1wPHy2