Seb icon

Userlist 6.0

Seb | PRO | 09/14/25 08:21:50 AM UTC (Edited) | 0 ⭐ | 612 👁️ | Never ⏰ | []
mIRC |

15.6 KB

|

None

|

0 👍

/

0 👎

##############################
#      Userlist System       #
#        Version: 6.0        #
#          By: Seb           #
#   Net: irc.undernet.org    #
#   Chan: #mircscripting     #
##############################
 
#aliases
 
alias user.list { 
  var %dbp = database\ $+ # $+ .ini
  var %valid.levels = op,voice,protect,bot,manager
  var %pull.level = $1
  if ($1 !isin %valid.levels) { echo -at - [Error] Invalid Level, try: /user.list <op|voice|protect|bot|manager> | halt }
  if ($ini(%dbp,$1,0) == $null) { echo -at - $1 List Empty | halt }  
  echo -at - Listing:4 $1 on # 
  var %o = 1 | while (%o <= $ini(%dbp,$1,0)) { echo -at - $2 $ini(%dbp,$1,%o) | inc %o } 
}
 
alias show.levels {
  var %dbp = database\ $+ # $+ .ini
  echo -a command disabled for now
  msg $chan Levels for $1 with this mask :: $address($1,2)
  msg $chan $&
    $iif($readini(%dbp, manager, $address($1,2)),3+manager,4-manager) $&    
    $iif($readini(%dbp, infoline, $address($1,2)),3+infoline,4-infoline) $&    
    $iif($readini(%dbp, op, $address($1,2)),3+autoop,4-autoop) $&    
    $iif($readini(%dbp, voice, $address($1,2)),3+autovoice,4-autovoice) $&    
    $iif($readini(%dbp, keepop, $address($1,2)),3+keepop,4-keepop) $&    
    $iif($readini(%dbp, bot, $address($1,2)),3+bot,4-bot) $& 
    $iif($readini(%dbp, protect, $address($1,2)),3+protect,4-protect)               
}
 
 
alias update.levels {
  var %dbp2 = database\ $+ $2 $+ .ini
  msg $2 Levels for $1 with this mask :: $address($1,2)
  msg $2 $&
    $iif($readini(%dbp2, manager, $address($1,2)),3+manager,4-manager) $&    
    $iif($readini(%dbp2, infoline, $address($1,2)),3+infoline,4-infoline) $&    
    $iif($readini(%dbp2, op, $address($1,2)),3+autoop,4-autoop) $&    
    $iif($readini(%dbp2, voice, $address($1,2)),3+autovoice,4-autovoice) $&    
    $iif($readini(%dbp2, keepop, $address($1,2)),3+keepop,4-keepop) $&    
    $iif($readini(%dbp2, bot, $address($1,2)),3+bot,4-bot) $& 
    $iif($readini(%dbp2, protect, $address($1,2)),3+protect,4-protect) $&
    $iif($readini(%dbp2, suspend, $address($2,2)),3+suspend,4-suspend)        
}
 
alias c.update { 
  if ($timershow) { halt }
  set %dbupchan $chan
  .timer $+ show 1 2 update.levels $1 %dbupchan
  unset %dbupchan
  echo -at - Updating levels for $1 on %dbupchan
}
 
