MSN Messenger for mIRC — File Browser

MSNMessengerformIRCv3.46 / MSNMessengerformIRCv3.46 / msn / msn.mrc

msn.mrc — 35.14 KB — Download this file

;--------------------------------------------------------------------------------------------------------------------------------
;MSN Messenger for mIRC
;Andy Carvell 2003-2005
;Version 3.46

;Pass this on complete to anyone you know by any means.
;Do not steal bits from this code for your own use.

;Check http://www.burningimage.net/msn for updates

;Editing this code will result in errors, which the creator will
;not provide support for.
;--------------------------------------------------------------------------------------------------------------------------------
;Thanks to Erdinc for major help with Proxy/Socks :) [ Erdinc@hotmail.com ]
;Thanks for foreign character help: vIndEx, Jorge, Madis, Per Ståle Kvam, Sen, Webmaster de Niputagracia.com, Francisco del Valle, Lasse Brun, Ferminho Stealth Angel
;--------------------------------------------------------------------------------------------------------------------------------
;--------------------------------------------------------------------------------------------------------------------------------
;Thanks to Artwerks and sax for their help
;Thanks to Dan from the forum.
;Thanks to rom for the code in msnauth2kxp.mrc
;blah.dll is by sax
;listfiles.dll is by Misanthrop
;--------------------------------------------------------------------------------------------------------------------------------

