Inheritance: System.EventArgs
コード例 #1
0
        void BotOnRawMessage(object sender, IrcEventArgs e)
        {
            if ((e.Data.ReplyCode == ReplyCode.IdentifiedToServices) && (e.Data.RawMessageArray[3] == nick) && (e.Data.Message.StartsWith("is signed on as account")))
            {
                bot.OnRawMessage -= BotOnRawMessage;
                identity = e.Data.MessageArray[5];
                lock (this) Monitor.Pulse(this);
            }
            if ((e.Data.ReplyCode == ReplyCode.IdentifiedFreenode) && (e.Data.RawMessageArray[3] == nick) && (e.Data.Message.StartsWith("is logged in as")))
            {
                bot.OnRawMessage -= BotOnRawMessage;
                identity = e.Data.RawMessageArray[4];
                lock (this) Monitor.Pulse(this);
            }
            if ((e.Data.ReplyCode == ReplyCode.WhoIsRegistered) && (e.Data.RawMessageArray[3] == nick) && (e.Data.Message.StartsWith("is a registered nick")))
            {
                bot.OnRawMessage -= BotOnRawMessage;
                identity = e.Data.RawMessageArray[3];
                lock (this) Monitor.Pulse(this);
            }
            if ((e.Data.ReplyCode == ReplyCode.EndOfWhoIs) && (e.Data.RawMessageArray[3] == nick))
            {
                bot.OnRawMessage -= BotOnRawMessage;
                lock (this) Monitor.Pulse(this);
            }

            if (e.Data.ReplyCode == ReplyCode.WhoIsRegistered)
            {
                Log.Instance.Log(e.Data.Message, Level.Trace);
            }
        }
コード例 #2
0
 protected PiVoteAction(IrcBot botMethods, VotingClient client, CertificateStorage certificateStorage, IrcEventArgs eventArgs)
 {
     BotMethods = botMethods;
     Client = client;
     CertificateStorage = certificateStorage;
     EventArgs = eventArgs;
 }
コード例 #3
0
        public void HandleAlpha(object sender, IrcEventArgs e)
        {
            string target = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;

            var document = new XDocument();
            var request = WebRequest.Create(RequestBase + InputQuery + HttpUtility.UrlEncode(string.Join(" ", e.Data.MessageArray.Skip(1))) + AmpersAnd + AppIDQuery) as HttpWebRequest;
            if (request == null) return;

            request.UserAgent = "Mozilla/5.0 (Huffelpuff)";
            document = XDocument.Load(request.GetResponse().GetResponseStream());

            foreach (var pod in document.Descendants("pod"))
            {
                string id = pod.Attribute("id").Value;
                string title = pod.Attribute("title").Value;

                foreach (var subpod in pod.Descendants("subpod"))
                {
                    string plaintext = subpod.Descendants("plaintext").First().Value.Replace("\n", " ");
                    if (!string.IsNullOrWhiteSpace(plaintext))
                    {
                        BotMethods.SendMessage(SendType.Message, target, title + ": " + plaintext);
                    }
                }
            }
        }
コード例 #4
0
ファイル: benchmark.cs プロジェクト: FreeApophis/sharpIRC
 public static void IrcClientListCallback(object sender, IrcEventArgs e)
 {
     if (e.Data.ReplyCode == ReplyCode.List)
     {
         Console.WriteLine("On the IRC channel " + CHANNEL + " are " + e.Data.RawMessageArray[4] + " users");
         e.Data.Irc.Disconnect();
     }
 }
コード例 #5
0
        private void ChangeNick(object sender, IrcEventArgs e)
        {
            if (e.Data.MessageArray.Length <= 1) { return; }
            if (!isValidNick(e.Data.MessageArray[1])) { return; }

            bot.RfcNick(e.Data.MessageArray[1]);
            Settings.Default.Nick = e.Data.MessageArray[1];
            Settings.Default.Save();
        }
コード例 #6
0
 private void CalculateHandler(object sender, IrcEventArgs e)
 {
     var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;
     try
     {
         var result = magicCalculator.Calculate(e.Data.Message.Substring(6));
         if (result.HasResult)
         {
             BotMethods.SendMessage(SendType.Message, sendto, "[" + result.ResultProvider.ToString()[0] + "] Result: " + result.Result);
             return;
         }
     }
     catch (Exception) { }
     BotMethods.SendMessage(SendType.Message, sendto, "no result!");
 }
