Java实现QQ机器人
Java實(shí)現(xiàn)QQ機(jī)器人
使用Java攔截QQ消息 + 回復(fù)消息…等等(酷Q+java 實(shí)現(xiàn))
需要下載的文件:https://pan.baidu.com/s/13xvYG6VXr9Bj_oJokVbJ9w 提取碼:od38
解壓后:添加上項目依賴/jar包,啟動CQA輸入要成為機(jī)器人的QQ號.
創(chuàng)建KQClient.class
/*** 客戶端*/ public class KQClient {//記錄器private final static Logger LOGGER = LoggerFactory.getLogger(KQClient.class);private static KQWebClient kqWebClient;private static final String host="wx://localhost:25303";public static void runClient(){try {if(kqWebClient == null){//連接酷Q服務(wù)端kqWebClient = new KQWebClient(new URI(host));}//添加監(jiān)聽kqWebClient.addQQMSGListenner(new MyQQAdapter(kqWebClient));} catch (URISyntaxException e) {//e.printStackTrace();LOGGER.error("初始化客戶端失敗(錯誤原因):"+e.getMessage());e.printStackTrace();}}public static void main(String[] args) {//初始化客服端runClient();} }創(chuàng)建MyQQAdapter.class根據(jù)要實(shí)現(xiàn)的功能重寫KQMSGAdapter.class父類方法即可.
package com.example.boot.client;import com.mumu.listenner.KQMSGAdapter; import com.mumu.msg.RE_MSG_Group; import com.mumu.msg.RE_MSG_Private; import com.mumu.webclient.KQWebClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class MyQQAdapter extends KQMSGAdapter {private final static Logger LOGGER = LoggerFactory.getLogger(KQClient.class);private KQWebClient kqWebClient;MyQQAdapter(KQWebClient kqWebClient){this.kqWebClient = kqWebClient;}/*** 接收QQ群消息* @param msg*/@Overridepublic void RE_MSG_Group(RE_MSG_Group msg) {//super.RE_MSG_Group(msg);LOGGER.info("接受QQ群消息 groupName:"+msg.getFromGroup()+"msg:"+msg.getMsg());/*** parameters:* String qq(回復(fù)那個人), String groupid(回復(fù)QQ群號), String msg(回復(fù)消息), Boolean isAT(是否@)*/kqWebClient.sendGroupMSG(msg.getFromQQ(),msg.getFromGroup(),"我收到群消息啦",false);}/*** 接收私聊消息* @param msg*/@Overridepublic void Re_MSG_Private(RE_MSG_Private msg) {//super.Re_MSG_Private(msg);LOGGER.info("接收到私聊消息:fromQQ:"+msg.getFromqq()+"msg:"+msg.getMsg());//回復(fù)kqWebClient.sendPrivateMSG(msg.getFromqq(),"我收到私聊消息啦!!!!!");} }KQMSGAdapter.class源碼如下:
public class KQMSGAdapter extends KQMSGListenner {public KQMSGAdapter() {}//私聊消息方法public void Re_MSG_Private(RE_MSG_Private msg) {}//論壇消息方法public void RE_MSG_FORUM(RE_MSG_Forum msg) {}//Q群消息方法public void RE_MSG_Group(RE_MSG_Group msg) {}public void RE_EXAMPLE_MANAGE(RE_MSG_AdminChange msg) {System.out.println("群成員變動 ");}public void RE_EXAMPLE_DEMBER(DeleteAdmin msg) {System.out.println("群成員減少");}public void RE_EXAMPLE_AMEMBER(AddAdmin msg) {System.out.println("群成員添加");}public void RE_EXAMPLE_ADDFRIEND(AddFriendExample msg) {System.out.println("好友添加成功");}public void RE_ASK_ADDFRIEND(AddFriends msg) {System.out.println("請求添加好友");}public void RE_ASK_ADDGROUP(ADDGroupExample msg) {System.out.println("請求添加群");} }api接口參數(shù)說明:
{ “error”: “0”, “act”: “21”, “fromQQ”: “1234”, “subType”: “11”, “sendTime”: “1479679322”, “msg”: “你好啊!”, “font”: “52996664”}
error表示錯誤代碼,一般為0,act為21表示這是一個私聊消息,上述消息表示qq號為1234的好友向CoolQ用戶發(fā)送了一條內(nèi)容為“你好啊”的消息
服務(wù)器事件id及各字段名詞如下(注意區(qū)分大小寫):
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/來自在線狀態(tài) 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/被設(shè)置管理員),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(反饋標(biāo)識-處理請求用)
302 請求-群添加
subType(子類型,1/他人申請入群 2/自己(即登錄號)受邀入群),sendTime,fromGroup,fromQQ,msg(附言),responseFlag(反饋標(biāo)識-處理請求用)
客戶端向服務(wù)器端發(fā)送消息的示例:
{ “act”: “106”, “QQID”: “1234”, “msg”: “我很好!”}
表示向qq號為1234的好友發(fā)送一條“我很好”的私聊消息。
act和各字段含義如下,注意區(qū)分大小寫,可能包含中文的字段,比如msg應(yīng)使用utf8編碼,如有返回數(shù)據(jù),也是utf8:
101, 發(fā)送群消息
groupid,msg
103, 發(fā)送討論組消息
discussid,msg
106, 發(fā)送私聊消息
QQID,msg
110, 發(fā)送贊
QQID
120, 置群員移除
QQID,groupid,rejectaddrequest
121, 置群員禁言
QQID,groupid,duration
122, 置群管理員
QQID,groupid,setadmin
123, 置全群禁言
QQID,groupid,enableban
124, 置匿名群員禁言
groupid,duration,anomymous
125, 置群匿名設(shè)置
groupid,enableanomymous
126, 置群成員名片
groupid,QQID,newcard
127, 置群退出(出于安全起見,該權(quán)限沒有開啟)
groupid,isdismiss
128, 置群成員專屬頭銜
groupid,QQID,duration,newspecialtitle
130, 取群成員信息(注,info返回的是base64字節(jié)流,需要經(jīng)過處理之后獲取信息,如果需要以json串方式獲取群成員信息請見25303)
groupid,QQID,nocache
返回json串字段:
error, act, return,info
131, 取陌生人信息(注,info返回的是base64字節(jié)流,需要經(jīng)過處理之后獲取信息,如果需要以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僅為標(biāo)記用,無論填寫的QQ為多少,返回的群列表都是酷Q當(dāng)前登錄QQ號所在的群)
返回json串字段:
error,act,return,QQID,GroupList
說明:
error為-1表示出錯,為0表示正常。
act為0,return為25305表示是對25305的響應(yīng)
QQID為你發(fā)送的指定QQ號,以確定是對哪一條消息的響應(yīng)
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等七個消息會有返回數(shù)據(jù),返回數(shù)據(jù)的act為0,同時有一個return字段用于標(biāo)記數(shù)據(jù)是哪個消息的返回信息。
舉例來說,想要以獲取4321這個群內(nèi)QQ號為1234的用戶,需要構(gòu)造json串:
{ “act”: “25303”, “QQID”: “1234”, “groupid”: “4321”, “nocache”:“1” }
發(fā)送至LEMOC,之后會受到類似這樣的返回字符串:
{
“groupid”: “4321”,
“QQID”: “1234”,
“username”: “法芮爾·艾瑪莉”,
“nick”: “法雞”,
“sex”: “1”,
“age”: “32”,
“area”: “埃及”,
“jointime”: “1429035533”,
“l(fā)astsent”: “1479687648”,
“l(fā)evel_name”: “首席安全官”,
“permission”: “2”,
“unfriendly”: “0”,
“title”: “法老之鷹”,
“titleExpiretime”: “4294967295”,
“nickcanchange”: “1”,
“error”: “0”,
“act”: “0”,
“return”: “25303”
}
具體在使用的時候直接調(diào)用屬性/字段即可,因為他內(nèi)部自動將JSON轉(zhuǎn)換了.
例如:
效果如下:
GitHub地址:https://github.com/aishenghuoaizhihao/kq-robot-msg.git
總結(jié)
以上是生活随笔為你收集整理的Java实现QQ机器人的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 0DAY和warez
- 下一篇: MOV 和MOVS 这两条指令有什么区别