on *:LOAD:{
  .load -rs $shortfn($scriptdir) $+ /msnlog.mrc
  .load -rs $shortfn($scriptdir) $+ /msndialog.mrc
  .load -rs $shortfn($scriptdir) $+ /msnnewver.mrc
  .load -rs $shortfn($scriptdir) $+ /msnfilercvd.mrc
  .load -rs $shortfn($scriptdir) $+ /msnfilesend.mrc
  .load -rs $shortfn($scriptdir) $+ /msnauth.mrc
  .load -rs $shortfn($scriptdir) $+ /msnauth2kxp.mrc
  set %msn.log 1
  set %msn.chat.style $no
  set %msn.useproxy no
  set %msn.server messenger.hotmail.com
  set %msn.server.port 1863
  set %msn.sounds on
  set %msn.messenger.font Verdana 10
  set %msn.maxidle 600
  set %msn.autoidle no
  set %msn.showtype YES
  set %msn.motd Welcome to MSN Messenger for mIRC!
  set %msn.background $yes
  set %msn.autoconnect $no
  set %msn.awaysync $no
  set %msn.mailnotification yes
  set %msn.chat.style msn
  set %msn.window.minimise $no
  set %msn.showlogon $true
  echo -a ---
  echo -a MSN Messenger for mIRC v $+ $msnversion
  echo -a /msn to connect.
  echo -a /msncontrol for the control panel.
  echo -a Alternatively, use the menu in mIRC.
  echo -a 
  echo -a Commands:
  echo -a /msn.name <new msn name>
  echo -a /msn.status <status> (type /msn.status help for more information)
  echo -a ---
  if ( $version < 6.03 ) { echo -a  $+ MSN Messenger for mIRC does not work with anything lower than mIRC 6.03.  You WILL experience problems with password authentication.  Download the latest version at http://www.mirc.com/get.html }
  if ( $os != 2K ) && ( $os != XP ) { echo -a You are not using Windows 2000 or Windows XP.  It is therefore highly likely that you will experience problems with password authentication }

}

on *:START:{
  if ( %msn.autoconnect == $yes ) { 
    if ( %msn.rememberpass == 0 ) { echo -a Error: You must have 'Remember my username and password' enabled for MSN for mIRC to automatically connect to MSN }
  msnstart }
}

alias msncontrol {
  dialog -m control control
}

alias msn { 
  dialog -m connect connect

  if ( %msn.rememberpass == 1 ) { did -c connect 9 }
}

alias msnstart {
  newver
  :top
  msnauth 
  ;hadd -m msnauth path $iif(*@hotmail.com iswm %msn.user,loginnet.passport.com,$iif(*@msn.com iswm %msn.user,msnialogin.passport.com,login.passport.com)) 
  hadd -m msnauth path $iif(*@hotmail.com iswm %msn.user,loginnet.passport.com,$iif(*@hotmail.co.uk iswm %msn.user,loginnet.passport.com,$iif(*@msn.com iswm %msn.user,msnialogin.passport.com,login.passport.com)))
  hadd -m messenger email %msn.user
  hadd -m messenger password $decode(%msn.pass,pwd)
  delgroupinfo
  if ( %msn.user == $null ) { halt }
  set %msn.main 0
  sockclose msn
  window -c @Messenger
  if (%msn.window.minimise == $yes) {
    window -l50k0nSz @Messenger %msn.messenger.font $shortfn($scriptdir) $+ /msn.ico
  }
  else {
    window -l50k0Sz @Messenger %msn.messenger.font $shortfn($scriptdir) $+ /msn.ico
  }
  if ( %msn.background == $yes ) { background -f @Messenger $shortfn($scriptdir) $+ bg.jpg } 
  else { background -x @Messenger }
  if (%msn.autoidle = yes) { .timer 0 30 .checkmsnidle }
  aline @Messenger v $+ $msnversion
  aline @Messenger  $+ ---- Message of the Day ----
  aline @Messenger %msn.motd
  if (%msn.useproxy == no) sockopen msnno %msn.server %msn.server.port
  elseif (%msn.useproxy == proxy) sockopen msnproxy %msn.server.proxy %msn.server.proxy.port
  elseif (%msn.useproxy == socks) sockopen msnsocks %msn.server.socks %msn.server.socks.port
  else aline @messenger 4Error! Please reset your proxy settings.
  aline @Messenger 10*** Connecting...
}

on *:sockopen:msnsocks:{
  bset &binvar 1 4 | bset &binvar 2 1 | bset &binvar 3 $int($calc(%msn.server.port / 256)) | bset &binvar 4 $calc(%msn.server.port % 256) | bset &binvar 5 $gettok(%msn.server,1,46)
  bset &binvar 6 $gettok(%msn.server,2,46) | bset &binvar 7 $gettok(%msn.server,3,46) | bset &binvar 8 $gettok(%msn.server,4,46) | bset &binvar 9 0
  if ($sock($sockname).status == active) {
    sockwrite $sockname &binvar
    aline @messenger 10*** Connecting to MSN via Socks...
    sockrename $sockname msn
    .timer 1 3 sendmsn VER %msn.main MSNP8 CVRO
    .timermsnsocks 1 3 sendmsn INF $calc(%msn.main + 1 )
  }
}

on *:sockopen:msnproxy:{
  if ($sock($sockname).status == active) {
    sockwrite -n $sockname CONNECT %msn.server $+ : $+ %msn.server.port http/1.0
    sockrename $sockname msn
    aline @messenger 10*** Connecting to MSN through HTTP Proxy...
    .timermsnprox 1 3 sendmsn VER %msn.main MSNP8 CVR0
    .timermsnprox2 1 6 sendmsn INF $calc(%msn.main + 1)
  }
}

on *:sockopen:msnno:{
  if ( %msn.debug == 1 ) { aline @messenger 10*** Connected }
  sockrename $sockname msn
  sendmsn VER %msn.main MSNP8 CVRO
}

alias sendmsn {
  if ( $sock(msn) != $null ) {
    sockwrite -n msn $1-
    if ( %msn.debug == 1 ) { aline @messenger 4 $+ $1- }
    inc %msn.main 1
  }
}

on *:close:@:{
  if ( $target == @Messenger ) { sockclose msn | sockclose chat.* | halt }
  sockclose chat. $+ $right($target, $calc($len($target) - 1))
}

on *:sockread:msn:{
  if ($sockerr > 0) return
  :nextread
  if ( $sock($sockname) == $null ) { halt }
  sockread %msn.data
  set %msn.data.nodecode %msn.data
  if ($sockbr == 0) return
  if ( %msn.data == $null ) { goto fdf }
  if ( $gettok(%msn.data,1-3,32) == USR $calc(%msn.main - 1) OK ) { 
    set %msn.name $rawurldecode( $gettok(%msn.data,5,32))
  }
  set %msn.data $rawurldecode(%msn.data)
  set %msn.data $replace(%msn.data,Â,$null)
  if ( %msn.debug == 1 ) { aline @messenger %msn.data | echo %msn.data }
  :fdf
  if ( %msn.data == VER $calc(%msn.main - 1) MSNP8 ) {
    hadd -m messenger session $calc($hget(messenger,session) + 1) 
    sendmsn CVR %msn.main 0x0409 win 4.10 i386 MSNMSGR 5.0.0544 MSMSGS %msn.user 
  }
  if ( $left(%msn.data,3) == CVR ) { 
    hadd -m messenger session $calc($hget(messenger,session) + 1)
    sendmsn USR %msn.main TWN I %msn.user 
  }  
  if ( $left(%msn.data,3) == XFR ) && ( $gettok(%msn.data,3,32) != SB ) {
    set %msn.newserver $gettok(%msn.data,4,32)
    sockclose msn 
    if ( %msn.debug == 1 ) { aline @messenger 4 $+ Switching to server %msn.newserver ... }
    set %msn.server $gettok(%msn.newserver,1,58)
    set %msn.server.port $gettok(%msn.newserver,2,58) 
    if (%msn.useproxy == no)  .timer 1 1 sockopen msnno %msn.server %msn.server.port
    elseif (%msn.useproxy == proxy) .timer 1 1 sockopen msnproxy %msn.server.proxy %msn.server.proxy.port
    elseif (%msn.useproxy == socks) .timer 1 1 sockopen msnsocks %msn.server.socks %msn.server.socks.port
    else aline @messenger 4Error! Please reset your proxy settings.
    return
  }   
  if ( $left(%msn.data,11) == USR $calc(%msn.main - 1) MD5 S ) { sendmsn USR %msn.main MD5 S $md5($gettok(%msn.data,5,32) $+ %msn.pass) }
  if ( $left(%msn.data,3) = ILN ) { 
    set %msn.nick $gettok(%msn.data,5-,32)
    set %msn.temp4 $calc($numtok(%msn.nick,32)-1)#
    set %msn.nick $gettok(%msn.nick,1 - %msn.temp4 ,32)
    if  ( $gettok(%msn.data,3,32) == NLN ) { aline -l @Messenger 3 $+ %msn.nick 15< $+ $gettok(%msn.data,4,32) $+ > }
    if  ( $gettok(%msn.data,3,32) == AWY ) { aline -l @Messenger 7 $+ %msn.nick [AWAY] 15< $+ $gettok(%msn.data,4,32) $+ > }
    if  ( $gettok(%msn.data,3,32) == BSY ) { aline -l @Messenger 13 $+ %msn.nick [BUSY] 15< $+ $gettok(%msn.data,4,32) $+ > }
    if  ( $gettok(%msn.data,3,32) == BRB ) { aline -l @Messenger 10 $+ %msn.nick [BRB] 15< $+ $gettok(%msn.data,4,32) $+ > }
    if  ( $gettok(%msn.data,3,32) == PHN ) { aline -l @Messenger 11 $+ %msn.nick [PHN] 15< $+ $gettok(%msn.data,4,32) $+ > }
    if  ( $gettok(%msn.data,3,32) == LUN ) { aline -l @Messenger 6 $+ %msn.nick [LUNCH] 15< $+ $gettok(%msn.data,4,32) $+ > }
    if  ( $gettok(%msn.data,3,32) == IDL ) { aline -l @Messenger 5 $+ %msn.nick [IDLE] 15< $+ $gettok(%msn.data,4,32) $+ > } 
  }
  if ( $left(%msn.data,3) == NLN ) { 
    set %msn.nick $gettok(%msn.data,4-,32)
    set %msn.temp4 $calc($numtok(%msn.nick,32)-1)
    set %msn.nick $gettok(%msn.nick,1 - %msn.temp4 ,32)
    if  ( $gettok(%msn.data,2,32) == NLN ) { 
      if ( $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) == $null ) { aline -l @Messenger 3 $+ %msn.nick 15< $+ $gettok(%msn.data,3,32) $+ > | goto willy }
      rline -l @Messenger $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) 3 $+ %msn.nick 15< $+ $gettok(%msn.data,3,32) $+ > 
      :willy
      if ( Messenger !isin $active ) && ( %msn.showlogon == $true ) { echo -a 7 $+ %msn.nick has logged on. }
      aline @Messenger $timestamp 7 $+ %msn.nick has logged on.
      if ( %msn.sounds == on ) { splay $shortfn($scriptdir) $+ blip.wav }
    }
    if  ( $gettok(%msn.data,2,32) == AWY ) { if ( $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) == $null ) { goto set1 } | dline -l @Messenger $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) | :set1 | aline -l @Messenger 7 $+ %msn.nick [AWAY] 15< $+ $gettok(%msn.data,3,32) $+ > }
    if  ( $gettok(%msn.data,2,32) == BSY ) { if ( $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) == $null ) { goto set2 } | dline -l @Messenger $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) | :set2 | aline -l @Messenger 13 $+ %msn.nick [BUSY] 15< $+ $gettok(%msn.data,3,32) $+ > }
    if  ( $gettok(%msn.data,2,32) == BRB ) { if ( $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) == $null ) { goto set3 } | dline -l @Messenger $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) | :set3 | aline -l @Messenger 10 $+ %msn.nick [BRB] 15< $+ $gettok(%msn.data,3,32) $+ > }
    if  ( $gettok(%msn.data,2,32) == PHN ) { if ( $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) == $null ) { goto set4 } | dline -l @Messenger $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) | :set4 | aline -l @Messenger 11 $+ %msn.nick [PHN] 15< $+ $gettok(%msn.data,3,32) $+ > }
    if  ( $gettok(%msn.data,2,32) == LUN ) { if ( $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) == $null ) { goto set5 } | dline -l @Messenger $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) | :set5 | aline -l @Messenger 6 $+ %msn.nick [LUNCH] 15< $+ $gettok(%msn.data,3,32) $+ > }
    if  ( $gettok(%msn.data,2,32) == IDL ) { if ( $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) == $null ) { goto set6 } | dline -l @Messenger $fline(@Messenger,*< $+ $gettok(%msn.data,3,32) $+ >,1,1) | :set6 | aline -l @Messenger 5 $+ %msn.nick [IDLE] 15< $+ $gettok(%msn.data,3,32) $+ > } 
  }
  if ( $left(%msn.data,3) == FLN ) { 
    set %msn.temp $gettok($line(@Messenger,$fline(@Messenger,*< $+ $gettok(%msn.data,2,32) $+ >,1,1),1),1,60)
    set %msn.temp $mid($gettok($line(@Messenger,$fline(@Messenger,*< $+ $gettok(%msn.data,2,32) $+ >,1,1),1),1,60),3)
    set %msn.temp $left(%msn.temp,$calc($len(%msn.temp)-4))
    aline @Messenger $timestamp 4 $+ %msn.temp logged off.
    dline -l @Messenger $fline(@Messenger,*< $+ $gettok(%msn.data,2,32) $+ >,1,1) 
  }
  if ( $left(%msn.data,3) == CHL ) { 
    sendmsn QRY %msn.main msmsgs@msnmsgr.com 32 
    aline -p @messenger 10*** Online Contacts Received, displayed on the right
    sockwrite msn $md5( $gettok(%msn.data,3,32) $+ Q1P7W2E4J9R8U3S5)
  }
  if ( $left(%msn.data,3) == XFR ) && ( $gettok(%msn.data,3,32) == SB ) {
    set %msn.chatserver $gettok(%msn.data,4,32)
    sockopen chat. $+ %msn.clickemail $gettok(%msn.chatserver,1,58) $gettok(%msn.chatserver,2,58)
    set %msn.chat.hash $gettok(%msn.data,6,32)
    msnopenwindow %msn.clickemail
    aline @ $+ %msn.clickemail 10*** Please wait for the user to join... ***
  }
  if ( $left(%msn.data,3) == RNG ) {
    set %msn.chat.hash $gettok(%msn.data,5,32) $gettok(%msn.data,2,32)
    set %msn.chatserver $gettok(%msn.data,3,32)
    set %msn.status answering
    sockclose chat. $+ $gettok(%msn.data,6,32)
    sockopen chat. $+ $gettok(%msn.data,6,32) $gettok(%msn.chatserver,1,58) $gettok(%msn.chatserver,2,58)
    msnopenwindow $gettok(%msn.data,6,32) 
  }
  if ( $left(%msn.data,3) == 911 || $left(%msn.data,3) == 911 ) { beep | echo -a 4ERROR: Authentication failed }

  if ( $left(%msn.data,3) == LST ) && ( $gettok(%msn.data,3,32) == BL ) {
    window -lk0zd @BlockList
    aline -l @BlockList 14 $gettok(%msn.data,8-,32) 15 $+ < $+ $gettok(%msn.data,7,32) $+ >
  }
  if ( $gettok(%msn.data,1,32) == Inbox-Unread: ) && ( $gettok(%msn.data,2,32) != 0 ) { set %msn.newmail You have $gettok(%msn.data,2,32) new e-mail message(s) | if ( %msn.mailnotification == yes ) { dialog -m mail mail } }
  if ( $gettok(%msn.data,1-2,32) == Content-Type: text/x-msmsgsemailnotification; ) { set %msn.newmail You have 1 new e-mail message | if ( %msn.mailnotification == yes ) { dialog -m mail mail } }
  if ( $gettok(%msn.data,1,32) == LSG ) {
    set %msn.group. $+ $rawurldecode( $gettok(%msn.data.nodecode,2,32) ) $+ .name $replace( $rawurldecode( $gettok(%msn.data.nodecode,3,32) ), $chr(32) ,_)
  }
  if ( $left(%msn.data,3) == LST ) && ( $gettok(%msn.data,3,32) == FL ) {
    window -lk0d @ $+ $replace($rawurldecode( %msn.tab. [ $+ [ $gettok(%msn.data.nodecode,9,32) ] ] ),$chr(32),$null)
    set %msn.name.temp $left($gettok(%msn.data,8-,32),$calc($len($gettok(%msn.data,8-,32))-2))
    aline -l @ $+ $replace($rawurldecode( %msn.tab. [ $+ [ $gettok(%msn.data.nodecode,9,32) ] ] ),$chr(32),$null) 14 %msn.name.temp 15 $+ < $+ $gettok(%msn.data,7,32) $+ >
  }
  if ( $gettok(%msn.data,1,32) == USR && $gettok(%msn.data,3,32) == TWN && $gettok(%msn.data,4,32) == S ) {
    aline -p @messenger 10*** Authorising via SSL... (this may take a while)

    if ( $os == 2K ) || ( $os == XP ) {
      hadd -m msnauth info Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in= $+ $replace(%msn.user,@,$(%40,0)) $+ ,pwd= $+ $decode(%msn.pass,pwd) $+ , $+ $gettok(%msn.data,5-,32) 
      msnauth2
    }
    else {
      set %vknc $gettok(%msn.data,5-,32)
      openssl
    }
  }
  if ( $left(%msn.data,8) == ClientIP ) { 
    sendmsn SYN %msn.main 0 
    newver in
  }
  if ($left(%msn.data,3) = SYN) {
    set %_t $gettok(%msn.data,4,32)
    set %_i 0
  }
  if ($left(%msn.data,3) = LST) {
    inc %_i
    if (%_i = %_t) {
      if ( %msn.chg == 0 ) { sendmsn CHG %msn.main NLN | titlebar @Messenger -=[ Online ]=- }
      else { sendmsn CHG %msn.main HDN | titlebar @Messenger -=[ Appear Offline ]=- }  
    }
  }
  if ($left(%msn.data,3) = LST) {
    mkdir $shortfn($scriptdir) $+ groups
    set %msn.groupnumber $gettok(%msn.data.nodecode,5,32)
    write $shortfn($scriptdir) $+ groups\ $+ [ %msn.group. [ $+ [ %msn.groupnumber ] $+ ] .name ] $+ .grp $rawurldecode( $gettok(%msn.data.nodecode,3,32) ) 15< $+ $gettok(%msn.data,2,32) $+ >
  }
  goto nextread
}

