Esempio n. 1
0
        public override void ParseMessage(ITwitchMessage twitchMessage)
        {
            // If it is a whisper, do not update viewer details
            if (twitchMessage.ChatMessage == null)
            {
                return;
            }

            Viewer             viewer    = Viewers.GetViewer(twitchMessage.Username);
            GameComponentPawns component = Current.Game.GetComponent <GameComponentPawns>();

            ToolkitSettings.ViewerColorCodes[twitchMessage.Username.ToLower()] = twitchMessage.ChatMessage.ColorHex;

            if (component.HasUserBeenNamed(twitchMessage.Username))
            {
                component.PawnAssignedToUser(twitchMessage.Username).story.hairColor = twitchMessage.ChatMessage.Color;
            }

            if (twitchMessage.ChatMessage.IsModerator && !viewer.mod)
            {
                viewer.SetAsModerator();
            }

            if (twitchMessage.ChatMessage.IsSubscriber && !viewer.IsSub)
            {
                viewer.subscriber = true;
            }

            if (twitchMessage.ChatMessage.IsVip && !viewer.IsVIP)
            {
                viewer.vip = true;
            }
        }
        public override void ParseCommand(ChatMessage msg)
        {
            Viewer             viewer    = Viewers.GetViewer(msg.Username);
            GameComponentPawns component = Current.Game.GetComponent <GameComponentPawns>();

            ToolkitSettings.ViewerColorCodes[msg.Username.ToLower()] = msg.ColorHex;

            if (component.HasUserBeenNamed(msg.Username))
            {
                component.PawnAssignedToUser(msg.Username).story.hairColor = msg.Color;
            }

            if (msg.IsModerator && !viewer.mod)
            {
                viewer.SetAsModerator();
            }

            if (msg.IsSubscriber && !viewer.IsSub)
            {
                viewer.subscriber = true;
            }

            if (msg.IsVip && !viewer.IsVIP)
            {
                viewer.vip = true;
            }
        }
Esempio n. 3
0
        public override void RunCommand(ITwitchMessage twitchMessage)
        {
            Viewer viewer = Viewers.GetViewer(twitchMessage.Username);

            GameComponentPawns pawnComponent = Current.Game.GetComponent <GameComponentPawns>();

            if (pawnComponent.HasUserBeenNamed(twitchMessage.Username) || pawnComponent.UserInViewerQueue(twitchMessage.Username))
            {
                return;
            }

            if (ToolkitSettings.ChargeViewersForQueue)
            {
                if (viewer.GetViewerCoins() < ToolkitSettings.CostToJoinQueue)
                {
                    TwitchWrapper.SendChatMessage($"@{twitchMessage.Username} you do not have enough coins to purchase a ticket, it costs {ToolkitSettings.CostToJoinQueue} and you have {viewer.GetViewerCoins()}.");
                    return;
                }

                viewer.TakeViewerCoins(ToolkitSettings.CostToJoinQueue);
            }

            pawnComponent.AddViewerToViewerQueue(twitchMessage.Username);
            TwitchWrapper.SendChatMessage($"@{twitchMessage.Username} you have purchased a ticket and are in the queue!");
        }
Esempio n. 4
0
        public override void RunCommand(IRCMessage message)
        {
            Viewer viewer = Viewers.GetViewer(message.User);

            GameComponentPawns pawnComponent = Current.Game.GetComponent <GameComponentPawns>();

            if (pawnComponent.HasUserBeenNamed(message.User) || pawnComponent.UserInViewerQueue(message.User))
            {
                return;
            }

            if (ToolkitSettings.ChargeViewersForQueue)
            {
                if (viewer.GetViewerCoins() < ToolkitSettings.CostToJoinQueue)
                {
                    Toolkit.client.SendMessage($"@{message.User} you do not have enough coins to purchase a ticket, it costs {ToolkitSettings.CostToJoinQueue} and you have {viewer.GetViewerCoins()}.", CommandsHandler.SendToChatroom(message));
                    return;
                }

                viewer.TakeViewerCoins(ToolkitSettings.CostToJoinQueue);
            }

            pawnComponent.AddViewerToViewerQueue(message.User);
            Toolkit.client.SendMessage($"@{message.User} you have purchased a ticket and are in the queue!", CommandsHandler.SendToChatroom(message));
        }
