Mirc anti-spam

Description

Systeme d'anti spam pour mIRC avec gestion des filtres et multi profiles

Source / Exemple :


;If you don't mean to respect my job, just delete those lines...
;mIRc anti-spam system v1.0 by seregon
;seregon@wanadoo.fr

dialog spam_m {
  title "Anti-Spam"
  size -1 -1 394 131
  option pixels
  box "Connection", 1, 2 4 200 86
  text "Pop3 Server:", 2, 8 20 66 16
  edit "", 3, 78 18 120 20, autohs
  text "User ID:", 4, 8 42 66 16
  edit "", 5, 78 40 120 20
  text "Password:", 6, 8 64 66 16
  edit "", 7, 78 62 120 20, pass autohs
  box "Filers (Wilcards allowed)", 11, 208 4 182 124
  text "Objects filter:", 12, 214 20 94 16
  edit "", 13, 212 38 122 20, autohs
  button "Add", 14, 336 40 50 16
  edit "", 15, 212 80 122 20, autohs
  button "Add", 16, 336 82 50 16
  text "Sender filer:", 17, 214 60 132 16
  button "Expand >", 18, 249 103 93 18
  button "Start Anti-Spam", 20, 50 97 104 25
  box "Filters", 19, 396 4 196 260
  box "Log", 21, 2 132 390 132
  list 22, 8 148 378 112, size
  list 23, 400 20 186 240, size
  menu "Anti spam", 25
  item "Launch anti spam", 26, 25
  item break, 24, 25
  item "New Profile", 32, 25
  item "Load profile", 27, 25
  item "Save profile", 33, 25
  item break, 30, 25
  item "Exit", 31, 25, ok
}
dialog spam_p {
  title "Loading profile"
  size -1 -1 126 205
  option pixels
  list 1, 2 4 120 173, size
  button "Load", 2, 2 182 121 20
  button "boo", 3, 900 900 1 1, ok
}
alias -l spam_ex {
  dialog -s spam_m $dialog(spam_m).x $dialog(spam_m).y 593 285
  did -r spam_m 18
  did -a spam_m 18 Narrow <
}
alias -l spam_unex {
  dialog -s spam_m $dialog(spam_m).x $dialog(spam_m).y 394 151
  did -r spam_m 18
  did -a spam_m 18 Expand >
}
on 1:dialog:spam_m:init:0:{
  echo -j $dll(popups.dll, New, spam 16 16)
  dll popups.dll LoadImg spam 1 icon small 1,icons.dll
  echo -j $dll(popups.dll, AddItem, spam 1 1 1 Remove $cr remove)
  dll  mdx.dll SetMircVersion $version
  dll mdx.dll MarkDialog $dname
  dll mdx.dll SetDialog spam_m icon 22 icons.dll
  dll mdx.dll SetControlMDX spam_m 23  treeview haslines linesatroot hasbuttons showsel > views.mdx
  did -i $dname 23 1 iconsize normal small
  did -i $dname 23 1 seticon normal 19,icons.dll
  did -a $dname 23 +e 1 1 Objects Filer $+ $chr(9) $+ Filter Objects content
  did -a $dname 23 +e 1 1 Sender Filer $+ $chr(9) $+ Filter sender's mail content
  if ($hfind(spam,prof_*,0,w) == 0) { set -u %p $?="No profile has been founded:please set a profile" | $iif(%p != $null, hadd spam prof_ $+ $hfind(spam,prof_*,0,w) %p, dialog -x spam_m spam_m) | unset %p }
  hadd prov spp_act $hget(spam,prof_0)
  prof_load
  loadlist
  did -a spam_m 22 > Ready to contact server <
}
alias -l prof_load {
  did -r spam_m 3,5,7
  did -a spam_m 3 $hget(spam,$hget(prov,spp_act) $+ _serv)
  did -a spam_m 5 $hget(spam,$hget(prov,spp_act) $+ _id)
  did -a spam_m 7 $hget(spam,$hget(prov,spp_act) $+ _pass)
  dialog -t spam_m Anti-Spam - Profile: $+(',$hget(prov,spp_act),')
}
on 1:dialog:spam_m:menu:33: {
  hadd spam $hget(prov,spp_act) $+ _serv $did(3)
  hadd spam $hget(prov,spp_act) $+ _id $did(5)
  hadd spam $hget(prov,spp_act) $+ _pass $did(7)
}
on 1:dialog:spam_m:menu:32: {
  set -u %p $?="Set new profile name"
  if (Prof_* iswm $hfind(spam,%p,1).data) { echo -j $dll(common.dll, MsgBox, Profile name already exists > MB_OK + MB_ICONWARNING > Error) }
  elseif (%p != $null) { hadd spam prof_ $+ $hfind(spam,prof_*,0,w) %p }
  dialog -t spam_m Anti-Spam - Profile: $+(',$hget(spam,prof_ $+ $calc($hfind(spam,prof_*,0,w) - 1)),')
  hadd prov spp_act $hget(spam,prof_ $+ $calc($hfind(spam,prof_*,0,w) - 1))
  prof_load
  unset %p
}
on 1:dialog:spam_m:menu:27: {
  dialog -mo spam_p spam_p
}
on 1:dialog:spam_p:init:0: {
  %n = 1
  while (%n <= $hfind(spam,prof_*,0,w)) { did -i spam_p 1 %n $hget(spam,$hfind(spam,prof_*,%n,w)) | inc %n 1 }
  unset %n
}
on 1:dialog:spam_p:sclick:2: {
  hadd prov spp_act $did(1).seltext
  prof_load
  dialog -x spam_p spam_p
}
on 1:dialog:spam_m:sclick:18: {
  if ($did(18) == Expand >) { spam_ex }
  else { spam_unex }
}

