博舍

Java实现QQ机器人 qq机器人自动回复

Java实现QQ机器人

Java实现QQ机器人

使用Java拦截QQ消息+回复消息…等等(酷Q+java实现)

需要下载的文件:https://pan.baidu.com/s/13xvYG6VXr9Bj_oJokVbJ9w提取码:od38

解压后:添加上项目依赖/jar包,启动CQA输入要成为机器人的QQ号.

创建KQClient.class

/***客户端*/publicclassKQClient{//记录器privatefinalstaticLoggerLOGGER=LoggerFactory.getLogger(KQClient.class);privatestaticKQWebClientkqWebClient;privatestaticfinalStringhost="wx://localhost:25303";publicstaticvoidrunClient(){try{if(kqWebClient==null){//连接酷Q服务端kqWebClient=newKQWebClient(newURI(host));}//添加监听kqWebClient.addQQMSGListenner(newMyQQAdapter(kqWebClient));}catch(URISyntaxExceptione){//e.printStackTrace();LOGGER.error("初始化客户端失败(错误原因):"+e.getMessage());e.printStackTrace();}}publicstaticvoidmain(String[]args){//初始化客服端runClient();}}

创建MyQQAdapter.class根据要实现的功能重写KQMSGAdapter.class父类方法即可.

packagecom.example.boot.client;importcom.mumu.listenner.KQMSGAdapter;importcom.mumu.msg.RE_MSG_Group;importcom.mumu.msg.RE_MSG_Private;importcom.mumu.webclient.KQWebClient;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;publicclassMyQQAdapterextendsKQMSGAdapter{privatefinalstaticLoggerLOGGER=LoggerFactory.getLogger(KQClient.class);privateKQWebClientkqWebClient;MyQQAdapter(KQWebClientkqWebClient){this.kqWebClient=kqWebClient;}/***接收QQ群消息*@parammsg*/@OverridepublicvoidRE_MSG_Group(RE_MSG_Groupmsg){//super.RE_MSG_Group(msg);LOGGER.info("接受QQ群消息groupName:"+msg.getFromGroup()+"msg:"+msg.getMsg());/***parameters:*Stringqq(回复那个人),Stringgroupid(回复QQ群号),Stringmsg(回复消息),BooleanisAT(是否@)*/kqWebClient.sendGroupMSG(msg.getFromQQ(),msg.getFromGroup(),"我收到群消息啦",false);}/***接收私聊消息*@parammsg*/@OverridepublicvoidRe_MSG_Private(RE_MSG_Privatemsg){//super.Re_MSG_Private(msg);LOGGER.info("接收到私聊消息:fromQQ:"+msg.getFromqq()+"msg:"+msg.getMsg());//回复kqWebClient.sendPrivateMSG(msg.getFromqq(),"我收到私聊消息啦!!!!!");}}

KQMSGAdapter.class源码如下:

publicclassKQMSGAdapterextendsKQMSGListenner{publicKQMSGAdapter(){}//私聊消息方法publicvoidRe_MSG_Private(RE_MSG_Privatemsg){}//论坛消息方法publicvoidRE_MSG_FORUM(RE_MSG_Forummsg){}//Q群消息方法publicvoidRE_MSG_Group(RE_MSG_Groupmsg){}publicvoidRE_EXAMPLE_MANAGE(RE_MSG_AdminChangemsg){System.out.println("群成员变动");}publicvoidRE_EXAMPLE_DEMBER(DeleteAdminmsg){System.out.println("群成员减少");}publicvoidRE_EXAMPLE_AMEMBER(AddAdminmsg){System.out.println("群成员添加");}publicvoidRE_EXAMPLE_ADDFRIEND(AddFriendExamplemsg){System.out.println("好友添加成功");}publicvoidRE_ASK_ADDFRIEND(AddFriendsmsg){System.out.println("请求添加好友");}publicvoidRE_ASK_ADDGROUP(ADDGroupExamplemsg){System.out.println("请求添加群");}}

api接口参数说明:

{“error”:“0”,“act”:“21”,“fromQQ”:“1234”,“subType”:“11”,“sendTime”:“1479679322”,“msg”:“你好啊!”,“font”:“52996664”}error表示错误代码,一般为0,act为21表示这是一个私聊消息,上述消息表示qq号为1234的好友向CoolQ用户发送了一条内容为“你好啊”的消息

服务器事件id及各字段名词如下(注意区分大小写):

2群消息subType,sendTime,fromGroup,fromQQ,fromAnonymous,msg,font,username,nick,sex,age,fromGroupName红色字段为LEMOC所加字段,原CoolQ消息之中无此字段,username为qq昵称,nick是群名片,sex性别,age年龄,fromGroupName为QQ群的名称示例:{“username”:“泰兰德”,“nick”:“泰奶奶”,“sex”:“0”,“age”:“12000”,“error”:“0”,“act”:“2”,“fromGroup”:“1234”,“fromGroupName”:“月之女祭司”,“fromQQ”:“1234”,“subType”:“1”,“sendTime”:“1481481775”,“fromAnonymous”:“”,“msg”:“谁看到玛法里奥了?”,“font”:“7141560”}

4讨论组消息subType,sendTime,fromDiscuss,fromQQ,msg,font,nick,sex,age红色字段为LEMOC所加字段,原CoolQ消息之中无此字段,含义与21私聊消息相同

21私聊消息subType(子类型,11/来自好友1/来自在线状态2/来自群3/来自讨论组),sendTime,fromQQ,msg,font,nick,sex,age红色字段为LEMOC所加字段,原CoolQ消息之中无此字段,nick为qq昵称,sex性别,age年龄示例:{“nick”:“奈法利安”,“sex”:“0”,“age”:“2000”,“error”:“0”,“act”:“21”,“fromQQ”:“12345”,“subType”:“11”,“sendTime”:“1481481771”,“font”:“7140312”,“msg”:“游戏开始!”}

101群事件-管理员变动subType(1/被取消管理员2/被设置管理员),sendTime,fromGroup,beingOperateQQ

102群事件-群成员减少subType(子类型,1/群员离开2/群员被踢3/自己(即登录号)被踢),sendTime,fromGroup,fromQQ(操作者QQ-仅subType为2、3时存在),beingOperateQQ

103群事件-群成员增加subType(子类型,1/管理员已同意2/管理员邀请),sendTime,fromGroup,fromQQ(操作者QQ-即管理员QQ),beingOperateQQ

201好友事件-好友已添加subType,sendTime,fromQQ

301请求-好友添加subType,sendTime,fromQQ,msg(附言),responseFlag(反馈标识-处理请求用)

302请求-群添加subType(子类型,1/他人申请入群2/自己(即登录号)受邀入群),sendTime,fromGroup,fromQQ,msg(附言),responseFlag(反馈标识-处理请求用)

客户端向服务器端发送消息的示例:{“act”:“106”,“QQID”:“1234”,“msg”:“我很好!”}表示向qq号为1234的好友发送一条“我很好”的私聊消息。

act和各字段含义如下,注意区分大小写,可能包含中文的字段,比如msg应使用utf8编码,如有返回数据,也是utf8:

101,发送群消息groupid,msg

103,发送讨论组消息discussid,msg

106,发送私聊消息QQID,msg

110,发送赞QQID

120,置群员移除QQID,groupid,rejectaddrequest

121,置群员禁言QQID,groupid,duration

122,置群管理员QQID,groupid,setadmin

123,置全群禁言QQID,groupid,enableban

124,置匿名群员禁言groupid,duration,anomymous

125,置群匿名设置groupid,enableanomymous

126,置群成员名片groupid,QQID,newcard

127,置群退出(出于安全起见,该权限没有开启)groupid,isdismiss

128,置群成员专属头衔groupid,QQID,duration,newspecialtitle

130,取群成员信息(注,info返回的是base64字节流,需要经过处理之后获取信息,如果需要以json串方式获取群成员信息请见25303)groupid,QQID,nocache返回json串字段:error,act,return,info

131,取陌生人信息(注,info返回的是base64字节流,需要经过处理之后获取信息,如果需要以json串方式获取群成员信息请见25304)QQID,nocache返回json串字段:error,act,return,info

140,置讨论组退出discussid

150,置好友添加请求responseoperation,remark,responseflag

151,置群添加请求requesttype,responseoperation,reason,responseflag

另有五个LEMOC定义或提供的接口:

25301,获取登录QQ号请求json串只有一个act返回json串字段:error,act,return,LoginQQ

25302,获取登录昵称请求json串只有一个act返回json串字段:error,act,return,LoginNick

25303,以json串方式返回群成员信息groupid,QQID,nocache返回json串字段:error,act,return,groupid,QQID,username,nick,sex,age,area,jointime,lastsent,level_name,permission,unfriendly,title,titleExpiretime,nickcanchange(各字段具体含义详见本帖19楼说明)

25304,以json串方式返回陌生人信息QQID,nocache返回json串字段:error,act,return,QQID,nick,sex,age(各字段具体含义详见本帖19楼说明)

25305,获取指定QQ号所在的所有群id和群名称QQID(此QQID仅为标记用,无论填写的QQ为多少,返回的群列表都是酷Q当前登录QQ号所在的群)返回json串字段:error,act,return,QQID,GroupList说明:error为-1表示出错,为0表示正常。act为0,return为25305表示是对25305的响应QQID为你发送的指定QQ号,以确定是对哪一条消息的响应GroupList为一个json列表,示例如下,groupId为群号,groupName为群名称:[{“groupId”:“1111”,“groupName”:“黑手吹逼群”},{“groupId”:“2222”,“groupName”:“屁股围观群”},{“groupId”:“3333”,“groupName”:“法鸡粉丝群”}]

获取指定QQ号的QQ头像图片,可见Byniao丶Lonely的这个帖子:分享一个QQ头像地址

其中130,131,25301,25302,25303,25304,25305等七个消息会有返回数据,返回数据的act为0,同时有一个return字段用于标记数据是哪个消息的返回信息。举例来说,想要以获取4321这个群内QQ号为1234的用户,需要构造json串:

{“act”:“25303”,“QQID”:“1234”,“groupid”:“4321”,“nocache”:“1”}

发送至LEMOC,之后会受到类似这样的返回字符串:

{“groupid”:“4321”,“QQID”:“1234”,“username”:“法芮尔·艾玛莉”,“nick”:“法鸡”,“sex”:“1”,“age”:“32”,“area”:“埃及”,“jointime”:“1429035533”,“lastsent”:“1479687648”,“level_name”:“首席安全官”,“permission”:“2”,“unfriendly”:“0”,“title”:“法老之鹰”,“titleExpiretime”:“4294967295”,“nickcanchange”:“1”,“error”:“0”,“act”:“0”,“return”:“25303”}

具体在使用的时候直接调用属性/字段即可,因为他内部自动将JSON转换了.例如:

try{JSONjson=JSON.parse(msg);this.nick=String.format("%s",json.get("nick"));this.sex=String.format("%s",json.get("sex"));this.age=String.format("%s",json.get("age"));this.act=String.format("%s",json.get("act"));this.fromQQ=String.format("%s",json.get("fromQQ"));this.fromAnonymous=String.format("%s",json.get("fromAnonymous"));this.subType=String.format("%s",json.get("subtype"));this.sendTime=String.format("%s",json.get("time"));this.msg1=String.format("%s",json.get("msg"));this.font=String.format("%s",json.get("font"));this.username=String.format("%s",json.get("username"));this.fromGroupName=String.format("%s",json.get("fromGroupName"));this.fromGroup=String.format("%s",json.get("fromGroup"));this.type=2;}catch(ParserExceptionvar3){var3.printStackTrace();}catch(IOExceptionvar4){var4.printStackTrace();}

效果如下:GitHub地址:https://github.com/aishenghuoaizhihao/kq-robot-msg.git

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