Esempio n. 5
0
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.viewer          = viewer;
            string[] command = message.Split(' ');
            if (command.Length < 4)
            {
                Toolkit.client.SendMessage($"@{viewer.username} syntax is {this.storeIncident.syntax}", separateChannel);
                return(false);
            }

            GameComponentPawns gameComponent = Current.Game.GetComponent <GameComponentPawns>();

            if (!gameComponent.HasUserBeenNamed(viewer.username))
            {
                Toolkit.client.SendMessage($"@{viewer.username} you must be in the colony to use this command.", separateChannel);
                return(false);
            }

            if (!VariablesHelpers.PointsWagerIsValid(
                    command[3],
                    viewer,
                    ref pointsWager,
                    ref storeIncident,
                    separateChannel
                    ))
            {
                return(false);
            }

            string          skillKind = command[2].ToLower();
            List <SkillDef> allSkills = DefDatabase <SkillDef> .AllDefs.Where(s =>
                                                                              string.Join("", s.defName.Split(' ')).ToLower() == skillKind ||
                                                                              string.Join("", s.label.Split(' ')).ToLower() == skillKind
                                                                              ).ToList();

            if (allSkills.Count < 1)
            {
                Toolkit.client.SendMessage($"@{viewer.username} skill {skillKind} not found.", separateChannel);
                return(false);
            }

            skill = allSkills[0];
            pawn  = gameComponent.PawnAssignedToUser(viewer.username);

            if (pawn.skills.GetSkill(skill).TotallyDisabled)
            {
                Toolkit.client.SendMessage($"@{viewer.username} skill {skillKind} disabled on your pawn.", separateChannel);
                return(false);
            }

            if (pawn.skills.GetSkill(skill).levelInt >= 20)
            {
                Toolkit.client.SendMessage($"@{viewer.username} skill {skillKind} disabled on your pawn.", separateChannel);
                return(false);
            }

            return(true);
        }
Esempio n. 6
0
        public NameQueueDialog()
        {
            GetTranslations();

            doCloseX       = true;
            forcePause     = true;
            _pawnComponent = Current.Game.GetComponent <GameComponentPawns>();

            _allPawns        = Find.ColonistBar.Entries.Select(e => e.pawn).ToList();
            _currentDiceSide = Textures.DiceSides.RandomElement();

            _current = _allPawns.FirstOrDefault(p => !_pawnComponent.HasPawnBeenNamed(p)) ?? _allPawns.FirstOrDefault();
            Notify__CurrentPawnChanged();
        }
Esempio n. 7
0
        private static void RenameAndRemove([CanBeNull] GameComponentPawns component, [CanBeNull] string username)
        {
            if (username == null || component == null)
            {
                return;
            }

            Pawn pawn = component.PawnAssignedToUser(username);

            if (pawn?.Name is NameTriple name)
            {
                pawn.Name = new NameTriple(name.First, name.Last, name.Last);
            }

            component.pawnHistory.Remove(username);
        }
Esempio n. 8
0
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.viewer          = viewer;

            GameComponentPawns gameComponent = Current.Game.GetComponent <GameComponentPawns>();

            if (!gameComponent.HasUserBeenNamed(viewer.username))
            {
                Toolkit.client.SendMessage($"@{viewer.username} you must be in the colony to use this command.", separateChannel);
                return(false);
            }

            pawn = gameComponent.PawnAssignedToUser(viewer.username);

            Log.Warning("changing gneder");
            return(true);
        }
Esempio n. 9
0
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.Viewer          = viewer;
            string[] command = message.Split(' ');
            if (command.Length < 3)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} syntax is {this.storeIncident.syntax}");
                return(false);
            }

            GameComponentPawns gameComponent = Current.Game.GetComponent <GameComponentPawns>();

            if (!gameComponent.HasUserBeenNamed(viewer.username))
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} you must be in the colony to use this command.");
                return(false);
            }

            pawn = gameComponent.PawnAssignedToUser(viewer.username);

            if (pawn.story.traits.allTraits != null && pawn.story.traits.allTraits.Count <= 0)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} your pawn doesn't have any traits.");
                return(false);
            }

            string traitKind = command[2].ToLower();

            BuyableTrait search = AllTraits.buyableTraits.Find(s => traitKind == s.label);

            if (search == null)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} trait {traitKind} not found.");
                return(false);
            }

            buyableTrait = search;

            return(true);
        }
        protected static Pawn GetPawnIfAllowed(IRCMessage message)
        {
            Viewer             viewer    = Viewers.GetViewer(message.User);
            GameComponentPawns component = Current.Game.GetComponent <GameComponentPawns>();

            if (!CommandsHandler.AllowCommand(message))
            {
                // No commands allowed in this channel
                return(null);
            }

            Log.Message($"Parsing command {message.Message} from {message.User}");

            if (!component.HasUserBeenNamed(viewer.username))
            {
                Toolkit.client.SendMessage($"@{viewer.username} you are not in the colony.", CommandsHandler.SendToChatroom(message));
                return(null);
            }

            return(component.PawnAssignedToUser(viewer.username));
        }
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.Viewer          = viewer;
            string[] command = message.Split(' ');


            GameComponentPawns gameComponent = Current.Game.GetComponent <GameComponentPawns>();

            if (gameComponent.HasUserBeenNamed(viewer.username))
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} you are in the colony and cannot visit.");
                return(false);
            }

            worker     = new IncidentWorker_VisitColony(viewer);
            worker.def = IncidentDef.Named("VisitColony");

            parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.Misc, Helper.AnyPlayerMap);

            return(true);
        }
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.viewer          = viewer;
            string[] command = message.Split(' ');


            GameComponentPawns gameComponent = Current.Game.GetComponent <GameComponentPawns>();

            if (gameComponent.HasUserBeenNamed(viewer.username))
            {
                Toolkit.client.SendMessage($"@{viewer.username} you are already in the colony.", separateChannel);
                return(false);
            }

            worker     = new IncidentWorker_PrisonerJoins();
            worker.def = IncidentDefOf.WandererJoin;

            parms = StorytellerUtility.DefaultParmsNow(IncidentCategoryDefOf.Misc, Helper.AnyPlayerMap);

            return(true);
        }
