Skip to content
This repository was archived by the owner on Jun 5, 2018. It is now read-only.

Commit 41a8a87

Browse files
committed
✨ add some group chat api
1 parent 166a3d9 commit 41a8a87

File tree

5 files changed

+148
-7
lines changed

5 files changed

+148
-7
lines changed

src/main/java/io/github/biezhi/wechat/api/WeChatApi.java

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,48 @@ public interface WeChatApi {
133133
*
134134
* @param recommend 好友信息
135135
*/
136-
void verify(Recommend recommend);
136+
boolean verify(Recommend recommend);
137137

138-
}
138+
/**
139+
* 添加好友
140+
*
141+
* @param friend 好友的UserName
142+
* @param msg 添加好友时的消息
143+
* @return
144+
*/
145+
boolean addFriend(String friend, String msg);
146+
147+
/**
148+
* 创建群聊
149+
*
150+
* @param topic 群名称
151+
* @param members 群成员UserName列表
152+
*/
153+
boolean createChatRoom(String topic, List<String> members);
154+
155+
/**
156+
* 从群聊中移除某个群成员
157+
*
158+
* @param member
159+
* @param group
160+
*/
161+
boolean removeMemberByGroup(String member, String group);
162+
163+
/**
164+
* 邀请好友进群
165+
*
166+
* @param member
167+
* @param group
168+
* @return
169+
*/
170+
boolean inviteJoinGroup(String member, String group);
171+
172+
/**
173+
* 修改群名
174+
*
175+
* @param oldTopic 旧群名
176+
* @param newTopic 新群名
177+
* @return
178+
*/
179+
boolean modifyGroupName(String oldTopic, String newTopic);
180+
}

src/main/java/io/github/biezhi/wechat/api/WeChatApiImpl.java

Lines changed: 82 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ public Account getAccountByName(String name) {
554554
}
555555

