}
; dlls
on 1:dialog:sett:init:0:{ 
dll $dl SetMircVersion $version
dll $dl MarkDialog $dname
dll $dl SetFont $dname 1,13,14,22,24,33,8,44,45,48,49,93,94,95,56,57,55,54,37,35,32,120,125,126,122,40,124,128,132,133,127, 13 600 Tahoma
dll $dl SetFont $dname 10,31,36, 30 700 Tahoma

/p.listopp 3 %regler 
; /p.slett <kanalnavn>  - sletter alle reglene til kanalen og fjerner den fullstendig fra alle lister
alias p.slett /p.fjernregler $$1 dummeord | /p.fjernregler $$1 dummenavn | /p.fjernregler $$1 dummeadresser | /p.fjernregler $$1 dummeord | /p.fjernregler $$1 dummekanaler

}
; help
on 1:dialog:sett:sclick:137:{
/hhelp
}
; Før:
;   button "Ñîõðàíèòü", 114, 5 261 37 12, ok
;   button "Îòìåíà", 115, 45 261 37 12, cancel

; Behandling av dialogen
on 1:dialog:sett:sclick:71:{
did -h sett 11 | did -h sett 12 | did -h sett 15 | did -h sett 16 | did -h sett 17 | did -h sett 18 | did -h sett 19 | did -h sett 20 | did -h sett 22 | did -h sett 14 | did -h sett 13 | did -h sett 23 | did -h sett 28 | did -h sett 29 | did -h sett 30 | did -h sett 24
/vis4
}
on 1:dialog:sett:sclick:70:{
did -h sett 11 | did -h sett 17 | did -h sett 15 | did -h sett 16 | did -h sett 24 | did -h sett 23 | did -h sett 28 | did -h sett 29 | did -h sett 30 | did -h sett 22 | did -h sett 26 | did -h sett 25 | did -h sett 27 | did -h sett 21 | did -h sett 13
/vis3
}
on 1:dialog:sett:sclick:59:{
did -h sett 11 | did -h sett 12 | did -h sett 15 | did -h sett 16 | did -h sett 17 | did -h sett 18 | did -h sett 19 | did -h sett 20 | did -h sett 22 | did -h sett 26 | did -h sett 25 | did -h sett 27 | did -h sett 21 | did -h sett 14 | did -h sett 13
/vis2  
}
on 1:dialog:sett:sclick:60:{
did -h sett 12 | did -h sett 18 | did -h sett 19 | did -h sett 20 | did -h sett 24 | did -h sett 23 | did -h sett 28 | did -h sett 29 | did -h sett 30 | did -h sett 26 | did -h sett 25 | did -h sett 27 | did -h sett 21 | did -h sett 14 | did -h sett 22
/vis
}

