private bool ParseUser(Network.IncomingDataEventArgs info) { // :hub.tm-irc.org 352 petr #support pidgeon D3EE8257.8361F8AE.37E3A027.IP hub.tm-irc.org petr H :0 My name is hidden, dude if (info.Parameters.Count <= 6) { return false; } Network.NetworkParseUserEventArgs ev = new Network.NetworkParseUserEventArgs(ServerLineRawText, this.Date); ev.Parameters = info.Parameters; ev.ChannelName = info.Parameters[1]; ev.Channel = _Network.GetChannel(info.Parameters[1]); string server = info.Parameters[4]; ev.User = new UserInfo(); ev.User.Ident = info.Parameters[2]; ev.User.Host = info.Parameters[3]; ev.User.Nick = info.Parameters[5]; string realname = info.Message; if (realname != null & realname.Length > 2) { realname = realname.Substring(2); } else if (realname == "0 ") { realname = ""; } char mode = '\0'; ev.IsAway = false; if (info.Parameters[6].Length > 0) { // if user is away we flag him if (info.Parameters[6].StartsWith("G", StringComparison.Ordinal)) { ev.IsAway = true; } mode = info.Parameters[6][info.Parameters[6].Length - 1]; if (!_Network.UChars.Contains(mode)) { mode = '\0'; } ev.StringMode = mode.ToString(); } ev.RealName = realname; _Network.__evt_ParseUser(ev); if (ev.Channel != null) { if (!IsBacklog) { if (!ev.Channel.ContainsUser(ev.User.Nick)) { User _user = null; if (mode != '\0') { _user = new User(mode.ToString() + ev.User.Nick, ev.User.Host, ev.User.Ident, _Network); } else { _user = new User(ev.User, _Network); } _user.LastAwayCheck = DateTime.Now; _user.RealName = realname; if (ev.IsAway) { _user.AwayTime = DateTime.Now; } _user.Away = ev.IsAway; ev.Channel.InsertUser(_user); return ev.Channel.IsParsingWhoData; } User user = ev.Channel.UserFromName(ev.User.Nick); if (user != null) { user.Ident = ev.User.Ident; user.Host = ev.User.Host; user.Server = server; user.RealName = realname; user.LastAwayCheck = DateTime.Now; if (!user.Away && ev.IsAway) { user.AwayTime = DateTime.Now; } user.Away = ev.IsAway; } } if (ev.Channel.IsParsingWhoData) { return true; } } return IsBacklog; }
private bool ParseInfo(Network.IncomingDataEventArgs info) { if (info.Parameters.Count < 3) { return false; } // :irc-2t.tm-irc.org 353 petr = #support :petr user1227554 &OperBot Revi if (IsBacklog) { return true; } Network.ChannelUserListEventArgs ev = new Network.ChannelUserListEventArgs(ServerLineRawText, this.Date); ev.Parameters = info.Parameters; ev.ParameterLine = info.ParameterLine; ev.UserNicknames.AddRange(info.Message.Split(' ')); ev.ChannelName = info.Parameters[2]; Channel channel = _Network.GetChannel(info.Parameters[2]); if (channel != null) { ev.Channel = channel; foreach (string nick in ev.UserNicknames) { if (String.IsNullOrEmpty(nick)) { continue; } User user = channel.UserFromName(nick); if (user == null) { user = new User(nick, _Network); channel.InsertUser(user); } else { char UserMode_ = '\0'; if (nick.Length > 0) { foreach (char mode in _Network.UChars) { if (nick[0] == mode) { UserMode_ = nick[0]; // there is no need to check for other modes break; } } user.SymbolMode(UserMode_); } } ev.Users.Add(user); } _Network.__evt_ChannelUserList(ev); return true; } _Network.__evt_ChannelUserList(ev); return IsBacklog; }
public virtual void RemoveUser(User user) { lock (this.UserList) { string name = user.Nick.ToLower (); if (this.UserList.ContainsKey (name)) { this.UserList.Remove (name); } } }
/// <summary> /// This function returns a special user mode for a user that should be in user list (for example % for halfop or @ for operator) /// </summary> /// <param name="nick"></param> /// <returns></returns> protected static string uchr(User nick) { return nick.ChannelPrefix; }
public virtual void InsertUser(User user) { lock (this.UserList) { // don't use LowNick directly it can change between these 2 instructions string ln = user.LowerNick; user.Channel = this; if (!this.UserList.ContainsKey(ln)) { this.UserList.Add(ln, user); } } }