This is the new home of the egghelp.org community forum.
All data has been migrated (including user logins/passwords) to a new phpBB version.


For more information, see this announcement post. Click the X in the top right-corner of this box to dismiss this message.

Changing quote search output in Quote_Tcl-3.52 by Stigmata

Requests for complete scripts or modifications/fixes for scripts you didn't write. Response not guaranteed, and no thread bumping!
Post Reply
I
Ikaa
Voice
Posts: 7
Joined: Wed Dec 17, 2008 3:46 pm

Changing quote search output in Quote_Tcl-3.52 by Stigmata

Post by Ikaa »

This script does everything I want it to with one exception: Searching. It creates a file and DCC sends it to you, instead of displaying the numbered results in the channel.

In looking at other scripts and trying to determine how to modify the search output for this script, i came to the conclusion I'm way in over my head, and needed some help.

Ideally what I'd like it to do is when it is given the !findquote command and a search string, have it display in the channel the quote numbers that match that string, such as this:

Results found: #4, #6, #32

or

No Results found for search string

Any help or direction on where to find how to make these mods is most appreciated.

Code: Select all

################################################### QUOTE TCL V3.52 BY STIGMATA #######
#
# Quote TCL version 3.52, by stigmata
# Email: stigmata@hvc.rr.com
# IRC: EFNet, [stig] OR [st1gg0r]
# Read the README for more information
# This script contains the flood protection procedures from the BSeen script.
# This script requires alltools.tcl v1.3 (loaded by default)
# 
################################################### QUOTE TCL V3.52 BY STIGMATA #######
#
#
################################################### DEFAULT COMMANDS AND INFO #########
#
# Note: The following commands are all public commands, they are available via message
#       and DCC chat also. With or without the command designation, they will work in
#       private message. File request commands are not available in DCC chat.
#
# !quote(s) <num>
# ### Displays a random quote or the number specified.
# ### Default access: Everyone
#
# !addquote <quote>
# ### This adds quotes to the storage file, quotes can contain any type of character.
# ### Default access: global/channel +o OR +Q globally.
#
# !delquote <num>
# ### Deletes the quote number specified.
# ### Default access: global/channel +o OR +Q globally.
#
# !selquote <num>
# ### Prints out the specified quote number.
# ### Default access: Everyone
#
# !findquote <word>
# ### Searches for the word in the storage file, parses the results to a
# ### text file, and sends the user the results.
# ### Default access: Everyone
#
# !lastquote
# ### Displays the last quote added.
# ### Default access: Everyone
#
# !quotehelp
# ### Sends the user the quote help file. 
# ### Default access: Everyone
#
# !getquotes
# ### Sends the user the quote storage file.
# ### Default access: Everyone
#
# !getscript
# ### Sends the user the quote script.
# ### Default access: Everyone
#
# !quotestats
# ### Shows how many quotes there are and how big the quote storage file is.
# ### Default access: Everyone.
#
# !quoteversion
# ### Displays the quote version and author name. :)
# ### Default access: Everyone
#
################################################### DEFAULT COMMANDS AND INFO #########


################################################### SETTINGS ##########################
#
# Select this to your perferred command prefix, "" is acceptable.
	set qot(cmd) "!"
#
# File name of the storage file for added quotes.
	set qot(file) "quote.txt"
#
# File name of the backup store file for added quotes.
        set qot(backup) "quote.txt.bak"
#
# Access required to read quotes & access help. (Probably don't need
# to change this.)
	set qot(readflag) "-"
#
# Access required to add quotes, "-" is everyone. Note: If a user has any
# of these flags, he/she can add quotes.
	set qot(addflag) "-"
#
# Access required to delete quotes. Note: If a user has any of these flags,
# he/she can delete quotes.
	set qot(delflag) "Qo|m"
#
# This settings is used for flood protection, in the form x:y. Any queries 
# beyond x in y seconds is considered a flood and the user is ignored.
	set qot(flood) 4:15
#
# Switch for ignoring flooders if they violate qot(flood) (1=On, 0=Off)
	set qot(ignore) 1
#
# This is used to set the amount of time a flooder is  ignored (minutes). This
# value is useless if qot(ignore) is set to 0.
	set qot(ignore_time) 5
#
# Access needed to send/recieve quote file.
	set qot(dccflag) "-|-"
#
# Access needed to restore the backed up quote file.
	set qot(mergflag) "Qm|-"