on *:sockclose:msn:{
  window -l50k0Sz @Messenger %msn.messenger.font $shortfn($scriptdir) $+ msn.ico
  aline @messenger 10*** Disconnected
  titlebar @Messenger -=[ Offline ]=-
  dline -l @Messenger 1- $+ $line(@Messenger,0,1)
  if ( %msn.reconnect == $true && $window(@Messenger) != $null ) { msnstart }
}

on *:sockopen:chat*:{
  set %msn.$gettok($sockname,2-,46) 1
  msnopenwindow $gettok($sockname,2-,46) 
  ;aline @ $+ $gettok($sockname,2-,46) 10*** Connected, Please Wait...
  if ( %msn.showtype == YES ) { starttype $gettok($sockname,2-,46) }
  if ( %msn.status != answering ) { sockwrite -n $sockname USR %msn.$gettok($sockname,2-,46) %msn.user %msn.chat.hash }
  if ( %msn.status == answering ) { sockwrite -n $sockname ANS %msn.$gettok($sockname,2-,46) %msn.user %msn.chat.hash | unset %msn.status }
  inc %msn. $+ $gettok($sockname,2-,46) 1
}

on *:sockread:chat*:{
  if ($sockerr > 0) return
  :nextread
  if ( $sock($sockname) == $null ) { halt }
  sockread -f %msn.chat.data
  if ($sockbr == 0) return
  if ( %msn.chat.data == $null ) { 
    msnopenwindow $gettok($sockname,2-,46) 
  }
  ;aline @ $+ $gettok($sockname,2-,46) %msn.chat.data
  :fdfdf
  if ( $gettok(%msn.chat.data,1,32) == USR ) && ( $gettok(%msn.chat.data,3,32) == OK ) {
    sockwrite -n $sockname CAL %msn.$gettok($sockname,2-,46) $gettok($sockname,2-,46)
    inc %msn.$gettok($sockname,2-,46) 1
  }
  if ( $gettok(%msn.chat.data,1,32) == JOI ) { 
    if ( %msn.irc == done ) {
      unset %msn.iro
      halt
    }
    msnopenwindow $right($sockname,$calc($len($sockname)-5)) 
    rline @ $+ $right($sockname,$calc($len($sockname)-5)) $line(@ $+ $right($sockname,$calc($len($sockname)-5)),0) 10*** $rawurldecode($gettok(%msn.chat.data,3,32)) has joined the conversation 
  }
  if ( $left(%msn.chat.data,3) == MSG ) {
    set %msn.msgnick 14 $+ $rawurldecode( $gettok(%msn.chat.data,3,32) )
    set %msn.msgnick.log $rawurldecode( $gettok(%msn.chat.data,3,32) )
    set %msn.email.msg $right($sockname,$calc($len($sockname)-5))
    set %tmp 0
    :beg
    ;echo -a 9 $+ %msn.chat.data
    if ( %tmp == 5 ) { 
      if ( %msn.chat.data == $null ) { 
        msnopenwindow %msn.email.msg 
        titlebar @ $+ %msn.email.msg ----------=[ TYPING ]=----------
        .timertype $+ %msn.email.msg off
        .timertype $+ %msn.email.msg 1 6 titlebar @ $+ %msn.email.msg
        halt
      } 
      msnopenwindow %msn.email.msg 
      starttype %msn.email.msg
      titlebar @ $+ %msn.email.msg

      if ( $left(%msn.chat.data,24) == Invitation-Cookie: %msn.invitation.cookie ) { declinefile }
      if ( $left(%msn.chat.data,17) == Invitation-Cookie ) { goto endofsay }
      if ( $left(%msn.chat.data,11) == Application ) { goto filebit }
      if (%msn.chat.style == msn) {
        aline -hp @ $+ %msn.email.msg $timestamp %msn.msgnick says:
        aline -hp @ $+ %msn.email.msg $replace(%msn.chat.data ,Ã¥,å,ä,ä,ö,ö,Ä,Ä,Ã…,Å,Ö,Ö,Ö,Ö,õ,õ,ü,ü,á,á,é,é,$+($chr(37),20),$chr(32),è,è,à,à,ç,ç,ê,ê,ù,ù,ë,ë,ï,ï,É,É,À,À,È,È,ô,ô,â,â,ð,°,ñ,ñ,Ñ,Ñ,á,á,é,é,í,í,ó,ó,ú,ú,Á,Á,É,É,Í,Í,Ó,Ó,Ú,Ú,ü,ü,Ü,Ü,ø,ø,æ,æ,¡,¡,¿,¿,Æ,Æ,Ø,Ø ))
      }
      else {
        aline -hp @ $+ %msn.email.msg $timestamp 14 $+ < $+ %msn.msgnick $+ > $replace(%msn.chat.data ,Ã¥,å,ä,ä,ö,ö,Ä,Ä,Ã…,Å,Ö,Ö,Ö,Ö,õ,õ,ü,ü,á,á,é,é,$+($chr(37),20),$chr(32),è,è,à,à,ç,ç,ê,ê,ù,ù,ë,ë,ï,ï,É,É,À,À,È,È,ô,ô,â,â,ð,°,ñ,ñ,Ñ,Ñ,á,á,é,é,í,í,ó,ó,ú,ú,Á,Á,É,É,Í,Í,Ó,Ó,Ú,Ú,ü,ü,Ü,Ü,ø,ø,æ,æ,¡,¡,¿,¿,Æ,Æ,Ø,Ø ))
      }
      flash @ $+ %msn.email.msg
      if ( %msn.sounds == on ) { splay $shortfn($scriptdir) $+ type.wav }
      addlog %msn.email.msg $urlencode(%msn.msgnick.log) %msn.chat.data
      :endofsay
      return
    }
    :filebit
    sockread -f %msn.chat.data

    if ( %msn.chat.data == Invitation-Command: ACCEPT ) { 
      sockread -f %msn.temp

      if ( $left(%msn.temp,25) = Invitation-Cookie: %msn.invitation.cookie ) { acceptfile }
      sockread -f %msn.temp

      if ( $gettok( %msn.temp ,1,32) == IP-Address: ) { set %msn.file.ip $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == Port: ) { set %msn.file.port $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == AuthCookie: ) { set %msn.file.authcookie $gettok( %msn.temp ,2,32) }
      sockread -f %msn.temp
      if ( $gettok( %msn.temp ,1,32) == IP-Address: ) { set %msn.file.ip $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == Port: ) { set %msn.file.port $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == AuthCookie: ) { set %msn.file.authcookie $gettok( %msn.temp ,2,32) }
      sockread -f %msn.temp
      if ( $gettok( %msn.temp ,1,32) == IP-Address: ) { set %msn.file.ip $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == Port: ) { set %msn.file.port $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == AuthCookie: ) { set %msn.file.authcookie $gettok( %msn.temp ,2,32) }
      sockread -f %msn.temp
      if ( $gettok( %msn.temp ,1,32) == IP-Address: ) { set %msn.file.ip $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == Port: ) { set %msn.file.port $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == AuthCookie: ) { set %msn.file.authcookie $gettok( %msn.temp ,2,32) }
      sockread -f %msn.temp
      if ( $gettok( %msn.temp ,1,32) == IP-Address: ) { set %msn.file.ip $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == Port: ) { set %msn.file.port $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == AuthCookie: ) { set %msn.file.authcookie $gettok( %msn.temp ,2,32) }
      sockread -f %msn.temp
      if ( $gettok( %msn.temp ,1,32) == IP-Address: ) { set %msn.file.ip $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == Port: ) { set %msn.file.port $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == AuthCookie: ) { set %msn.file.authcookie $gettok( %msn.temp ,2,32) }
      sockread -f %msn.temp
      if ( $gettok( %msn.temp ,1,32) == IP-Address: ) { set %msn.file.ip $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == Port: ) { set %msn.file.port $gettok( %msn.temp ,2,32) }
      if ( $gettok( %msn.temp ,1,32) == AuthCookie: ) { set %msn.file.authcookie $gettok( %msn.temp ,2,32) }

      msnfileconnect
      halt
    }
    if ( %msn.chat.data == Invitation-Command: INVITE ) {
      sockread -f %msn.file.cookie
      sockread -f %msn.file.filename
      sockread -f %msn.file.filesize
      msnfilercvd %msn.email.msg
      halt
    }
    inc %tmp 1
    goto beg
  }
  if ( $left(%msn.chat.data,3) == IRO ) { 
    set %msn.temp.name $rawurldecode($gettok(%msn.chat.data,6-,32)) 

    msnopenwindow $right($sockname,$calc($len($sockname)-5)) 
    aline @ $+ $right($sockname,$calc($len($sockname)-5)) 10*** $rawurldecode($gettok(%msn.chat.data,6,32)) has joined the conversation 
    set %msn.iro done
  }

  if ( $left(%msn.chat.data,3) == ANS ) { 
    msnopenwindow $gettok($sockname,2-,46) 
    ; aline @ $+ $gettok($sockname,2-,46) 10*** %msn.temp.name has joined the conversation 
  }
  if ( $left(%msn.chat.data,3) == BYE ) { 
    set %msn.temp $gettok($line(@Messenger,$fline(@Messenger,*< $+ $gettok(%msn.chat.data,2,32) $+ >,1,1),1),1,60)
    set %msn.temp $mid($gettok($line(@Messenger,$fline(@Messenger,*< $+ $gettok(%msn.chat.data,2,32) $+ >,1,1),1),1,60),3)
    set %msn.temp $left(%msn.temp,$calc($len(%msn.temp)-4))
    window -k0ezd @ $+ $gettok($sockname,2-,46) Arial 12 $shortfn($scriptdir) $+ msn.ico
    aline @ $+ $gettok($sockname,2-,46) 10*** %msn.temp has left the conversation (closed the window)

    set %msn.clickemail $gettok(%msn.chat.data,2,32)
    sockclose chat. $+ %msn.clickemail
    sendmsn XFR %msn.main SB
  }
  goto nextread
}

