예제 #1
0
        public override async Task <bool> HandleLine(IrcMessage parsedLine)
        {
            var pong = parsedLine.OriginalMessage.Replace("PING", "PONG");

            Irc.WriteLine(pong);
            return(true);
        }
예제 #2
0
파일: Log.cs 프로젝트: MrTiggr/Murphy
 void Bot_OnMessage(Network n, Irc.IrcEventArgs e)
 {
     if (IsMatch("^log \\?$", e.Data.Message)) {
         AnswerWithNotice(n, e, FormatBold("Use of Log plugin:"));
         AnswerWithNotice(n, e, "No remote commands available. Every IRC command gets logged in its raw form to a file in the \\Data subdirectory.");
     }
 }
예제 #3
0
파일: DccSend.cs 프로젝트: hnjm/IrcBots
        internal bool TryResume(CtcpEventArgs e)
        {
            if (User == e.Data.Nick)
            {
                if ((e.Data.MessageArray.Length > 4) && (_Filename == e.Data.MessageArray[2].Trim(new char[] { '\"' })))
                {
                    long offset = 0;
                    long.TryParse(FilterMarker(e.Data.MessageArray[4]), out offset);
                    if (_File.CanSeek)
                    {
                        if (e.Data.MessageArray.Length > 5)
                        {
                            Irc.SendMessage(SendType.CtcpRequest, e.Data.Nick, "DCC ACCEPT " + e.Data.MessageArray[2] + " " + e.Data.MessageArray[3] + " " + e.Data.MessageArray[4] + " " + FilterMarker(e.Data.MessageArray[5]));
                        }
                        else
                        {
                            Irc.SendMessage(SendType.CtcpRequest, e.Data.Nick, "DCC ACCEPT " + e.Data.MessageArray[2] + " " + e.Data.MessageArray[3] + " " + FilterMarker(e.Data.MessageArray[4]));
                        }

                        _File.Seek(offset, SeekOrigin.Begin);
                        _SentBytes = offset;
                        return(true);
                    }
                    else
                    {
                        Irc.SendMessage(SendType.CtcpRequest, e.Data.Nick, "ERRMSG DCC File not seekable");
                    }
                }
            }
            return(false);
        }
예제 #4
0
        private void ShowToast(string title, string message)
        {
            var toast         = Irc.CreateBasicToast(title, message);
            var toastNotifier = ToastNotificationManager.CreateToastNotifier();

            toastNotifier.Show(toast);
        }
예제 #5
0
 void Start()
 {
     ircProtocol = GetComponent<Irc>();
     ircProtocol.controller = this;
     ircProtocol.enabled = true;
     _IrcGui.Show(this);
 }
예제 #6
0
파일: Log.cs 프로젝트: MrTiggr/Murphy
 void Bot_OnRawMessage(Network network, Irc.IrcEventArgs e)
 {
     DateTime d = DateTime.Now;
     System.IO.StreamWriter writer = new System.IO.StreamWriter("Logs\\" + d.Year + "." + d.Month + "." + d.Day + ".log", true);
     writer.WriteLine(((TimeSpan)(DateTime.Now - new DateTime(1970, 1, 1))).TotalMilliseconds.ToString() + " " + e.Data.RawMessage);
     writer.Close();
 }
예제 #7
0
 void Start()
 {
     ircProtocol            = GetComponent <Irc>();
     ircProtocol.controller = this;
     ircProtocol.enabled    = true;
     _IrcGui.Show(this);
 }
예제 #8
0
        public CommandManager(Irc irc)
        {
            this.Server = irc;
            RegisterCommand("/help", new HelpCommand());

            RegisterCommand("/me", new MeCommand());
            RegisterCommand("/join", new JoinCommand());
            RegisterCommand("/part", new PartCommand());
            RegisterCommand("/quit", new QuitCommand());
            RegisterCommand("/query", new QueryCommand());
            RegisterCommand("/nick", new NickCommand());
            RegisterCommand("/msg", new MsgCommand());
            RegisterCommand("/topic", new TopicCommand());
            RegisterCommand("/whois", new WhoisCommand());
            RegisterCommand("/list", new ListCommand());

            RegisterCommand("/mode", new ModeCommand());

            RegisterCommand("/op", new OpCommand());
            RegisterCommand("/deop", new OpCommand());
            RegisterCommand("/voice", new VoiceCommand());
            RegisterCommand("/devoice", new VoiceCommand());
            RegisterCommand("/mute", new QuietCommand());
            RegisterCommand("/unmute", new QuietCommand());

            RegisterCommand("/kick", new KickCommand());
            RegisterCommand("/ban", new BanCommand());

            RegisterCommand("/raw", new RawCommand());
        }
