AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
Channel Class Reference

#include "Channel.h"

Classes

struct  PlayerInfo
 

Public Member Functions

 Channel (std::string const &name, uint32 channel_id, uint32 channelDBId, TeamId teamId=TEAM_NEUTRAL, bool announce=true, bool ownership=true)
 
std::string const & GetName () const
 
uint32 GetChannelId () const
 
uint32 GetChannelDBId () const
 
bool IsConstant () const
 
bool IsAnnounce () const
 
bool IsLFG () const
 
std::string const & GetPassword () const
 
void SetPassword (std::string const &npassword)
 
uint32 GetNumPlayers () const
 
uint8 GetFlags () const
 
bool HasFlag (uint8 flag) const
 
void JoinChannel (Player *player, std::string const &pass)
 
void LeaveChannel (Player *player, bool send=true)
 
void KickOrBan (Player const *player, std::string const &badname, bool ban)
 
void Kick (Player const *player, std::string const &badname)
 
void Ban (Player const *player, std::string const &badname)
 
void AddBan (ObjectGuid guid, uint32 time)
 
void UnBan (Player const *player, std::string const &badname)
 
void UnBan (ObjectGuid guid)
 
void Password (Player const *player, std::string const &pass)
 
void SetMode (Player const *player, std::string const &p2n, bool mod, bool set)
 
void SetOwner (ObjectGuid guid, bool exclaim=true)
 
void SetOwner (Player const *player, std::string const &name)
 
void SendWhoOwner (ObjectGuid guid)
 
void SetModerator (Player const *player, std::string const &newname)
 
void UnsetModerator (Player const *player, std::string const &newname)
 
void SetMute (Player const *player, std::string const &newname)
 
void UnsetMute (Player const *player, std::string const &newname)
 
void List (Player const *player)
 
void Announce (Player const *player)
 
void Say (ObjectGuid guid, std::string const &what, uint32 lang)
 
void Invite (Player const *player, std::string const &newp)
 
void Voice (ObjectGuid guid1, ObjectGuid guid2)
 
void DeVoice (ObjectGuid guid1, ObjectGuid guid2)
 
void JoinNotify (Player *p)
 
void LeaveNotify (Player *p)
 
void FlagsNotify (Player *p)
 
void ToggleModeration (Player *p)
 
void AddWatching (Player *p)
 
void RemoveWatching (Player *p)
 

Static Public Member Functions

static void CleanOldChannelsInDB ()
 

Private Types

typedef std::unordered_map< ObjectGuid, PlayerInfoPlayerContainer
 
typedef std::unordered_map< ObjectGuid, uint32BannedContainer
 
typedef std::unordered_set< Player * > PlayersWatchingContainer
 

Private Member Functions

void MakeNotifyPacket (WorldPacket *data, uint8 notify_type)
 
void MakeJoined (WorldPacket *data, ObjectGuid guid)
 
void MakeLeft (WorldPacket *data, ObjectGuid guid)
 
void MakeYouJoined (WorldPacket *data)
 
void MakeYouLeft (WorldPacket *data)
 
void MakeWrongPassword (WorldPacket *data)
 
void MakeNotMember (WorldPacket *data)
 
void MakeNotModerator (WorldPacket *data)
 
void MakePasswordChanged (WorldPacket *data, ObjectGuid guid)
 
void MakeOwnerChanged (WorldPacket *data, ObjectGuid guid)
 
void MakePlayerNotFound (WorldPacket *data, std::string const &name)
 
void MakeNotOwner (WorldPacket *data)
 
void MakeChannelOwner (WorldPacket *data)
 
void MakeModeChange (WorldPacket *data, ObjectGuid guid, uint8 oldflags)
 
void MakeAnnouncementsOn (WorldPacket *data, ObjectGuid guid)
 
void MakeAnnouncementsOff (WorldPacket *data, ObjectGuid guid)
 
void MakeMuted (WorldPacket *data)
 
void MakePlayerKicked (WorldPacket *data, ObjectGuid bad, ObjectGuid good)
 
void MakeBanned (WorldPacket *data)
 
void MakePlayerBanned (WorldPacket *data, ObjectGuid bad, ObjectGuid good)
 
void MakePlayerUnbanned (WorldPacket *data, ObjectGuid bad, ObjectGuid good)
 
void MakePlayerNotBanned (WorldPacket *data, std::string const &name)
 
void MakePlayerAlreadyMember (WorldPacket *data, ObjectGuid guid)
 
void MakeInvite (WorldPacket *data, ObjectGuid guid)
 
void MakeInviteWrongFaction (WorldPacket *data)
 
void MakeWrongFaction (WorldPacket *data)
 
void MakeInvalidName (WorldPacket *data)
 
void MakeNotModerated (WorldPacket *data)
 
void MakePlayerInvited (WorldPacket *data, std::string const &name)
 
void MakePlayerInviteBanned (WorldPacket *data, std::string const &name)
 
void MakeThrottled (WorldPacket *data)
 
void MakeNotInArea (WorldPacket *data)
 
void MakeNotInLfg (WorldPacket *data)
 
void MakeVoiceOn (WorldPacket *data, ObjectGuid guid)
 
void MakeVoiceOff (WorldPacket *data, ObjectGuid guid)
 
void MakeModerationOn (WorldPacket *data, ObjectGuid guid)
 
void MakeModerationOff (WorldPacket *data, ObjectGuid guid)
 
void SendToAll (WorldPacket *data, ObjectGuid guid=ObjectGuid::Empty)
 
void SendToAllButOne (WorldPacket *data, ObjectGuid who)
 
void SendToOne (WorldPacket *data, ObjectGuid who)
 
void SendToAllWatching (WorldPacket *data)
 
bool ShouldAnnouncePlayer (Player const *player) const
 
bool IsOn (ObjectGuid who) const
 
bool IsBanned (ObjectGuid guid) const
 
void UpdateChannelInDB () const
 
void UpdateChannelUseageInDB () const
 
void AddChannelBanToDB (ObjectGuid guid, uint32 time) const
 
void RemoveChannelBanFromDB (ObjectGuid guid) const
 
uint8 GetPlayerFlags (ObjectGuid guid) const
 
void SetModerator (ObjectGuid guid, bool set)
 
void SetMute (ObjectGuid guid, bool set)
 

Private Attributes

bool _announce
 
bool _moderation
 
bool _ownership
 
bool _IsSaved
 
bool _isOwnerGM
 
uint8 _flags
 
uint32 _channelId
 
uint32 _channelDBId
 
TeamId _teamId
 
ObjectGuid _ownerGUID
 
std::string _name
 
std::string _password
 
ChannelRights _channelRights
 
PlayerContainer playersStore
 
BannedContainer bannedStore
 
PlayersWatchingContainer playersWatchingStore
 

Detailed Description

Member Typedef Documentation

◆ BannedContainer

typedef std::unordered_map<ObjectGuid, uint32> Channel::BannedContainer
private

◆ PlayerContainer

typedef std::unordered_map<ObjectGuid, PlayerInfo> Channel::PlayerContainer
private

◆ PlayersWatchingContainer

typedef std::unordered_set<Player*> Channel::PlayersWatchingContainer
private

Constructor & Destructor Documentation

◆ Channel()

Channel::Channel ( std::string const &  name,
uint32  channel_id,
uint32  channelDBId,
TeamId  teamId = TEAM_NEUTRAL,
bool  announce = true,
bool  ownership = true 
)
30 :
31 _announce(announce),
32 _ownership(ownership),
33 _IsSaved(false),
34 _isOwnerGM(false),
35 _flags(0),
36 _channelId(channelId),
37 _channelDBId(channelDBId),
38 _teamId(teamId),
39 _name(name),
40 _password("")
41{
42 // set special flags if built-in channel
43 if (ChatChannelsEntry const* ch = sChatChannelsStore.LookupEntry(channelId)) // check whether it's a built-in channel
44 {
45 _announce = false; // no join/leave announces
46 _ownership = false; // no ownership handout
47
48 _flags |= CHANNEL_FLAG_GENERAL; // for all built-in channels
49
50 if (ch->flags & CHANNEL_DBC_FLAG_TRADE) // for trade channel
52
53 if (ch->flags & CHANNEL_DBC_FLAG_CITY_ONLY2) // for city only channels
55
56 if (ch->flags & CHANNEL_DBC_FLAG_LFG) // for LFG channel
58 else // for all other channels
60 }
61 else // it's custom channel
62 {
64
65 // pussywizard:
68 _announce = false;
70 _announce = true;
72 _ownership = false;
74 return;
75
76 _IsSaved = true;
77
78 // Xinef: loading
79 if (channelDBId > 0)
80 return;
81
82 // If storing custom channels in the db is enabled either load or save the channel
83 if (sWorld->getBoolConfig(CONFIG_PRESERVE_CUSTOM_CHANNELS))
84 {
86
88 stmt->SetData(0, _channelDBId);
89 stmt->SetData(1, name);
90 stmt->SetData(2, _teamId);
91 stmt->SetData(3, _announce);
92 CharacterDatabase.Execute(stmt);
93 }
94 }
95}
@ CHANNEL_FLAG_TRADE
Definition Channel.h:77
@ CHANNEL_FLAG_NOT_LFG
Definition Channel.h:78
@ CHANNEL_FLAG_GENERAL
Definition Channel.h:79
@ CHANNEL_FLAG_CUSTOM
Definition Channel.h:75
@ CHANNEL_FLAG_LFG
Definition Channel.h:81
@ CHANNEL_FLAG_CITY
Definition Channel.h:80
@ CHANNEL_DBC_FLAG_TRADE
Definition Channel.h:96
@ CHANNEL_DBC_FLAG_CITY_ONLY2
Definition Channel.h:98
@ CHANNEL_DBC_FLAG_LFG
Definition Channel.h:101
@ CHANNEL_RIGHT_FORCE_NO_ANNOUNCEMENTS
Definition Channel.h:132
@ CHANNEL_RIGHT_DONT_PRESERVE
Definition Channel.h:140
@ CHANNEL_RIGHT_FORCE_ANNOUNCEMENTS
Definition Channel.h:133
@ CHANNEL_RIGHT_NO_OWNERSHIP
Definition Channel.h:134
@ CHAR_INS_CHANNEL
Definition CharacterDatabase.h:183
DBCStorage< ChatChannelsEntry > sChatChannelsStore(ChatChannelsEntryfmt)
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition DatabaseEnv.cpp:21
@ CONFIG_PRESERVE_CUSTOM_CHANNELS
Definition WorldConfig.h:97
static uint32 _channelIdMax
Definition ChannelMgr.h:48
static const ChannelRights & GetChannelRightsFor(const std::string &name)
Definition ChannelMgr.cpp:208
uint32 flags
Definition Channel.h:123
uint32 _channelId
Definition Channel.h:326
bool _isOwnerGM
Definition Channel.h:324
ChannelRights _channelRights
Definition Channel.h:332
bool _announce
Definition Channel.h:320
uint8 _flags
Definition Channel.h:325
bool _ownership
Definition Channel.h:322
std::string _password
Definition Channel.h:331
uint32 _channelDBId
Definition Channel.h:327
TeamId _teamId
Definition Channel.h:328
std::string _name
Definition Channel.h:330
bool _IsSaved
Definition Channel.h:323
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157
#define sWorld
Definition World.h:317
Definition DBCStructure.h:643