alias userlist.help {
  echo -at - ==============================
  echo -at -     Userlist System Help
  echo -at -     Version: 5.2
  echo -at - ==============================
  echo -at -
  echo -at - Available Aliases:
  echo -at - /user.list <level> - Lists users with specific level
  echo -at -  Valid levels: op, voice, protect, bot, manager
  echo -at -
  echo -at - /show.levels <nick> - Shows all levels for a user
  echo -at - /update.levels <nick> <channel> - Updates level display
  echo -at - /c.update <nick> - Updates levels with timer delay
  echo -at - /userlist.help - Shows this help file
  echo -at -
  echo -at - Channel Commands:
  echo -at - .who <nick> - Shows user levels and info
  echo -at - .mod <nick> <+/-level> - Modify user levels (manager only)
  echo -at - +infoline <nick> <message> - Add infoline to user
  echo -at - -infoline <nick> - Remove infoline from user
  echo -at -
  echo -at - Available Levels:
  echo -at - +manager - Full access, can modify other users
  echo -at - +autoop - Auto-op on join
  echo -at - +autovoice - Auto-voice on join  
  echo -at - +keepop - Maintains op status if deopped
  echo -at - +protect - Protected from kicks/bans
  echo -at - +bot - Bot user with auto-op
  echo -at - +suspend - Suspended user (temporary ban)
  echo -at - +infoline - Custom message shown on join
  echo -at -
  echo -at - Examples:
  echo -at - /user.list manager
  echo -at - .mod SomeUser +autoop +protect
  echo -at - .mod SomeUser -autovoice
  echo -at - +infoline SomeUser Welcome back!
  echo -at -
  echo -at - Database files stored in: database\#channelname.ini
  echo -at - Right-click users or channel for GUI menus
  echo -at - ==============================
}
 
#events
 
on *:JOIN:#:{
  var %dbp = database\ $+ # $+ .ini
  if ($readini(%dbp, suspend, $address($nick,2))) { msg $chan $+([,$nick,]) Is Suspended | halt }
  if ($readini(%dbp, infoline, $address($nick,2))) { 
    if ($nick == $me) { return }
    msg $chan ( $+ $nick $+ ) $readini(%dbp, infoline, $address($nick,2)) 
  }
  if ($readini(%dbp, op, $address($nick,2)) == 1) && ($readini(%dbp, voice, $address($nick,2)) == 1) { 
    .mode # +ov $nick $nick 
    halt 
  } 
  if ($readini(%dbp, op, $address($nick,2)) == 1) { 
    mode $chan +o $nick 
    halt 
  } 
  if ($readini(%dbp, voice, $address($nick,2)) == 1) { 
    mode $chan +v $nick 
    halt
  } 
}
 
on *:KICK:#:{ 
  var %dbp = database\ $+ # $+ .ini
  if ($readini(%dbp, protect, $address($knick,2)) == 1) { 
    ban -k $chan $nick $knick is Protected! [Suspended: 1h] 
    writeini %dbp suspend $address($nick,2) 1
    .timer 1 3600 remini %dbp suspend $address($nick,2)
  } 
}
 
on *:ban:#:{ 
  var %dbp = database\ $+ # $+ .ini
  if ($bnick == $nick) { halt }
  if ($readini(%dbp, protect, $address($bnick,2)) == 1) { 
    mode $chan -bo+b $banmask $nick $address($nick,2) 
    kick $chan $nick $bnick is Protected! [Suspended: 1h]
    writeini %dbp suspend $address($nick,2) 1    
    .timer 1 3600 remini %dbp suspend $address($nick,2)
  } 
}
 
on *:DEOP:#:{ 
  var %dbp = database\ $+ # $+ .ini
  if ($nick == $me) { halt }
  if ($opnick == $nick) { halt }
  if ($readini(%dbp, keepop, $address($opnick,2)) == 1) { 
    mode $chan -o+o $nick $opnick 
    msg $chan $opnick has KeepOp Enabled
  } 
}
 