556556
@Override
557-
public void verify(Recommend recommend) {
557+
public boolean verify(Recommend recommend) {
558558
String url = String.format("%s/webwxverifyuser?r=%s&lang=zh_CN&pass_ticket=%s",
559559
bot.session().getUrl(), System.currentTimeMillis() / 1000, bot.session().getPassTicket());
560560

@@ -564,7 +564,7 @@ public void verify(Recommend recommend) {
564564
verifyUser.put("VerifyUserTicket", recommend.getTicket());
565565
verifyUserList.add(verifyUser);
566566

567-
ApiResponse response = client.send(new StringRequest(url).post().jsonBody()
567+
JsonResponse response = client.send(new JsonRequest(url).post().jsonBody()
568568
.add("BaseRequest", bot.session().getBaseRequest())
569569
.add("Opcode", 3)
570570
.add("VerifyUserListSize", 1)
@@ -574,9 +574,88 @@ public void verify(Recommend recommend) {
574574
.add("SceneList", Arrays.asList(33))
575575
.add("skey", bot.session().getSyncKeyStr())
576576
);
577+
return null != response && response.success();
578+
}
579+
580+
@Override
581+
public boolean addFriend(String friendUserName, String msg) {
582+
String url = String.format("%s/webwxverifyuser?r=%s&lang=zh_CN&pass_ticket=%s",
583+
bot.session().getUrl(), System.currentTimeMillis() / 1000, bot.session().getPassTicket());
584+
585+
List<Map<String, Object>> verifyUserList = new ArrayList<>();
586+
Map<String, Object> verifyUser = new HashMap<>(2);
587+
verifyUser.put("Value", friendUserName);
588+
verifyUser.put("VerifyUserTicket", "");
589+
verifyUserList.add(verifyUser);
590+
591+
JsonResponse response = client.send(new JsonRequest(url).post().jsonBody()
592+
.add("BaseRequest", bot.session().getBaseRequest())
593+
.add("Opcode", 2)
594+
.add("VerifyUserListSize", 1)
595+
.add("VerifyUserList", verifyUserList)
596+
.add("VerifyContent", msg)
597+
.add("SceneListCount", 1)
598+
.add("SceneList", Arrays.asList(33))
599+
.add("skey", bot.session().getSyncKeyStr())
600+
);
601+
return null != response && response.success();
602+
}
577603

578-
System.out.println(response.getRawBody());
604+
@Override
605+
public boolean createChatRoom(String topic, List<String> members) {
606+
String url = String.format("%s/webwxcreatechatroom?r=%s&lang=zh_CN", bot.session().getUrl());
607+
List<Map<String, String>> memberList = new ArrayList<>(members.size());
608+
for (String member : members) {
609+
Map<String, String> m = new HashMap<>(2);
610+
m.put("UserName", member);
611+
memberList.add(m);
612+
}
579613

614+
JsonResponse response = client.send(new JsonRequest(url).post().jsonBody()
615+
.add("MemberCount", members.size())
616+
.add("MemberList", memberList)
617+
.add("Topic", topic)
618+
.add("BaseRequest", bot.session().getBaseRequest())
619+
);
620+
return null != response && response.success();
621+
}
622+
623+
@Override
624+
public boolean removeMemberByGroup(String member, String group) {
625+
String url = String.format("%s/webwxupdatechatroom?fun=delmember", bot.session().getUrl());
626+
JsonResponse response = client.send(new JsonRequest(url).post().jsonBody()
627+
.add("DelMemberList", member)
628+
.add("ChatRoomName", group)
629+
.add("BaseRequest", bot.session().getBaseRequest())
630+
);
631+
return null != response && response.success();
632+
}
633+
634+
@Override
635+
public boolean inviteJoinGroup(String member, String group) {
636+
String url = String.format("%s/webwxupdatechatroom?fun=addmember", bot.session().getUrl());
637+
JsonResponse response = client.send(new JsonRequest(url).post().jsonBody()
638+
.add("AddMemberList", member)
639+
.add("ChatRoomName", group)
640+
.add("BaseRequest", bot.session().getBaseRequest())
641+
);
642+
return null != response && response.success();
643+
}
644+
645+
@Override
646+
public boolean modifyGroupName(String oldTopic, String newTopic) {
647+
Account account = this.getAccountByName(oldTopic);
648+
if (null == account) {
649+
log.warn("找不到群: [{}] 更换群名失败", oldTopic);
650+
return false;
651+
}
652+
String url = String.format("%s/webwxupdatechatroom?fun=modtopic", bot.session().getUrl());
653+
JsonResponse response = client.send(new JsonRequest(url).post().jsonBody()
654+
.add("NewTopic", newTopic)
655+
.add("ChatRoomName", account.getUserName())
656+
.add("BaseRequest", bot.session().getBaseRequest())
657+
);
658+
return null != response && response.success();
580659
}
581660

582661
private String getUserRemarkName(String id) {

src/main/java/io/github/biezhi/wechat/api/annotation/Bind.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,6 @@
3232
*
3333
* @return
3434
*/
35-
AccountType[] accountType() default {AccountType.TYPE_FRIEND};
35+
AccountType[] accountType() default {AccountType.TYPE_FRIEND, AccountType.TYPE_GROUP};
3636

3737
}

src/main/java/io/github/biezhi/wechat/api/constant/Config.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ public class Config {
3939
private static final String CONF_AUTO_LOGIN = "wechat.auto-login";
4040
private static final String CONF_AUTO_LOGIN_DEFAULT = "false";
4141

42+
/**
43+
* 自动添加好友请求
44+
*/
45+
private static final String CONF_AUTO_ADDFRIEND = "wechat.auto-addfriend";
46+
private static final String CONF_AUTO_ADDFRIEND_DEFAULT = "false";
47+
4248
private Properties props = new Properties();
4349

4450
public static Config me() {
@@ -93,6 +99,15 @@ public Config autoLogin(boolean autoLogin) {
9399
return this;
94100
}
95101

102+
public Config autoAddFriend(boolean autoAddFriend) {
103+
props.setProperty(CONF_AUTO_ADDFRIEND, String.valueOf(autoAddFriend));
104+
return this;
105+
}
106+
107+
public boolean autoAddFriend() {
108+
return Boolean.valueOf(props.getProperty(CONF_AUTO_ADDFRIEND, CONF_AUTO_ADDFRIEND_DEFAULT));
109+
}
110+
96111
public boolean autoLogin() {
97112
return Boolean.valueOf(props.getProperty(CONF_AUTO_LOGIN, CONF_AUTO_LOGIN_DEFAULT));
98113
}

src/main/java/io/github/biezhi/wechat/api/model/Invoke.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,13 @@ public class Invoke {
4040
* @param <T>
4141
*/
4242
public <T extends WeChatBot> void call(T bot, WeChatMessage message) {
43+
if (INVOKED_MSG.contains(message.getId())) {
44+
return;
45+
}
4346
try {
44-
if (INVOKED_MSG.contains(message.getId())) {
47+
// 自动同意添加好友
48+
if (message.getMsgType() == MsgType.ADD_FRIEND && bot.config().autoAddFriend()) {
49+
bot.api().verify(message.getRecommend());
4550
return;
4651
}
4752
Account account = bot.api().getAccountById(message.getFromUserName());

0 commit comments

Comments
 (0)