当前位置: 首页 > 工具软件 > itchat4j > 使用案例 >

Java利用itchat4j插件实现个人微信自动化

孟俊晖
2023-12-01

一直都想实现个人智能微信,不需要自己操作就可以实现与好友的交流,实现微信的智能化。但是在实现过程中,发现已有大神封装了相应的API了,自己做简单调用就可实现了,组件的Git地址:https://github.com/yaphone/itchat4j 克隆下来后,导入到工程中,创建一个新的工程将之引入。这样基本环境就搭建好了:

  • 先创建一个消息处理Handler
    这是实现智能微信最关键的地方,它需要实例化Api中的IMsgHandlerFace接口。代码如下:
public class WechatMsgHandlerFace implements IMsgHandlerFace {
	//文本消息的处理,这里可以定义相关规则进行处理
	@Override
	public String textMsgHandle(BaseMsg msg) {
		String text = msg.getText();
		String result = "收到文本信息: " + text;
		return result;
	}

	//图片消息
	@Override
	public String picMsgHandle(BaseMsg msg) {
		String fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".jpg"; // 这里使用收到图片的时间作为文件名
		String picPath = GlobalData.picMsgPath + File.separator + fileName; // 保存图片的路径
		DownloadTools.getDownloadFn(msg, MsgTypeEnum.PIC.getType(), picPath); // 调用此方法来保存图片
		return "图片保存成功";
	}

	//语音消息
	@Override
	public String voiceMsgHandle(BaseMsg msg) {
		String fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".mp3"; // 这里使用收到语音的时间作为文件名
		String voicePath = GlobalData.voiceMsgPath + File.separator + fileName; // 保存语音的路径
		DownloadTools.getDownloadFn(msg, MsgTypeEnum.VOICE.getType(), voicePath); // 调用此方法来保存语音
		return "声音保存成功";
	}

	//视频消息
	@Override
	public String viedoMsgHandle(BaseMsg msg) {
		String fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date()) + ".mp4"; // 这里使用收到小视频的时间作为文件名
		String viedoPath = GlobalData.videoMsgPath + File.separator + fileName;// 保存小视频的路径
		DownloadTools.getDownloadFn(msg, MsgTypeEnum.VIEDO.getType(), viedoPath);// 调用此方法来保存小视频
		return "视频保存成功";
	}

	@Override
	public String nameCardMsgHandle(BaseMsg arg0) {
		return "收到名片消息";
	}

	@Override
	public void sysMsgHandle(BaseMsg msg) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public String verifyAddFriendMsgHandle(BaseMsg msg) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String mediaMsgHandle(BaseMsg msg) {
		// TODO Auto-generated method stub
		return null;
	}
}
  • 创建服务入口
public class MainFrame {
	public static void main(String[] args) {
		IMsgHandlerFace msgHandler=new WechatMsgHandlerFace();
		Wechat wechat = new Wechat(msgHandler, GlobalData.loginImgPath);
		wechat.start();
	}
}

这个服务的本质是微信网页版,模拟网页爬虫实现的,运行后弹出登录二维码,登录成功后记录好友信息,进行下步逻辑处理。大致提供了以下Api功能:

  1. 获取好友昵称列表 WechatTools.getContactNickNameList()
    此方法会返回好友昵称列表,其函数声明为:
public static List<String> getContactNickNameList()
  1. 获取好友完整信息列表 WechatTools.getContactList()
    此方法会返回好友的完整信息,如昵称、备注、地区、头像链接等,其函数声明为:
public static List<JSONObject> getContactList()
  1. 获取群列表 WechatTools.getGroupIdList()
    群列表与好友列表不同,在登陆后群列表其实是空的,只有主动发送消息或者收到一条群消息时,才能获取到这个群的信息,群列表会记录这个群的id,其格式为@@d052d34b9c9228830363013ee53deb461404f80ea353dbdd8fc9391cbf5f1c46。调用此方法会返回已知的群列表。其声明函数为:
