using System; namespace TechBot.IRCLibrary { /// <summary> /// IRC user. /// </summary> public class IrcUser { #region Private fields private IrcClient owner; private string nickname; private string decoratedNickname; #endregion #region Public properties /// <summary> /// Owner of this channel. /// </summary> public IrcClient Owner { get { return owner; } } /// <summary> /// Nickname of user. /// </summary> public string Nickname { get { return nickname; } } /// <summary> /// Decorated nickname of user. /// </summary> public string DecoratedNickname { get { return decoratedNickname; } } /// <summary> /// Wether user is channel operator. /// </summary> public bool Operator { get { return decoratedNickname.StartsWith("@"); } } /// <summary> /// Wether user has voice. /// </summary> public bool Voice { get { return decoratedNickname.StartsWith("+"); } } #endregion /// <summary> /// Constructor. /// </summary> /// <param name="owner">Owner of this channel.</param> /// <param name="nickname">Nickname (possibly decorated) of user.</param> public IrcUser(IrcClient owner, string nickname) { if (owner == null) { throw new ArgumentNullException("owner", "Owner cannot be null."); } this.owner = owner; this.decoratedNickname = nickname.Trim(); this.nickname = StripDecoration(decoratedNickname); } /// <summary> /// Talk to the user. /// </summary> /// <param name="text">Text to send to the user.</param> public void Talk(string text) { if (text == null) { throw new ArgumentNullException("text", "Text cannot be null."); } owner.SendMessage(new IrcMessage(IRC.PRIVMSG, String.Format("{0} :{1}", nickname, text))); } /// <summary> /// Strip docoration of nickname. /// </summary> /// <param name="nickname">Possible decorated nickname.</param> /// <returns>Undecorated nickname.</returns> public static string StripDecoration(string decoratedNickname) { if (decoratedNickname.StartsWith("@")) { return decoratedNickname.Substring(1); } else if (decoratedNickname.StartsWith("+")) { return decoratedNickname.Substring(1); } else { return decoratedNickname; } } } }