reactos/irc/TechBot/TechBot.IRCLibrary/IrcChannel.cs

138 lines
2.8 KiB
C#
Raw Normal View History

/*
Channels names are strings (beginning with a '&' or '#' character) of
length up to 200 characters. Apart from the the requirement that the
first character being either '&' or '#'; the only restriction on a
channel name is that it may not contain any spaces (' '), a control G
(^G or ASCII 7), or a comma (',' which is used as a list item
separator by the protocol).
*/
using System;
using System.Collections;
namespace TechBot.IRCLibrary
{
/// <summary>
/// IRC channel type.
/// </summary>
public enum IrcChannelType
{
Public,
Private,
Secret
}
/// <summary>
/// IRC channel.
/// </summary>
public class IrcChannel
{
#region Private fields
private IrcClient owner;
private string name;
private IrcChannelType type = IrcChannelType.Public;
private ArrayList users = new ArrayList();
#endregion
#region Public properties
/// <summary>
/// Owner of this channel.
/// </summary>
public IrcClient Owner
{
get
{
return owner;
}
}
/// <summary>
/// Name of channel (no leading #).
/// </summary>
public string Name
{
get
{
return name;
}
}
/// <summary>
/// Type of channel.
/// </summary>
public IrcChannelType Type
{
get
{
return type;
}
}
/// <summary>
/// Users in this channel.
/// </summary>
public ArrayList Users
{
get
{
return users;
}
}
#endregion
/// <summary>
/// Constructor.
/// </summary>
/// <param name="owner">Owner of this channel.</param>
/// <param name="name">Name of channel.</param>
public IrcChannel(IrcClient owner, string name)
{
if (owner == null)
{
throw new ArgumentNullException("owner", "Owner cannot be null.");
}
if (name == null)
{
throw new ArgumentNullException("name", "Name cannot be null.");
}
this.owner = owner;
this.name = name;
}
/// <summary>
/// Locate a user.
/// </summary>
/// <param name="nickname">Nickname of user (no decorations).</param>
/// <returns>User or null if not found.</returns>
public IrcUser LocateUser(string nickname)
{
foreach (IrcUser user in Users)
{
/* FIXME: There are special cases for nickname comparison */
if (nickname.ToLower().Equals(user.Nickname.ToLower()))
{
return user;
}
}
return null;
}
/// <summary>
/// Talk to the channel.
/// </summary>
/// <param name="text">Text to send to the channel.</param>
public void Talk(string text)
{
owner.SendMessage(new IrcMessage(IRC.PRIVMSG,
String.Format("#{0} :{1}",
name,
text)));
}
}
}