/// <summary> /// Disconnects with specified reason. /// </summary> /// <param name="reason">The reason.</param> public void Disconnect(string reason = "") { if (!string.IsNullOrEmpty(reason)) { Raw(IrcCommands.Quit(reason)); } else { Raw(IrcCommands.Quit(Global.DefaultQuit)); } }
public static void TreatCommand(string message, TwitchBot bot) { if (IsCommand(message)) { //Cette condition servira à différencier les votes et les commandes, les deux commençant par '!' if (startVote) { IsVote(message, bot); } string commande = AssignMessage(message); /** * /!\ Méthodes importantes : * - Op() : Permet de passer une utilisateur modérateur sur une chaîne donnée * - Deop() : Supprime les droits de modération à un utilisateur sur une chaîne donnée * */ switch (commande) { case "modo": string user = message.Remove(0, 6); IrcCommands commandeModo = new IrcCommands(); commandeModo.Op(bot.getChannel(), user); bot.SendChanMessage(user + " est devenu modérateur !"); break; case "unmodo": String modo = message.Remove(0, 8); IrcCommands supprimeModo = new IrcCommands(); supprimeModo.Deop(bot.getChannel(), modo); bot.SendChanMessage(modo + " n'est plus modérateur !"); break; case "vote": startVote = true; vote = new VoteFunctionality(); vote.StartVote(message.Remove(0, 6), bot); break; case "endvote": vote.endVote(bot); break; case "Unknown": break; } } }
/// <summary> /// Disconnects with specified reason. /// </summary> /// <param name="reason">The reason.</param> internal void Disconnect(string reason = "") { foreach (Channel c in Channels) { ChannelBuffer.Push(new ChannelData( ) { Channel = c.Name, Key = c.GetKey( ) }); } settings.Save(this); if (!string.IsNullOrEmpty(reason)) { Raw(IrcCommands.Quit(reason)); } else { Raw(IrcCommands.Quit(Global.DefaultQuit)); } }
// Strip code from this file and move back to Irc.cs public void DisplayChannelJoin(User from, string target, string message) { userlist.Add(from); IrcReply.FormatMessage(string.Format("{0} {1}@{2} has joined {3}", from.Nick, from.Username, from.Host, this.channel), ConsoleColor.Cyan); parent.Raw(IrcCommands.Notice(from.Nick, string.Format("Welcome to {0}, {1}! Enjoy your stay! :3", this.channel, from.Nick))); }
public void Join( ) { parent.Raw(IrcCommands.Join(channel, key)); }
public void SendMessage(string message) { parent.Raw(IrcCommands.Privmsg(channel, message)); }
public void SendNotice(string message) { parent.Raw(IrcCommands.Notice(channel, message)); }
public void Part(string reason) { parent.Raw(IrcCommands.Part(channel, reason)); }
public void SendAction(string message) { parent.Raw(IrcCommands.Action(channel, message)); }
public void Kick(string nick, string reason) { parent.Raw(IrcCommands.Kick(channel, nick, reason)); }
public void Mode(string Modes) { parent.Raw(IrcCommands.Mode(channel, Modes)); }
public void SendToChannel(string to, string message) { this.parent.Writer.SendMessage(IrcCommands.Privmsg(to, message)); }
/// <summary> /// Listen on an infinite loop /// </summary> public void Listen( ) { this.worker = new Thread(new ThreadStart(delegate { this.writer.SendMessage(IrcCommands.Pass(_srvPass)); this.writer.SendMessage(IrcCommands.Nick(nick)); this.writer.SendMessage(IrcCommands.User(username, 8, realname)); OnPrivateMessage += Irc_OnPrivateMessage; OnPrivateNotice += Irc_OnPrivateNotice; OnPrivateAction += Irc_OnPrivateAction; OnChannelJoin += Irc_OnChannelJoin; OnChannelKick += Irc_OnChannelKick; OnChannelMode += Irc_OnChannelMode; OnChannelMode += Irc_OnChannelMode; OnChannelPart += Irc_OnChannelPart; OnChannelUserList += Irc_OnChannelUserList; OnNickChange += Irc_OnNickChange; OnPublicAction += Irc_OnPublicAction; OnPublicMessage += Irc_OnPublicMessage; OnPublicNotice += Irc_OnPublicNotice; OnSendToChannel += Irc_OnSendToChannel; OnServerQuit += Irc_OnServerQuit; OnTopicChange += Irc_OnTopicChange; while (this.client.Connected) { try { string s = string.Empty; while ((s = this.reader.ReadLine( )) != null) { this.message = s; string prefix, command; string[] parameters; this.messagearray = this.message.Split(' '); if (this.messagearray[0].StartsWith(":")) { this.messagearray[0] = this.messagearray[0].Remove(0, 1); } IrcCommands.ParseReply(this.message, out prefix, out command, out parameters); IrcMessage message = new IrcMessage(prefix, command, parameters); if (string.IsNullOrEmpty(this.server)) { this.server = this.messagearray[0]; } dbwl("Server Reply: {0}", s); string paramsmsg = string.Join(" ", parameters.NonZero( )); string[] parr = paramsmsg.Split(' '); User u = new User(); Channel c = null; try { c = ((parameters[0].StartsWith("#")) ? GetChannel(parameters[0]) : null); if ((!string.IsNullOrEmpty(u.name))) { dbwl("User Reply: {0}", u.name); } if (c != null) { dbwl("Channel Reply: {0}", c.Name); } } catch (Exception) { } if (prefix == this.server) { if (Enum.TryParse <ReplyCode> (command, out code)) { dbwl("Prefix is {0}, Command is {1}, Code is {2}", prefix, command, code); switch (code) { case ReplyCode.RPL_TOPIC: Console.WriteLine( "Topic for {0}: {1}", parr[0], paramsmsg.Substring(parr[0].Length + 2)); break; case ( ReplyCode )333: IrcReply.FormatMessage( string.Format("Topic in {0} set by {1} on {2:ddd MMM dd, yyyy HH:mm:ss}", parr[0], parr[1], Global.UnixTimeStampToDateTime(double.Parse(parr[2]))), ConsoleColor.Gray); break; // Topic Who time? case ReplyCode.RPL_NAMESREPLY: IrcReply.FormatMessage(message, ConsoleColor.DarkMagenta); break; case ReplyCode.RPL_ENDOFNAMES: IrcReply.FormatMessage(message, ConsoleColor.DarkCyan); break; case ReplyCode.RPL_MOTD: if (OnMotd != null) { string ms = string.Join(" ", messagearray, 4, messagearray.Length - 4); if (ms.Length > 1) { motd += string.Format("{0}\r\n", ms); } OnMotd(ms); } break; case ReplyCode.RPL_MOTDSTART: motd = string.Empty; break; case ReplyCode.RPL_ENDOFMOTD: hasMOTD = true; // NOT USED BY TWITCH [5/18/2014 Blizzardo1] // Raw ( IrcCommands.Mode ( nick, "+B" ) ); // Raw ( IrcCommands.Umode ( "+B" ) ); // Raw ( IrcCommands.Umode2 ( "+B" ) ); // SendMessage ( "NickServ", string.Format("IDENTIFY {0}") ); // Add nickserv if (!string.IsNullOrEmpty(startchan)) { c = new Channel(this, startchan, startkey); c.Join( ); Channels.Add(c); } break; case ReplyCode.RPL_WHOISUSER: Format(this.message, ConsoleColor.Magenta); break; case ReplyCode.RPL_ENDOFWHOIS: Format(this.message, ConsoleColor.DarkMagenta); break; } } else { Console.WriteLine(this.message); } } else if (command == "PING") { dbg.WriteLine(message.ToString( )); string send = (IrcCommands.Pong(message.Parameters[0])); dbg.WriteLine(send); writer.SendMessage(send); } else { dbwl("Command is {0}, Parameters are {1}", command, paramsmsg); switch (command) { case "PASS": if (string.IsNullOrEmpty(_srvPass)) { Format("No Server Password! Disconnecting prematurely", ConsoleColor.Red); Disconnect(string.Format("Failed to login to {0} with no Password!", server)); } else { Raw("PASS", _srvPass); } break; // :Prefix Command :Params // :[email protected] JOIN :#Channel case "JOIN": if (OnChannelJoin != null) { OnChannelJoin(u, c, "", paramsmsg); } break; case "PART": if (OnChannelPart != null) { OnChannelPart(u, c, "", paramsmsg); } break; case "MODE": if (OnChannelMode != null) { OnChannelMode(u, c, "", paramsmsg); } break; case "KICK": if (OnChannelKick != null) { OnChannelKick(u, c, "", paramsmsg); } break; case "NICK": if (OnNickChange != null) { OnNickChange(u, paramsmsg); } break; case "QUIT": if (OnServerQuit != null) { OnServerQuit(u, c, "", paramsmsg); } break; case "PRIVMSG": if (parameters[0].StartsWith("#")) { //Lucifer.GeekShed.net PRIVMSG #chris :ACTION peeks in if (parameters[1].StartsWith( string.Format("{0}ACTION", Constants.CtcpChar)) && parameters.Last( ).EndsWith(Constants.CtcpChar.ToString( ))) { if (OnPublicAction != null) { OnPublicAction(u, c, c.Name, paramsmsg); } } else if (OnPublicMessage != null) { OnPublicMessage(u, c, c.Name, paramsmsg); } } else if (OnPrivateMessage != null) { OnPrivateMessage(u, c, parameters[0], paramsmsg); } break; case "NOTICE": /* Define later * if ( parameters[ 0 ].StartsWith ( "#" ) ) * { * if ( OnPublicNotice != null ) * OnPublicNotice ( u, c, c.Name, paramsmsg ); * } * else * if ( OnPrivateNotice != null ) * { * if ( parameters.Length > 0 ) * OnPrivateNotice ( u != null ? u : new User ( "null!null@null" ), * c, * parameters[ 0 ], * paramsmsg ); * else * OnPrivateNotice ( u != null ? u : new User ( "null!null@null" ), * c, * this.nick, * "Notice returned 0" ); * }*/ break; } } } } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("{0}", ex); Console.ResetColor( ); } } })) { Name = string.Format("{0}_thread", this.server), IsBackground = false }; this.worker.Start( ); }
public void SendNotice(string target, string message) { Raw(IrcCommands.Notice(target, message)); }
/// <summary> /// Listen on an infinite loop /// </summary> public void Listen( ) { this.worker = new Thread(new ThreadStart(delegate { this.writer.SendMessage(IrcCommands.Nick(nick)); this.writer.SendMessage(IrcCommands.User(username, 8, realname)); OnPrivateMessage += Irc_OnPrivateMessage; OnPrivateNotice += Irc_OnPrivateNotice; OnPrivateAction += Irc_OnPrivateAction; OnChannelJoin += Irc_OnChannelJoin; OnChannelKick += Irc_OnChannelKick; OnChannelMode += Irc_OnChannelMode; OnChannelMode += Irc_OnChannelMode; OnChannelPart += Irc_OnChannelPart; OnChannelUserList += Irc_OnChannelUserList; OnNickChange += Irc_OnNickChange; OnPublicAction += Irc_OnPublicAction; OnPublicMessage += Irc_OnPublicMessage; OnPublicNotice += Irc_OnPublicNotice; OnSendToChannel += Irc_OnSendToChannel; OnServerQuit += Irc_OnServerQuit; OnTopicChange += Irc_OnTopicChange; while (this.client.Connected) { try { string s = string.Empty; while ((s = this.reader.ReadLine( )) != null) { this.message = s; string prefix, command; string[] parameters; this.messagearray = this.message.Split(' '); if (this.messagearray[0].StartsWith(":")) { this.messagearray[0] = this.messagearray[0].Remove(0, 1); } IrcCommands.ParseReply(this.message, out prefix, out command, out parameters); IrcMessage message = new IrcMessage(prefix, command, parameters); if (string.IsNullOrEmpty(this.server)) { this.server = this.messagearray[0]; } dbwl("Server Reply: {0}", s); /* * at System.String.Join(String separator, String[] value, Int32 startIndex, Int32 count) * at BlizzetaZero.Kernel.Extensions.NonZero(String[] arr) in g:\BreakerDev Suite 2012\Blizzeta Zero rev2\Blizzeta Zero rev2\Kernel\Extensions.cs:line 34 * at BlizzetaZero.Kernel.Irc.<Listen>b__3() in g:\BreakerDev Suite 2012\Blizzeta Zero rev2\Blizzeta Zero rev2\Kernel\Irc.cs:line 277 */ string paramsmsg = string.Join(" ", parameters.NonZero( )); string[] parr = paramsmsg.Split(' '); User u = null; Channel c = null; try { u = ((!string.IsNullOrEmpty(prefix)) ? new User(prefix) : null); c = ((parameters[0].StartsWith("#")) ? GetChannel(parameters[0]) : null); if (u != null) { dbwl("User Reply: {0}", u.Nick); } if (c != null) { dbwl("Channel Reply: {0}", c.Name); } } catch (Exception) { } if (prefix == this.server) { if (Enum.TryParse <ReplyCode> (command, out code)) { dbwl("Prefix is {0}, Command is {1}, Code is {2}", prefix, command, code); switch (code) { case ReplyCode.RPL_TOPIC: Console.WriteLine( "Topic for {0}: {1}", parr[0], paramsmsg.Substring(parr[0].Length + 2)); break; case ( ReplyCode )333: IrcReply.FormatMessage( string.Format("Topic in {0} set by {1} on {2:ddd MMM dd, yyyy HH:mm:ss}", parr[0], parr[1], Global.UnixTimeStampToDateTime(double.Parse(parr[2]))), ConsoleColor.Gray); break; // Topic Who time? case ReplyCode.RPL_NAMESREPLY: IrcReply.FormatMessage(message, ConsoleColor.DarkMagenta); break; case ReplyCode.RPL_ENDOFNAMES: IrcReply.FormatMessage(message, ConsoleColor.DarkCyan); break; case ReplyCode.RPL_MOTD: if (OnMotd != null) { string ms = string.Join(" ", messagearray, 4, messagearray.Length - 4); if (ms.Length > 1) { motd += string.Format("{0}\r\n", ms); } OnMotd(ms); } break; case ReplyCode.RPL_MOTDSTART: motd = string.Empty; break; case ReplyCode.RPL_ENDOFMOTD: hasMOTD = true; Raw(IrcCommands.Mode(nick, "+B")); Raw(IrcCommands.Umode("+B")); Raw(IrcCommands.Umode2("+B")); if (!string.IsNullOrEmpty(startchan)) { c = new Channel(this, startchan, startkey); c.Join( ); Channels.Add(c); } break; case ReplyCode.RPL_WHOISUSER: Format(this.message, ConsoleColor.Magenta); break; case ReplyCode.RPL_ENDOFWHOIS: Format(this.message, ConsoleColor.DarkMagenta); break; } } else { Console.WriteLine(this.message); } } else if (command == "PING") { dbg.WriteLine(message.ToString( )); string send = (IrcCommands.Pong(message.Parameters[0])); dbg.WriteLine(send); writer.SendMessage(send); } else { dbwl("Command is {0}, Parameters are {1}", command, paramsmsg); switch (command) { // :Prefix Command :Params // :[email protected] JOIN :#Channel case "JOIN": if (OnChannelJoin != null) { OnChannelJoin(u, c, "", paramsmsg); } break; case "PART": if (OnChannelPart != null) { OnChannelPart(u, c, "", paramsmsg); } break; case "MODE": if (OnChannelMode != null) { OnChannelMode(u, c, "", paramsmsg); } break; case "KICK": if (OnChannelKick != null) { OnChannelKick(u, c, "", paramsmsg); } break; case "NICK": if (OnNickChange != null) { OnNickChange(u, paramsmsg); } break; case "QUIT": if (OnServerQuit != null) { OnServerQuit(u, c, "", paramsmsg); } break; case "PRIVMSG": if (parameters[0].StartsWith("#")) { //Lucifer.GeekShed.net PRIVMSG #chris :ACTION peeks in if (parameters[1].StartsWith( string.Format("{0}ACTION", Constants.CtcpChar)) && parameters.Last( ).EndsWith(Constants.CtcpChar.ToString( ))) { if (OnPublicAction != null) { OnPublicAction(u, c.Name, paramsmsg); } } else if (OnPublicMessage != null) { OnPublicMessage(u, c.Name, paramsmsg); } } else if (OnPrivateMessage != null) { OnPrivateMessage(u, parameters[0], paramsmsg); } break; case "NOTICE": if (parameters[0].StartsWith("#")) { if (OnPublicNotice != null) { OnPublicNotice(u, c.Name, paramsmsg); } } else if (OnPrivateNotice != null) { if (parameters.Length > 0) { OnPrivateNotice(u != null ? u : new User("null!null@null"), parameters[0], paramsmsg); } else { OnPrivateNotice(u != null ? u : new User("null!null@null"), this.nick, "Notice returned 0"); } } break; } } } } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("{0}", ex); Console.ResetColor( ); } } })) { Name = string.Format("{0}_thread", this.server), IsBackground = false }; this.worker.Start( ); }
public void SendMessage(string target, string message) { Raw(IrcCommands.Privmsg(target, message)); }
public void ChangeNick(string newnick) { Raw(IrcCommands.Nick(newnick)); }
/// <summary> /// Starts the receiver task. /// </summary> public void StartReceivingChat() { _tcpClient = new TcpClient(_newIp, _NewPort); int timeout = 0; while (!_tcpClient.Connected) { Thread.Sleep(1); if (timeout >= _timeOut) { OnDebugMessage?.Invoke(this, new IrcDebugMessageEventArgs("TIMEOUT, COULD NOT CONNECT TO TCP SOCKET", "IRC SETUP")); } timeout++; } try { if (!_enableSSL) { _networkStream = _tcpClient.GetStream(); Thread.Sleep(500); _streamReader = new StreamReader(_networkStream); _streamWriter = new StreamWriter(_networkStream); _ircCommands = new IrcCommands(_networkStream); } else { _networkSStream = this._acceptAllCertificates ? new SslStream(_tcpClient.GetStream(), true, new RemoteCertificateValidationCallback(AcceptAllCertificate)) : new SslStream(_tcpClient.GetStream(), true, new RemoteCertificateValidationCallback(ValidateServerCertificate)); _networkSStream.AuthenticateAsClient(_newIp); _streamReader = new StreamReader(_networkSStream); _streamWriter = new StreamWriter(_networkSStream); _ircCommands = new IrcCommands(_networkSStream); } _isConnectionEstablised = true; OnDebugMessage?.Invoke(this, new IrcDebugMessageEventArgs("CONNECTED TO TCP SOCKET", "IRC SETUP")); if (_newPassword.Length > 0) { if (!_ircCommands.SetPassWord(_newPassword)) { OnDebugMessage?.Invoke(this, new IrcDebugMessageEventArgs(_ircCommands.GetErrorMessage(), "IRC SETUP ERROR")); _isConnectionEstablised = false; } } Debug.WriteLine("Joining channels: " + _NewChannelss); if (!_ircCommands.JoinNetwork(_NewUsername, _NewChannelss)) { OnDebugMessage?.Invoke(this, new IrcDebugMessageEventArgs(_ircCommands.GetErrorMessage(), "IRC SETUP ERROR")); _isConnectionEstablised = false; } } catch (Exception ex) { OnDebugMessage?.Invoke(this, new IrcDebugMessageEventArgs(ex.ToString(), "IRC SETUP")); } if (_isConnectionEstablised) { OnDebugMessage?.Invoke(this, new IrcDebugMessageEventArgs("CONNECTED TO IRC SERVER", "IRC SETUP")); _stopTask = false; Task.Run(() => ReceiveChat()); } }