public async Task Study(CommandContext ctx, [RemainingText] string subject) { //Get ID and check if exists on the DB String UserID = ctx.User.Id.ToString(); TryAddMember(ctx.Member); //Variables DateTime StartTime = DateTime.Now; InteractivityExtension interactivity = ctx.Client.GetInteractivity(); DiscordEmoji EmojiStopStudying = DiscordEmoji.FromName(ctx.Client, ":octagonal_sign:"); TimeSpan StudyTime; DateTime EndTime; //Create and send embed DiscordMessage mensaje = await ctx.Member.SendMessageAsync( HelperMethods.QuickEmbed($"Studying {subject}", $"Please click on the reaction {EmojiStopStudying} when you stop studying", false )); //sendembed //Create emoji and wait for answer await mensaje.CreateReactionAsync(EmojiStopStudying); var em = await interactivity.WaitForReactionAsync(xe => xe.Emoji.Equals(EmojiStopStudying), ctx.User, TimeSpan.FromHours(4)); if (!em.TimedOut) { //User clicks on the reaction EndTime = DateTime.Now; StudyTime = EndTime - StartTime; await mensaje.ModifyAsync("", HelperMethods.QuickEmbed($"Study Ended {subject}", $"You've studied `{subject}` for {StudyTime.Hours}:{StudyTime.Minutes}:{StudyTime.Seconds}", false, DiscordColor.Red.ToString()) ); DBInterface.Instance.AddTime(UserID, subject, StartTime, EndTime); } else { //timeout await mensaje.ModifyAsync("", HelperMethods.QuickEmbed("4 Hours Reached, React to confirm changes", "If not they will be lost.\n*Also this would be a good time to take care for youself and take a break*", false, DiscordColor.Yellow.ToString()) ); DiscordMessage mencion = await ctx.Member.SendMessageAsync(ctx.Member.Mention); //second confirm var confirm = await interactivity.WaitForReactionAsync(xe => xe.Emoji.Equals(EmojiStopStudying), ctx.User, TimeSpan.FromMinutes(5)); if (!confirm.TimedOut) { EndTime = DateTime.Now; StudyTime = EndTime - StartTime; await mensaje.ModifyAsync("", HelperMethods.QuickEmbed("Finished Studying", $"You've studied `{subject}` for {StudyTime.Hours:00}:{StudyTime.Minutes:00}", false, DiscordColor.Green.ToString()) ); DBInterface.Instance.AddTime(UserID, subject, StartTime, EndTime); await mencion.DeleteAsync(); } else { //timeout and canel await mensaje.ModifyAsync("", HelperMethods.QuickEmbed("Exceeded time limit", "No Study time has been added", false, DiscordColor.Red.ToString()) ); await mencion.DeleteAsync(); } } }