on *:JOIN:#:{
  if ($istok(%schans,$chan,32)) {
    if (m iswmcs $chan($chan).mode) { 
      if ($me isop $chan) || ($me ishop $chan) mode $chan +v $nick
    }
  }
}
alias scramble {
  var %1 = $1,%l = 1,%t = $r(1,3),%ls
  while (%l <= $len(%1)) { 
    var %ls = %ls $mid(%1,%l,1)
    inc %l
  }
  if (%t == 1) var %word = $sorttok(%ls,32)
  elseif (%t == 2) var %word = $sorttok(%ls,32,r)
  elseif (%t == 3) {
    var %w = %ls,%n = 1,%word
    while (%n <= $numtok(%ls,32)) {
      var %_n = $numtok(%w,32),%rand = $r(1,%_n)
      var %letter = $gettok(%w,%rand,32)
      var %word = %word %letter
      var %w = $remtok(%w,%letter,1,32)
      ; echo -a w: %w ; word: %word ; _n: %_n ; letter: %letter 
      inc %n
    }
  }
  var %word = $remove(%word,$chr(32))
  if (%word) return %word
}
alias scram.sen {
  var %g = 1,%sen
  while (%g <= $numtok($1-,32)) {
    var %word = $gettok($1-,%g,32),%sword = $scramble(%word)
    var %sen = %sen %sword
    inc %g
  }
  if (%sen) return %sen
}
alias scram {
  if ($1 == start) {
    if (!$hget($+(scram,.,$2))) {
      hadd -m $+(scram.,$2) word $read(words.txt)
      hadd $+(scram.,$2) scrambled $scramble($hget($+(scram.,$2),word)) 
      .timerscramstop. $+ $2 1 30 scram stop $2 5
      _msg_ -o Scrambled word: $hget($+(scram.,$2),scrambled)
    }
  }
  elseif ($1 == stop) {
    if ($hget($+(scram,.,$2))) {
      if ($timer($+(scramstop.,$2))) .timerscramstop. $+ $2 off
      ; var %winner = $hget($+(scram.,$2),winner)
      var %word = $hget($+(scram.,$2),word) 
      ; if (%winner) var %end = Winner: %winner $+ !
      if (!$hget($+(scram.,$2),winner)) _msg_ -o Unscrambled word: %word
      hfree scram. $+ $2
      if ($3 isnum) .timerscramstart. $+ $2 1 $3 scram start $2
    }
  }
  elseif ($1 == ans) { 
    if ($hget($+(scram.,$2))) {
      var %word = $hget($+(scram.,$2),word)
      if ($3 !=== %word) {
        _msg_ -o Failed attempt by $2 $+ .. ( $+ $3 $+ )
      }
      else { 
        hadd $+(scram.,$2) winner $2
        .timer 1 0 scram stop $2 5
        _msg_ -o Word: $3 $+ ; Unscrambling champ: $2
      }
    }
  }
}
on 100:TEXT:*:?:{
  if ($left($1,1) !isalnum) var %s = $right($1,-1),%t = $left($1,1)
  if (%s == scram) scram $2 $nick $3
  if (%s == scramble) _msg $nick Scrambled word(s): $scram.sen($2-) ( $+ $2- $+ )
}
on 100:TEXT:*:#:{
  if ($left($1,1) !isalnum) var %s = $right($1,-1),%t = $left($1,1)
  if ($istok(%schans,$chan,32)) { 
    if ($istok(m mass,%s,32)) mass $2 $chan $3-
  }
}
alias mass {
  if ($left($1,1) isin -+) {
    var %s = $right($1,-1),%t = $left($1,1)
    if ($3 === -e) var %ex = $4-
    if (%s isincs aohv) {
      var %nick = 1,%nicks
      while (%nick <= $nick($2,0)) && (%nick <= $modespl) {
        whilefix
        if (!$istok(%ex,$nick($2,%nick),32)) var %nicks = %nicks $nick($2,%nick)
        inc %nick
      }
      mode $2 %t $+ $str(%s,$numtok(%nicks,32)) %nicks
    }
  }
}