예제 #9
0
 public void Start()
 {
     Irc.Connect(Address, Port);
     Irc.Login("FPGitBot", "FPGitBot", 0, "FPGitBot");
     Irc.RfcJoin(Channel);
     new Thread(o => ((IrcClient)o).Listen()).Start(Irc);
 }
예제 #10
0
        public override async Task <bool> HandleLine(IrcMessage parsedLine)
        {
            // handle messages to this irc client
            var destination = parsedLine.CommandMessage.Parameters[0];
            var reciever    = parsedLine.CommandMessage.Parameters[1];
            var content     = parsedLine.TrailMessage.TrailingContent;

            if (!Irc.ChannelList.Contains(destination))
            {
                await Irc.AddChannel(destination);
            }

            var msg = new Message();

            msg.Type = MessageType.Info;

            if (reciever == Irc.Server.Username)
            {
                msg.User = parsedLine.PrefixMessage.Nickname;
                msg.Text = "kicked you from the channel: " + content;
            }
            else
            {
                msg.User = parsedLine.PrefixMessage.Nickname;
                msg.Text = string.Format("kicked {0} from the channel: {1}", reciever, content);
            }

            Irc.AddMessage(destination, msg);

            return(true);
        }
예제 #11
0
        private void Update(object sender, EventArgs e)
        {
            foreach (var name in _feeds.Keys)
            {
                var feed = _feeds[name];
                try
                {
                    foreach (var item in feed.CatchUp())
                    {
                        string output = string.Format("[{0}] {1}", name, item.Title.StripHtml());
                        foreach (var chan in Channels.CurrentChannels)
                        {
                            foreach (var s in output.WordBreak(LineLength))
                            {
                                Irc.PrivateMessage(new IrcTarget(chan), s);
                            }
                        }

                        while (_allItems.Count >= MaxItems)
                        {
                            _allItems.RemoveFirst();
                        }
                        _allItems.AddLast(item);
                    }
                }
                catch (Exception ex)
                {
                    this.WriteTraceMessage(string.Format("Error polling RSS feed \"{0}\":\n{1}", name, ex.ToString()));
                }
            }
        }
예제 #12
0
        public override void RunCommand(string channel, string[] args)
        {
            if ((args.Length < 3) || (args.Length > 2 && !args[1].StartsWith("#")))
            {
                ClientMessage(channel, "Command too short!");
                return;
            }

            var modeLine = "MODE ";

            if (args[1].StartsWith("#"))
            {
                modeLine += args[1] + " " + args[2];

                if (args.Length == 4)
                {
                    modeLine += " " + args[3];
                }
            }
            else
            {
                modeLine += channel + " " + args[1];

                if (args.Length == 3)
                {
                    modeLine += " " + args[2];
                }
            }

            Irc.WriteLine(modeLine);
        }
예제 #13
0
    public Irc GetResult()
    {
        Irc irc = new Irc();

        string[] result = input.Split();
        for (int i = 0; i < result.Length; i++)
        {
            string[] FieldValue = result[i].Split('=');
            switch (FieldValue[0])
            {
            case "MAXTARGETS":
                irc.maxTargets = Convert.ToInt32(FieldValue[1]);
                break;

            case "WALLCHOPS":
                irc.wallChops = true;
                break;

            case "CHANTYPES":
                irc.chanTypes = FieldValue[1];
                break;
            }
        }
        return(irc);
    }
예제 #14
0
        public Main()
        {
            _game = new GameLoop(this);
            _irc  = new Irc(botName, botOauth, new string[] { chatMain, chatMods }, new DragonChat(this));

            _game.Run();
        }
예제 #15
0
        internal void HandleCommand(Irc irc, string text)
        {
            string[] args = text.Split(' ');
            if (args[0].StartsWith("//") || !args[0].StartsWith("/"))
            {
                if (args[0].StartsWith("//"))
                {
                    args[0] = args[0].Replace("//", "/");
                }
                irc.SendMessage(String.Join(" ", args));
            }
            else if (args[0].StartsWith("/"))
            {
                var cmd = CommandList.Where(command => command.StartsWith(args[0])).ToList();

                if (cmd.Count > 1)
                {
                    irc.ClientMessage("Multiple matches found: " + args[0]);
                    irc.ClientMessage(String.Join(", ", cmd));
                    irc.ClientMessage("Type /help for a list of commands.");

                    return;
                }
                else if (cmd.Count == 1)
                {
                    ((Command)CommandTable[cmd[0]])(irc, args);
                }
                else
                {
                    irc.ClientMessage("Unknown Command: " + text);
                    irc.ClientMessage("Type /help for a list of commands.");
                }
            }
        }