コード例 #7
0
        public TallyAction(IrcBot botMethods, VotingClient client, CertificateStorage certificateStorage, IrcEventArgs eventArgs)
            : base(botMethods, client, certificateStorage, eventArgs)
        {
            if (eventArgs.Data.MessageArray.Length == 2)
            {
                int votingNumberTemp;

                if (int.TryParse(eventArgs.Data.MessageArray[1], out votingNumberTemp))
                {
                    if (votingNumberTemp >= 0)
                    {
                        votingNumber = votingNumberTemp;
                    }
                }
            }
        }
コード例 #8
0
 private void ConfigGet(object sender, IrcEventArgs e)
 {
     string sendto = e.Data.Channel.IsNullOrEmpty() ? e.Data.Nick : e.Data.Channel;
     if (e.Data.MessageArray.Length < 2)
     {
         foreach (var line in bot.Properties.GetType().GetProperties().Where(property => property.CanRead).Select(property => property.Name).ToLines(350))
         {
             bot.SendMessage(SendType.Message, sendto, line);
         }
     }
     else
     {
         var propertyInfos = bot.Properties.GetType().GetProperties().Where(property => property.CanRead && property.Name == e.Data.MessageArray[1]).SingleOrDefault();
         if (propertyInfos != null)
             bot.SendMessage(SendType.Message, sendto, "Current Value: " + propertyInfos.GetValue(bot.Properties, null));
         else
             bot.SendMessage(SendType.Message, sendto, "Dont know that property");
     }
 }
コード例 #9
0
        void BotEvents_OnChannelMessage(object sender, IrcEventArgs e)
        {
            if (!e.Data.Message.ToLower().Contains(BotMethods.Nickname.ToLower())) return;

            var msg = e.Data.Message.ToLower().Trim().StartsWith(BotMethods.Nickname.ToLower())
                             ? e.Data.Message.Trim().Substring(BotMethods.Nickname.Length + 1)
                             : e.Data.Message.Trim();
            User myUser;
            if (myUsers.ContainsKey(e.Data.Nick))
            {
                myUser = myUsers[e.Data.Nick];
            }
            else
            {
                myUser = new User(e.Data.Nick, myAimlBot);
                myUser.Predicates.addSetting("name", e.Data.Nick);

                myUsers.Add(e.Data.Nick, myUser);
            }
            var r = new Request(msg, myUser, myAimlBot);
            var res = myAimlBot.Chat(r);
            BotMethods.SendMessage(SendType.Message, e.Data.Channel, res.Output);
        }
コード例 #10
0
        private void Utf8Handler(object sender, IrcEventArgs e)
        {
            var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;

            if (e.Data.MessageArray.Length > 1)
            {
                BotMethods.SendMessage(SendType.Message, sendto,
                                       e.Data.MessageArray[1] == "äöü"
                                           ? "Yes your text is in UTF-8"
                                           : "Sorry thats either not UTF-8 or you havent typed !utf8 äöü");
            }
        }
コード例 #11
0
 internal void HandleOnUnAway(object sender, IrcEventArgs e)
 {
     if (OnUnAway != null)
         OnUnAway(this, e);
 }
コード例 #12
0
        private void TweetStatsHandler(object sender, IrcEventArgs e)
        {
            string sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;
            if (e.Data.MessageArray.Length < 2)
            {
                BotMethods.SendMessage(SendType.Message, sendto, "Too few arguments for 'add'! Try '!help !tweet-stats'.");
                return;
            }

            if (twitterAccounts.ContainsKey(e.Data.MessageArray[1].ToLower()))
            {
                var user = twitterAccounts[e.Data.MessageArray[1].ToLower()].GetStats();
                BotMethods.SendMessage(SendType.Message, sendto, "Followers: {0}, Friends: {1}, Statuses: {2}, -> {3}"
                                       .Fill(user.FollowersCount, user.FriendsCount, user.StatusesCount, user.Url));
            }
            else
            {
                BotMethods.SendMessage(SendType.Message, sendto, "I dont know a tweet with the name: {0}.".Fill(e.Data.MessageArray[1].ToLower()));
            }
        }