References _announce, _channelDBId, ChannelMgr::_channelIdMax, _channelRights, _flags, _IsSaved, _name, _ownership, _teamId, CHANNEL_DBC_FLAG_CITY_ONLY2, CHANNEL_DBC_FLAG_LFG, CHANNEL_DBC_FLAG_TRADE, CHANNEL_FLAG_CITY, CHANNEL_FLAG_CUSTOM, CHANNEL_FLAG_GENERAL, CHANNEL_FLAG_LFG, CHANNEL_FLAG_NOT_LFG, CHANNEL_FLAG_TRADE, CHANNEL_RIGHT_DONT_PRESERVE, CHANNEL_RIGHT_FORCE_ANNOUNCEMENTS, CHANNEL_RIGHT_FORCE_NO_ANNOUNCEMENTS, CHANNEL_RIGHT_NO_OWNERSHIP, CHAR_INS_CHANNEL, CharacterDatabase, CONFIG_PRESERVE_CUSTOM_CHANNELS, ChannelRights::flags, ChannelMgr::GetChannelRightsFor(), sChatChannelsStore, PreparedStatementBase::SetData(), and sWorld.

Member Function Documentation

◆ AddBan()

void Channel::AddBan ( ObjectGuid  guid,
uint32  time 
)
inline
196{ bannedStore[guid] = time; }
BannedContainer bannedStore
Definition Channel.h:334

References bannedStore.

Referenced by ChannelMgr::LoadChannels().

◆ AddChannelBanToDB()

void Channel::AddChannelBanToDB ( ObjectGuid  guid,
uint32  time 
) const
private
125{
127 stmt->SetData(0, _channelDBId);
128 stmt->SetData(1, guid.GetCounter());
129 stmt->SetData(2, time);
130 CharacterDatabase.Execute(stmt);
131}
@ CHAR_INS_CHANNEL_BAN
Definition CharacterDatabase.h:189
LowType GetCounter() const
Definition ObjectGuid.h:145

References _channelDBId, CHAR_INS_CHANNEL_BAN, CharacterDatabase, ObjectGuid::GetCounter(), and PreparedStatementBase::SetData().

Referenced by KickOrBan().

◆ AddWatching()

void Channel::AddWatching ( Player p)
1214{
1215 if (!IsOn(p->GetGUID()))
1216 return;
1217 playersWatchingStore.insert(p);
1218}
PlayersWatchingContainer playersWatchingStore
Definition Channel.h:335
bool IsOn(ObjectGuid who) const
Definition Channel.h:272
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114

References Object::GetGUID(), IsOn(), and playersWatchingStore.

◆ Announce()

void Channel::Announce ( Player const *  player)
731{
732 ObjectGuid guid = player->GetGUID();
733
734 if (!IsOn(guid))
735 {
736 WorldPacket data;
737 MakeNotMember(&data);
738 SendToOne(&data, guid);
739 return;
740 }
741
742 if (!playersStore[guid].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
743 {
744 WorldPacket data;
745 MakeNotModerator(&data);
746 SendToOne(&data, guid);
747 return;
748 }
749
751 {
752 WorldPacket data;
753 MakeNotModerator(&data);
754 SendToOne(&data, guid);
755 return;
756 }
757
759
760 WorldPacket data;
761 if (_announce)
762 MakeAnnouncementsOn(&data, guid);
763 else
764 MakeAnnouncementsOff(&data, guid);
765 SendToAll(&data);
766
768}
void MakeNotMember(WorldPacket *data)
Definition Channel.cpp:991
void MakeAnnouncementsOn(WorldPacket *data, ObjectGuid guid)
Definition Channel.cpp:1043
void SendToOne(WorldPacket *data, ObjectGuid who)
Definition Channel.cpp:927
void UpdateChannelInDB() const
Definition Channel.cpp:103
PlayerContainer playersStore
Definition Channel.h:333
void MakeNotModerator(WorldPacket *data)
Definition Channel.cpp:996
void MakeAnnouncementsOff(WorldPacket *data, ObjectGuid guid)
Definition Channel.cpp:1049
void SendToAll(WorldPacket *data, ObjectGuid guid=ObjectGuid::Empty)
Definition Channel.cpp:913
Definition ObjectGuid.h:118
Definition WorldPacket.h:26
@ RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR
Definition RBAC.h:97

References _announce, _channelRights, CHANNEL_RIGHT_FORCE_ANNOUNCEMENTS, CHANNEL_RIGHT_FORCE_NO_ANNOUNCEMENTS, ChannelRights::flags, Object::GetGUID(), Player::GetSession(), WorldSession::HasPermission(), IsOn(), MakeAnnouncementsOff(), MakeAnnouncementsOn(), MakeNotMember(), MakeNotModerator(), playersStore, rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR, SendToAll(), SendToOne(), and UpdateChannelInDB().

◆ Ban()

void Channel::Ban ( Player const *  player,
std::string const &  badname 
)
inline
195{ KickOrBan(player, badname, true); }
void KickOrBan(Player const *player, std::string const &badname, bool ban)
Definition Channel.cpp:316

References KickOrBan().

◆ CleanOldChannelsInDB()

void Channel::CleanOldChannelsInDB ( )
static
142{
143 if (sWorld->getIntConfig(CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION) > 0)
144 {
145 CharacterDatabaseTransaction trans = CharacterDatabase.BeginTransaction();
146
149 trans->Append(stmt);
150
151 stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_OLD_CHANNELS_BANS);
152 trans->Append(stmt);
153
154 CharacterDatabase.CommitTransaction(trans);
155 }
156}
@ CHAR_DEL_OLD_CHANNELS_BANS
Definition CharacterDatabase.h:188
@ CHAR_DEL_OLD_CHANNELS
Definition CharacterDatabase.h:187
constexpr auto DAY
Definition Common.h:49
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
Definition DatabaseEnvFwd.h:69
@ CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION
Definition WorldConfig.h:317

References CHAR_DEL_OLD_CHANNELS, CHAR_DEL_OLD_CHANNELS_BANS, CharacterDatabase, CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION, DAY, PreparedStatementBase::SetData(), and sWorld.

Referenced by World::SetInitialWorldSettings().

◆ DeVoice()

void Channel::DeVoice ( ObjectGuid  guid1,
ObjectGuid  guid2 
)
949{
950}

◆ FlagsNotify()

void Channel::FlagsNotify ( Player p)
1197{
1199 return;
1201 return;
1202
1203 WorldPacket data(SMSG_USERLIST_UPDATE, 8 + 1 + 1 + 4 + GetName().size());
1204 data << p->GetGUID();
1205 data << uint8(GetPlayerFlags(p->GetGUID()));
1206 data << uint8(GetFlags());
1207 data << uint32(GetNumPlayers());
1208 data << GetName();
1209
1210 SendToAllWatching(&data);
1211}
@ CHANNEL_RIGHT_CANT_SPEAK
Definition Channel.h:135
std::uint8_t uint8
Definition Define.h:109
std::uint32_t uint32
Definition Define.h:107
void SendToAllWatching(WorldPacket *data)
Definition Channel.cpp:933
std::string const & GetName() const
Definition Channel.h:179
uint8 GetPlayerFlags(ObjectGuid guid) const
Definition Channel.h:280
uint32 GetNumPlayers() const
Definition Channel.h:187
uint8 GetFlags() const
Definition Channel.h:188
WorldSession * GetSession() const
Definition Player.h:2020
bool HasPermission(uint32 permissionId)
Definition WorldSession.cpp:1551
@ SMSG_USERLIST_UPDATE
Definition Opcodes.h:1040
@ RBAC_PERM_SILENTLY_JOIN_CHANNEL
Definition RBAC.h:96

References _channelRights, CHANNEL_RIGHT_CANT_SPEAK, ChannelRights::flags, GetFlags(), Object::GetGUID(), GetName(), GetNumPlayers(), GetPlayerFlags(), Player::GetSession(), WorldSession::HasPermission(), rbac::RBAC_PERM_SILENTLY_JOIN_CHANNEL, SendToAllWatching(), and SMSG_USERLIST_UPDATE.

Referenced by JoinChannel(), SetModerator(), and SetOwner().

◆ GetChannelDBId()

uint32 Channel::GetChannelDBId ( ) const
inline
181{ return _channelDBId; }

References _channelDBId.

◆ GetChannelId()

uint32 Channel::GetChannelId ( ) const
inline
180{ return _channelId; }

References _channelId.

Referenced by MakeYouJoined(), and MakeYouLeft().

◆ GetFlags()

uint8 Channel::GetFlags ( ) const
inline
188{ return _flags; }

References _flags.

Referenced by FlagsNotify(), JoinNotify(), LeaveNotify(), List(), and MakeYouJoined().

◆ GetName()

std::string const & Channel::GetName ( ) const
inline

◆ GetNumPlayers()

