Code:
alias -l max.topic.length return 512
alias -l channel return #CHANNEL
;
on *:JOIN:$($channel): {
  if ($addtok($remtok(%jtnicks,$nick,1,32),$nick,32) != %jtnicks) {
    set -s %jtnicks $v1
    while ($len(%jtnicks) > $max.topic.length) { | var %jtnicks = $gettok(%jtnicks,2-,32) } | .timer.topic.change 1 1 topic $chan %jtnicks
  }
}
;
on *:PART:$($channel):{ 
  if ($istok(%jtnicks,$nick,32)) {
    set -s %jtnicks $remtok(%jtnicks,$nick,1,32)
    while ($len(%jtnicks) > $max.topic.length) { | var %jtnicks = $gettok(%jtnicks,2-,32) } | .timer.topic.change 1 1 topic $chan %jtnicks
  }
}
on *:KICK:$($channel):{
  if ($istok(%jtnicks,$knick,32)) {
    set -s %jtnicks $remtok(%jtnicks,$knick,1,32)
    while ($len(%jtnicks) > $max.topic.length) { | var %jtnicks = $gettok(%jtnicks,2-,32) } | .timer.topic.change 1 1 topic $chan %jtnicks
  }
}
;
on *:QUIT:{ var %chan = $channel
  if ($nick ison %chan) {
    set -s %jtnicks $remtok(%jtnicks,$nick,1,32)
    while ($len(%jtnicks) > $max.topic.length) { | var %jtnicks = $gettok(%jtnicks,2-,32) } | .timer.topic.change 1 1 topic %chan %jtnicks
  }
}
;
on *:NICK:{ var %chan = $channel
  if ($istok(%jtnicks,$nick,32)) {
    if ($reptok(%jtnicks,$nick,$newnick,1,32) != %jtnicks) {
      set -s %jtnicks $v1
      while ($len(%jtnicks) > $max.topic.length) { | var %jtnicks = $gettok(%jtnicks,2-,32) } | .timer.topic.change 1 1 topic %chan %jtnicks
    }
  }
}