private void OnJoin(ChannelBase channel, UserBase user)
{
channel.BroadcastInclusive(CMD, user, channel.Name);
user.Names(channel);
if (channel.Properties.ContainsKey("Topic"))
{ // Note: Shouldn't send RPL_NOTOPIC under any circumstances at this point.
user.SendNumeric(Numerics.RPL_TOPIC, channel.Name, ":" + (string)channel.Properties["Topic"]);
}
if (channel.Users.Count < 2)
{
return;
}
string prefix = channel.GetPrefix(user);
if (!string.IsNullOrEmpty(prefix))
{
StringBuilder modes = new StringBuilder(prefix.Length + 1).Append('+');
StringBuilder args = new StringBuilder(prefix.Length * (user.Mask.Nickname.Length + 1));
foreach (char c in prefix)
{
char m;
switch (c)
{
case '$':
m = 'X';
break;
case '~':
m = 'O';
break;
case '&':
m = 'a';
break;
case '@':
m = 'o';
break;
case '%':
m = 'h';
break;
case '+':
m = 'v';
break;
case '!':
m = 'x';
break;
default:
continue;
}
modes.Append(m);
args.Append(' ').Append(user.Mask.Nickname);
}
channel.BroadcastInclusive("MODE", null, channel.Name, modes.ToString() + args.ToString());
}
}