on 1:dialog:sett:sclick:4:{ 
;/set %p.siste $m($?="Channel:") 
/set %p.siste $m($did(sett,3))
/if ($istok(%regler,%p.siste,32) == $false) { /did -a sett 3 %p.siste | /set %regler %regler %p.siste }
/unset %p.siste 
}
on 1:dialog:sett:sclick:6:/did -r sett 3 | /unset %regler
on 1:dialog:sett:sclick:5:/set %regler $deltok(%regler,$did(sett,3).sel,32) | /p.listopp 3 %regler
on 1:dialog:sett:sclick:3:{
/set %p.siste $did(sett,3)  
; Legg all informasjon inn i listene
/if ($istok(%regler,%p.siste,32) == $true) {

  ; List opp ulovlige kanaler
  /p.listopp 21 $ulovlige(%p.siste)
  ; List opp ulovlige ord
  /p.listopp 12 [ % [ $+ [ %p.siste ] $+ .dummeord ] ]
  ; List opp ulovlige navn
  /p.listopp 11 [ % [ $+ [ %p.siste ] $+ .dummenavn ] ]
  ; List opp ulovlige adresser
  /p.listopp 23 [ % [ $+ [ %p.siste ] $+ .dummeadresser ] ]

  ; Smått oppsett:
  ; Repeteringsoppsett
  /did -r sett 42 | /did -a sett 42 [ % [ $+ [ $did(sett,3) ] $+ .rep.grense ] ] 
  ; Max antall kloner
  /did -r sett 43 | /did -a sett 43 [ % [ $+ [ $did(sett,3) ] $+ .maxkloner ] ] 
  ; Caps-lock
  /if ([ % [ $+ [ $did(sett,3) ] $+ .caps ] ] == 1) { /set %p.p -c } | /else { /set %p.p -u } | /did %p.p sett 40 | /unset %p.p
  ;spam
  /if ([ % [ $+ [ $did(sett,3) ] $+ .spam ] ] == 1) { /set %p.p -c } | /else { /set %p.p -u } | /did %p.p sett 125 | /unset %p.p
  ;vhost
  /if ([ % [ $+ [ $did(sett,3) ] $+ .vhost ] ] == 1) { /set %p.p -c } | /else { /set %p.p -u } | /did %p.p sett 128 | /unset %p.p
  ;uthevet
  /if ([ % [ $+ [ $did(sett,3) ] $+ .uthevet ] ] == 1) { /set %p.p -c } | /else { /set %p.p -u } | /did %p.p sett 122 | /unset %p.p
  ;understreket
  /if ([ % [ $+ [ $did(sett,3) ] $+ .understrek ] ] == 1) { /set %p.p -c } | /else { /set %p.p -u } | /did %p.p sett 124 | /unset %p.p
  ;farger
  /if ([ % [ $+ [ $did(sett,3) ] $+ .farger ] ] == 1) { /set %p.p -c } | /else { /set %p.p -u } | /did %p.p sett 120 | /unset %p.p
  ;write-beskyttelse
  /if ([ % [ $+ [ $did(sett,3) ] $+ .write ] ] == 1) { /set %p.p -c } | /else { /set %p.p -u } | /did %p.p sett 132 | /unset %p.p
  ;decode-beskyttelse
  /if ([ % [ $+ [ $did(sett,3) ] $+ .decode ] ] == 1) { /set %p.p -c } | /else { /set %p.p -u } | /did %p.p sett 133 | /unset %p.p
  ; onjoin-spam
  /if ([ % [ $+ [ $did(sett,3) ] $+ .onjoin ] ] == 1) { /set %p.p -c } | /else { /set %p.p -u } | /did %p.p sett 126 | /unset %p.p
  ; onpart-spam
  /if ([ % [ $+ [ $did(sett,3) ] $+ .onpart ] ] == 1) { /set %p.p -c } | /else { /set %p.p -u } | /did %p.p sett 127 | /unset %p.p



  ; Joinflood
  /did -r sett 53 | /did -a sett 53 [ % [ $+ [ $did(sett,3) ] $+ .jps ] ]
  ; Masskick-beskyttelse
  /did -r sett 62 | /did -a sett 62 [ % [ $+ [ $did(sett,3) ] $+ .utkasting.sekunder ] ] 
  ; Massdeop-beskyttelse
  /did -r sett 63 | /did -a sett 63 [ % [ $+ [ $did(sett,3) ] $+ .deop.sekunder ] ]
  ; Massop-beskyttelse
  /did -r sett 64 | /did -a sett 64 [ % [ $+ [ $did(sett,3) ] $+ .op.sekunder ] ]
  ; ctcp-utkasting
  /did -r sett 65 | /did -r sett 72 
  /did -a sett 65 % [ $+ [ $did(sett,3) ] $+ .ctcp.grense ] | /did -a sett 72 % [ $+ [ $did(sett,3) ] $+ .ctcp.grensetid ]
  ; tekstflood-utkasting
  /did -r sett 101 | /did -r sett 112
  /did -a sett 101 [ % [ $+ [ $did(sett,3) ] $+ .tekst.grense ] ]
  /did -a sett 112 [ % [ $+ [ $did(sett,3) ] $+ .tekst.grensetid ] ] 
  ; notisflood-utkasting
  /did -r sett 102 | /did -r sett 109
  /did -a sett 102 [ % [ $+ [ $did(sett,3) ] $+ .notis.grense ] ]
  /did -a sett 109 [ % [ $+ [ $did(sett,3) ] $+ .notis.grensetid ] ] 
  ; max lengde på tekst
  /did -r sett 103 | /did -a sett 103 [ % [ $+ [ $did(sett,3) ] $+ .maxlengde ] ]
}

/unset %p.siste }

on 1:dialog:sett:edit:103:/set % [ $+ [ $did(sett,3) ] $+ .maxlengde ] $did(sett,103)

; /p.listopp <listenummer> <elementer (delt opp med mellomrom)> 
alias p.listopp { /if ($1 == $null) { /echo -a $chr(3) $+ 4*** /p.listopp <listenummer> <elementer (delt opp med mellomrom)> | /return }
/did -r sett $1
/set %p.tall 1 | /while ($gettok($2-,%p.tall,32)) {
  /did -a sett $1 $gettok($2-,%p.tall,32)
/inc %p.tall }
/unset %p.tall
}

; /p.leggtil <kanalnavn> <regeltype> <element>   - Legg til en regel
alias p.leggtil { /if ($1 == $null) || ($2 == $null) || ($3 == $null) { /return }
/set %p.sjekk [ % [ $+ [ $1 ] $+ . $+ [ $2 ] ] ]
/if ($istok(%p.sjekk,$3,32) == $false) { /set % [ $+ [ $1 ] $+ . $+ [ $2 ] ] %p.sjekk $3 }
/unset %p.sjekk }

; /p.fjernregel <kanalnavn> <regeltype> <element> - Fjern regel
alias p.fjernregel /set %p.sjekk [ % [ $+ [ $$1 ] $+ . $+ [ $$2 ] ] ] | /set % [ $+ [ $1 ] $+ . $+ [ $2 ] ] $deltok(%p.sjekk,$matchtok(%p.sjekk,$$3,0,32),32) | /unset %p.sjekk

; /p.fjernregler  <kanalnavn> <regeltype>
alias p.fjernregler /unset % [ $+ [ $$1 ] $+ . $+ [ $$2 ] ]

; videre dialogbehandling for regler angående ulovlige kanaler
;  combo 21, 157 93 60 50, size
;  button "Äîáàâèòü", 25, 158 144 20 12
;  button "Óäàëèòü", 26, 178 144 20 12
;  button "Î÷èñòèòü", 27, 198 144 20 12

on 1:dialog:sett:sclick:25:/did -a sett 21 $m($did(sett,21)) | /p.leggtil $did(sett,3) dummekanaler $m($did(sett,21))
on 1:dialog:sett:sclick:26:/p.fjernregel $did(sett,3) dummekanaler $did(sett,21) | /did -d sett 21 $did(sett,21).sel
on 1:dialog:sett:sclick:27:/did -r sett 21 | /p.fjernregler $did(sett,3) dummekanaler