예제 #16
0
        public float TimeSpent(CommunicationMediums messageType, bool send, byte randomLevelValue)
        {
            switch (messageType)
            {
            case CommunicationMediums.Irc:
                return(send ? Irc.CostToSend(randomLevelValue) : Irc.CostToReceive(randomLevelValue));

            case CommunicationMediums.Email:
                return(send ? Email.CostToSend(randomLevelValue) : Email.CostToReceive(randomLevelValue));

            case CommunicationMediums.Phone:
                return(send ? Phone.CostToSend(randomLevelValue) : Phone.CostToReceive(randomLevelValue));

            case CommunicationMediums.Meeting:
                return(send ? Meeting.CostToSend(randomLevelValue) : Meeting.CostToReceive(randomLevelValue));

            case CommunicationMediums.FaceToFace:
                return(send ? FaceToFace.CostToSend(randomLevelValue) : FaceToFace.CostToReceive(randomLevelValue));

            case CommunicationMediums.ViaAPlatform:
                return(send
                        ? Platform.CostToSend(randomLevelValue)
                        : Platform.CostToReceive(randomLevelValue));

            case CommunicationMediums.System:
                return(0);

            default:
                throw new NotImplementedException();
            }
        }
예제 #17
0
        /// <summary>
        /// Accept an incoming Chatrequest, returns false if anything but a Connect happens
        /// </summary>
        /// <returns></returns>
        public bool AcceptRequest()
        {
            if (isConnected)
            {
                return(false);
            }

            try
            {
                if (RemoteEndPoint.Port == 0)
                {
                    DccServer = new TcpListener(new IPEndPoint(IPAddress.Any, 0));
                    DccServer.Start();
                    LocalEndPoint = (IPEndPoint)DccServer.LocalEndpoint;
                    Irc.SendMessage(SendType.CtcpRequest, User, "DCC CHAT chat " + HostToDccInt(ExternalIPAdress).ToString() + " " + LocalEndPoint.Port);
                }
                else
                {
                    Connection = new TcpClient();
                    Connection.Connect(RemoteEndPoint);
                    isConnected = true;
                }
                return(true);
            }
            catch (Exception)
            {
                isValid     = false;
                isConnected = false;
                return(false);
            }
        }
예제 #18
0
        void Bot_OnMessage(Network network, Irc.IrcEventArgs e)
        {
            if (IsMatch("^seen \\?$", e.Data.Message)) {
                AnswerWithNotice(network, e, FormatBold("Use of Seen plugin:"));
                AnswerWithNotice(network, e, FormatItalic("seen <nick>") + " - Displays information when the Bot last saw <nick>.");
            }
            else if (IsMatch("^seen (?<nick>.*)$", e.Data.Message)) {
                SeenInfo i = FindName(network.Name, Matches["nick"].ToString(), l);
                if (i == null)
                    Answer(network, e, "I never saw " + Matches["nick"].ToString() + " before.");
                else if (i.Ident == e.Data.Ident)
                    Answer(network, e, "Looking for yourself, eh?");
                else {
                    string hour = "hours";
                    string minute = "minutes";
                    TimeSpan t = (TimeSpan)(DateTime.Now - i.Date);
                    if (t.TotalHours == 1)
                        hour = "hour";
                    if (t.Minutes == 1)
                        minute = "minute";
                    Answer(network, e, "I saw " + Matches["nick"].ToString() + " " + Convert.ToInt16(t.TotalHours).ToString() + " " + hour + " and " + t.Minutes.ToString() + " " + minute + " ago, " + i.Text + ".");
                }
            }

            NewSeen(network.Name, e.Data.Nick, e.Data.Ident, "on " + e.Data.Channel + ", saying " + e.Data.Message);
        }
예제 #19
0
        public override async Task <bool> HandleLine(IrcMessage parsedLine)
        {
            if (Irc.ChannelList.ServerLog == null)
            {
                await Irc.AddChannel("Server");
            }

            if (parsedLine.PrefixMessage.IsUser && parsedLine.PrefixMessage.Nickname == Irc.Nickname)
            {
                Irc.Server.Username = parsedLine.TrailMessage.HasTrail ? parsedLine.TrailMessage.TrailingContent : Irc.Nickname;
            }
            else if (parsedLine.PrefixMessage.IsUser && parsedLine.TrailMessage.HasTrail)
            {
                var username = parsedLine.PrefixMessage.Nickname;
                foreach (var channel in Irc.ChannelList)
                {
                    var users = channel.Store;
                    if (users.HasUser(username))
                    {
                        var msg = new Message
                        {
                            Type = MessageType.JoinPart,
                            User = parsedLine.PrefixMessage.Nickname,
                            Text = string.Format("({0}) {1} {2}", parsedLine.PrefixMessage.Prefix, "changed nick to", parsedLine.TrailMessage.TrailingContent)
                        };
                        Irc.AddMessage(channel.Name, msg);

                        users.RemoveUser(username);
                        users.AddUser(parsedLine.TrailMessage.TrailingContent);
                    }
                }
            }
            return(true);
        }