#

################################################### SETTINGS ##########################

#### BINDINGS 

### PUBLIC COMMANDS BINDINGS
## Random quote bindings
bind pub $qot(readflag) [string trim $qot(cmd)]quotes qot_random
bind pub $qot(readflag) [string trim $qot(cmd)]quote qot_random
## Add quote bindings
bind pub $qot(addflag) [string trim $qot(cmd)]addquote qot_addquote
## Delete quote bindings
bind pub $qot(delflag) [string trim $qot(cmd)]delquote qot_del
## Select quote bindings
bind pub $qot(readflag) [string trim $qot(cmd)]selquote qot_sel
## Search quote bindings
bind pub $qot(readflag) [string trim $qot(cmd)]quotefind qot_src
bind pub $qot(readflag) [string trim $qot(cmd)]findquote qot_src
## DCC Send (Quote file & Script package) bindings
bind pub $qot(dccflag) [string trim $qot(cmd)]getquotes qot_get
bind pub $qot(dccflag) [string trim $qot(cmd)]getscript qot_script
## Help bindings
bind pub $qot(readflag) [string trim $qot(cmd)]quotehelp qot_help
bind pub $qot(readflag) [string trim $qot(cmd)]quotecommands qot_help
## Miscellaneous bindings
bind pub $qot(readflag) [string trim $qot(cmd)]quoteversion qot_ver
bind pub $qot(readflag) [string trim $qot(cmd)]totalquotes qot_total
bind pub $qot(readflag) [string trim $qot(cmd)]quotestats qot_total
bind pub $qot(readflag) [string trim $qot(cmd)]lastquote qot_last

### MESSAGE COMMANDS BINDINGS
## Random quote bindings
bind msg $qot(readflag) [string trim $qot(cmd)]quote qot_msgrandom
bind msg $qot(readflag) [string trim $qot(cmd)]quotes qot_msgrandom
bind msg $qot(readflag) quote qot_msgrandom
bind msg $qot(readflag) quotes qot_msgrandom
## Add quote bindings 
bind msg $qot(addflag) [string trim $qot(cmd)]addquote qot_msgadd
bind msg $qot(addflag) addquote qot_msgadd
## Delete quote bindings
bind msg $qot(delflag) [string trim $qot(cmd)]delquote qot_msgdel
bind msg $qot(delflag) delquote qot_msgdel
## Select quote bindings
bind msg $qot(readflag) [string trim $qot(cmd)]selquote qot_msgsel
bind msg $qot(readflag) selquote qot_msgsel
## Search quote bindings
bind msg $qot(readflag) [string trim $qot(cmd)]quotefind qot_msgsrc
bind msg $qot(readflag) [string trim $qot(cmd)]findquote qot_msgsrc
bind msg $qot(readflag) quotefind qot_msgsrc
bind msg $qot(readflag) findquote qot_msgsrc
## DCC Send (Quote file & Script package) bindings
bind msg $qot(dccflag) [string trim $qot(cmd)]getquotes qot_msgget
bind msg $qot(dccflag) [string trim $qot(cmd)]getscript qot_msgscript
bind msg $qot(dccflag) getquotes qot_msgget
bind msg $qot(dccflag) getscript qot_msgscript
## Help bindings
bind msg $qot(readflag) [string trim $qot(cmd)]quotehelp qot_msghelp
bind msg $qot(readflag) [string trim $qot(cmd)]quotecommands qot_msghelp
bind msg $qot(readflag) quotehelp qot_msghelp
bind msg $qot(readflag) quotecommands qot_msghelp
## Miscellaneous bindings
bind msg $qot(readflag) [string trim $qot(cmd)]quoteversion qot_msgver
bind msg $qot(readflag) [string trim $qot(cmd)]totalquotes qot_msgtotal
bind msg $qot(readflag) [string trim $qot(cmd)]quotestats qot_msgtotal
bind msg $qot(readflag) [string trim $qot(cmd)]lastquote qot_msglast
bind msg $qot(readflag) quoteversion qot_msgver
bind msg $qot(readflag) totalquotes qot_msgtotal
bind msg $qot(readflag) quotestats qot_msgtotal
bind msg $qot(readflag) lastquote qot_msglast

