Java实现QQ机器人
Java實(shí)現(xiàn)QQ機(jī)器人
使用Java攔截QQ消息 + 回復(fù)消息…等等(酷Q+java 實(shí)現(xiàn))
需要下載的文件:https://pan.baidu.com/s/13xvYG6VXr9Bj_oJokVbJ9w 提取碼:od38
解壓后:添加上項(xiàng)目依賴/jar包,啟動(dòng)CQA輸入要成為機(jī)器人的QQ號(hào).
創(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("初始化客戶端失敗(錯(cuò)誤原因):"+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ù)那個(gè)人), String groupid(回復(fù)QQ群號(hào)), 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("群成員變動(dòng) ");}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("請(qǐng)求添加好友");}public void RE_ASK_ADDGROUP(ADDGroupExample msg) {System.out.println("請(qǐng)求添加群");} }api接口參數(shù)說明:
{ “error”: “0”, “act”: “21”, “fromQQ”: “1234”, “subType”: “11”, “sendTime”: “1479679322”, “msg”: “你好啊!”, “font”: “52996664”}
error表示錯(cuò)誤代碼,一般為0,act為21表示這是一個(gè)私聊消息,上述消息表示qq號(hào)為1234的好友向CoolQ用戶發(fā)送了一條內(nèi)容為“你好啊”的消息
服務(wù)器事件id及各字段名詞如下(注意區(qū)分大小寫):
2 群消息
subType,sendTime,fromGroup, fromQQ ,fromAnonymous, msg,font, username, nick, sex, age, fromGroupName
紅色字段為L(zhǎng)EMOC所加字段,原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
紅色字段為L(zhǎng)EMOC所加字段,原CoolQ消息之中無此字段,含義與21 私聊消息相同
21 私聊消息
subType (子類型,11/來自好友 1/來自在線狀態(tài) 2/來自群 3/來自討論組),sendTime,fromQQ,msg,font, nick, sex, age
紅色字段為L(zhǎng)EMOC所加字段,原CoolQ消息之中無此字段,nick為qq昵稱,sex性別,age年齡
示例:
{ “nick”: “奈法利安”, “sex”: “0”, “age”: “2000”, “error”: “0”, “act”: “21”, “fromQQ”: “12345”, “subType”: “11”, “sendTime”: “1481481771”, “font”: “7140312”, “msg”: “游戲開始!”}
101 群事件-管理員變動(dòng)
subType(1/被取消管理員 2/被設(shè)置管理員),sendTime,fromGroup,beingOperateQQ
102 群事件-群成員減少
subType(子類型,1/群?jiǎn)T離開 2/群?jiǎn)T被踢 3/自己(即登錄號(hào))被踢),sendTime,fromGroup,fromQQ(操作者QQ-僅subType為2、3時(shí)存在),beingOperateQQ
103 群事件-群成員增加
subType(子類型,1/管理員已同意 2/管理員邀請(qǐng)),sendTime,fromGroup,fromQQ(操作者QQ-即管理員QQ),beingOperateQQ
201 好友事件-好友已添加
subType,sendTime,fromQQ
301 請(qǐng)求-好友添加
subType,sendTime,fromQQ,msg(附言),responseFlag(反饋標(biāo)識(shí)-處理請(qǐng)求用)
302 請(qǐng)求-群添加
subType(子類型,1/他人申請(qǐng)入群 2/自己(即登錄號(hào))受邀入群),sendTime,fromGroup,fromQQ,msg(附言),responseFlag(反饋標(biāo)識(shí)-處理請(qǐng)求用)
客戶端向服務(wù)器端發(fā)送消息的示例:
{ “act”: “106”, “QQID”: “1234”, “msg”: “我很好!”}
表示向qq號(hào)為1234的好友發(fā)送一條“我很好”的私聊消息。
act和各字段含義如下,注意區(qū)分大小寫,可能包含中文的字段,比如msg應(yīng)使用utf8編碼,如有返回?cái)?shù)據(jù),也是utf8:
101, 發(fā)送群消息
groupid,msg
103, 發(fā)送討論組消息
discussid,msg
106, 發(fā)送私聊消息
QQID,msg
110, 發(fā)送贊
QQID
120, 置群?jiǎn)T移除
QQID,groupid,rejectaddrequest
121, 置群?jiǎn)T禁言
QQID,groupid,duration
122, 置群管理員
QQID,groupid,setadmin
123, 置全群禁言
QQID,groupid,enableban
124, 置匿名群?jiǎn)T禁言
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串方式獲取群成員信息請(qǐng)見25303)
groupid,QQID,nocache
返回json串字段:
error, act, return,info
131, 取陌生人信息(注,info返回的是base64字節(jié)流,需要經(jīng)過處理之后獲取信息,如果需要以json串方式獲取群成員信息請(qǐng)見25304)
QQID,nocache
返回json串字段:
error, act, return,info
140, 置討論組退出
discussid
150, 置好友添加請(qǐng)求
responseoperation,remark,responseflag
151, 置群添加請(qǐng)求
requesttype,responseoperation,reason,responseflag
另有五個(gè)LEMOC定義或提供的接口:
25301,獲取登錄QQ號(hào)
請(qǐng)求json串只有一個(gè)act
返回json串字段:
error, act, return,LoginQQ
25302,獲取登錄昵稱
請(qǐng)求json串只有一個(gè)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號(hào)所在的所有群id和群名稱
QQID(此QQID僅為標(biāo)記用,無論填寫的QQ為多少,返回的群列表都是酷Q當(dāng)前登錄QQ號(hào)所在的群)
返回json串字段:
error,act,return,QQID,GroupList
說明:
error為-1表示出錯(cuò),為0表示正常。
act為0,return為25305表示是對(duì)25305的響應(yīng)
QQID為你發(fā)送的指定QQ號(hào),以確定是對(duì)哪一條消息的響應(yīng)
GroupList為一個(gè)json列表,示例如下,groupId為群號(hào),groupName為群名稱:
[
{ “groupId”: “1111”, “groupName”: “黑手吹逼群” },
{ “groupId”: “2222”, “groupName”: “屁股圍觀群” },
{ “groupId”: “3333”, “groupName”: “法雞粉絲群” }
]
獲取指定QQ號(hào)的QQ頭像圖片,可見 Byniao丶Lonely 的這個(gè)帖子:分享一個(gè)QQ頭像地址
其中130,131,25301,25302,25303,25304,25305等七個(gè)消息會(huì)有返回?cái)?shù)據(jù),返回?cái)?shù)據(jù)的act為0,同時(shí)有一個(gè)return字段用于標(biāo)記數(shù)據(jù)是哪個(gè)消息的返回信息。
舉例來說,想要以獲取4321這個(gè)群內(nèi)QQ號(hào)為1234的用戶,需要構(gòu)造json串:
{ “act”: “25303”, “QQID”: “1234”, “groupid”: “4321”, “nocache”:“1” }
發(fā)送至LEMOC,之后會(huì)受到類似這樣的返回字符串:
{
“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”
}
具體在使用的時(shí)候直接調(diào)用屬性/字段即可,因?yàn)樗麅?nèi)部自動(dòng)將JSON轉(zhuǎn)換了.
例如:
效果如下:
GitHub地址:https://github.com/aishenghuoaizhihao/kq-robot-msg.git
總結(jié)
以上是生活随笔為你收集整理的Java实现QQ机器人的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 0DAY和warez
- 下一篇: MOV 和MOVS 这两条指令有什么区别