Exemple #1
0
        private void IRCOnOnChannelMessage(object sender, IrcEventArgs ircEventArgs)
        {
            //TODO: Find out how to say stuff without resorting to renaming players
            switch (ircEventArgs.Data.Message)
            {
            case "!players":
                BuildScores();
                break;

            default:
                foreach (var player in Players)
                {
                    var name = player.GetField <string>("name");
                    player.SetField("name", "^8[IRC] " + ircEventArgs.Data.Nick);
                    player.Call("sayall", ircEventArgs.Data.Message);
                    player.SetField("name", name);
                    break;
                }
                break;
            }
        }
 private void session_RawMessageReceived(object sender, IrcEventArgs e)
 {
     if (e.Message.Command == "PRIVMSG" && e.Message.Parameters.Count == 2 &&
         (!CtcpCommand.IsCtcpCommand(e.Message.Parameters[1]) ||
          CtcpCommand.Parse(e.Message.Parameters[1]).Command == "ACTION"))
     {
         var target = new IrcTarget(e.Message.Parameters[0]);
         if (App.IsIgnoreMatch(e.Message.From, target.IsChannel ? IgnoreActions.Channel : IgnoreActions.Private))
         {
             return;
         }
         if (!target.IsChannel && e.Message.From is IrcPeer)
         {
             if (App.Create(sender as IrcSession, new IrcTarget((IrcPeer)e.Message.From), false) &&
                 _notifyIcon != null && _notifyIcon.IsVisible)
             {
                 _notifyIcon.Show("IRC Message", string.Format("You received a message from {0}.", ((IrcPeer)e.Message.From).Nickname));
             }
         }
     }
 }
Exemple #3
0
 void OnMessage(object sender, IrcEventArgs e)
 {
     if (e.Data.Channel == channel)
     {
         if (e.Data.Message.StartsWith("!lazor "))
         {
             //authenticate
             if (OpList != null && OpList.ContainsKey(e.Data.Nick))
             {
                 List <string> pars = new List <string>(e.Data.Message.Split(' '));
                 SetStatus("Controlled by " + e.Data.Nick);
                 try
                 {
                     txtTargetIP.Invoke(new CheckParamsDelegate(CheckParams), pars);
                 }
                 catch
                 { }
             }
         }
     }
 }
        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()));
            }
        }
        private void PartCommand(object sender, IrcEventArgs e)
        {
            var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;

            if (e.Data.MessageArray.Length < 2)
            {
                SendMessage(SendType.Message, sendto, "Too few arguments! Try !help.");
                return;
            }

            RfcPart(e.Data.Message.Substring(6));


            var channel = MainBotData.Channels.Where(c => c.ChannelName == e.Data.MessageArray[1]).FirstOrDefault();

            if (channel != null)
            {
                MainBotData.Channels.DeleteOnSubmit(channel);
                MainBotData.SubmitChanges();
            }
        }
        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()));
            }
        }
        private void JoinCommand(object sender, IrcEventArgs e)
        {
            var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;

            if (e.Data.MessageArray.Length < 2)
            {
                SendMessage(SendType.Message, sendto, "Too few arguments! Try !help.");
                return;
            }

            foreach (var channel in e.Data.MessageArray.Skip(1).Where(channel => !channel.IsNullOrEmpty()))
            {
                RfcJoin(channel);
                var chan = new Channel {
                    ChannelName = channel
                };
                MainBotData.Channels.InsertOnSubmit(chan);
                MainBotData.SubmitChanges();
            }
            Settings.Default.Save();
        }
Exemple #8
0
        private void IrcClientOnOnChannelMessage(object sender, IrcEventArgs ircEventArgs)
        {
            //Irc4net does not trim whitespace so we do that manually and then build a new array from that
            var text      = ircEventArgs.Data.Message.Trim();
            var textArray = text.Split(' ');

            var m = new IrcMessage
            {
                Channel   = ircEventArgs.Data.Channel,
                Sender    = ircEventArgs.Data.Nick,
                Server    = _server,
                Text      = text,
                TextArray = textArray
            };

            if (OnChannelMessage != null)
            {
                ThreadStart threadStart = () => OnChannelMessage(sender, this, m);
                new Thread(threadStart).Start();
            }
        }
