public PersistentReminder AddReminder(PersistentReminder reminder) { reminder.ReminderNumber = PersistentReminders.Any() ? PersistentReminders.Where(x => x.Reminder.UserId == reminder.UserId).Max(x => x.Reminder.ReminderNumber) + 1 : 1; PersistentReminders.Add(MakeTimer(reminder)); Database.Store(reminder, PersistentReminder.DocumentName(reminder.GuildId, reminder.UserId, reminder.ReminderNumber)); return(reminder); }
public PersistentReminderTimer MakeTimer(PersistentReminder reminder) { var timer = new PersistentReminderTimer { Reminder = reminder, Timer = new Timer(c => ExecutePersistentReminder(reminder), null, GetTimerFirstRunTime(reminder), new TimeSpan(24, 00, 00)) }; return(timer); }
public TimeSpan GetTimerFirstRunTime(PersistentReminder reminder) { var day = new TimeSpan(24, 0, 0); var now = TimeSpan.Parse(DateTime.UtcNow.ToString("HH:mm")); TimeSpan timeLeftUntilFirstRun = (day - now) + reminder.ActivationTime - TimeSpan.FromHours(reminder.GMTAdjustment); if (timeLeftUntilFirstRun.TotalHours > 24) { timeLeftUntilFirstRun -= day; } return(timeLeftUntilFirstRun); }
public async Task DeleteDailyReminder(int reminderNumber) { var reminder = ReminderHandler.Database.Load <PersistentReminder>(PersistentReminder.DocumentName(Context.Guild.Id, Context.User.Id, reminderNumber)); if (reminder == null) { await ReplyAsync("Invalid reminder number specified."); return; } ReminderHandler.RemoveReminder(reminder); await ReplyAsync("Reminder removed."); }
public void RemoveReminder(PersistentReminder reminder) { PersistentReminders = PersistentReminders.Where(x => { if (x.Reminder.UserId == reminder.UserId && x.Reminder.ReminderNumber == reminder.ReminderNumber) { x.Timer.Dispose(); return(false); } return(true); }).ToList(); Database.Remove <PersistentReminder>(PersistentReminder.DocumentName(reminder.GuildId, reminder.UserId, reminder.ReminderNumber)); }
public void ExecutePersistentReminder(PersistentReminder reminder) { var _ = Task.Run(async() => { if (!LocalManagementService.LastConfig.IsAcceptable(reminder.GuildId)) { return; } var channel = Client.GetGuild(reminder.GuildId)?.GetTextChannel(reminder.ChannelId); var user = Client.GetUser(reminder.UserId); if (user == null) { //Filter out any reminders that contain this user. PersistentReminders = PersistentReminders.Where(x => { if (x.Reminder.UserId != reminder.UserId) { return(true); } else { x.Timer.Dispose(); return(false); } }).ToList(); return; } if (channel == null) { //DM User if available. var dmChannel = await user.GetOrCreateDMChannelAsync(); if (dmChannel != null) { await dmChannel.SendMessageAsync(reminder.ReminderMessage).ConfigureAwait(false); } return; } await channel.SendMessageAsync($"{user.Mention}", false, new EmbedBuilder() { Description = $"{reminder.ReminderMessage}".FixLength(1024), Color = Color.Green }.Build()).ConfigureAwait(false); }); }
public async Task SetGMTOffset(int reminderNumber, int offset) { var reminder = ReminderHandler.Database.Load <PersistentReminder>(PersistentReminder.DocumentName(Context.Guild.Id, Context.User.Id, reminderNumber)); if (reminder == null) { await ReplyAsync("Invalid reminder number specified."); return; } reminder.GMTAdjustment = offset; var cachedReminder = ReminderHandler.PersistentReminders.FirstOrDefault(x => x.Reminder.UserId == Context.User.Id && x.Reminder.ReminderNumber == reminderNumber); cachedReminder.Reminder.GMTAdjustment = offset; cachedReminder.Timer.Dispose(); cachedReminder.Timer = new Timer(x => ReminderHandler.ExecutePersistentReminder(cachedReminder.Reminder), null, ReminderHandler.GetTimerFirstRunTime(cachedReminder.Reminder), new TimeSpan(24, 0, 0)); ReminderHandler.Database.Store(reminder, PersistentReminder.DocumentName(Context.Guild.Id, Context.User.Id, reminder.ReminderNumber)); await ReplyAsync("Your GMT adjustment has been set for the specified reminder."); }