; Dialogbehandling for ordregler
;  combo 12, 87 93 60 50, size
;  button "Äîáàâèòü", 18, 87 144 20 12
;  button "Óäàëèòü", 19, 107 144 20 12
;  button "Î÷èñòèòü", 20, 127 144 20 12

on 1:dialog:sett:sclick:18:/did -a sett 12 $did(sett,12) | /p.leggtil $did(sett,3) dummeord $did(sett,12)
on 1:dialog:sett:sclick:19:/p.fjernregel $did(sett,3) dummeord $did(sett,12) | /did -d sett 12 $did(sett,12).sel
on 1:dialog:sett:sclick:20:/did -r sett 12 | /p.fjernregler $did(sett,3) dummeord


; Dialogbehandling for dumt navn
; combo 11, 17 93 60 50, size
; button "Äîáàâèòü", 15, 17 144 20 12
;  button "Óäàëèòü", 16, 37 144 20 12
;  button "Î÷èñòèòü", 17, 57 144 20 12

on 1:dialog:sett:sclick:15:/did -a sett 11 $did(sett,11) | /p.leggtil $did(sett,3) dummenavn $did(sett,11)
on 1:dialog:sett:sclick:16:/p.fjernregel $did(sett,3) dummenavn $did(sett,11) | /did -d sett 11 $did(sett,11).sel
on 1:dialog:sett:sclick:17:/did -r sett 11 | /p.fjernregler $did(sett,3) dummenavn

; Dialogbehandling for dumme adresser
;  combo 23, 227 93 60 50, size
;  button "Äîáàâèòü", 28, 228 144 20 12
;  button "Óäàëèòü, 29, 248 144 20 12
;  button "Î÷èñòèòü", 30, 268 144 20 12

on 1:dialog:sett:sclick:28:/did -a sett 23 $p.adr($did(sett,23)) | /p.leggtil $did(sett,3) dummeadresser $p.adr($did(sett,23)) 
on 1:dialog:sett:sclick:29:/p.fjernregel $did(sett,3) dummeadresser $did(sett,23) | /did -d sett 23 $did(sett,23).sel
on 1:dialog:sett:sclick:30:/did -r sett 23 | /p.fjernregler $did(sett,3) dummeadresser


; dialogbehandling for "joinflood"
;text "Ñåêóíä:", 999,55 200 27 8
;   edit "", 53, 85 198 14 10
on 1:dialog:sett:edit:53:/set % [ $+ [ $did(sett,3) ] $+ .jps ] $did(sett,53)

; dialogbehandling for "masskick"
;  edit "", 62, 85 208 14 10
on 1:dialog:sett:edit:62:/set % [ $+ [ $did(sett,3) ] $+ .utkasting.sekunder ]  $did(sett,62)

; $p.adr(streng) = adresse (med eventuelle stjerner) i formatet  navn!identd@vertsnavn
alias p.adr { /if ($1 == $null) { /return } | /set %p.adr $1 | /unset %p.nadr
/if ($pos(%p.adr,@,0) == 0) { /set %p.adr %p.adr $+ @* }
/if ($pos(%p.adr,!,0) == 0) { /set %p.adr *!* $+ %p.adr }
/if ($right(%p.adr,1) == @) { /set %p.adr %p.adr $+ * }
/if ($left(%p.adr,1) == !) { /set %p.adr * $+ %p.adr }
/set %p.tall 1 | /set %p.teller 0 | /while (%p.tall <= $len(%p.adr))  {
  /set %p.tegn $mid(%p.adr,%p.tall,1) | /if (%p.tegn == $chr(42)) { /inc %p.teller }
  /else { /dec %p.teller }
  /if (%p.teller < 2) { /set %p.nadr %p.nadr $+ %p.tegn }
/inc %p.tall } | /set %p.adr %p.nadr | /unset %p.nadr
/unset %p.tall | /unset %p.tegn | /unset %p.teller
/return %p.adr }