uint32 Channel::GetNumPlayers ( ) const
inline
187{ return playersStore.size(); }

References playersStore.

Referenced by FlagsNotify(), JoinNotify(), and LeaveNotify().

◆ GetPassword()

std::string const & Channel::GetPassword ( ) const
inline
185{ return _password; }

References _password.

◆ GetPlayerFlags()

uint8 Channel::GetPlayerFlags ( ObjectGuid  guid) const
inlineprivate
281 {
282 PlayerContainer::const_iterator itr = playersStore.find(guid);
283 return itr != playersStore.end() ? itr->second.flags : 0;
284 }

References playersStore.

Referenced by FlagsNotify(), JoinNotify(), and MakeModeChange().

◆ HasFlag()

bool Channel::HasFlag ( uint8  flag) const
inline
189{ return _flags & flag; }

References _flags.

Referenced by IsLFG(), and ChatLogScript::OnPlayerCanUseChat().

◆ Invite()

void Channel::Invite ( Player const *  player,
std::string const &  newp 
)
812{
813 ObjectGuid guid = player->GetGUID();
814
815 if (!IsOn(guid))
816 {
817 WorldPacket data;
818 MakeNotMember(&data);
819 SendToOne(&data, guid);
820 return;
821 }
822
823 Player* newp = ObjectAccessor::FindPlayerByName(newname, false);
824 if (!newp || !newp->isGMVisible())
825 {
826 WorldPacket data;
827 MakePlayerNotFound(&data, newname);
828 SendToOne(&data, guid);
829 return;
830 }
831
832 if (IsBanned(newp->GetGUID()))
833 {
834 WorldPacket data;
835 MakePlayerInviteBanned(&data, newname);
836 SendToOne(&data, guid);
837 return;
838 }
839
840 if (newp->GetTeamId() != player->GetTeamId())
841 {
842 WorldPacket data;
844 SendToOne(&data, guid);
845 return;
846 }
847
848 if (IsOn(newp->GetGUID()))
849 {
850 WorldPacket data;
851 MakePlayerAlreadyMember(&data, newp->GetGUID());
852 SendToOne(&data, guid);
853 return;
854 }
855
856 if (!newp->GetSocial()->HasIgnore(guid))
857 {
858 WorldPacket data;
859 MakeInvite(&data, guid);
860 SendToOne(&data, newp->GetGUID());
861 data.clear();
862 }
863
864 WorldPacket data;
865 MakePlayerInvited(&data, newp->GetName());
866 SendToOne(&data, guid);
867}
void clear()
Definition ByteBuffer.h:122
void MakePlayerNotFound(WorldPacket *data, std::string const &name)
Definition Channel.cpp:1013
void MakePlayerInvited(WorldPacket *data, std::string const &name)
Definition Channel.cpp:1124
void MakePlayerInviteBanned(WorldPacket *data, std::string const &name)
Definition Channel.cpp:1130
void MakeInviteWrongFaction(WorldPacket *data)
Definition Channel.cpp:1104
void MakeInvite(WorldPacket *data, ObjectGuid guid)
Definition Channel.cpp:1098
void MakePlayerAlreadyMember(WorldPacket *data, ObjectGuid guid)
Definition Channel.cpp:1092
bool IsBanned(ObjectGuid guid) const
Definition Channel.cpp:97
bool HasIgnore(ObjectGuid const &ignore_guid) const
Definition SocialMgr.cpp:194
Definition Player.h:1084
bool isGMVisible() const
Definition Player.h:1184
TeamId GetTeamId(bool original=false) const
Definition Player.h:2128
PlayerSocial * GetSocial()
Definition Player.h:1156
std::string const & GetName() const
Definition Object.h:528
Player * FindPlayerByName(std::string const &name, bool checkInWorld=true)
Definition ObjectAccessor.cpp:271

References ByteBuffer::clear(), ObjectAccessor::FindPlayerByName(), Object::GetGUID(), WorldObject::GetName(), Player::GetSocial(), Player::GetTeamId(), PlayerSocial::HasIgnore(), IsBanned(), Player::isGMVisible(), IsOn(), MakeInvite(), MakeInviteWrongFaction(), MakeNotMember(), MakePlayerAlreadyMember(), MakePlayerInviteBanned(), MakePlayerInvited(), MakePlayerNotFound(), and SendToOne().

◆ IsAnnounce()

bool Channel::IsAnnounce ( ) const
inline
183{ return _announce; }

References _announce.

◆ IsBanned()

bool Channel::IsBanned ( ObjectGuid  guid) const
private
98{
99 BannedContainer::const_iterator itr = bannedStore.find(guid);
100 return itr != bannedStore.end() && itr->second > GameTime::GetGameTime().count();
101}
Seconds GetGameTime()
Definition GameTime.cpp:38

References bannedStore, and GameTime::GetGameTime().

Referenced by Invite(), JoinChannel(), KickOrBan(), UnBan(), and UnBan().

◆ IsConstant()

bool Channel::IsConstant ( ) const
inline
182{ return _channelId != 0; }

References _channelId.

Referenced by JoinChannel(), LeaveChannel(), MakeChannelOwner(), and MakeYouLeft().

◆ IsLFG()

bool Channel::IsLFG ( ) const
inline
184{ return HasFlag(CHANNEL_FLAG_LFG); }
bool HasFlag(uint8 flag) const
Definition Channel.h:189

References CHANNEL_FLAG_LFG, and HasFlag().

Referenced by JoinChannel().

◆ IsOn()

bool Channel::IsOn ( ObjectGuid  who) const
inlineprivate

◆ JoinChannel()

void Channel::JoinChannel ( Player player,
std::string const &  pass 
)
159{
160 ObjectGuid guid = player->GetGUID();
161 if (IsOn(guid))
162 {
163 // Do not send error message for built-in channels
164 if (!IsConstant())
165 {
166 WorldPacket data;
167 MakePlayerAlreadyMember(&data, guid);
168 SendToOne(&data, guid);
169 }
170 return;
171 }
172
173 if (IsBanned(guid))
174 {
175 WorldPacket data;
176 MakeBanned(&data);
177 SendToOne(&data, guid);
178 return;
179 }
180
181 if (!_password.empty() && pass != _password)
182 {
183 WorldPacket data;
184 MakeWrongPassword(&data);
185 SendToOne(&data, guid);
186 return;
187 }
188
189 if (IsLFG() && sWorld->getBoolConfig(CONFIG_RESTRICTED_LFG_CHANNEL) && !player->IsUsingLfg())
190 {
191 WorldPacket data;
192 MakeNotInLfg(&data);
193 SendToOne(&data, guid);
194 return;
195 }
196
197 player->JoinedChannel(this);
198
199 if (_announce && ShouldAnnouncePlayer(player))
200 {
201 WorldPacket data;
202 MakeJoined(&data, guid);
203 SendToAll(&data);
204 }
205
206 PlayerInfo pinfo;
207 pinfo.player = guid;
208 pinfo.flags = MEMBER_FLAG_NONE;
209 pinfo.plrPtr = player;
210
211 playersStore[guid] = pinfo;
212
213 if (_channelRights.joinMessage.length())
215
216 WorldPacket data;
217 MakeYouJoined(&data);
218 SendToOne(&data, guid);
219
220 JoinNotify(player);
221
223
224 // Custom channel handling
225 if (!IsConstant())
226 {
227 // Update last_used timestamp in db
228 if (!playersStore.empty())
230
232 {
233 playersStore[guid].SetModerator(true);
234 FlagsNotify(player);
235 }
236
237 // If the channel has no owner yet and ownership is allowed, set the new owner.
238 // If the channel owner is a GM and the config SilentGMJoinChannel is enabled, set the new owner
240 {
241 _isOwnerGM = playersStore[guid].IsOwnerGM();
242 SetOwner(guid, false);
243 }
244
246 playersStore[guid].SetMuted(true);
247 }
248}
@ MEMBER_FLAG_NONE
Definition Channel.h:107
@ CONFIG_SILENTLY_GM_JOIN_TO_CHANNEL
Definition WorldConfig.h:54
@ CONFIG_RESTRICTED_LFG_CHANNEL
Definition WorldConfig.h:53
std::set< uint32 > moderators
Definition Channel.h:127
std::string joinMessage
Definition Channel.h:125
bool IsConstant() const
Definition Channel.h:182
void MakeJoined(WorldPacket *data, ObjectGuid guid)
Definition Channel.cpp:959
void JoinNotify(Player *p)
Definition Channel.cpp:1163
bool IsLFG() const
Definition Channel.h:184
ObjectGuid _ownerGUID
Definition Channel.h:329
void SetOwner(ObjectGuid guid, bool exclaim=true)
Definition Channel.cpp:869
bool ShouldAnnouncePlayer(Player const *player) const
Definition Channel.cpp:939
void MakeYouJoined(WorldPacket *data)
Definition Channel.cpp:971
void MakeNotInLfg(WorldPacket *data)
Definition Channel.cpp:1146
void MakeBanned(WorldPacket *data)
Definition Channel.cpp:1067
void MakeWrongPassword(WorldPacket *data)
Definition Channel.cpp:986
void UpdateChannelUseageInDB() const
Definition Channel.cpp:117
void FlagsNotify(Player *p)
Definition Channel.cpp:1196
Definition Chat.h:37
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:219
bool IsUsingLfg()
Definition Player.cpp:13114
void JoinedChannel(Channel *c)
Definition Player.cpp:4909
uint32 GetAccountId() const
Definition WorldSession.h:453
Definition Player.h:322

