Um chatbot desenvolvido com base em
phantomjs
e WeChat web-side. A conta WeChat utilizada (ou seja, a conta que atua como robô) é uma conta pessoal e pode ser personalizada com instruções.
Você pode especificar uma conta WeChat:
Instruções personalizadas não serão entregues à IA para processamento:
Divertir-se sozinho não é tão bom quanto divertir-se juntos. Você pode atribuir isso ao chat em grupo:
Verifique o log no programa em segundo plano:
- Resposta inteligente do WeChat, monitoramento, estatísticas, etc.
- Consulta conveniente
- Entretenimento(liao)le(mei)
Baixe o código fonte:
git clone https://github.com/doterlin/wechat-robot.git
Instale o seguinte ambiente:
1.node.js
2.fantasmajs
3.casperjs
Encontre e configure /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 + '[闪电]已启动...',
}
Instale dependências e execute comandos:
npm install
casperjs index.js
Se você for avisado de que python找不到
, instale o python e certifique-se de que ele possa ser executado globalmente.
Digitalize o código QR para fazer login no WeChat Após a execução, ao ver o seguinte prompt, leia o código QR que aparece:
正在加载二维码...
已保存二维码,路径:"static/img/qr.jpg".
正在使用默认软件打开二维码,请用手机微信扫一扫确认登录 (若没有请手动打开)
Use seu celular para escanear o código QR e confirmar o login一分钟内
. Depois que登录成功
e发送欢迎语
basta. Isso conclui as etapas de uso. Os capítulos a seguir apresentam como estender a funcionalidade.
Antes de fazer isso, você pode precisar de dois métodos:
mensagem.enviar()
//路径: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));
});
})
Você pode expandir as funções do robô nos seguintes aspectos, conforme necessário:
//你可以写一些指令而不是交给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;
//-------------------------------------------------------------------
Ainda não pesquisei isso.
Ao depurar o código, você pode definir o campo logLevel
na seleção de configuração capserjs
como info
para exibir mais logs phantomjs
. Para obter mais configurações, visite a documentação do 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*方法超时...' )
}
}
Além disso, as capturas de tela do navegador serão salvas em /static/img
ao executar cada etapa para facilitar a visualização da renderização do navegador. Por exemplo, sempre que uma nova mensagem for obtida, uma captura de tela será tirada e substituída como lastNewMsgContent.png
.
Bem-vindo ao enviar PR para desenvolvimento secundário e trabalhar juntos para melhorar o projeto!
Direitos autorais (c) 2020 doterlin
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software"), para negociar o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar , publicar, distribuir, sublicenciar e/ou vender cópias do Software e permitir que as pessoas a quem o Software seja fornecido o façam, sujeito às seguintes condições:
O aviso de direitos autorais acima e este aviso de permissão serão incluídos em todas as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO "NO ESTADO EM QUE SE ENCONTRA", SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO EM NENHUM CASO OS AUTORES OU DETENTORES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER HIPÓTESE. RECLAMAÇÃO, DANOS OU OUTROS RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.