Esempio n. 13
0
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.Viewer          = viewer;
            string[] command = message.Split(' ');
            if (command.Length < 3)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} syntax is {this.storeIncident.syntax}");
                return(false);
            }

            GameComponentPawns gameComponent = Current.Game.GetComponent <GameComponentPawns>();

            if (!gameComponent.HasUserBeenNamed(viewer.username))
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} you must be in the colony to use this command.");
                return(false);
            }

            pawn = gameComponent.PawnAssignedToUser(viewer.username);

            float customMaxTraits = AddTraitSettings.maxTraits > 0 ? AddTraitSettings.maxTraits : 4;

            if (pawn.story.traits.allTraits != null && pawn.story.traits.allTraits.Count >= customMaxTraits)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} your pawn already has max {customMaxTraits} traits.");
                return(false);
            }

            string traitKind = command[2].ToLower();

            BuyableTrait search = AllTraits.buyableTraits.Find(s => traitKind == s.label);


            if (search == null)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} trait {traitKind} not found.");
                return(false);
            }

            buyableTrait = search;
            traitDef     = buyableTrait.def;

            //if (!pawn.story.traits.allTraits.Any((Trait tr) =>
            //    traitDef.ConflictsWith(tr)) &&
            //    (traitDef.conflictingTraits == null ||
            //    !traitDef.conflictingTraits.Any((TraitDef tr) => pawn.story.traits.HasTrait(tr))))
            //{
            //    return true;
            //}

            trait = new Trait(traitDef, buyableTrait.degree);

            foreach (Trait tr in pawn.story.traits.allTraits)
            {
                if (tr.def.ConflictsWith(trait) || traitDef.ConflictsWith(tr))
                {
                    TwitchWrapper.SendChatMessage($"@{viewer.username} {traitDef.defName} conflicts with your pawn's trait {tr.LabelCap}.");
                    return(false);
                }
            }

            if (pawn.story.traits.allTraits != null && pawn.story.traits.allTraits.Find(s => s.def.defName == search.def.defName) != null)
            {
                TwitchWrapper.SendChatMessage($"@{viewer.username} you already have this trait of this type.");
                return(false);
            }

            return(true);
        }
Esempio n. 14
0
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.viewer          = viewer;
            string[] command = message.Split(' ');
            if (command.Length < 3)
            {
                Toolkit.client.SendMessage($"@{viewer.username} syntax is {this.storeIncident.syntax}", separateChannel);
                return(false);
            }

            GameComponentPawns gameComponent = Current.Game.GetComponent <GameComponentPawns>();

            if (!gameComponent.HasUserBeenNamed(viewer.username))
            {
                Toolkit.client.SendMessage($"@{viewer.username} you must be in the colony to use this command.", separateChannel);
                return(false);
            }

            pawn = gameComponent.PawnAssignedToUser(viewer.username);

            if (pawn.story.traits.allTraits != null && pawn.story.traits.allTraits.Count >= 4)
            {
                Toolkit.client.SendMessage($"@{viewer.username} your pawn already has max 4 traits.", separateChannel);
                return(false);
            }

            string traitKind = command[2].ToLower();

            List <TraitDef> allTraits = DefDatabase <TraitDef> .AllDefs.Where(s =>
                                                                              string.Join("", s.defName.Split(' ')).ToLower() == traitKind
                                                                              ).ToList();


            if (allTraits.Count < 1)
            {
                Toolkit.client.SendMessage($"@{viewer.username} skill {traitKind} not found.", separateChannel);
                return(false);
            }

            traitDef = allTraits[0];

            if (!pawn.story.traits.allTraits.Any((Trait tr) =>
                                                 traitDef.ConflictsWith(tr)) &&
                (traitDef.conflictingTraits == null ||
                 !traitDef.conflictingTraits.Any((TraitDef tr) => pawn.story.traits.HasTrait(tr))))
            {
                return(true);
            }

            foreach (Trait tr in pawn.story.traits.allTraits)
            {
                if (tr.def.ConflictsWith(trait) || traitDef.ConflictsWith(tr))
                {
                    Toolkit.client.SendMessage($"@{viewer.username} {traitDef.defName} conflicts with your pawn's trait {tr.LabelCap}.");
                    return(false);
                }
            }

            return(true);
        }