References _announce, _channelRights, _isOwnerGM, _ownerGUID, _ownership, _password, CHANNEL_RIGHT_CANT_SPEAK, CONFIG_RESTRICTED_LFG_CHANNEL, CONFIG_SILENTLY_GM_JOIN_TO_CHANNEL, ChannelRights::flags, Channel::PlayerInfo::flags, FlagsNotify(), WorldSession::GetAccountId(), Object::GetGUID(), Player::GetSession(), WorldSession::HasPermission(), IsBanned(), IsConstant(), IsLFG(), IsOn(), Player::IsUsingLfg(), Player::JoinedChannel(), ChannelRights::joinMessage, JoinNotify(), MakeBanned(), MakeJoined(), MakeNotInLfg(), MakePlayerAlreadyMember(), MakeWrongPassword(), MakeYouJoined(), MEMBER_FLAG_NONE, ChannelRights::moderators, Channel::PlayerInfo::player, playersStore, Channel::PlayerInfo::plrPtr, ChatHandler::PSendSysMessage(), rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR, SendToAll(), SendToOne(), SetOwner(), ShouldAnnouncePlayer(), sWorld, and UpdateChannelUseageInDB().

Referenced by Player::UpdateLFGChannel(), and Player::UpdateLocalChannels().

◆ JoinNotify()

void Channel::JoinNotify ( Player p)
1164{
1166 return;
1168 return;
1169
1170 WorldPacket data(SMSG_USERLIST_ADD, 8 + 1 + 1 + 4 + GetName().size());
1171 data << p->GetGUID();
1172 data << uint8(GetPlayerFlags(p->GetGUID()));
1173 data << uint8(GetFlags());
1174 data << uint32(GetNumPlayers());
1175 data << GetName();
1176
1177 SendToAllWatching(&data);
1178}
@ SMSG_USERLIST_ADD
Definition Opcodes.h:1038

References _channelRights, CHANNEL_RIGHT_CANT_SPEAK, ChannelRights::flags, GetFlags(), Object::GetGUID(), GetName(), GetNumPlayers(), GetPlayerFlags(), Player::GetSession(), WorldSession::HasPermission(), rbac::RBAC_PERM_SILENTLY_JOIN_CHANNEL, SendToAllWatching(), and SMSG_USERLIST_ADD.

Referenced by JoinChannel().

◆ Kick()

void Channel::Kick ( Player const *  player,
std::string const &  badname 
)
inline
194{ KickOrBan(player, badname, false); }

References KickOrBan().

◆ KickOrBan()

