phantomjs
와 웹사이드 WeChat을 기반으로 개발된 챗봇입니다. 사용되는 위챗 계정(즉, 로봇 역할을 하는 계정)은 개인 계정이며 지침에 따라 맞춤 설정할 수 있습니다.
WeChat 계정을 지정할 수 있습니다.
사용자 지정 지침은 처리를 위해 AI에 전달되지 않습니다.
혼자 즐기는 것은 함께 즐기는 것만큼 좋지 않습니다. 그룹 채팅에 할당할 수 있습니다.
백그라운드 프로그램에서 로그를 확인하십시오.
- WeChat 지능형 답변, 모니터링, 통계 등
- 편리한 쿼리
- 엔터테인먼트(liao)le(메이)
소스 코드 다운로드:
git clone https://github.com/doterlin/wechat-robot.git
다음 환경을 설치합니다.
1.node.js
2.phantomjs
3.캐스퍼JS
/config/const.js
찾기 및 구성
//机器人名字
var ROBOT_NAME = "小强";
module.exports = {
//微信web版地址
'URL' : 'https://wx.qq.com/',
//机器人名字
'ROBOT_NAME' : ROBOT_NAME,
//图灵机器人apiKey和api地址
//AI部分使用的是第三方机器人图灵(http://www.tuling123.com/)
//这里只是示例,请大家自行到图灵官网注册并替换掉apikey免费版限5000次调用/天。有条件的同学可以付费支持下好产品
'TURING_APIKEY': '99fecec3424d416898b91b0998e2b26a',
'TURING_URL' : 'http://www.tuling123.com/openapi/api',
//锁定的微信号备注,注意是备注;如果是群聊则填群聊名称即可。
//填写的名称请预先在手机微信上搜索确认搜索结果是否出现在第一个
'TARGET_NICK' : '二十投小分队',
//启动时打招呼消息
'HELLO_WORLD' : '[闪电]' + ROBOT_NAME + '[闪电]已启动...',
}
종속성을 설치하고 명령을 실행합니다.
npm install
casperjs index.js
python找不到
메시지가 표시되면 Python을 설치하고 전역적으로 실행할 수 있는지 확인하세요.
QR 코드를 스캔하여 WeChat에 로그인하세요. 실행 후 다음 메시지가 표시되면 팝업되는 QR 코드를 스캔하세요.
正在加载二维码...
已保存二维码,路径:"static/img/qr.jpg".
正在使用默认软件打开二维码,请用手机微信扫一扫确认登录 (若没有请手动打开)
一分钟内
휴대폰으로 QR코드를 스캔하여 로그인을 확인해주세요.登录成功
하고发送欢迎语
충분합니다. 이것으로 사용 단계가 완료됩니다. 다음 장에서는 기능을 확장하는 방법을 소개합니다.
이 작업을 수행하기 전에 다음 두 가지 방법이 필요할 수 있습니다.
메시지.전송()
//路径:src/utils/message.js
//回复消息的方法message.send
//使用如:
var message = require('/src/utils/message');
...
casper.then(function(){
message.send(this, '你好');
})
ajax() / ajax.get() / ajax.post() / ajax.getJSON()
//路径:src/utils/ajax.js
//在聊天器调ajax的方法
//使用如:
var ajax= require('/src/utils/ajax');
...
casper.then(function(){
ajax(this, "http://example.com/getInfo", 'get', {uid: 123}, function(res){
console.log(JSON.stringify(res));
});
//或者
ajax.get(this, "http://example.com/getInfo", {uid: 123}, function(res){
console.log(JSON.stringify(res));
});
//jsonp
ajax.getJSON(this, "http://example.com/getInfo?calback=?", {uid: 123}, function(res){
console.log(JSON.stringify(res));
});
})
필요에 따라 다음과 같은 측면에서 로봇의 기능을 확장할 수 있습니다.
//你可以写一些指令而不是交给AI处理
//指令分为精确匹配指令和模糊匹配指令
//-------------------------------------------------------------------
//精确匹配
//精确指令在`/src/directive/exact.js`下编写。
//key是指令名称,值是一个方法,接受参数msgContent(用户发送的消息)和casperIns(casper实例),如:
//当对方发送'关闭'指令时程序提示并退出。
module.exports = {
'关闭': function (msgContent, casperIns) {
message.send(casperIns, '[玫瑰]感谢您的使用[玫瑰]nr([闪电]需要开启请在控制台启动程序[闪电])');
casperIns.echo('微信发出关闭口令,程序退出。')
return casperIns.exit();
}
}
//-------------------------------------------------------------------
//模糊匹配
//模糊匹配指令在`/src/directive/fuzzy.js`下编写。
//接收参数前两个同精确指令,第三个是当前的正则表达式;
//指令可单独防在src/directive/explain下方便维护,如weather.js:
//匹配'地名 + 天气',调用天气api
var weather = require('./explain/weather');
module.exports = {
'/天气/g': weather
}
//weather.js实现如下:
var ajax = require('../../utils/ajax');
var message = require('../../utils/message');
var formatWeather = function(local, weather) {
//此方法对返回的json格式化,详情请查看源码
}
var weather = function(msgContent, casperIns, regex) {
var local = msgContent.replace(/ |天气/, '');
var resource = 'http://wthrcdn.etouch.cn/weather_mini?city=' + encodeURIComponent(local);
ajax.get(casperIns, resource, {}, function(res){
var weather = JSON.parse(res);
if (weather.status == 1000) {
message.send(casperIns, formatWeather(local, weather));
} else {
message.send(casperIns, '未查找到相关天气信息。请尝试输入格式如"广州天气"。')
}
});
}
module.exports = weather;
//-------------------------------------------------------------------
나는 이것을 아직 연구하지 않았습니다.
코드를 디버깅할 때 capserjs
구성 선택에서 logLevel
필드를 info
로 설정하여 더 많은 phantomjs
로그를 표시할 수 있습니다. 자세한 내용은 casperjs 설명서를 참조하세요.
//路径:config/casper.js
module.exports = {
clientScripts: [
'static/js/jquery.js'
],
pageSettings: {
loadImages: true,
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.14 Safari/537.36',
},
logLevel: "info", //here
viewportSize: {width: 1300, height: 900},
verbose: true,
waitTimeout: 1000 * 60 * 60 * 24 * 365,
onWaitTimeout: function(){
console.log( 'waitFor*方法超时...' )
}
}
또한 브라우저 렌더링을 쉽게 볼 수 있도록 각 단계를 실행할 때 브라우저 스크린샷이 /static/img
에 저장됩니다. 예를 들어 새 메시지를 받을 때마다 스크린샷이 찍혀 lastNewMsgContent.png
로 덮어쓰여집니다.
2차 개발을 위해 PR을 제출하고 함께 협력하여 프로젝트를 개선해 보세요!
Copyright (c) 2020 도테르린
본 소프트웨어 및 관련 문서 파일("소프트웨어")의 사본을 취득한 모든 사람에게 사용, 복사, 수정, 병합에 대한 권리를 포함하되 이에 국한되지 않고 제한 없이 소프트웨어를 취급할 수 있는 권한이 무료로 부여됩니다. , 소프트웨어 사본을 게시, 배포, 재라이센스 부여 및/또는 판매하고, 소프트웨어를 제공받은 사람에게 다음 조건에 따라 그렇게 하도록 허용합니다.
위의 저작권 고지와 본 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함됩니다.
소프트웨어는 상품성, 특정 목적에의 적합성 및 비침해에 대한 보증을 포함하되 이에 국한되지 않고 명시적이든 묵시적이든 어떠한 종류의 보증 없이 "있는 그대로" 제공됩니다. 청구, 손해 또는 기타 소프트웨어나 소프트웨어의 사용 또는 기타 거래로 인해 발생하거나 이와 관련하여 발생하는 계약, 불법 행위 또는 기타 행위에 대한 책임.