async Task <bool> IPermissionConfig.WhitelistModule(ITextChannel channel, ModuleInfo module) { var ch = QueryChannel(channel); if (ch != null) { var n = QueryModule(module); if (n == null) { n = new ConfigModule { ModuleName = module.Name }; Modules.Add(n); await SaveChangesAsync().ConfigureAwait(false);; } var hasThis = QueryChannelModules().Any(m => m.Module.Id == n.Id && m.Channel.Id == ch.Id); if (!hasThis) { var cm = new ChannelModule <TChannel, TUser> { Channel = ch, Module = n }; ChannelModules.Add(cm); //ch.WhiteListedModules.Add(cm); await SaveChangesAsync().ConfigureAwait(false);; } return(!hasThis); } return(false); }
async Task <bool> IPermissionConfig.BlacklistModule(ITextChannel channel, ModuleInfo module) { var mod = await QueryChannelModules() .Where(m => m.Channel.ChannelId == channel.Id) .SingleOrDefaultAsync(m => m.Module.ModuleName == module.Name).ConfigureAwait(false); if (mod != null) { ChannelModules.Remove(mod); await SaveChangesAsync().ConfigureAwait(false); return(true); } return(false); }
private IQueryable <ChannelModule <TChannel, TUser> > QueryChannelModules() => ChannelModules.Include(cm => cm.Channel).Include(cm => cm.Module);