on 1:input:#:{ 
  var %dbp = database\ $+ # $+ .ini
  if ($1 == .who) {
    .timer 1 1 msg $chan Levels for $2 with this mask :: $address($2,2)
    .timer 1 1 msg $chan $&
      $iif($readini(%dbp, manager, $address($2,2)),3+manager,4-manager) $&    
      $iif($readini(%dbp, infoline, $address($2,2)),3+infoline,4-infoline) $&    
      $iif($readini(%dbp, op, $address($2,2)),3+autoop,4-autoop) $&    
      $iif($readini(%dbp, voice, $address($2,2)),3+autovoice,4-autovoice) $&    
      $iif($readini(%dbp, keepop, $address($2,2)),3+keepop,4-keepop) $&    
      $iif($readini(%dbp, bot, $address($2,2)),3+bot,4-bot) $& 
      $iif($readini(%dbp, protect, $address($2,2)),3+protect,4-protect) $&
      $iif($readini(%dbp, suspend, $address($2,2)),3+suspend,4-suspend)    
    $iif($readini(%dbp, infoline, $address($2,2)),msg $chan Infoline: $readini(%dbp, infoline, $address($2,2)),$null) 
  }
  if ($1 == .mod) {
    if (+bot isin $3-) { writeini %dbp bot $address($2,2) 1 | c.update $2 }
    if (+autoop isin $3-) { writeini %dbp op $address($2,2) 1 | c.update $2 | mode $chan +o $2 }
    if (+autovoice isin $3-) { writeini %dbp voice $address($2,2) 1 | c.update $2 | mode $chan +v $2 }
    if (+keepop isin $3-) { writeini %dbp keepop $address($2,2) 1 | c.update $2 }
    if (+protect isin $3-) { writeini %dbp protect $address($2,2) 1 | c.update $2 }
    if (+manager isin $3-) { writeini %dbp manager $address($2,2) 1 | c.update $2 }
    if (+suspend isin $3-) { writeini %dbp suspend $address($2,2) 1 | c.update $2 }    
    if (-bot isin $3-) { remini %dbp bot $address($2,2) | c.update $2 }
    if (-autoop isin $3-) { remini %dbp op $address($2,2) | c.update $2 | mode $chan -o $2 }
    if (-autovoice isin $3-) { remini %dbp voice $address($2,2) | c.update $2 | mode $chan -v $2 }
    if (-keepop isin $3-) { remini %dbp keepop $address($2,2) | c.update $2 }
    if (-protect isin $3-) { remini %dbp protect $address($2,2) | c.update $2 }
    if (-manager isin $3-) { remini %dbp manager $address($2,2) | c.update $2 }
    if (-suspend isin $3-) { remini %dbp suspend $address($2,2) | c.update $2 }    
  }
  if ($1 == +infoline) {
    writeini %dbp infoline $address($2,2) $3- 
    .timer 1 1 msg $chan Added infoline to $2 on $chan :: $3-
  }
  if ($1 == -infoline) {
    remini %dbp infoline $address($2,2) 
    .timer 1 1 msg $chan Removed infoline From $2 on $chan
  }
}
 
on *:text:.who *:#:{
  var %dbp = database\ $+ # $+ .ini
  msg $chan Levels for $2 with this mask :: $address($2,2)
  .timer 1 3 msg $chan $&
    $iif($readini(%dbp, manager, $address($2,2)),3+manager,4-manager) $&    
    $iif($readini(%dbp, infoline, $address($2,2)),3+infoline,4-infoline) $&    
    $iif($readini(%dbp, op, $address($2,2)),3+autoop,4-autoop) $&    
    $iif($readini(%dbp, voice, $address($2,2)),3+autovoice,4-autovoice) $&    
    $iif($readini(%dbp, keepop, $address($2,2)),3+keepop,4-keepop) $&    
    $iif($readini(%dbp, bot, $address($2,2)),3+bot,4-bot) $& 
    $iif($readini(%dbp, protect, $address($2,2)),3+protect,4-protect) $&
    $iif($readini(%dbp, suspend, $address($2,2)),3+suspend,4-suspend)    
  $iif($readini(%dbp, infoline, $address($2,2)),msg $chan Infoline: $readini(%dbp, infoline, $address($2,2)),$null) 
}
 