### DCC COMMANDS BINDINGS
## Random quote bindings
bind dcc $qot(readflag) quote qot_dccrandom
bind dcc $qot(readflag) quotes qot_dccrandom
## Add quote bindings 
bind dcc $qot(addflag) addquote qot_dccadd
## Delete quote bindings
bind dcc $qot(delflag) delquote qot_dccdel
## Select quote bindings
bind dcc $qot(readflag) selquote qot_dccsel
## Miscellaneous bindings
bind dcc $qot(readflag) quoteversion qot_dccver
bind dcc $qot(readflag) totalquotes qot_dcctotal
bind dcc $qot(readflag) quotestats qot_dcctotal
bind dcc $qot(readflag) lastquote qot_dcclast
bind dcc $qot(mergflag) mergequotes qot_dccmerge

#####################################################################

##### TCL PROCEDURES ################################################

##### MISC TCL [censored] #################################################

set qot(vershort) "3.52"
set qot(script) "scripts/quote_tcl-$qot(vershort).tcl"
set qot(package) "scripts/quote_tcl-$qot(vershort).tar.gz"
putlog "Quote TCL version $qot(vershort) by stigmata loaded. <stigmata@hvc.rr.com>"

proc check_string {text} {
  regsub -all ">" $text "" text
  regsub -all "<" $text "" text
  regsub -all "|" $text "" text
  regsub -all "&" $text "" text

  return $text
} 

proc qot_flood_init {} {
  global qot qot_flood_array ; if {![string match *:* $qot(flood)]} {putcmdlog "Quote TCL: var qot(flood) not set correctly." ; return}
  set qot(flood_num) [lindex [split $qot(flood) :] 0] ; set qot(flood_time) [lindex [split $qot(flood) :] 1] ; set i [expr $qot(flood_num) - 1]
  while {$i >= 0} {set qot_flood_array($i) 0 ; incr i -1 ; }
} ; qot_flood_init

proc qot_flood {nick uhost} {
  global qot qot_flood_array ; if {$qot(flood_num) == 0} {return 0} ; set i [expr $qot(flood_num) - 1]
  while {$i >= 1} {set qot_flood_array($i) $qot_flood_array([expr $i - 1]) ; incr i -1} ; set qot_flood_array(0) [unixtime]
  if {[expr [unixtime] - $qot_flood_array([expr $qot(flood_num) - 1])] <= $qot(flood_time)} {putcmdlog "Quote TCL: Flood detected from $nick. Ignoring for $qot(ignore_time) minutes." ; if {$qot(ignore)} {newignore [maskhost [getchanhost $nick]] Quote-TCL "$nick flooded the quote script." $qot(ignore_time)} ; return 1
  } {return 0}
}

# moretools stuff... reason why they're here is to make the script easier for people to load. from mc.moretools1.2.tcl by MC_8

proc strip:color {ar} {
 set argument ""
 if {![string match *\003* $ar]} {return $ar} ; set i -1 ; set length [string length $ar]
 while {$i < $length} {
  if {[string index $ar $i] == "\003"} {
   set wind 1 ; set pos [expr $i+1]
   while {$wind < 3} {
    if {[string index $ar $pos] <= 9 && [string index $ar $pos] >= 0} {
     incr wind 1 ; incr pos 1} {set wind 3
    }
   }
   if {[string index $ar $pos] == "," && [string index $ar [expr $pos + 1]] <= 9 &&
       [string index $ar [expr $pos + 1]] >= 0} {
    set wind 1 ; incr pos 1
    while {$wind < 3} {
     if {[string index $ar $pos] <= 9 && [string index $ar $pos] >= 0} {
      incr wind 1 ; incr pos 1} {set wind 3
     }
    }
   }
   if {$i == 0} {
    set ar [string range $ar $pos end]
    set length [string length $ar]
   } {
    set ar "[string range $ar 0 [expr $i - 1]][string range $ar $pos end]"
    set length [string length $ar]
   }
   set argument "$argument[string index $ar $i]"
  } {incr i 1}
 }
 set argument $ar
 return $argument
}

proc strip:bold {ar} {
 set argument ""
 if {[string match *\002* $ar]} {
  set i 0
  while {$i <= [string length $ar]} {
   if {![string match \002 [string index $ar $i]]} {
    set argument "$argument[string index $ar $i]"
   } ; incr i 1
  }
 } {set argument $ar}
 return $argument
}

