egghelp.org community Forum Index
[ egghelp.org home | forum home ]
egghelp.org community
Discussion of eggdrop bots, shell accounts and tcl scripts.
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

asl thingy

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    egghelp.org community Forum Index -> Archive
View previous topic :: View next topic  
Author Message
dusk
Halfop


Joined: 06 Mar 2005
Posts: 91
Location: Belgium

PostPosted: Sat Aug 06, 2005 10:33 am    Post subject: asl thingy Reply with quote

Weird thing happened......I'm using 'asl thingy v1.02' for age/sex/location input in my channel. Everything worked just fine untill last wednesday, suddenly the script returned (for some users) their age minus 1.

for example :

!asladd dusk m/somewhere 23/02/1977
the script returns : dusk is 27 (MUST be 28 ) years old, his anniversary : 23 feb
First I thought there was a problem with the clock on the server wich I'm using a shell on, but bots who are placed on another server (other provider) suddenly reacted the same way.Altough there was no problem before (and I didn't change the code either)

This is the script (partial) : Maybe if someone could take a look....


Code:
# create the data file if it doesn't exist
if {![file exist $asl_storefile]} {
    set create [open $asl_storefile a+]
    close $create
}
# load the data in memory
catch { unset asl_entries }
set asl_file [open $asl_storefile]
while {![eof $asl_file]} {
    lappend asl_entries [string tolower [lindex [gets $asl_file] 0]]
}
close $asl_file

bind pub $asl_addflag $asl_addtrig asl_add
bind pub $asl_delflag $asl_deltrig asl_del
bind pub $asl_flag $asl_trig asl_search

# add info
proc asl_add {nick host handle chan arg} {
    global asl_storefile asl_addtrig asl_entries
    if {[lindex $arg 2] == ""} {
   puthelp "notice $nick :USAGE: $asl_addtrig <nick> <sex/location> <date>"
    } {
   set entry [string tolower [lindex $arg 0]]
   # create the data file if it doesn't exist
   if {![file exist $asl_storefile]} {
       set create [open $asl_storefile a+]
       close $create
       catch { unset asl_entries }
   }
   if {[lsearch -exact $asl_entries $entry] == -1} {
       if {![isvaliddate [lindex $arg 2]]} {
      puthelp "notice $nick :USAGE: $asl_addtrig <nick> <sex/location> <date>"
      puthelp "notice $nick :[lindex $arg 2] is geen geldige datum!"
      return 0
       }
       if {![isvalidasl [lindex $arg 1]]} {
      puthelp "notice $nick :USAGE: $asl_addtrig <nick> <sex/location> <date>"
      puthelp "notice $nick :[lindex $arg 1] is geen geldig <sex/locatie>"
      return 0
       }
       lappend asl_entries $entry
       set file [open $asl_storefile a+]
       puts $file $arg
       close $file
       putserv "notice $nick :Info van [lindex $arg 0] werd opgeslagen!"
   } {
       putserv "notice $nick :Info over [lindex $arg 0] werd reeds opgeslagen!"
   }
    }
}

# delete info
proc asl_del {nick host handle chan arg} {
    global asl_storefile asl_tempfile asl_deltrig asl_entries
    if {[lindex $arg 1] != "" || [lindex $arg 0] == ""} {
   putserv "notice $nick :GEBRUIK: $asl_deltrig <nick>"
    } {
   set entry [string tolower $arg]
   # create the data file if it doesn't exist
   if {![file exist $asl_storefile]} {
       set create [open $asl_storefile a+]
       close $create
       catch { unset asl_entries }
       putserv "notice $nick :Geen info over $arg gevonden!"
       return 0
   }
   set idx [lsearch -exact $asl_entries $entry]
   if {$idx != -1} {
       set asl_entries [lreplace $asl_entries $idx $idx]
       set file [open $asl_storefile]
       set tempfile [open $asl_tempfile w]
       while {![eof $file]} {
      set temp [gets $file]
      if {[string tolower [lindex $temp 0]] != $entry && $temp != ""} {
          puts $tempfile $temp
      }
       }
       close $file
       close $tempfile
       file delete $asl_storefile
       file rename $asl_tempfile $asl_storefile
       putserv "notice $nick :deleted info for $arg"
   } {
       putserv "notice $nick :Geen info gevonden over $arg ."
   }
    }
}