on *:TEXT:.mod *:#:{
  var %dbp = database\ $+ # $+ .ini
  if ($readini(%dbp, manager, $address($nick,2)) !== 1) { 
    msg $chan you need manager level to use this command.
    HALT 
  }
  if ($readini(%dbp, manager, $address($nick,2)) == 1) {
    if (+bot isin $3-) { writeini %dbp bot $address($2,2) 1 | c.update $2 }
    if (+autoop isin $3-) { writeini %dbp op $address($2,2) 1 | c.update $2 | mode $chan +o $2 }
    if (+autovoice isin $3-) { writeini %dbp voice $address($2,2) 1 | c.update $2 | mode $chan +v $2 }
    if (+keepop isin $3-) { writeini %dbp keepop $address($2,2) 1 | c.update $2 }
    if (+protect isin $3-) { writeini %dbp protect $address($2,2) 1 | c.update $2 }
    if (+manager isin $3-) { writeini %dbp manager $address($2,2) 1 | c.update $2 }
    if (+suspend isin $3-) { writeini %dbp suspend $address($2,2) 1 | c.update $2 }    
    if (-bot isin $3-) { remini %dbp bot $address($2,2) | c.update $2 }
    if (-autoop isin $3-) { remini %dbp op $address($2,2) | c.update $2 | mode $chan -o $2 }
    if (-autovoice isin $3-) { remini %dbp voice $address($2,2) | c.update $2 | mode $chan -v $2 }
    if (-keepop isin $3-) { remini %dbp keepop $address($2,2) | c.update $2 }
    if (-protect isin $3-) { remini %dbp protect $address($2,2) | c.update $2 }
    if (-manager isin $3-) { remini %dbp manager $address($2,2) | c.update $2 }
    if (-suspend isin $3-) { remini %dbp suspend $address($2,2) | c.update $2 }    
  }
}
 
on *:text:+infoline *:#:{ 
  var %dbp = database\ $+ # $+ .ini
  writeini %dbp infoline $address($nick,2) $2- 
  .notice $nick Added infoline to $nick on $chan :: $2-
}
 
on *:text:-infoline:#:{ 
  var %dbp = database\ $+ # $+ .ini
  remini %dbp infoline $address($nick,2) 
  .notice $nick Removed infoline From $nick on $chan
}
 
#menus 
 
menu nicklist {
  [Userlist System]
  .Add Level
  ..Manager:writeini $+(database\,$chan,.ini) manager $address($$1,2) 1 | echo -at Added $$1 To manager level on $chan with host: $address($$1,2) | mode $chan +o $$1
  ..Auto-Op:writeini $+(database\,$chan,.ini) op $address($$1,2) 1 | echo -at Added $$1 To auto-op list on $chan with host: $address($$1,2) | mode $chan +o $$1
  ..Auto-Voice:writeini $+(database\,$chan,.ini) voice $address($$1,2) 1 | echo -at Added $$1 To auto-voice list on $chan with host: $address($$1,2) | mode $chan +v $$1
  ..Keep-Op:writeini $+(database\,$chan,.ini) keepop $address($$1,2) 1 | echo -at Added $$1 To keep-op list on $chan with host: $address($$1,2) | mode $chan +o $$1
  ..Protect:writeini $+(database\,$chan,.ini) protect $address($$1,2) 1 | echo -at Added $$1 To protect list on $chan with host: $address($$1,2)
  ..Bot:writeini $+(database\,$chan,.ini) bot $address($$1,2) 1 | writeini $+(database\,$chan,.ini) opjoin $address($$1,2) 1 | echo -at Added $$1 To bot list on $chan with host: $address($$1,2) | mode $chan +o $$1
  .Remove Level
  ..Manager:remini $+(database\,$chan,.ini) manager $address($$1,2) | echo -at Removed $$1 from manager list on $chan with host: $address($$1,2) | mode $chan -o $$1
  ..Auto-Op:remini $+(database\,$chan,.ini) op $address($$1,2) | echo -at Removed $$1 from auto-op list on $chan with host: $address($$1,2) | mode $chan -o $$1
  ..Auto-Voice:remini $+(database\,$chan,.ini) voice $address($$1,2) | echo -at Removed $$1 from auto-voice list on $chan with host: $address($$1,2) | mode $chan -v $$1  
  ..Keep-Op:remini $+(database\,$chan,.ini) keepop $address($$1,2) | echo -at Removed $$1 from keep-op list on $chan with host: $address($$1,2)
  ..Protect:remini $+(database\,$chan,.ini) protect $address($$1,2) | echo -at Removed $$1 from protect list on $chan with host: $address($$1,2)
  ..Bot:remini $+(database\,$chan,.ini) bot $address($$1,2) | echo -at Removed $$1 from bot list on $chan with host: $address($$1,2)
  .-
  .Suspend User:writeini $+(database\,$chan,.ini) suspend $address($$1,2) 1 | echo -at Suspended $$1 on $chan with host: $address($$1,2) | kick $chan $$1 User suspended
  .Remove Suspend:remini $+(database\,$chan,.ini) suspend $address($$1,2) | echo -at Removed suspension from $$1 on $chan with host: $address($$1,2)
  .-
  .Infoline
  ..Add Infoline:{ 
    var %msg = $$?="Enter infoline message for $$1:"
    if (%msg) { 
      writeini $+(database\,$chan,.ini) infoline $address($$1,2) %msg 
      echo -at Added infoline to $$1 on $chan :: %msg
    }
  }
  ..Remove Infoline:remini $+(database\,$chan,.ini) infoline $address($$1,2) | echo -at Removed infoline from $$1 on $chan
  .-
  .User Info
  ..Show Levels (show.levels):show.levels $$1
  ..Update Levels (c.update):c.update $$1
  ..Check Who (.who):msg $chan .who $$1
}
 
