From bcf72d68b94fce1f60f90a4921bf8be72c661848 Mon Sep 17 00:00:00 2001 From: Oreh Date: Fri, 28 Jul 2023 13:14:50 +0800 Subject: [PATCH] add sequence command --- Budet-cho-bot/Modules/ReminderModule.cs | 93 ++++++++++++++++++++----- 1 file changed, 75 insertions(+), 18 deletions(-) diff --git a/Budet-cho-bot/Modules/ReminderModule.cs b/Budet-cho-bot/Modules/ReminderModule.cs index 9a8298e..3fc7019 100644 --- a/Budet-cho-bot/Modules/ReminderModule.cs +++ b/Budet-cho-bot/Modules/ReminderModule.cs @@ -1,19 +1,18 @@ using Discord.Commands; -using Discord.Commands.Builders; using Newtonsoft.Json.Linq; namespace Discord_Bot { public class ReminderModule : ModuleBase { - private const long DAY_PERIOD = 24 * 60 * 60 * 1000; // 10 * 1000; // + private const long DAY_PERIOD = 24 * 60 * 60 * 1000; // 10 * 1000; // private Timer reminderTimer; - protected override void OnModuleBuilding(CommandService commandService, ModuleBuilder builder) + [Command("reloadTimer")] + private async Task SetReloadTimer() { - base.OnModuleBuilding(commandService, builder); - Console.WriteLine($"{DateTime.Now.TimeOfDay:hh\\:mm\\:ss} | hello world "); ReloadTimers(); + await ReplyAsync($"Заебись"); } [Command("remindertime")] @@ -28,6 +27,7 @@ namespace Discord_Bot private async Task SetSequence([Remainder]string message = "") { SaveToConfig("sequence", message); + SaveToConfig("sequenceIndex", "0"); await ReplyAsync($"Заебись"); } @@ -40,30 +40,87 @@ namespace Discord_Bot private void ReloadTimers() { - var time = Functions.GetConfigItem("reminderTime"); - if (time.Type == JTokenType.Boolean) - return; - - var nextReminder = Utility.ParseTime(time.ToString()); + var reminder = GetReminderTime(); var now = DateTime.Now; - var span = (nextReminder - now).TotalMilliseconds; + var span = (reminder - now).TotalMilliseconds; if (span < 0) { - // skip to next day - nextReminder = nextReminder.AddDays(1); - span = (nextReminder - now).TotalMilliseconds; + // skip to next period + var d = (now - reminder).TotalMilliseconds + DAY_PERIOD; + reminder = reminder.AddMilliseconds(d); + span = (reminder - now).TotalMilliseconds; } - reminderTimer = new Timer(SendReminder, "sd", (long)span, DAY_PERIOD); + + RecalcSequenceIndex(); + } + + private DateTime GetReminderTime() + { + var time = Functions.GetConfigItem("reminderTime"); + if (time.Type == JTokenType.Boolean) + return DateTime.Now; + + return Utility.ParseTime(time.ToString()); } private async void SendReminder(object? state) { - //check sequence - + if (!CheckSequenceAndIncrementIndex()) + return; + var users = Functions.GetConfigItem("users").ToString(); - await ReplyAsync($"{users}\nБудет чо?"); + var message = $"{users}\nБудет чо? {DateTime.Now}"; + await ReplyAsync(message); + } + + private void RecalcSequenceIndex() + { + var reminder = GetReminderTime(); + var now = DateTime.Now; + var sequence = GetSequence(); + + var span = (now - reminder).TotalMilliseconds; + var spanMinusFullSequences = (int)MathF.Floor((float)span % (DAY_PERIOD * sequence.Length)); + var index = spanMinusFullSequences / DAY_PERIOD; + SaveToConfig("sequenceIndex", index.ToString()); + } + + private bool CheckSequenceAndIncrementIndex() + { + var sequenceIndex = GetSequenceIndex(); + var sequence = GetSequence(); + if (string.IsNullOrEmpty(sequence)) + return true; + + var result = sequence[sequenceIndex] == '!'; + sequenceIndex = (sequenceIndex + 1) % sequence.Length; + SaveToConfig("sequenceIndex", sequenceIndex.ToString()); + + return result; + } + + private int GetSequenceIndex() + { + var sequenceIndexToken = Functions.GetConfigItem("sequenceIndex"); + if (sequenceIndexToken.Type == JTokenType.Boolean) + { + SaveToConfig("sequenceIndex", "0"); + return 0; + } + return (int)sequenceIndexToken; + } + + private string GetSequence() + { + var sequenceIndexToken = Functions.GetConfigItem("sequence"); + if (sequenceIndexToken.Type == JTokenType.Boolean) + { + SaveToConfig("sequence", ""); + return ""; + } + return sequenceIndexToken.ToString(); } private void SaveToConfig(string key, string data)