void Channel::KickOrBan ( Player const *  player,
std::string const &  badname,
bool  ban 
)
317{
318 ObjectGuid good = player->GetGUID();
319
320 if (!IsOn(good))
321 {
322 WorldPacket data;
323 MakeNotMember(&data);
324 SendToOne(&data, good);
325 return;
326 }
327
328 if (!playersStore[good].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
329 {
330 WorldPacket data;
331 MakeNotModerator(&data);
332 SendToOne(&data, good);
333 return;
334 }
335
336 bool banOffline = false; // pussywizard
337 bool isGoodConstantModerator = _channelRights.moderators.find(player->GetSession()->GetAccountId()) != _channelRights.moderators.end();
338
339 ObjectGuid victim;
340 uint32 badAccId = 0;
341 Player* bad = ObjectAccessor::FindPlayerByName(badname, false);
342 if (bad)
343 {
344 victim = bad->GetGUID();
345 badAccId = bad->GetSession()->GetAccountId();
346 }
347
348 bool isOnChannel = victim && IsOn(victim);
349 if (!isOnChannel)
350 {
351 if (ban && (player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR) || isGoodConstantModerator))
352 {
353 if (ObjectGuid guid = sCharacterCache->GetCharacterGuidByName(badname))
354 {
355 if (CharacterCacheEntry const* gpd = sCharacterCache->GetCharacterCacheByGuid(guid))
356 {
357 if (Player::TeamIdForRace(gpd->Race) == Player::TeamIdForRace(player->getRace()))
358 {
359 banOffline = true;
360 victim = guid;
361 badAccId = gpd->AccountId;
362 }
363 else
364 {
365 ChatHandler(player->GetSession()).PSendSysMessage("Character {} has other faction!", badname);
366 return;
367 }
368 }
369 }
370
371 if (!banOffline)
372 {
373 WorldPacket data;
374 MakePlayerNotFound(&data, badname);
375 SendToOne(&data, good);
376 return;
377 }
378 }
379 else
380 {
381 WorldPacket data;
382 MakePlayerNotFound(&data, badname);
383 SendToOne(&data, good);
384 return;
385 }
386 }
387
388 bool changeowner = _ownerGUID == victim;
389 bool isBadConstantModerator = _channelRights.moderators.find(badAccId) != _channelRights.moderators.end();
390
391 if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR) && !isGoodConstantModerator)
392 {
393 if (changeowner && good != _ownerGUID)
394 {
395 WorldPacket data;
396 MakeNotOwner(&data);
397 SendToOne(&data, good);
398 return;
399 }
400
402 {
403 WorldPacket data;
404 MakeNotModerator(&data);
405 SendToOne(&data, good);
406 return;
407 }
408
409 if (isBadConstantModerator || bad->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
410 {
411 WorldPacket data;
412 MakeNotModerator(&data);
413 SendToOne(&data, good);
414 return;
415 }
416 }
417
418 if (ban)
419 {
420 if (!IsBanned(victim))
421 {
424
425 if (ShouldAnnouncePlayer(player))
426 {
427 WorldPacket data;
428 MakePlayerBanned(&data, victim, good);
429 SendToAll(&data);
430 }
431 }
432 }
433 else if (ShouldAnnouncePlayer(player))
434 {
435 WorldPacket data;
436 MakePlayerKicked(&data, victim, good);
437 SendToAll(&data);
438 }
439
440 if (isOnChannel)
441 {
442 playersStore.erase(victim);
443 bad->LeftChannel(this);
444 RemoveWatching(bad);
445 LeaveNotify(bad);
446 }
447
448 if (changeowner && _ownership)
449 {
450 if (good != victim)
451 SetOwner(good);
452 else if (!playersStore.empty())
453 {
454 ObjectGuid newowner;
455 for (Channel::PlayerContainer::const_iterator itr = playersStore.begin(); itr != playersStore.end(); ++itr)
456 {
457 newowner = itr->second.player;
458 if (!itr->second.plrPtr->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
459 break;
460 }
461 SetOwner(newowner);
462 }
463 else
465 }
466}
#define CHANNEL_BAN_DURATION
Definition Channel.h:27
@ CHANNEL_RIGHT_CANT_BAN
Definition Channel.h:136
@ CHANNEL_RIGHT_CANT_KICK
Definition Channel.h:137
#define sCharacterCache
Definition CharacterCache.h:83
void RemoveWatching(Player *p)
Definition Channel.cpp:1220
void MakePlayerBanned(WorldPacket *data, ObjectGuid bad, ObjectGuid good)
Definition Channel.cpp:1072
void MakeNotOwner(WorldPacket *data)
Definition Channel.cpp:1019
void AddChannelBanToDB(ObjectGuid guid, uint32 time) const
Definition Channel.cpp:124
void MakePlayerKicked(WorldPacket *data, ObjectGuid bad, ObjectGuid good)
Definition Channel.cpp:1060
void LeaveNotify(Player *p)
Definition Channel.cpp:1180
static ObjectGuid const Empty
Definition ObjectGuid.h:120
static TeamId TeamIdForRace(uint8 race)
Definition Player.cpp:5829
void LeftChannel(Channel *c)
Definition Player.cpp:4914
Definition CharacterCache.h:28

References _channelRights, _ownerGUID, _ownership, AddChannelBanToDB(), bannedStore, CHANNEL_BAN_DURATION, CHANNEL_RIGHT_CANT_BAN, CHANNEL_RIGHT_CANT_KICK, ObjectGuid::Empty, ObjectAccessor::FindPlayerByName(), ChannelRights::flags, WorldSession::GetAccountId(), GameTime::GetGameTime(), Object::GetGUID(), Unit::getRace(), Player::GetSession(), WorldSession::HasPermission(), IsBanned(), IsOn(), LeaveNotify(), Player::LeftChannel(), MakeNotMember(), MakeNotModerator(), MakeNotOwner(), MakePlayerBanned(), MakePlayerKicked(), MakePlayerNotFound(), ChannelRights::moderators, playersStore, ChatHandler::PSendSysMessage(), rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR, RemoveWatching(), sCharacterCache, SendToAll(), SendToOne(), SetOwner(), ShouldAnnouncePlayer(), and Player::TeamIdForRace().

Referenced by Ban(), and Kick().

◆ LeaveChannel()

void Channel::LeaveChannel ( Player player,
bool  send = true 
)
251{
252 ObjectGuid guid = player->GetGUID();
253 if (!IsOn(guid))
254 {
255 if (send)
256 {
257 WorldPacket data;
258 MakeNotMember(&data);
259 SendToOne(&data, guid);
260 }
261 return;
262 }
263
264 if (send)
265 {
266 WorldPacket data;
267 MakeYouLeft(&data);
268 SendToOne(&data, guid);
269 player->LeftChannel(this);
270 data.clear();
271 }
272
273 bool changeowner = playersStore[guid].IsOwner();
274
275 playersStore.erase(guid);
276 if (_announce && ShouldAnnouncePlayer(player))
277 {
278 WorldPacket data;
279 MakeLeft(&data, guid);
280 SendToAll(&data);
281 }
282
283 RemoveWatching(player);
284 LeaveNotify(player);
285
286 if (!IsConstant())
287 {
288 // Update last_used timestamp in db
290
291 // If the channel owner left and there are still playersStore inside, pick a new owner
292 if (changeowner && _ownership)
293 {
294 if (!playersStore.empty())
295 {
296 ObjectGuid newowner;
297 for (Channel::PlayerContainer::const_iterator itr = playersStore.begin(); itr != playersStore.end(); ++itr)
298 {
299 newowner = itr->second.player;
300 if (itr->second.plrPtr->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
301 _isOwnerGM = true;
302 else
303 _isOwnerGM = false;
304 if (!itr->second.plrPtr->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
305 break;
306 }
307 SetOwner(newowner);
308 // if the new owner is invisible gm, set flag to automatically choose a new owner
309 }
310 else
312 }
313 }
314}
void MakeYouLeft(WorldPacket *data)
Definition Channel.cpp:979
void MakeLeft(WorldPacket *data, ObjectGuid guid)
Definition Channel.cpp:965

References _announce, _isOwnerGM, _ownership, ByteBuffer::clear(), ObjectGuid::Empty, Object::GetGUID(), IsConstant(), IsOn(), LeaveNotify(), Player::LeftChannel(), MakeLeft(), MakeNotMember(), MakeYouLeft(), playersStore, rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR, RemoveWatching(), SendToAll(), SendToOne(), SetOwner(), ShouldAnnouncePlayer(), and UpdateChannelUseageInDB().

Referenced by Player::CleanupChannels(), Player::UpdateLFGChannel(), and Player::UpdateLocalChannels().

◆ LeaveNotify()

void Channel::LeaveNotify ( Player p)

◆ List()

void Channel::List ( Player const *  player)
690{
691 ObjectGuid guid = player->GetGUID();
692
693 if (!IsOn(guid))
694 {
695 WorldPacket data;
696 MakeNotMember(&data);
697 SendToOne(&data, guid);
698 return;
699 }
700
701 LOG_DEBUG("chat.system", "SMSG_CHANNEL_LIST {} Channel: {}", player->GetSession()->GetPlayerInfo(), GetName());
702 WorldPacket data(SMSG_CHANNEL_LIST, 1 + (GetName().size() + 1) + 1 + 4 + playersStore.size() * (8 + 1));
703 data << uint8(1); // channel type?
704 data << GetName(); // channel name
705 data << uint8(GetFlags()); // channel flags?
706
707 std::size_t pos = data.wpos();
708 data << uint32(0); // size of list, placeholder
709
710 uint32 gmLevelInWhoList = sWorld->getIntConfig(CONFIG_GM_LEVEL_IN_WHO_LIST);
711
712 uint32 count = 0;
714 for (PlayerContainer::const_iterator i = playersStore.begin(); i != playersStore.end(); ++i)
715 if (Player* member = i->second.plrPtr)
716 if ((player->GetSession()->HasPermission(rbac::RBAC_PERM_WHO_SEE_ALL_SEC_LEVELS) ||
717 member->GetSession()->GetSecurity() <= AccountTypes(gmLevelInWhoList)) &&
718 member->IsVisibleGloballyFor(player))
719 {
720 data << i->first;
721 data << uint8(i->second.flags); // flags seems to be changed...
722 ++count;
723 }
724
725 data.put<uint32>(pos, count);
726
727 SendToOne(&data, guid);
728}
AccountTypes
Definition Common.h:56
#define LOG_DEBUG(filterType__,...)
Definition Log.h:157
@ CONFIG_GM_LEVEL_IN_WHO_LIST
Definition WorldConfig.h:212
@ SMSG_CHANNEL_LIST
Definition Opcodes.h:185
@ RBAC_PERM_WHO_SEE_ALL_SEC_LEVELS
Definition RBAC.h:86

References _channelRights, CHANNEL_RIGHT_CANT_SPEAK, CONFIG_GM_LEVEL_IN_WHO_LIST, ChannelRights::flags, GetFlags(), Object::GetGUID(), GetName(), WorldSession::GetPlayerInfo(), Player::GetSession(), WorldSession::HasPermission(), IsOn(), LOG_DEBUG, MakeNotMember(), playersStore, ByteBuffer::put(), rbac::RBAC_PERM_WHO_SEE_ALL_SEC_LEVELS, SendToOne(), SMSG_CHANNEL_LIST, sWorld, and ByteBuffer::wpos().

◆ MakeAnnouncementsOff()

void Channel::MakeAnnouncementsOff ( WorldPacket data,
ObjectGuid  guid 
)
private
1050{
1052 *data << guid;
1053}
@ CHAT_ANNOUNCEMENTS_OFF_NOTICE
Definition Channel.h:48
void MakeNotifyPacket(WorldPacket *data, uint8 notify_type)
Definition Channel.cpp:952

References CHAT_ANNOUNCEMENTS_OFF_NOTICE, and MakeNotifyPacket().

Referenced by Announce().

◆ MakeAnnouncementsOn()

void Channel::MakeAnnouncementsOn ( WorldPacket data,
ObjectGuid  guid 
)
private
1044{
1046 *data << guid;
1047}
@ CHAT_ANNOUNCEMENTS_ON_NOTICE
Definition Channel.h:47

References CHAT_ANNOUNCEMENTS_ON_NOTICE, and MakeNotifyPacket().

Referenced by Announce().

◆ MakeBanned()

void Channel::MakeBanned ( WorldPacket data)
private
1068{
1070}
@ CHAT_BANNED_NOTICE
Definition Channel.h:53

References CHAT_BANNED_NOTICE, and MakeNotifyPacket().

Referenced by JoinChannel().

◆ MakeChannelOwner()

void Channel::MakeChannelOwner ( WorldPacket data)
private
1025{
1026 std::string name = "";
1027
1028 if (!sCharacterCache->GetCharacterNameByGuid(_ownerGUID, name) || name.empty())
1029 name = "PLAYER_NOT_FOUND";
1030
1032 *data << ((IsConstant() || !_ownerGUID) ? "Nobody" : name);
1033}
@ CHAT_CHANNEL_OWNER_NOTICE
Definition Channel.h:45

References _ownerGUID, CHAT_CHANNEL_OWNER_NOTICE, IsConstant(), MakeNotifyPacket(), and sCharacterCache.

Referenced by SendWhoOwner().

◆ MakeInvalidName()

void Channel::MakeInvalidName ( WorldPacket data)
private
1115{
1117}
@ CHAT_INVALID_NAME_NOTICE
Definition Channel.h:61

References CHAT_INVALID_NAME_NOTICE, and MakeNotifyPacket().

◆ MakeInvite()

void Channel::MakeInvite ( WorldPacket data,
ObjectGuid  guid 
)
private
1099{
1101 *data << guid;
1102}
@ CHAT_INVITE_NOTICE
Definition Channel.h:58

References CHAT_INVITE_NOTICE, and MakeNotifyPacket().

Referenced by Invite().

◆ MakeInviteWrongFaction()

void Channel::MakeInviteWrongFaction ( WorldPacket data)
private
1105{
1107}
@ CHAT_INVITE_WRONG_FACTION_NOTICE
Definition Channel.h:59

References CHAT_INVITE_WRONG_FACTION_NOTICE, and MakeNotifyPacket().

Referenced by Invite().

◆ MakeJoined()

void Channel::MakeJoined ( WorldPacket data,
ObjectGuid  guid 
)
private
960{
962 *data << guid;
963}
@ CHAT_JOINED_NOTICE
Definition Channel.h:32

References CHAT_JOINED_NOTICE, and MakeNotifyPacket().

Referenced by JoinChannel().

◆ MakeLeft()

void Channel::MakeLeft ( WorldPacket data,
ObjectGuid  guid 
)
private
966{
968 *data << guid;
969}
@ CHAT_LEFT_NOTICE
Definition Channel.h:33

References CHAT_LEFT_NOTICE, and MakeNotifyPacket().

Referenced by LeaveChannel().

◆ MakeModeChange()

void Channel::MakeModeChange ( WorldPacket data,
ObjectGuid  guid,
uint8  oldflags 
)
private
1036{
1038 *data << guid;
1039 *data << uint8(oldflags);
1040 *data << uint8(GetPlayerFlags(guid));
1041}
@ CHAT_MODE_CHANGE_NOTICE
Definition Channel.h:46

References CHAT_MODE_CHANGE_NOTICE, GetPlayerFlags(), and MakeNotifyPacket().

Referenced by SetModerator(), SetMute(), and SetOwner().

◆ MakeModerationOff()

void Channel::MakeModerationOff ( WorldPacket data,
ObjectGuid  guid 
)
private
1272{
1274 *data << guid;
1275}
@ CHAT_MODERATION_OFF_NOTICE
Definition Channel.h:50

References CHAT_MODERATION_OFF_NOTICE, and MakeNotifyPacket().

Referenced by ToggleModeration().

◆ MakeModerationOn()

void Channel::MakeModerationOn ( WorldPacket data,
ObjectGuid  guid 
)
private
1266{
1268 *data << guid;
1269}
@ CHAT_MODERATION_ON_NOTICE
Definition Channel.h:49

References CHAT_MODERATION_ON_NOTICE, and MakeNotifyPacket().

Referenced by ToggleModeration().

◆ MakeMuted()

void Channel::MakeMuted ( WorldPacket data)
private
1056{
1058}
@ CHAT_MUTED_NOTICE
Definition Channel.h:51

References CHAT_MUTED_NOTICE, and MakeNotifyPacket().

Referenced by Say().

◆ MakeNotifyPacket()

◆ MakeNotInArea()

void Channel::MakeNotInArea ( WorldPacket data)
private
1142{
1144}
@ CHAT_NOT_IN_AREA_NOTICE
Definition Channel.h:66

References CHAT_NOT_IN_AREA_NOTICE, and MakeNotifyPacket().

◆ MakeNotInLfg()

void Channel::MakeNotInLfg ( WorldPacket data)
private
1147{
1149}
@ CHAT_NOT_IN_LFG_NOTICE
Definition Channel.h:67

References CHAT_NOT_IN_LFG_NOTICE, and MakeNotifyPacket().

Referenced by JoinChannel().

◆ MakeNotMember()

void Channel::MakeNotMember ( WorldPacket data)
private

◆ MakeNotModerated()

void Channel::MakeNotModerated ( WorldPacket data)
private
1120{
1122}
@ CHAT_NOT_MODERATED_NOTICE
Definition Channel.h:62

References CHAT_NOT_MODERATED_NOTICE, and MakeNotifyPacket().

◆ MakeNotModerator()

void Channel::MakeNotModerator ( WorldPacket data)
private
997{
999}
@ CHAT_NOT_MODERATOR_NOTICE
Definition Channel.h:40

References CHAT_NOT_MODERATOR_NOTICE, and MakeNotifyPacket().

Referenced by Announce(), KickOrBan(), Password(), SetMode(), ToggleModeration(), and UnBan().

◆ MakeNotOwner()

void Channel::MakeNotOwner ( WorldPacket data)
private
1020{
1022}
@ CHAT_NOT_OWNER_NOTICE
Definition Channel.h:44

References CHAT_NOT_OWNER_NOTICE, and MakeNotifyPacket().

Referenced by KickOrBan(), SetMode(), and SetOwner().

◆ MakeOwnerChanged()

void Channel::MakeOwnerChanged ( WorldPacket data,
ObjectGuid  guid 
)
private
1008{
1010 *data << guid;
1011}
@ CHAT_OWNER_CHANGED_NOTICE
Definition Channel.h:42

References CHAT_OWNER_CHANGED_NOTICE, and MakeNotifyPacket().

Referenced by SetOwner().

◆ MakePasswordChanged()

void Channel::MakePasswordChanged ( WorldPacket data,
ObjectGuid  guid 
)
private
1002{
1004 *data << guid;
1005}
@ CHAT_PASSWORD_CHANGED_NOTICE
Definition Channel.h:41

References CHAT_PASSWORD_CHANGED_NOTICE, and MakeNotifyPacket().

Referenced by Password().

◆ MakePlayerAlreadyMember()

void Channel::MakePlayerAlreadyMember ( WorldPacket data,
ObjectGuid  guid 
)
private
1093{
1095 *data << guid;
1096}
@ CHAT_PLAYER_ALREADY_MEMBER_NOTICE
Definition Channel.h:57

References CHAT_PLAYER_ALREADY_MEMBER_NOTICE, and MakeNotifyPacket().

Referenced by Invite(), and JoinChannel().

◆ MakePlayerBanned()

void Channel::MakePlayerBanned ( WorldPacket data,
ObjectGuid  bad,
ObjectGuid  good 
)
private
1073{
1075 *data << bad;
1076 *data << good;
1077}
@ CHAT_PLAYER_BANNED_NOTICE
Definition Channel.h:54

References CHAT_PLAYER_BANNED_NOTICE, and MakeNotifyPacket().

Referenced by KickOrBan().

◆ MakePlayerInviteBanned()

void Channel::MakePlayerInviteBanned ( WorldPacket data,
std::string const &  name 
)
private
1131{
1133 *data << name;
1134}
@ CHAT_PLAYER_INVITE_BANNED_NOTICE
Definition Channel.h:64

References CHAT_PLAYER_INVITE_BANNED_NOTICE, and MakeNotifyPacket().

Referenced by Invite().

◆ MakePlayerInvited()

void Channel::MakePlayerInvited ( WorldPacket data,
std::string const &  name 
)
private
1125{
1127 *data << name;
1128}
@ CHAT_PLAYER_INVITED_NOTICE
Definition Channel.h:63

References CHAT_PLAYER_INVITED_NOTICE, and MakeNotifyPacket().

Referenced by Invite().

◆ MakePlayerKicked()

void Channel::MakePlayerKicked ( WorldPacket data,
ObjectGuid  bad,
ObjectGuid  good 
)
private
1061{
1063 *data << bad;
1064 *data << good;
1065}
@ CHAT_PLAYER_KICKED_NOTICE
Definition Channel.h:52

References CHAT_PLAYER_KICKED_NOTICE, and MakeNotifyPacket().

Referenced by KickOrBan().

◆ MakePlayerNotBanned()

void Channel::MakePlayerNotBanned ( WorldPacket data,
std::string const &  name 
)
private
1087{
1089 *data << name;
1090}
@ CHAT_PLAYER_NOT_BANNED_NOTICE
Definition Channel.h:56

References CHAT_PLAYER_NOT_BANNED_NOTICE, and MakeNotifyPacket().

◆ MakePlayerNotFound()

void Channel::MakePlayerNotFound ( WorldPacket data,
std::string const &  name 
)
private
1014{
1016 *data << name;
1017}
@ CHAT_PLAYER_NOT_FOUND_NOTICE
Definition Channel.h:43

References CHAT_PLAYER_NOT_FOUND_NOTICE, and MakeNotifyPacket().

Referenced by Invite(), KickOrBan(), SetMode(), SetOwner(), and UnBan().

◆ MakePlayerUnbanned()

void Channel::MakePlayerUnbanned ( WorldPacket data,
ObjectGuid  bad,
ObjectGuid  good 
)
private
1080{
1082 *data << bad;
1083 *data << good;
1084}
@ CHAT_PLAYER_UNBANNED_NOTICE
Definition Channel.h:55

References CHAT_PLAYER_UNBANNED_NOTICE, and MakeNotifyPacket().

Referenced by UnBan().

◆ MakeThrottled()

void Channel::MakeThrottled ( WorldPacket data)
private
1137{
1139}
@ CHAT_THROTTLED_NOTICE
Definition Channel.h:65

References CHAT_THROTTLED_NOTICE, and MakeNotifyPacket().

◆ MakeVoiceOff()

void Channel::MakeVoiceOff ( WorldPacket data,
ObjectGuid  guid 
)
private
1158{
1160 *data << guid;
1161}
@ CHAT_VOICE_OFF_NOTICE
Definition Channel.h:69

References CHAT_VOICE_OFF_NOTICE, and MakeNotifyPacket().

◆ MakeVoiceOn()

void Channel::MakeVoiceOn ( WorldPacket data,
ObjectGuid  guid 
)
private
1152{
1154 *data << guid;
1155}
@ CHAT_VOICE_ON_NOTICE
Definition Channel.h:68

References CHAT_VOICE_ON_NOTICE, and MakeNotifyPacket().

◆ MakeWrongFaction()

void Channel::MakeWrongFaction ( WorldPacket data)
private
1110{
1112}
@ CHAT_WRONG_FACTION_NOTICE
Definition Channel.h:60

References CHAT_WRONG_FACTION_NOTICE, and MakeNotifyPacket().

◆ MakeWrongPassword()

void Channel::MakeWrongPassword ( WorldPacket data)
private
987{
989}
@ CHAT_WRONG_PASSWORD_NOTICE
Definition Channel.h:38

References CHAT_WRONG_PASSWORD_NOTICE, and MakeNotifyPacket().

Referenced by JoinChannel().

◆ MakeYouJoined()

void Channel::MakeYouJoined ( WorldPacket data)
private
972{
974 *data << uint8(GetFlags());
975 *data << uint32(GetChannelId());
976 *data << uint32(0);
977}
@ CHAT_YOU_JOINED_NOTICE
Definition Channel.h:35
uint32 GetChannelId() const
Definition Channel.h:180

References CHAT_YOU_JOINED_NOTICE, GetChannelId(), GetFlags(), and MakeNotifyPacket().

Referenced by JoinChannel().

◆ MakeYouLeft()

void Channel::MakeYouLeft ( WorldPacket data)
private
980{
982 *data << uint32(GetChannelId());
983 *data << uint8(IsConstant());
984}
@ CHAT_YOU_LEFT_NOTICE
Definition Channel.h:37

References CHAT_YOU_LEFT_NOTICE, GetChannelId(), IsConstant(), and MakeNotifyPacket().

Referenced by LeaveChannel().

◆ Password()

void Channel::Password ( Player const *  player,
std::string const &  pass 
)
536{
537 ObjectGuid guid = player->GetGUID();
538
539 ChatHandler chat(player->GetSession());
540 if (!IsOn(guid))
541 {
542 WorldPacket data;
543 MakeNotMember(&data);
544 SendToOne(&data, guid);
545 return;
546 }
547
548 if (!playersStore[guid].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
549 {
550 WorldPacket data;
551 MakeNotModerator(&data);
552 SendToOne(&data, guid);
553 return;
554 }
555
557 {
558 WorldPacket data;
559 MakeNotModerator(&data);
560 SendToOne(&data, guid);
561 return;
562 }
563
564 _password = pass;
565
566 WorldPacket data;
567 MakePasswordChanged(&data, guid);
568 SendToAll(&data);
569
571}
@ CHANNEL_RIGHT_CANT_CHANGE_PASSWORD
Definition Channel.h:139
void MakePasswordChanged(WorldPacket *data, ObjectGuid guid)
Definition Channel.cpp:1001

References _channelRights, _password, CHANNEL_RIGHT_CANT_CHANGE_PASSWORD, ChannelRights::flags, Object::GetGUID(), Player::GetSession(), WorldSession::HasPermission(), IsOn(), MakeNotMember(), MakeNotModerator(), MakePasswordChanged(), playersStore, rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR, SendToAll(), SendToOne(), and UpdateChannelInDB().

◆ RemoveChannelBanFromDB()

void Channel::RemoveChannelBanFromDB ( ObjectGuid  guid) const
private
134{
136 stmt->SetData(0, _channelDBId);
137 stmt->SetData(1, guid.GetCounter());
138 CharacterDatabase.Execute(stmt);
139}
@ CHAR_DEL_CHANNEL_BAN
Definition CharacterDatabase.h:190

References _channelDBId, CHAR_DEL_CHANNEL_BAN, CharacterDatabase, ObjectGuid::GetCounter(), and PreparedStatementBase::SetData().

Referenced by UnBan(), and UnBan().

◆ RemoveWatching()

void Channel::RemoveWatching ( Player p)
1221{
1222 PlayersWatchingContainer::iterator itr = playersWatchingStore.find(p);
1223 if (itr != playersWatchingStore.end())
1224 playersWatchingStore.erase(itr);
1225}

References playersWatchingStore.

Referenced by KickOrBan(), and LeaveChannel().

◆ Say()

void Channel::Say ( ObjectGuid  guid,
std::string const &  what,
uint32  lang 
)
771{
772 if (what.empty())
773 return;
774
776 lang = LANG_UNIVERSAL;
777
778 if (!IsOn(guid))
779 {
780 WorldPacket data;
781 MakeNotMember(&data);
782 SendToOne(&data, guid);
783 return;
784 }
785
786 PlayerInfo& pinfo = playersStore[guid];
787
788 if (pinfo.IsMuted())
789 {
790 WorldPacket data;
791 MakeMuted(&data);
792 SendToOne(&data, guid);
793 return;
794 }
795
796 Player* player = pinfo.plrPtr;
797 WorldPacket data;
798
799 if (player)
800 {
801 ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, _name);
802 }
803 else
804 {
805 ChatHandler::BuildChatPacket(data, CHAT_MSG_CHANNEL, Language(lang), guid, guid, what, 0, "", "", 0, false, _name);
806 }
807
808 SendToAll(&data, pinfo.IsModerator() ? ObjectGuid::Empty : guid);
809}
@ CHAT_MSG_CHANNEL
Definition SharedDefines.h:3402
Language
Definition SharedDefines.h:722
@ LANG_UNIVERSAL
Definition SharedDefines.h:723
@ CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL
Definition WorldConfig.h:33
void MakeMuted(WorldPacket *data)
Definition Channel.cpp:1055
static std::size_t BuildChatPacket(WorldPacket &data, ChatMsg chatType, Language language, ObjectGuid senderGUID, ObjectGuid receiverGUID, std::string_view message, uint8 chatTag, std::string const &senderName="", std::string const &receiverName="", uint32 achievementId=0, bool gmMessage=false, std::string const &channelName="")
Definition Chat.cpp:273

References _name, ChatHandler::BuildChatPacket(), CHAT_MSG_CHANNEL, CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL, ObjectGuid::Empty, Channel::PlayerInfo::IsModerator(), Channel::PlayerInfo::IsMuted(), IsOn(), LANG_UNIVERSAL, MakeMuted(), MakeNotMember(), playersStore, Channel::PlayerInfo::plrPtr, SendToAll(), SendToOne(), and sWorld.

◆ SendToAll()

void Channel::SendToAll ( WorldPacket data,
ObjectGuid  guid = ObjectGuid::Empty 
)
private
914{
915 for (PlayerContainer::const_iterator i = playersStore.begin(); i != playersStore.end(); ++i)
916 if (!guid || !i->second.plrPtr->GetSocial()->HasIgnore(guid))
917 i->second.plrPtr->SendDirectMessage(data);
918}

References playersStore.

Referenced by Announce(), JoinChannel(), KickOrBan(), LeaveChannel(), Password(), Say(), SetModerator(), SetMute(), SetOwner(), ToggleModeration(), and UnBan().

◆ SendToAllButOne()

void Channel::SendToAllButOne ( WorldPacket data,
ObjectGuid  who 
)
private
921{
922 for (PlayerContainer::const_iterator i = playersStore.begin(); i != playersStore.end(); ++i)
923 if (i->first != who)
924 i->second.plrPtr->SendDirectMessage(data);
925}

References playersStore.

◆ SendToAllWatching()

void Channel::SendToAllWatching ( WorldPacket data)
private
934{
935 for (PlayersWatchingContainer::const_iterator i = playersWatchingStore.begin(); i != playersWatchingStore.end(); ++i)
936 (*i)->SendDirectMessage(data);
937}

References playersWatchingStore.

Referenced by FlagsNotify(), JoinNotify(), and LeaveNotify().

◆ SendToOne()

void Channel::SendToOne ( WorldPacket data,
ObjectGuid  who 
)
private
928{
930 player->SendDirectMessage(data);
931}
Player * FindConnectedPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:257

References ObjectAccessor::FindConnectedPlayer().

Referenced by Announce(), Invite(), JoinChannel(), KickOrBan(), LeaveChannel(), List(), Password(), Say(), SendWhoOwner(), SetMode(), SetOwner(), ToggleModeration(), and UnBan().

◆ SendWhoOwner()

void Channel::SendWhoOwner ( ObjectGuid  guid)
680{
681 WorldPacket data;
682 if (IsOn(guid))
683 MakeChannelOwner(&data);
684 else
685 MakeNotMember(&data);
686 SendToOne(&data, guid);
687}
void MakeChannelOwner(WorldPacket *data)
Definition Channel.cpp:1024

References IsOn(), MakeChannelOwner(), MakeNotMember(), and SendToOne().

◆ SetMode()

void Channel::SetMode ( Player const *  player,
std::string const &  p2n,
bool  mod,
bool  set 
)
574{
575 ObjectGuid guid = player->GetGUID();
576
577 if (!IsOn(guid))
578 {
579 WorldPacket data;
580 MakeNotMember(&data);
581 SendToOne(&data, guid);
582 return;
583 }
584
585 if (!playersStore[guid].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
586 {
587 WorldPacket data;
588 MakeNotModerator(&data);
589 SendToOne(&data, guid);
590 return;
591 }
592
593 if (guid == _ownerGUID && std::string(p2n) == player->GetName() && mod)
594 return;
595
596 Player* newp = ObjectAccessor::FindPlayerByName(p2n, false);
597 ObjectGuid victim = newp ? newp->GetGUID() : ObjectGuid::Empty;
598
599 if (!victim || !IsOn(victim) ||
600 // allow make moderator from another team only if both is GMs
601 // at this moment this only way to show channel post for GM from another team
602 ((!player->GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL) || !newp->GetSession()->HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL)) && player->GetTeamId() != newp->GetTeamId() &&
604 {
605 WorldPacket data;
606 MakePlayerNotFound(&data, p2n);
607 SendToOne(&data, guid);
608 return;
609 }
610
611 if (_ownerGUID == victim && _ownerGUID != guid)
612 {
613 WorldPacket data;
614 MakeNotOwner(&data);
615 SendToOne(&data, guid);
616 return;
617 }
618
619 if (mod)
620 {
621 bool isBadConstantModerator = _channelRights.moderators.find(newp->GetSession()->GetAccountId()) != _channelRights.moderators.end();
622 if (!isBadConstantModerator)
623 SetModerator(newp->GetGUID(), set);
624 }
625 else
626 {
627 bool isGoodConstantModerator = _channelRights.moderators.find(player->GetSession()->GetAccountId()) != _channelRights.moderators.end();
628 if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR) && !isGoodConstantModerator)
629 {
631 {
632 WorldPacket data;
633 MakeNotModerator(&data);
634 SendToOne(&data, guid);
635 return;
636 }
637 }
638
639 SetMute(newp->GetGUID(), set);
640 }
641}
@ CHANNEL_RIGHT_CANT_MUTE
Definition Channel.h:138
void SetMute(Player const *player, std::string const &newname)
Definition Channel.h:206
void SetModerator(Player const *player, std::string const &newname)
Definition Channel.h:204
@ RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL
Definition RBAC.h:77

References _channelRights, _ownerGUID, CHANNEL_RIGHT_CANT_MUTE, CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL, ObjectGuid::Empty, ObjectAccessor::FindPlayerByName(), ChannelRights::flags, WorldSession::GetAccountId(), Object::GetGUID(), WorldObject::GetName(), Player::GetSession(), Player::GetTeamId(), WorldSession::HasPermission(), IsOn(), MakeNotMember(), MakeNotModerator(), MakeNotOwner(), MakePlayerNotFound(), ChannelRights::moderators, playersStore, rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR, rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHANNEL, SendToOne(), SetModerator(), SetMute(), and sWorld.

Referenced by SetModerator(), SetMute(), UnsetModerator(), and UnsetMute().

◆ SetModerator() [1/2]

void Channel::SetModerator ( ObjectGuid  guid,
bool  set 
)
inlineprivate
287 {
288 PlayerInfo& pinfo = playersStore[guid];
289 if (pinfo.IsModerator() != set)
290 {
291 uint8 oldFlag = pinfo.flags;
292 pinfo.SetModerator(set);
293
294 WorldPacket data;
295 MakeModeChange(&data, guid, oldFlag);
296 SendToAll(&data);
297
298 FlagsNotify(pinfo.plrPtr);
299 }
300 }
void MakeModeChange(WorldPacket *data, ObjectGuid guid, uint8 oldflags)
Definition Channel.cpp:1035

References Channel::PlayerInfo::flags, FlagsNotify(), Channel::PlayerInfo::IsModerator(), MakeModeChange(), playersStore, Channel::PlayerInfo::plrPtr, SendToAll(), and Channel::PlayerInfo::SetModerator().

◆ SetModerator() [2/2]

void Channel::SetModerator ( Player const *  player,
std::string const &  newname 
)
inline
204{ SetMode(player, newname, true, true); }
void SetMode(Player const *player, std::string const &p2n, bool mod, bool set)
Definition Channel.cpp:573

References SetMode().

Referenced by SetMode().

◆ SetMute() [1/2]

void Channel::SetMute ( ObjectGuid  guid,
bool  set 
)
inlineprivate
303 {
304 PlayerInfo& pinfo = playersStore[guid];
305 if (pinfo.IsMuted() != set)
306 {
307 uint8 oldFlag = pinfo.flags;
308 pinfo.SetMuted(set);
309
310 WorldPacket data;
311 MakeModeChange(&data, guid, oldFlag);
312 SendToAll(&data);
313 }
314 }

References Channel::PlayerInfo::flags, Channel::PlayerInfo::IsMuted(), MakeModeChange(), playersStore, SendToAll(), and Channel::PlayerInfo::SetMuted().

◆ SetMute() [2/2]

void Channel::SetMute ( Player const *  player,
std::string const &  newname 
)
inline
206{ SetMode(player, newname, false, true); }

References SetMode().

Referenced by SetMode().

◆ SetOwner() [1/2]

void Channel::SetOwner ( ObjectGuid  guid,
bool  exclaim = true 
)
870{
871 if (_ownerGUID)
872 {
873 // [] will re-add player after it possible removed
874 PlayerContainer::iterator p_itr = playersStore.find(_ownerGUID);
875 if (p_itr != playersStore.end())
876 {
877 p_itr->second.SetOwner(false);
878 FlagsNotify(p_itr->second.plrPtr);
879 }
880 }
881
882 _ownerGUID = guid;
883 if (_ownerGUID)
884 {
886
887 pinfo.SetModerator(true);
888 uint8 oldFlag = pinfo.flags;
889 pinfo.SetOwner(true);
890 FlagsNotify(pinfo.plrPtr);
891
893 if (player)
894 {
895 if (ShouldAnnouncePlayer(player))
896 {
897 WorldPacket data;
898
899 MakeModeChange(&data, _ownerGUID, oldFlag);
900 SendToAll(&data);
901
902 if (exclaim)
903 {
904 // MakeOwnerChanged will reset the packet for us
906 SendToAll(&data);
907 }
908 }
909 }
910 }
911}
void MakeOwnerChanged(WorldPacket *data, ObjectGuid guid)
Definition Channel.cpp:1007
Player * FindPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:245

References _ownerGUID, ObjectAccessor::FindPlayer(), Channel::PlayerInfo::flags, FlagsNotify(), MakeModeChange(), MakeOwnerChanged(), playersStore, Channel::PlayerInfo::plrPtr, SendToAll(), Channel::PlayerInfo::SetModerator(), Channel::PlayerInfo::SetOwner(), and ShouldAnnouncePlayer().

Referenced by JoinChannel(), KickOrBan(), LeaveChannel(), and SetOwner().

◆ SetOwner() [2/2]

void Channel::SetOwner ( Player const *  player,
std::string const &  name 
)
644{
645 ObjectGuid guid = player->GetGUID();
646
647 if (!IsOn(guid))
648 {
649 WorldPacket data;
650 MakeNotMember(&data);
651 SendToOne(&data, guid);
652 return;
653 }
654
655 bool isGoodConstantModerator = _channelRights.moderators.find(player->GetSession()->GetAccountId()) != _channelRights.moderators.end();
656 if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR) && guid != _ownerGUID && !isGoodConstantModerator)
657 {
658 WorldPacket data;
659 MakeNotOwner(&data);
660 SendToOne(&data, guid);
661 return;
662 }
663
664 Player* newp = ObjectAccessor::FindPlayerByName(newname, false);
665 ObjectGuid victim = newp ? newp->GetGUID() : ObjectGuid::Empty;
666
667 if (!victim || !IsOn(victim) || (newp->GetTeamId() != player->GetTeamId() &&
669 {
670 WorldPacket data;
671 MakePlayerNotFound(&data, newname);
672 SendToOne(&data, guid);
673 return;
674 }
675
676 SetOwner(victim);
677}

References _channelRights, _ownerGUID, CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL, ObjectGuid::Empty, ObjectAccessor::FindPlayerByName(), WorldSession::GetAccountId(), Object::GetGUID(), Player::GetSession(), Player::GetTeamId(), WorldSession::HasPermission(), IsOn(), MakeNotMember(), MakeNotOwner(), MakePlayerNotFound(), ChannelRights::moderators, rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR, SendToOne(), SetOwner(), and sWorld.

◆ SetPassword()

void Channel::SetPassword ( std::string const &  npassword)
inline
186{ _password = npassword; }

References _password.

Referenced by ChannelMgr::LoadChannels().

◆ ShouldAnnouncePlayer()

bool Channel::ShouldAnnouncePlayer ( Player const *  player) const
private

◆ ToggleModeration()

void Channel::ToggleModeration ( Player p)
1228{
1229 ObjectGuid guid = player->GetGUID();
1230
1231 if (!IsOn(guid))
1232 {
1233 WorldPacket data;
1234 MakeNotMember(&data);
1235 SendToOne(&data, guid);
1236 return;
1237 }
1238
1239 const bool gm = player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR);
1240
1241 if (!playersStore[guid].IsModerator() && !gm)
1242 {
1243 WorldPacket data;
1244 MakeNotModerator(&data);
1245 SendToOne(&data, guid);
1246 return;
1247 }
1248
1249 // toggle channel moderation
1251
1252 WorldPacket data;
1253 if (_moderation)
1254 {
1255 MakeModerationOn(&data, guid);
1256 }
1257 else
1258 {
1259 MakeModerationOff(&data, guid);
1260 }
1261
1262 SendToAll(&data);
1263}
bool _moderation
Definition Channel.h:321
void MakeModerationOn(WorldPacket *data, ObjectGuid guid)
Definition Channel.cpp:1265
void MakeModerationOff(WorldPacket *data, ObjectGuid guid)
Definition Channel.cpp:1271

References _moderation, Object::GetGUID(), Player::GetSession(), WorldSession::HasPermission(), IsOn(), MakeModerationOff(), MakeModerationOn(), MakeNotMember(), MakeNotModerator(), playersStore, rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR, SendToAll(), and SendToOne().

◆ UnBan() [1/2]

void Channel::UnBan ( ObjectGuid  guid)
528{
529 if (!IsBanned(guid))
530 return;
531 bannedStore.erase(guid);
533}
void RemoveChannelBanFromDB(ObjectGuid guid) const
Definition Channel.cpp:133

References bannedStore, IsBanned(), and RemoveChannelBanFromDB().

◆ UnBan() [2/2]

void Channel::UnBan ( Player const *  player,
std::string const &  badname 
)
469{
470 ObjectGuid good = player->GetGUID();
471
472 if (!IsOn(good))
473 {
474 WorldPacket data;
475 MakeNotMember(&data);
476 SendToOne(&data, good);
477 return;
478 }
479
480 if (!playersStore[good].IsModerator() && !player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR))
481 {
482 WorldPacket data;
483 MakeNotModerator(&data);
484 SendToOne(&data, good);
485 return;
486 }
487
488 ObjectGuid victim;
489 if (ObjectGuid guid = sCharacterCache->GetCharacterGuidByName(badname))
490 {
491 victim = guid;
492 }
493
494 if (!victim || !IsBanned(victim))
495 {
496 WorldPacket data;
497 MakePlayerNotFound(&data, badname);
498 SendToOne(&data, good);
499 return;
500 }
501
502 bool isConstantModerator = _channelRights.moderators.find(player->GetSession()->GetAccountId()) != _channelRights.moderators.end();
503 if (!player->GetSession()->HasPermission(rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR) && !isConstantModerator)
504 {
506 {
507 WorldPacket data;
508 MakeNotModerator(&data);
509 SendToOne(&data, good);
510 return;
511 }
512 }
513
515 LOG_GM(player->GetSession()->GetAccountId(), "Command: /unban {} {} (Moderator {} [{}, account: {}] unbanned {} [{}])",
516 GetName(), badname, player->GetName(), player->GetGUID().ToString(), player->GetSession()->GetAccountId(),
517 badname, victim.ToString());
518
519 bannedStore.erase(victim);
521
522 WorldPacket data;
523 MakePlayerUnbanned(&data, victim, good);
524 SendToAll(&data);
525}
#define LOG_GM(accountId__,...)
Definition Log.h:164
void MakePlayerUnbanned(WorldPacket *data, ObjectGuid bad, ObjectGuid good)
Definition Channel.cpp:1079
std::string ToString() const
Definition ObjectGuid.cpp:47