コード例 #13
0
        private void TweetTrendsHandler(object sender, IrcEventArgs e)
        {
            var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;

            var trends = TwitterWrapper.GetTrends();
            if (trends != null)
            {
                foreach (var line in trends.Trends.Select(trend => trend.Name).ToLines(350, ", ", "Current trends: ", ""))
                {
                    BotMethods.SendMessage(SendType.Message, sendto, line);
                }
                return;
            }
        }
コード例 #14
0
        private void ImportHandler(object sender, IrcEventArgs e)
        {
            if (e != null) { return; }

            var importer = new KewlQuizImport();

            importer.ImportFile(new FileInfo("Z:\\Chats\\mirc\\kewlquiz\\Apophis.txt"), quizData);
        }
コード例 #15
0
        private void StatusHandler(object sender, IrcEventArgs e)
        {
            if (actionQueue.Count == 0)
            {
                BotMethods.SendMessage(SendType.Message, e.Data.Channel, "Pi-Vote: No action currently executing.");
            }
            else
            {
                var action = actionQueue.Peek();
                BotMethods.SendMessage(SendType.Message, e.Data.Channel, "Pi-Vote: " + action.StatusMessage);

                if (actionQueue.Count > 1)
                {
                    BotMethods.SendMessage(SendType.Message, e.Data.Channel, string.Format("Pi-Vote: {0} more action queued.", actionQueue.Count - 1));
                }
            }
        }
コード例 #16
0
 internal void HandleOnUserModeChange(object sender, IrcEventArgs e)
 {
     if (OnUserModeChange != null)
         OnUserModeChange(this, e);
 }
コード例 #17
0
 private void SetFormat(object sender, IrcEventArgs e)
 {
     var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;
     if (e.Data.MessageArray.Length < 2)
     {
         BotMethods.SendMessage(SendType.Message, sendto, MessageFormat);
     }
     else
     {
         TwitterSettings.Default.TweetFormat = e.Data.MessageArray[1] == "RESET" ? null : e.Data.Message.Substring(e.Data.MessageArray[0].Length + 1);
     }
 }
コード例 #18
0
        private void AdminTweet(object sender, IrcEventArgs e)
        {
            var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;

            switch (e.Data.MessageArray[0].ToLower())
            {
                case "!+tweet":
                    if (e.Data.MessageArray.Length < 3)
                    {
                        BotMethods.SendMessage(SendType.Message, sendto, "Too few arguments for 'add'! Try '!help !+tweet'.");
                        return;
                    }
                    var friendlyname = e.Data.MessageArray[1].ToLower();
                    if (twitterAccounts.ContainsKey(friendlyname))
                    {
                        BotMethods.SendMessage(SendType.Message, sendto, "Tweet '{0}' already exists.".Fill(twitterAccounts[e.Data.MessageArray[1].ToLower()].FriendlyName));
                        break;
                    }
                    twitterAccounts.Add(friendlyname, new TwitterWrapper(friendlyname, e.Data.MessageArray[2]));

                    BotMethods.SendMessage(SendType.Message, sendto, "Feed '{0}' successfully added. Please go to {1} validate account and activate account by !tweet-pin {0} <pin>".Fill(friendlyname, twitterAccounts[friendlyname].AuthenticationUrl));
                    break;
                case "!-tweet":
                    if (e.Data.MessageArray.Length < 2)
                    {
                        BotMethods.SendMessage(SendType.Message, sendto, "Too few arguments for 'remove'! Try '!help !-tweet'.");
                        return;
                    }
                    if (twitterAccounts.ContainsKey(e.Data.MessageArray[1].ToLower()))
                    {
                        twitterAccounts[e.Data.MessageArray[1].ToLower()].RemoveAccount();
                        twitterAccounts.Remove(e.Data.MessageArray[1].ToLower());
                        BotMethods.SendMessage(SendType.Message, sendto, "Feed '{0}' successfully removed.".Fill(e.Data.MessageArray[1].ToLower()));
                    }
                    else
                    {
                        BotMethods.SendMessage(SendType.Message, sendto, "Feed '{0}' does not exists! Try '!tweet'.".Fill(e.Data.MessageArray[1].ToLower()));
                    }
                    break;
                default:
                    break;
            }
        }