menu @Messenger {
  dclick: {
    set %msn.clickemail $gettok($line(@Messenger,$1,1),2-,60)
    set %msn.clickemail $left(%msn.clickemail,$calc($len(%msn.clickemail)-1))
    sockclose chat. $+ %msn.clickemail
    sendmsn XFR %msn.main SB
  }
}

menu @Messenger {
  Change Status
  .Online:.sendmsn CHG %msn.main NLN | titlebar @Messenger -=[ Online ]=-
  .Away:.sendmsn CHG %msn.main AWY | titlebar @Messenger -=[ Away ]=-
  .Busy:.sendmsn CHG %msn.main BSY | titlebar @Messenger -=[ Busy ]=-
  .Be Right Back:.sendmsn CHG %msn.main BRB | titlebar @Messenger -=[ Be Right Back ]=-
  .Phone:.sendmsn CHG %msn.main PHN | titlebar @Messenger -=[ Phone ]=-
  .Lunch:.sendmsn CHG %msn.main LUN | titlebar @Messenger -=[ Lunch ]=-
  .Appear Offline:.sendmsn CHG %msn.main HDN | titlebar @Messenger -=[ Appear Offline ]=-
  Control Panel:dialog -m control control
  -
  Block User: {
    set %msn.clickemail $gettok($sline(@Messenger,1),2-,60)
    set %msn.clickemail $left(%msn.clickemail,$calc($len(%msn.clickemail)-1))
    if ( %msn.clickemail == $null ) { halt }
    blockuser %msn.clickemail
  }
  Unblock User:{
    set %msn.clickemail $gettok($sline(@Messenger,1),2-,60)
    set %msn.clickemail $left(%msn.clickemail,$calc($len(%msn.clickemail)-1))
    if ( %msn.clickemail == $null ) { halt }
    unblockuser %msn.clickemail
  }
  View Profile:{
    set %msn.clickemail $gettok($sline(@Messenger,1),2-,60)
    set %msn.clickemail $left(%msn.clickemail,$calc($len(%msn.clickemail)-1))
    if ( %msn.clickemail == $null ) { halt }
    run http://members.msn.com/ $+ %msn.clickemail
  }
  Delete Contact:{
    set %msn.clickemail $gettok($sline(@Messenger,1),2-,60)
    set %msn.clickemail $left(%msn.clickemail,$calc($len(%msn.clickemail)-1))
    if ( %msn.clickemail == $null ) { halt }
    delmsnuser %msn.clickemail
  }
  -

}