References _channelRights, bannedStore, CHANNEL_RIGHT_CANT_BAN, ChannelRights::flags, WorldSession::GetAccountId(), Object::GetGUID(), GetName(), WorldObject::GetName(), Player::GetSession(), WorldSession::HasPermission(), IsBanned(), IsOn(), LOG_GM, MakeNotMember(), MakeNotModerator(), MakePlayerNotFound(), MakePlayerUnbanned(), ChannelRights::moderators, playersStore, rbac::RBAC_PERM_CHANGE_CHANNEL_NOT_MODERATOR, RemoveChannelBanFromDB(), sCharacterCache, SendToAll(), SendToOne(), and ObjectGuid::ToString().

◆ UnsetModerator()

void Channel::UnsetModerator ( Player const *  player,
std::string const &  newname 
)
inline
205{ SetMode(player, newname, true, false); }

References SetMode().

◆ UnsetMute()

void Channel::UnsetMute ( Player const *  player,
std::string const &  newname 
)
inline
207{ SetMode(player, newname, false, false); }

References SetMode().

◆ UpdateChannelInDB()

void Channel::UpdateChannelInDB ( ) const
private
104{
105 if (_IsSaved)
106 {
108 stmt->SetData(0, _announce);
109 stmt->SetData(1, _password);
110 stmt->SetData(2, _channelDBId);
111 CharacterDatabase.Execute(stmt);
112
113 LOG_DEBUG("chat.system", "Channel({}) updated in database", _name);
114 }
115}
@ CHAR_UPD_CHANNEL
Definition CharacterDatabase.h:184