Esempio n. 15
0
        public static void CheckCommand(IRCMessage msg)
        {
            if (msg == null)
            {
                return;
            }

            if (msg.Message == null)
            {
                return;
            }

            string message = msg.Message;
            string user    = msg.User;

            if (message.Split(' ')[0] == "/w")
            {
                List <string> messagewhisper = message.Split(' ').ToList();
                messagewhisper.RemoveAt(0);
                message = string.Join(" ", messagewhisper.ToArray());
                Helper.Log(message);
            }

            Viewer viewer = Viewers.GetViewer(user);

            viewer.last_seen = DateTime.Now;

            if (viewer.IsBanned)
            {
                return;
            }

            //admin commands
            if (user.ToLower() == ToolkitSettings.Channel.ToLower())
            {
                if (message.StartsWith("!resetviewers"))
                {
                    if (ToolkitSettings.SyncStreamLabs)
                    {
                        WarningWindow window = new WarningWindow
                        {
                            warning = "You must reset viewers in Streamlabs chatbot and then restart the game."
                        };
                        Find.WindowStack.Add(window);
                    }
                    else if (resetWarning == 0)
                    {
                        _client.SendMessage($"@{user} " + "TwitchToolkitResetViewersWarningOne".Translate(), SendToChatroom(msg.Channel));
                        resetWarning = 1;
                    }
                    else if (resetWarning == 1)
                    {
                        _client.SendMessage($"@{user} " + "TwitchToolkitResetViewersWarningTwo".Translate(), SendToChatroom(msg.Channel));
                        resetWarning = 2;
                    }
                    else if (resetWarning == 2)
                    {
                        _client.SendMessage($"@{user} " + "TwitchToolkitResetViewersWarningThree".Translate(), SendToChatroom(msg.Channel));
                        Viewers.ResetViewers();
                        resetWarning = 0;
                    }
                }

                if (message.StartsWith("!addtoolkitmod"))
                {
                    string[] command = message.Split(' ');

                    if (command.Length < 2)
                    {
                        return;
                    }

                    string mod = command[1].Replace("@", "").ToLower();

                    if (Viewer.IsModerator(mod))
                    {
                        _client.SendMessage($"@{user} " + Helper.ReplacePlaceholder("TwitchToolkitAlreadyMod".Translate(), mod: mod), SendToChatroom(msg.Channel));
                        return;
                    }

                    Viewer modviewer = Viewers.GetViewer(mod);

                    modviewer.SetAsModerator();
                    _client.SendMessage($"@{user} " + Helper.ReplacePlaceholder("TwitchToolkitAddedMod".Translate(), mod: mod), SendToChatroom(msg.Channel));
                }

                if (message.StartsWith("!removetoolkitmod"))
                {
                    string[] command = message.Split(' ');

                    if (command.Length < 2)
                    {
                        return;
                    }

                    string mod = command[1].Replace("@", "").ToLower();

                    if (!Viewer.IsModerator(mod))
                    {
                        return;
                    }

                    Viewer modviewer = Viewers.GetViewer(mod);

                    modviewer.RemoveAsModerator();
                    _client.SendMessage($"@{user} " + Helper.ReplacePlaceholder("TwitchToolkitRemovedMod".Translate(), mod: mod), SendToChatroom(msg.Channel));
                }
            }

            //moderator commands
            if (user.ToLower() == ToolkitSettings.Channel.ToLower() || Viewer.IsModerator(user))
            {
                if (message.StartsWith("!refreshviewers"))
                {
                    TwitchToolkitDev.WebRequest_BeginGetResponse.Main("https://tmi.twitch.tv/group/user/" + ToolkitSettings.Channel.ToLower() + "/chatters", new Func <TwitchToolkitDev.RequestState, bool>(Viewers.SaveUsernamesFromJsonResponse));
                }

                if (message.StartsWith("!karmaround"))
                {
                    Viewers.AwardViewersCoins();
                }

                if (message.StartsWith("!giveallcoins"))
                {
                    try
                    {
                        string[] command = message.Split(' ');

                        if (command.Length < 2)
                        {
                            return;
                        }

                        bool isNumeric = int.TryParse(command[1], out int amount);

                        if (isNumeric)
                        {
                            foreach (Viewer vwr in Viewers.All)
                            {
                                vwr.GiveViewerCoins(amount);
                            }
                            _client.SendMessage($"@{user} " + Helper.ReplacePlaceholder("TwitchToolkitGiveAllCoins".Translate(), amount: amount.ToString()), SendToChatroom(msg.Channel));
                        }
                    }
                    catch (InvalidCastException e)
                    {
                        Helper.Log("Give All Coins Syntax Error " + e.Message);
                    }
                }

                if (message.StartsWith("!givecoins"))
                {
                    try
                    {
                        string[] command = message.Split(' ');

                        if (command.Length < 3)
                        {
                            return;
                        }

                        string receiver = command[1].Replace("@", "");

                        if (user.ToLower() != ToolkitSettings.Channel.ToLower() && receiver.ToLower() == user.ToLower())
                        {
                            _client.SendMessage($"@{user} " + "TwitchToolkitModCannotGiveCoins".Translate());
                            return;
                        }

                        int  amount;
                        bool isNumeric = int.TryParse(command[2], out amount);
                        if (isNumeric)
                        {
                            Viewer giftee = Viewers.GetViewer(receiver);

                            Helper.Log($"Giving viewer {giftee.username} {amount} coins");
                            giftee.GiveViewerCoins(amount);
                            _client.SendMessage($"@{user} " + Helper.ReplacePlaceholder("TwitchToolkitGivingCoins".Translate(), viewer: giftee.username, amount: amount.ToString(), newbalance: giftee.coins.ToString()), SendToChatroom(msg.Channel));
                            Store_Logger.LogGiveCoins(user, giftee.username, amount);
                        }
                    }
                    catch (InvalidCastException e)
                    {
                        Helper.Log("Invalid Give Viewer Coins Command " + e.Message);
                    }
                }

                if (message.StartsWith("!checkuser"))
                {
                    try
                    {
                        string[] command = message.Split(' ');

                        if (command.Length < 2)
                        {
                            return;
                        }

                        string target = command[1].Replace("@", "");

                        Viewer targeted = Viewers.GetViewer(target);
                        _client.SendMessage($"@{user} " + Helper.ReplacePlaceholder("TwitchToolkitCheckUser".Translate(), viewer: targeted.username, amount: targeted.coins.ToString(), karma: targeted.GetViewerKarma().ToString()), SendToChatroom(msg.Channel));
                    }
                    catch (InvalidCastException e)
                    {
                        Helper.Log("Invalid Check User Command " + e.Message);
                    }
                }

                if (message.StartsWith("!setkarma"))
                {
                    try
                    {
                        string[] command = message.Split(' ');

                        if (command.Length < 3)
                        {
                            return;
                        }

                        string target = command[1].Replace("@", "");
                        int    amount;
                        bool   isNumeric = int.TryParse(command[2], out amount);
                        if (isNumeric)
                        {
                            Viewer targeted = Viewers.GetViewer(target);
                            targeted.SetViewerKarma(amount);
                            _client.SendMessage($"@{user}" + Helper.ReplacePlaceholder("TwitchToolkitSetKarma".Translate(), viewer: targeted.username, karma: amount.ToString()), SendToChatroom(msg.Channel));
                        }
                    }
                    catch (InvalidCastException e)
                    {
                        Helper.Log("Invalid Check User Command " + e.Message);
                    }
                }

                if (message.StartsWith("!togglecoins"))
                {
                    if (ToolkitSettings.EarningCoins)
                    {
                        ToolkitSettings.EarningCoins = false;
                        _client.SendMessage($"@{user} " + "TwitchToolkitEarningCoinsMessage".Translate() + " " + "TwitchToolkitOff".Translate(), SendToChatroom(msg.Channel));
                    }
                    else
                    {
                        ToolkitSettings.EarningCoins = true;
                        _client.SendMessage($"@{user} " + "TwitchToolkitEarningCoinsMessage".Translate() + " " + "TwitchToolkitOn".Translate(), SendToChatroom(msg.Channel));
                    }
                }

                if (message.StartsWith("!togglestore"))
                {
                    if (ToolkitSettings.StoreOpen)
                    {
                        ToolkitSettings.StoreOpen = false;
                        _client.SendMessage($"@{user} " + "TwitchToolkitStorePurchasesMessage".Translate() + " " + "TwitchToolkitOn".Translate(), SendToChatroom(msg.Channel));
                    }
                    else
                    {
                        ToolkitSettings.StoreOpen = true;
                        _client.SendMessage($"@{user} " + "TwitchToolkitStorePurchasesMessage".Translate() + " " + "TwitchToolkitOn".Translate(), SendToChatroom(msg.Channel));
                    }
                }
            }

            // commands are suppressed when not earning coins
            if (ToolkitSettings.EarningCoins)
            {
                if (message.StartsWith(ToolkitSettings.BalanceCmd) && AllowCommand(msg.Channel))
                {
                    _client.SendMessage($"@{viewer.username} " + Helper.ReplacePlaceholder("TwitchToolkitBalanceMessage".Translate(), amount: viewer.GetViewerCoins().ToString(), karma: viewer.GetViewerKarma().ToString()), true);
                }

                if (message.StartsWith(ToolkitSettings.KarmaCmd) && !message.Contains("!karmaround"))
                {
                    _client.SendMessage($"@{viewer.username} " + "TwitchToolkitWhatIsKarma".Translate() + $" { viewer.GetViewerKarma()}%", SendToChatroom(msg.Channel));
                }

                if (message.StartsWith(ToolkitSettings.InstructionsCmd))
                {
                    _client.SendMessage($"@{user} " + Helper.ReplacePlaceholder("TwitchToolkitInstructions".Translate(), first: ToolkitSettings.BuyeventCmd, second: ToolkitSettings.BuyitemCmd, third: ToolkitSettings.CustomPricingSheetLink), SendToChatroom(msg.Channel));
                }

                if (message.StartsWith(ToolkitSettings.PurchaselistCmd))
                {
                    _client.SendMessage($"@{user} " + "TwitchToolkitPurchaseList".Translate() + $" {ToolkitSettings.CustomPricingSheetLink}", SendToChatroom(msg.Channel));
                }

                if (message.StartsWith(ToolkitSettings.GiftCmd) && ToolkitSettings.GiftingCoins && AllowCommand(msg.Channel))
                {
                    string[] command = message.Split(' ');

                    if (command.Count() < 3)
                    {
                        return;
                    }

                    string target = command[1].Replace("@", "");

                    bool isNumeric = int.TryParse(command[2], out int amount);
                    if (isNumeric && amount > 0)
                    {
                        Viewer giftee = Viewers.GetViewer(target);

                        if (ToolkitSettings.KarmaReqsForGifting)
                        {
                            if (giftee.GetViewerKarma() < ToolkitSettings.MinimumKarmaToRecieveGifts || viewer.GetViewerKarma() < ToolkitSettings.MinimumKarmaToSendGifts)
                            {
                                return;
                            }
                        }

                        if (viewer.GetViewerCoins() >= amount)
                        {
                            viewer.TakeViewerCoins(amount);
                            giftee.GiveViewerCoins(amount);
                            _client.SendMessage($"@{giftee.username} " + Helper.ReplacePlaceholder("TwitchToolkitGiftCoins".Translate(), amount: amount.ToString(), from: viewer.username), true);
                            Store_Logger.LogGiftCoins(viewer.username, giftee.username, amount);
                        }
                    }
                }

                if (message.StartsWith("!buy ticket") && ToolkitSettings.ViewerNamedColonistQueue && AllowCommand(msg.Channel))
                {
                    GameComponentPawns pawnComponent = Current.Game.GetComponent <GameComponentPawns>();

                    if (pawnComponent.HasUserBeenNamed(user) || pawnComponent.UserInViewerQueue(user))
                    {
                        return;
                    }

                    if (ToolkitSettings.ChargeViewersForQueue)
                    {
                        if (viewer.GetViewerCoins() < ToolkitSettings.CostToJoinQueue)
                        {
                            _client.SendMessage($"@{user} you do not have enough coins to purchase a ticket, it costs {ToolkitSettings.CostToJoinQueue} and you have {viewer.GetViewerCoins()}.", SendToChatroom(msg.Channel));
                            return;
                        }

                        viewer.TakeViewerCoins(ToolkitSettings.CostToJoinQueue);
                    }

                    pawnComponent.AddViewerToViewerQueue(user);
                    _client.SendMessage($"@{user} you have purchased a ticket and are in the queue!", SendToChatroom(msg.Channel));
                }
            }

            if (message.StartsWith(ToolkitSettings.ModinfoCmd))
            {
                _client.SendMessage($"@{user} " + "TwitchToolkitModInfo".Translate() + " https://discord.gg/qrtg224 !", SendToChatroom(msg.Channel));
            }

            if (ToolkitSettings.StoreOpen)
            {
                if ((message.StartsWith("!buy") || message.StartsWith("!gambleskill")) && AllowCommand(msg.Channel))
                {
                    if (message.Split(' ').Count() < 2)
                    {
                        return;
                    }
                    Purchase_Handler.ResolvePurchase(viewer, msg, SendToChatroom(msg.Channel));
                }
            }

            if (message.StartsWith(ToolkitSettings.ModsettingsCmd))
            {
                string minutess     = ToolkitSettings.CoinInterval > 1 ? "s" : "";
                string storeon      = ToolkitSettings.StoreOpen ? "TwitchToolkitOn".Translate() : "TwitchToolkitOff".Translate();
                string earningcoins = ToolkitSettings.EarningCoins ? "TwitchToolkitOn".Translate() : "TwitchToolkitOff".Translate();

                string stats_message = Helper.ReplacePlaceholder("TwitchToolkitModSettings".Translate(),
                                                                 amount: ToolkitSettings.CoinAmount.ToString(),
                                                                 first: ToolkitSettings.CoinInterval.ToString(),
                                                                 second: storeon,
                                                                 third: earningcoins,
                                                                 karma: ToolkitSettings.KarmaCap.ToString()
                                                                 );

                _client.SendMessage(stats_message, SendToChatroom(msg.Channel));
            }

            if (message.StartsWith(ToolkitSettings.CommandHelpCmd))
            {
                string commands = " " +
                                  ToolkitSettings.BalanceCmd + ", " +
                                  ToolkitSettings.BuyeventCmd + ", " +
                                  ToolkitSettings.BuyitemCmd + ", " +
                                  ToolkitSettings.InstructionsCmd + ", " +
                                  ToolkitSettings.PurchaselistCmd + ", " +
                                  ToolkitSettings.ModinfoCmd + ", " +
                                  ToolkitSettings.ModsettingsCmd + ", " +
                                  ToolkitSettings.KarmaCmd;

                if (ToolkitSettings.GiftingCoins)
                {
                    commands += ", " + ToolkitSettings.GiftCmd;
                }

                _client.SendMessage("TwitchToolkitUserCommands".Translate() + commands, SendToChatroom(msg.Channel));
            }


            if (ToolkitSettings.CommandsModsEnabled && message.StartsWith("!installedmods") && (DateTime.Now - modsCommandCooldown).TotalSeconds >= 10)
            {
                modsCommandCooldown = DateTime.Now;
                string   modmsg = "Version: " + _mod.Version + ", Mods: ";
                string[] mods   = LoadedModManager.RunningMods.Select((m) => m.Name).ToArray();

                for (int i = 0; i < mods.Length; i++)
                {
                    modmsg += mods[i] + ", ";

                    if (i == (mods.Length - 1) || modmsg.Length > 256)
                    {
                        modmsg = modmsg.Substring(0, modmsg.Length - 2);
                        Toolkit.client.SendMessage(modmsg, SendToChatroom(msg.Channel));
                        modmsg = "";
                    }
                }
                return;
            }

            Store_Logger.LogString("Checked all commands, checking components");

            List <TwitchInterfaceBase> modExtensions = Current.Game.components.OfType <TwitchInterfaceBase>().ToList();

            if (modExtensions == null)
            {
                return;
            }

            foreach (TwitchInterfaceBase parser in modExtensions)
            {
                parser.ParseCommand(msg);
            }

            Store_Logger.LogString("Command parsed");
        }
