⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 milyqq.java

📁 MilyQQ是一个使用控制台的QQ客户端,基于LumaQQ的核心JQL包开发,只有一个可执行的jar包(MilyQQ.jar),携带方便,由于是Java程序,因此理论上应该可以运行于所有平台,不过基于
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
		if(id<1 || id > index.size()){helpInfo("ls");return;}		id = indexToQQNumber(id); //得到了QQ号		String msg = "+===================该用户的详细信息====================+";		if(friends.containsKey(id)){			QQFriend friend = friends.get(id);						msg += "\nQQ:" + friend.qqNum + "\t昵称:" + filterNewline(friend.nick)				//+ "\t头像:" + friend.head 				+ "\t性别:" + ((friend.gender ==QQ.QQ_GENDER_GG)					? "男  ":(friend.gender==QQ.QQ_GENDER_MM)?"女  ":"未知")				+ "\t年龄:" + friend.age 				+"\n会员:" + (((friend.userFlag & 0x1) !=0) ? "是" : "不是")				+"\t移动QQ:" + (((friend.userFlag & 0x10) !=0) ? "是" : "不是")				+"\t绑定手机:" + (((friend.userFlag & 0x40) !=0) ? "是" : "否")				+"\t摄像头:" + (((friend.userFlag & 0x10) !=0) ? "有" : "无")				+"\nTM登录:" + (((friend.userFlag & 0x20000) !=0) ? "是" : "否");					}		if(friendStatus.containsKey(id)){			FriendStatus s = friendStatus.get(id);			msg += "\t当前状态:" + getCurrentStatus(s.status) + "\t来自:" 				+ Util.getIpStringFromBytes(s.ip)	+ ":" + s.port ;		}		msg += "\n备注:" + (remarks.containsKey(id) ? remarks.get(id).name : "-"); 		msg += "\n个性签名: "+(signatures.containsKey(id) ? signatures.get(id).sig : "-")				+"\n";		msg +=       "+=======================================================+\n";		System.out.print(msg);	}	private void processCmdListAll(){		int i=0;		String gender = new String();		String status = new String();		String nick = new String();		if(!index.isEmpty()) index.clear();		System.out.print(   "+编号+--QQ号码---+年龄+性别+状态+------昵称(备注)-------+");		for (Map.Entry<Integer, QQFriend> entry : friends.entrySet()) {			gender = ((entry.getValue().gender==QQ.QQ_GENDER_GG)				?"GG":(entry.getValue().gender==QQ.QQ_GENDER_MM)?"MM":"??");			status = getCurrentStatus( friendStatus.containsKey(entry.getKey())				? friendStatus.get(entry.getKey()).status : QQ.QQ_STATUS_OFFLINE);			nick = filterNewline(entry.getValue().nick)				+(remarks.containsKey(entry.getKey())				? ("\t(" + remarks.get(entry.getKey()).name + ")") : "");			index.add(entry.getKey());			System.out.printf("\n%4d | %-10d|%3d | %s |%s| %-16s",				++i, entry.getKey(), entry.getValue().age, gender, status, nick);			if(i%20==0)	doPause();		}		System.out.printf("\n+-------------------------------------------------------+\n");	}	private void processCmdListGroup(){		int i=0;		if(!index.isEmpty()) index.clear();		System.out.print("+编号+--群号码---+------群名字-------+");		for (Map.Entry<Integer, ClusterInfo> entry : clusters.entrySet()) {			index.add(entry.getKey());			System.out.printf("\n%4d | %-10d| %-16s",++i,entry.getKey(),				filterNewline(entry.getValue().name));			if(i%20==0)	doPause();		}		System.out.printf("\n+------------------------------------+\n");	}		private void processCmdListGroup(String clusterId){		if(!Util.isInt(clusterId)){ helpInfo("lsg"); return; }		int gid = Integer.parseInt(clusterId);		//群成员只能用群的编号来察看		if(gid<1 || gid>index.size()){helpInfo("lsg"); return; }		gid = indexToQQNumber(gid);		if(!index.contains(gid) || !clusters.containsKey(gid)){			helpInfo("lsg");			return;		}					System.out.print("  ==群:" + clusters.get(gid).name 			+ "(" + gid + ")的成员列表==\n");		String description = clusters.get(gid).description;		String notice = clusters.get(gid).notice;		//转换成群内部ID		gid=clusters.get(gid).clusterId;			//得到一个群的成员列表		HashMap<Integer,QQFriend> oneCluster = members.get(gid);		int i=0;		String gender = new String();		String status = new String();		String nick = new String();		if(!index.isEmpty()) index.clear();		System.out.print(   "+编号+--QQ号码---+年龄+性别+状态+------昵称(备注)-------+");		for (Map.Entry<Integer,QQFriend> entry : oneCluster.entrySet()){			index.add(entry.getKey());			gender = ((entry.getValue().gender==QQ.QQ_GENDER_GG)				?"GG":(entry.getValue().gender==QQ.QQ_GENDER_MM)?"MM":"??");			status = getCurrentStatus( friendStatus.containsKey(entry.getKey())				? friendStatus.get(entry.getKey()).status : QQ.QQ_STATUS_OFFLINE);			nick = filterNewline(entry.getValue().nick)				+(remarks.containsKey(entry.getKey())				? ("\t(" + remarks.get(entry.getKey()).name + ")") : "");			System.out.printf("\n%4d | %-10d|%3d | %s |%s| %-16s",				++i, entry.getKey(), entry.getValue().age, gender, status, nick);			if(i%20==0)	doPause();		}		System.out.printf("\n+-------------------------------------------------------+\n");		System.out.printf("群描述: %s\n群通知: %s\n", description, notice);	}	private void processCmdInfo(String num){		if(!Util.isInt(num)) {			helpInfo("info");			return;		}		client.getUserInfo(indexToQQNumber(Integer.parseInt(num)));	}	private void processCmdSig(){		if(!isSignatureOk) return;		int i = 0;		String nick = new String();		String remark_name = new String();		for (Map.Entry<Integer, Signature> entry : signatures.entrySet()) {			nick = filterNewline(friends.containsKey(entry.getKey())				? friends.get(entry.getKey()).nick : "");			remark_name = (remarks.containsKey(entry.getKey())				? (" (" + remarks.get(entry.getKey()).name + ")") : "");			System.out.printf("[%d] QQ: %-10d  昵称: %s  备注名称: %s \n个性签名: %s\n\n",				++i,entry.getKey(),nick,remark_name,entry.getValue().sig);			if(i%5==0) doPause();		}	}	private void processCmdCd(String arg){		if(!Util.isInt(arg) && !arg.equals("..")) {			helpInfo("cd");			return;		}		try {			if(arg.equals("..")){				chattingNo=0;				chattingName="";			} else {				int tempNo = indexToQQNumber(Integer.parseInt(arg));				if (friends.containsKey(tempNo)) {					chattingNo = tempNo;					chattingName = friends.get(tempNo).nick;					chattingName = filterNewline(chattingName);					chattingType = 0;				} else if (clusters.containsKey(tempNo)) {					chattingNo = clusters.get(tempNo).clusterId;					chattingName = clusters.get(tempNo).name;					chattingName = filterNewline(chattingName);					chattingType = 1;				} else {					System.out.print("无效的编号,QQ号,群号!\n");				}			}		} 		catch (Exception ex) {			helpInfo("cd");			if(isDebug) ex.printStackTrace();					}	}	private void processCmdSend(String num,String msg){		if(!Util.isInt(num)){			helpInfo("send");			return;		}		try {			int tempNo = indexToQQNumber(Integer.parseInt(num));			if (friends.containsKey(tempNo)) {				client.sendIM(tempNo, msg);				processCmdCd(num);			} else if (clusters.containsKey(tempNo)){				client.sendClusterIM(clusters.get(tempNo).clusterId, msg);				processCmdCd(num);			} else {				System.out.print("无效的编号,QQ号,群号!\n");			}		} 		catch (Exception ex) {			helpInfo("send");			if(isDebug) ex.printStackTrace();					}	}	private void processCmdStatus(String num){		if(!Util.isInt(num)){			helpInfo("status");			return;		}		switch(Integer.parseInt(num)){			case 1:	getCurrentStatus();	break;			case 2:	client.makeMeOnline(); break;			case 3:	client.makeMeHidden(); break;			case 4:	client.makeMeAway(); break;			case 0:					user.setStatus(QQ.QQ_STATUS_OFFLINE);				client.sendPacket(new ChangeStatusPacket(user));				break; 			default: System.out.print(" 未知状态!!\n");		}	}	private void processCmdRemark(String num){		if(!Util.isInt(num)){			helpInfo("remark");			return;		}		client.downloadFriendRemark(indexToQQNumber(Integer.parseInt(num)));	}	public static void main(String[] args) { MilyQQ qq = new MilyQQ(); }	private void requestSignature(){		ArrayList<Signature> sigs = new ArrayList<Signature>();		isSignatureOk = false;		//对所有的QQ号进行排序		Collections.sort(qqNumList, new Comparator<Integer>() {   			public int compare(Integer s1, Integer s2) { return s1.intValue() -s2.intValue();  }     		});				for (int i=0; i<qqNumList.size() && i<33 ; i++) {			Signature sig = new Signature();			sig.qq = qqNumList.get(i);			sigs.add(sig);		}		client.getSignature(sigs);	}	private void requestSignature(int nextQQ){		ArrayList<Signature> sigs = new ArrayList<Signature>();		for (int i = qqNumList.indexOf(nextQQ) ;  i<qqNumList.size() 			&& i<qqNumList.indexOf(nextQQ)+33 ; i++) {			Signature sig = new Signature();			sig.qq = qqNumList.get(i);			sigs.add(sig);		}		client.getSignature(sigs);	}	public void qqEvent(QQEvent e) {		switch (e.type) {		case QQEvent.QQ_LOGIN_SUCCESS:			processLoginSuccess(e);			initStep = 1;			break;		case QQEvent.QQ_LOGIN_REDIRECT_NULL:   			System.out.print("地址重定向到0,随机选取其他服务器再登录.\n");			this.login();			break;		case QQEvent.QQ_LOGIN_UNKNOWN_ERROR:			System.out.print("未知的登录错误导致登陆失败,重新登录.\n");			this.login();			break;		case QQEvent.QQ_CHANGE_STATUS_SUCCESS:			System.out.print("改变状态完成.\n");			getCurrentStatus();			System.out.print(chattingName+">");			if (initStep == 1) {				initStep = 2;				client.getFriendList();				client.downloadFriend(0);			}			break;		case QQEvent.QQ_CHANGE_STATUS_FAIL:			System.out.print("改变状态失败.\n");			break;		case QQEvent.QQ_GET_FRIEND_LIST_SUCCESS:			processFriendList(e);			break;		case QQEvent.QQ_DOWNLOAD_GROUP_FRIEND_SUCCESS:			processGroupFriend(e);			break;		case QQEvent.QQ_DOWNLOAD_GROUP_FRIEND_FAIL:			System.out.print("下载好友分组失败, 注销!\n");			this.logout();			break;		case QQEvent.QQ_GET_CLUSTER_INFO_SUCCESS:			processClusterInfo(e);			break;		case QQEvent.QQ_GET_CLUSTER_INFO_FAIL:			System.out.print("得到群信息错误. 注销!\n");			this.logout();			break;		case QQEvent.QQ_GET_MEMBER_INFO_SUCCESS:			processMemberInfo(e);			break;		case QQEvent.QQ_GET_MEMBER_INFO_FAIL:			System.out.print("得到成员信息错误. 注销!\n");			this.logout();			break;		case QQEvent.QQ_RECEIVE_CLUSTER_IM:			processClusterIM(e);			break;		case QQEvent.QQ_RECEIVE_NORMAL_IM:			client.qqEvent(e);			processNormalIM(e);			break;		case QQEvent.QQ_CONNECTION_BROKEN:			System.out.print("连接被打断, 重新连接...\n");			friendStatus.clear();			try {client.login();} catch (Exception ex) {if(isDebug) ex.printStackTrace();}			break;		case QQEvent.QQ_CONNECTION_LOST:			System.out.print("连接被丢失, 重新连接...\n");			friendStatus.clear();			try {client.login();} catch (Exception ex) {if(isDebug) ex.printStackTrace();}			break;		case QQEvent.QQ_OPERATION_TIMEOUT:			if(isDebug) System.out.print("操作超时...\n>");			if(e.operation==QQ.QQ_CMD_LOGIN 				|| e.operation==QQ.QQ_CMD_REQUEST_LOGIN_TOKEN) {				if(isLogin) this.logout();				System.err.print("登录超时, login命令重新登录或者exit 命令退出!\n>");			}			break;		case QQEvent.QQ_GET_FRIEND_ONLINE_SUCCESS:			processFriendOnline(e);			break;		case QQEvent.QQ_FRIEND_CHANGE_STATUS:			if(initStep >= stepCounter) processFriendChangeStatus(e);			break;		case QQEvent.QQ_GET_USER_INFO_SUCCESS:			if(initStep >= stepCounter) processUserInfo(e);			break;		case QQEvent.QQ_GET_WEATHER_SUCCESS:			processWeather(e);			break;		case QQEvent.QQ_GET_WEATHER_FAIL:			System.out.print("请求天气操作失败...\n>");			break;		case QQEvent.QQ_GET_SIGNATURE_SUCCESS:			processSignature(e);			break;		case QQEvent.QQ_GET_SIGNATURE_FAIL:			System.out.print("\n 请求个性签名失败...\n>");			System.out.print(chattingName + ">");			break;		case QQEvent.QQ_RECEIVE_SYS_MESSAGE:			if(isDebug){				System.out.print("\n 收到系统消息...\n>");				System.out.print(chattingName + ">");			}			break;		case QQEvent.QQ_REQUEST_SEND_FILE:			if(isDebug){				System.out.print("\n 对方要求传文件...\n>");				System.out.print(chattingName + ">");			}			break;		case QQEvent.QQ_ACCEPT_SEND_FILE:			break;		case QQEvent.QQ_NOTIFY_FILE_TRANSFER_ARGS:			break;		case QQEvent.QQ_CANCEL_SEND_FILE:			if(isDebug){				System.out.print("\n 对方取消了发送文件...\n>");				System.out.print(chattingName + ">");			}			break;		case QQEvent.QQ_REJECT_SEND_FILE:			if(isDebug){				System.out.print("\n 对方拒绝接受文件...\n>");				System.out.print(chattingName + ">");			}			break;		case QQEvent.QQ_DOWNLOAD_FRIEND_REMARK_SUCCESS:			processRemark(e);			break;		case QQEvent.QQ_BATCH_DOWNLOAD_FRIEND_REMARK_SUCCESS:			processBatchRemark(e);			break;		}	}	private void processLoginSuccess(QQEvent e){		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");		try{			LoginReplyPacket p = (LoginReplyPacket) e.getSource();			user.setSessionKey(p.sessionKey);			user.setLastLoginIp(p.lastLoginIp);			user.setLoginTime(p.loginTime);			user.setLastLoginTime(p.lastLoginTime);			user.setServerIp(p.serverIp);			user.setServerPort(p.port);			user.setIp(p.ip);			user.setPort(p.port);			user.setClientKey(p.clientKey);						String msg = "您上次在 " + sdf.format(new Date(p.lastLoginTime))				+" , 从 " +Util.getIpStringFromBytes(p.lastLoginIp)+ " 登录" 				+ "\n 登录成功,等待状态改变."				+ "\n>";			System.out.print(msg);		}		catch (Exception ex) {			if(isDebug) ex.printStackTrace();		}		}	private void processSignature(QQEvent e){		try{			SignatureOpReplyPacket p = 				(SignatureOpReplyPacket) e.getSource();			for(Signature s: p.signatures){				if(!signatures.containsKey(s.qq))					signatures.put(s.qq, s);			}			//还有更多,继续请求个性签名			if( (p.nextQQ-1)!=Collections.max(qqNumList)) {				if(isDebug) System.out.print("请求个性签名.\n>");				requestSignature(p.nextQQ-1);			} else {				isSignatureOk = true;				System.out.print("获取个性签名完成.\n>");			}		}		catch (Exception ex) {			if(isDebug) ex.printStackTrace();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -