private void _Event_NICK(IrcMessageData ircdata)
{
string oldnickname = ircdata.Nick;
string newnickname = ircdata.Message;
if (IsMe(ircdata.Nick)) {
// nickname change is your own
_Nickname = newnickname;
}
if (ActiveChannelSyncing) {
IrcUser ircuser = GetIrcUser(oldnickname);
// if we don't have any info about him, don't update him!
// (only queries or ourself in no channels)
if (ircuser != null) {
string[] joinedchannels = ircuser.JoinedChannels;
// update his nickname
ircuser.Nick = newnickname;
// remove the old entry
// remove first to avoid duplication, Foo -> foo
_IrcUsers.Remove(oldnickname);
// add him as new entry and new nickname as key
_IrcUsers.Add(newnickname, ircuser);
#if LOG4NET
Logger.ChannelSyncing.Debug("updated nickname of: "+oldnickname+" to: "+newnickname);
#endif
// now the same for all channels he is joined
Channel channel;
ChannelUser channeluser;
foreach (string channelname in joinedchannels) {
channel = GetChannel(channelname);
channeluser = GetChannelUser(channelname, oldnickname);
// remove first to avoid duplication, Foo -> foo
channel.UnsafeUsers.Remove(oldnickname);
channel.UnsafeUsers.Add(newnickname, channeluser);
if (channeluser.IsOp) {
channel.UnsafeOps.Remove(oldnickname);
channel.UnsafeOps.Add(newnickname, channeluser);
}
if (SupportNonRfc && ((NonRfcChannelUser)channeluser).IsHalfop) {
NonRfcChannel nchannel = (NonRfcChannel)channel;
nchannel.UnsafeHalfops.Remove(oldnickname);
nchannel.UnsafeHalfops.Add(newnickname, channeluser);
}
if (channeluser.IsVoice) {
channel.UnsafeVoices.Remove(oldnickname);
channel.UnsafeVoices.Add(newnickname, channeluser);
}
}
}
}
if (OnNickChange != null) {
OnNickChange(this, new NickChangeEventArgs(ircdata, oldnickname, newnickname));
}
}