add member type

This commit is contained in:
NetRiceCake
2025-12-04 15:46:38 +09:00
parent f4c91ccd57
commit bec90e0a17
9 changed files with 91 additions and 10 deletions

View File

@@ -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")) { // 답장

View File

@@ -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()));
}
}

View File

@@ -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;
}
}

View File

@@ -20,4 +20,12 @@ public class ChatRoom {
private Map<Long, Member> members = new HashMap<>();
public int getMemberCount() {
return members.size();
}
public Member getMember(long id) {
return members.get(id);
}
}

View File

@@ -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;
}
}

View File

@@ -59,6 +59,8 @@ public class LocoCodec extends MessageToMessageCodec<byte[], LocoPacket> {
}
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())) {

View File

@@ -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();
}
}

View File

@@ -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) {}
}
}

View File

@@ -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);
}
}