예제 #20
0
        public override async Task <bool> HandleLine(IrcMessage parsedLine)
        {
            var channel = parsedLine.TrailMessage.TrailingContent;

            if (parsedLine.PrefixMessage.Nickname == Irc.Server.Username)
            {
                await Irc.AddChannel(channel);
            }

            if (parsedLine.CommandMessage.Parameters != null)
            {
                channel = parsedLine.CommandMessage.Parameters[0];
            }

            var msg = new Message
            {
                Type = MessageType.JoinPart,
                User = parsedLine.PrefixMessage.Nickname,
                Text = string.Format("({0}) {1}", parsedLine.PrefixMessage.Prefix, "joined the channel")
            };

            Irc.AddMessage(channel, msg);

            Irc.ChannelList[channel].Store.AddUser(parsedLine.PrefixMessage.Nickname);
            return(true);
        }
예제 #21
0
        internal void ModeCommandHandler(Irc irc, string[] args)
        {
            if ((args.Length < 3) || (args.Length > 2 && !args[1].StartsWith("#")))
            {
                irc.ClientMessage("Command too short!");
                return;
            }

            var modeLine = "MODE ";

            if (args[1].StartsWith("#"))
            {
                modeLine += args[1] + " " + args[2];

                if (args.Length == 4)
                {
                    modeLine += " " + args[3];
                }
            }
            else
            {
                modeLine += irc.currentChannel + " " + args[1];

                if (args.Length == 3)
                {
                    modeLine += " " + args[2];
                }
            }

            Debug.WriteLine(modeLine);

            irc.WriteLine(modeLine);
        }
예제 #22
0
        public override async Task <bool> HandleLine(IrcMessage parsedLine)
        {
            if (parsedLine.CommandMessage.Command == "353")
            {
                var channel = parsedLine.CommandMessage.Parameters[2];

                var list = parsedLine.TrailMessage.TrailingContent.Split(' ').ToList();
                if (!_namesTable.ContainsKey(channel))
                {
                    _namesTable.Add(channel, list);
                }
                else
                {
                    _namesTable[channel].AddRange(list);
                }
            }
            else if (parsedLine.CommandMessage.Command == "366")
            {
                var channel = parsedLine.CommandMessage.Parameters[1];

                if (!Irc.ChannelList.Contains(channel))
                {
                    await Irc.AddChannel(channel);
                }

                Irc.ChannelList[channel].Store.ReplaceUsers(_namesTable[channel]);

                _namesTable.Remove(channel);
            }
            return(true);
        }
예제 #23
0
 void Bot_OnMessage(Network n, Irc.IrcEventArgs e)
 {
     if (IsMatch("^autoop \\?$", e.Data.Message)) {
         AnswerWithNotice(n, e, FormatBold("Use of AutoOp plugin:"));
         AnswerWithNotice(n, e, "No remote commands available. All configuration has to be done manually in the Configuration.xml.");
     }
 }
예제 #24
0
        public override Task <bool> HandleLine(IrcMessage parsedLine)
        {
            var cmd = parsedLine.CommandMessage.Command;

            if (cmd == "375")
            {
                _currentMOTD = parsedLine.TrailMessage.TrailingContent + "\r\n";
            }

            if (cmd == "372")
            {
                _currentMOTD += parsedLine.TrailMessage.TrailingContent + "\r\n";
            }

            if (cmd == "376" || cmd == "422")
            {
                _currentMOTD += parsedLine.TrailMessage.TrailingContent;

                var msg = new Message
                {
                    Text = _currentMOTD,
                    Type = MessageType.MOTD
                };
                Irc.AddMessage("", msg);

                Irc.MOTD     = _currentMOTD;
                _currentMOTD = "";
            }

            return(Task.FromResult(true));
        }