Esempio n. 16
0
        private static void ShowRelationshipOverview([NotNull] ITwitchMessage twitchMessage, [NotNull] GameComponentPawns component, Pawn pawn)
        {
            List <string> container = component.pawnHistory.Where(p => p.Value != pawn)
                                      .Select(
                pair =>
            {
                string relationString = GetSocialString(pawn, pair.Value, pawn.relations.OpinionOf(pair.Value));

                return(relationString == null ? null : ResponseHelper.JoinPair(pair.Key.CapitalizeFirst(), relationString));
            }
                )
                                      .Where(s => s != null)
                                      .ToList();

            twitchMessage.Reply(container.Count <= 0 ? "TKUtils.PawnRelations.None".Localize() : container.SectionJoin());
        }
        public override void ParseCommand(IRCMessage msg)
        {
            foreach (KeyValuePair <string, string> pair in msg.Parameters)
            {
                //Log.Warning($"{pair.Key} : {pair.Value}");

                return;

                switch (pair.Key)
                {
                case "color":
                    if (pair.Value == null)
                    {
                        return;
                    }
                    string colorCode = "";
                    if (pair.Value.Length > 6)
                    {
                        colorCode = pair.Value.Remove(0, 1);
                        ToolkitSettings.ViewerColorCodes[msg.User.ToLower()] = colorCode;
                    }
                    else
                    {
                        break;
                    }
                    GameComponentPawns component = Current.Game.GetComponent <GameComponentPawns>();

                    if (component.HasUserBeenNamed(msg.User))
                    {
                        Pawn pawn = component.PawnAssignedToUser(msg.User);

                        pawn.story.hairColor = GetColorFromHex(colorCode);
                    }

                    break;

                case "mod":
                    if (pair.Value == null)
                    {
                        return;
                    }
                    bool modValue = int.TryParse(pair.Value, out int modStatus);
                    if (modValue && modStatus == 1)
                    {
                        Viewers.GetViewer(msg.User).mod = true;
                    }
                    break;

                case "subscriber":
                    if (pair.Value == null)
                    {
                        return;
                    }
                    bool subValue = int.TryParse(pair.Value, out int subStatus);
                    if (subValue && subStatus == 1)
                    {
                        Viewers.GetViewer(msg.User).subscriber = true;
                    }
                    break;
                }
            }

            Store_Logger.LogString("Parsed command parameters");
        }
