Java实现QQ机器人
Java實現QQ機器人
使用Java攔截QQ消息 + 回復消息…等等(酷Q+java 實現)
需要下載的文件:https://pan.baidu.com/s/13xvYG6VXr9Bj_oJokVbJ9w 提取碼:od38
解壓后:添加上項目依賴/jar包,啟動CQA輸入要成為機器人的QQ號.
創建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服務端kqWebClient = new KQWebClient(new URI(host));}//添加監聽kqWebClient.addQQMSGListenner(new MyQQAdapter(kqWebClient));} catch (URISyntaxException e) {//e.printStackTrace();LOGGER.error("初始化客戶端失敗(錯誤原因):"+e.getMessage());e.printStackTrace();}}public static void main(String[] args) {//初始化客服端runClient();} }創建MyQQAdapter.class根據要實現的功能重寫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(回復那個人), String groupid(回復QQ群號), String msg(回復消息), 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());//回復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接口參數說明:
{ “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轉換了.
例如:
效果如下:
GitHub地址:https://github.com/aishenghuoaizhihao/kq-robot-msg.git
總結
以上是生活随笔為你收集整理的Java实现QQ机器人的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 0DAY和warez
- 下一篇: java jad_Java反编译工具 j