26#include "api/client/v1/club_listener.pb.h"
36 if (request->type().name() ==
"guild")
59 club::v1::client::SubscribeNotification subscribeNotification;
71 subscribeNotification.set_club_id(guild->
GetId());
74 club::v1::client::Club* guildClub = subscribeNotification.mutable_club();
76 guildClub->set_id(guild->
GetId());
78 guildClub->set_name(guild->
GetName());
81 guildClub->set_privacy_level(club::v1::PrivacyLevel::PRIVACY_LEVEL_OPEN);
82 guildClub->set_visibility_level(club::v1::VISIBILITY_LEVEL_PRIVATE);
87 club::v1::client::MemberDescription* guildLeaderDescription = guildClub->add_leader();
89 guildLeaderDescription->mutable_id()->set_account_id(guildLeader->
GetAccountId());
90 guildLeaderDescription->mutable_id()->set_unique_id(guildLeader->
GetGUID().
GetCounter());
92 club::v1::client::Member* subscriber = subscribeNotification.mutable_member();
107 subscriber->set_presence_level(club::v1::client::PRESENCE_LEVEL_RICH);
108 subscriber->set_whisper_level(club::v1::client::WHISPER_LEVEL_OPEN);
111 subscriber->set_active(
true);
116 club::v1::client::SubscriberStateChangedNotification subscriberStateChangedNotification;
118 subscriberStateChangedNotification.set_club_id(guild->
GetId());
120 club::v1::client::SubscriberStateAssignment* assignment = subscriberStateChangedNotification.add_assignment();
125 assignment->set_active(
true);
147 for (
auto const& [guid, member] : guild->
GetMembers())
149 club::v1::client::Member* clubMember = response->add_member();
162 clubMember->set_presence_level(club::v1::client::PresenceLevel::PRESENCE_LEVEL_RICH);
163 clubMember->set_whisper_level(club::v1::client::WhisperLevel::WHISPER_LEVEL_OPEN);
164 std::string_view publicNote = member.GetPublicNote();
165 clubMember->set_note(publicNote.data(), publicNote.size());
166 clubMember->set_active(member.IsOnline());
186 club::v1::client::Stream* generalGuildChannelStream = response->add_stream();
188 generalGuildChannelStream->set_club_id(guild->
GetId());
191 v2::Attribute* generalStreamAttribute = generalGuildChannelStream->add_attribute();
193 generalStreamAttribute->set_name(
"global_strings_tag");
194 generalStreamAttribute->mutable_value()->set_string_value(
"COMMUNITIES_GUILD_GENERAL_CHANNEL_NAME");
196 generalGuildChannelStream->set_name(
"Guild");
207 generalGuildChannelStream->set_voice_level(club::v1::client::StreamVoiceLevel::VOICE_LEVEL_DISABLED);
210 club::v1::client::Stream* officerGuildChannelStream = response->add_stream();
212 officerGuildChannelStream->set_club_id(guild->
GetId());
215 v2::Attribute* officerStreamAttribute = officerGuildChannelStream->add_attribute();
217 officerStreamAttribute->set_name(
"global_strings_tag");
218 officerStreamAttribute->mutable_value()->set_string_value(
"COMMUNITIES_GUILD_OFFICER_CHANNEL_NAME");
220 officerGuildChannelStream->set_name(
"Officer");
230 officerGuildChannelStream->set_voice_level(club::v1::client::StreamVoiceLevel::VOICE_LEVEL_DISABLED);
233 club::v1::client::StreamView* generalView = response->add_view();
235 generalView->set_club_id(guild->
GetId());
238 club::v1::client::StreamView* officerView = response->add_view();
240 officerView->set_club_id(guild->
GetId());
307 std::function<
void(
ServiceBase*,
uint32, google::protobuf::Message
const*)>& continuation)
344 std::chrono::microseconds messageTime = std::chrono::duration_cast<std::chrono::microseconds>(
GameTime::GetSystemTime().time_since_epoch());
348 club::v1::client::StreamMessageAddedNotification messageAddedNotification;
350 messageAddedNotification.set_club_id(guild->
GetId());
351 messageAddedNotification.set_stream_id(request->stream_id());
352 FillStreamMessage(messageAddedNotification.mutable_message(), request->options().content(), messageTime, player->
GetGUID());
370 continuation =
nullptr;
377 std::unique_ptr<club::v1::UniqueClubType> type = std::make_unique<club::v1::UniqueClubType>();
379 type->set_name(
"guild");
385 message->mutable_id()->set_epoch(messageTime.count());
386 message->mutable_id()->set_position(0);
390 club::v1::client::ContentChain* contentChain = message->add_content_chain();
392 contentChain->set_content(msg.data(), msg.size());
393 contentChain->set_edit_time(messageTime.count());
@ ERROR_CLUB_NO_SUCH_MEMBER
@ ERROR_CLUB_STREAM_NO_SUCH_MESSAGE
@ ERROR_CLUB_STREAM_NO_STREAM
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
ObjectGuid const & GetGUID() const
static std::unique_ptr< club::v1::MemberId > CreateClubMemberId(ObjectGuid guid)
uint32 HandleSubscribeStream(club::v1::client::SubscribeStreamRequest const *request, NoData *response, std::function< void(ServiceBase *, uint32, ::google::protobuf::Message const *)> &continuation) override
uint32 HandleGetClubType(club::v1::client::GetClubTypeRequest const *request, club::v1::client::GetClubTypeResponse *response, std::function< void(ServiceBase *, uint32, ::google::protobuf::Message const *)> &continuation) override
uint32 HandleUnsubscribeStream(club::v1::client::UnsubscribeStreamRequest const *request, NoData *response, std::function< void(ServiceBase *, uint32, ::google::protobuf::Message const *)> &continuation) override
uint32 HandleSubscribe(club::v1::client::SubscribeRequest const *request, NoData *response, std::function< void(ServiceBase *, uint32, ::google::protobuf::Message const *)> &continuation) override
ClubService(WorldSession *session)
uint32 HandleGetStreams(club::v1::client::GetStreamsRequest const *request, club::v1::client::GetStreamsResponse *response, std::function< void(ServiceBase *, uint32, ::google::protobuf::Message const *)> &continuation) override
uint32 HandleAdvanceStreamViewTime(club::v1::client::AdvanceStreamViewTimeRequest const *request, NoData *response, std::function< void(ServiceBase *, uint32, ::google::protobuf::Message const *)> &continuation) override
uint32 HandleCreateMessage(club::v1::client::CreateMessageRequest const *request, club::v1::client::CreateMessageResponse *response, std::function< void(ServiceBase *, uint32, ::google::protobuf::Message const *)> &continuation) override
static void FillStreamMessage(club::v1::client::StreamMessage *message, std::string_view msg, std::chrono::microseconds messageTime, ObjectGuid author)
uint32 HandleGetMembers(club::v1::client::GetMembersRequest const *request, club::v1::client::GetMembersResponse *response, std::function< void(ServiceBase *, uint32, ::google::protobuf::Message const *)> &continuation) override
static std::unique_ptr< club::v1::UniqueClubType > CreateGuildClubType()
uint32 HandleSetStreamFocus(club::v1::client::SetStreamFocusRequest const *request, NoData *response, std::function< void(ServiceBase *, uint32, ::google::protobuf::Message const *)> &continuation) override
GuildRankId GetRankId() const
uint32 GetAccountId() const
bool IsRank(GuildRankId rankId) const
ObjectGuid const & GetGUID() const
ObjectGuid GetLeaderGUID() const
ObjectGuid::LowType GetId() const
std::string const & GetName() const
void BroadcastWorker(Do &&_do, Player const *except=nullptr) const
std::unordered_map< ObjectGuid, Member > const & GetMembers() const
bool HasAnyRankRight(GuildRankId rankId, GuildRankRights rights) const
Member const * GetMember(ObjectGuid const &guid) const
uint32 GetMembersCount() const
LowType GetCounter() const
bool HasIgnore(ObjectGuid const &ignoreGuid, ObjectGuid const &ignoreAccountGuid)
PlayerSocial * GetSocial() const
WorldSession * GetSession() const
Player session in the World.
ObjectGuid GetAccountGUID() const
Player * GetPlayer() const
ChatMessageResult HandleChatMessage(ChatMsg type, Language lang, std::string msg, std::string target="", Optional< ObjectGuid > targetGuid={})
SystemTimePoint GetSystemTime()
Current chrono system_clock time point.