예제 #25
0
        public HandlerManager(Irc irc)
        {
            this.Server             = irc;
            this.DefaultHandler     = new DefaultHandler();
            this.DefaultHandler.Irc = irc;

            // register the default handlers
            RegisterHandler("ING", new PingHandler());
            RegisterHandler("CAP", new CapHandler());
            RegisterHandler("NICK", new NickHandler());
            RegisterHandler("PRIVMSG", new PrivmsgHandler());
            RegisterHandler("NOTICE", new PrivmsgHandler()
            {
                Type = MessageType.Notice
            });
            RegisterHandler("JOIN", new JoinHandler());
            RegisterHandler("PART", new PartHandler());
            RegisterHandler("KICK", new KickHandler());
            RegisterHandler("QUIT", new QuitHandler());
            RegisterHandler("MODE", new ModeHandler());
            RegisterHandler("470", new ChannelForwardHandler());
            RegisterHandler("421", new UnknownCommandHandler());
            MultiRegisterHandler(_whoisCmds, new WhoisHandler());
            MultiRegisterHandler(_topicCmds, new TopicHandler());
            MultiRegisterHandler(_listCmds, new ListHandler());
            MultiRegisterHandler(_namesCmds, new NamesHandler());
            MultiRegisterHandler(_motdCmds, new MotdHandler());
            MultiRegisterHandler(_endMotd, new ServerJoinedHandler());
            MultiRegisterHandler(_cannotSend, new CannotSendHandler());
            MultiRegisterHandler(_nickErrors, new NickErrorHandler());
        }
예제 #26
0
        public override Task<bool> HandleLine(IrcMessage parsedLine)
        {
            var channel = parsedLine.TrailMessage.TrailingContent;
            if (parsedLine.PrefixMessage.Nickname == Irc.Server.Username)
            {
                Irc.RemoveChannel(channel);
            }
            else
            {
                if (parsedLine.CommandMessage.Parameters.Count > 0)
                {
                    channel = parsedLine.CommandMessage.Parameters[0];
                }

                var msg = new Message
                {
                    Type = MessageType.JoinPart,
                    User = parsedLine.PrefixMessage.Nickname,
                    Text = string.Format("({0}) {1}", parsedLine.PrefixMessage.Prefix, "left the channel")
                };

                Irc.AddMessage(channel, msg);

                Irc.ChannelList[channel].Store.RemoveUser(parsedLine.PrefixMessage.Nickname);
            }
            return Task.FromResult(true);
        }
예제 #27
0
 public void SendMsg(string msg)
 {
     if (!Irc.JoinedChannels.Contains(Channel))
     {
         Irc.RfcJoin(Channel);
     }
     Irc.SendMessage(SendType.Message, Channel, msg);
 }
예제 #28
0
파일: Test.cs 프로젝트: gloowa/mstest
 private void Start()
 {
     irc = new Irc();
     irc.controller = this;
     irc.enableLog = false;
     irc.ircNick = "MyNickName";
     irc.Start();
 }
예제 #29
0
        internal void NickCommandHandler(Irc irc, string[] args)
        {
            if (args.Length != 2)
            {
                return;
            }

            irc.Nickname = args[1];
        }
예제 #30
0
    public Irc GetResultByRegex()
    {
        Irc irc = new Irc();

        MatchMaxTargets(ref irc.maxTargets);
        MatchWallChops(ref irc.wallChops);
        MatchChanTypes(ref irc.chanTypes);
        return(irc);
    }
예제 #31
0
파일: Eightball.cs 프로젝트: MrTiggr/Murphy
 void Bot_OnMessage(Network n, Irc.IrcEventArgs e)
 {
     if (IsMatch("^Eightball \\?$", e.Data.Message)) {
         AnswerWithNotice(n, e, FormatBold("Use of Eightball plugin:"));
         AnswerWithNotice(n, e, FormatItalic("<Botname> <your question, at least 7 characters long>?") + " - The bot will answer.");
     }
     else if (IsMatch("^" + n.Nickname + " .{7,}\\?\\s*$", e.Data.Message))
         Answer(n, e, answers[r.Next(answers.Length)] + ", " + e.Data.Nick + ".");
 }
예제 #32
0
        public override void RunCommand(string channel, string[] args)
        {
            if (args.Length != 2)
            {
                return;
            }

            Irc.JoinChannel(args[1]);
        }
예제 #33
0
        internal void JoinCommandHandler(Irc irc, string[] args)
        {
            if (args.Length != 2)
            {
                return;
            }

            irc.JoinChannel(args[1]);
        }
예제 #34
0
        internal void WhoisCommandHandler(Irc irc, string[] args)
        {
            if (args.Length != 2)
            {
                return;
            }

            irc.WriteLine("WHOIS " + args[1]);
        }
예제 #35
0
        internal void RawCommandHandler(Irc irc, string[] args)
        {
            if (args.Length == 1)
            {
                return;
            }
            var message = String.Join(" ", args, 1, args.Length - 1);

            irc.WriteLine(message);
        }
예제 #36
0
        internal void MeCommandHandler(Irc irc, string[] args)
        {
            if (args.Length == 1)
            {
                return;
            }
            var message = String.Join(" ", args, 1, args.Length - 1);

            irc.SendAction(message);
        }
예제 #37
0
파일: IrcGui.cs 프로젝트: gloowa/mstest
 public void Awake()
 {
     Debug.Log("Start Gui");
     id = Random.Range(0, 9999);
     if (ircProtocol == null)
         ircProtocol = new Irc();
     ircProtocol.ircNick = "Guest" + Random.Range(0, 999);
     ircProtocol.controller = this;
     ircProtocol.Start();
 }
