Code:
on *:start:{
  hmake offensive 5
  hload -n offensive [color:gray]badurls.txt[/color]
}
 
on *:quit:hsave -n offensive [color:gray]badurls.txt[/color]
 
on [color:blue]*[/color]:text:[color:purple]!???url &[/color]:[color:green]#channel[/color]:{
  [color:blue]if $nick isop # || $level($fulladdress) == Access {[/color]
  if $1 == !addurl {
    var %a = $+(*,$2,*)
    if !$read([color:gray]badurls.txt[/color],w,%a) { write [color:gray]badurls.txt[/color] %a }
   }
  if $1 = !delurl {
    var %a = $+(*,$2,*)
    if $read([color:gray]badurls.txt[/color],w,%a) { write -dl $+ $readn [color:gray]badurls.txt[/color] }
  }
  if $hget(offensive) hload -n offensive [color:gray]badurls.txt[/color]
}
 
on [color:red]@+1[/color]:text:*:[color:green]#channel[/color]:{
  if $hfind(offensive,$1-,1,W).data {
    [color:brown]; Here is where your code for
    ; messaging, kicking, banning etc.
    ; should be put[/color]
  }
}

Blue text needs to be altered to the method of access checking you prefer to use
"#channel" obviously should be the channel(s) you want the script to cover
"@+1" means the script will only trigger where you are opped (@), and only for level 1, or no level, users (+1)
"!???url &" defines "!+3chars+url site.to.add|del" ('!addurl somesite.com' or '!delurl whatever.net') to allow the adding/removing urls from the list
badurls.txt is a plain text file containing a list of wildcarded sites to trigger on.
*.offensive.tv*
*www.geopoopies.com*
*http://badness.org*

...