コード例 #19
0
 private void CountdownHandler(object sender, IrcEventArgs e)
 {
 }
コード例 #20
0
 private void SetOption(object sender, IrcEventArgs e)
 {
 }
コード例 #21
0
 private void GetList(object sender, IrcEventArgs e)
 {
 }
コード例 #22
0
 private void TallyHandler(object sender, IrcEventArgs e)
 {
     var action = new TallyAction(BotMethods, client, certificateStorage, e);
     AddAction(action);
 }
コード例 #23
0
 private void HandleRequest(object sender, IrcEventArgs e)
 {
     //TODO: Request Handler
 }
コード例 #24
0
        private void TagHandler(object sender, IrcEventArgs e)
        {
            string sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;
            if (e.Data.MessageArray[0].ToLower() == "!+tag")
            {
                var tag = new TwitterTag { Tag = e.Data.MessageArray[1] };
                TwitterData.TwitterTags.InsertOnSubmit(tag);
                TwitterData.SubmitChanges();

                BotMethods.SendMessage(SendType.Message, sendto, "Automatic Search activated: " + "http://search.twitter.com/search?q=" + HttpUtility.UrlEncode(e.Data.MessageArray[1]));
            }
            if (e.Data.MessageArray[0].ToLower() == "!-tag")
            {
                var tag = TwitterData.TwitterTags.Where(t => t.Tag == e.Data.MessageArray[1]).FirstOrDefault();

                if (tag != null)
                {
                    TwitterData.TwitterTags.DeleteOnSubmit(tag);
                    TwitterData.SubmitChanges();
                }

            }
            if (e.Data.MessageArray[0].ToLower() == "!tags")
            {
                foreach (string line in TwitterData.TwitterTags.Select(t => t.Tag).ToLines(350))
                {
                    BotMethods.SendMessage(SendType.Message, sendto, line);
                }
            }
        }
コード例 #25
0
        private void ReloadPlugins(object sender, IrcEventArgs e)
        {
            pluginManager.ReloadPlugins();

            // The following call prevents the OnChannelMessage/OnQueryMessage Event to be processed further,
            // cause at this points its not guaranteed that the other Event Handlers still exists.
            // Because all objects out of this AppDomain are destroyed now. However we are still in the
            // Event Handling. We stop that here.
            // This means that "!reload" gets special treating and cannot be used for anything else.
            Thread.CurrentThread.Abort();
        }