Esempio n. 18
0
        public override void ParseCommand(IRCMessage msg)
        {
            Viewer viewer = Viewers.GetViewer(msg.User);

            foreach (KeyValuePair <string, string> pair in msg.Parameters)
            {
                //Log.Warning(pair.Key + " : " + pair.Value);
                switch (pair.Key)
                {
                case "color":
                    if (pair.Value == null)
                    {
                        break;
                    }
                    string colorCode = "";
                    if (pair.Value.Length > 6)
                    {
                        colorCode = pair.Value.Remove(0, 1);
                        ToolkitSettings.ViewerColorCodes[msg.User.ToLower()] = colorCode;
                    }
                    else
                    {
                        break;
                    }
                    GameComponentPawns component = Current.Game.GetComponent <GameComponentPawns>();

                    if (component.HasUserBeenNamed(msg.User))
                    {
                        Pawn pawn = component.PawnAssignedToUser(msg.User);

                        pawn.story.hairColor = GetColorFromHex(colorCode);
                    }

                    break;

                case "mod":
                    if (viewer.mod || pair.Value == null)
                    {
                        break;
                    }
                    bool modValue = int.TryParse(pair.Value, out int modStatus);
                    if (modValue && modStatus == 1)
                    {
                        viewer.mod = true;
                    }
                    break;

                case "subscriber":
                    if (pair.Value == null)
                    {
                        break;
                    }
                    bool subValue = int.TryParse(pair.Value, out int subStatus);
                    if (subValue && subStatus == 1)
                    {
                        viewer.subscriber = true;
                    }
                    break;

                case "badges":
                    if (pair.Value == null)
                    {
                        break;
                    }
                    IEnumerable <string> badges = pair.Value.Split(',');
                    foreach (string badge in badges)
                    {
                        if (badge == "vip/1")
                        {
                            viewer.vip = true;
                            break;
                        }
                    }
                    break;
                }
            }

            Store_Logger.LogString("Parsed command parameters");
        }