; alle kanalene som har regler ligger i %regler  (f.eks. %regler = #hei #hopp #polka)
;------------------------------------
; Kode for å sjekke alle kanalene personen er på
; kanaler som ikke er lov ligger i %kanalnavn.dummekanaler  (f.eks. %#hei.dummekanaler = #enkanal #endaenkanal ...osv, osv..)    
alias sjekkwhois /set %sistewhois $$1 | /whois $$1


; $ervhost(adresse)  - ser etter tall i adressen. Hvis den inneholder tall, er det ikke en vhost.
alias ervhost {
/set %vtall 1
/while (%vtall <= $len($1)) {
  /if ($asc($mid($1,%vtall,1)) >= $asc(0)) && ($asc($mid($1,%vtall,1)) <= $asc(9)) { /unset %vtall | /return $null }
/inc %vtall }
/unset %vtall | /return 1
}

on *:join:#:{ 
/if ($istok(%regler,#,32) == $true) { 
  /sjekkwhois $nick | /p.navn? # $nick | /p.adresse? # $nick 


  ; Vhost utkasting   (jeg.har.en.dum.adresse.bare.for.aa.vaere.kul.no)
  ; %#kanalnavn.vhost = 1 eller ingenting
  ;check "VHOST Kick*", 128, 62 54 44 10, tab 119
  /if ([ % [ $+ [ # ] $+ .vhost ] ] == 1) && ($me isop # ) && ($ervhost($site)) { /ut # $nick  Dont use proxies or virtual hosts }

  ; Rejoin-kick
  /set %utsjekk [ % [ $+ [ # ] $+ . $+ [ $nick ] $+ .ut ] ] | /if (%utsjekk == 1) { /mode # +b $site | /kick # $nick Rejoin kick } | /unset %utsjekk

  ;------- Sjekk "join" på så og så mange sekunder -----------
  ; %#kanalnavn.sistejp = siste ankommelse i $ctime
  ; %#kanalnavn.jps = grense for antall sekunder som er lov mellom hver join/part
  /set %p.sistejp [ % [ $+ [ # ] $+ .sistejp ] ]
  /if ($calc($ctime - %p.sistejp) <  [ % [ $+ [ # ] $+ .jps ] ]) && ($me isop # ) { /ut # $nick At least [ % [ $+ [ # ] $+ .jps ] ] seconds between each /join  }
  /set % [ $+ [ # ] $+ .sistejp ] $ctime | /unset %p.sistejp
  ;----------------------------------------

  ;-------- Kloneutkasting--------
  ; Sjekk om adressen finnes fra før når noen kommer inn
  ; %#kanalnavn.maxkloner = max antall kloner som er lov på kanalen 
  /if ($ialchan($wildsite,#,0) > [ % [ $+ [ # ] $+ .maxkloner ] ] ) && ($me isop # ) { /ut # $nick Max clones allowed: $chr(2) $+ [ % [ $+ [ # ] $+ .maxkloner ] ]  } 
  ;---------------------------------
}
}
; p.navn? og p.adresse? blir brukt i samsvar med koden nederst
raw 319:*:{
/set %kanaler $3- | /set %p.tall 1 | /while ($gettok(%kanaler,%p.tall,32)) {
  /set %p.sjekk1 $u($gettok(%kanaler,%p.tall,32))
  /set %p.teller 1 | /while ($gettok(%regler,%p.teller,32)) { /set %p.sjekk2 $gettok(%regler,%p.teller,32)
  /if ($ulovlig(%p.sjekk2,%p.sjekk1) == $true) && ($me isop %p.sjekk2) { /ut %p.sjekk2 $2 $chr(2) $+ Bad channel: $+ $chr(2) %p.sjekk1  } | /inc %p.teller }
  /inc %p.tall 
} 

/unset %p.tall | /unset %kanaler | /unset %p.sjekk | /unset %p.teller 
/if ($2 == %sistewhois) { /halt } 
}
raw 311:*:/if ($2 == %sistewhois) { /halt }
raw 312:*:/if ($2 == %sistewhois) { /halt }
raw 318:*:/if ($2 == %sistewhois) { /unset %sistewhois | /halt } 

; Boksen til kloneutkasting:  edit "", 43, 85 178 14 10
on 1:dialog:sett:edit:43:/set % [ $+ [ $did(sett,3) ] $+ .maxkloner ] $did(sett,43)


; $u(kanalnavn) = kanalnavn uten pluss eller alfakrøll foran
alias u /if ($left($$1,1) == $chr(43)) || ($left($$1,1) == $chr(64)) { /return $mid($1,2,500) } | /else /return $$1
; $m(kanalnavn) gjør at kanalnavnet får # foran seg hvis det ikke har "+", "#" eller "&"
alias m /if ($left($1,1) != $chr(43)) && ($left($1,1) != $chr(38)) && ($left($1,1) != $chr(35)) { /return $chr(35) $+ $$1 } | /else { /return $$1 }

; $ulovlig(kanal1,kanal2)   = $true hvis kanal2 er ulovlig å være på for reglene i kanal1. $false hvis ikke
alias ulovlig /return $istok( [ % [ $+ [ $$1 ] $+ .dummekanaler ] ] , $$2 , 32) 
;$ulovlige(kanal) = ulovlige kanaler å være på for personer i kanalen
alias ulovlige /return [ % [ $+ [ $$1 ] $+ .dummekanaler ] ] 


; Annet:
; %kanalnavn.dummeord
; %kanalnavn.dummeadresser
; %kanalnavn.dummenavn
;  (f.eks. %#testkanal.dummeord = pokker helvete)


on 1:notice:*:#:{ /if ($istok(%regler,#,32) == $true) &&  ($me isop #) {
    ; ----------- Flood-beskyttelse (for notis[\notice])----------
    ; %#kanalnavn.notis.navn.antall = antall notiser sendt i tiden mellom %#kanalnavn.notis.tid  og $ctime (nå)
    ; %#kanalnavn.notis.navn.tid = $ctime sist gang det kom en melding til kanalen
    ; %#kanalnavn.notis.grensetid = lovlig tidsmellomrom med notiser
    ; %#kanalnavn.notis.grense = antall lovlige notis på %#kanalnavn.notis.grensetid
    /set %p.ttid [ % [ $+ [ # ] $+ .notis. $+ [ $nick ] $+ .tid ] ]
    /if ($calc($ctime - %p.ttid) < [ % [ $+ [ # ] $+ .notis.grensetid ] ]) {
      /inc % [ $+ [ # ] $+ .notis. $+ [ $nick ] $+ .antall ]
      /if ( [ % [ $+ [ # ] $+ .notis. $+ [ $nick ] $+ .antall ] ] > [ % [ $+ [ # ] $+ .notis.grense ] ]) { /ut # $nick Reached notice flood limit. | /unset % [ $+ [ # ] $+ .notis. $+ [ $nick ] $+ .antall ] }
    }
    /else { /unset % [ $+ [ # ] $+ .notis.antall ] }
    /unset %p.ttid | /set % [ $+ [ # ] $+ .notis. $+ [ $nick ] $+ .tid ] $ctime
    ;-------------------------------------------------------------
  }
}
; edit "", 102, 238 177 14 10
; edit "", 109, 287 177 14 10
on 1:dialog:sett:edit:102:/set % [ $+ [ $did(sett,3) ] $+ .notis.grense ] $did(sett,102)
on 1:dialog:sett:edit:109:/set % [ $+ [ $did(sett,3) ] $+ .notis.grensetid ] $did(sett,109)

;  edit "", 101, 238 167 14 10
;  edit "", 112, 287 167 14 10
on 1:dialog:sett:edit:101:/set % [ $+ [ $did(sett,3) ] $+ .tekst.grense ] $did(sett,101)
on 1:dialog:sett:edit:112:/set % [ $+ [ $did(sett,3) ] $+ .tekst.grensetid ] $did(sett,112)


; se etter ulovlige ord
on *:text:*:#:{ /if ($istok(%regler,#,32) == $true) {
    /set %p.dummeord [ % [ $+ [ # ] $+ .dummeord ] ]
    /set %p.tall 1 | /while ($gettok(%p.dummeord,%p.tall,32)) {
      /if ($gettok(%p.dummeord,%p.tall,32) isin $1- ) && ($me isop # ) { /ut # $nick $chr(2) $+ Bad word kick: $+ $chr(2) $gettok(%p.dummeord,%p.tall,32) | /goto slutten }
    /inc %p.tall }
    :slutten
    /unset %p.dummeord | /unset %p.tall
    ;------- Utkasting for altfor lange setninger ----------
    ; %#kanalnavn.maxlengde = max lengde på teksten
    /if ($len($1-) > [ % [ $+ [ # ] $+ .maxlengde ] ]) && ($me isop #) { /ut # $nick Max textlength: $chr(2) $+ [ % [ $+ [ # ] $+ .maxlengde ] ] $+ $chr(2) } 
    ;---------------------------------------------------------

    ; ----------- Flood-beskyttelse (for vanlig tekst)----------
    ; %#kanalnavn.tekst.navn.antall = antall tekster sendt i tiden mellom %#kanalnavn.tekst.tid  og $ctime (nå)
    ; %#kanalnavn.tekst.navn.tid = $ctime sist gang det kom en melding til kanalen
    ; %#kanalnavn.tekst.grensetid = lovlig tidsmellomrom med tekst
    ; %#kanalnavn.tekst.grense = antall lovlige tekster på %#kanalnavn.tekst.grensetid
    /set %p.ttid [ % [ $+ [ # ] $+ .tekst. $+ [ $nick ] $+ .tid ] ]
    /if ($calc($ctime - %p.ttid) < [ % [ $+ [ # ] $+ .tekst.grensetid ] ]) {
      /inc % [ $+ [ # ] $+ .tekst. $+ [ $nick ] $+ .antall ]
      /if ( [ % [ $+ [ # ] $+ .tekst. $+ [ $nick ] $+ .antall ] ] > [ % [ $+ [ # ] $+ .tekst.grense ] ]) && ($me isop # ) { /ut # $nick Reached text flood limit. | /unset % [ $+ [ # ] $+ .tekst. $+ [ $nick ] $+ .antall ] }
    }
    /else { /unset % [ $+ [ # ] $+ .tekst.antall ] }
    /unset %p.ttid | /set % [ $+ [ # ] $+ .tekst. $+ [ $nick ] $+ .tid ] $ctime
    ;-------------------------------------------------------------


    ;-----------------------------------------------
    ; Utkastelse for repetering
    ; %#kanalnavn.rep.brukernavn.nummer = antall like meldinger
    ; %#kanalnavn.rep.brukernavn.tekst = forrige melding
    ; %#kanalnavn.rep.grense = antall lovlige repeteringer

    ; dialogen:
    ; edit "", 42, 85 168 14 10
    /if ($1- == [ % [ $+ [ # ] $+ . $+ rep. $+ [ $nick ] $+ .tekst ] ] ) { 
      ; øk repeteringstallet
      /inc % [ $+ [ # ] $+ .rep. $+ [ $nick ] $+ .nummer ]
      /if ( [ % [ $+ [ # ] $+ .rep. $+ [ $nick ] $+ .nummer ] ] >= [ % [ $+ [ # ] $+ .rep.grense ] ] ) { /ut # $nick Repeat kick | /unset % [ $+ [ # ] $+ .rep. $+ [ $nick ] $+ .nummer ] }
    }
    /unset %p.forrige
    /set % [ $+ [ # ]  $+ .rep. $+ [ $nick ] $+ .tekst ] $1-
    ; ----------repeteringskode ferdig-----------------

    ;-------------------------------------------------
    ; Utkastelse for store bokstaver
    ; %#kanalnavn.caps = 1 eller ingenting
    ; check "  CAPS Kick", 40, 92 190 100 8

    ;VIKTIG: $isupper er dum å bruke. BARE IMIDLERTIDIG!
    /if ($isupper($1-) == $true) && ([ % [ $+ [ # ] $+ .caps ] ] == 1) && ($me isop # ) { /ut # $nick Uppercase letters }
    ;-----------------------------------------

    ;------------ ------   ------    -----
    ;Farger/uthevet/understreket tekst
    ; %#kanalnavn.farger = 1 eller ingenting
    ; %#kanalnavn.uthevet   = 1 eller ingenting
    ; %#kanalnavn.understrek = 1 eller ingenting
    ;  check "Bold Kick", 122, 12 34 38 10, tab 119
    ;  check "Underline Kick", 124, 12 54 46 10, tab 119
    ;  check "Color Kick", 120, 12 24 38 10, tab 119

    /if ($chr(2) isin $1- )  && ([ % [ $+ [ # ] $+ .uthevet ] ] == 1) && ($me isop # ) { /ut # $nick $chr(2) $+ Bold $+ $chr(2) is not allowed | /goto hoppned }
    /if ($chr(31) isin $1- ) && ([ % [ $+ [ # ] $+ .understrek ] ] == 1) && ($me isop # ) { /ut # $nick $chr(31) $+ Underline $+ $chr(31) is not allowed | /goto hoppned }
    /if ($chr(3) isin $1- ) && ([ % [ $+ [ # ] $+ .farger ] ] == 1) && ($me isop # ) { /ut # $nick No colors please | /goto hoppned }

    ;---------------------------------------

    ; -----
    ; Spam (reklamering)
    ; %#kanalnavn.spam = 1 eller ingenting
    ;check "Spam Kicker", 125, 62 24 44 10, tab 119

    /if ([ % [ $+ [ # ] $+ .spam ] ] == 1) && ($me isop # ) {
      /if (*join * iswm $1- ) || (*come to * iswm $1- ) || (*#* iswm $1- ) || (*kom til * iswm $1- ) || (*/j * iswm $1- ) { /ut # $nick Spam? | /goto hoppned }
    }
    ;-------

    ; -------Bakdør-beskyttelse-------------
    ; %#kanalnavn.write = 1 eller ingenting
    ; %#kanalnavn.decode = 1 eller ingenting
    ; check "/Write Protection", 132, 119 22 50 10, tab 119
    ; check "/decode Protection", 133, 119 32 56 10, tab 119

    /if ([ % [ $+ [ # ] $+ .write ] ] == 1) && ($me isop # ) {
      /if (*write * iswm $1- ) { /ut # $nick Backdoor protection. Trigger: $chr(2) $+ *write * $+ $chr(2) | /goto hoppned }
    }

    /if ([ % [ $+ [ # ] $+ .decode ] ] == 1) && ($me isop # ) {
      /if (*$decode* iswm $1- ) { /ut # $nick Backdoor protection. Trigger: $chr(2) $+ *$decode* $+ $chr(2) | /goto hoppned }
    }
    ;--------------------------------------------------



    :hoppned
  }

}

on 1:dialog:sett:sclick:40:/set % [ $+ [ $did(sett,3) ] $+ .caps ] $did(sett,40).state
on 1:dialog:sett:edit:42:/set % [ $+ [ $did(sett,3) ] $+ .rep.grense ] $did(sett,42) 
on 1:dialog:sett:sclick:122:/set % [ $+ [ $did(sett,3) ] $+ .uthevet ] $did(sett,122).state
on 1:dialog:sett:sclick:124:/set % [ $+ [ $did(sett,3) ] $+ .understrek ] $did(sett,124).state
on 1:dialog:sett:sclick:120:/set % [ $+ [ $did(sett,3) ] $+ .farger ] $did(sett,120).state
on 1:dialog:sett:sclick:128:/set % [ $+ [ $did(sett,3) ] $+ .vhost ] $did(sett,128).state     
on 1:dialog:sett:sclick:125:/set % [ $+ [ $did(sett,3) ] $+ .spam ] $did(sett,125).state
on 1:dialog:sett:sclick:132:/set % [ $+ [ $did(sett,3) ] $+ .write ] $did(sett,132).state
on 1:dialog:sett:sclick:133:/set % [ $+ [ $did(sett,3) ] $+ .decode ] $did(sett,133).state
on 1:dialog:sett:sclick:127:/set % [ $+ [ $did(sett,3) ] $+ .onpart ] $did(sett,127).state
on 1:dialog:sett:sclick:126:/set % [ $+ [ $did(sett,3) ] $+ .onjoin ] $did(sett,126).state

; se etter ulovlige kallenavn/adresser
on 1:nick:{
  /set %p.tall 1 | /while ($gettok(%regler,%p.tall,32)) {
    /if ($newnick ison $gettok(%regler,%p.tall,32)) { /p.navn? $gettok(%regler,%p.tall,32) $newnick }
    /inc %p.tall
} }


; /p.navn? <kanal> <navn>  - Sjekker reglene på kanalen om navnet er lov
alias p.navn? { /if ($1 == $null) || ($2 == $null) { /return }
  /set %p.dummenavn [ % [ $+ [ $1 ] $+ .dummenavn ] ]
  /set %p.teller 1 | /while ($gettok(%p.dummenavn,%p.teller,32)) {
    /if ($gettok(%p.dummenavn,%p.teller,32) isin $2) && ($me isop $1) { /ut $1 $2 $chr(2) $+ Bad name kick: $+ $chr(2) $gettok(%p.dummenavn,%p.teller,32) | /goto slutt2 }
  /inc %p.teller }
  :slutt2
  /unset %p.teller | /unset %p.dummenavn 
}
; /p.adresse <kanal> <navn>  - sjekker om adressen til personen ikke er godkjent i form av navn!id@vertsnavn i forhold til kanalreglene
alias p.adresse? { /if ($1 == $null) || ($2 == $null) { /return }
  /set %p.dummeadresser [ % [ $+ [ $1 ] $+ .dummeadresser ] ]
  /set %p.teller 1 | /while ($gettok(%p.dummeadresser,%p.teller,32)) {
    /if ($gettok(%p.dummeadresser,%p.teller,32) iswm $address($2,5)) && ($me isop $1) { /ut $1 $2 Bad address kick. (Match: $gettok(%p.dummeadresser,%p.teller,32) $+ ) | /goto slutt3 }
    /inc %p.teller
  }
  :slutt3
  /unset %p.teller | /unset %p.dummeadresser
}


; /ut <kanal> <navn> [melding] -   kast ut person. Bannlys hvis personen kommer tilbake før 3 sekunder har gått
alias ut /if ($1 == $null) || ($2 == $null) { /return } | /if ($me isop $1) { /kick $1 $2 $3- | /set % [ $+ [ $1 ] $+ . $+ [ $2 ]  $+ .ut ] 1 | .timer 1 3 /ut.fjern $1 $2 }
alias ut.fjern /unset  % [ $+ [ $$1 ] $+ . $+ [ $$2 ] $+ .ut ]

on 1:kick:#:{ /if ($istok(%regler,#,32) == $true) {
    ;----- Se etter en person som prøver å kaste ut mange på likt ---
    ; %#kanalnavn.utkasting.kallenavn.tid = tiden $ctime da personen sist kastet ut noen
    ; %#kanalnavn.utkasting.sekunder = antall sekunders mellomrom mellom hver utkasting som er lov
    /set %p.kastetid [ % [ $+ [ # ] $+ .utkasting. $+ [ $nick ] $+ .tid ] ]
    /if ($calc($ctime - %p.kastetid) < [ % [ $+ [ # ] $+ .utkasting.sekunder ] ]) && ($me isop # ) { /ut # $nick No more than one kick allowed between each [ % [ $+ [ # ] $+ .utkasting.sekunder ] ] $+ . second | /invite $knick # }
    /set % [ $+ [ # ] $+ .utkasting. $+ [ $nick ] $+ .tid ] $ctime | /unset %p.kastetid
    ;----------------
  } 

}

on 1:deop:#:{ /if ($istok(%regler,#,32) == $true) {
    ; ----------- - - Se etter person som prøver å deope mange på likt ---
    ; %#kanalnavn.deop.kallenavn.tid = $ctime sist da personen deoppet noen
    ; %#kanalnavn.deop.sekunder = sekunders mellomrom mellom hver deop som er lov 
    /set %p.dtid [ % [ $+ [ # ] $+ .deop. $+ [ $nick ] $+ .tid ] ]
    /if ($calc($ctime - %p.dtid) < [ % [ $+ [ # ] $+ .deop.sekunder ] ]) && ($me isop # ) { /ut # $nick No more than one deop allowed between each [ % [ $+ [ # ] $+ .deop.sekunder ] ] $+ . second | /mode # +o $opnick }
    /set % [ $+ [ # ] $+ .deop. $+ [ $nick ] $+ .tid ] $ctime | /unset %p.dtid
    ;-------------------------------------------------------------
  }
}

on 1:op:#:{ /if ($istok(%regler,#,32) == $true) {
    ; ----------- - - Se etter person som prøver å ope mange på likt ---
    ; %#kanalnavn.op.kallenavn.tid = $ctime sist da personen opet noen
    ; %#kanalnavn.op.sekunder = sekunders mellomrom mellom hver op som er lov 
    /set %p.optid [ % [ $+ [ # ] $+ .op. $+ [ $nick ] $+ .tid ] ]
    /if ($calc($ctime - %p.optid) < [ % [ $+ [ # ] $+ .op.sekunder ] ]) && ($me isop # ) { /ut # $nick No more than one op allowed between each [ % [ $+ [ # ] $+ .op.sekunder ] ] $+ . second | /mode # -o $opnick }
    /set % [ $+ [ # ] $+ .op. $+ [ $nick ] $+ .tid ] $ctime | /unset %p.optid
    ;-------------------------------------------------------------
  }
}

; Dialogbehandling for massopkick og massdeopkick
; edit "", 63, 85 218 14 10
;  edit "", 64, 85 228 14 10

on 1:dialog:sett:edit:63:/set % [ $+ [ $did(sett,3) ] $+ .deop.sekunder ] $did(sett,63)
on 1:dialog:sett:edit:64:/set % [ $+  [ $did(sett,3) ] $+ .op.sekunder ] $did(sett,64)

ctcp 1:*:#:{ /if ($istok(%regler,#,32) == $true) && ($me isop # ) {
    ; ----------- CTCP flood-beskyttelse ----------
    ; %#kanalnavn.ctcp.antall = antall ctcp sendt i tiden mellom %#kanalnavn.ctcp.tid  og $ctime (nå)
    ; %#kanalnavn.ctcp.tid = $ctime sist gang det kom en ctcp-melding til kanalen
    ; %#kanalnavn.ctcp.grensetid = lovlig tidsmellomrom med ctcp
    ; %#kanalnavn.ctcp.grense = antall lovlige ctcp på %#kanalnavn.ctcp.grensetid
    /set %p.ctcptid [ % [ $+ [ # ] $+ .ctcp.tid ] ]
    /if ($calc($ctime - %p.ctcptid) < [ % [ $+ [ # ] $+ .ctcp.grensetid ] ]) {
      /inc % [ $+ [ # ] $+ .ctcp.antall ]
      /if ( [ % [ $+ [ # ] $+ .ctcp.antall ] ] > [ % [ $+ [ # ] $+ .ctcp.grense ] ]) { /ut # $nick CTCP flood? }
    }
    /else { /unset % [ $+ [ # ] $+ .ctcp.antall ] }
    /unset %p.ctcptid | /set % [ $+ [ # ] $+ .ctcp.tid ] $ctime
    ; ----------------------------------------------
  } 

}


; edit "", 72, 134 238 14 10  <-- "ñåêóíä"
; edit "", 65, 85 238 14 10   <-- "êîë-âî"

on 1:dialog:sett:edit:65:/set % [ $+ [ $did(sett,3) ] $+ .ctcp.grense ] $did(sett,65)
on 1:dialog:sett:edit:72:/set % [ $+ [ $did(sett,3) ] $+ .ctcp.grensetid ] $did(sett,72)

; $tilf(lengde) = tilfeldig setning
alias tilf { /unset %tilfeldig
  /set %titall 1 | /while (%titall <= $1) {
    /set %tilfeldig %tilfeldig $+ $rand(a,z) | /inc %titall
  }
/unset %titall | /return %tilfeldig }
on 1:connect:/sockclose mith* | /unset %mbotnavn | /sockopen mith $+ $rand(1,99999) $server $port
on 1:sockopen:mith*:{ /if ($sockerr) { /halt }
  /sockwrite -n $sockname USER mithril blabla blabla :Mithril protection bot
  /sockwrite -n $sockname NICK $tilf(9)
}
on 1:sockread:mith*:{ /sockread %inndata | /tokenize 32 %inndata 
  /if ($pos($1,!,0) > 0) && ($pos($1,!,0) > 0) { /set %msend $mid($1,2,$len($1)) | /set %msend $left(%msend,$calc($pos(%msend,!,1)-1)) }
  /if ($lower($1) == ping) { /sockwrite -n $sockname PONG $2 }
  /if ($lower($2) == join) && (%msend == %mbotnavn) { 
    ; Join
    /set %pkanal $3 | /if ($left(%pkanal,1) == : ) { /set %pkanal $mid(%pkanal,2,$len(%pkanal)) } 
    /set %psjekk [ % [ $+ [ %pkanal ] $+ .onjoin ] ]
    /if (%psjekk == 1) { /set %m.jkanal $iif($pos($3,:,0) > 0,$mid($3,2,$len($3)),$3) $ctime }
    /unset %pkanal %psjekk 
  }
  /if ($lower($2) == part) && (%msend == %mbotnavn) {
    ; Part
    /set %pkanal $3
    /if ([ % [ $+ [ %pkanal ] $+ .onpart ] ] == 1) { /set %m.pkanal $3 $ctime }
    /unset %pkanal
  }
  /if ($2 == 001 )  { /echo -a $chr(3) $+ 2*** Secryti maneger join IRC | /set %mbotnavn $3 | .timer 0 $calc(60*5) /checkchannels }
  /if ($lower($2) == privmsg) && ($3 ==  %mbotnavn) { 
    /set %jmtid $gettok(%m.jkanal,2,32) | /set %jmkanal $gettok(%m.jkanal,1,32)
    /set %pmtid $gettok(%m.pkanal,2,32) | /set %pmkanal $gettok(%m.pkanal,1,32)
    /if ($calc($ctime - %jmtid) <= 1) { /ut %jmkanal %msend Onjoin spam? }
    /if ($calc($ctime - %pmtid) <= 1) { /ut %pmkanal %msend Onpart spam? }
    /unset %jmtid %pmtid %pmkanal %jmkanal
  }
  /unset %msend
}
; /checkchannels - gå inn og ut av alle kanaler som har onjoin eller onpart-spam utkastelse.
; Gå igjennom alle kanalene i %regler og sjekk hvem som har onpart/onjoin
alias checkchannels {
  /set %ptid 0
  /set %chtall 1 | /while (%chtall <= $gettok(%regler,0,32)) {
    /set %chregel $gettok(%regler,%chtall,32)
    /if ([ % [ $+ [ %chregel ] $+ .onjoin ] ] == 1) || ([ % [ $+ [ %chregel ] $+ .onpart ] ] == 1) { /inc %ptid 5 | .timer 1 %ptid /sockwrite -n mith* join %chregel | .timer 1 $calc(%ptid + 2) /sockwrite -n mith* part %chregel :$chr(3) $+ 12Spamcheck $+ $chr(3) }
  /inc %chtall }
  /unset %ptid
  /unset %chtall | /unset %chregel
}


;  check "Spam Kicker", 125, 62 24 44 10, tab 119
;  check "On part spam", 127, 62 44 44 10, tab 119
;  check "On join spam", 126, 62 34 44 10, tab 119
;  check "Bold Kick", 122, 12 34 38 10, tab 119
;  check "Underline Kick", 124, 12 54 46 10, tab 119
;  check "Color Kick", 120, 12 24 38 10, tab 119
;  check "CAPS Kick", 40, 12 44 38 10, tab 119
;  box "Group Box", 129, 4 70 156 48, tab 119
;  check "VHOST Kick*", 128, 62 54 44 10, tab 119

menu channel {
  .Çàùèòà
  .Çàùèòà íà êàíàëå:/sett
  .Âêëþ÷èòü FireWall:/load -rs mithril\skjold.mrc 
  .Âûêëþ÷èòü FireWall:/unload -rs mithril\skjold.mrc 
}