proc strip:uline {ar} {
 set argument ""
 if {[string match *\037* $ar]} {
  set i 0
  while {$i <= [string length $ar]} {
   if {![string match \037 [string index $ar $i]]} {
    set argument "$argument[string index $ar $i]"
   } ; incr i 1
  }
 } {set argument $ar}
 return $argument
}

proc strip:reverse {ar} {
 set argument ""
 if {[string match *\026* $ar]} {
  set i 0
  while {$i <= [string length $ar]} {
   if {![string match \026 [string index $ar $i]]} {
    set argument "$argument[string index $ar $i]"
   } ; incr i 1
  }
 } {set argument $ar}
 return $argument
}

proc strip:all {ar} {
 return [strip:reverse [strip:uline [strip:bold [strip:color $ar]]]]
}

proc bold {} {return \002}
proc reverse {} {return \026}
proc color {} {return \003}
proc underline {} {return \037}

#### PUBLIC COMMANDS PROCEDURESS ######################################

proc qot_random {nick uhost hand chan rest} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    if {![file exists $qot(file)]} {
	putquick "PRIVMSG $chan :Error: No quotes found--file does not exist"
	return
    } else {
    set qot_fd [open $qot(file) r]
    } 
    for {set qot_cnt 0} { ![eof $qot_fd] } { incr qot_cnt } {
	gets $qot_fd qot_list($qot_cnt)
    }
    close $qot_fd
    if {$rest==""} {
    set qot_cnt [expr $qot_cnt - 2]
    set qot_sel $qot_list([set qot_cur [rand [expr $qot_cnt + 1]]])
    putquick "PRIVMSG $chan :Quote [bold][expr $qot_cur + 1][bold] of [bold][expr $qot_cnt + 1]:[bold] $qot_sel"
    } else { 
    if {[string is integer $rest]} {
    set qot_cnt [expr $qot_cnt - 2]
    unset qot_list([expr $qot_cnt + 1])
    if {![info exists qot_list([expr {$rest} - 1])]} {
        putquick "PRIVMSG $chan :Error: that quote does not exist"
        return
    } else {
    set qot_sel $qot_list([expr {$rest} - 1])
    putquick "PRIVMSG $chan :Quote [bold]$rest[bold] of [bold][expr $qot_cnt + 1]:[bold] $qot_sel"
    return }}}
}

proc qot_sel {nick uhost hand chan rest} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    if {![file exists $qot(file)]} {
	putquick "PRIVMSG $chan :Error: No quotes found--file does not exist"
	return
    }
    set qot_fd [open $qot(file) r]
    for {set qot_cnt 0} { ![eof $qot_fd] } { incr qot_cnt 1 } {
	gets $qot_fd qot_list($qot_cnt)
    }
    close $qot_fd
    set qot_cnt [expr $qot_cnt - 2]
    unset qot_list([expr $qot_cnt + 1])
    if {![info exists qot_list([expr {$rest} - 1])]} {
	putquick "PRIVMSG $chan :Error: that quote does not exist"
	return
    } else {
    set qot_sel $qot_list([expr {$rest} - 1])
    putquick "PRIVMSG $chan :Quote [bold]$rest[bold] of [bold][expr $qot_cnt + 1][bold]: $qot_sel"
    return
    }
    return
}

proc qot_src {nick uhost hand chan rest} {
    global qot
    set checked [check_string $rest]
    if {[qot_flood $nick $uhost]} {return 0}
    set qot_src(file) "results-$nick-$rest.txt"
    exec grep -i -n "$checked" $qot(file) > $qot_src(file)
    dccsend $qot_src(file) $nick
    exec rm -f $qot_src(file)
    putquick "PRIVMSG $nick :Search performed, writing to a text file and sending it to you."
    putcmdlog "<<$nick>> !$hand! Searched for a quote in $chan." 
    return 
}

proc qot_addquote {nick uhost hand chan rest} {
    global qot
    set stripped [strip:all $rest]
    set qot_fd [open $qot(file) a+]
    puts $qot_fd $stripped
    close $qot_fd
    putquick "PRIVMSG $chan :Quote has been added to storage file."
    putcmdlog "<<$nick>> !$hand! Added a quote in $chan."
    exec cp "$qot(file)" "$qot(backup)"
    return
}

