实现QQ机器人 + 消息"尾巴" 土豪专用...
发布于 1年前 作者 chrome10086 5302 次浏览

简单的写一个qq机器人.代码地址http://hi.baidu.com/woairuibaobao/item/186e8839caf57ff72784f437 效果如下:
alt 效果

原理:

QQ里两个关键的函数:
接收消息的函数 : mq.model.chat.addMessage(x,y)

发送消息的函数 : mq.model.chat.sendMsg(x)

通过hook接收消息的函数.判断接收到的消息内容是否是指令.如果是指令就执行相关的功能.忽略其他消息内容.

代码:

mq.model.chat.addMessage = function(j, k) { //替换掉接收消息的函数 实现hook
 var Msg = ''; //显示功能
 try {
  var i = (k.content[1].replace(/\ $/g, '').match(/^-[0-9a-z]$/g))[0]; //获取指令
 } catch (e) {
  var i = '@'; //不是指令的时候 忽略
 };
 switch (i) //判断指令
 {
 case '-1':
  Msg = "我叫咪咪."; // 指令 -1 这里可以换成自己想要的功能.
  break;
 case '-2':
  Msg = "我是女性."; // 指令 -2
  break;
 case '-3':
  Msg = "我喜欢坑蒙拐骗."; //指令 -3
  break;
 case '-h':
  Msg = "指令:\n -1 : 我的名字.\n -2 : 我的性别.\n -3 : 我的爱好.\n -h : 帮助."; //指令 -h
  break;
 default:
  Msg = "你好,我是机器人.请输入 -h 查看帮助."; //其他内容
  break;
 }

 var m = { //发送给用户的消息 json格式
  "to": j, // 对方qq id 不是qq号码
  "content": "[\"" + Msg + "\",[\"font\",{\"name\":\"宋体\",\"size\":10,\"style\":[0,0,0],\"color\":\"000000\"}]]", //消息内容和样式
  "face": 555, //未知意义 按格式填充
  "clientid": mq.clientid, //未知意义 按格式填充
  "msg_id": 68020001, //未知意义 按格式填充
  "psessionid": mq.psessionid //未知意义 按格式填充
 }
 mq.model.chat.sendMsg(m); //发送消息
}

如何使用:

登录http://w.qq.com/index.html?webqq_type=10 以chrome浏览器为例,打开"开发者工具" 在控制台里输入上面的代码,按回车执行. 如图:
alt 代码

代码执行之后.好友给这个qq号发消息的时候,就可以收到指令提示.见图一.

QQ消息尾巴
效果 如图:

alt 代码

原理:

跟机器人类似.hook发送消息的函数.把消息后面加在尾巴即可.

代码:

var old_send = mq.model.chat.sendMsg; //保存原函数
mq.model.chat.sendMsg = function(k) { //hook
    var old = eval(k.content)[0]; //原消息内容
 var msg = old + '\\n\\n -来自 iphone5S 土豪金客户端.'; //添加尾巴
 k.content = "[\"" + msg + "\",[\"font\",{\"name\":\"宋体\",\"size\":10,\"style\":[0,0,0],\"color\":\"000000\"}]]"; //新消息内容
 old_send(k); //用原函数 发送消息
}

如何使用:

登录http://w.qq.com/index.html?webqq_type=10 以chrome浏览器为例,打开"开发者工具" 在控制台里输入上面的代码,按回车执行. 跟机器人一样…

11 回复

顶一下!!!

这个很不错,如果自己编译webkit还能嵌入到应用中。

用node-webkit 可以实现很多犀利的功能…

@chrome10086小改了下 var oldaddMessage = mq.model.chat.addMessage; mq.model.chat.addMessage=function(j,k){ //替换掉接收消息的函数 实现hook oldaddMessage(j,k); var Msg=’’; //显示功能 try{ var i =(k.content[1].replace(/\ $/g,’’).match(/^-[0-9a-z]$/g))[0]; //获取指令 }catch(e){ var i =’@’; //不是指令的时候 忽略 }; switch(i) //判断指令 { case '-1’ : Msg="我叫咪咪."; break; // 指令 -1 这里可以换成自己想要的功能. case '-2’ : Msg="我是女性."; break; // 指令 -2 case '-3’ : Msg="我喜欢坑蒙拐骗."; break; //指令 -3 case '-h’ : Msg="指令:\n -1 : 我的名字.\n -2 : 我的性别.\n -3 : 我的爱好.\n -h : 帮助."; break; //指令 -h default : Msg="你好,我是机器人.请输入 -h 查看帮助."; break; //其他内容 }

var m={ //发送给用户的消息 json格式 "to":j, // 对方qq id 不是qq号码 “content":”[""+ Msg +"",["font",{"name":"宋体","size":10,"style":[0,0,0],"color":"000000"}]]", //消息 内容 和 样式 "face":555, //未知意义 按格式填充 "clientid":mq.clientid, //未知意义 按格式填充 "msg_id":68020001, //未知意义 按格式填充 "psessionid":mq.psessionid //未知意义 按格式填充 } mq.model.chat.sendMsg(m); //发送消息 }

@pathletboy 嗯 这个无所谓.本来就是机器人. 收不收消息 一样 .呵呵.

图片挂了。

地址图片都挂了 Mark 一下

@chrome10086 为什么我这依旧404

回到顶部