load /usr/lib/libdb_tcl.so

bind msg * sendsms sendsms
bind msg * smshelp show_smshelp
bind msg * helpsms show_smshelp
bind evnt - sigill check_incoming

# This function is being called when snark is hit by an ILL signal. It checks
# /home/bobcat/sms/* and delivers all sms'es in this directory.

proc check_incoming {type} {
  set files [glob -directory /home/bobcat/sms *]
  foreach f $files {
    set i [split $f "€"]
    set ch [open $f "r"]
    set msg [read $ch]
    
    set modt [lindex $i 0]
    set afs [lindex $i 1]
    # 16 fordi path'en er /home/bobcat/sms
    set modt1 [string replace $modt 0 16]
#    if { [validuser $modt1] } {
#      set modt1nick [hand2nick $modt1]
#      if {$modt1nick != ""} {
#        putmsg "$modt1nick" "sms fra $afs: $msg"
#      } else {
#        storenote "snark" "$modt1" "Fra $afs: $msg" "$modt1"
#      }
#      putxferlog "sms received from $afs to $modt1"
#    } else {
      set modt1nick [hand2nick "bobcat"]
      storenote "snark" "bobcat" "Fra $afs: $modt1 $msg" "bobcat"
      if {$modt1nick != ""} {
        putnotc "$modt1nick" "sms fra $afs: $modt1 $msg"
      }
      putxferlog "sms received from $afs (delivered to bobcat)"
#    }
    file delete $f
  }
}

# This function is called from irc whenover somebody tries to send a sms.

proc show_smshelp {nick user handle args} {
  set vers [berkdb version -string]
  if { ([matchattr $handle "S"]) } then {
    putmsg $nick "Dit handle er $handle"
    if { [passwdok $handle ""] } {
      putmsg $nick "Du skal sætte et password før du kan bruge sms-senderen. Det gør du ved at skrive:"
      putmsg $nick "/msg snark pass password"
    } else {
      putmsg $nick "Du har sat et password, fint."
    }
    putmsg $nick "Skriv følgende for at sende sms:"
    putmsg $nick "/msg snark sendsms password modtager besked"
    putmsg $nick "modtager skal være et 8-cifret mobilnummer" 
    putmsg $nick "Dit handle vil fremgå af den sms du sender."
    putmsg $nick "Skriv følgende for at se sms der er modtaget mens du var offline:"
    putmsg $nick "/msg snark notes password read all"
    #putmsg $nick "Se også http://www.snark.dk/faq for yderligere spørgsmål og svar."
    #putmsg $nick "Sms'er kan besvares ved at skrive handle som første ord og sende til 27129932"
  } else {
    putmsg $nick "Desværre, du har ikke adgang til sms-senderen."
  }
}

proc sendsms {nick user handle arg} {
  set passwd [lindex $arg 0]
  set recipient [lindex $arg 1]
  set msg [lrange $arg 2 end]

  if { ([matchattr $handle "S"]) } then {
  } else {
    putmsg $nick "Desværre, du har ikke adgang til sms-senderen."
    return
  }
  if { [passwdok $handle $passwd] } {
  } else {
    putmsg $nick "Forkert password"
    return
  } 
	  
  if { [regexp {\d\d\d\d\d\d\d\d} $recipient] } {
  } else {
    putmsg $nick "Ugyldigt telefonnummer"
    return
  }

  set key "$handle€$recipient"
  set time [clock seconds]
  set day [clock format $time -format "%j.%Y"]
  set key1 "$handle€$day"

  set db [berkdb open -create -hash -- smsbase lastsend]
  set db1 [berkdb open -create -hash -- smsbase noofsms]
  
  set lasttimepair [$db get $key]
  set lasttime [lindex [lindex $lasttimepair 0] 1]

  set notodaypair [$db1 get $key1]
  set notoday [lindex [lindex $notodaypair 0] 1]
  
  if { [regexp {\d+} $lasttime] } {
    set timediff [expr $time - $lasttime]
    if { $timediff < 30 } {
      putmsg $nick "Vent venligst 30 sekunder før næste besked til samme modtager kan sendes."
      $db close
      $db1 close
      return
    }
  }

  if { [regexp {\d+} $notoday] } {
    if { $notoday >= 100 } {
      putmsg $nick "Der må højst sendes 100 sms'er om dagen."
      $db1 put $key1 $notoday
      $db close
      $db1 close
      return
    }
    incr notoday
  } else {
    set notoday "1"
  }

  $db put $key $time
  $db1 put $key1 $notoday
  set ret [$db1 get $key1]
  $db close
  $db1 close

  catch {exec /home/bobcat/bot/snark/gnokii_sendsms.sh "$recipient" << "$handle: $msg"} status
  putmsg $nick "$status"
  putxferlog "sms send from $nick ($handle!$user) to $recipient: $status"
  
  if { [regexp {\d+} $lasttime] } {
  } else {
    catch {exec /home/bobcat/bot/snark/gnokii_sendsms.sh "$recipient" << "Du har modtaget en sms fra $handle via snark sms service. Du kan svare tilbage ved at skrive $handle som første ord i dit svar."} status
  }
}

putlog "sendsms loaded"