menu @BlockList {
  Unblock User:{
    set %msn.clickemail $gettok($sline(@BLockList,1),2-,60)
    set %msn.clickemail $left(%msn.clickemail,$calc($len(%msn.clickemail)-1))
    if ( %msn.clickemail == $null ) { halt }
    unblockuser %msn.clickemail
    if ( $sock(msn) == msn ) { 
      window -c @BlockList
    sendmsn LST %msn.main BL }
  }
}

on *:INPUT:@:{
  if (@*@*@ICQ iswm $active) { return }
  if ( /msnaccept isin $1- ) || ( /msndecline isin $1- ) { return }
  if ( @ isin $right($active,$calc($len($active)-1))) {
    set %msn.texttosend $replacecs($1- ,å,Ã¥,ä,ä,ö,ö,Å,Ã…,Ä,Ä,Ö,Ö,õ,õ,ü,ü,á,á,é,é,$chr(32),$+($chr(37),20),è,è,à,$+(Ã,$chr(160)),ç,ç,ê,ê,ù,ù,ë,ë,ï,ï,É,É,À,À,È,È,ô,ô,â,â,°,ð,ñ,ñ,Ñ,Ñ,á,á,é,é,í,í,ó,ó,ú,úÁ,,Á,É,É,Í,Í,Ó,Ó,Ú,Ú,ü,ü,Ü,Ü,ø,ø,æ,æ,¡,¡,¿,¿,Æ,Æ,Ø,Ø ))
    set %msn.texttosend $rawurldecode(%msn.texttosend)

    if (%msn.chat.style == msn) {
      aline -p @ $+ $right($active,$calc($len($active)-1)) $timestamp 14 $+ %msn.name says:
      aline -p @ $+ $right($active,$calc($len($active)-1)) $1-
    }
    else {
      aline -hp @ $+ $right($active,$calc($len($active)-1)) $timestamp 14 $+ < $+ %msn.name $+ > $1-
    }

    sockwrite -n chat. $+ $right($active,$calc($len($active)-1)) MSG %msn. [ $+ [ $right($active,$calc($len($active)-1)) ] ] N $calc($len(%msn.texttosend) + 132)
    sockwrite -n chat. $+ $right($active,$calc($len($active)-1)) MIME-Version: 1.0
    sockwrite -n chat. $+ $right($active,$calc($len($active)-1)) Content-Type: text/plain; charset=UTF-8
    sockwrite -n chat. $+ $right($active,$calc($len($active)-1)) X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=1; PF=22
    sockwrite -n chat. $+ $right($active,$calc($len($active)-1)) 
    sockwrite chat. $+ $right($active,$calc($len($active)-1)) %msn.texttosend
    addlog $right($active,$calc($len($active)-1)) $urlencode(%msn.name) $1-
  }
}