예제 #38
0
        public override void RunCommand(string channel, string[] args)
        {
            if (args.Length == 1)
            {
                return;
            }
            var message = string.Join(" ", args, 1, args.Length - 1);

            Irc.WriteLine(message);
        }
        public FriendsList(IUpstreamConnection connection, Irc.IRawMessageConnection downstream, Configuration conf)
        {
            this.downstream = downstream;
            this.client = connection.Client;
            this.mapper = connection.Mapper;
            this.config = conf;
            client.Friends.FriendOnline += GridClient_FriendPresenceChanged;
            client.Friends.FriendOffline += GridClient_FriendPresenceChanged;

            downstream.Register(this);
        }
예제 #40
0
 void Check(Network network, Irc.JoinEventArgs e)
 {
     List<TellInfo> l = LoadFromFile<List<TellInfo>>("Tell");
     List<TellInfo> tmp = new List<TellInfo>();
     foreach (TellInfo t in l)
         if (t.Target == e.Data.Nick && t.Network == network.Name) {
             tmp.Add(t);
             Answer(network, e, FormatBold(e.Data.Nick) + ", on " + FormatBold(t.Date.ToLongDateString()) + " " + FormatBold(t.Date.ToLongTimeString()) + " " + FormatBold(t.Name) + " wanted to tell you " + FormatBold(t.Text) + ".");
         }
     foreach (TellInfo t in tmp)
         l.Remove(t);
     if (tmp.Count > 0)
         SaveToFile<List<TellInfo>>(l,"Tell");
 }
예제 #41
0
파일: Bash.cs 프로젝트: MrTiggr/Murphy
 void Bot_OnMessage(Network network, Irc.IrcEventArgs e)
 {
     if (IsMatch("^bash \\?$", e.Data.Message)) {
         AnswerWithNotice(n, e, FormatBold("Use of Bash plugin:"));
         AnswerWithNotice(n, e, FormatItalic("bash") + " - Prints a random quote from http://www.bash.org.");
     }
     else if (IsMatch("^bash$", e.Data.Message)) {
         this.n = network;
         this.e = e;
         new System.Threading.Thread(new ThreadStart(GetBash)).Start();
     }
     else if (IsMatch("^german bash$", e.Data.Message)) {
         this.n = network;
         this.e = e;
         new System.Threading.Thread(new ThreadStart(GetGermanBash)).Start();
     }
 }
        public void HandleMessage(Irc.Message msg)
        {
            if (msg.Argv.Count < 1)
            {
                downstream.SendNeedMoreParams("MONITOR");
            }

            switch(msg.Argv[0].ToUpperInvariant())
            {
                case "+":
                case "-":
                case "C":
                    downstream.SendNumeric(Numeric.ERR_UNKNOWNSUBCOMMAND, "MONITOR", msg.Argv[0], "Use FriendServ for that");
                    break;
                case "L":
                    var idlist = new List<MappedIdentity>();
                    client.Friends.FriendList.ForEach(i => idlist.Add(mapper.MapUser(i.Key, i.Value.Name)));
                    downstream.Send(idlist.ChunkTrivialBetter(512 / 63).Select(i =>
                    {
                        var m = new Irc.Message(downstream.ServerName, Numeric.RPL_MONLIST, downstream.ClientNick);
                        m.Argv.Add(String.Join(",", i.Select(j=>j.IrcNick)));
                        return m;
                    }).AppendSingle(new Irc.Message(downstream.ServerName, Numeric.RPL_ENDOFMONLIST, "End of monitor list")));
                    break;
                case "S":
                    var msglist = new List<Irc.Message>();
                    client.Friends.FriendList.ForEach(i =>
                    {
                        var id = mapper.MapUser(i.Key, i.Value.Name);
                        var num = i.Value.IsOnline ? Numeric.RPL_MONONLINE : Numeric.RPL_MONOFFLINE;
                        var response = new Irc.Message(downstream.ServerName, num, "*", id.IrcNick);
                        msglist.Add(response);
                    });
                    downstream.Send(msglist);
                    break;
                case "NON":
                    client.Friends.FriendList.ForEach(i =>
                    {
                        if(!i.Value.IsOnline) { return; }
                        downstream.SendFromServer("NOTICE", downstream.ClientNick, "[PRESENCE] {0:IrcNick} is now online".Format(mapper.MapUser(i.Key, i.Value.Name)));
                    });
                    break;
            }
        }
