/* * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "ClubMembershipService.h" #include "BattlenetRpcErrorCodes.h" #include "CharacterCache.h" #include "ClubService.h" #include "ClubUtils.h" #include "Guild.h" #include "Player.h" namespace Battlenet::Services { ClubMembershipService::ClubMembershipService(WorldSession* session) : BaseService(session) { } uint32 ClubMembershipService::HandleSubscribe(club::v1::membership::SubscribeRequest const* /*request*/, club::v1::membership::SubscribeResponse* response, std::function& /*continuation*/) { Player const* player = _session->GetPlayer(); if (!player) return ERROR_INTERNAL; Guild const* guild = player->GetGuild(); if (!guild) return ERROR_OK; club::v1::ClubMembershipDescription* description = response->mutable_state()->add_description(); description->set_allocated_member_id(CreateClubMemberId(player->GetGUID()).release()); club::v1::ClubDescription* club = description->mutable_club(); club->set_id(guild->GetId()); club->set_allocated_type(ClubService::CreateGuildClubType().release()); club->set_name(guild->GetName()); club->set_privacy_level(club::v1::PrivacyLevel::PRIVACY_LEVEL_OPEN); club->set_visibility_level(club::v1::VISIBILITY_LEVEL_PRIVATE); club->set_member_count(guild->GetMembersCount()); club->set_creation_time( std::chrono::duration_cast(SystemTimePoint::clock::from_time_t(guild->GetCreatedDate()).time_since_epoch()).count()); // Not setting these can cause issues. club->set_timezone(""); club->set_locale(""); club::v1::MemberDescription* leader = club->add_leader(); leader->set_allocated_id(CreateClubMemberId(guild->GetLeaderGUID()).release()); response->mutable_state()->mutable_mention_view()->set_last_read_time(0); response->mutable_state()->mutable_mention_view()->set_last_message_time(0); return ERROR_OK; } uint32 ClubMembershipService::HandleUnsubscribe(club::v1::membership::UnsubscribeRequest const* /*request*/, NoData* /*response*/, std::function& /*continuation*/) { // We just have to signal the client that the unsubscribe request came through. return ERROR_OK; } std::unique_ptr ClubMembershipService::CreateClubMemberId(ObjectGuid guid) { std::unique_ptr id = std::make_unique(); id->mutable_account_id()->set_id(sCharacterCache->GetCharacterAccountIdByGuid(guid)); id->set_unique_id(Clubs::CreateClubMemberId(guid)); return id; } }