From 3ff2a5fa871260dfc589dbebdfd44559850c488b Mon Sep 17 00:00:00 2001 From: wish Date: Tue, 26 Jul 2022 22:09:29 +1000 Subject: [PATCH] implement blacklist --- .../server/channelserver/handlers_clients.go | 38 +++++++++++++++---- Erupe/tokensessions.sql | 3 ++ 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/Erupe/server/channelserver/handlers_clients.go b/Erupe/server/channelserver/handlers_clients.go index c2c8cc7c7..611cd1239 100644 --- a/Erupe/server/channelserver/handlers_clients.go +++ b/Erupe/server/channelserver/handlers_clients.go @@ -51,9 +51,28 @@ func handleMsgSysEnumerateClient(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfListMember(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfListMember) + var csv string + var count uint32 resp := byteframe.NewByteFrame() - resp.WriteUint32(0) // Members count. (Unsure of what kind of members these actually are, guild, party, COG subscribers, etc.) - + resp.WriteUint32(0) // Blacklist count + err := s.server.db.QueryRow("SELECT blocked FROM characters WHERE id=$1", s.charID).Scan(&csv) + if err != nil { + panic(err) + } + cids := stringsupport.CSVElems(csv) + for _, cid := range cids { + var name string + err = s.server.db.QueryRow("SELECT name FROM characters WHERE id=$1", cid).Scan(&name) + if err != nil { + continue + } + count++ + resp.WriteUint32(uint32(cid)) + resp.WriteUint32(16) + resp.WriteBytes(stringsupport.PaddedString(name, 16, true)) + } + resp.Seek(0, 0) + resp.WriteUint32(count) doAckBufSucceed(s, pkt.AckHandle, resp.Data()) } @@ -61,11 +80,16 @@ func handleMsgMhfOprMember(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfOprMember) var csv string if pkt.Blacklist { - if pkt.Operation { - // remove from blacklist - } else { - // add to blacklist + err := s.server.db.QueryRow("SELECT blocked FROM characters WHERE id=$1", s.charID).Scan(&csv) + if err != nil { + panic(err) } + if pkt.Operation { + csv = stringsupport.CSVRemove(csv, int(pkt.CharID)) + } else { + csv = stringsupport.CSVAdd(csv, int(pkt.CharID)) + } + s.server.db.Exec("UPDATE characters SET blocked=$1 WHERE id=$2", csv, s.charID) } else { // Friendlist err := s.server.db.QueryRow("SELECT friends FROM characters WHERE id=$1", s.charID).Scan(&csv) if err != nil { @@ -76,7 +100,7 @@ func handleMsgMhfOprMember(s *Session, p mhfpacket.MHFPacket) { } else { csv = stringsupport.CSVAdd(csv, int(pkt.CharID)) } - _, _ = s.server.db.Exec("UPDATE characters SET friends=$1 WHERE id=$2", csv, s.charID) + s.server.db.Exec("UPDATE characters SET friends=$1 WHERE id=$2", csv, s.charID) } doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } diff --git a/Erupe/tokensessions.sql b/Erupe/tokensessions.sql index 5696d4e25..bb6b4a1f1 100644 --- a/Erupe/tokensessions.sql +++ b/Erupe/tokensessions.sql @@ -23,6 +23,9 @@ ALTER TABLE IF EXISTS public.characters ALTER TABLE IF EXISTS public.characters ADD COLUMN IF NOT EXISTS friends text NOT NULL DEFAULT ''; +ALTER TABLE IF EXISTS public.characters + ADD COLUMN IF NOT EXISTS blocked text NOT NULL DEFAULT ''; + ALTER TABLE IF EXISTS public.users ADD COLUMN IF NOT EXISTS last_character int DEFAULT 0;