Esempio n. 19
0
        public override bool IsPossible(string message, Viewer viewer, bool separateChannel = false)
        {
            this.separateChannel = separateChannel;
            this.viewer          = viewer;
            string[] command = message.Split(' ');
            if (command.Length < 3)
            {
                Toolkit.client.SendMessage($"@{viewer.username} syntax is {this.storeIncident.syntax}", separateChannel);
                return(false);
            }

            GameComponentPawns gameComponent = Current.Game.GetComponent <GameComponentPawns>();

            if (!gameComponent.HasUserBeenNamed(viewer.username))
            {
                Toolkit.client.SendMessage($"@{viewer.username} you must be in the colony to use this command.", separateChannel);
                return(false);
            }

            pawn = gameComponent.PawnAssignedToUser(viewer.username);

            float customMaxTraits = CustomSettings.LookupFloatSetting("Toolkit.AddTrait.MaxTraits") > 0 ? CustomSettings.LookupFloatSetting("Toolkit.AddTrait.MaxTraits") : 4;

            if (pawn.story.traits.allTraits != null && pawn.story.traits.allTraits.Count >= customMaxTraits)
            {
                Toolkit.client.SendMessage($"@{viewer.username} your pawn already has max {customMaxTraits} traits.", separateChannel);
                return(false);
            }

            string traitKind = command[2].ToLower();

            BuyableTrait search = AllTraits.buyableTraits.Find(s => traitKind == s.label);


            if (search == null)
            {
                Toolkit.client.SendMessage($"@{viewer.username} trait {traitKind} not found.", separateChannel);
                return(false);
            }

            buyableTrait = search;
            traitDef     = buyableTrait.def;

            if (!pawn.story.traits.allTraits.Any((Trait tr) =>
                                                 traitDef.ConflictsWith(tr)) &&
                (traitDef.conflictingTraits == null ||
                 !traitDef.conflictingTraits.Any((TraitDef tr) => pawn.story.traits.HasTrait(tr))))
            {
                return(true);
            }

            foreach (Trait tr in pawn.story.traits.allTraits)
            {
                if (tr.def.ConflictsWith(trait) || traitDef.ConflictsWith(tr))
                {
                    Toolkit.client.SendMessage($"@{viewer.username} {traitDef.defName} conflicts with your pawn's trait {tr.LabelCap}.");
                    return(false);
                }
            }

            return(true);
        }