proc qot_del {nick uhost hand chan rest} {
    global qot
    set delnum $rest
    set type [lindex $rest 0]
    set rest [lrange $rest 1 end]
    if {![file exists $qot(file)]} {
	putquick "PRIVMSG $chan :Error: No quotes found--file does not exist"
	return
    } else {
	set qot_fd [open $qot(file) r]
    }
    for {set qot_cnt 0} { ![eof $qot_fd] } { incr qot_cnt 1 } {
	gets $qot_fd qot_list($qot_cnt)
    }
    close $qot_fd
    set qot_cnt [expr $qot_cnt - 2]
    if {[string is integer $delnum]} {
        set qot_fd [open $qot(file) w]
        for { set i 0 } { $i <= $qot_cnt } { incr i 1 } {
	    if {($qot_list($i) == "") || ($i == [expr $delnum - 1])} {
		putquick "PRIVMSG $chan :Quote [expr $i + 1] deleted"
                putcmdlog "<<$nick>> !$hand! Deleted a quote in $chan."
		continue                
	    } else {
		puts $qot_fd $qot_list($i)
	    }
	}
	close $qot_fd
    } else {
    if {$type == "num"} {
	set qot_fd [open $qot(file) w]
	for { set i 0 } { $i <= $qot_cnt } { incr i 1 } {
	    if {($qot_list($i) == "") || ($i == [expr $rest - 1])} {
		putquick "PRIVMSG $chan :Quote [expr $i + 1] deleted"
                putcmdlog "<<$nick>> !$hand! Deleted a quote in $chan."
		continue
	    } else {
		puts $qot_fd $qot_list($i)
	    }
	}
	close $qot_fd
    }
    return
}}

proc qot_get {nick uhost hand chan args} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    putcmdlog "<<$nick>> !$hand! Requested the quote storage file in $chan"
    putquick "NOTICE $nick :Sending the quote storage file."
    dccsend $qot(file) $nick
    return
}

proc qot_script {nick uhost hand chan args} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    putcmdlog "<<$nick>> !$hand! Requested the quote script package in $chan"
    putquick "NOTICE $nick :Sending the quote_tcl-$qot(vershort).tar.gz package."
    dccsend $qot(package) $nick
    return 
}

proc qot_help {nick uhost hand chan rest} {
    global qot
    set qot(helpfile) "quote_help.txt"
    if {[qot_flood $nick $uhost]} {return 0}
    putquick "NOTICE $nick :Sending the Quote TCL Help file."
    dccsend $qot(helpfile) $nick
    return
}

proc qot_total {nick uhost hand chan rest} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    set qot(byte_size) [file size $qot(file)]
    set qot(kb_size) [expr $qot(byte_size) / 1024]
    if {![file exists $qot(file)]} {
        putchan $chan "Error: No quotes found--file does not exist"
        return
    } else {
    set qot(cnt) [exec grep -c "" $qot(file)]
    putquick "PRIVMSG $chan :[bold]$qot(cnt)[bold] quotes total using [bold]$qot(kb_size)kb[bold]."
}}

proc qot_ver {nick uhost hand chan rest} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    putquick "PRIVMSG $chan :Quote TCL[bold] v$qot(vershort)[bold] by stigmata.[bold]"
}

proc qot_last {nick uhost hand chan arg} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    if {![file exists $qot(file)]} {
        putchan $chan "Error: No quotes found--file does not exist"
        return
    } else {
    set qot_fd [open $qot(file) r]
    }
    for {set qot_cnt 0} { ![eof $qot_fd] } { incr qot_cnt } {
        gets $qot_fd qot_list($qot_cnt)
    }
    close $qot_fd
    set qot_cnt [expr $qot_cnt - 2]    
    set qot(last) $qot_list([expr $qot_cnt])
    putquick "PRIVMSG $chan :[bold]Last Quote ([expr $qot_cnt + 1]):[bold] $qot(last)"
    return 
}

#### MESSAGE COMMANDS PROCEDURES #####

