public IRCMessage(IRCMessageType type, string sender, string channel, string body, string rawMessage) { this.Type = type; this.Sender = sender; this.Channel = channel; this.Body = body; this.RawMessage = rawMessage; }
public MessageInfo(string username, string channel, string message) { this.username = username; this.channel = channel; this.message = message; header = IRCMessageType.OTHER; theUser = new User(this.username) { lastCheckIn = DateTime.Now }; ttsMessage = ""; }
public IRCMessage( string from, string nick, string ident, string host, string channel, string message, string rawMessage, IRCMessageType type, IRCReplyCode replycode ) { RawMessage = rawMessage; RawMessageArray = rawMessage.Split( new[] { ' ' } ); Type = type; ReplyCode = replycode; From = from; Nick = nick; Ident = ident; Host = host; Channel = channel; if( message != null ) { // message is optional Message = message; MessageArray = message.Split( new[] { ' ' } ); } }
/// <summary> /// Sends a message to everyone who is on a common channel with a certain user /// </summary> /// <param name="user"></param> /// <param name="type"></param> /// <param name="extraParam"></param> private void SendToUserChannels(IRCUser user, IRCMessageType type, string extraParam) { //find all channels that this user is in List <KeyValuePair <IRCChannel, IRCUser> > channels = m_channelUserPairs.FindAll(delegate(KeyValuePair <IRCChannel, IRCUser> kvp) { return(kvp.Value == user); }); string message; if (type == IRCMessageType.Nick) //extraParam = old nickname { message = ":" + extraParam + "!" + user.UserName + "@" + user.HostName + " NICK :" + user.Name; } else if (type == IRCMessageType.Quit) //extraParam = quit message { message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " QUIT :" + extraParam; } else { return; } SendToUser(user, message); List <IRCUser> recepients = new List <IRCUser>(); //find all users who are in each channel which have not already received this message for (int i = 0, cCount = channels.Count; i < cCount; i++) { List <KeyValuePair <IRCChannel, IRCUser> > users = m_channelUserPairs.FindAll(delegate(KeyValuePair <IRCChannel, IRCUser> kvp) { return(kvp.Key == channels[i].Key); }); for (int u = 0, uCount = users.Count; u < uCount; u++) { if (!recepients.Contains(users[i].Value)) { recepients.Add(users[i].Value); SendToUser(users[i].Value, message); } } } }
public IRCMessage(string from, string nick, string ident, string host, string channel, string message, string rawMessage, IRCMessageType type, IRCReplyCode replycode) { RawMessage = rawMessage; RawMessageArray = rawMessage.Split(new[] { ' ' }); Type = type; ReplyCode = replycode; From = from; Nick = nick; Ident = ident; Host = host; Channel = channel; if (message != null) { // message is optional Message = message; MessageArray = message.Split(new[] { ' ' }); } }
/// <summary> /// Sends s message to everyone in a certain channel /// </summary> /// <param name="channel"></param> /// <param name="user"></param> /// <param name="type"></param> private void SendToChannel(IRCChannel channel, IRCUser user, IRCMessageType type, string extraParam) { //find all users who are in this channel List <KeyValuePair <IRCChannel, IRCUser> > users = m_channelUserPairs.FindAll(delegate(KeyValuePair <IRCChannel, IRCUser> kvp) { return(kvp.Key == channel); }); string message; if (type == IRCMessageType.Join) { message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " JOIN " + channel.Name; } else if (type == IRCMessageType.Part) { message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " PART :" + channel.Name; } else if (type == IRCMessageType.Privmsg) { message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " PRIVMSG " + channel.Name + " :" + extraParam; if (channel.Name == m_defaultChannel && user.TCPClient != null) //only call entity chat for irc users { m_scene.EntityChat(this, user, 0f, extraParam, 0, EntityChatType.Broadcast); } } else { return; } for (int u = 0, uCount = users.Count; u < uCount; u++) { if (type != IRCMessageType.Privmsg || users[u].Value != user) { SendToUser(users[u].Value, message); } } }
static IRCMessage MessageParser([NotNull] string rawline, [NotNull] string actualBotNick) { if (rawline == null) { throw new ArgumentNullException("rawline"); } if (actualBotNick == null) { throw new ArgumentNullException("actualBotNick"); } string line; string nick = null; string ident = null; string host = null; string channel = null; string message = null; IRCReplyCode replycode; if (rawline[0] == ':') { line = rawline.Substring(1); } else { line = rawline; } string[] linear = line.Split(new[] { ' ' }); // conform to RFC 2812 string from = linear[0]; string messagecode = linear[1]; int exclamationpos = from.IndexOf("!"); int atpos = from.IndexOf("@"); int colonpos = line.IndexOf(" :"); if (colonpos != -1) { // we want the exact position of ":" not beginning from the space colonpos += 1; } if (exclamationpos != -1) { nick = from.Substring(0, exclamationpos); } if ((atpos != -1) && (exclamationpos != -1)) { ident = from.Substring(exclamationpos + 1, (atpos - exclamationpos) - 1); } if (atpos != -1) { host = from.Substring(atpos + 1); } try { replycode = (IRCReplyCode)int.Parse(messagecode); } catch (FormatException) { replycode = IRCReplyCode.Null; } IRCMessageType type = GetMessageType(rawline, actualBotNick); if (colonpos != -1) { message = line.Substring(colonpos + 1); } switch (type) { case IRCMessageType.Join: case IRCMessageType.Kick: case IRCMessageType.Part: case IRCMessageType.TopicChange: case IRCMessageType.ChannelModeChange: case IRCMessageType.ChannelMessage: case IRCMessageType.ChannelAction: case IRCMessageType.ChannelNotice: channel = linear[2]; break; case IRCMessageType.Who: case IRCMessageType.Topic: case IRCMessageType.Invite: case IRCMessageType.BanList: case IRCMessageType.ChannelMode: channel = linear[3]; break; case IRCMessageType.Name: channel = linear[4]; break; } if ((channel != null) && (channel[0] == ':')) { channel = channel.Substring(1); } return(new IRCMessage(from, nick, ident, host, channel, message, rawline, type, replycode)); }
/// <summary> /// Sends a message to everyone who is on a common channel with a certain user /// </summary> /// <param name="user"></param> /// <param name="type"></param> /// <param name="extraParam"></param> private void SendToUserChannels(IRCUser user, IRCMessageType type, string extraParam) { //find all channels that this user is in List<KeyValuePair<IRCChannel, IRCUser>> channels = m_channelUserPairs.FindAll(delegate(KeyValuePair<IRCChannel, IRCUser> kvp) { return kvp.Value == user; }); string message; if (type == IRCMessageType.Nick) //extraParam = old nickname message = ":" + extraParam + "!" + user.UserName + "@" + user.HostName + " NICK :" + user.Name; else if (type == IRCMessageType.Quit) //extraParam = quit message message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " QUIT :" + extraParam; else return; SendToUser(user, message); List<IRCUser> recepients = new List<IRCUser>(); //find all users who are in each channel which have not already received this message for (int i = 0, cCount = channels.Count; i < cCount; i++) { List<KeyValuePair<IRCChannel, IRCUser>> users = m_channelUserPairs.FindAll(delegate(KeyValuePair<IRCChannel, IRCUser> kvp) { return kvp.Key == channels[i].Key; }); for (int u = 0, uCount = users.Count; u < uCount; u++) { if (!recepients.Contains(users[i].Value)) { recepients.Add(users[i].Value); SendToUser(users[i].Value, message); } } } }
/// <summary> /// Sends s message to everyone in a certain channel /// </summary> /// <param name="channel"></param> /// <param name="user"></param> /// <param name="type"></param> private void SendToChannel(IRCChannel channel, IRCUser user, IRCMessageType type, string extraParam) { //find all users who are in this channel List<KeyValuePair<IRCChannel, IRCUser>> users = m_channelUserPairs.FindAll(delegate(KeyValuePair<IRCChannel, IRCUser> kvp) { return kvp.Key == channel; }); string message; if (type == IRCMessageType.Join) message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " JOIN " + channel.Name; else if (type == IRCMessageType.Part) message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " PART :" + channel.Name; else if (type == IRCMessageType.Privmsg) { message = ":" + user.Name + "!" + user.UserName + "@" + user.HostName + " PRIVMSG " + channel.Name + " :" + extraParam; if (channel.Name == m_defaultChannel && user.TCPClient != null) //only call entity chat for irc users m_scene.EntityChat(this, user, 0f, extraParam, 0, EntityChatType.Broadcast); } else return; for (int u = 0, uCount = users.Count; u < uCount; u++) { if (type != IRCMessageType.Privmsg || users[u].Value != user) SendToUser(users[u].Value, message); } }