# search for info
proc asl_search {nick host handle chan arg} {
    global asl_storefile asl_entries
    # create the data file if it doesn't exist
    if {![file exist $asl_storefile]} {
   set create [open $asl_storefile a+]
   close $create
   catch { unset asl_entries }
   return 0
    }
    set entry [string tolower [lindex $arg 0]]
    if {$entry == ""} { return 0 }
   
    if {[lsearch -exact $asl_entries $entry] != -1} {
   set file [open $asl_storefile]
   while {![eof $file]} {
       set line [gets $file]
       set matchnick [string tolower [lindex $line 0]]
       if {$entry == $matchnick} {
      set rnick [lindex $line 0]
      set asl [lindex $line 1]
      set date [lindex $line 2]
      if {[isvalidasl $asl]} {
          set location [lindex [split $asl "/"] 1]
          set sex [lindex [split $asl "/"] 0]
          if {$sex == "m" || $sex == "M"} {
         set heshe "Hij"
          } {
         set heshe "Ze"
          }
      } {
          puthelp "privmsg $chan :$nick, $rnick's info is corrupt :/"
          close $file
          return 0
      }
      if {[isvaliddate $date]} {
          set splitted [split $date "/"]
          set day [lindex $splitted 0]
          set month [lindex $splitted 1]
          set year [lindex $splitted 2]
          if {[string index $month 0] == 0} {
         set month [string index $month 1]
          }
          if {[string index $day 0] == 0} {
         set day [string index $day 1]
          }
          set systemday [clock format [unixtime] -format %d]
          set systemmonth [clock format [unixtime] -format %m]
          set systemyear [clock format [unixtime] -format %Y]
          set age [expr $systemyear - $year -1]
          if {$month < $systemmonth} { incr age }
          if {$month == $systemmonth} {
         if {$day < $systemday} { incr age }
          }
      } {
          puthelp "privmsg $chan :$nick, $rnick's info is corrupt :/"
          close $file
          return 0
      }
      puthelp "privmsg $chan :$nick, $rnick is $age jaar. $heshe woont in $location en is jarig op $day [humanmonth $month] ."
      close $file
      return 0
       }
   }
   close $file
    }
    puthelp "privmsg $chan :$nick, geen info over [lindex $arg 0]"
}

# checkt of een string een geldige 'sex/location' is
proc isvalidasl {string} {
    set splittedasl [split $string "/"]
    if {[llength $splittedasl] != 2} { return 0 }
    set sex [lindex $splittedasl 0]
    if {$sex != "m" && $sex != "v" && $sex != "f" &&
   $sex != "M" && $sex != "V" && $sex != "F"} {
   return 0
    }
    return 1
}

# checkt of een string een geldige datum voorstelt in dd/mm/yyyy
# (schrikkeljaren buiten beschouwen gelaten :p)
proc isvaliddate {string} {
    set splitteddate [split $string "/"]
    if {[llength $splitteddate] != 3} { return 0 }
    foreach num $splitteddate {
   if {![isnumber $num]} { return 0 }
    }
    set day [lindex $splitteddate 0]
    set month [lindex $splitteddate 1]
    set year [lindex $splitteddate 2]
    if {[string length $year] != 4} { return 0 }
    if {$day > 31 || $day == 0} { return 0 }
    if {$month > 12 || $month == 0} { return 0 }
   
    switch $month {
   2 { if {$day > 29} { return 0 } }
   4 -
   6 -
   9 -
   11 { if {$day > 30} { return 0 } }
    }
    return 1
}

# zet getal 1-12 om naar de corresponderende maand
proc humanmonth {num} {
    switch $num {
   1 { return "januari" }
   2 { return "februari" }
   3 { return "maart" }
   4 { return "april" }
   5 { return "mei" }
   6 { return "juni" }
   7 { return "juli" }
   8 { return "augustus" }
   9 { return "september" }
   10 { return "oktober" }
   11 { return "november" }
   12 { return "december" }
    }
}

putlog "asl thingy v1.02 loaded .."

## EOF


