private void ParseWHOIS(MessageInfo messageInfo) { UserInfo userInfo; switch (messageInfo.Command) { case "311": //:sendak.freenode.net 311 Jaex ShareX ~ShareX unaffiliated/sharex * :realname if (messageInfo.Parameters.Count >= 4) { userInfo = new UserInfo(); userInfo.Nickname = messageInfo.Parameters[1]; if (messageInfo.Parameters[2][1] == '~') { userInfo.Username = messageInfo.Parameters[2].Substring(1); } else // Ident { userInfo.Username = messageInfo.Parameters[2]; } userInfo.Host = messageInfo.Parameters[3]; userInfo.Realname = messageInfo.Message; userList.Add(userInfo); } break; case "319": //:sendak.freenode.net 319 Jaex ShareX :@#ShareX @#ShareX_Test if (messageInfo.Parameters.Count >= 2) { userInfo = FindUser(messageInfo.Parameters[1]); if (userInfo != null) { userInfo.Channels.Clear(); userInfo.Channels.AddRange(messageInfo.Message.Split()); } } break; case "312": //:sendak.freenode.net 312 Jaex ShareX sendak.freenode.net :Vilnius, Lithuania, EU if (messageInfo.Parameters.Count >= 3) { userInfo = FindUser(messageInfo.Parameters[1]); if (userInfo != null) { userInfo.Server = messageInfo.Parameters[2]; } } break; case "671": //:sendak.freenode.net 671 Jaex ShareX :is using a secure connection if (messageInfo.Parameters.Count >= 2) { userInfo = FindUser(messageInfo.Parameters[1]); if (userInfo != null) { userInfo.SecureConnection = true; } } break; case "317": //:sendak.freenode.net 317 Jaex ShareX 39110 1440201914 :seconds idle, signon time if (messageInfo.Parameters.Count >= 4) { userInfo = FindUser(messageInfo.Parameters[1]); if (userInfo != null) { int idleTime; if (int.TryParse(messageInfo.Parameters[2], out idleTime)) { userInfo.IdleTime = TimeSpan.FromSeconds(idleTime); } int signOnTime; if (int.TryParse(messageInfo.Parameters[3], out signOnTime)) { userInfo.SignOnDate = Helpers.UnixToDateTime(signOnTime).ToLocalTime(); } } } break; case "330": //:sendak.freenode.net 330 Jaex ShareX ShareX :is logged in as if (messageInfo.Parameters.Count >= 3) { userInfo = FindUser(messageInfo.Parameters[1]); if (userInfo != null) { userInfo.Identity = messageInfo.Parameters[2]; } } break; case "318": //:sendak.freenode.net 318 Jaex ShareX :End of /WHOIS list. if (messageInfo.Parameters.Count >= 2) { userInfo = FindUser(messageInfo.Parameters[1]); if (userInfo != null) { userList.Remove(userInfo); OnWhoisResult(userInfo); } } break; } }
public static MessageInfo Parse(string content) { MessageInfo messageInfo = new MessageInfo(content); int index; string nickname = ParseSection(content, out index); // Is it not my message? if (nickname.StartsWith(":")) { nickname = nickname.Substring(1); int usernameIndex = nickname.IndexOf("!", StringComparison.Ordinal); // Is it not server? if (usernameIndex > -1) { //nickname!~username@host messageInfo.User.UserType = IRCUserType.User; messageInfo.User.Nickname = nickname.Remove(usernameIndex); nickname = nickname.Substring(usernameIndex + 1); if (nickname[0] == '~') // Remove Ident character { nickname = nickname.Substring(1); } int hostIndex = nickname.IndexOf("@", StringComparison.Ordinal); messageInfo.User.Username = nickname.Remove(hostIndex); messageInfo.User.Host = nickname.Substring(hostIndex + 1); } else { //irc.freenode.net messageInfo.User.UserType = IRCUserType.Server; messageInfo.User.Host = nickname; } content = content.Substring(index + 1); messageInfo.Command = ParseSection(content, out index); } else { // It is my command messageInfo.User.UserType = IRCUserType.Me; messageInfo.Command = nickname; } while (index > -1) { content = content.Substring(index + 1); string check = ParseSection(content, out index); // Is it parameter? if (!check.StartsWith(":")) { messageInfo.Parameters.Add(check); } else { // It is message messageInfo.Message = content.Substring(1); break; } } return messageInfo; }
private void CheckMessage(MessageInfo messageInfo) { string channel = messageInfo.Parameters[0]; OnMessage(messageInfo.User, channel, messageInfo.Message); if (messageInfo.User.UserType == IRCUserType.User) { HandleAutoResponse(channel, messageInfo.User.Nickname, messageInfo.Message.ToLowerInvariant()); } }
private void OnOutput(MessageInfo messageInfo) { if (Output != null) { Output(messageInfo); } //Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {messageInfo.Content}"); }
private void IRC_Output(MessageInfo messageInfo) { this.InvokeSafe(() => { txtOutput.AppendText($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {messageInfo.Content}\r\n"); }); }
public static MessageInfo Parse(string content) { MessageInfo messageInfo = new MessageInfo(content); int index; string nickname = ParseSection(content, out index); // Is it not my message? if (nickname.StartsWith(":")) { nickname = nickname.Substring(1); int usernameIndex = nickname.IndexOf("!", StringComparison.Ordinal); // Is it not server? if (usernameIndex > -1) { //nickname!~username@host messageInfo.User.UserType = IRCUserType.User; messageInfo.User.Nickname = nickname.Remove(usernameIndex); nickname = nickname.Substring(usernameIndex + 1); if (nickname[0] == '~') // Remove Ident character { nickname = nickname.Substring(1); } int hostIndex = nickname.IndexOf("@", StringComparison.Ordinal); messageInfo.User.Username = nickname.Remove(hostIndex); messageInfo.User.Host = nickname.Substring(hostIndex + 1); } else { //irc.freenode.net messageInfo.User.UserType = IRCUserType.Server; messageInfo.User.Host = nickname; } content = content.Substring(index + 1); messageInfo.Command = ParseSection(content, out index); } else { // It is my command messageInfo.User.UserType = IRCUserType.Me; messageInfo.Command = nickname; } while (index > -1) { content = content.Substring(index + 1); string check = ParseSection(content, out index); // Is it parameter? if (!check.StartsWith(":")) { messageInfo.Parameters.Add(check); } else { // It is message messageInfo.Message = content.Substring(1); break; } } return(messageInfo); }
private void IRC_Output(MessageInfo messageInfo) { AppendOutput(messageInfo.Content, Color.Black); }
private bool CheckCommand(string message) { MessageInfo messageInfo = MessageInfo.Parse(message); //:sendak.freenode.net 375 Jaex :- sendak.freenode.net Message of the Day - //:sendak.freenode.net 372 Jaex :- Welcome to sendak.freenode.net in Vilnius, Lithuania, EU. //:sendak.freenode.net 376 Jaex :End of /MOTD command. if (Info.SuppressMOTD) { if (messageInfo.Command == "375" || messageInfo.Command == "372") { return(true); } else if (messageInfo.Command == "376") { OnConnected(); return(true); } } if (messageInfo.User.UserType == IRCUserType.Me) { messageInfo.User.Nickname = CurrentNickname; } OnOutput(messageInfo); switch (messageInfo.Command) { case "PING": //PING :sendak.freenode.net SendRawMessage("PONG :" + messageInfo.Message); break; case "376": //:sendak.freenode.net 376 Jaex :End of /MOTD command. OnConnected(); break; case "433": //:sendak.freenode.net 433 * ShareX :Nickname is already in use. if (!IsConnected && messageInfo.Parameters.Count >= 2) { string nickname = !string.IsNullOrEmpty(Info.Nickname2) ? Info.Nickname2 : Info.Nickname + "_"; if (!messageInfo.Parameters[1].Equals(nickname, StringComparison.InvariantCultureIgnoreCase)) { ChangeNickname(nickname); } } break; case "PRIVMSG": //:Jaex!Jaex@unaffiliated/jaex PRIVMSG #ShareX :test CheckMessage(messageInfo); break; case "JOIN": //:Jaex!Jaex@unaffiliated/jaex JOIN #ShareX or :Jaex!Jaex@unaffiliated/jaex JOIN :#ShareX if (UserJoined != null) { UserJoined(messageInfo.User, messageInfo.Parameters.Count > 0 ? messageInfo.Parameters[0] : messageInfo.Message); } break; case "PART": //:Jaex!Jaex@unaffiliated/jaex PART #ShareX :"Leaving" if (UserLeft != null) { UserLeft(messageInfo.User, messageInfo.Parameters[0]); } break; case "QUIT": //:Jaex!Jaex@unaffiliated/jaex QUIT :Client Quit if (UserQuit != null) { UserQuit(messageInfo.User, null); } break; case "NICK": //:Jaex!Jaex@unaffiliated/jaex NICK :Jaex2 if (UserNickChanged != null) { UserNickChanged(messageInfo.User, messageInfo.Message); } break; case "KICK": //:Jaex!Jaex@unaffiliated/jaex KICK #ShareX Jaex2 :Jaex2 if (UserKicked != null) { UserKicked(messageInfo.User, messageInfo.Parameters[0], messageInfo.Parameters[1]); } if (Info.AutoRejoinOnKick) { JoinChannel(messageInfo.Parameters[0]); } break; case "311": //:sendak.freenode.net 311 Jaex ShareX ~ShareX unaffiliated/sharex * :realname case "319": //:sendak.freenode.net 319 Jaex ShareX :@#ShareX @#ShareX_Test case "312": //:sendak.freenode.net 312 Jaex ShareX sendak.freenode.net :Vilnius, Lithuania, EU case "671": //:sendak.freenode.net 671 Jaex ShareX :is using a secure connection case "317": //:sendak.freenode.net 317 Jaex ShareX 39110 1440201914 :seconds idle, signon time case "330": //:sendak.freenode.net 330 Jaex ShareX ShareX :is logged in as case "318": //:sendak.freenode.net 318 Jaex ShareX :End of /WHOIS list. ParseWHOIS(messageInfo); break; case "396": //:sendak.freenode.net 396 Jaex unaffiliated/jaex :is now your hidden host (set by services.) if (Info.AutoJoinWaitIdentify) { AutoJoinChannels(); } break; case "ERROR": return(false); } return(true); }
private void IRC_Output(MessageInfo messageInfo) { WriteText($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {messageInfo.Content}", txtOutput); }