proc qot_msgrandom {nick uhost hand rest} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    if {![file exists $qot(file)]} {
	putquick "PRIVMSG $nick :Error: No quotes found--file does not exist"
	return
    } else {
      set qot_fd [open $qot(file) r]
    } 
    for {set qot_cnt 0} { ![eof $qot_fd] } { incr qot_cnt } {
	gets $qot_fd qot_list($qot_cnt)
    }
    close $qot_fd
    if {$rest==""} {
      set qot_cnt [expr $qot_cnt - 2]
      set qot_sel $qot_list([set qot_cur [rand [expr $qot_cnt + 1]]])
        putquick "PRIVMSG $nick :Quote [bold][expr $qot_cur + 1][bold] of [bold][expr $qot_cnt + 1]:[bold] $qot_sel"
    } else { 
      if {[string is integer $rest]} {
        set qot_cnt [expr $qot_cnt - 2]
        unset qot_list([expr $qot_cnt + 1])
      if {![info exists qot_list([expr {$rest} - 1])]} {
        putquick "PRIVMSG $nick :Error: that quote does not exist"
        return
    } else {
        set qot_sel $qot_list([expr {$rest} - 1])
           putquick "PRIVMSG $nick :Quote [bold]$rest[bold] of [bold][expr $qot_cnt + 1]:[bold] $qot_sel"
    return }}}
}

proc qot_msgsel {nick uhost hand rest} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    if {![file exists $qot(file)]} {
	putquick "PRIVMSG $nick :Error: No quotes found--file does not exist"
	return
    }
    set qot_fd [open $qot(file) r]
    for {set qot_cnt 0} { ![eof $qot_fd] } { incr qot_cnt 1 } {
	gets $qot_fd qot_list($qot_cnt)
    }
    close $qot_fd
    set qot_cnt [expr $qot_cnt - 2]
    unset qot_list([expr $qot_cnt + 1])
    if {![info exists qot_list([expr {$rest} - 1])]} {
	putquick "PRIVMSG $nick :Error: that quote does not exist"
	return
    } else {
    set qot_sel $qot_list([expr {$rest} - 1])
    putquick "PRIVMSG $nick :Quote [bold]$rest[bold of [bold][expr $qot_cnt + 1][bold]: $qot_sel"
    return
    }
    return
}

proc qot_msgsrc {nick uhost hand arg} {
    global qot
    set checked [check_string $arg]
    if {[qot_flood $nick $uhost]} {return 0}
    set qot_src(file) "results-$nick-$arg.txt"
    exec grep -i -n "$checked" $qot(file) > $qot_src(file)
    if {![file exists $qot_src(file)]} {
       putquick "PRIVMSG $nick :Error, no quotes found. Please try again."
    }
    dccsend $qot_src(file) $nick
    exec rm -f $qot_src(file)
    putquick "PRIVMSG $nick :Search performed, writing to a text file and sending it to you."
    putcmdlog "<<$nick>> !$hand! Searched for a quote via message."
    return
}

proc qot_msgadd {nick uhost hand arg} {
    global qot
    set stripped [strip:all $arg]
    set qot_fd [open $qot(file) a+]
    puts $qot_fd $stripped
    close $qot_fd
    putquick "PRIVMSG $nick :Quote has been added to storage file."
    putcmdlog "<<$nick>> !$hand! Added a quote via message."
    exec cp $qot(file) $qot(backup)
    return
}

proc qot_msgdel {nick uhost hand rest} {
    global qot
    set delnum $rest
    set type [lindex $rest 0]
    set rest [lrange $rest 1 end]
    if {![file exists $qot(file)]} {
	putquick "PRIVMSG $nick :Error: No quotes found--file does not exist"
	return
    } else {
	set qot_fd [open $qot(file) r]
    }
    for {set qot_cnt 0} { ![eof $qot_fd] } { incr qot_cnt 1 } {
	gets $qot_fd qot_list($qot_cnt)
    }
    close $qot_fd
    set qot_cnt [expr $qot_cnt - 2]
    if {[string is integer $delnum]} {
        set qot_fd [open $qot(file) w]
        for { set i 0 } { $i <= $qot_cnt } { incr i 1 } {
            if {($qot_list($i) == "") || ($i == [expr $delnum - 1])} {
                putquick "PRIVMSG $nick :Quote [expr $i + 1] deleted"
                putcmdlog "<<$nick>> !$hand! Deleted a quote via essage."
                continue
            } else {
                puts $qot_fd $qot_list($i)
            }
        }
        close $qot_fd
    } else {
    if {$type == "num"} {
	set qot_fd [open $qot(file) w]
	for { set i 0 } { $i <= $qot_cnt } { incr i 1 } {
	    if {($qot_list($i) == "") || ($i == [expr $rest - 1])} {
                putcmdlog "<<$nick>> !$hand! Deleted a quote via message."
		putquick "PRIVMSG $nick :Quote [expr $i + 1] deleted"
		continue
	    } else {
		puts $qot_fd $qot_list($i)
	    }
	}
	close $qot_fd
        }
        return
}}

