└── wechat-bot-chatgpt ├── .gitignore ├── views ├── index.pug ├── error.pug └── layout.pug ├── public └── stylesheets │ └── style.css ├── routes ├── users.js └── index.js ├── package.json ├── service ├── chatgpt.js └── wechat.js ├── app.js ├── bin └── www └── config.js /wechat-bot-chatgpt/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | package-lock.json -------------------------------------------------------------------------------- /wechat-bot-chatgpt/views/index.pug: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= title 5 | p Welcome to #{title} 6 | -------------------------------------------------------------------------------- /wechat-bot-chatgpt/views/error.pug: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /wechat-bot-chatgpt/views/layout.pug: -------------------------------------------------------------------------------- 1 | doctype html 2 | html 3 | head 4 | title= title 5 | link(rel='stylesheet', href='/stylesheets/style.css') 6 | body 7 | block content 8 | -------------------------------------------------------------------------------- /wechat-bot-chatgpt/public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 50px; 3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; 4 | } 5 | 6 | a { 7 | color: #00B7FF; 8 | } 9 | -------------------------------------------------------------------------------- /wechat-bot-chatgpt/routes/users.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | 4 | /* GET users listing. */ 5 | router.get('/', function(req, res, next) { 6 | res.send('respond with a resource'); 7 | }); 8 | 9 | module.exports = router; 10 | -------------------------------------------------------------------------------- /wechat-bot-chatgpt/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wechat-bot-chatgpt", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "chatgpt": "^2.0.5", 10 | "cookie-parser": "~1.4.4", 11 | "debug": "~2.6.9", 12 | "express": "~4.16.1", 13 | "http-errors": "~1.6.3", 14 | "morgan": "~1.9.1", 15 | "pug": "2.0.0-beta11", 16 | "ws": "^8.11.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /wechat-bot-chatgpt/routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | const chatApi = require("../service/chatgpt"); 4 | 5 | /* GET home page. */ 6 | router.get('/', function(req, res, next) { 7 | res.render('index', { title: 'Express' }); 8 | }); 9 | 10 | 11 | router.get('/chatgpt', async function(req, res, next) { 12 | let content = req.query.text; 13 | if(!content){ 14 | return res.send({code:404,msg:"参数不全"}); 15 | } 16 | 17 | try { 18 | let data = await chatApi.sendMsg(content); 19 | return res.send({code:200,msg:"success",data:data}); 20 | }catch (err){ 21 | return res.send({code:400,msg:"网络错误"}); 22 | } 23 | }); 24 | 25 | module.exports = router; 26 | -------------------------------------------------------------------------------- /wechat-bot-chatgpt/service/chatgpt.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Author: johnson 3 | * Date: 2022/12/9 4 | * Desc: chatgpt 库 5 | **/ 6 | const config = require("../config") 7 | let chatApi = null; 8 | 9 | async function init() { 10 | const { ChatGPTAPI } = await import('chatgpt') 11 | // sessionToken is required; see below for details 12 | const api = new ChatGPTAPI({ 13 | sessionToken: config.SessionToken 14 | }) 15 | 16 | // ensure the API is properly authenticated 17 | await api.ensureAuth() 18 | 19 | chatApi = api; 20 | } 21 | 22 | async function sendMsg(text){ 23 | // send a message and wait for the response 24 | if(!chatApi){ 25 | return; 26 | } 27 | const response = await chatApi.sendMessage(text) 28 | return response; 29 | } 30 | 31 | init().then( async () => { 32 | console.log("初始化ChatGpt成功") 33 | }) 34 | 35 | 36 | exports.sendMsg = sendMsg; -------------------------------------------------------------------------------- /wechat-bot-chatgpt/app.js: -------------------------------------------------------------------------------- 1 | var createError = require('http-errors'); 2 | var express = require('express'); 3 | var path = require('path'); 4 | var cookieParser = require('cookie-parser'); 5 | var logger = require('morgan'); 6 | 7 | var indexRouter = require('./routes/index'); 8 | var usersRouter = require('./routes/users'); 9 | 10 | var app = express(); 11 | 12 | // 链接微信 13 | require('./service/wechat'); 14 | 15 | // view engine setup 16 | app.set('views', path.join(__dirname, 'views')); 17 | app.set('view engine', 'pug'); 18 | 19 | app.use(logger('dev')); 20 | app.use(express.json()); 21 | app.use(express.urlencoded({ extended: false })); 22 | app.use(cookieParser()); 23 | app.use(express.static(path.join(__dirname, 'public'))); 24 | 25 | app.use('/', indexRouter); 26 | app.use('/users', usersRouter); 27 | 28 | // catch 404 and forward to error handler 29 | app.use(function(req, res, next) { 30 | next(createError(404)); 31 | }); 32 | 33 | // error handler 34 | app.use(function(err, req, res, next) { 35 | // set locals, only providing error in development 36 | res.locals.message = err.message; 37 | res.locals.error = req.app.get('env') === 'development' ? err : {}; 38 | 39 | // render the error page 40 | res.status(err.status || 500); 41 | res.render('error'); 42 | }); 43 | 44 | module.exports = app; 45 | -------------------------------------------------------------------------------- /wechat-bot-chatgpt/bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Module dependencies. 5 | */ 6 | 7 | var app = require('../app'); 8 | var debug = require('debug')('wechat-bot-chatgpt:server'); 9 | var http = require('http'); 10 | 11 | /** 12 | * Get port from environment and store in Express. 13 | */ 14 | 15 | var port = normalizePort(process.env.PORT || '3000'); 16 | app.set('port', port); 17 | 18 | /** 19 | * Create HTTP server. 20 | */ 21 | 22 | var server = http.createServer(app); 23 | 24 | /** 25 | * Listen on provided port, on all network interfaces. 26 | */ 27 | 28 | server.listen(port); 29 | server.on('error', onError); 30 | server.on('listening', onListening); 31 | 32 | /** 33 | * Normalize a port into a number, string, or false. 34 | */ 35 | 36 | function normalizePort(val) { 37 | var port = parseInt(val, 10); 38 | 39 | if (isNaN(port)) { 40 | // named pipe 41 | return val; 42 | } 43 | 44 | if (port >= 0) { 45 | // port number 46 | return port; 47 | } 48 | 49 | return false; 50 | } 51 | 52 | /** 53 | * Event listener for HTTP server "error" event. 54 | */ 55 | 56 | function onError(error) { 57 | if (error.syscall !== 'listen') { 58 | throw error; 59 | } 60 | 61 | var bind = typeof port === 'string' 62 | ? 'Pipe ' + port 63 | : 'Port ' + port; 64 | 65 | // handle specific listen errors with friendly messages 66 | switch (error.code) { 67 | case 'EACCES': 68 | console.error(bind + ' requires elevated privileges'); 69 | process.exit(1); 70 | break; 71 | case 'EADDRINUSE': 72 | console.error(bind + ' is already in use'); 73 | process.exit(1); 74 | break; 75 | default: 76 | throw error; 77 | } 78 | } 79 | 80 | /** 81 | * Event listener for HTTP server "listening" event. 82 | */ 83 | 84 | function onListening() { 85 | var addr = server.address(); 86 | var bind = typeof addr === 'string' 87 | ? 'pipe ' + addr 88 | : 'port ' + addr.port; 89 | debug('Listening on ' + bind); 90 | } 91 | -------------------------------------------------------------------------------- /wechat-bot-chatgpt/config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Author: johnson 3 | * Date: 2022/12/9 4 | * Desc: 配置文件 5 | **/ 6 | 7 | const SessionToken = "eyJhbGciOiJkaXIiLCJlbmMiOiJBMjU2R0NNIn0..d6mSy4g8XoA0ELzb.2U6h5k0tcNsgtEdnRb26NV_F6A5uiak_6VEPFadzyPRYcLtiaorzraeNZ-m6cy8CNJFgdWgtB0icVsEZn1syk8Fx9xKd69pGbgrBCFRH-DeE8iQerbjp_iPCzhNr-TX3jMpP05eMWBQXE2q06qqlxmdJXjZd2RUVhAn5zWjKQDjf3iIUId7uyzdrkH3FYTLeMXd5vdWkpC1w5B0qR-Y42jXgNST4jmk4aEoQK_1VinipYlPIhr3IZixUQHuIFRGarhqpP634KiKNfqvVAw5k5-aqOlW7oVzTzCTiSpaJ4ClVzSz90zTEodG7-T6AKVoKg0Tsr9acg8SDfwDZjZUa5BmCLc9OzGQNIcqWgMyrtXTs9TwHrT4IZWhF4lbtOK3SkyJtfJ0mPViZqKjV0nmTK3dRki5b09-PsOP3QHkrQL0KLRuwgkuJKtx8IC5EJlSQkMAv33_BO-dVPsXm3t0B0unVm6maTFh0TcFH9z-SooUbNUw5jB9eyuCLchCkF17XeyQoOOGE1Rm0Kuaeltfo3RK1fc2MaZ0OkZm4-LqvJX_jL6e8Due7vcFYYbUW_jGmSp2ZBdDq5qLGTBpZq9JtWN4pUbcBi0eAeXyRXZesqDnZEu-oQtjdqIRPmU29r3wYC82HN0qkrI3ps3GBRpzFD02KQmnLcOljxjTArGcnv22z90qysAlt-tmE6626N-gUqN3vGW-SuFEJ3lB9PnLbr3J8Y9K34OstdfZsf9lQ-_1ocwdl-omQgbay8e2YqC1v-xqfpahBFL_N9MLkNuRJ-A4frbDU-z8zDkPML23ZInBFeUoBeUQRakVsHZaqyeO6e2s-GNOGGP1VjwqSH_7zDSGqff5QPFSbyYRbW0MtPOyUUHvxgfrvmSKiB1QUGlKyM3uySx4PX5iCiiSDi866I3RcxNhgaL1IcL9aR4lnVEDCzykfEfcRfnvOtwXzKsJHmbFeQrVnjImCiwVyQck7Apg--wHu-CCW-_ZdsVCOIWib1fcT3V9NBic4juzpM17YOkJ-hvc3ru52-UUK-IlSgXTZQ5BPtCcOX4eZAfxnHcDy8GZyACsO2mGEFhIH3cVM0Q6A3367mUibgi_HBSLYbd_Bg09lkpKNVZGLcw6xv2CJ8SSBRv7XYjd6oCMPuuA5Xvm77RemwLrUBuHSuJIKlyIZPcDTdXxIxSNoDldUDsmeTs3XylunkrV6fL78-oKgsy0ROMADUZUa6e_q9raD99khS9UbqoKnd6AoZgWzEN2cejbdwvg8qASuLtEw3UHKH-5F_w_UP6I3JsB9FCgksk35RjuO_LJc526MTFeIAZKo5U6XJ1aL2BD1LuN5D0fzbNri-UmLgvKxp-PtsH15e24DqutPC5HbbE12j6XRV6-ECxAyhUJ30x24ps-mfwhDP--hY2uJJdRvCXAsjwKYAHsVQ7Lej8knjfEqENaCGWapJsPI3seapCa0R7mxsceFa2oKlEb_fqRWBWI2A3FoAPxGi58pmDSCyHH1zl2rKweSsC51bVQydtG0xdOqifjAh69ElfDS8F-KudXIFKPiDKqtKEVXcr2pdBZO5spRzNzcpmox7CoIySByssu8IyOK7jYQbUe4UaEH_99jbarOnHwAF-ML8pxrW9bTAi3WOgrVGN_V2AjJktMkPAEc6mCTYHTQSQqvG8Asd-IC4bVkLW-H4jpJcY1GrZtlKI0NHl1rZvI7Fs-1yzqCOIeh1MUtVrvisWJO3Wau-tK-6rZqz1ZJbmeGXSPAgoFvTcU9e8JdkfPudxlea0XGkMt34MJEG6UIeXR3ZZLCvZkMXX3j0ccgZ91Z9tciBXJPJH-6TPoZZ4nUxGcRaNovEi06D4eLO9O4Qoa3NUTw2kcoQk2lkS3k1FwzfLmPPp10NICzFqGbnbiwtPDRf6KDxk9B6MOdZDYMyCZHV3ADXab0tGqQNNnN1nk-a1C4z9eucg0vM1dBy39GuhPzNF-nB0kt9WAQThy-9bQvRIxl8kWfW2ivzfKbXAJNE_JboI1iPoZCcITcqmz8HrsovuEZBZsTdAnzZ3-uvV3ftm1oJ1DvAmTLn4b098a7pc6VuZYqPGLhA7MUJZyNYAUhwJQIQ2CEyiFGlrPs8sgs7aVyot5vk-Naf4_57gT2frAM5vX8loXuEoMsjDTjvLgsTEUeGQlJgDaMAge3Bjs5w84HxsIlZb8CnG1mt-okv_W-SJcGuuYHZewrax8qwpWTHENSg3gZCQUTwb7HyTZIjh6iGWT-93XbxCwcxjmwI9h0l6XCXHVa6dl3-0LYZIcSj28XOFR-KTu89xgi1Jvht4NMzdElJi2j5tXckv20g5yrLHE5G96rIt3YygkdVc163ovA8jH0MblDHPHQEZwvf4BzJLGgVcCHF5X8ueXK1OleTwg_.e2wZY6PF8N5BtE2yoXu6OQ"; 8 | 9 | 10 | exports.SessionToken = SessionToken; -------------------------------------------------------------------------------- /wechat-bot-chatgpt/service/wechat.js: -------------------------------------------------------------------------------- 1 | /**************************************** 2 | * 重要:3.2.1.121,ws客户端已经改变调用方式,具体如下: 3 | * get_chat_nick_p() 4 | * get_contact_list() 5 | * get_chatroom_memberlist() 6 | * send_at_msg() 7 | * send_attatch() 8 | * send_txt_msg() 9 | * send_pic_msg() 10 | * get_personal_info() 11 | * ***************************************/ 12 | const WebSocket = require('ws'); 13 | const ws = new WebSocket('ws://127.0.0.1:5555'); 14 | const chatBot = require("./chatgpt"); 15 | 16 | const HEART_BEAT = 5005; 17 | const RECV_TXT_MSG = 1; 18 | const RECV_PIC_MSG = 3; 19 | const USER_LIST = 5000; 20 | const GET_USER_LIST_SUCCSESS = 5001; 21 | const GET_USER_LIST_FAIL = 5002; 22 | const TXT_MSG = 555; 23 | const PIC_MSG = 500; 24 | const AT_MSG = 550; 25 | const CHATROOM_MEMBER = 5010; 26 | const CHATROOM_MEMBER_NICK = 5020; 27 | const PERSONAL_INFO = 6500; 28 | const DEBUG_SWITCH = 6000; 29 | const PERSONAL_DETAIL =6550; 30 | const DESTROY_ALL = 9999; 31 | const NEW_FRIEND_REQUEST=37;//微信好友请求消息 32 | const AGREE_TO_FRIEND_REQUEST=10000;//同意微信好友请求消息 33 | const ATTATCH_FILE = 5003; 34 | 35 | function getid() 36 | { 37 | const id = Date.now(); 38 | return id.toString(); 39 | } 40 | function get_chat_nick_p(s_wxid,s_roomid) 41 | { 42 | 43 | const j={ 44 | id:getid(), 45 | type:CHATROOM_MEMBER_NICK, 46 | wxid:s_wxid, 47 | roomid:s_roomid, 48 | content:'null', 49 | nickname:"null", 50 | ext:'null' 51 | 52 | 53 | }; 54 | const s= JSON.stringify(j); 55 | return s; 56 | 57 | } 58 | function get_chat_nick() 59 | { 60 | /*const j={ 61 | id:getid(), 62 | type:CHATROOM_MEMBER_NICK, 63 | content:'23023281066@chatroom',//chatroom id 23023281066@chatroom 17339716569@chatroom 64 | //5325308046@chatroom 65 | //5629903523@chatroom 66 | wxid:'ROOT' 67 | };*/ 68 | const s= JSON.stringify(j); 69 | return s; 70 | } 71 | 72 | function handle_nick(j){ 73 | const data = j.content; 74 | let i = 0; 75 | for(const item of data) 76 | { 77 | console.log(i++,item.nickname) 78 | } 79 | } 80 | function handle_memberlist(j) 81 | { 82 | const data = j.content; 83 | let i =0; 84 | //get_chat_nick_p(j.roomid); 85 | for(const item of data) 86 | { 87 | console.log("---------------",item.room_id,"--------------------"); 88 | //console.log("------"+item.roomid+"--------"); 89 | //ws.send(get_chat_nick_p(item.roomid)); 90 | const memberlist=item.member; 91 | 92 | //console.log("hh",item.address,memberlist); 93 | 94 | //const len = memberlist.length(); 95 | //console.log(memberlist); 96 | for(const m of memberlist) 97 | { 98 | console.log(m);//获得每个成员的wxid 99 | } 100 | /*for(const n of nicklist)//目前不建议使用 101 | { 102 | console.log(n);//获得每个成员的昵称,注意,没有和wxi对应的关系 103 | }*/ 104 | } 105 | } 106 | function get_chatroom_memberlist() 107 | { 108 | const j={ 109 | id:getid(), 110 | type:CHATROOM_MEMBER, 111 | roomid:'null',//null 112 | wxid:'null',//not null 113 | content:'null',//not null 114 | nickname:'null', 115 | ext:'null' 116 | }; 117 | 118 | const s= JSON.stringify(j); 119 | return s; 120 | } 121 | function send_attatch() 122 | { 123 | /*const j={ 124 | id:getid(), 125 | type:ATTATCH_FILE, 126 | content:'C:\\tmp\\log.txt', 127 | wxid:'23023281066@chatroom' 128 | };*/ 129 | const j={ 130 | id:getid(), 131 | type:ATTATCH_FILE, 132 | wxid:'23023281066@chatroom',//roomid或wxid,必填 133 | roomid:'null',//此处为空 134 | content:'C:\\tmp\\log.7z', 135 | nickname:"null",//此处为空 136 | ext:'null'//此处为空 137 | //wxid:'22428457414@chatroom' 138 | 139 | }; 140 | const s = JSON.stringify(j); 141 | return s; 142 | } 143 | function send_at_msg() 144 | { 145 | const j={ 146 | id:getid(), 147 | type:AT_MSG, 148 | roomid:'23023281066@chatroom',//not null 23023281066@chatroom 149 | wxid:'your wxid',//not null 150 | content:'at msg test,hello world,真的有一套',//not null 151 | nickname:'老张', 152 | ext:'null' 153 | }; 154 | 155 | const s = JSON.stringify(j); 156 | return s; 157 | } 158 | 159 | function send_pic_msg() 160 | { 161 | const j={ 162 | id:getid(), 163 | type:PIC_MSG, 164 | wxid:'23023281066@chatroom', 165 | roomid:'null', 166 | content:'C:\\tmp\\2.jpg', 167 | nickname:"null", 168 | ext:'null' 169 | //wxid:'22428457414@chatroom' 170 | 171 | }; 172 | 173 | const s = JSON.stringify(j); 174 | //console.log(s); 175 | return s; 176 | } 177 | function get_personal_detail() 178 | { 179 | /*const j={ 180 | id:getid(), 181 | type:PERSONAL_DETAIL, 182 | content:'op:personal detail', 183 | wxid:'zhanghua_cd' 184 | };*/ 185 | const s = JSON.stringify(j); 186 | return s; 187 | } 188 | /** 189 | * send_txt_msg : 发送消息给好友 190 | * 191 | */ 192 | function get_personal_info() 193 | { 194 | const j={ 195 | id:getid(), 196 | type:PERSONAL_INFO, 197 | wxid:'null', 198 | roomid:'null', 199 | content:'null', 200 | nickname:"null", 201 | ext:'null' 202 | //wxid:'22428457414@chatroom' 203 | 204 | }; 205 | const s = JSON.stringify(j); 206 | return s; 207 | } 208 | function send_txt_msg(wxid,text) 209 | { 210 | 211 | //必须按照该json格式,否则服务端会出异常 212 | const j={ 213 | id:getid(), 214 | type:TXT_MSG, 215 | wxid:wxid,//roomid或wxid,必填 216 | roomid:'null',//此处为空 217 | content:text, 218 | nickname:"null",//此处为空 219 | ext:'null'//此处为空 220 | 221 | }; 222 | const s = JSON.stringify(j); 223 | return s; 224 | } 225 | /** 226 | * send_wxuser_list : 获取微信通讯录用户名字和wxid 227 | */ 228 | function get_contact_list() 229 | { 230 | /*const j={ 231 | id:getid(), 232 | type:USER_LIST, 233 | content:'user list', 234 | wxid:'null' 235 | };*/ 236 | 237 | const j={ 238 | id:getid(), 239 | type:USER_LIST, 240 | roomid:'null',//null 241 | wxid:'null',//not null 242 | content:'null',//not null 243 | nickname:'null', 244 | ext:'null' 245 | }; 246 | const s = JSON.stringify(j); 247 | //console.log(s); 248 | return s; 249 | } 250 | /** 251 | * handle_wxuser_list : websocket返回的用户信息 252 | * @param {*} j json数组 253 | * 数组里面的wxid,要保存下来,供发送微信的时候用 254 | * 255 | */ 256 | function handle_wxuser_list(j) 257 | { 258 | const j_ary = j.content; 259 | var i = 0; 260 | for(const item of j_ary) 261 | { 262 | i=i+1; 263 | const id = item.wxid; 264 | const m = id.match(/@/); 265 | if(m!=null){ 266 | //console.log(id); 267 | console.log(item.wxid,item.name); 268 | } 269 | //console.log(m); 270 | // 271 | } 272 | } 273 | /** 274 | * 275 | * @param {*} j json对象 276 | */ 277 | async function handle_recv_msg(j) 278 | { 279 | 280 | /*const content = j.content; 281 | const wxid =j.wxid; 282 | const sender = j.sender; 283 | consoconsole.log(j);le.log('接收人:'+wxid); 284 | console.log('内容:'+content); 285 | console.log('发送人:'+sender);*///如果为空,那就是你自己发的 286 | console.log("接收到消息:" , j); 287 | let res = await chatBot.sendMsg(j.content); 288 | console.log("Chatgpt回复:" + res); 289 | ws.send(send_txt_msg(j.wxid,res)); 290 | } 291 | 292 | function heartbeat(j) 293 | { 294 | //console.log(j); 295 | //console.log(utf16ToUtf8(wxid),utf16ToUtf8(name)); 296 | } 297 | 298 | ws.on('open', function open() 299 | { 300 | console.info("连接微信成功"); 301 | //ws.send(get_personal_info()); 302 | //ws.send(get_contact_list()); 303 | //ws.send(send_attatch()); 304 | //ws.send("hello world"); 305 | //ws.send(destroy_all()); 306 | //ws.send(get_chat_nick_p("zhanghua_cd","23023281066@chatroom")); 307 | //for(const item of roomid_list) 308 | //{ 309 | //console.log(item); 310 | //ws.send(get_chat_nick_p(item)); 311 | //} 312 | //ws.send(get_chat_nick()); 313 | //ws.send(get_personal_info()); 314 | //ws.send(send_pic_msg()); 315 | //ws.send(send_txt_msg()); 316 | //ws.send(get_chatroom_memberlist()); 317 | //ws.send(send_at_msg()); 318 | 319 | //ws.send(get_personal_detail()); 320 | //ws.send(debug_switch() 321 | //ws.send(send_wxuser_list()); 322 | //ws.send(send_txt_msg()); 323 | 324 | /** 获取chatroom 成员昵称 325 | * ws.send(get_chat_nick()); 326 | */ 327 | 328 | /** 通过wxid获取好友详细细腻 329 | * ws.send(get_personal_detail()); 330 | */ 331 | 332 | /** debugview调试信息开关,默认为关 333 | * ws.send(debug_switch()); 334 | */ 335 | 336 | /** 获取微信个人信息 337 | * ws.send(get_personal_info()); 338 | */ 339 | 340 | /** 获取群好友列表 341 | * ws.send(get_chatroom_memberlist()); 342 | */ 343 | 344 | /** 发送群AT消息 345 | * ws.send(send_at_msg()); 346 | */ 347 | 348 | /**获取微信通讯录好友列表 349 | * ws.send(send_wxuser_list()); 350 | */ 351 | /** 向你的好友发送微信文本消息 352 | * ws.send(send_txt_msg()); 353 | */ 354 | 355 | /**向你的好友发送图片 356 | * ws.send(send_pic_msg()); 357 | */ 358 | /*发送信息调用上面两个函数即可,可自行改造*/ 359 | 360 | //ws.send(send_pic_msg()); 361 | //ws.send(send_txt_msg()); 362 | 363 | }); 364 | 365 | ws.on('close', function close() { 366 | console.log('disconnected'); 367 | }); 368 | 369 | ws.on('message', function incoming(data) 370 | { 371 | const j = JSON.parse(data); 372 | const type = j.type; 373 | switch(type) 374 | { 375 | case CHATROOM_MEMBER_NICK: 376 | console.log(j); 377 | //handle_nick(j); 378 | break; 379 | case PERSONAL_DETAIL: 380 | console.log(j); 381 | break; 382 | case AT_MSG: 383 | console.log(j); 384 | break; 385 | case DEBUG_SWITCH: 386 | console.log(j); 387 | break; 388 | case PERSONAL_INFO: 389 | console.log(j); 390 | break; 391 | case TXT_MSG: 392 | console.log(j); 393 | break; 394 | case PIC_MSG: 395 | console.log(j); 396 | break; 397 | case CHATROOM_MEMBER: 398 | //console.log(j); 399 | handle_memberlist(j); 400 | break; 401 | case RECV_PIC_MSG: 402 | handle_recv_msg(j); 403 | break; 404 | case RECV_TXT_MSG: 405 | handle_recv_msg(j); 406 | break; 407 | case HEART_BEAT: 408 | heartbeat(j); 409 | break; 410 | case USER_LIST: 411 | console.log(j); 412 | //handle_wxuser_list(j); 413 | break; 414 | case GET_USER_LIST_SUCCSESS: 415 | handle_wxuser_list(j); 416 | break; 417 | case GET_USER_LIST_FAIL: 418 | handle_wxuser_list(j); 419 | break; 420 | case NEW_FRIEND_REQUEST: 421 | //console.log("---------------37----------"); 422 | console.log(j); 423 | break; 424 | case AGREE_TO_FRIEND_REQUEST: 425 | console.log("---------------25----------"); 426 | console.log(j); 427 | break; 428 | //case SEND_TXT_MSG_SUCCSESS: 429 | //handle_recv_msg(j); 430 | //break; 431 | //case SEND_TXT_MSG_FAIL: 432 | //handle_recv_msg(j); 433 | //break; 434 | default: 435 | break; 436 | } 437 | //console.log(`Roundtrip time: ${Date.now() - data} ms`); 438 | 439 | /*setTimeout(function timeout() { 440 | ws.send(Date.now()); 441 | }, 500);*/ 442 | }); 443 | --------------------------------------------------------------------------------