public string GetEstimatedTime(ChatViewersModel chattersModel) { using (var context = _contextFactory.Create()) { try { var allViewers = chattersModel.chatters.viewers .Concat(chattersModel.chatters.admins) .Concat(chattersModel.chatters.global_mods) .Concat(chattersModel.chatters.moderators) .Concat(chattersModel.chatters.staff) .ToArray(); var requests = context.SongRequests.Where(sr => !sr.Played) .OrderRequests() .Count(sr => allViewers.Contains(sr.RequestUsername)); var estimatedFinishTime = DateTime.UtcNow.AddMinutes(requests * 6d).ToString("HH:mm:ss"); return($"Estimated time to finish: {estimatedFinishTime}"); } catch (Exception e) { _logger.LogError(e, "Error when calculating estimated time remaining in the playlist"); return(string.Empty); } } }
public void GiveBytes(ChatViewersModel chatViewersModel) { using (var context = this.contextFactory.Create()) { if (chatViewersModel.chatters.moderators.Any()) { vipHelper.AddUsersDeferSave(chatViewersModel.chatters.moderators); } if (chatViewersModel.chatters.staff.Any()) { vipHelper.AddUsersDeferSave(chatViewersModel.chatters.staff); } if (chatViewersModel.chatters.global_mods.Any()) { vipHelper.AddUsersDeferSave(chatViewersModel.chatters.global_mods); } if (chatViewersModel.chatters.admins.Any()) { vipHelper.AddUsersDeferSave(chatViewersModel.chatters.admins); } if (chatViewersModel.chatters.viewers.Any()) { vipHelper.AddUsersDeferSave(chatViewersModel.chatters.viewers); } context.SaveChanges(); foreach (var mod in chatViewersModel.chatters.moderators) { var user = vipHelper.FindUser(mod); user.TokenBytes++; } foreach (var staff in chatViewersModel.chatters.staff) { var user = vipHelper.FindUser(staff); user.TokenBytes++; } foreach (var global_mod in chatViewersModel.chatters.global_mods) { var user = vipHelper.FindUser(global_mod); user.TokenBytes++; } foreach (var admin in chatViewersModel.chatters.admins) { var user = vipHelper.FindUser(admin); user.TokenBytes++; } foreach (var viewer in chatViewersModel.chatters.viewers) { var user = vipHelper.FindUser(viewer); user.TokenBytes++; } context.SaveChanges(); } }
public static void Main(string[] args) { Task.Run(async() => { try { Logger.SetLogLevel(LogLevel.Debug); Logger.LogOccurred += Logger_LogOccurred; System.Console.WriteLine("Connecting to Trovo..."); connection = await TrovoConnection.ConnectViaLocalhostOAuthBrowser(clientID, scopes); if (connection != null) { System.Console.WriteLine("Trovo connection successful!"); PrivateUserModel user = await connection.Users.GetCurrentUser(); if (user != null) { System.Console.WriteLine("Current User: "******"Channel Title: " + channel.live_title); chat = new ChatClient(connection); chat.OnChatMessageReceived += Chat_OnChatMessageReceived; System.Console.WriteLine("Connecting to chat..."); if (await chat.Connect(await connection.Chat.GetToken())) { System.Console.WriteLine("Successfully connected to chat!"); await chat.SendMessage("Hello World!"); ChatViewersModel viewers = await connection.Chat.GetViewers(channel.channel_id, 1000); while (true) { string line = System.Console.ReadLine(); await chat.SendMessage(line); } } } } } } catch (Exception ex) { Logger.Log(ex); } }).Wait(); System.Console.ReadLine(); }
/// <summary> /// Gets the current viewers of the specified channel ID /// </summary> /// <param name="channelID">The ID of the channel</param> /// <param name="maxResults">The maximum number of results. Will be either that amount or slightly more</param> /// <returns>The current viewers of the channel</returns> public async Task <ChatViewersModel> GetViewers(string channelID, int maxResults = 1) { Validator.ValidateString(channelID, "channelID"); IEnumerable <ChatViewersInternalModel> viewers = await this.PostPagedCursorAsync <ChatViewersInternalModel>($"channels/{channelID}/viewers", maxResults); ChatViewersModel result = new ChatViewersModel(); foreach (ChatViewersInternalModel viewer in viewers) { result.ace.viewers.AddRange(viewer.chatters.ace.viewers); result.aceplus.viewers.AddRange(viewer.chatters.aceplus.viewers); result.admins.viewers.AddRange(viewer.chatters.admins.viewers); result.all.viewers.AddRange(viewer.chatters.all.viewers); result.creators.viewers.AddRange(viewer.chatters.creators.viewers); result.editors.viewers.AddRange(viewer.chatters.editors.viewers); result.followers.viewers.AddRange(viewer.chatters.followers.viewers); result.moderators.viewers.AddRange(viewer.chatters.moderators.viewers); result.subscribers.viewers.AddRange(viewer.chatters.subscribers.viewers); result.supermods.viewers.AddRange(viewer.chatters.supermods.viewers); result.VIPS.viewers.AddRange(viewer.chatters.VIPS.viewers); result.wardens.viewers.AddRange(viewer.chatters.wardens.viewers); foreach (var kvp in viewer.custome_roles) { if (!result.CustomRoles.ContainsKey(kvp.Key)) { result.CustomRoles[kvp.Key] = new ChatViewersRoleGroupModel(); } ChatViewersRoleGroupModel group = kvp.Value.ToObject <ChatViewersRoleGroupModel>(); result.CustomRoles[kvp.Key].viewers.AddRange(group.viewers); } foreach (var kvp in viewer.custom_roles) { if (!result.CustomRoles.ContainsKey(kvp.Key)) { result.CustomRoles[kvp.Key] = new ChatViewersRoleGroupModel(); } ChatViewersRoleGroupModel group = kvp.Value.ToObject <ChatViewersRoleGroupModel>(); result.CustomRoles[kvp.Key].viewers.AddRange(group.viewers); } } if (viewers.Count() > 0) { result.Total = viewers.First().total; } return(result); }