alias starttype {
  .timer $+ $$1 -m 0 1 checktype $1
}

alias checktype {
  if ( $editbox(@ $+ $1) != $null ) { 
    saytype $1
    .timer $+ $1 off
    .timer 1 6 starttype $1
  }
}

alias saytype {
  if ( %msn.showtype == NO ) { return }
  sockwrite -n chat. $+ $1 MSG %msn. [ $+ [ $1 ] ] U $calc(73 + $len( %msn.user ))
  sockwrite -n chat. $+ $1 MIME-Version: 1.0
  sockwrite -n chat. $+ $1 Content-Type: text/x-msmsgscontrol
  sockwrite -n chat. $+ $1 TypingUser: %msn.user
  sockwrite chat. $+ $1 $crlf
  sockwrite chat. $+ $1 $crlf
  inc %msn. [ $+ [ $1 ] ] 1
}

alias addmsnuser {
  if ( $sock(msn) != msn ) { halt }
  sendmsn ADD %msn.main FL $$1 $$1 0
  sendmsn ADD %msn.main AL $$1 $$1
  aline @Messenger 10*** $$1 was added to your contact list
}

alias delmsnuser {
  if ( $sock(msn) != msn ) { halt }
  sendmsn REM %msn.main FL $$1
  set %msn.temp $gettok($line(@Messenger,$fline(@Messenger,*< $+ $$1 $+ >,1,1),1),1,60)
  set %msn.temp $mid($gettok($line(@Messenger,$fline(@Messenger,*< $+ $$1 $+ >,1,1),1),1,60),3)
  set %msn.temp $left(%msn.temp,$calc($len(%msn.temp)-4))
  if ( $fline(@Messenger,*< $+ $$1 $+ >,1,1) == $null ) { 
    aline @Messenger 4 $+ *** $$1 not a valid address.
    halt
  }
  dline -l @Messenger $fline(@Messenger,*< $+ $$1 $+ >,1,1) 
  aline @Messenger 10*** %msn.temp was removed from your contact list

}

