public static void OpenAllLootboxes(string username) { string message = $"@{username} you open all your lootboxes and discover: "; LootboxComponent lootboxComponent = Current.Game.GetComponent <LootboxComponent>(); int lootboxQuantity = lootboxComponent.HowManyLootboxesDoesViewerHave(username); int coinReward = 0; for (int i = 0; i < lootboxQuantity; i++) { coinReward += Verse.Rand.Range(Lootbox_Settings.RandomCoinRange.min, Lootbox_Settings.RandomCoinRange.max); } message += coinReward + " coins"; Viewer viewer = Viewers.GetViewer(username); viewer.GiveViewerCoins(coinReward); lootboxComponent.ViewersLootboxes[viewer.username] = 0; Toolkit.client.SendMessage(message, true); }
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(IRCMessage msg) { Viewer viewer = Viewers.GetViewer(msg.User); if (IsViewerOwedLootboxesToday(viewer.username.ToLower())) { Log.Warning("Awarding boxes"); AwardViewerDailyLootboxes(viewer.username.ToLower()); } if (msg.Message.StartsWith("!openlootbox") && Commands.AllowCommand(msg.Channel)) { if (HowManyLootboxesDoesViewerHave(viewer.username) > 0) { Lootbox.OpenLootbox(viewer.username.ToLower()); } else { Toolkit.client.SendMessage($"@{viewer.username} you do not have any lootboxes.", true); } } if (msg.Message.StartsWith("!lootboxes") && Commands.AllowCommand(msg.Channel)) { int amount = HowManyLootboxesDoesViewerHave(viewer.username); string pluralBoxes = amount > 1 ? "es" : ""; string instructions = amount > 1 ? " Use !openlootbox" + (ToolkitSettings.UseSeparateChatRoom ? " in the separate chat room." : "") : ""; Toolkit.client.SendMessage($"@{viewer.username} you currently have {amount} lootbox{pluralBoxes}.{instructions}", true); } if (msg.Message.StartsWith("!givelootbox") && (Viewer.IsModerator(viewer.username) || viewer.username.ToLower() == ToolkitSettings.Channel.ToLower())) { string[] command = msg.Message.Split(' '); if (command.Length < 2) { return; } int amount = 1; if (command.Length > 2) { int.TryParse(command[2], out amount); } string pluralBoxes = amount > 1 ? "es" : ""; command[1] = command[1].Replace("@", ""); Viewer giftee = Viewers.GetViewer(command[1]); GiveViewerLootbox(giftee.username, amount); Toolkit.client.SendMessage($"@{giftee.username} you have received {amount} lootbox{pluralBoxes} from {viewer.username}.", Commands.SendToChatroom(msg.Channel)); } }
public override void RunCommand([NotNull] ITwitchMessage twitchMessage) { var worker = ArgWorker.CreateInstance(CommandFilter.Parse(twitchMessage.Message).Skip(1)); if (!worker.TryGetNextAsInt(out int amount, 1)) { return; } List <string> viewers = Viewers.ParseViewersFromJsonAndFindActiveViewers(); if (viewers == null || viewers.Count <= 0) { return; } var count = 0; foreach (string username in viewers) { Viewers.GetViewer(username).GiveViewerCoins(amount); count++; } twitchMessage.Reply("TKUtils.GiveAll".LocalizeKeyed(amount.ToString("N0"), count.ToString("N0"))); }
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!"); }
void OnPrivMsg(IRCMessage message) { Store_Logger.LogString(message.Message); Store_Logger.LogString($"connected: {Toolkit.client.client.Connected} - {DateTime.Now.ToShortTimeString()}"); //if (activeChatWindow != null && !message.Message.StartsWith("!") && message.User != ToolkitSettings.Username) //{ // if ((_voteActive && !int.TryParse(message.Message[0].ToString(), out int result)) || !_voteActive) // { // activeChatWindow.AddMessage( // message.Message, // message.User, // (message.Parameters.ContainsKey("color")) ? message.Parameters["color"].Remove(0, 1) : Viewer.GetViewerColorCode(message.User) // ); // } //} Store_Logger.LogString("Checking command"); if (Helper.ModActive) { Commands.CheckCommand(message); } Store_Logger.LogString("Checking if is vote"); if (VoteHandler.voteActive && int.TryParse(message.Message[0].ToString(), out int voteKey)) { VoteHandler.currentVote.RecordVote(Viewers.GetViewer(message.User).id, voteKey - 1); } }
private void ProcessCoinReward() { int currentMinute = GetCurrentMinute(); if (currentMinute > 0 && currentMinute % 5 == 0 && _lastRefreshMinute != currentMinute) { Viewers.RefreshViewers(); _lastRefreshMinute = currentMinute; TkUtils.Logger.Debug($"Refreshed viewers @ {DateTime.Now:T}"); } if (currentMinute <= _lastMinute || currentMinute < 1) { return; } _rewardPeriodTracker += 1; _lastMinute = currentMinute; if (_rewardPeriodTracker < ToolkitSettings.CoinInterval) { return; } Task.Run(() => Viewers.AwardViewersCoins()); _rewardPeriodTracker = 0; TkUtils.Logger.Debug($"Awarded viewers coins @ {DateTime.Now:T}"); }
void OnPrivMsg(TwitchIRCMessage message) { //if (activeChatWindow != null && !message.Message.StartsWith("!") && message.User != ToolkitSettings.Username) //{ // if ((_voteActive && !int.TryParse(message.Message[0].ToString(), out int result)) || !_voteActive) // { // activeChatWindow.AddMessage( // message.Message, // message.User, // (message.Parameters.ContainsKey("color")) ? message.Parameters["color"].Remove(0, 1) : Viewer.GetViewerColorCode(message.User) // ); // } //} message.Viewer = TwitchViewer.GetTwitchViewer(message.User); if (message.Viewer == null) { Helper.Log(message.User.CapitalizeFirst() + " tried to run a command but is not registed."); return; } if (Helper.ModActive) { CommandsHandler.CheckCommand(message); } if (VoteHandler.voteActive && int.TryParse(message.Message[0].ToString(), out int voteKey)) { VoteHandler.currentVote.RecordVote(Viewers.GetViewer(message.User).id, voteKey - 1); } }
public override void RunCommand(IRCMessage message) { try { string[] command = message.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); Toolkit.client.SendMessage($"@{message.User}" + Helper.ReplacePlaceholder("TwitchToolkitSetKarma".Translate(), viewer: targeted.username, karma: amount.ToString()), CommandsHandler.SendToChatroom(message)); } } catch (InvalidCastException e) { Helper.Log("Invalid Check User Command " + e.Message); } }
public void Leave() { if (Viewers.Contains(StateAgent.CurrentViewer)) { Viewers.Remove(StateAgent.CurrentViewer); } }
private void CheckUniqueAccounts() { var accounts = new List <Account>(); accounts.AddRange(Players.Select(acc => acc.SelectedAccount)); accounts.AddRange(Viewers.Select(acc => acc.SelectedAccount)); if (Showman != null) { accounts.Add(Showman.SelectedAccount); } for (int i = 0; i < accounts.Count; i++) { if (accounts[i] == null || accounts[i].Name == Constants.FreePlace) { continue; } for (int j = i + 1; j < accounts.Count; j++) { if (accounts[i] == accounts[j]) { unique = accounts[i].Name; SetErrorMessage(); return; } } } unique = null; SetErrorMessage(); }
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; } }
private static bool ParseJsonResponse(RequestState Request) { string json = Request.jsonString; string offsetVar = Regex.Match(Request.urlCalled, "\\A?offset=[^&]*").ToString(); int offset = Convert.ToInt32(offsetVar.Replace("offset=", "")); Helper.Log("Streamlabs Request: " + json + " offset: " + offset); var v = JSON.Parse(json); for (int i = 0; i < 25; i++) { if (i > v["_total"].AsInt - offset - 1) { continue; } Viewer viewer = Viewers.GetViewer(v["users"][i]["username"]); viewer.SetViewerCoins(v["users"][i]["points"].AsInt); } if (offset + 25 < v["_total"].AsInt) { offset += 25; WebRequest_BeginGetResponse.Main($"https://api.streamelements.com/kappa/v2/points/{ToolkitSettings.AccountID}/alltime?offset={offset}&page=1", new Func <RequestState, bool>(ParseJsonResponse)); } return(true); }
private static void OpenViewerDetailsFor(string name) { var viewers = new Window_Viewers(); viewers.SelectViewer(Viewers.GetViewer(name)); Find.WindowStack.Add(viewers); }
private static bool Prefix([CanBeNull] CommandDriver __instance, ITwitchMessage twitchMessage) { if (__instance == null) { return(true); } if (!TkSettings.StoreState) { return(false); } Viewer viewer = Viewers.GetViewer(twitchMessage.Username); ITwitchMessage message = twitchMessage; if (!__instance.command.defName.Equals("Buy")) { message = twitchMessage.WithMessage($"!{CommandDefOf.Buy.command} {twitchMessage.Message.Substring(1)}"); } if (message !.Message.Split(' ').Length < 2) { return(false); } Purchase_Handler.ResolvePurchase(viewer, message); return(false); }
public void CountVotes() { foreach (int key in optionsKeys) { voteCounts[key] = 0; } foreach (KeyValuePair <int, int> viewerVote in viewerVotes) { Viewer viewerById = Viewers.GetViewerById(viewerVote.Key); int voteCount = 1; if (viewerById.IsSub) { voteCount += ToolkitSettings.SubscriberExtraVotes; } else if (viewerById.IsVIP) { voteCount += ToolkitSettings.VIPExtraVotes; } else if (viewerById.mod) { voteCount += ToolkitSettings.ModExtraVotes; } voteCounts[viewerVote.Value] += voteCount; } }
public Window_ViewerEditProp(EditPropsActions action, EditProp prop, Viewer viewer = null) { this.action = action; this.prop = prop; this.doCloseButton = true; Viewers.RefreshViewers(); if (viewer == null) { allViewers = true; viewerBuffer = "<b>All Viewers</b>"; } else { allViewers = false; this.viewer = viewer; viewerBuffer = "<b>" + viewer.username + "</b>"; } if (viewer != null && action == EditPropsActions.Set) { if (prop == EditProp.Coins) { amount = viewer.GetViewerCoins(); } else if (prop == EditProp.Karma) { amount = viewer.GetViewerKarma(); } } }
private static bool Prefix([CanBeNull] ITwitchMessage twitchMessage) { if (twitchMessage?.ChatMessage == null) { return(false); } Viewer viewer = Viewers.GetViewer(twitchMessage.Username); var component = Current.Game.GetComponent <GameComponentPawns>(); ToolkitSettings.ViewerColorCodes[twitchMessage.Username.ToLowerInvariant()] = twitchMessage.ChatMessage.ColorHex; if (TkSettings.HairColor && component.HasUserBeenNamed(twitchMessage.Username) && ColorUtility.TryParseHtmlString(twitchMessage.ChatMessage.ColorHex, out Color hairColor)) { Pawn pawn = component.PawnAssignedToUser(twitchMessage.Username); if (pawn?.story != null) { pawn.story.hairColor = hairColor; } } viewer.mod = twitchMessage.HasBadges("moderator", "broadcaster", "global_mod", "staff"); viewer.subscriber = twitchMessage.HasBadges("subscriber", "founder"); viewer.vip = twitchMessage.HasBadges("vip"); return(false); }
/// <summary> /// Remove player from the game /// </summary> public void RemovePlayer(PokerPlayer player) { if (player != null) { //null these here so we know that one of the key players for the next game has left if (DealerButton == player) { DealerButton = null; } if (SmallBlind == player) { SmallBlind = null; } if (BigBlind == player) { BigBlind = null; } //Move to view list so that they can continue viewing the game if (ActivePlayers.Contains(player)) { Viewers.Add(player.Owner); } Players.Remove(player); player.LeaveGame(this); } }
protected override void HandleMessage(DiscordWebSocketMessage <DiscordMediaOpcode> message) { if (message.Opcode == DiscordMediaOpcode.SSRCUpdate) { SSRCUpdate ssrc = message.Data.ToObject <SSRCUpdate>(); if (!Viewers.Contains(ssrc.UserId)) { List <ulong> viewers = Viewers.ToList(); viewers.Add(ssrc.UserId); Viewers = viewers; OnUserConnected?.Invoke(this, ssrc.UserId); } } else if (message.Opcode == DiscordMediaOpcode.UserDisconnect) { ulong userId = message.Data.ToObject <JObject>().Value <ulong>("user_id"); List <ulong> viewers = Viewers.ToList(); if (viewers.Remove(userId)) { Viewers = viewers; } OnUserDisconnected?.Invoke(this, userId); } }
/// <summary> /// 添加项目查看者 /// </summary> public void AddViewer(int userId, string userName, string avator) { var viewer = new ProjectViewer() { UserId = userId, UserName = userName, Avatar = avator, CreatedTime = DateTime.Now }; //如果不在查看列表中,需添加 if (!Viewers.Any(b => b.UserId == userId)) { Viewers.Add(viewer); //添加查看项目 AddDomainEvent(new ProjectViewedEvent { Company = this.Company, Introduction = this.Introduction, Avatar = this.Avatar, ProjectViewer = viewer }); } }
private void OnNewUserFound(object sender, OnNewUserFoundArgs e) { foreach (var user in e.Users) { if (Viewers.Any(v => String.Compare(v.TwitchID, user.Id) == 0)) // check if user is already in List { return; } var IsUserSubscriber = TwitchLib.TwitchAPI.Subscriptions.v3.ChannelHasUserSubscribed(Core.AivaClient.Instance.Channel, user.Name).Result; Application.Current.Dispatcher.Invoke(() => { Viewers.Add( new Models.Chat.Viewers { Name = user.Name, TwitchID = user.Id, IsSub = IsUserSubscriber != null ? true : false, Type = IsUserSubscriber != null ? nameof(Models.Chat.SortDirectionListView.Subscriber) : nameof(Models.Chat.SortDirectionListView.Viewer) //IsMod = will be filled from the event "ModeratoersReceived" }); }); } // Get Channel Moderators to fire "ModeratorsReceived" Core.AivaClient.Instance.AivaTwitchClient.GetChannelModerators(Core.AivaClient.Instance.Channel); }
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)); }
public override void ParseCommand(IRCMessage msg) { foreach (KeyValuePair <string, string> pair in msg.Parameters) { switch (pair.Key) { case "color": if (pair.Value.Length > 6) { string colorCode = pair.Value.Remove(0, 1); ToolkitSettings.ViewerColorCodes[msg.User.ToLower()] = colorCode; } break; case "mod": bool modValue = int.TryParse(pair.Value, out int modStatus); if (modValue && modStatus == 1) { Viewers.GetViewer(msg.User).mod = true; } break; case "subscriber": bool subValue = int.TryParse(pair.Value, out int subStatus); if (subValue && subStatus == 1) { Viewers.GetViewer(msg.User).subscriber = true; } break; } } }
public int CalculateAverageViewers() { if (Viewers.Any()) { return(Viewers.Sum() / Viewers.Count); } return(0); }
internal async Task AddViewer(Viewer viewer) { Viewers.Add(viewer); if (Started) { await viewer.Start(Session.GetData()); } }
public override void RunCommand(IRCMessage message) { Viewer viewer = Viewers.GetViewer(message.User); Pawn pawn = GetPawnIfAllowed(message); if (pawn == null) { return; } string output = $"@{viewer.username} {pawn.Name.ToStringShort.CapitalizeFirst()}'s body: "; if (pawn.health.hediffSet.hediffs?.Count > 0) { IEnumerable <IGrouping <BodyPartRecord, Hediff> > visibleHediffGroupsInOrder = VisibleHediffGroupsInOrder(pawn); foreach (IGrouping <BodyPartRecord, Hediff> diffs in visibleHediffGroupsInOrder) { if (diffs.Key == null) { output += $"{"WholeBody".Translate()} - "; } else { output += $"{diffs.Key.LabelCap} - "; } foreach (IGrouping <int, Hediff> hediffGroup in diffs.GroupBy(h => h.UIGroupKey)) { int numBleeding = 0; foreach (Hediff hediff in hediffGroup) { if (hediff.Bleeding) { ++numBleeding; } } int hediffCount = hediffGroup.Count(); output += hediffGroup.First().LabelCap; if (hediffCount != 1) { output += " x" + hediffCount.ToString(); } if (numBleeding > 0) { output += " (bleeding x" + numBleeding + ")"; } output += ", "; } output = output.Substring(0, output.Length - 2); output += " | "; } if (visibleHediffGroupsInOrder.Count() > 1) { output = output.Substring(0, output.Length - 3); } } SendWrappedOutputText(output, message); }
private void set_default() { Assembly = null; Class = "SobekCM.Library.HTML.Search_Results_HtmlSubwriter"; Viewers.Clear(); // Add all the standard viewers here!! }
public override void GameComponentTick() { if (Find.TickManager.TicksGame % 1000 != 0) { return; } FindRandomWorldPawnForViewer(Viewers.GetViewer("hodlhodl")); }
public Window_Viewers() { Viewers.RefreshViewers(); if (Current.Game != null) { this.component = Current.Game.GetComponent <GameComponentPawns>(); } this.doCloseButton = true; }