References _announce, _channelDBId, _IsSaved, _name, _password, CHAR_UPD_CHANNEL, CharacterDatabase, LOG_DEBUG, and PreparedStatementBase::SetData().

Referenced by Announce(), and Password().

◆ UpdateChannelUseageInDB()

void Channel::UpdateChannelUseageInDB ( ) const
private
118{
120 stmt->SetData(0, _channelDBId);
121 CharacterDatabase.Execute(stmt);
122}
@ CHAR_UPD_CHANNEL_USAGE
Definition CharacterDatabase.h:186

References _channelDBId, CHAR_UPD_CHANNEL_USAGE, CharacterDatabase, and PreparedStatementBase::SetData().

Referenced by JoinChannel(), and LeaveChannel().

◆ Voice()

void Channel::Voice ( ObjectGuid  guid1,
ObjectGuid  guid2 
)
945{
946}

Member Data Documentation

◆ _announce

bool Channel::_announce
private

◆ _channelDBId

◆ _channelId

uint32 Channel::_channelId
private

Referenced by GetChannelId(), and IsConstant().

◆ _channelRights

◆ _flags

uint8 Channel::_flags
private

Referenced by Channel(), GetFlags(), and HasFlag().

◆ _isOwnerGM

bool Channel::_isOwnerGM
private

Referenced by JoinChannel(), and LeaveChannel().

◆ _IsSaved

bool Channel::_IsSaved
private

Referenced by Channel(), and UpdateChannelInDB().

◆ _moderation

bool Channel::_moderation
private

Referenced by ToggleModeration().

◆ _name

std::string Channel::_name
private

◆ _ownerGUID

ObjectGuid Channel::_ownerGUID
private

◆ _ownership

bool Channel::_ownership
private

◆ _password

std::string Channel::_password
private

◆ _teamId

TeamId Channel::_teamId
private

Referenced by Channel().

◆ bannedStore

BannedContainer Channel::bannedStore
private

Referenced by AddBan(), IsBanned(), KickOrBan(), UnBan(), and UnBan().

◆ playersStore

◆ playersWatchingStore

PlayersWatchingContainer Channel::playersWatchingStore
private

The documentation for this class was generated from the following files: