Beispiel #1
0
        private void HandleIrcCommand(string message)
        {
            var IMessage = new IRCMessage();
            IMessage.ServerId = _serverid;
            IMessage.ServerName = _servername;
            string[] IrcCommand = message.Split(SchumixBase.Space);
            IrcCommand[0] = IrcCommand[0].Remove(0, 1, SchumixBase.Colon);
            IMessage.Hostmask = IrcCommand[0];

            if(IrcCommand.Length > 2)
                IMessage.Channel = sUtilities.SqlEscape(IrcCommand[2]);

            string[] userdata = IMessage.Hostmask.Split('!');
            IMessage.Nick = userdata[0];
            IMessage.SqlEscapeNick = sUtilities.SqlEscape(userdata[0]);

            if(userdata.Length > 1)
            {
                string[] hostdata = userdata[1].Split('@');
                IMessage.User = hostdata[0];
                IMessage.Host = hostdata[1];
            }

            string opcode = IrcCommand[1];
            IMessage.Info = IrcCommand;
            IMessage.Args = IrcCommand.SplitToString(3, SchumixBase.Space);
            IMessage.Args = IMessage.Args.Remove(0, 1, SchumixBase.Colon);
            IMessage.SetMessageType();

            if(IrcMethodMap.ContainsKey(opcode))
            {
                IrcMethodMap[opcode].Method.Invoke(IMessage);
                return;
            }
            else
            {
                if(IrcCommand[0] == "PING")
                {
                    sSender.Pong(IrcCommand[1].Remove(0, 1, SchumixBase.Colon));
                    return;
                }
                else if(IrcCommand[0] == "ERROR")
                {
                    NetworkQuit = true;
                    return;
                }
                else
                {
                    if(ConsoleLog.CLog)
                        Log.Notice("HandleIrcCommand", sLConsole.GetString("Received unhandled opcode: {0}"), opcode);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        ///     Ha a ConsoleLog be van kapcsolva, akkor
        ///     kiírja a console-ra az IRC szerverről fogadott információkat.
        /// </summary>
        protected void HandleNotice(IRCMessage sIRCMessage)
        {
            if(sIgnoreNickName.IsIgnore(sIRCMessage.Nick))
                return;

            sIRCMessage.MessageType = MessageType.Notice;

            if(ConsoleLog.CLog)
            {
                Log.SetForegroundColor(ConsoleColor.Red);

                if(sIRCMessage.Nick.IsServ())
                    Log.Write(sLConsole.GetString("[SERVER] "));
                else
                    Log.Write("[{0}] ", sIRCMessage.Nick);

                Log.SetForegroundColor(ConsoleColor.Yellow);
                Log.Write("{0}\n", sIRCMessage.Args);
                Log.LogInFile("{0}{1}", sIRCMessage.Nick.IsServ() ? sLConsole.GetString("[SERVER] ") : string.Format("[{0}] ", sIRCMessage.Nick), sIRCMessage.Args);
                Log.SetForegroundColor(ConsoleColor.Gray);
            }

            if(sIRCMessage.Nick.IsServ(Serv.NickServ))
            {
                if(sIRCMessage.Args.Contains("Password incorrect."))
                {
                    sMyNickInfo.ChangeIdentifyStatus(true);
                    Log.Error("NickServ", sLConsole.GetString("Bad identify password!"));
                    ConnectAllChannel();
                }
                else if(sIRCMessage.Args.Contains("You are already identified."))
                    Log.Warning("NickServ", sLConsole.GetString("Already identified!"));
                else if(sIRCMessage.Args.Contains("Password accepted - you are now recognized."))
                {
                    sMyNickInfo.ChangeIdentifyStatus(true);
                    Log.Success("NickServ", sLConsole.GetString("Identify password accepted."));
                }

                var registered = new Regex("Nick (.+) isn't registered.");

                if(sIRCMessage.Args.Contains("Your nick isn't registered.") || (!sMyNickInfo.IsIdentify && registered.IsMatch(sIRCMessage.Args)))
                {
                    Log.Warning("NickServ", sLConsole.GetString("Your nick isn't registered!"));
                    ChannelPrivmsg = sMyNickInfo.NickStorage;
                    sMyNickInfo.ChangeIdentifyStatus(true);
                    ConnectAllChannel();
                }

                if(IsOnline)
                {
                    sIRCMessage.SetMessageType();

                    if(sIRCMessage.Args.Contains("Is online from:") || sIRCMessage.Args.Contains("is currently online."))
                    {
                        sIRCMessage.Channel = OnlinePrivmsg;
                        sSendMessage.SendChatMessage(sIRCMessage, sLConsole.MessageHandler("Text11", sLManager.GetChannelLocalization(sIRCMessage.Channel, sIRCMessage.ServerName)));
                        IsOnline = false;
                    }
                    else if(sIRCMessage.Args.Contains("isn't registered."))
                    {
                        sIRCMessage.Channel = OnlinePrivmsg;
                        sSendMessage.SendChatMessage(sIRCMessage, sLConsole.MessageHandler("Text12", sLManager.GetChannelLocalization(sIRCMessage.Channel, sIRCMessage.ServerName)));
                        IsOnline = false;
                    }
                    else if(sIRCMessage.Args.Contains("Last seen time:") || sIRCMessage.Args.Contains("Last seen:"))
                    {
                        sIRCMessage.Channel = OnlinePrivmsg;
                        sSendMessage.SendChatMessage(sIRCMessage, sLConsole.MessageHandler("Text13", sLManager.GetChannelLocalization(sIRCMessage.Channel, sIRCMessage.ServerName)), sIRCMessage.Args.Contains("Last seen time:") ? sIRCMessage.Args.Remove(0, "Last seen time: ".Length, "Last seen time: ") : sIRCMessage.Args.Remove(0, "Last seen: ".Length, "Last seen: "));
                        IsOnline = false;
                    }

                    sIRCMessage.MessageType = MessageType.Notice;
                }
            }

            if(sIRCMessage.Nick.IsServ(Serv.HostServ))
            {
                if(sIRCMessage.Args.Contains("You need to register before a vhost can be assigned to you."))
                {
                    Log.Warning("HostServ", sLConsole.GetString("Nick isnt registered, so the vhost still off!"));
                    ConnectAllChannel();
                }
            }

            if(sIRCMessage.Nick.IsServ(Serv.HostServ) && IRCConfig.List[sIRCMessage.ServerName].UseHostServ)
            {
                if(sIRCMessage.Args.Contains("Your vhost of") && !sMyNickInfo.IsVhost)
                {
                    ChannelPrivmsg = sMyNickInfo.NickStorage;
                    ConnectAllChannel();
                }
            }

            sIRCMessage.Channel = sIRCMessage.Nick; // Nem 100% hogy így tökéletese a védelem.
            HandleCommand(sIRCMessage);
        }