alias blockuser {
  if ( $sock(msn) != msn ) { halt }
  sendmsn REM %msn.main AL $$1
  sendmsn ADD %msn.main BL $$1 $$1
  set %msn.temp $gettok($line(@Messenger,$fline(@Messenger,*< $+ $$1 $+ >,1,1),1),1,60)
  set %msn.temp $mid($gettok($line(@Messenger,$fline(@Messenger,*< $+ $$1 $+ >,1,1),1),1,60),3)
  set %msn.temp $left(%msn.temp,$calc($len(%msn.temp)-4))
  if ( $fline(@Messenger,*< $+ $$1 $+ >,1,1) == $null ) { 
    aline @Messenger 4 $+ *** $$1 not a valid address.
    halt
  }
  ;dline -l @Messenger $fline(@Messenger,*< $+ $$1 $+ >,1,1) 
  aline @Messenger 10*** %msn.temp has been blocked.
}

alias unblockuser {
  if ( $sock(msn) != msn ) { halt }
  sendmsn REM %msn.main BL $$1
  sendmsn ADD %msn.main AL $$1 $$1
  aline @Messenger 10*** $$1 has been unblocked
}

alias rawurldecode {
  var %decode = $1-
  while ($regex($eval(%decode,1), /\%([a-fA-F0-9]{2})/)) {
    var %t = $regsub($eval(%decode,1), /\%([a-fA-F0-9]{2})/, $chr($base($regml(1),16,10)), %decode)
  }
  return %decode
}

alias rawurldecode {
  var %i = 0, %r, %c | while (%i < $gettok($1-,0,37)) {
    inc %i
    %c = $chr($base($gettok($1-,%i,37),16,10,2))
    %r = %r $+ $iif($asc(%c) == 32,\32\,%c)
  }
  return $replace(%r,\32\,$chr(32))
}

alias urlencode {
  var %i = 0, %r | while (%i < $len($1-)) {
    inc %i
    %r = %r $+ $chr(37) $+ $base($asc($mid($1-,%i,1)),10,16,2)
  }
  return %r
}

menu MenuBar {
  MSN Messenger
  .$iif($sock(msn) == $null,Login,$null) { msn }
  .$iif($sock(msn) != $null,Logout,$null) { 
    sockclose msn sockclose chat.* 
    window -c @Messenger
  }
  .Control Panel:dialog -m control control
  .Website:run http://www.burningimage.net/msn
}

alias aboutmsn {
  set %msn.temp $input(MSN Messenger for mIRC v $+ $msnversion $crlf $+ www.burningimage.net/msn $crlf $+ Andy Carvell 2003-2005,4,About)
}

alias msnversion return 3.46