예제 #43
0
 void Bot_OnMessage(Network network, Irc.IrcEventArgs e)
 {
     if (IsMatch("^tell \\?$", e.Data.Message)) {
         AnswerWithNotice(network, e, FormatBold("Use of Tell plugin:"));
         AnswerWithNotice(network, e, FormatItalic("tell <recipient> <message>") + " - Tells <recipient> the <message> the next time he joins.");
     }
     else if (IsMatch("^tell (?<target>.*?) (?<message>.*)$", e.Data.Message)) {
         List<TellInfo> l = LoadFromFile<List<TellInfo>>("Tell");
         TellInfo t = new TellInfo();
         t.Date = DateTime.Now;
         t.Name = e.Data.Nick;
         t.Network = network.Name;
         t.Target = Matches["target"].ToString();
         t.Text = Matches["message"].ToString();
         l.Add(t);
         SaveToFile<List<TellInfo>>(l, "Tell");
         AnswerWithNotice(network, e, "I'll tell your message.");
     }
 }
예제 #44
0
파일: Reminder.cs 프로젝트: MrTiggr/Murphy
 void Bot_OnMessage(Network network, Irc.IrcEventArgs e)
 {
     if (IsMatch("^reminder \\?$", e.Data.Message)) {
         AnswerWithNotice(network, e, FormatBold("Use of Reminder plugin:"));
         AnswerWithNotice(network, e, FormatItalic("remind me in <minutes> <message>") + " - Reminds you in <minutes> minutes.");
         AnswerWithNotice(network, e, FormatItalic("remind me at <hours>:<minutes> <message>") + " - Reminds you at the given time.");
     }
     else if (IsMatch("^remind me in (?<minutes>\\d{1,3}) (?<message>.*)$", e.Data.Message)) {
         List<RemindInfo> l = Load();
         RemindInfo i = new RemindInfo();
         i.Network = network.Name;
         i.Channel = e.Data.Channel;
         i.User = e.Data.Nick;
         i.Message = Matches["message"].ToString();
         i.Date = DateTime.Now.AddMinutes(int.Parse(Matches["minutes"].ToString()));
         i.IsPrivate = e.Data.Type == Irc.ReceiveType.QueryMessage;
         l.Add(i);
         Save(l);
         StartThread();
         AnswerWithNotice(network, e, "You will be reminded.");
     }
     else if (IsMatch("^remind me at (?<hours>\\d{1,2}):(?<minutes>\\d{1,2}) (?<message>.*)$",e.Data.Message)) {
         List<RemindInfo> l = Load();
         RemindInfo i = new RemindInfo();
         i.Network = network.Name;
         i.Channel = e.Data.Channel;
         i.User = e.Data.Nick;
         i.Message = Matches["message"].ToString();
         i.Date = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, int.Parse(Matches["hours"].ToString()), int.Parse(Matches["minutes"].ToString()), 0);
         if (i.Date < DateTime.Now)
             i.Date = i.Date.AddDays(1);
         i.IsPrivate = e.Data.Type == Irc.ReceiveType.QueryMessage;
         l.Add(i);
         Save(l);
         StartThread();
         AnswerWithNotice(network, e, "You will be reminded.");
     }
 }
예제 #45
0
        void Bot_OnMessage(Network n, Irc.IrcEventArgs e)
        {
            if (IsMatch("^googlesearch \\?$", e.Data.Message)) {
                AnswerWithNotice(n, e, FormatBold("Use of GoogleSearch plugin:"));
                AnswerWithNotice(n, e, FormatItalic("google <search term>") + " - Searches google for <search term> and lists the first two results.");
                AnswerWithNotice(n, e, FormatItalic("google <number of results> <search term>") + " - Searches google for <search term> and lists the first <number of results> (maximum is 10) results.");
            }
            else if (IsMatch("^google ((?<count>\\d{1,2}) )?(?<term>.*)$", e.Data.Message)) {
                int count = 2;
                if (Matches["count"].Length > 0)
                    count = int.Parse(Matches["count"].ToString());
                if (count > 10)
                    count = 10;

                try {
                    Google.Google.GoogleSearchService s = new Google.Google.GoogleSearchService();
                    Google.Google.GoogleSearchResult results = s.doGoogleSearch(Bot.Configuration["Plugins"]["GoogleSearch"].Attributes["Key"].Value, Matches["term"].ToString(), 0, count, false, "", false, "", "", "");

                    if (count > results.resultElements.Length)
                        count = results.resultElements.Length;

                    if (count > 0) {
                        Answer(n, e, FormatBold(count.ToString() + " results for " + FormatItalic(Matches["term"].ToString()) + "."));
                        for (int i = 0; i < count; i++) {
                            string result = results.resultElements[i].URL + " (" + FormatBold(results.resultElements[i].title) + " - " + results.resultElements[i].snippet + ")";
                            result = result.Replace("<b>", "").Replace("</b>", "").Replace("<br>", "").Replace("&#39;", "'").Replace("&amp;", "&");
                            Answer(n, e, result);
                        }
                    }
                    else
                        Answer(n, e, "No results found for " + FormatItalic(Matches["term"].ToString()) + ".");
                } catch (Exception ex) {
                    Answer(n, e, "Error in GoogleSearch plugin: " + FormatItalic(ex.Message));
                }
            }
        }
