on *:load: { scid -a .msg chanserv owner scid -a .msg chanserv protect } menu channel,menubar { Open channel controls: { if ($dialog(ChanControl)) dialog -x ChanControl dialog -m ChanControl ChanControl } } dialog ChanControl { title "Channel Controls" size -1 -1 170 222 option dbu tab "Channel Modes", 1, 0 0 168 200 check "Invite Only", 2, 5 18 50 10, tab 1 check "Moderated", 3, 5 28 50 10, tab 1 check "No external messges", 4, 5 38 63 10, tab 1 check "Private", 5, 5 48 50 10, tab 1 check "Secret", 6, 5 58 50 10, tab 1 check "Topic lock", 7, 5 68 50 10, tab 1 check "SSL connections only", 8, 5 78 65 10, tab 1 check "Block CTCP's", 9, 5 88 50 10, tab 1 check "Block Channel Notices", 10, 5 98 66 10, tab 1 check "Filter Badwords", 11, 5 108 50 10, tab 1 check "Only registered users may talk", 12, 75 18 88 10, tab 1 check "Disable /KNOCK", 13, 75 28 50 10, tab 1 check "No nick changes", 14, 75 38 50 10, tab 1 check "No kicks allowed", 15, 75 48 50 10, tab 1 check "Only registered nicks may join", 16, 75 58 85 10, tab 1 check "Strip Colours", 17, 75 68 50 10, tab 1 check "No inites", 18, 75 78 50 10, tab 1 check "Block Colour", 19, 75 88 50 10, tab 1 check "Auditorium mode", 20, 75 98 50 10, tab 1 check "Password Protected", 21, 5 118 60 10, tab 1 edit "", 22, 65 118 50 10, tab 1 check "User Limit", 23, 5 130 36 10, tab 1 edit "", 24, 41 130 20 10, tab 1 check "Linked Channel", 25, 5 142 48 10, tab 1 edit "", 26, 53 142 50 10, tab 1 check "Throttle Joins", 27, 5 154 43 10, tab 1 edit "", 28, 49 154 14 10, tab 1 text "Joins/", 29, 64 155 16 8, tab 1 edit "", 30, 79 154 18 10, tab 1 text "Seconds", 31, 98 155 25 8, tab 1 edit "", 32, 6 170 153 28, disable tab 1 multi button "Change Key", 109, 127 118 37 12, tab 1 button "Change Limit", 110, 127 130 37 12, tab 1 button "Change Link", 111, 127 142 37 12, tab 1 button "Change Joins", 112, 127 154 37 12, tab 1 tab "Flood Protect", 33 check "Enabled", 34, 8 37 33 10, tab 33 edit "", 35, 42 37 17 10, tab 33 combo 36, 42 49 25 10, tab 33 drop edit "", 37, 42 61 17 10, tab 33 text "Action:", 40, 21 50 20 8, tab 33 right box "Nick Change", 41, 5 125 71 42, tab 33 check "Enabled", 42, 8 132 31 10, tab 33 edit "", 44, 42 132 17 10, tab 33 edit "", 45, 42 154 17 10, tab 33 text "Action:", 48, 20 144 21 8, tab 33 right text "Action:", 49, 107 144 21 8, tab 33 right edit "", 50, 130 132 17 10, tab 33 check "Enabled", 52, 95 132 33 10, tab 33 edit "", 53, 130 154 17 10, tab 33 box "Knocks", 56, 92 125 71 42, tab 33 check "Enabled", 57, 95 37 32 10, tab 33 box "CTCP's", 58, 5 31 71 42, tab 33 text "Action:", 59, 21 96 20 8, tab 33 right edit "", 60, 42 83 17 10, tab 33 check "Enabled", 61, 8 84 33 10, tab 33 combo 64, 42 95 25 10, tab 33 drop box "Text", 66, 5 77 71 43, tab 33 check "Enabled", 67, 95 84 33 10, tab 33 edit "", 68, 130 107 17 10, tab 33 edit "", 71, 130 83 17 10, tab 33 text "Action:", 72, 108 96 21 8, tab 33 right combo 73, 130 95 25 10, tab 33 drop box "Messages", 74, 92 77 71 43, tab 33 box "Joins", 75, 92 31 71 42, tab 33 combo 76, 130 49 25 10, tab 33 drop text "Action:", 77, 108 50 21 8, tab 33 right edit "", 78, 129 37 17 10, tab 33 edit "", 80, 130 61 17 10, tab 33 edit "", 82, 54 18 17 10, tab 33 text "Time (in seconds):", 83, 6 19 46 8, tab 33 edit "", 84, 5 170 158 27, disable tab 33 multi text "Time:", 38, 21 62 20 8, tab 33 right text "Time:", 39, 107 62 22 8, tab 33 right text "Time:", 46, 108 108 21 8, tab 33 right text "Time:", 51, 21 155 19 8, tab 33 right text "Time:", 54, 106 155 22 8, tab 33 right button "Update Flood Controls", 62, 92 17 70 12, tab 33 text "+N", 47, 43 144 13 8, tab 33 text "+K", 55, 131 144 11 8, tab 33 tab "User Controls", 85 list 86, 99 18 65 141, tab 85 size vsbar button "Kick ", 87, 6 23 29 12, tab 85 button "Ban", 88, 35 23 29 12, tab 85 button "Unban", 89, 64 35 29 12, tab 85 button "Add Except", 91, 6 88 43 12, tab 85 button "Delete Except", 92, 6 100 43 12, tab 85 button "Add Invite", 93, 49 88 43 12, tab 85 button "Delete Invite", 94, 49 100 43 12, tab 85 edit "", 95, 4 162 161 35, disable tab 85 multi button "Deop", 96, 6 66 29 12, tab 85 button "Op", 97, 6 54 29 12, tab 85 button "Halfop", 98, 35 54 29 12, tab 85 button "Dehalfop", 99, 35 66 29 12, tab 85 button "Voice", 100, 64 54 29 12, tab 85 button "Devoice", 101, 64 66 29 12, tab 85 button "Unmute", 102, 35 35 29 12, tab 85 button "Mute", 103, 6 35 29 12, tab 85 button "Notice", 63, 6 120 43 12, tab 85 button "Timed Ban", 43, 64 23 29 12, tab 85 button "Query", 65, 49 120 43 12, tab 85 combo 69, 7 147 84 10, tab 85 drop text "Select default host mask", 105, 8 138 69 8, tab 85 button "Close", 108, 129 204 37 15, ok box "Actions", 90, 4 16 93 143, tab 85 } on *:dialog:ChanControl:init:*: { if ($active !ischan) { dialog -x ChanControl echo 4 -a ERROR: The channel control dialog is only avaliable from a channel halt } set %ChanControl.Chan $active who %ChanControl.Chan getmodes %ChanControl.Chan dialog -t $dname Channel controls for %ChanControl.Chan ; Disable input boxes. These are set through buttons did -b $dname 22,24,26,28,30 ; Check which control set should be used var %netchan = $+($network,.,%ChanControl.Chan) if ($hget(Owner,%netchan)) founderAccess elseif ($hget(admin,%netchan)) adminAccess elseif ($me isop %ChanControl.Chan) opAccess elseif ($me ishelp %ChanControl.Chan) halfopAccess else noAccess ; Populate +f drop down options did -ca $dname 36 +C did -a $dname 36 +m did -a $dname 36 +M did -ca $dname 76 +i did -a $dname 76 +R did -ca $dname 64 kick did -a $dname 64 ban did -ca $dname 73 +m did -a $dname 73 +M RefreshUserslist ; Populate host mask list var %x = 1, %masks = 9 while (%x <= %masks) { did -a $dname 69 $address($me,%x) inc %x } if (%ChanControl.mask) did -c ChanControl 69 %ChanControl.mask } on *:dialog:ChanControl:mouse:*: { ; ********************************* ; * Tab 1 - Channel modes * ; ********************************* if ($did == 2) var %msg = If the channel is invite only users may only join if they are invited by someone already in the channel elseif ($did == 3) var %msg = If the channel is moderated only users with voice or higher will be able to talk elseif ($did == 4) var %msg = This is set by default, if unset people will be able to message the channel without actually being in it elseif ($did == 5) var %msg = Being set to private means that a user needs to knock in order to gain access. [/knock #CHANNEL MESSAGE] elseif ($did == 6) var %msg = Secret channels do not appear in the channel list or in whois messages. elseif ($did == 7) var %msg = This is set by default, if unset anybody is able to change the topic, instead of being restricted to halfops and above elseif ($did == 8) var %msg = This mode is rarely used and will only allow users to join if they are using a secure socket layer connection elseif ($did == 9) var %msg = Stops CTCP's from being able to be sent to the channel elseif ($did == 10) var %msg = Stops Notices from being able to be sent to the channel elseif ($did == 11) var %msg = Causes common swear words to be replaced with elseif ($did == 12) var %msg = If this is set users who have not registered their nicks will be unble to talk elseif ($did == 13) var %msg = Stops users being able to knock on the channel. (IE request invite to invite only channels, or private channels) elseif ($did == 14) var %msg = Stops users from being able to change their nicks while in the channel elseif ($did == 15) var %msg = Stops ops and halfops from being able to kick, does not affect the founder elseif ($did == 16) var %msg = If this is set only users who have registered their nicks will be able to join the channel elseif ($did == 17) var %msg = This strips colours from any messages sent to the channel elseif ($did == 18) var %msg = This option stops users being able to invite others into the channel elseif ($did == 19) var %msg = Blocks colour codes, any message that has colour codes in it will not be sent to the channel elseif ($did == 20) var %msg = hides all non ops from the users list elseif ($did == 21) var %msg = Users must enter a password to join the channel [/join #CHANNEL PASSWORD]. Enter the password in the box provided elseif ($did == 23) var %msg = Sets a user limit on the channel, if the limit is reached no users will be able to join. Enter the limit in the box provided elseif ($did == 25) var %msg = This sets a linked channel and works with the channel limit. If the limit is reached users will instead be sent to the linked channel. Enter the linked channel in the box provided elseif ($did == 27) var %msg = This option provides some protection against join floods. If a user joins more then the specified number of times in the set number of seconds they will be banned. elseif ($did == 109) var %msg = Click here to change the channel key elseif ($did == 110) var %msg = Click here to change the channel limit elseif ($did == 111) var %msg = Click here to change the linked channel elseif ($did == 112) var %msg = Click here to change the join throttle paramaters if (%msg) did -ra $dname 32 %msg unset %msg ; ********************************* ; * Tab 2 - flood control * ; ********************************* if ($did == 82) || ($did == 83) var %msg = The time (in seconds) that the amount of messages specified for each control must occur in to trigger flood protection elseif ($did == 62) var %msg = Update flood control settings, to prevent mode setting spam in the channel while deciding on options, flood control is set all at once when you click here elseif ($mouse.x isnum 14-151) && ($mouse.y isnum 68-146) var %msg = CTCP flood options. The actions for this option are: +C: Blocks channel CTCP's, +m: Mutes the channel, +M: allows only registered nicks to speak elseif ($mouse.x isnum 187-324) && ($mouse.y isnum 68-146) var %msg = Join flood options. The actions for this option are: +i: Sets the channel to invite only, +R: only allows registered nicks to join elseif ($mouse.x isnum 14-151) && ($mouse.y isnum 162-240) var %msg = Text (for the entire channel) flood options. The only avaliable option here is setting +k to prevent knocks elseif ($mouse.x isnum 187-324) && ($mouse.y isnum 162-240) var %msg = Message (per nick) flood options. The actions for this option are: +m: Mute the channel, +M: Allows only registered nicks to speak elseif ($mouse.x isnum 14-151) && ($mouse.y isnum 257-334) var %msg = Nick Change flood options. The only avaliable option here is setting +N to block nick changes elseif ($mouse.x isnum 187-324) && ($mouse.y isnum 257-334) var %msg = Knock flood options. The actions for this option are: kick: Kick the flooder, b: ban the flooder else var %msg = For each enabled flood control section, the action specified will be performed by the set time for that section, if the limit (top input box) for that section is exceeded if (%msg) did -ra $dname 84 %msg unset %msg ; ********************************* ; * Tab 3 - user controls * ; ********************************* if ($did == 87) var %msg = Kick the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) from the room. $crlf $+ NOTE: may not work if user has higher access then yourself elseif ($did == 88) var %msg = Kick and ban the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) $crlf $+ NOTE: may not work if user has higher access then yourself elseif ($did == 90) var %msg = Ban the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) for a set time $crlf $+ NOTE: may not work if user has higher access then yourself elseif ($did == 103) var %msg = Mute the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) without kicking them $crlf $+ NOTE: may not work if user has higher access then yourself elseif ($did == 102) var %msg = Unmute the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) elseif ($did == 89) var %msg = View the banlist to remove a ban. elseif ($did == 97) var %msg = Give the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) op status elseif ($did == 96) var %msg = Remove op access from the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) elseif ($did == 98) var %msg = Give the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) halfop status elseif ($did == 99) var %msg = Remove halfop status from the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) elseif ($did == 100) var %msg = Give the selected user voice status $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) elseif ($did == 101) var %msg = Remove voice status from the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) elseif ($did == 91) var %msg = Add an exception for the selected user $+($chr(40),$did(86).seltext,$chr(41),.) This means that they will not be affected by bans placed upon them elseif ($did == 92) var %msg = Remove exception for the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) elseif ($did == 93) var %msg = Add an invite exception for the selected user $+($chr(40),$did(86).seltext,$chr(41),.) This means that they will not be affected if the channel is invite only elseif ($did == 94) var %msg = Remove invite exception for the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) elseif ($did == 63) var %msg = Send a notice to the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) elseif ($did == 65) var %msg = Send a query (Opens a new window) to the selected user $iif($did(86).seltext,$+($chr(40),$ifmatch,$chr(41))) elseif ($did == 69) || ($did == 105) var %msg = Select the host mask you wish to use for bans, invites and excepts from the drop down list. The examples are taken from you're own host, not what will be used in the command if (%msg) did -ra $dname 95 %msg } on *:dialog:ChanControl:sclick:*: { ; ********************************* ; * Tab 1 - Channel modes * ; ********************************* var %chan = %ChanControl.Chan if ($did == 2) togglemode %chan i elseif ($did == 3) togglemode %chan m elseif ($did == 4) togglemode %chan n elseif ($did == 5) togglemode %chan p elseif ($did == 6) togglemode %chan s elseif ($did == 7) togglemode %chan t elseif ($did == 8) togglemode %chan z elseif ($did == 9) togglemode %chan C elseif ($did == 10) togglemode %chan T elseif ($did == 11) togglemode %chan G elseif ($did == 12) togglemode %chan M elseif ($did == 13) togglemode %chan K elseif ($did == 14) togglemode %chan M elseif ($did == 15) togglemode %chan Q elseif ($did == 16) togglemode %chan R elseif ($did == 17) togglemode %chan S elseif ($did == 18) togglemode %chan V elseif ($did == 19) togglemode %chan c elseif ($did == 20) togglemode %chan u ; k elseif ($did == 21) { if ($did(22)) togglemode %chan k $did(22) elseif ($did == 21) && ($did(21).state == 1) { var %key = $?="Enter desired Channel Key" if (%key) togglemode %chan k %key else { did -ra $dname 32 Key not set as no key was specified did -u $dname 21 } } } elseif ($did == 109) { if ($did(21).state == 1) mode %chan +k %key $?="Enter desired channel key" else { var %key = $?="Enter desired channel key" if (%key) did -ra $dname 22 %key else did -r $dname 22 } } ; l elseif ($did == 23) { if ($did(24)) togglemode %chan l $did(24) elseif ($did(23).state == 1) { var %limit = $?="Enter the desired channel limit" if (%limit isnum 1-) togglemode %chan l %limit else { did -ra $dname 32 limit not set as $iif(%limit,the limit must be a number above 0,no limit was specified) did -u $dname 23 } } } elseif ($did == 110) { if ($did(23).state == 1) mode %chan +l $$?="Enter desired channel limit" else { var %limit = $?="Enter the channel limit" if (%limit) did -ra $dname 24 %limit else did -r $dname 24 } } ; L elseif ($did == 25) { if ($did(26)) togglemode %chan L $did(26) elseif ($did(25).state == 1) { var %link = #$?="Enter the desired Channel Link" if (%link) togglemode %chan L %link else { did -ra $dname 32 Link was not set as no link was specified did -u $dname 25 } } } elseif ($did == 111) { if ($did(25).state == 1) mode %chan +L #$?="Enter desired channel Link" else { var %link = #$?="Enter desired channel Link" if (%link) did -ra $dname 26 %link else did -r $dname 26 } } ; j elseif ($did == 27) { if ($did(28)) && ($did(30)) togglemode %chan j $+($did(28),:,$did(30)) elseif ($did(27).state == 1) { var %joins = $?="Enter max number of joins", %seconds = $?="Enter time limit for these joins (in seconds)" if (%joins isnum 1-) && (%seconds isnum 1-) togglemode %chan j $+(%joins,:,%seconds) else { did -ra $dname 32 Join throttle was not set as both joins and seconds must be numbers greater than 0 did -u $dname 27 } } } elseif ($did == 112) { if ($did(27).state == 1) mode %chan +j $$?="Enter max number of joins" $+ : $+ $$?="Enter number of seconds these joins may occur in" else { var %joins = $?="Enter max number of joins to be allowed", %seconds = $?="Enter the time for these joins to occur in" if (%joins isnum 1-) && (%seconds isnum 1-) { did -ra $dname 28 %joins | did -ra $dname 30 %seconds } else did -r $dname 28,30 } } ; ********************************* ; * Tab 2 - Flood protect * ; ********************************* if ($did == 34) { if ($did(34).state == 1) did -e $dname 35,37,36 else did -b $dname 35,37,36 } elseif ($did == 57) { if ($did(57).state == 1) did -e $dname 78,80,76 else did -b $dname 78,80,76 } elseif ($did == 61) { if ($did(61).state == 1) did -e $dname 60,64 else did -b $dname 60,64 } elseif ($did == 67) { if ($did(67).state == 1) did -e $dname 71,68,73 else did -b $dname 71,68,73 } elseif ($did == 42) { if ($did(42).state == 1) did -e $dname 44,45 else did -b $dname 44,45 } elseif ($did == 52) { if ($did(52).state == 1) did -e $dname 50,53 else did -b $dname 50,53 } elseif ($did == 62) { if ($did(34).state == 1) && ($did(35)) && ($did(37)) { var %option = $+($did(35),c,$chr(35),$remove($did(36),+),$did(37)) var %f = $addtok(%f,%option,44) } elseif ($did(34).state == 1) { var %notset = $addtok(%notset,CTCP,44) did -u $dname 34 did -b $dname 35,36,37 } if ($did(57).state == 1) && ($did(78)) && ($did(80)) { var %option = $+($did(78),j,$chr(35),$remove($did(76),+),$did(80)) var %f = $addtok(%f,%option,44) } elseif ($did(57).state == 1) { var %notset = $addtok(%notset,join,44) did -u $dname 57 did -b $dname 76,78,80 } if ($did(61).state == 1) && ($did(60)) { var %option = $+($did(60),t,$chr(35),$left($did(64),1)) var %f = $addtok(%f,%option,44) } elseif ($did(61).state == 1) { var %notset = $addtok(%notset,text,44) did -u $dname 61 did -b $dname 60,64 } if ($did(67).state == 1) && ($did(71)) && ($did(68)) { var %option = $+($did(71),m,$chr(35),$remove($did(73),+),$did(68)) var %f = $addtok(%f,%option,44) } elseif ($did(67).state == 1) { var %notset = $addtok(%notset,message,44) did -u $dname 67 did -b $dname 71,68,73 } if ($did(42).state == 1) && ($did(44)) && ($did(45)) { var %option = $+($did(44),n,$chr(35),N,$did(45)) var %f = $addtok(%f,%option,44) } elseif ($did(42).state == 1) { var %notset = $addtok(%notset,nick change,44) did -u $dname 42 did -r $dname 44,45 } if ($did(52).state == 1) && ($did(50)) && ($did(53)) { var %option = $+($did(50),k,$chr(35),K,$did(53)) var %f = $addtok(%f,%option,44) } elseif ($did(52).state == 1) { var %notset = $addtok(%notset,knock,44) did -u $dname 52 did -r $dname 50,53 } if ($did(82) && (%f)) { var %f = $+([,%f,]:,$did(82)) mode %chan +f %f did -ra $dname 84 Flood control settings have been updated! $crlf if (%notset) did -a $dname 84 The following options were not set due to missing input: %notset } elseif (!%f) { mode %chan -f } else did -ra $dname 84 ERROR: you must specify time (in seconds) for the flood to trigger in } ; ********************************* ; * Tab 2 - user Controls * ; ********************************* if (!%ChanControl.mask) set %ChanControl.mask 2 if ($did == 69) set %ChanControl.mask $did(69).sel var %pnick = $did(86).seltext var %nick = $remove($did(86).seltext,~,&,@,%,+) var %netchan = $+($network,.,%chan) if ($did == 87) kick %chan %nick $?="Enter a kick reason (optional)" elseif ($did == 88) ban -k %chan %nick %ChanControl.mask $?="Enter a ban reason (optional)" elseif ($did == 43) ban -ku $+ $calc(60 * $$?="How long (in minutes) do you want the ban to last?") %chan %nick %ChanControl.Mask $?="Enter a kick reason (optional)" elseif ($did == 103) { mode %chan -vhaoq $str(%nick $+ $chr(32),5) | ban %chan %nick %ChanControl.mask } elseif ($did == 102) ban -r %chan %nick %ChanControl.mask ; elseif ($did == 89) { BAN LIST THINGY - DO THIS LATER } elseif ($did == 97) mode %chan +o %nick elseif ($did == 96) mode %chan -o %nick elseif ($did == 98) mode %chan +h %nick elseif ($did == 99) mode %chan -h %nick elseif ($did == 100) mode %chan +v %nick elseif ($did == 101) mode %chan -v %nick elseif ($did == 91) mode %chan +e $address(%nick,%ChanControl.mask) elseif ($did == 92) mode %chan -e $address(%nick,%ChanControl.mask) elseif ($did == 93) mode %chan +I $address(%nick,%ChanControl.mask) elseif ($did == 94) mode %chan -I $address(%nick,%ChanControl.mask) elseif ($did == 63) notice %nick $$?="What mesage do you want to send?" elseif ($did == 64) query %nick $$?="What message do you want to send?" } on *:dialog:Chancontrol:edit:*: { if (($did == 24) || ($did == 28) || ($did == 30)) && ($did($did) !isnum) { did -ra $dname $did $left($did($did),-1) did -ra $dname 32 This filed may only contain a numeric value } } ; ################################################################################## ; # Process the output of /mode to refresh all info # ; ################################################################################## alias getmodes { .enable #getmodes mode $1 } #getmodes off raw 329:*: { haltdef | .disable #getmodes } raw 324:*: { haltdef ;nick chan modes [limit] [key] [LINK] [+f] [+j] if ($2 == %ChanControl.chan) { set %ChanControl.modes $remove($3,+) var %modes = %ChanControl.modes var %offmodes = kfLljpsmntirRcQKVGCuzNSMTG var %x = 1, %chars = $len(%modes) while (%x <= %chars) { var %char = $mid(%modes,%x,1) var %offmodes = $removecs(%offmodes,%char) inc %x } var %token = 4 if (l isincs %modes) { var %modes.limit = $ [ $+ [ %token ] ] | inc %token } if (k isincs %modes) { var %modes.key = $ [ $+ [ %token ] ] | inc %token } if (L isincs %modes) { var %modes.link = $ [ $+ [ %token ] ] | inc %token } if (f isincs %modes) { var %modes.flood = $ [ $+ [ %token ] ] | inc %token } if (j isincs %modes) var %modes.join = $ [ $+ [ %token ] ] , %modes.joins = $gettok(%modes.join,1,58), %modes.seconds = $gettok(%modes.join,2,58) ; Set appropriate modes in tab 1 if ($findid(%modes)) did -c ChanControl $findID(%modes) if ($findid(%offmodes)) did -u ChanControl $findid(%offmodes) if (k isincs %modes) did -ra ChanControl 22 %modes.key if (l isincs %modes) { did -ra ChanControl 24 %modes.limit if ($checkaccess == founder) did -e ChanControl 25 } else did -b ChanControl 25 if (L isincs %modes) did -ra ChanControl 26 %modes.Link if (j isincs %modes) { did -ra ChanControl 28 %modes.joins | did -ra ChanControl 30 %modes.seconds } ; Set appropriate options in tab 2 if (%modes.flood) { var %time = $gettok(%modes.flood,2,58) did -ra ChanControl 82 %time if ($regex(%modes.flood,/(\d)c#(.)(\d)/)) { did -c ChanControl 34 did -ra ChanControl 35 $regml(1) did -ra ChanControl 37 $regml(3) did -c ChanControl 36 $iif($regml(2) == C,1,$iif($regml(2) === m,2,3)) } else { did -b ChanControl 35,37,36 | did -u ChanControl 34 } if ($regex(%modes.flood,/(\d)k#(.)(\d)/)) { did -c ChanControl 52 did -ra ChanControl 50 $regml(1) did -ra ChanControl 53 $regml(3) } else { did -b ChanControl 50,53 | did -u ChanControl 52 } if ($regex(%modes.flood,/(\d)j#(.)(\d)/)) { did -c ChanControl 57 did -ra ChanControl 78 $regml(1) did -ra ChanControl 80 $regml(3) did -c ChanControl 76 $iif($regml(2) == i,1,2) } else { did -b ChanControl 78,80,76 | did -u ChanControl 57 } if ($regex(%modes.flood,/(\d)m#(.)(\d)/)) { did -c ChanControl 67 did -ra ChanControl 71 $regml(1) did -ra ChanControl 68 $regml(3) did -c ChanControl 73 $iif($regml(2) === m,1,2) } else { did -b ChanControl 71,68,73 | did -u ChanControl 67 } if ($regex(%modes.flood,/(\d)n#(.)(\d)/)) { did -c ChanControl 42 did -ra ChanControl 44 $regml(1) did -ra ChanControl 45 $regml(3) } else { did -b ChanControl 44,45 | did -u ChanControl 42 } if ($regex(%modes.flood,/(\d)t#(.{3,4})(\d)/)) { did -c ChanControl 61 did -ra ChanControl 60 $regml(1) did -c ChanControl 64 $iif($regml(2) == k,1,2) } else { did -b ChanControl 60,64 | did -u ChanControl 61 } } } } #getmodes end ; ################################################################################## ; # Find which Id(s) are associated with the check box for specific modes # ; ################################################################################## alias FindID { if (i isincs $1) var %return = 2 if (m isincs $1) var %return = $addtok(%return,3,44) if (n isincs $1) var %return = $addtok(%return,4,44) if (p isincs $1) var %return = $addtok(%return,5,44) if (s isincs $1) var %return = $addtok(%return,6,44) if (t isincs $1) var %return = $addtok(%return,7,44) if (z isincs $1) var %return = $addtok(%return,8,44) if (C isincs $1) var %return = $addtok(%return,9,44) if (T isincs $1) var %return = $addtok(%return,10,44) if (G isincs $1) var %return = $addtok(%return,11,44) if (M isincs $1) var %return = $addtok(%return,12,44) if (K isincs $1) var %return = $addtok(%return,13,44) if (N isincs $1) var %return = $addtok(%return,14,44) if (Q isincs $1) var %return = $addtok(%return,15,44) if (R isincs $1) var %return = $addtok(%return,16,44) if (S isincs $1) var %return = $addtok(%return,17,44) if (V isincs $1) var %return = $addtok(%return,18,44) if (c isincs $1) var %return = $addtok(%return,19,44) if (u isincs $1) var %return = $addtok(%return,20,44) if (k isincs $1) var %return = $addtok(%return,21,44) if (l isincs $1) var %return = $addtok(%return,23,44) if (L isincs $1) var %return = $addtok(%return,25,44) if (j isincs $1) var %return = $addtok(%return,27,44) return %return } ; ################################################################################## ; # Events to check when access should be changed # ; ################################################################################## on *:op:%ChanControl.chan: { if ($opnick == $me) checkaccess RefreshUserslist } on *:deop:%ChanControl.chan: { if ($opnick == $me) checkaccess RefreshUserslist } on *:halfop:%ChanControl.chan: { if ($hnick == $me) checkaccess RefreshUserslist } on *:dehalfop:%ChanControl.chan: { if ($hnick == $me) checkaccess RefreshUserslist } on *:voice:%ChanControl.chan: { if ($vnick == $me) checkaccess RefreshUserslist } on *:voice:%ChanControl.chan: { if ($vnick == $me) checkaccess RefreshUserslist } on *:join:%ChanControl.chan: RefreshUserslist on *:part:%ChanControl.chan: RefreshUserslist on *:quit: { if ($me ison %ChanControl.chan) RefreshUserslist } on *:nick: { if ($me ison %ChanControl.chan) RefreshUserslist } ; ################################################################################## ; # rawmode event. Upkeep owner and admin status in hash tables, refresh set modes # ; ################################################################################## on *:rawmode:#: { if ($chan == %ChanControl.Chan) && ($dialog(ChanControl)) getmodes $chan var %x = 1, %modes = $len($1), %parammodes+ = vhoaqklLfj, %parammodes- = vhaoqkLf, %token = 1 if ((q isincs $1) || (a isincs $1)) && ($me isin $2-) { while (%x <= %modes) { var %char = $mid($1,%x,1) if (%char isin +-) var %status = %char elseif (%char isincs $($+(%,parammodes,%status),2)) inc %token if (%char == q) && ($($+($,%token),2) == $me) { if (%status == +) hadd -m Owner $+($network,.,$chan) $me else hdel Owner $chan } elseif (%char == a) && ($($+($,%token),2) == $me) { if (%status == +) hadd -m Admin $+($network,.,$chan) $me else hdel Admin $chan } inc %x } if ($dialog(ChanControl)) checkaccess } } ; ################################################################################## ; # Access aliases. Adjust avaliable controls accordingly # ; ################################################################################## alias CheckAccess { var %netchan = $+($network,.,%ChanControl.Chan) if ($hget(Owner,%netchan)) { founderAccess | return founder } elseif ($hget(admin,%netchan)) { adminAccess | return admin } elseif ($me isop %ChanControl.Chan) { opAccess | return op } elseif ($me ishelp %ChanControl.Chan) { halfopAccess | return halfop } else { noAccess | return $null } } alias founderAccess { did -e ChanControl 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,23,25,27,109,110,111,112 did -e ChanControl 34,35,36,37,42,44,45,50,52,53,57,60,61,62,64,67,68,71,73,76,78,80,82 did -e ChanControl 43,87,88,89,91,92,93,94,96,97,98,99,100,101,102,103 did -ra ChanControl 32 You have founder access in $+(%ChanControl.chan,$chr(44)) giving you full access to all options here did -ra ChanControl 84 You have founder access in $+(%ChanControl.chan,$chr(44)) giving you full access to all options here did -ra ChanControl 95 You have founder access in $+(%ChanControl.chan,$chr(44)) giving you access to all options here } alias adminAccess { did -b ChanControl 20,25,111 did -e ChanControl 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,27,109,110,112 did -e ChanControl 34,35,36,37,42,44,45,50,52,53,57,60,61,62,64,67,68,71,73,76,78,80,82 did -e ChanControl 43,87,88,89,91,92,93,94,96,97,98,99,100,101,102,103 did -ra ChanControl 32 You are an admin in $+(%ChanControl.chan,$chr(44)) giving you access to all options apart from those limited to channel founders did -ra ChanControl 84 You are an admin in $+(%ChanControl.chan,$chr(44)) giving you access to all options on this page did -ra ChanControl 95 You are an admin in $+(%ChanControl.chan,$chr(44)) giving you access to all options here, apart from attempting to kick or ban users with founder access } alias OpAccess { did -b ChanControl 20,25,111 did -e ChanControl 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,21,23,27,109,110,112 did -e ChanControl 34,35,36,37,42,44,45,50,52,53,57,60,61,62,64,67,68,71,73,76,78,80,82 did -e ChanControl 43,87,88,89,91,92,93,94,96,97,98,99,100,101,102,103 did -ra ChanControl 32 You are an op in $+(%ChanControl.chan,$chr(44)) giving you access to all options apart from those limited to channel founders did -ra ChanControl 84 You are an op in $+(%ChanControl.chan,$chr(44)) giving you access to all options on this page did -ra ChanControl 95 You are an op in $+(%ChanControl.chan,$chr(44)) giving you access to all options here, apart from attempting to kick or ban users with higher access. } alias HalfopAccess { did -b ChanControl 5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,30,110,111,112 did -b ChanControl 34,35,36,37,42,44,45,50,52,53,57,60,61,62,64,67,68,71,73,76,78,80,82 did -b ChanControl 96,97,98,99 did -e ChanControl 2,3,4,7,21,109 did -e ChanControl 43,87,88,89,91,92,93,94,100,101,102,103 did -ra ChanControl 32 You are only a halfop in $+(%ChanControl.chan,$chr(44)) giving you limited access to the basic options did -ra ChanControl 84 You need to have op or above to be able to access any options on this plage did -ra ChanControl 95 You hare a halfop in $+(%ChanControl.chan,$chr(44)) giving you limited access to these commands } alias NoAccess { did -b ChanControl 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,109,110,111,112 did -b ChanControl 34,35,36,37,42,44,45,50,52,53,57,60,61,62,64,67,68,71,73,76,78,80,82 did -b ChanControl 43,87,88,89,91,92,93,94,96,97,98,99,100,101,102,103 did -ra ChanControl 32 You need to have halfop or above to be able to access any options on this page did -ra ChanControl 84 You need to have op or above to be able to access any options on this plage did -ra ChanControl 95 You Are only a regular or voiced user in $+(%ChanControl.chan,$chr(44)) meaning that you can only use the notice and query controls. } ; ################################################################################## ; # Other aliases # ; ################################################################################## alias togglemode { if ($2 isincs %Chancontrol.modes) mode $1 $+(-,$2-) else mode $1 $+(+,$2-) } alias RefreshUserslist { if (!$dialog(ChanControl)) halt did -r ChanControl 86 var %x = 1, %total = $nick(%ChanControl.Chan,0) while (%x <= %total) { did -a ChanControl 86 $nick(%ChanControl.Chan,%x).pnick inc %x } }