private async Task CheckMutesAsync() { try { using (var dctx = new MuteContext()) { var dueMutes = dctx.Mutes .Where(x => x.DueAt.ToUnixTimeMilliseconds() <= DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()); if (dueMutes.Count() == 0) { return; } foreach (var mute in dueMutes) { var guild = _client.GetGuild(mute.GuildId); var target = guild?.GetUser(mute.MutedId); var mutedRole = guild?.Roles.FirstOrDefault(role => role.Name.ToLower() == _config["moderation_mute_name"].ToLower()); if (target is null) { continue; } if (mutedRole is null) { continue; } try { await target.RemoveRoleAsync(mutedRole); } catch { } continue; } dctx.Mutes.RemoveRange(dueMutes); dctx.SaveChanges(); } } finally { this._checkTimer.Change(PollRate, Timeout.Infinite); } }
public bool RemoveQueuedUnmute(IUser user) { using (var dctx = new MuteContext()) { var mute = dctx.Mutes.FirstOrDefault(x => x.MutedId == user.Id); if (mute is null) { return(false); } dctx.Remove(mute); dctx.SaveChanges(); return(true); } }
public bool TryAddMute(IUser actor, IUser target, IGuild guild, DateTimeOffset dueAt) { using (var dctx = new MuteContext()) { if (dctx.Mutes.Any(x => x.MutedId == target.Id)) { return(false); } dctx.Add(new Mute { ActorId = actor.Id, MutedId = target.Id, DueAt = dueAt, GuildId = guild.Id }); dctx.SaveChanges(); return(true); } }