예제 #46
0
파일: Main.cs 프로젝트: solson/sharpie
    static int Main(string[] args)
    {
        if(args.Length != 2) {
            Console.WriteLine("Usage: sharpie.exe SERVER CHANNEL");
            return 1;
        }

        var irc = new Irc(new IrcConfig() {
            Server = args[0],
            Nickname = "sharpie",
            Channels = new string[] { args[1] }
        });

        irc.OnChannelMessage((sender, channel, message) => {
            if(message.StartsWith(irc.Nickname + ": ")) {
                irc.SendMessage(channel, "{0}: {1}", sender.Nickname,
                        message.Substring(irc.Nickname.Length + 2));
            }
        });

        irc.Run();

        return 0;
    }
예제 #47
0
파일: Plugin.cs 프로젝트: MrTiggr/Murphy
 protected internal static void AnswerWithQuery(Network n, Irc.IrcEventArgs e, string s)
 {
     n.SendMessage(Murphy.Irc.SendType.Message, e.Data.Nick, s);
 }
예제 #48
0
 void OnVoiceHandler(object sender, Irc.VoiceEventArgs e)
 {
     if (OnVoice != null)
         OnVoice((Network)sender, e);
 }
예제 #49
0
 void OnWhoHandler(object sender, Irc.WhoEventArgs e)
 {
     if (OnWho != null)
         OnWho((Network)sender, e);
 }
예제 #50
0
 void OnWriteLineHandler(object sender, Irc.WriteLineEventArgs e)
 {
     if (OnWriteLine != null)
         OnWriteLine((Network)sender, e);
 }
예제 #51
0
 void Bot_OnRawMessage(Network network, Irc.IrcEventArgs e)
 {
     Console.WriteLine(e.Data.RawMessage);
 }
예제 #52
0
파일: Plugin.cs 프로젝트: MrTiggr/Murphy
 protected internal static void Answer(Network n, Irc.JoinEventArgs e, string s)
 {
     n.SendMessage(Murphy.Irc.SendType.Message, e.Data.Channel, s);
 }
예제 #53
0
파일: Plugin.cs 프로젝트: MrTiggr/Murphy
 protected internal static void Answer(Network n, Irc.IrcEventArgs e, string s)
 {
     if (e.Data.Type == Irc.ReceiveType.QueryMessage)
         n.SendMessage(Murphy.Irc.SendType.Message, e.Data.Nick, s);
     else
         n.SendMessage(Murphy.Irc.SendType.Message, e.Data.Channel, s);
 }
예제 #54
0
 void Bot_OnJoin(Network network, Irc.JoinEventArgs e)
 {
     Check(network, e);
 }
예제 #55
0
 void Bot_OnJoin(Network n, Irc.JoinEventArgs e)
 {
     Op(n, e.Data.From, e.Data.Nick, e.Data.Channel);
 }
예제 #56
0
 void Bot_OnOp(Network n, Irc.OpEventArgs e)
 {
     DeOp(n, GetFullUser(n, e.Whom), e.Whom, e.Data.Channel);
 }
예제 #57
0
파일: Seen.cs 프로젝트: MrTiggr/Murphy
 void Bot_OnJoin(Network network, Irc.JoinEventArgs e)
 {
     NewSeen(network.Name, e.Data.Nick, e.Data.Ident, "joining " + e.Data.Channel);
 }
예제 #58
0
파일: Seen.cs 프로젝트: MrTiggr/Murphy
 void Bot_OnQuit(Network network, Irc.QuitEventArgs e)
 {
     NewSeen(network.Name, e.Data.Nick, e.Data.Ident, "quitting IRC (" + e.Data.Message + ")");
 }
예제 #59
0
파일: Seen.cs 프로젝트: MrTiggr/Murphy
 void Bot_OnPart(Network network, Irc.PartEventArgs e)
 {
     NewSeen(network.Name, e.Data.Nick, e.Data.Ident, "leaving " + e.Data.Channel);
 }
예제 #60
0
파일: Seen.cs 프로젝트: MrTiggr/Murphy
 void Bot_OnNickChange(Network network, Irc.NickChangeEventArgs e)
 {
     NewSeen(network.Name, e.Data.Nick, e.Data.Ident, "changing his nick from " + e.OldNickname + " to " + e.NewNickname);
 }