Code:
alias rebuildmenu {
  var %popupfile = $qt($scriptdir $+ popups.mrc)
  .fopen -o popups %popupfile
  if ($ferr) { return }
  var %ai = 1, %v1, %n = 1
  while ($isalias(___visible $+ %ai)) {
    .alias ___visible $+ %ai
    inc %i
  }
  .fwrite -n popups menu status $chr(123)
  if ($window(@*,0)) {
    .fwrite -n popups @Windows
    var %@i = 1
    while ($window(@*,%@i)) {
      %v1 = $v1
      .alias ___visible $+ %n $chr(123) return $!iif(!$window( %v1 ).tbstate || !$window( %v1 ).sbstate,0,1) $chr(125)
      .fwrite -n popups $+(.,$!iif(!$___visible $+ %n $chr(44) Show $chr(44) Hide) %v1,: $chr(123) window $!iif(!$___visible $+ %n $chr(44) -w3 $chr(44) -w0) $v1 $chr(125))
      inc %@i
      inc %n
    } 
  }
  if ($chat(0)) { 
    .fwrite -n popups .DCC Chats 
    var %chi = 1
    while ($chat(%chi)) {
      %v1 = $v1
      .alias ___visible $+ %n $chr(123) return $!iif(!$window( = $+ %v1 ).tbstate || !$window( = $+ %v1 ).sbstate,0,1) $chr(125)
      .fwrite -n popups $+(..,$!iif(!$___visible $+ %n $chr(44) Show $chr(44) Hide) %v1,:,$chr(123) scon %ni $chr(124) window $!iif(!$___visible $+ %n $chr(44) -w3 $chr(44) -w0) = $+ %v1 $chr(125))
      inc %chi
      inc %n
    }
  }
  var %ni = 1
  while ($scon(%ni)) {
    scon %ni
    .alias ___visible $+ %n $chr(123) scon %ni $chr(124) return $!iif(!$window(status window).tbstate || !$window(status window).sbstate,0,1) $chr(125)
    .fwrite -n popups $scon(%ni).network
    .fwrite -n popups $+(.,$!iif(!$___visible $+ %n $chr(44) Show $chr(44) Hide) $scon(%ni).network (Status Window):,$chr(123) scon %ni $chr(124) window $!iif(!$___visible $+ %n $chr(44) -w3 $chr(44) -w0) "status window" $chr(125))
    inc %n
    if ($chan(0)) {
      .fwrite -n popups .Channels
      var %ci = 1
      while ($chan(%ci)) {
        %v1 = $v1
        .alias ___visible $+ %n $chr(123) scon %ni $chr(124) return $!iif(!$window( %v1 ).tbstate || !$window( %v1 ).sbstate,0,1) $chr(125)
        .fwrite -n popups $+(..,$!iif(!$___visible $+ %n $chr(44) Show $chr(44) Hide) %v1,:,$chr(123) scon %ni $chr(124) window $!iif(!$___visible $+ %n $chr(44) -w3 $chr(44) -w0) %v1 $chr(125))
        inc %ci
        inc %n
      }
    }
    if ($query(0)) {
      %v1 = $v1
      .fwrite -n popups .Queries
      var %qi = 1
      while ($query(%qi)) {
        %v1 = $v1
        .alias ___visible $+ %n $chr(123) scon %ni $chr(124) return $!iif(!$window( %v1 ).tbstate || !$window( %v1 ).sbstate,0,1) $chr(125)
        .fwrite -n popups $+(..,$!iif(!$___visible $+ %n $chr(44) Show $chr(44) Hide) %v1,:,$chr(123) scon %ni $chr(124) window $!iif(!$___visible $+ %n $chr(44) -w3 $chr(44) -w0) %v1 $chr(125))
        inc %qi
        inc %n
      }
    }
    inc %ni
  }
  .fwrite -n popups $chr(125)
  .fclose popups
  .reload -rs %popupfile
}

on *:join:#:{
  if ($nick == $me) { rebuildmenu }
}
on *:part:#:{
  if ($nick == $me) { rebuildmenu }
}
on *:kick:#:{
  if ($knick == $me) { rebuildmenu }
}
on *:quit:{
  if ($nick == $me) { rebuildmenu }
}
on *:connect:{ rebuildmenu }
on *:disconnect:{ rebuildmenu }
on *:open:?:{ rebuildmenu }
on *:close:*:{ rebuildmenu }


Kinda messy but it works and it's fast.

I seriously doubt you'll have any aliases called ___visible<N>, but this script will delete and manage all aliases by that name.

Enjoy smile