proc qot_msgget {nick uhost hand arg} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    putcmdlog "<<$nick>> !$hand! Requested the quote storage file via message."
    putquick "PRIVMSG $nick :Sending the quotes storage file."
    dccsend $qot(file) $nick
    return
}

proc qot_msgscript {nick uhost hand arg} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    putcmdlog "<<$nick>> !$hand! Requested the quote script package via message."
    putquick "PRIVMSG $nick :Sending the quote_tcl-$qot(vershort).tar.gz package."
    dccsend $qot(package) $nick
    return 
}

proc qot_msghelp {nick uhost hand chan rest} {
    global qot
    set qot(helpfile) "quote_help.txt"
    if {[qot_flood $nick $uhost]} {return 0}
    putcmdlog "<<$nick>> !$hand! Requested the quote help file via message."
    putquick "PRIVMSG $nick :Sending the Quote TCL Help file."
    dccsend $qot(helpfile) $nick
    return
}

proc qot_msgtotal {nick uhost hand arg} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    set qot(byte_size) [file size $qot(file)]
    set qot(kb_size) [expr $qot(byte_size) / 1024]
    if {![file exists $qot(file)]} {
        putquick "PRIVMSG $nick :Error: No quotes found--file does not exist"
        return
    } else {
    set qot(cnt) [exec grep -c "" $qot(file)]
    putquick "PRIVMSG $nick :[bold]$qot(cnt)[bold quotes total using [bold]$qot(kb_size)kb[bold]."
}}

proc qot_msgver {nick uhost hand arg} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    putquick "PRIVMSG $nick :Quote TCL[bold] v$qot(vershort)[bold] by stigmata.[bold]"
}

proc qot_msglast {nick uhost hand arg} {
    global qot
    if {[qot_flood $nick $uhost]} {return 0}
    if {![file exists $qot(file)]} {
        putquick "PRIVMSG $nick :Error: No quotes found--file does not exist"
        return
    } else {
    set qot_fd [open $qot(file) r]
    }
    for {set qot_cnt 0} { ![eof $qot_fd] } { incr qot_cnt } {
        gets $qot_fd qot_list($qot_cnt)
    }
    close $qot_fd
    set qot_cnt [expr $qot_cnt - 2]    
    set qot(last) $qot_list([expr $qot_cnt])
    putquick "PRIVMSG $nick :[bold]Last Quote ([expr $qot_cnt + 1]):[bold] $qot(last)"
    return
}

#### DCC COMMANDS PROCEDURES ####

proc qot_dccrandom {hand idx rest} {
    global qot
    if {![file exists $qot(file)]} {
        putidx $idx "Error: No quotes found--file does not exist"
    return 
    } else {
    set qot_fd [open $qot(file) r]
    }
    for {set qot_cnt 0} { ![eof $qot_fd] } { incr qot_cnt } {
        gets $qot_fd qot_list($qot_cnt)
    }
    close $qot_fd
    if {$rest==""} {
    set qot_cnt [expr $qot_cnt -2]
    set qot_sel $qot_list([set qot_cur [rand [expr $qot_cnt + 1]]])
    putcmdlog "#$hand# quotes"
    putidx $idx "Quote [bold][expr $qot_cur + 1][bold] of [bold][expr $qot_cnt + 1]:[bold] $qot_sel"
    } else { 
    if {[string is integer $rest]} {
    set qot_cnt [expr $qot_cnt - 2]
    unset qot_list([expr $qot_cnt + 1])
    if {![info exists qot_list([expr {$rest} - 1])]} {
        putidx $idx "Error: that quote does not exist"
        return
    } else {
    set qot_sel $qot_list([expr {$rest} - 1])
    putcmdlog "#$hand# quote $rest"
    putidx $idx "Quote [bold]$rest[bold] of [bold][expr $qot_cnt + 1]:[bold] $qot_sel"
    return}}}
}

proc qot_dccadd {hand idx rest} {
    global qot
    set stripped [strip:all $rest]
    putcmdlog "#$hand# addquote $rest"
    set qot_fd [open $qot(file) a+]
    puts $qot_fd $stripped
    close $qot_fd
    putidx $idx "Quote added to storage file."
    exec cp $qot(file) $qot(backup)
    return
}