Exemple #9
0
 public void OnChannelMessage(object sender, IrcEventArgs e)
 {
     Console.WriteLine($"[{e.Data.Channel}] {e.Data.Nick} : {e.Data.Message}");
     // Multiplay Parsing
     if (e.Data.Nick.ToLower() == "banchobot")
     {
         BanchoBotParser bparser = new BanchoBotParser(e.Data.Message);
         bparser.Parse();
         switch (bparser.Type)
         {
         case BanchoBotParseType.BEATMAP_CHANGED:
             if (bparser.Result as string == "0")
             {
                 return;                                                              // Skip if map is not submitted.
             }
             // todo get beatmap object from beatmap id.
             irc.SendMessage(SendType.Message, e.Data.Channel, $"Bloodcat mirror: {new UrlMessage("here", $"https://bloodcat.com/osu/b/{bparser.Result as string}")}");
             break;
         }
     }
 }
Exemple #10
0
 private void logMessage(IrcEventArgs e)
 {
     try
     {
         using (var DB = new internetEntities())
         {
             irkki testRow = new irkki
             {
                 viesti = e.Data.Message,
                 nick   = e.Data.Nick,
                 kanava = e.Data.Channel,
                 aika   = DateTime.Now,
                 maara  = 1
             };
             DB.irkki.Add(testRow);
             DB.SaveChanges();
         }
     }
     catch (Exception eip)
     { }
 }
Exemple #11
0
 //Käsittelee ja parsii kanavalle tulleen viestin.
 private botCommands parseCommand(IrcEventArgs e, out string like, bool privMessage = false)
 {
     like = "";
     try {
         like = "";
         string   message  = e.Data.Message;
         string[] splitted = e.Data.MessageArray;
         if (splitted.Length > 0)
         {
             botCommands comType = get_command_type(splitted[0]);
             if (comType == botCommands.random || comType == botCommands.random_old)
             {
                 if (!privMessage)
                 {
                     like = get_like(message, splitted[0]);
                 }
                 else
                 {
                     like = get_like(message, splitted[1]);
                 }
             }
             else
             {
                 if (!privMessage && splitted.Length >= 2)
                 {
                     like = splitted[1];
                 }
                 else if (privMessage && splitted.Length >= 3)
                 {
                     like = splitted[2];
                 }
             }
             return(comType);
         }
         return(botCommands.unknown);
     } catch (Exception eee)
     {
         return(botCommands.unknown);
     }
 }
Exemple #12
0
    public static void OnQueryMessage(object sender, IrcEventArgs e)
    {
        if (e.Data.From == "[email protected]")
        {
            System.Console.WriteLine("[" + DateTime.Now.ToString("HH:mm:ss") + "] Query: " + e.Data.Nick + " | " + e.Data.Message);
            switch (e.Data.MessageArray[0])
            {
            case "host":
                irc.SendMessage(SendType.Message, e.Data.Nick, "e.Data.From: " + e.Data.From);
                irc.SendMessage(SendType.Message, e.Data.Nick, "e.Data.Host: " + e.Data.Host);
                irc.SendMessage(SendType.Message, e.Data.Nick, "e.Data.Ident: " + e.Data.Ident);
                irc.SendMessage(SendType.Message, e.Data.Nick, "e.Data.Nick: " + e.Data.Nick);
                break;

            case "join":
                irc.RfcJoin(e.Data.MessageArray[1]);
                break;

            case "leave":
            case "part":
                irc.RfcPart(e.Data.MessageArray[1]);
                break;

            case "die":
                Exit();
                break;

            case "add":
                if (e.Data.MessageArray.Length > 1)
                {
                    RandomDogFromFile.Add(e.Data.MessageArray[1]);
                }
                break;
            }
        }
        else
        {
            irc.SendMessage(SendType.Message, e.Data.Nick, "Bark! You are not my owner.");
        }
    }
        private void DeactivateCommand(object sender, IrcEventArgs e)
        {
            var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;

            if (e.Data.MessageArray.Length < 2)
            {
                SendMessage(SendType.Message, sendto, "Too few arguments! Try !help.");
                return;
            }
            var calledPlugins = new List <AbstractPlugin>();

            foreach (AbstractPlugin plugin in e.Data.MessageArray.Skip(1).Select(p => new Wildcard(p)).SelectMany(wildcard => PlugManager.Plugins.Where(p => wildcard.IsMatch(p.FullName) || wildcard.IsMatch(p.MainClass))))
            {
                if (plugin.Active)
                {
                    var plugs = MainBotData.Plugin.Where(p => p.PluginName == plugin.FullName).ToArray();
                    MainBotData.Plugin.DeleteAllOnSubmit(plugs);

                    plugin.Deactivate();

                    var plug = plugin;
                    foreach (var command in (from commandlet in commands
                                             let abstractPlugin = commandlet.Value.Owner as string
                                                                  let command = commandlet.Key
                                                                                where abstractPlugin != null && abstractPlugin == plug.FullName
                                                                                select command).ToList())
                    {
                        commands.Remove(command);
                        Log.Instance.Log("BUG in Plugin: Forcefully deactivated Command '{0}' in Plugin {1}.".Fill(command, plugin.FullName), Level.Warning);
                    }
                }
                calledPlugins.Add(plugin);
            }
            MainBotData.SubmitChanges();

            foreach (var line in calledPlugins.Select(plugin => "" + plugin.FullName + " [" + ((plugin.Active ? IrcConstants.IrcColor + "" + (int)IrcColors.LightGreen + "ON" : IrcConstants.IrcColor + "" + (int)IrcColors.LightRed + "OFF")) + IrcConstants.IrcColor + "]").ToLines(350, ", ", "Plugins: ", " END."))
            {
                SendMessage(SendType.Message, sendto, line);
            }
        }
Exemple #14
0
        //Retrieves an imagelink, matching the tag and provider given
        public void DoBooru(IrcEventArgs e, List <string> tags, string channel)
        {
            //we know the first word is booru
            //we remove the booru command
            tags.Remove(tags[0]);


            //now we see if we got a provider given
            //the provider would be the first word after booru, booru was removed
            //if we get one we remove it
            string provider = "";

            switch (tags[0])
            {
            case "SANKAKU":
                provider = tags[0];
                tags.Remove(tags[0]);
                break;

            case "DANBOORU":
                provider = tags[0];
                tags.Remove(tags[0]);
                break;

            default:
                break;
            }

            //safety check that there are still tags left, e.g. .booru sankaku would be empty now
            if (tags.Count == 0)
            {
                return;
            }

            //now the other words all count as tags
            string fileUrl = BooruHandler.GetFileLink(tags, provider);

            mainIRCClient.SendMessage(SendType.Message, channel, fileUrl);
        }
        private void TranslateTrigger(object sender, IrcEventArgs e)
        {
            if (e.Data.MessageArray.Length > 1)
            {
                if ((e.Data.MessageArray[1].ToLower() == "off") || (e.Data.MessageArray[1].ToLower() == "end"))
                {
                    EndTranslate(e.Data.Nick, e.Data.Channel);
                }
                if (activeTranslations.Select("(Nick='" + e.Data.Nick + "') AND (Channel='" + e.Data.Channel + "')").Length > 0)
                {
                    EndTranslate(e.Data.Nick, e.Data.Channel);
                    BotMethods.SendMessage(SendType.Notice, e.Data.Nick, "" + IrcConstants.IrcBold + IrcConstants.IrcColor + (int)IrcColors.Brown + "You requested more than one language translation in a channel: the old request was canceled.");
                }

                if (languages.ContainsKey(e.Data.MessageArray[1]))
                {
                    DataRow dr = activeTranslations.NewRow();
                    dr["Nick"]     = e.Data.Nick;
                    dr["Channel"]  = e.Data.Channel;
                    dr["Language"] = e.Data.MessageArray[1];
                    activeTranslations.Rows.Add(dr);
                }
                if (languages.ContainsValue(e.Data.MessageArray[1]))
                {
                    foreach (KeyValuePair <string, string> kvp in languages)
                    {
                        if (kvp.Value.ToLower() == e.Data.MessageArray[1].ToLower())
                        {
                            DataRow dr = activeTranslations.NewRow();
                            dr["Nick"]     = e.Data.Nick;
                            dr["Channel"]  = e.Data.Channel;
                            dr["Language"] = kvp.Key;
                            activeTranslations.Rows.Add(dr);
                            break;
                        }
                    }
                }
            }
        }
        protected internal void IRC_OnChannelMessage(object sender, IrcEventArgs e)
        {
            IrcMessageData data = e.Data;

            if (ircClient.IsMe(data.Nick))
            {
                return;
            }
            if (data.Message.Contains("[off]"))
            {
                return;
            }
            string nick = data.Nick + " " + data.Channel.Substring(1);
            UUID   id   = UUID.Zero;

            lock (IrcUUIDs)
            {
                if (!IrcUUIDs.TryGetValue(nick, out id))
                {
                    id = IrcUUIDs[nick] = UUID.Random();
                    WorldObjects.DeclareGeneric(nick, id, "IrcUser");
                }
            }
            RelayToSim(nick, data.Message);
            try
            {
                Client.FakeEvent(Client.Self, "m_Chat", this,
                                 new ChatEventArgs(Client.Network.CurrentSim, data.Message, ChatAudibleLevel.Fully,
                                                   ChatType.Normal,
                                                   ChatSourceType.Agent, nick,
                                                   id, id, Vector3.Zero));
            }
            catch (NotSupportedException exception)
            { }
            catch (Exception exception)
            {
                Console.WriteLine("ChatFromSimulator: " + exception);
            }
        }
Exemple #17
0
        /// <summary>
        /// Called when a channel the bot is in recieves a message
        /// </summary>
        /// <param name="sender">The sender of the event (usually <see cref="irc"/>)</param>
        /// <param name="e">The <see cref="IrcEventArgs"/></param>
        private void Irc_OnChannelMessage(object sender, IrcEventArgs e)
        {
            var formattedMessage = e.Data.Message.Trim();

            var splits = new List <string>(formattedMessage.Split(' '));
            var test   = splits[0];

            if (test.Length > 1 && (test[test.Length - 1] == ':' || test[test.Length - 1] == ','))
            {
                test = test.Substring(0, test.Length - 1);
            }
            test = test.ToLower();
            if (test != irc.Nickname.ToLower() && test != "!tgs")
            {
                return;
            }

            splits.RemoveAt(0);
            formattedMessage = String.Join(" ", splits);

            OnChatMessage(this, e.Data.Nick, e.Data.Channel, formattedMessage, CheckAdmin(e.Data), IRCConfig.AdminChannels.Contains(e.Data.Channel.ToLower()));
        }
        private void ShowRss(object sender, IrcEventArgs e)
        {
            var sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;

            if (e.Data.MessageArray.Length < 2)
            {
                foreach (string line in rssFeeds.Select(item => item.Value.FriendlyName).ToLines(350, ", ", "Currently checked feeds: ", "."))
                {
                    BotMethods.SendMessage(SendType.Message, sendto, line);
                }
                return;
            }
            if (e.Data.MessageArray.Length < 3)
            {
                if (rssFeeds.ContainsKey(e.Data.MessageArray[1].ToLower()))
                {
                    var rssFeed = rssFeeds[e.Data.MessageArray[1].ToLower()];
                    BotMethods.SendMessage(SendType.Message, sendto, "Feed '{0}' has {1} Elements, last post was on: {2}.".Fill(rssFeed.FriendlyName, rssFeed.Count, rssFeed.Last));
                }
                else
                {
                    BotMethods.SendMessage(SendType.Message, sendto, "Feed '{0}' does not exists! Try '!rss'.".Fill(e.Data.MessageArray[1].ToLower()));
                }
                return;
            }
            if (rssFeeds.ContainsKey(e.Data.MessageArray[1].ToLower()))
            {
                var rssFeed = rssFeeds[e.Data.MessageArray[1].ToLower()];
                int index;
                if (int.TryParse(e.Data.MessageArray[2], out index))
                {
                    SendFormattedItem(rssFeed, rssFeed[index], sendto);
                }
            }
            else
            {
                BotMethods.SendMessage(SendType.Message, sendto, "Feed '{0}' does not exists! Try '!rss'.".Fill(e.Data.MessageArray[1].ToLower()));
            }
        }
Exemple #19
0
        public void RunCommand(IrcClient client, GroupCollection values, IrcEventArgs eventArgs, IrcBot ircBot)
        {
            string channel = values[1].Value;

            if (!client.IsJoined(channel))
            {
                _log.Info($"Attempted to roll up {channel}, but not in it.");
                client.SendMessage(SendType.Message, eventArgs.Data.Channel, $"Not in channel {channel}");
                return;
            }
            _log.Info($"Rolling up {channel}");
            List <NonRfcChannelUser> users = client.GetChannel(channel).Users.Values.Cast <NonRfcChannelUser>().Where(user => !user.IsChannelAdmin && !user.IsHalfop && !user.IsOwner && !user.IsVoice).ToList();

            if (users.Count == 0)
            {
                client.SendMessage(SendType.Message, eventArgs.Data.Channel, "No users to voice.");
                return;
            }
            string[] usersToVoice = users.Select(user => user.Nick).ToArray();
            _log.Info($"Voicing {usersToVoice.Length} users.");
            client.Voice(channel, usersToVoice);
        }
Exemple #20
0
 private Role GetRoleFromTags(IrcEventArgs e)
 {
     if (ActiveChannels[e.Data.Channel].IsSuperMod(e.Data.Nick))
     {
         return(Role.SuperMod);
     }
     else
     {
         if (e.Data.Tags != null)
         {
             //Ref: https://dev.twitch.tv/docs/irc/tags/
             if (e.Data.Tags.ContainsKey("badges") && e.Data.Tags["badges"].Contains("broadcaster/1"))
             {
                 return(Role.SuperMod);
             }
             if (e.Data.Tags.ContainsKey("mod") && e.Data.Tags["mod"] == "1")
             {
                 return(Role.Mod);
             }
             else if (e.Data.Tags.ContainsKey("badges") && e.Data.Tags["badges"].Contains("vip/1"))
             {
                 return(Role.VIP);
             }
             else if (e.Data.Tags.ContainsKey("badges") && e.Data.Tags["badges"].Contains("subscriber/1"))
             {
                 return(Role.Subscriber);
             }
             else
             {
                 return(Role.User);
             }
         }
         else
         {
             return(Role.User);
         }
     }
 }
Exemple #21
0
        public void RunCommand(IrcClient client, GroupCollection values, IrcEventArgs eventArgs, IrcBot ircBot)
        {
            RandomKickConfigModel config =
                ConfigHelpers.LoadConfig <RandomKickConfigModel>(ConfigHelpers.ConfigPaths.RandomKickConfig);

            if (!config.Enabled)
            {
                return;
            }

            RandomKickConfigModel.RandomKickTarget target =
                config.Targets.FirstOrDefault(t => t.Nick == eventArgs.Data.From.GetNick());

            if (target == null)
            {
                return;
            }

            // Adding the target chance is just so that it doesn't end up with negative numbers
            // I don't know if negatives would be an issue but let's not find out the hard way
            int rangeBase =
                new Random(Guid.NewGuid().GetHashCode()).Next(0 + target.Chance,
                                                              config.ChanceThreshold + target.Chance);
            int chance =
                new Random(Guid.NewGuid().GetHashCode()).Next(0 + target.Chance,
                                                              config.ChanceThreshold + target.Chance);

            _log.Debug($"Got range {rangeBase} and chance {chance} for kicking {eventArgs.Data.From.GetNick()} in {eventArgs.Data.Channel}, their configured chance is {target.Chance}");
            _log.Debug($"Range for {chance} to fall in is {rangeBase - (target.Chance / 2)}-{rangeBase + (target.Chance / 2)}");

            if (chance >= rangeBase - (target.Chance / 2) && chance <= rangeBase + (target.Chance / 2))
            {
                string message =
                    config.MessageList[new Random(Guid.NewGuid().GetHashCode()).Next(0, config.MessageList.Count - 1)];
                _log.Info($"Going to kick {eventArgs.Data.From} now");
                client.RfcKick(eventArgs.Data.Channel, eventArgs.Data.From.GetNick(), message);
            }
        }
Exemple #22
0
        private void PosterStats(IrcEventArgs e)
        {
            int     posts = 0, lines = 0;
            var     groups      = new Dictionary <string, int>();
            Article lastArticle = null;
            string  lastGroup   = "no group";

            foreach (KeyValuePair <string, Dictionary <string, Article> > group in nntpCache)
            {
                foreach (var article in group.Value.Where(article => article.Value.Header.From.Split(new[] { '@' })[0] == e.Data.MessageArray[1]))
                {
                    posts++;
                    lines += article.Value.Header.LineCount;
                    if (!groups.ContainsKey(group.Key))
                    {
                        groups.Add(group.Key, 0);
                    }
                    groups[group.Key]++;
                    if (lastArticle == null || article.Value.Header.Date > lastArticle.Header.Date)
                    {
                        lastArticle = article.Value;
                        lastGroup   = group.Key;
                    }
                }
            }
            if (posts > 0)
            {
                if (lastArticle != null)
                {
                    var t = (DateTime.Now - lastArticle.Header.Date);
                    BotMethods.SendMessage(SendType.Message, e.Data.Channel, "Poster " + e.Data.MessageArray[1] + " has posted " + posts + " times, in " + groups.Count + " groups and wrote " + lines + " lines of text. Last post: " + IrcConstants.IrcBold + lastArticle.Header.Subject + IrcConstants.IrcBold + " in Board " + lastGroup + " (" + Math.Round(t.TotalHours) + " hours ago)");
                }
            }
            else
            {
                BotMethods.SendMessage(SendType.Message, e.Data.Channel, "Poster " + e.Data.MessageArray[1] + " not found.");
            }
        }
Exemple #23
0
 private TwitchRightsEnum GetRoleFromTags(IrcEventArgs e)
 {
     if (irc.supermod.Contains(e.Data.Nick))
     {
         return(TwitchRightsEnum.Admin);
     }
     else
     {
         if (e.Data.Tags != null)
         {
             //Ref: https://dev.twitch.tv/docs/irc/tags/
             if (e.Data.Tags.ContainsKey("badges") && e.Data.Tags["badges"].Contains("broadcaster/1"))
             {
                 return(TwitchRightsEnum.Admin);
             }
             if (e.Data.Tags.ContainsKey("mod") && e.Data.Tags["mod"] == "1")
             {
                 return(TwitchRightsEnum.Mod);
             }
             else if (e.Data.Tags.ContainsKey("badges") && e.Data.Tags["badges"].Contains("vip/1"))
             {
                 return(TwitchRightsEnum.TrustedSub);
             }
             else if (e.Data.Tags.ContainsKey("badges") && e.Data.Tags["badges"].Contains("subscriber/1"))
             {
                 return(TwitchRightsEnum.TrustedSub);
             }
             else
             {
                 return(TwitchRightsEnum.Public);
             }
         }
         else
         {
             return(TwitchRightsEnum.Public);
         }
     }
 }
Exemple #24
0
        void ClientOnOnChannelMessage(object sender, IrcEventArgs ircEventArgs)
        {
            string msg = ircEventArgs.Data.Message;

            if (msg == null)
            {
                return;
            }
            if (msg.Contains(_botNick))
            {
                var msgHashes = GenerateMsgHashes(msg.ToLower());

                var scores = new int[_responses.Count];
                for (int i = 0; i < _responses.Count; i++)
                {
                    scores[i] = CalculateRelevanceScore(msgHashes, _responses[i].Hashes);
                }

                var max        = scores.Max();
                var replyIdx   = Array.IndexOf(scores, max);
                var replyToUse = _responses[replyIdx];
                var response   = replyToUse.Message.Insert(replyToUse.InsertOffset, ircEventArgs.Data.Nick);
                //_ircInterface.DebugLog("Response score: " + max);

                //var numwords = response.Split().Length;
                //Thread.Sleep((numwords*200));

                _ircInterface.Client.SendMessage(SendType.Message, ircEventArgs.Data.Channel, response);
                _responses.RemoveAt(replyIdx);
                _responsesConsumed++;

                _usedResponses.Add(replyToUse);
                if (_usedResponses.Count > _reusePreventionSize)
                {
                    _usedResponses.RemoveAt(0);
                }
            }
        }
Exemple #25
0
        private void ListUsers(object sender, IrcEventArgs e)
        {
            string sendto = (string.IsNullOrEmpty(e.Data.Channel)) ? e.Data.Nick : e.Data.Channel;

            if (e.Data.MessageArray.Length > 1)
            {
                if (groups.ContainsKey(EnsureGroupPrefix(e.Data.MessageArray[1])))
                {
                    foreach (string line in groups[EnsureGroupPrefix(e.Data.MessageArray[1])].ToLines(350, ", ", "Users in Group '" + EnsureGroupPrefix(e.Data.MessageArray[1]) + "': ", " END."))
                    {
                        bot.SendMessage(SendType.Message, sendto, line);
                    }
                }
                else
                {
                    bot.SendMessage(SendType.Message, sendto, "No such group.");
                }
            }
            else
            {
                bot.SendMessage(SendType.Message, sendto, "Too few arguments! Try !help.");
            }
        }
        public void RunCommand(IrcClient client, GroupCollection values, IrcEventArgs eventArgs, IrcBot ircBot)
        {
            var min = Convert.ToInt32(values[1].Value);
            var max = Convert.ToInt32(values[2].Value);

            if (min < 1)
            {
                client.SendMessage(SendType.Message, eventArgs.Data.Channel, "Min value too small");
                return;
            }
            if (max > 2000)
            {
                client.SendMessage(SendType.Message, eventArgs.Data.Channel, "Max value is unreasonably large");
                return;
            }

            List <int> randomValues = new List <int> {
                min, max
            };

            File.WriteAllText(Path.Join("Config", "ree.json"), JsonConvert.SerializeObject(randomValues));
            client.SendMessage(SendType.Message, eventArgs.Data.Channel, $"Modified ree config with {string.Join(", ", randomValues.ToArray())}");
        }
Exemple #27
0
        public void irc_OnQueryMessage(object sender, IrcEventArgs e)
        {
            Dictionary <string, string> dictionary;

            if (!this.channelsText.ContainsKey(e.Data.Nick))
            {
                this.channelsText[e.Data.Nick] = string.Empty;
            }
            else if (this.channelsText[e.Data.Nick].Length > 2)
            {
                string nick;
                (dictionary = this.channelsText)[nick = e.Data.Nick] = dictionary[nick] + "\r\n";
            }
            string str = string.Format(this.DateTimeString + "{0}: {1}", e.Data.Nick, e.Data.Message);
            string nick2;

            (dictionary = this.channelsText)[nick2 = e.Data.Nick] = dictionary[nick2] + str;
            if (this.channelsScrolls.ContainsKey(e.Data.Nick))
            {
                this.channelsScrolls[e.Data.Nick] = new Vector2(0f, 3.40282347E+38f);
            }
            if (!ChatRoom.IsShowing)
            {
                ChatRoom.NewMessageAvailable = true;
            }
            List <string> list = new List <string>();

            list.AddRange(ChatRoom.irc.GetChannels());
            for (int i = 0; i < list.Count; i++)
            {
                if (!string.IsNullOrEmpty(e.Data.Nick) && e.Data.Nick.Equals(list[i]) && this.unreadTextChannels.Length > i)
                {
                    this.unreadTextChannels[i] = 1;
                }
            }
            ChatRoom.UpdateText = true;
        }
Exemple #28
0
        private void RemoveFact(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 for 'remove'! Try '!help !-fact'.");
                return;
            }
            var fact = factoidData.Facts.Where(f => f.FactKey == e.Data.MessageArray[1]).SingleOrDefault();

            if (fact != null)
            {
                factoidData.Facts.DeleteOnSubmit(fact);

                BotMethods.SendMessage(SendType.Message, sendto, "I forgot Fact '" + fact.FactKey + "'.");

                factoidData.SubmitChanges();
            }
            else
            {
                BotMethods.SendMessage(SendType.Message, sendto, "I don't know fact '" + e.Data.MessageArray[1] + "'.");
            }
        }
