using System; using System.Collections.Generic; using System.Linq; using System.Security; using System.Threading.Tasks; using Discord; using Kehyeedra3.Services.Models; namespace Kehyeedra3.Services { public class ReminderService { static IDMChannel LanChannel; private static async Task SendReminderAsync(Reminder reminder) { try { var dmchannel = await Bot._bot.GetUser(reminder.UserId).CreateDMChannelAsync(); if (dmchannel != null) { ulong m = (reminder.Send - reminder.Created) / 60; ulong h = 0; ulong d = 0; while (m > 59) { h += 1; m -= 60; } while (h > 23) { d += 1; h -= 24; } string remin = ""; if (d > 0) { remin += $" {d} day"; if (d > 1) { remin += $"s"; } } if (h > 0) { remin += $" {h} hour"; if (h > 1) { remin += $"s"; } } if (m > 0) { remin += $" {m} minute"; if (m > 1) { remin += $"s"; } } await dmchannel.SendMessageAsync($"**Reminder from{remin} ago:**\n\n''{reminder.Message}''"); } } catch { if (LanChannel is null) { IUser Lan = Bot._bot.GetUser(242040333309837327); LanChannel = await Lan.CreateDMChannelAsync(); } await LanChannel.SendMessageAsync($"Time of error ^\n" + $"A fucky wucky has occurred, uwu\nFix wemindew sewwis dimwiwt" + $"\nThis was the reminder: {reminder.Id} \nto: {reminder.UserId} \ntime: {reminder.Send.FromYeedraStamp()}"); } } public async Task Tick() { while (true) { if(Bot.IsReady) { using (var Database = new ApplicationDbContextFactory().CreateDbContext()) { var reminders = Database.Reminders.ToList(); if (Database.Reminders.Any() && Bot._bot != null && Bot._bot.ConnectionState == Discord.ConnectionState.Connected) { bool hasChanged = false; foreach (var x in reminders) { if (x.Send <= DateTime.UtcNow.ToYeedraStamp()) { await SendReminderAsync(x).ConfigureAwait(false); Database.Reminders.Remove(x); hasChanged = true; } } if (hasChanged) { await Database.SaveChangesAsync().ConfigureAwait(false); } } } } await Task.Delay(250); } } } }