博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【chrome插件】web版微信接入图灵机器人API实现自动回复
阅读量:7039 次
发布时间:2019-06-28

本文共 8825 字,大约阅读时间需要 29 分钟。

小贱鸡自动回复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

 

文件目录结构如下:

temp.png

插件和源文件下载地址:

http://pan.baidu.com/s/1wPHy2

转载于:https://www.cnblogs.com/mahatmasmile/p/4788654.html

你可能感兴趣的文章
.NET大型C/S系统可动态设置登录窗口的实现参考
查看>>
springmvc - SqlSession
查看>>
枚举在业务系统中的最佳使用方式
查看>>
mybatis 打印sql语句
查看>>
做一个好的程序猿
查看>>
传入参数方法,参数值变化
查看>>
Mongodb Sharding Cluster 三台
查看>>
Spring boot with Oracle
查看>>
Android设计模式系列(10)--SDK源码之原型模式
查看>>
对象的共享
查看>>
android在线API地址
查看>>
Verson Magic problem
查看>>
Passcode
查看>>
TapKu Graph
查看>>
面试需要的基础知识-合并排序数组
查看>>
关于Unity 2018的实体组件系统(ECS)一
查看>>
Echarts---添加渐变功能
查看>>
linux 下解压命令大全
查看>>
深入了解 Linux下安装DNS+Sendmail服务
查看>>
python在类中实现swith case功能
查看>>