/// <summary> /// Add / edit all values from today statistic /// </summary> /// <param name="count"></param> public void AddViewerCountToDatabase(int count) { using (var context = new Storage.DatabaseContext()) { var today = context.ViewerStatistics .SingleOrDefault(d => d.Date.Date == DateTime.Now.Date); // check if created if (today == null) { CreateOrResetTodaysViewerCountStatistic(); AddViewerCountToDatabase(count); return; } else { if (count < today.Min) { today.Min = count; } if (count > today.Max) { today.Max = count; } today.Count++; today.AddedValue += count; today.Average = today.AddedValue / today.Count; context.SaveChanges(); } } }
/// <summary> /// Create or reset todays statistic /// </summary> private void CreateOrResetTodaysViewerCountStatistic() { using (var context = new Storage.DatabaseContext()) { var today = context.ViewerStatistics .SingleOrDefault(d => d.Date.Date == DateTime.Now.Date); if (today != null) { today.Average = 0; today.Max = 0; today.Min = 0; today.AddedValue = 0; today.Count = 0; } else { today = new Storage.ViewerStatistics { Average = 0, Max = 0, Min = 0, AddedValue = 0, Count = 0, Date = DateTime.Now }; context.ViewerStatistics.Add(today); } context.SaveChanges(); } }
/// <summary> /// Remove ActiveUser Entry /// and add TimeWatched values /// </summary> /// <param name="sender">todo: describe sender parameter on RemoveUserFromActiveUsers</param> /// <param name="e">todo: describe e parameter on RemoveUserFromActiveUsers</param> public async void RemoveUserFromActiveUsers(object sender, OnUserLeftArgs e) { using (var context = new Storage.DatabaseContext()) { //var twitchID = TwitchApi.Users.GetUser(e.Username); var twitchID = await AivaClient.Instance.TwitchApi.Users.v5.GetUserByNameAsync(e.Username).ConfigureAwait(false); if (twitchID?.Total > 0) { foreach (var userMatch in twitchID.Matches) { if (String.Compare(userMatch.Name, e.Username, true) != 0) { continue; } var user = context.Users.SingleOrDefault( u => u.UsersId == Convert.ToInt32(userMatch.Id)); if (user != null) { var duration = DateTime.Now.Subtract(user.ActiveUsers.JoinedTime); user.TimeWatched.Time += duration.Ticks; context.ActiveUsers.Remove(user.ActiveUsers); context.SaveChanges(); } } } } }
/// <summary> /// Add a command /// </summary> /// <param name="creater"></param> /// <param name="commandName"></param> /// <param name="text"></param> internal bool AddCommand(string creater, string commandName, string text) { // create command object var command = new Storage.Commands { Stack = 0, CreatedAt = DateTime.Now, CreatedFrom = creater, Name = commandName, Text = text }; using (var context = new Storage.DatabaseContext()) { // check if there is no command with the same name var dbCommand = context.Commands.SingleOrDefault( c => string.Compare(c.Name, commandName, true) == 0); if (dbCommand == null) { context.Commands.Add(command); return(context.SaveChanges() == 0); } } return(false); }
/// <summary> /// Add raw Message to Database /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void AddReceivedMessageToDatabase(object sender, OnMessageReceivedArgs e) { using (var context = new Storage.DatabaseContext()) { context.Chat.Add(new Storage.Chat { UsersId = Convert.ToInt32(e.ChatMessage.UserId), ChatMessage = e.ChatMessage.Message, Timestamp = DateTime.Now, }); context.SaveChanges(); } }
/// <summary> /// Add currency to active viewers /// </summary> public void AddCurrencyActiveViewer() { using (var context = new Storage.DatabaseContext()) { var activeUsers = context.ActiveUsers.ToList(); foreach (var user in activeUsers) { user.Users.Currency.Value += Convert.ToInt64(Config.Config.Instance.Storage.Currency.CurrencyToAddFrequently); } context.SaveChanges(); } }
/// <summary> /// Add message to database /// </summary> /// <param name="twitchID"></param> /// <param name="message"></param> /// <param name="timeStamp"></param> public void AddMessageToDatabase(int twitchID, string message, DateTime timeStamp) { using (var context = new Storage.DatabaseContext()) { context.Chat.Add( new Storage.Chat { UsersId = twitchID, ChatMessage = message, Timestamp = timeStamp, }); context.SaveChanges(); } }
/// <summary> /// Increate the stack from the command /// </summary> /// <param name="commandName"></param> public void IncreaseCommandCount(string commandName) { using (var context = new Storage.DatabaseContext()) { var command = context.Commands.SingleOrDefault(c => String.Compare(commandName, c.Name, true) == 0); if (command != null) { command.Stack++; context.SaveChanges(); } } }
/// <summary> /// Remove a command /// </summary> /// <param name="commandName"></param> internal void RemoveCommand(string commandName) { using (var context = new Storage.DatabaseContext()) { var command = context.Commands.SingleOrDefault( c => string.Compare(c.Name, commandName, true) == 0); if (command != null) { context.Commands.Remove(command); context.SaveChanges(); } } }
/// <summary> /// Edit a command /// </summary> /// <param name="commandName"></param> /// <param name="text"></param> internal bool EditCommand(string commandName, string text) { using (var context = new Storage.DatabaseContext()) { var command = context.Commands.SingleOrDefault( c => string.Compare(c.Name, commandName, true) == 0); if (command != null) { command.Text = text; return(context.SaveChanges() == 0); } } return(false); }
/// <summary> /// Remove Currency from User /// </summary> /// <param name="twitchID"></param> /// <param name="value"></param> public bool Remove(int twitchID, int value) { using (var context = new Storage.DatabaseContext()) { var user = context.Users .Include(c => c.Currency) .SingleOrDefault(u => u.UsersId == twitchID); if (user != null) { user.Currency.Value -= value; context.SaveChanges(); return(true); } } return(false); }
/// <summary> /// Transfer currency from a user to a user /// </summary> /// <param name="userid1"></param> /// <param name="userid2"></param> /// <param name="value"></param> internal bool Transfer(int userid1, int userid2, int value) { using (var context = new Storage.DatabaseContext()) { var user1 = context.Users.SingleOrDefault(u => u.UsersId == userid1); var user2 = context.Users.SingleOrDefault(u => u.UsersId == userid2); if (user1 != null && user2 != null) { if (user1.Currency.Value >= value) { user1.Currency.Value -= value; user2.Currency.Value += value; context.SaveChanges(); return(true); } } } return(false); }
/// <summary> /// Add or Update User in Database /// </summary> /// <param name="User">todo: describe User parameter on AddUser</param> public void AddUserToDatabase(User User) { if (User != null) { using (var context = new Storage.DatabaseContext()) { var databaseUser = context.Users .Include(au => au.ActiveUsers) .SingleOrDefault(u => u.UsersId == Convert.ToInt32(User.Id)); // Update User if (databaseUser != null) { databaseUser.Bio = User.Bio; databaseUser.CreatedAt = User.CreatedAt; databaseUser.DisplayName = User.DisplayName; databaseUser.Logo = User.Logo; databaseUser.Name = User.Name; databaseUser.Type = User.Type; databaseUser.UpdatedAt = User.UpdatedAt; // Active users if (databaseUser.ActiveUsers == null) { databaseUser.ActiveUsers = new Storage.ActiveUsers { UsersId = databaseUser.UsersId, JoinedTime = DateTime.Now, Users = databaseUser, }; } } // Create User else { var newUser = new Storage.Users { UsersId = Convert.ToInt32(User.Id), Bio = User.Bio, CreatedAt = User.CreatedAt, DisplayName = User.DisplayName, Logo = User.Logo, Name = User.Name, Type = User.Type, UpdatedAt = User.UpdatedAt, Currency = new Storage.Currency { UsersId = Convert.ToInt32(User.Id), Value = 0, }, ActiveUsers = new Storage.ActiveUsers { UsersId = Convert.ToInt32(User.Id), JoinedTime = DateTime.Now, }, TimeWatched = new Storage.TimeWatched { UsersId = Convert.ToInt32(User.Id), Time = 0, } }; context.Users.Add(newUser); } context.SaveChanges(); } } }