All pastes #241841 Raw Edit

Stuff

public text v1 · immutable
·published 2006-11-06 18:05 UTC
rendered paste body
#B-Botcode on
;Note that this entire example is very simplistic, there is little to no error checking
;and the script uses a masktype 3 to add users to it's userlist, which in most
;cases is sufficient. Also, there's no flood protection, this is merely
;a very basic "get ops" kinda bot :)
;###################
;#1st, user level management
;###################
on 100:TEXT:!addmaster *:#:{ .guser 75 $2 3 }
;Triggers on level 100, which is the owner. Owner can add users of any
;level. Here users are added with mask 3, you can change this at will.
;----
;Broken down: This event triggers on text typed in the channel. The
;100 ensures that the event will only trigger when an user with level
;100 is typing it, the # means that the event should trigger only when
;the command is typed in the channel, not in private msg.
;guser is a command that adds the given nick to a level, here the level
;to be added to is 75 (master in our example), with masktype 3
;(which is a typical *!*identd@*.isp.com). !addmaster will be parameter 1
;($1) in the command given, so the nickname to add will be $2.
on 75:TEXT:!delmaster *:#:{
  ;as above, but here the event will trigger for masters as well as owners
  ;(masters are level 75).
  IF ($2) && ($level($address($nick,3)) >= 100) { .ruser 75 $2 3 }
  ;if a nick is specified, the owner (level 100) may remove a master
  ;----
  ;Broken down: IF ($2) checks if there is another parameter in the command,
  ;if there is, and the level of the user giving the command is 100 (owner)
  ;or more, then proceed with removing the user specified
  ;(ruser removes an user from the userlevel specified).
  ELSEIF ($level($address($nick,3)) == 75) { .ruser 75 $nick 3 }
  ;if no nick specified, a master (level 75) may remove himself.
  ;----
  ;Broken down: This triggers if the if ($2) doesn't, and the level of the
  ;user using the command is 75 (master). It will proceed to removing the
  ;person typing the command from userlevel master.
}
on 75:TEXT:!addop *:#:{ .guser 50 $2 3 }
on 50:TEXT:!delop *:#:{
  IF ($2) && ($level($address($nick,3)) >= 75) { .ruser 50 $2 3 }
  ELSEIF ($level($address($nick,3)) == 50) { .ruser 50 $nick 3 }
  ;these lines are similar to the add/delmaster lines.
}
on 50:TEXT:!addvoice *:#:{ .guser 25 $2 3 }
on 25:TEXT:!delvoice *:#:{
  IF ($2) && ($level($address($nick,3)) >= 50) { .ruser 25 $2 3 }
  ELSEIF ($level($address($nick,3)) == 25) { .ruser 25 $nick 3 }
}
on 25:TEXT:!level *:#:{
  IF ($2) { msg $chan $2 $+ 's level is $level($address($2,3)) }
  ;if a nick is specified, it's userlevel will be msg'd to the channel
  ;----
  ;Broken down: If an additional parameter was given in the command, then
  ;tell the channel what userlevel this user specified in $2 (parameter two)
  ;had. $+ is a special identifier enabling you to pull two characters or words
  ;together, typically used where you want other characters next to an identifier,
  ;which is otherwise an impossibility (next to always).
  ELSE { msg $chan Your level is $level($address($nick,3)) }
  ;if no nick specified, the user's level is msg'ed to the channel.
}

;#################
;#2nd, automatic op/voice
;#################

on @25:JOIN:#:{
  ;this event will op owner/master/op on join to the channel,
  ;and voice a voice level user when he joins
  IF ($level($address($nick,3)) >= 50) { mode # +o $nick }
  ELSEIF ($level($address($nick,3)) < 50) { mode # +v $nick }
}

;##################
;#3rd, op/voice on demand
;##################
on @50:TEXT:!op *:#:{
  ;Ops a given user if specified by a master or owner, otherwise it'll
  ;op the user using the command
  IF ($level($address($nick,3)) >= 75) {
    IF ($2) { mode # +o $2 }
    ELSE { mode # +o $nick }
  ELSEIF ($level($address($nick,3)) < 75) { mode # +o $nick }
}

on @25:TEXT:!voice *:#:{
  ;Voices a given user specified by an op or above, or voices the nick
  ;using the command otherwise
  IF ($level($address($nick,3)) >= 50) {
    IF ($2) { mode # +v $2 }
    ELSE { mode # +v $nick }
  ELSEIF ($level($address($nick,3)) < 50) { mode # +v $nick }
}

on @*:TEXT:!devoice *:#:{
  ;devoices any user if specified by an op or above, otherwise it'll
  ;devoice whoever is using the command. Note that even users not added
  ;to the bot can use this command to devoice themselves.
  IF ($level($address($nick,3)) >= 50) {
    IF ($2) { mode # -v $2 }
    ELSE { mode # -v $nick }
  ELSE { mode # -v $nick }
}


;##############
;#4th, Kicks and bans
;##############

on @50:TEXT:!kick *:#:{ kick # $2 $3- }
;kicks the nick specified with a given message, when command
;is given by an op or above. The message will be
;all text written after the nick of the user to kick

on @75:TEXT:!kb *:#:{ ban -u30 # $2 3 | kick # $2 $3- }
;as above, but will also ban the user for 30 seconds using
;masktype 3.

;##################
;#5th join/part/quit system
;##################

on 75:TEXT:!join *:*:{ join #$2 }
;a master (level 75) user can make the bot join another channel
on 75:TEXT:!part *:*:{
  ;a master can also make the bot leave a channel specified
  IF ($2 ischan) { part #$2 }
  ;if the channel specified is an actual channel the bot is on, leave it
  ELSEIF ($active ischan) { part $active }
  ;if no channel specified, but active window is a channel, leave it.
}
on 100:TEXT:!quit:*:{ quit Bot shut down ordered by $nick ( $+ $1- $+ ) }
;owner can make the bot quit

;############
;#6th, Help system
;############

on *:JOIN:#:{
;sends a simple message to people joining the channel, when they are not
;added to the bot (this to prevent regular users of the channel from the
;annoyance of being told this over and over again :)
  IF ($level($address($nick,3)) < 25) {
    .notice $nick Welcome to $chan $+ , $nick $+ ! I am this channel's bot,
    ;$chan will be replaced by the channel joined. 
    .notice $nick and you may request help on a specific topic by sending
    .notice $nick me a message like /msg $me help [topic].
    ;$me will be replaced with the bot's nick. It's merely there for convenience
    .notice $nick Topic is optional, help alone will send you a list
    .notice $nick of available help topics. Thank you and have a nice day :)
  }
}

on *:TEXT:help *:*:{
  IF ($2 == voice) {
    ;the requested help was on the voice command,
    ;so we send the user the appropriate help.
    .notice $nick Help on voice 
    .notice $nick Syntax: !voice [nick]
    .notice $nick Available to level 25 users and above,
    .notice $nick nick is optional.
  ELSEIF ($2 == op) { .notice $nick etc }
  ELSE {
    ;General help telling the user which commands are available on the bot
    ;this triggers if none of the above sections triggers (in other words,
    ;when an unspecified word is used for parameter two).
    .notice $nick Help system for $me $+ :
    .notice $nick Available commands:
    .notice $nick !op [nick] | !voice [nick]
    .notice $nick etc..
  }
}
#B-Botcode end