public static List<String> getGroupIdList()
  1. 根据群ID获取群成员WechatTools.getMemberListByGroupId()
    此方法根据群ID(格式为@@d052d34b9c9228830363013ee53deb461404f80ea353dbdd8fc9391cbf5f1c46)获取群成员列表。其函数声明为:
public static JSONArray getMemberListByGroupId(String groupId)
  1. 退出微信 WechatTools.logout()
    退出itchat4j,不再处理消息,其函数声明为:
public static void logout()
  1. 获取微信在线状态WechatTools.getWechatStatus()
    查询微信在线状态,在线返回true,离线返回false,其函数声明为
public static boolean getWechatStatus()
  1. 获取群昵称列表WechatTools.getGroupNickNameList()
    获取群昵称列表,函数声明为:
public static List<String> getGroupNickNameList()
  1. 根据用户昵称修改用户备注MessageTools.remarkNameByNickName(String nickName,
    String remName)
    根据用户昵称修改用户备注名称,其函数声明为:
public static void remarkNameByNickName(String nickName, String remName)
  1. 根据好友昵称发送文本消息,MessageTools.sendMsgByNickName(String text, String
    nickName)
    此方法根据用户昵称发送文本消息,注意,用户需在你的好友列表里,否则发送失败,如果你的好友列表里有存在昵称一样的多个用户,则只会给第一个匹配的好友发送消息。方法接受两个参数,text为要发送的文本消息,nickName为要发送消息的好友昵称,成功发送时返回true,失败返回false。其函数声明为:
public static boolean sendMsgByNickName(String text, String nickName)
  1. 根据ID发送文本消息, MessageTools.sendMsgById(String text, String id)
    根据ID发送文本消息,发送者ID可以从msg里通过msg.getString(“FromUserName”)获取,格式为@@d052d34b9c9228830363013ee53deb461404f80ea353dbdd8fc9391cbf5f1c46(群消息)或@a257b99314d8313862cd44ab02fe0f81(非群消息),调用此方法可向指定id发送消息。其函数声明为:
public static void sendMsgById(String text, String id)
  1. 根据好友昵称发送图片消息,MessageTools.sendPicMsgByNickName(String nickName,String filePath)
    此方法根据好友昵称发送图片消息,filePath为图片文件路径,如D:/itchat4j/pic/test.jpg,成功返回true,失败返回false。其函数声明为:
public static boolean sendPicMsgByNickName(String nickName, String filePath)
  1. 根据ID发送图片消息,MessageTools.sendPicMsgByUserId(String userId, String
    filePath)
    此方法根据好友ID发送图片消息,filePath为图片文件路径,如D:/itchat4j/pic/test.jpg`,成功返回true,失败返回false。其函数声明为:
public static boolean sendPicMsgByUserId(String userId, String filePath)
  1. 根据好友昵称发送文件消息,MessageTools.sendFileMsgByNickName(String nickName,String filePath)
    此方法根据好友昵称发送文件消息,文件可以为多种类型,如txt、PDF、小视频、语音、excel、docx等,发送时请保证文件后缀名正确。成功返回true,失败返回false。其函数声明为:
public static boolean sendPicFileByNickName(String nickName, String filePath)
  1. 根据ID发送文件消息,MessageTools.sendFileMsgByNickName(String nickName,
    String filePath)
    此方法根据好友昵称发送文件消息,成功返回true,失败返回false。其函数声明为:
public static boolean sendFileMsgByUserId(String userId, String filePath)
  1. 处理好友添加请求,MessageTools.addFriend(BaseMsg msg, boolean accept)
    当收到好友添加请求时,可调用此函数进行处理,msg为收到的好友添加请求消息,accept传true为接受好友请求,false为拒绝,其函数声明为:
public static void addFriend(BaseMsg msg, boolean accept)

现在微信官方应该全面禁止网页登录了,已被废弃

 类似资料: