}\r
}\r
\r
+ private string GetMessageSource(MessageContext context)\r
+ {\r
+ if (context is ChannelMessageContext)\r
+ {\r
+ ChannelMessageContext channelContext = context as ChannelMessageContext;\r
+ return String.Format("#{0}",\r
+ channelContext.Channel.Name);\r
+ }\r
+ else if (context is UserMessageContext)\r
+ {\r
+ UserMessageContext userContext = context as UserMessageContext;\r
+ return userContext.User.Nickname;\r
+ }\r
+ else\r
+ {\r
+ throw new InvalidOperationException(String.Format("Unhandled message context '{0}'",\r
+ context.GetType()));\r
+ }\r
+ }\r
+\r
public void WriteLine(MessageContext context,\r
string message)\r
{\r
- Console.WriteLine(String.Format("Sending: {0} to #{1}",\r
- message,\r
- context.Channel != null ? context.Channel.Name : "(null)"));\r
- context.Channel.Talk(message);\r
+ if (context is ChannelMessageContext)\r
+ {\r
+ ChannelMessageContext channelContext = context as ChannelMessageContext;\r
+ channelContext.Channel.Talk(message);\r
+ }\r
+ else if (context is UserMessageContext)\r
+ {\r
+ UserMessageContext userContext = context as UserMessageContext;\r
+ userContext.User.Talk(message);\r
+ }\r
+ else\r
+ {\r
+ throw new InvalidOperationException(String.Format("Unhandled message context '{0}'",\r
+ context.GetType()));\r
+ }\r
}\r
\r
private void ExtractMessage(string parameters,\r
int index = message.Parameters.IndexOf(' ');\r
if (index == -1)\r
index = message.Parameters.Length;\r
- channelName = message.Parameters.Substring(1, index - 1);\r
+ else\r
+ index = index - 1;\r
+ channelName = message.Parameters.Substring(1, index);\r
+ return true;\r
+ }\r
+\r
+ private bool GetTargetNickname(IrcMessage message,\r
+ out string nickname)\r
+ {\r
+ if (message.Parameters == null)\r
+ {\r
+ nickname = null;\r
+ return false;\r
+ }\r
+\r
+ int index = message.Parameters.IndexOf(' ');\r
+ if (index == -1)\r
+ index = message.Parameters.Length;\r
+ nickname = message.Parameters.Substring(0, index);\r
+ Console.WriteLine("nickname: " + nickname);\r
return true;\r
}\r
\r
if (message.Command.ToUpper().Equals("PRIVMSG"))\r
{\r
string channelName;\r
+ string nickname;\r
if (GetChannelName(message,\r
out channelName))\r
{\r
{\r
if (String.Compare(channel.Name, channelName, true) == 0)\r
{\r
- context = new MessageContext(channel);\r
+ context = new ChannelMessageContext(channel);\r
return true;\r
}\r
}\r
}\r
+ else if (GetTargetNickname(message,\r
+ out nickname))\r
+ {\r
+ IrcUser targetUser = new IrcUser(client,\r
+ nickname);\r
+ if (String.Compare(targetUser.Nickname, botname, true) == 0)\r
+ {\r
+ IrcUser sourceUser = new IrcUser(client,\r
+ message.PrefixNickname);\r
+ context = new UserMessageContext(sourceUser);\r
+ return true;\r
+ }\r
+ }\r
}\r
context = null;\r
return false;\r
if (ShouldAcceptMessage(message,\r
out context))\r
{\r
- Console.WriteLine(String.Format("Injecting: {0} from #{1}",\r
+ Console.WriteLine(String.Format("Injecting: {0} from {1}",\r
injectMessage,\r
- context.Channel.Name));\r
+ GetMessageSource(context)));\r
service.InjectMessage(context,\r
injectMessage);\r
}\r