Exemple #29
0
        private static void OnChannelMessage(object sender, IrcEventArgs e)
        {
            string fakeNick, faction;
            string message = GetMetadata(e.Data.Message, out fakeNick, out faction);

            // If some cheeky m8 just sends delimiters, ignore it
            if (message.Length > 0)
            {
                string nick;
                if (fakeNick == null)
                {
                    nick    = e.Data.Nick;
                    faction = crcNicks.ContainsKey(nick) ? crcNicks[nick] : "actor_stalker";
                }
                else if (CRCOptions.ReceiveDeath && (DateTime.Now - lastDeath).TotalSeconds > CRCOptions.DeathInterval)
                {
                    lastDeath = DateTime.Now;
                    nick      = e.Data.Nick; //fakeNick;
                }
                else
                {
                    return;
                }
                if (message.Contains(CRCOptions.Name))
                {
                    SystemSounds.Asterisk.Play();
                    CRCDisplay.OnHighlightMessage(nick, message);
                    CRCGame.OnHighlightMessage(nick, faction, message);
                }
                else
                {
                    CRCDisplay.OnChannelMessage(nick, message);
                    CRCGame.OnChannelMessage(nick, faction, message);
                }
            }
        }
Exemple #30
0
        // this method will get all IRC messages
        public static void OnRawMessage(object sender, IrcEventArgs e)
        {
            var nick    = e.Data.Nick;
            var channel = e.Data.Channel;
            var rawmsg  = e.Data.RawMessage;

            if (e.Data.RawMessageArray.Length > 1 && e.Data.RawMessageArray[1] == "QUIT")
            {
                OnUserQuit(nick);
            }

            System.Console.WriteLine("Received: " + e.Data.RawMessage);

            if (channel != null && nick != null)
            {
                // System.Console.WriteLine("channel = {0}, user = {1}, message = {2}", e.Data.Channel, e.Data.Nick, e.Data.Message);
                // OnChannelMessage(sender, e);
            }

            if (e.Data.RawMessage.Contains("@VERSION@"))
            {
                System.Console.WriteLine("got @VERSION@");
            }
        }