コード例 #26
0
        private void TweetHandler(object sender, IrcEventArgs e)
        {
            string sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;
            bool retweet = (e.Data.MessageArray[0] == "!retweet");

            if (e.Data.MessageArray.Length < 2)
            {
                foreach (string line in twitterAccounts.Select(item => item.Value.FriendlyName).ToLines(350, ", ", "Tweet accounts loaded: ", "."))
                {
                    BotMethods.SendMessage(SendType.Message, sendto, line);
                }
                return;
            }
            if (e.Data.MessageArray.Length < 3 && twitterAccounts.Count > 1)
            {
                BotMethods.SendMessage(SendType.Message, sendto, "Nothing to say? I don't tweet empty messages! try !help !tweet.");
                return;
            }
            if (twitterAccounts.ContainsKey(e.Data.MessageArray[1].ToLower()))
            {
                string status = e.Data.Message.Substring(e.Data.MessageArray[0].Length + e.Data.MessageArray[1].Length + 2);
                try
                {
                    status = Shorten(status);
                    if (status.Length > 140)
                    {
                        BotMethods.SendMessage(SendType.Message, sendto, "Error on feed '{0}': Message longer than 140 characters(140+{1}), try rewriting and tweet again, nothing was tweeted.".Fill(twitterAccounts[e.Data.MessageArray[1].ToLower()].FriendlyName, status.Length - 140));
                        return;
                    }
                    var returnFromTwitter = twitterAccounts[e.Data.MessageArray[1].ToLower()].SendStatus(status, retweet);

                    if (IsFail(Enumerable.Repeat(returnFromTwitter, 1), sendto, twitterAccounts[e.Data.MessageArray[1].ToLower()].FriendlyName))
                    {
                        if (!twitterAccounts[e.Data.MessageArray[1].ToLower()].IsAuthenticated)
                        {
                            BotMethods.SendMessage(SendType.Message, sendto, "Error on feed '{0}': not authorized yet. New token generated: Please go to {1} validate account and activate account by !tweet-pin {0} <pin>".Fill(e.Data.MessageArray[1].ToLower(), twitterAccounts[e.Data.MessageArray[1].ToLower()].AuthenticationUrl));
                        }

                    }
                    else
                    {
                        string statusUrl = "http://twitter.com/{0}/status/{1}".Fill(returnFromTwitter.Author.ScreenName, returnFromTwitter.Id);

                        BotMethods.SendMessage(SendType.Message, sendto, "successfully tweeted on feed '{0}', Link to Status: {1}".Fill(twitterAccounts[e.Data.MessageArray[1].ToLower()].FriendlyName, statusUrl));
                        return;
                    }
                    return;
                }
                catch (Exception exception)
                {
                    Log.Instance.Log(exception);
                }
            }
            else if (twitterAccounts.Count == 1)
            {

            }
            else
            {
                BotMethods.SendMessage(SendType.Message, sendto, "I dont know a tweet with the name: {0}.".Fill(e.Data.MessageArray[1].ToLower()));
                return;
            }
        }
コード例 #27
0
        private void PinHandler(object sender, IrcEventArgs e)
        {
            var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;
            if (e.Data.MessageArray.Length < 3)
            {
                BotMethods.SendMessage(SendType.Message, sendto, "Too few arguments: use !tweet-pin <feed> <pin>");
                return;
            }
            var friendlyname = e.Data.MessageArray[1];
            if (!twitterAccounts.ContainsKey(friendlyname))
            {
                BotMethods.SendMessage(SendType.Message, sendto, "Unknown feed: use !tweet-pin <feed> <pin>");
                return;
            }
            var pin = e.Data.MessageArray[2];

            if (twitterAccounts[friendlyname].AuthenticateToken(pin))
            {
                BotMethods.SendMessage(SendType.Message, sendto, "Feed '{0}' is authorized, you can tweet now!".Fill(friendlyname));
            }
            else
            {
                BotMethods.SendMessage(SendType.Message, sendto, "Feed '{0}' authorization failed. Please go to {1} validate account and activate account by !tweet-pin {0} <pin>".Fill(friendlyname, twitterAccounts[friendlyname].AuthenticationUrl));
            }
        }
コード例 #28
0
 private void ListVotingsHandler(object sender, IrcEventArgs e)
 {
     var action = new ListVotingsAction(BotMethods, client, certificateStorage, e);
     AddAction(action);
 }
コード例 #29
0
 private void NowHandler(object sender, IrcEventArgs e)
 {
     BotMethods.SendMessage(SendType.Message, e.Data.Nick, "Es ist jetzt " + DateTime.Now.ToString("HH:mm:ss") + "Uhr" + DateTime.Now.ToString("K") + ".");
 }
コード例 #30
0
        private void ResetHandler(object sender, IrcEventArgs e)
        {
            var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;
            if (e.Data.MessageArray.Length < 2)
            {
                BotMethods.SendMessage(SendType.Message, sendto, "Too few arguments! Try '!help !tweet-reset'.");
            }

            TwitterWrapper account;
            if (twitterAccounts.TryGetValue(e.Data.MessageArray[1].ToLower(), out account))
            {
                account.ResetToken();
                BotMethods.SendMessage(SendType.Message, sendto, "Feed '{0}' successfully reset. Please go to {1} validate account and activate account by !tweet-pin {0} <pin>".Fill(account.FriendlyName, account.AuthenticationUrl));
            }
            else
            {
                BotMethods.SendMessage(SendType.Message, sendto, "No account with name '{0}'.".Fill(e.Data.MessageArray[1].ToLower()));
            }
        }