First I thought this was the problem, but it seems fine (also weird it doesn't affect ALL users, just some of them)

Code:
          set age [expr $systemyear - $year -1]
          if {$month < $systemmonth} { incr age }
          if {$month == $systemmonth} {
         if {$day < $systemday} { incr age }


Thx in advance.
Back to top
View user's profile Send private message MSN Messenger
^DooM^
Owner


Joined: 26 Aug 2003
Posts: 772
Location: IronForge

PostPosted: Sat Aug 06, 2005 12:04 pm    Post subject: Reply with quote

If you are running this on a windrop then just to let you know that windows does not handle dates properly before 1970 if using a mysql date time or unixtime format.
_________________
The lifecycle of a noob is complex. Fledgling noobs gestate inside biometric pods. Once a budding noob has matured thru gestation they climb out of their pod, sit down at a PC, ask a bunch of questions that are clearly in the FAQ, The Noob is born
Back to top
View user's profile Send private message Visit poster's website
demond
Revered One


Joined: 12 Jun 2004
Posts: 3073
Location: San Francisco, CA

PostPosted: Sat Aug 06, 2005 12:11 pm    Post subject: Reply with quote

well, the [unixtime] starts on Jan 1st, 1970 Wink
Back to top
View user's profile Send private message Visit poster's website
dusk
Halfop


Joined: 06 Mar 2005
Posts: 91
Location: Belgium

PostPosted: Sat Aug 06, 2005 12:15 pm    Post subject: no windrop Reply with quote

Nope, I'm using this with eggdrop 1.6.17 Smile (5eggs on 3 different servers), and that's just the weird thing about it, it worked fine for 2 months.

thx
Back to top
View user's profile Send private message MSN Messenger
^DooM^
Owner


Joined: 26 Aug 2003
Posts: 772
Location: IronForge

PostPosted: Sat Aug 06, 2005 12:20 pm    Post subject: Reply with quote

Err yeah thats what I meant. Smile I had problems with the date function in php a while back.

Quote:
date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970

_________________
The lifecycle of a noob is complex. Fledgling noobs gestate inside biometric pods. Once a budding noob has matured thru gestation they climb out of their pod, sit down at a PC, ask a bunch of questions that are clearly in the FAQ, The Noob is born
Back to top
View user's profile Send private message Visit poster's website
dusk
Halfop


Joined: 06 Mar 2005
Posts: 91
Location: Belgium

PostPosted: Sat Aug 06, 2005 1:21 pm    Post subject: unixtime Reply with quote

thus.... the [unixtime] should be the problem then? any idea how to change the code so this thing could work properly again?

THX
Back to top
View user's profile Send private message MSN Messenger
demond
Revered One


Joined: 12 Jun 2004
Posts: 3073
Location: San Francisco, CA

PostPosted: Sun Aug 07, 2005 3:54 am    Post subject: Reply with quote

this is an awfully written script but nevertheless its age arithmetic is correct; therefore, the reason for displaying incorrect data could only be incorrect data file, so you should inspect data file entries leading to incorrect results
Back to top
View user's profile Send private message Visit poster's website
dusk
Halfop


Joined: 06 Mar 2005
Posts: 91
Location: Belgium

PostPosted: Sun Aug 07, 2005 7:40 am    Post subject: datafile Reply with quote

I've checked the datafile over and over again, even erased it en tested with some new entries....still the same problem.

Could it be the incr is too slow?

if {$month < $systemmonth} { incr age }
if {$month == $systemmonth} {
if {$day < $systemday} { incr age }

thx
Back to top
View user's profile Send private message MSN Messenger
demond
Revered One


Joined: 12 Jun 2004
Posts: 3073
Location: San Francisco, CA

PostPosted: Sun Aug 07, 2005 11:40 am    Post subject: Reply with quote

nope, it's not too slow hehehe
Back to top
View user's profile Send private message Visit poster's website
dusk
Halfop


Joined: 06 Mar 2005
Posts: 91
Location: Belgium

PostPosted: Sun Aug 07, 2005 11:56 am    Post subject: Problem solved Reply with quote

Finally I'v found the problem.

It seems the problem was that the script removed the zero if u entered for example 19/02/1977 <--- it removed the 0 before the 2 (same for the days) and it seems 2 is recognized in the equasion as GREATER than for example 08 ($systemmonth) ????? Weird.

So I just removed these lines :
Code:

          if {[string index $month 0] == 0} {
         set month [string index $month 1]
          }
          if {[string index $day 0] == 0} {
         set day [string index $day 1]
          }


And put a "0" before all months below 10 in the humanmonth proc at the end of the script.

Works like a charm again, just don't understand why it worked before...?

Thx anyway Smile
Back to top
View user's profile Send private message MSN Messenger
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    egghelp.org community Forum Index -> Archive All times are GMT - 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Forum hosting provided by Reverse.net

Powered by phpBB © 2001, 2005 phpBB Group
subGreen style by ktauber