Exemple #31
0
        private void Irc_Received(object sender, IrcEventArgs e)
        {
            if (e.Handled)
                return;

            switch (e.Command)
            {
                case "PRIVMSG": OnIrcPrivMsg(sender, e); break;
                case "NOTICE": OnIrcNotice(sender, e); break;
                case "001": OnIrcWelcome(sender, e); break;
            }
        }
Exemple #32
0
        // this method we will use to analyse queries (also known as private messages)
        public static void OnQueryMessage(object sender, IrcEventArgs e)
        {
            switch (e.Data.MessageArray[0])
            {
                // debug stuff
                case "dump_channel":
                    string requested_channel = e.Data.MessageArray[1];
                    // getting the channel (via channel sync feature)
                    Channel channel = irc.GetChannel(requested_channel);

                    // here we send messages
                    irc.SendMessage(SendType.Message, e.Data.Nick, "<channel '" + requested_channel + "'>");

                    irc.SendMessage(SendType.Message, e.Data.Nick, "Name: '" + channel.Name + "'");
                    irc.SendMessage(SendType.Message, e.Data.Nick, "Topic: '" + channel.Topic + "'");
                    irc.SendMessage(SendType.Message, e.Data.Nick, "Mode: '" + channel.Mode + "'");
                    irc.SendMessage(SendType.Message, e.Data.Nick, "Key: '" + channel.Key + "'");
                    irc.SendMessage(SendType.Message, e.Data.Nick, "UserLimit: '" + channel.UserLimit + "'");

                    // here we go through all users of the channel and show their
                    // hashtable key and nickname
                    string nickname_list = "";
                    nickname_list += "Users: ";
                    IDictionaryEnumerator it = channel.Users.GetEnumerator();
                    while (it.MoveNext())
                    {
                        string key = (string)it.Key;
                        ChannelUser channeluser = (ChannelUser)it.Value;
                        nickname_list += "(";
                        if (channeluser.IsOp)
                        {
                            nickname_list += "@";
                        }
                        if (channeluser.IsVoice)
                        {
                            nickname_list += "+";
                        }
                        nickname_list += ")" + key + " => " + channeluser.Nick + ", ";
                    }
                    irc.SendMessage(SendType.Message, e.Data.Nick, nickname_list);

                    irc.SendMessage(SendType.Message, e.Data.Nick, "</channel>");
                    break;
                case "gc":
                    GC.Collect();
                    break;
                // typical commands
                case "join":
                    irc.RfcJoin(e.Data.MessageArray[1]);
                    break;
                case "part":
                    irc.RfcPart(e.Data.MessageArray[1]);
                    break;
                case "die":
                    Exit();
                    break;
            }
        }