proc qot_dccdel {hand idx rest} {
    global qot
    set delnum $rest
    set type [lindex $rest 0]
    set rest [lrange $rest 1 end]
    if {![file exists $qot(file)]} {
	putidx $idx "Error: No quotes found--file does not exist"
	return
    } else {
	set qot_fd [open $qot(file) r]
    }
    for {set qot_cnt 0} { ![eof $qot_fd] } { incr qot_cnt 1 } {
	gets $qot_fd qot_list($qot_cnt)
    }
    close $qot_fd
    set qot_cnt [expr $qot_cnt - 2]
        if {[string is integer $delnum]} {
        set qot_fd [open $qot(file) w]
        for { set i 0 } { $i <= $qot_cnt } { incr i 1 } {
            if {($qot_list($i) == "") || ($i == [expr $delnum - 1])} {
                putidx $idx "Quote [expr $i + 1] deleted"
                putcmdlog "#$hand# delquote $rest"
                continue
            } else {
                puts $qot_fd $qot_list($i)
            }
        }
        close $qot_fd
    } else {
    if {$type == "num"} {
	set qot_fd [open $qot(file) w]
	for { set i 0 } { $i <= $qot_cnt } { incr i 1 } {
	    if {($qot_list($i) == "") || ($i == [expr $rest - 1])} {
                putcmdlog "#$hand# delquote $rest"
		putidx $idx "Quote [expr $i + 1] deleted"
		continue
	    } else {
		puts $qot_fd $qot_list($i)
	    }
	}
	close $qot_fd
    }
    return
}}

proc qot_dccsel {hand idx rest} {
    global qot
    if {![file exists $qot(file)]} {
        putidx $idx "Error: No quotes found--file does not exist"
        return
    }
    set qot_fd [open $qot(file) r]
    for {set qot_cnt 0} { ![eof $qot_fd] } { incr qot_cnt 1 } {
        gets $qot_fd qot_list($qot_cnt)
    }
    close $qot_fd
    set qot_cnt [expr $qot_cnt - 2]
    unset qot_list([expr $qot_cnt + 1])
    if {![info exists qot_list([expr {$rest} - 1])]} {
        putidx $idx "Error: that quote does not exist"
        return
    } else {
    set qot_sel $qot_list([expr {$rest} - 1])
    putcmdlog "#$hand# selquote $rest"
    putidx $idx "Quote [bold]$rest[bold] of [bold][expr $qot_cnt + 1][bold]: $qot_sel"
    return
    }
    return
}

proc qot_dcctotal {hand idx arg} {
    global qot
    set qot(byte_size) [file size $qot(file)]
    set qot(kb_size) [expr $qot(byte_size) / 1024]
    putcmdlog "#$hand# totalquotes"
    if {![file exists $qot(file)]} {
        putidx $idx "Error: No quotes found--file does not exist"
        return
    } else {
    set qot(cnt) [exec grep -c "" $qot(file)]
    putidx $idx "[bold]$qot(cnt)[bold quotes total using [bold]$qot(kb_size)kb[bold]."
}}

proc qot_dccver {hand idx arg} {
    global qot
    putcmdlog "#$hand# quoteversion"
    putidx $idx "Quote TCL[bold] v$qot(vershort)[bold] by stigmata.[bold]"
}

proc qot_dcclast {hand idx arg} {
    global qot
    putcmdlog "#$hand# lastquote"
    if {![file exists $qot(file)]} {
        putidx $idx "Error: No quotes found--file does not exist"
        return
    } else {
    set qot_fd [open $qot(file) r]
    }
    for {set qot_cnt 0} { ![eof $qot_fd] } { incr qot_cnt } {
        gets $qot_fd qot_list($qot_cnt)
    }
    close $qot_fd
    set qot_cnt [expr $qot_cnt - 2]
    set qot(last) $qot_list([expr $qot_cnt])
    putidx $idx "[bold]Last Quote ([expr $qot_cnt + 1]):[bold] $qot(last)"
    return
}

proc qot_dccmerge {hand idx arg} {
    global qot
    putcmdlog "#$hand# mergequotes"
    exec cp "$qot(backup)" "$qot(file)"
    putidx $idx "Backup quotes storage file restored successfully."
    return
}
Post Reply