diff --git a/src/main/java/com/github/netricecake/Main.java b/src/main/java/com/github/netricecake/Main.java index 5498b5b..2a79eb2 100644 --- a/src/main/java/com/github/netricecake/Main.java +++ b/src/main/java/com/github/netricecake/Main.java @@ -25,7 +25,12 @@ public class Main { @Override public void onMessage(Message msg) { if (msg.getType() != 1) return; // 1이 그냥 채팅, 그냥 채팅만 받기 - if (msg.getMessage().equals("!send")) { + if (msg.getMessage().equals("!pcheck")) { + int type = msg.getChatRoom().getMember(getTalkClient().getUserId()).getMemberType(); + getTalkClient().sendMessage(msg.getChatRoom().getChatId(), "현재 봇계정의 멤버 타입 : " + type); + getTalkClient().sendMessage(msg.getChatRoom().getChatId(), "현재 님계정의 멤버 타입 : " + msg.getAuthor().getMemberType()); + } + else if (msg.getMessage().equals("!send")) { getTalkClient().sendMessage(msg.getChatRoom().getChatId(), "방 : " + msg.getChatRoom().getName() + "\n보낸사람 : " + msg.getAuthor().getName()); } else if (msg.getMessage().equals("!reply")) { // 답장 diff --git a/src/main/java/com/github/netricecake/kakao/LocoSocketHandlerImpl.java b/src/main/java/com/github/netricecake/kakao/LocoSocketHandlerImpl.java index 3bb1b73..67c5c92 100644 --- a/src/main/java/com/github/netricecake/kakao/LocoSocketHandlerImpl.java +++ b/src/main/java/com/github/netricecake/kakao/LocoSocketHandlerImpl.java @@ -5,18 +5,17 @@ import com.github.netricecake.kakao.structs.Member; import com.github.netricecake.kakao.structs.Message; import com.github.netricecake.loco.LocoPacket; import com.github.netricecake.loco.LocoSocektHandler; -import com.github.netricecake.loco.packet.inbound.member.DelMemIn; -import com.github.netricecake.loco.packet.inbound.member.MemberIn; -import com.github.netricecake.loco.packet.inbound.member.NewMemIn; -import com.github.netricecake.loco.packet.inbound.member.SyncLinkPfIn; +import com.github.netricecake.loco.packet.inbound.member.*; import com.github.netricecake.loco.packet.inbound.message.MessageIn; import com.github.netricecake.loco.packet.inbound.room.ChatInfoIn; import com.github.netricecake.loco.packet.inbound.room.InfoLinkIn; import com.github.netricecake.loco.packet.outbound.member.MemberOut; import com.github.netricecake.loco.packet.outbound.room.ChatInfoOut; +import com.github.netricecake.loco.packet.outbound.member.GetMemberOut; import com.github.netricecake.loco.packet.outbound.room.InfoLinkOut; import com.github.netricecake.loco.packet.outbound.message.MessageOut; import com.google.gson.JsonArray; +import com.google.gson.JsonObject; import lombok.Getter; public class LocoSocketHandlerImpl extends LocoSocektHandler { @@ -59,14 +58,14 @@ public class LocoSocketHandlerImpl extends LocoSocektHandler { ChatRoom room = client.getChatRooms().get(in.getChatId()); if (!room.getType().equals("OM")) return; - client.getTalkHandler().onDelMember(room, new Member(in.getUserId(), in.getNickname())); + client.getTalkHandler().onDelMember(room, new Member(in.getUserId(), in.getNickname(), 2)); room.getMembers().remove(in.getUserId()); } else if (packet.getMethod().equals("SYNCLINKPF")) { SyncLinkPfIn si = new SyncLinkPfIn(); si.fromBson(packet.getBody()); ChatRoom room = client.getChatRooms().get(si.getChatId()); room.getMembers().remove(si.getUserId()); - Member member = new Member(si.getUserId(), si.getNickName()); + Member member = new Member(si.getUserId(), si.getNickName(), 2); room.getMembers().put(si.getUserId(), member); } } @@ -80,6 +79,16 @@ public class LocoSocketHandlerImpl extends LocoSocektHandler { room.setChatId(chatId); room.setType(ci.getType()); room.setLinkId(ci.getLinkId()); + GetMemberOut gmo = new GetMemberOut(chatId); + GetMemberIn gmi = new GetMemberIn(); + gmi.fromBson(client.getSocket().writeAndRead(new LocoPacket("GETMEM", gmo.toBson())).getBody()); + for (int i = 0; i < gmi.getMembers().size(); i++) { + JsonObject json = gmi.getMembers().get(i).getAsJsonObject(); + int type = json.get("mt") != null ? json.get("mt").getAsInt() : 2; + Member member = new Member(json.get("userId").getAsLong(), json.get("nickName").getAsString(), type); + room.getMembers().put(member.getId(), member); + } + if (ci.getType().equals("OM")) { InfoLinkOut lo = new InfoLinkOut(ci.getLinkId()); InfoLinkIn li = new InfoLinkIn(); @@ -110,7 +119,7 @@ public class LocoSocketHandlerImpl extends LocoSocektHandler { MemberOut mo = new MemberOut(chatId, memberId); MemberIn mi = new MemberIn(); mi.fromBson(client.getSocket().writeAndRead(new LocoPacket("MEMBER", mo.toBson())).getBody()); - room.getMembers().put(memberId, new Member(memberId, mi.getNickName())); + room.getMembers().put(memberId, new Member(memberId, mi.getNickName(), mi.getMemberType())); } } diff --git a/src/main/java/com/github/netricecake/kakao/TalkClient.java b/src/main/java/com/github/netricecake/kakao/TalkClient.java index d10e4d6..ab9b832 100644 --- a/src/main/java/com/github/netricecake/kakao/TalkClient.java +++ b/src/main/java/com/github/netricecake/kakao/TalkClient.java @@ -214,9 +214,13 @@ public class TalkClient { return status == 0; } catch (Exception e) { } finally { - //if (postSocket != null) postSocket.close(); + if (postSocket != null) postSocket.close(); } return false; } + public long getUserId() { + return loginData.userId; + } + } diff --git a/src/main/java/com/github/netricecake/kakao/structs/ChatRoom.java b/src/main/java/com/github/netricecake/kakao/structs/ChatRoom.java index 2c16c50..efa0435 100644 --- a/src/main/java/com/github/netricecake/kakao/structs/ChatRoom.java +++ b/src/main/java/com/github/netricecake/kakao/structs/ChatRoom.java @@ -20,4 +20,12 @@ public class ChatRoom { private Map members = new HashMap<>(); + public int getMemberCount() { + return members.size(); + } + + public Member getMember(long id) { + return members.get(id); + } + } diff --git a/src/main/java/com/github/netricecake/kakao/structs/Member.java b/src/main/java/com/github/netricecake/kakao/structs/Member.java index 42595ca..1f3d69f 100644 --- a/src/main/java/com/github/netricecake/kakao/structs/Member.java +++ b/src/main/java/com/github/netricecake/kakao/structs/Member.java @@ -9,9 +9,12 @@ public class Member { private String name; - public Member(long id, String name) { + private int memberType; + + public Member(long id, String name, int memberType) { this.id = id; this.name = name; + this.memberType = memberType; } } diff --git a/src/main/java/com/github/netricecake/loco/codec/LocoCodec.java b/src/main/java/com/github/netricecake/loco/codec/LocoCodec.java index 764d91f..a8643e2 100644 --- a/src/main/java/com/github/netricecake/loco/codec/LocoCodec.java +++ b/src/main/java/com/github/netricecake/loco/codec/LocoCodec.java @@ -59,6 +59,8 @@ public class LocoCodec extends MessageToMessageCodec { } if (currentLocoPacket.getBodyLength() > buffer.length) break; byte[] body = ByteUtil.sliceBytes(buffer, 0, currentLocoPacket.getBodyLength()); + System.out.println(currentLocoPacket.getMethod()); + System.out.println(BsonUtil.bsonToJson(body)); buffer = ByteUtil.sliceBytes(buffer, currentLocoPacket.getBodyLength(), buffer.length - currentLocoPacket.getBodyLength()); currentLocoPacket.setBody(body); if (locoSocket.getWaitList().containsKey(currentLocoPacket.getPacketId())) { diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/member/GetMemberIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/member/GetMemberIn.java new file mode 100644 index 0000000..807f256 --- /dev/null +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/member/GetMemberIn.java @@ -0,0 +1,22 @@ +package com.github.netricecake.loco.packet.inbound.member; + +import com.github.netricecake.loco.packet.InboundPacket; +import com.github.netricecake.loco.util.BsonUtil; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import lombok.Getter; + +@Getter +public class GetMemberIn extends InboundPacket { + + private int status; + + private JsonArray members; + + public void fromBson(byte[] bson) { + JsonObject json = BsonUtil.bsonToJsonObject(bson); + status = json.get("status").getAsInt(); + if (status == 0) members = json.get("members").getAsJsonArray(); + } + +} diff --git a/src/main/java/com/github/netricecake/loco/packet/inbound/member/MemberIn.java b/src/main/java/com/github/netricecake/loco/packet/inbound/member/MemberIn.java index 11aa415..6e7e225 100644 --- a/src/main/java/com/github/netricecake/loco/packet/inbound/member/MemberIn.java +++ b/src/main/java/com/github/netricecake/loco/packet/inbound/member/MemberIn.java @@ -8,11 +8,19 @@ import lombok.Getter; @Getter public class MemberIn extends InboundPacket { + private long userId; + private String nickName; + private int memberType = 2; + public void fromBson(byte[] bson) { JsonObject jsonObject = BsonUtil.bsonToJsonObject(bson); + userId = jsonObject.get("members").getAsJsonArray().get(0).getAsJsonObject().get("userId").getAsLong(); this.nickName = jsonObject.get("members").getAsJsonArray().get(0).getAsJsonObject().get("nickName").getAsString(); + try { + memberType = jsonObject.get("members").getAsJsonArray().get(0).getAsJsonObject().get("mt").getAsInt(); + } catch (Exception e) {} } } diff --git a/src/main/java/com/github/netricecake/loco/packet/outbound/member/GetMemberOut.java b/src/main/java/com/github/netricecake/loco/packet/outbound/member/GetMemberOut.java new file mode 100644 index 0000000..f314d0f --- /dev/null +++ b/src/main/java/com/github/netricecake/loco/packet/outbound/member/GetMemberOut.java @@ -0,0 +1,20 @@ +package com.github.netricecake.loco.packet.outbound.member; + +import com.github.netricecake.loco.util.BsonUtil; +import com.google.gson.JsonObject; + +public class GetMemberOut { + + private long chatId; + + public GetMemberOut(long chatId) { + this.chatId = chatId; + } + + public byte[] toBson() { + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("chatId", chatId); + return BsonUtil.jsonObjectToBson(jsonObject); + } + +}