Exemple #33
0
 private void OnIrcPrivMsg(object sender, IrcEventArgs e)
 {
     for (int i = 0; i < e.Args[1].Length; i++)
         if (!ChraftConfig.AllowedChatChars.Contains(e.Args[1][i]))
             return;
     Server.Broadcast("§7[IRC] " + e.Prefix.Nickname + ":§f " + e.Args[1]);
     e.Handled = true;
 }
Exemple #34
0
 private void OnIrcWelcome(object sender, IrcEventArgs e)
 {
     Irc.Join(RunningConfiguration.Channel);
 }
Exemple #35
0
 // this method will get all IRC messages
 public static void OnRawMessage(object sender, IrcEventArgs e)
 {
     Console.WriteLine("Received: " + e.Data.RawMessage);
 }
Exemple #36
0
        // this method we will use to analyse queries (also known as private messages)
        public static void OnQueryMessage(object sender, IrcEventArgs e)
        {
            switch (e.Data.MessageArray[0])
            {
                // debug stuff
                case "dump_channel":
                    string requestedChannel = e.Data.MessageArray[1];
                    // getting the channel (via channel sync feature)
                    Channel channel = Client.GetChannel(requestedChannel);

                    // here we send messages
                    Client.SendMessage(SendType.Message, e.Data.Nick, "<channel '" + requestedChannel + "'>");

                    Client.SendMessage(SendType.Message, e.Data.Nick, "Name: '" + channel.Name + "'");
                    Client.SendMessage(SendType.Message, e.Data.Nick, "Topic: '" + channel.Topic + "'");
                    Client.SendMessage(SendType.Message, e.Data.Nick, "Mode: '" + channel.Mode + "'");
                    Client.SendMessage(SendType.Message, e.Data.Nick, "Key: '" + channel.Key + "'");
                    Client.SendMessage(SendType.Message, e.Data.Nick, "UserLimit: '" + channel.UserLimit + "'");

                    // here we go through all users of the channel and show their
                    // hashtable key and nickname
                    string nicknameList = "";
                    nicknameList += "Users: ";
                    foreach (DictionaryEntry de in channel.Users)
                    {
                        string key = (string)de.Key;
                        var channeluser = (ChannelUser)de.Value;
                        nicknameList += "(";
                        if (channeluser.IsOp)
                        {
                            nicknameList += "@";
                        }
                        if (channeluser.IsVoice)
                        {
                            nicknameList += "+";
                        }
                        nicknameList += ")" + key + " => " + channeluser.Nick + ", ";
                    }
                    Client.SendMessage(SendType.Message, e.Data.Nick, nicknameList);

                    Client.SendMessage(SendType.Message, e.Data.Nick, "</channel>");
                    break;
                case "gc":
                    GC.Collect();
                    break;
                // typical commands
                case "join":
                    Client.RfcJoin(e.Data.MessageArray[1]);
                    break;
                case "part":
                    Client.RfcPart(e.Data.MessageArray[1]);
                    break;
                case "die":
                    Exit();
                    break;
                case "server_properties":
                    foreach (var property in Client.Properties)
                    {
                        Client.SendMessage(SendType.Message, e.Data.Nick, property.Key + " => " + property.Value);

                    }
                    break;
            }
        }
Exemple #37
0
        private void OnReceive(HostMask prefix, string command, string[] args)
        {
            _logger.Log(LogLevel.Debug, _plugin.Name, "OnReceive - {0}, {1}, {2}", prefix.Mask, command, args);

            if (Received != null)
            {
                IrcEventArgs e = new IrcEventArgs(prefix, command, args);
                Received.Invoke(this, e);
                if (e.Handled)
                    return;
            }

            switch (command)
            {
                case "NICK": OnNick(prefix, args); break;
                case "PING": OnPing(args); break;
                case "001": OnWelcome(args); break;
                case "002": OnYourHost(args); break;
                case "003": OnCreated(args); break;
                case "004": OnMyInfo(args); break;
            }
        }