public static bool SendRank( [NotNull] Player player, [NotNull] Rank rank, [NotNull] string rawMessage ) {
if ( player == null )
throw new ArgumentNullException( "player" );
if ( rank == null )
throw new ArgumentNullException( "rank" );
if ( rawMessage == null )
throw new ArgumentNullException( "rawMessage" );
var recepientList = rank.Players.NotIgnoring( player ).Union( player );
string formattedMessage = String.Format( "&P({0}&P){1}: {2}",
rank.ClassyName,
player.Name,
rawMessage );
var e = new ChatSendingEventArgs( player,
rawMessage,
formattedMessage,
ChatMessageType.Rank,
recepientList );
if ( !SendInternal( e ) )
return false;
Logger.Log( LogType.RankChat,
"(rank {0}){1}: {2}",
rank.Name, player.Name, rawMessage );
return true;
}