alias msn.name {
  if ( $sock(msn) == $null ) {
    echo -a You are not connected to MSN
  halt }
  set %msn.newname $iif($1,$1,$?"New MSN Name?")
  set %msn.newname $urlencode(%msn.newname)
  if ( %msn.newname == $null ) { halt }
  set %msn.newname $replace(%msn.newname,$chr(32),$chr(37) $+ 20)
  sendmsn REA %msn.main %msn.user %msn.newname
  set %msn.name $rawurldecode( %msn.newname )
  echo @Messenger 10 $+ *** MSN Name changed to $rawurldecode( %msn.name )
}

alias msn.status {
  if ( $sock(msn) == $null ) {
    echo -a You are not connected to MSN
  halt }
  if ( $1 == online ) { sendmsn CHG %msn.main NLN | titlebar @Messenger -=[ Online ]=- }
  if ( $1 == away ) { sendmsn CHG %msn.main AWY | titlebar @Messenger -=[ Away ]=- }
  if ( $1 == busy ) { sendmsn CHG %msn.main BSY | titlebar @Messenger -=[ Busy ]=- }
  if ( $1 == brb ) { sendmsn CHG %msn.main BRB | titlebar @Messenger -=[ Be Right Back ]=- }
  if ( $1 == phone ) { sendmsn CHG %msn.main PHN | titlebar @Messenger -=[ Phone ]=- }
  if ( $1 == lunch ) { sendmsn CHG %msn.main LUN | titlebar @Messenger -=[ Lunch ]=- }
  if ( $1 == aoffline ) { sendmsn CHG %msn.main HDN | titlebar @Messenger -=[ Appear Offline ]=- }
  if ( $1 == help || $1 = $null ) { 
    echo -a /msn.status <status>
    echo -a <status> can be
    echo -a online, away, busy, brb, phone, lunch, aoffline
    echo -a eg. /msn.status away
  }
}

alias checkmsnidle {
  if ($idle >= %msn.maxidle) { 
    if ( %msn.autoidle == no ) { halt }
    sendmsn CHG %msn.main IDL 
    if ( $sock(msn) == msn ) {
      titlebar @Messenger -=[ IDLE ]=-
    } 
  }
}

alias msn.winlist {
  if ($fline(@ $+ $1,*Invite MSN User*,1,1) == $null) { /aline -l @ $+ $1 14Invite MSN User }
  if ($fline(@ $+ $1,*Send File or Photo*,1,1) == $null) { /aline -l @ $+ $1 14Send File or Photo }
  if ($fline(@ $+ $1,*Send E-mail*,1,1) == $null) { /aline -l @ $+ $1 14Send E-mail }
  if ($fline(@ $+ $1,*Block User*,1,1) == $null) { /aline -l @ $+ $1 14Block User }
  if ($fline(@ $+ $1,*Unblock User*,1,1) == $null) { /aline -l @ $+ $1 14Unblock User }
  if ($fline(@ $+ $1,*View Profile*,1,1) == $null) { /aline -l @ $+ $1 14View Profile }
}
menu @*@* {
  dclick { 
    if (@*@*@ICQ iswm $active) { return }
    set %msn.clickemail $right($active,$calc($len($active) - 1))
    var %a = $line(@ $+ %msn.clickemail,$1,1)
    if (*Unblock User* iswm %a) { if ( %msn.clickemail == $null ) { halt } | unblockuser %msn.clickemail | return }
    elseif (*Block User* iswm %a) { if ( %msn.clickemail == $null ) { halt } | blockuser %msn.clickemail }
    elseif (*Send File or Photo* iswm %a) { msnsendfile }
    elseif (*Send E-mail* iswm %a) { run http://www.hotmail.com }
    elseif (*View Profile* iswm %a) { if ( %msn.clickemail == $null ) { halt } | run explorer.exe http://members.msn.com/ $+ %msn.clickemail }
    elseif (*Invite MSN User* iswm %a) { 
      if ( %msn.clickemail == $null ) { halt }
      set %msn.temp $input(Enter the person you wish to invite's e-mail address,eoq,Invite User)
      if ( %msn.temp == $null ) { halt }
      sockwrite -n chat. $+ %msn.clickemail CAL  [ %msn. [ $+ [ %msn.clickemail ] ] ] %msn.temp
      ;echo -a 13  chat. $+ %msn.clickemail CAL  [ %msn. [ $+ [ %msn.clickemail ] ] ] %msn.temp
    }
    elseif (*Delete Contact* iswm %a) { if ( %msn.clickemail == $null ) { halt } | delmsnuser %msn.clickemail }
    else { aline @ $+ %msn.clickemail 4Error: %a Is not a command built into the code. }
  }
}
alias msnopenwindow {
  if ( %msn.chat.style == $no ) {
    window -ek0zdl20 @ $+ $1 Arial 12 $shortfn($scriptdir) $+ msn.ico | $msn.winlist( $1 )
  }
  else { window -ek0zl20z @ $+ $1 Arial 12 $shortfn($scriptdir) $+ msn.ico | $msn.winlist( $1 ) }
}
alias away {
  if ( $1 == $null ) {
    away
    if ( %msn.awaysync == $yes ) { msn.status online }
    halt
  }
  away $1-
  if ( %msn.awaysync == $yes ) { msn.status away }
}
alias delgroupinfo {
  unset %msn.group.*
  set %msn.temp $dll($shortfn($scriptdir) $+ listfiles.dll, setoutput, <fname>)
  set %msn.temp $dll($shortfn($scriptdir) $+ listfiles.dll,listfiles, fhs* > $mircdirmsn\groups.grp > $shortfn($scriptdir) $+ groups)
  set %msn.counter 0
  while ($lines($mircdirmsn\groups.grp) > %msn.counter) {
    inc %msn.counter
    set %msn.group.file $read( $shortfn($scriptdir) $+ groups.grp , %msn.counter )
    .remove $shortfn($scriptdir) $+ groups\ $+ %msn.group.file
  }
  .rmdir $shortfn($scriptdir) $+ groups
}