menu channel {
  [Userlist System]
  .List Users (user.list)
  ..List Managers:user.list manager  
  ..List Auto-Op:user.list op
  ..List Auto-Voice:user.list voice
  ..List Protected:user.list protect
  ..List Bots:user.list bot
  .-
  .Aliases
  ..user.list:{ 
    var %level = $$?="Enter level (manager/op/voice/protect/bot):"
    if (%level) { user.list %level }
  }
  ..show.levels:{ 
    var %nick = $$?="Enter nickname:"
    if (%nick) { show.levels %nick }
  }
  ..update.levels:{ 
    var %nick = $$?="Enter nickname:"
    var %chan = $$?="Enter channel:"
    if (%nick && %chan) { update.levels %nick %chan }
  }
  ..c.update:{ 
    var %nick = $$?="Enter nickname:"
    if (%nick) { c.update %nick }
  }
  .-
  .Channel Commands Help
  ..Show .who command:echo -at Channel command: .who <nick> - Shows user levels and info
  ..Show .mod command:echo -at Channel command: .mod <nick> <+/-level> - Modify user levels (manager only)
  ..Show infoline commands:echo -at Channel commands: +infoline <nick> <message> | -infoline <nick>
  .-
  .Help & Info
  ..Show Help (userlist.help):userlist.help
  ..Show Database Location:echo -at Database files: database\ $+ $chan $+ .ini
  ..Show Script Info:{ 
    echo -at - ==============================
    echo -at - Userlist System Version: 6.0  
    echo -at - By: Seb https://github.com/DooubleTap
    echo -at - Net: irc.undernet.org
    echo -at - Chan: #mircscripting  
    echo -at - Enhanced with complete menus
    echo -at - ==============================
  }
}
 
on *:LOAD:{ 
  echo -at - Userlist v5.2 Successfully loaded 
  echo -at - Make sure the folder database has been created. Type: //run database To verify.
  echo -at - if you see: * /run: unable to open file 'database' Then it failed.  (Will not usually fail)
  echo -at - Just type /mkdir database or open your mIRC folder (where mirc.exe is) and create it manually with read/write permissions
  echo -at - Type /userlist.help for complete command reference
  echo -at - Right-click users or channel for GUI menus
  mkdir database 
}
 

Comments