on 1:dialog:spam_m:sclick:14: {
  if ($did(13) != $null) {
    did -i spam_m 23 1 cb root
    did -i spam_m 23 1 cb 2
    if ($didwm(spam_m,23,+* 1 1 0 0 0 $did(13)) > 0) { echo -j $dll(common.dll, MsgBox, Already in the list > MB_OK + MB_ICONWARNING > Error) }
    else {
      writeini filter.ini objects $calc($ini(filter.ini,objects,$ini(filter.ini,objects,0)) + 1) $did(13)
      did -a spam_m 23 1 1 $did(13)
    }
  }
}
on 1:dialog:spam_m:sclick:16: {
  if ($did(15) != $null) {
    did -i spam_m 23 1 cb root
    did -i spam_m 23 1 cb 3
    if ($didwm(spam_m,23,+* 1 1 0 0 0 $did(15)) > 0) { echo -j $dll(common.dll, MsgBox, Already in the list > MB_OK + MB_ICONWARNING > Error) }
    else {
      writeini filter.ini send $calc($ini(filter.ini,send,$ini(filter.ini,send,0)) + 1) $did(15)
      did -a spam_m 23 1 1 $did(15)
    }
  }
}
on 1:dialog:spam_m:sclick:23: {
  if ($gettok($did(23,1),1,32) == rclick) { 
    tokenize 32 $dll(popups.dll,Popup,spam +R $mouse.dx $mouse.dy)
    if ($1- = OK spam 1 remove) {
      did -i spam_m 23 1 cb root
      did -i spam_m 23 1 cb $gettok($did(23,1),3,32)
      remini filter.ini $iif($gettok($did(23,1),3,32) == 2, objects, send) $ini(filter.ini, $iif($gettok($did(23,1),3,32) == 2, objects, send), $calc($gettok($did(23,1),4,32) - 1))
      did -d spam_m 23 $gettok($did(23,1),4,32)
    }
  }
}
alias -l loadlist {
  did -i spam_m 23 1 cb 2
  %n = 1
  while (%n <= $ini(filter.ini,objects,0)) { did -a spam_m 23 1 1 $readini(filter.ini,objects,$ini(filter.ini,objects,%n)) | inc %n }
  did -i spam_m 23 1 cb root
  did -i spam_m 23 1 cb 3
  %n = 1
  while (%n <= $ini(filter.ini,send,0)) { did -a spam_m 23 1 1 $readini(filter.ini,send,$ini(filter.ini,send,%n)) | inc %n }
  unset %n
}
alias sp_open {
  sockopen spam $did(spam_m,3) 110
  hdel -w prov sp_*
  hadd prov sp_sock 1
  did -a spam_m 22 > Contacting server
}
on 1:sockclose:spam: {
  if ($dialog(spam_m) != $null) { did -r spam_m 22 | did -a spam_m 22 > Ready to contact server < }
}
on 1:dialog:spam_m:sclick:20: { sp_open }
on 1:sockread:spam: {
  if ($sockerr > 0) { echo 4 -ag error }
  :spam.n
  sockread %sp
  if ($sockbr == 0) { return }
  elseif (%sp == $null) { return }
  else { 
    tokenize 32 %sp
    did -a spam_m 22 < $1-
    if ($hget(prov,sp_state) == parsing) {
      if ($1 == From:) { hadd prov sp_from $2- }
      if ($1 == Subject:) { hadd prov sp_subj2 $2- }
      if (: !isin $1) && ($hget(prov,sp_subj2) != $null) { hadd prov sp_subj2 $hget(prov,sp_subj2) $2- }
      if (: isin $1) && ($hget(prov,sp_subj2) != $null) { hadd prov sp_subj $hget(prov,sp_subj2) | hdel prov sp_subj2 }
      if ($1- == .) { .signal filter }
    }
    elseif ($hget(prov,sp_state) == deleting) {
      if ($1 == +OK) {
        hdec prov sp_remn 1
        if ($hget(prov,sp_remn) > 0) { sockwrite -nt spam DELE $remove($gettok($hget(prov,sp_rem),$hget(prov,sp_remn),32),$chr(9)) }
        else { .signal sp_end }
      }
    }
    else {
      if ($1 == +OK) && ($hget(prov,sp_sock) == 1) { sockwrite -nt spam USER $did(spam_m,5) }
      elseif ($1 == +OK) && ($hget(prov,sp_sock) == 2) { sockwrite -nt spam PASS $did(spam_m,7) }
      elseif ($1 == +OK) && ($hget(prov,sp_sock) == 3) { sockwrite -nt spam STAT }
      elseif ($1 == +OK) && ($hget(prov,sp_sock) == 4) { did -a spam_m 22 Got $2 unread mails ( $+ $int($calc($3 / 1000)) $+ ko $+ ) | hadd prov sp_unr $2 | sockwrite -nt spam LIST } 
      elseif ($1- == .) && ($hget(prov,sp_sock) == 6) { 
        hadd prov sp_state parsing
        if ($hget(prov,sp_unr) > 0) { sockwrite -nt spam TOP $hget(prov,sp_unr) 1 }
        else { sockwrite -nt spam QUIT }
      }
      elseif ($1 == -ERR) && ($hget(prov,sp_sock) == 1) { did -a spam_m 22 *** Error occured during communication process: closing connection | soclckose spam }
      if ($1 == +OK) && ($hget(prov,sp_sock) < 6) { hinc prov sp_sock 1 }
    }
  }
  goto spam.n
  unset %sp
}
alias -l sockwrite {
  sockwrite $1-
  if ($dialog(spam_m) != $null) { did -a spam_m 22 > $replace($3-,$hget(spam,$hget(prov,spp_act) $+ _pass), $str(*,$len($hget(spam,$hget(prov,spp_act) $+ _pass)))) }
}
on 1:signal:filter: {
  if ($filobj($hget(prov,sp_subj)) == $true) || ($filfrom($hget(prov,sp_from)) == $true) { 
    hadd prov sp_del- $+ $hget(prov,sp_unr) $+($hget(prov,sp_unr),$chr(1),$hget(prov,sp_subj),$chr(1),$hget(prov,sp_from))
  }
  hdel prov sp_subj
  hdec prov sp_unr 1
  if ($hget(prov,sp_unr) > 0) { hadd prov sp_state parsing | sockwrite -nt spam TOP $hget(prov,sp_unr) 1 }
  if ($hget(prov,sp_unr) == 0) { 
    if ($hfind(prov,sp_del-*,0,w) > 0) {
      dialog -ma spam_d spam_d
      %n = 1
      while (%n <= $hfind(prov,sp_del-*,0,w)) {
        tokenize 1 $hget(prov,$hfind(prov,sp_del-*,%n,w))
        did -a spam_d 1 + 0 0 2 $chr(32) $+ $chr(9) $1 $+ $chr(9) $3 $+ $chr(9) $2
        inc %n
      }
      unset %n
    }
    else { 
      echo -ag boo
      sockwrite -nt spam QUIT
      echo -j $dll(common.dll, MsgBox, No mails needed to be deleted > MB_OK + MB_ICONWARNING > Anti-Spam)
    }
  }
}
alias -l filobj {
  %n = $ini(filter.ini,objects,0)
  while (%n > 0) {
    if ($readini(filter.ini,objects,$ini(filter.ini,objects,%n)) iswm $1) { hadd prov filobj $true | break }
    dec %n
  }
  unset %n
  if ($hget(prov,filobj) == $true) { hdel prov filobj | return $true }
  else { return $false }
}
alias -l filfrom {
  %n = $ini(filter.ini,send,0)
  while (%n > 0) {
    if ($readini(filter.ini,send,$ini(filter.ini,send,%n)) iswm $1) { hadd prov filsend $true | break }
    dec %n
  }
  unset %n
  if ($hget(prov,filsend) == $true) { hdel prov filsend | return $true }
  else { return $false }
}
dialog spam_d {
  title "Anti-Spam deleting selection"
  size -1 -1 106 163
  option dbu
  list 1, 1 1 103 149, size
  button "Proceed", 2, 66 152 37 10
}
on 1:dialog:spam_d:init:0: {
  dll mdx.dll SetMircVersion $version
  dll mdx.dll MarkDialog $dname
  echo -j $dll(mdx.dll, SetControlMDX, 1 listview showsel infotip report sortascending checkboxes > views.mdx)
  did -i $dname 1 1 headerdims 20 30 110 110
  did -i $dname 1 1 headertext + 0 $chr(32) $+ $chr(9) ID $+ $chr(9) From $+ $chr(9) Subject
}
on 1:dialog:spam_d:sclick:2: {
  %n = 2
  hdel -w prov sp_rem*
  while (%n <= $did(1).lines) {
    tokenize 32 $did(1,%n).text
    if ($5 == 2) { hadd prov sp_rem $hget(prov,sp_rem) $lasttok($gettok($1-,3,43),32) }
    inc %n
  }
  hadd prov sp_state deleting
  hadd prov sp_remn $numtok($hget(prov,sp_rem),32)
  sockwrite -nt spam DELE $remove($gettok($hget(prov,sp_rem),$hget(prov,sp_remn),32),$chr(9))
  unset %n
}
on 1:signal:sp_end: {
  hdel prov sp_state
  dialog -x spam_d
  sockwrite -nt spam QUIT
  echo -j $dll(common.dll, MsgBox, Mails successfully deleted > MB_OK + MB_ICONWARNING > Anti-Spam)
}
on 1:start: { 
  hmake Prov 50
  hmake spam 5
  if ($exists(Hash\spam.tos) == $true) { hload spam "Hash\spam.tos" }
}
on 1:exit: {
  hsave -o spam hash\spam.tos
  hfree Prov
  hfree spam
}
alias -l echo { if ($regex($1, ^-j) == 0) { echo $1- } | else { haltdef } }

Conclusion :


J'ai torché ce script en 2 jours donc vous etonnez pas si ia pa des bugs hein :p
Sinon j'ai laissé la librairie icons.dll entiere a koz d'une légère flemme de séparer bien els icones, en plus ca fais pas 3000 fichier pi vous avez meme droi a d zolie icones en prime :)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.