Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 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;
 }
Ejemplo n.º 3
0
 public virtual void RemoveUser(User user)
 {
     lock (this.UserList)
     {
         string name = user.Nick.ToLower ();
         if (this.UserList.ContainsKey (name))
         {
             this.UserList.Remove (name);
         }
     }
 }
Ejemplo n.º 4
0
 /// <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;
 }
Ejemplo n.º 5
0
 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);
         }
     }
 }