<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-gb">
	<link rel="self" type="application/atom+xml" href="https://forum.eggheads.org/app.php/feed/topic/17868" />

	<title>egghelp/eggheads community</title>
	<subtitle>Discussion of eggdrop bots, shell accounts and tcl scripts.</subtitle>
	<link href="https://forum.eggheads.org/index.php" />
	<updated>2010-07-15T13:59:28-04:00</updated>

	<author><name><![CDATA[egghelp/eggheads community]]></name></author>
	<id>https://forum.eggheads.org/app.php/feed/topic/17868</id>

		<entry>
		<author><name><![CDATA[Football]]></name></author>
		<updated>2010-07-15T13:59:28-04:00</updated>

		<published>2010-07-15T13:59:28-04:00</published>
		<id>https://forum.eggheads.org/viewtopic.php?p=93551#p93551</id>
		<link href="https://forum.eggheads.org/viewtopic.php?p=93551#p93551"/>
		<title type="html"><![CDATA[advert.tcl]]></title>

		
		<content type="html" xml:base="https://forum.eggheads.org/viewtopic.php?p=93551#p93551"><![CDATA[
Can someone edit this script so:<br>A. instead of public commands it can be controlled through private<br>B. Add a feature where you can determine if a message is permanent to temporary and if its temporary when will it auto delete itself from the moment you added it (like if you added it now, you can ask it to auto delete itself within 24 hours)<br>C. remove the +m -m part?<br><div class="codebox"><p>Code: </p><pre><code>    #                           #       +------------------------------------------------------+    #       | © Christian 'chris' Hopf &lt;mail@dev.christianhopf.de&gt; |    #       +------------------------------------------------------+    #                                                                         #              #           developer:  Christian 'chris' Hopf    #           system:     eggdrop v1.6.18 - tcl/tk v.8.5a2    #           product:    advert script    #           version:    1.4    #                             #           contact:    mail@dev.christianhopf.de    #           irc:        #chris at QuakeNet    #           web:        www.christianhopf.de    #    # advert script v1.4    # copyright (c) 2006 Christian 'chris' Hopf    # This program is free software; you can redistribute it and/or modify    # it under the terms of the GNU General Public License as published by    # the Free Software Foundation; either version 2 of the License, or    # (at your option) any later version.    # This program is distributed in the hope that it will be useful,    # but WITHOUT ANY WARRANTY; without even the implied warranty of    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    # GNU General Public License for more details.    # You should have received a copy of the GNU General Public License    # along with this program; if not, write to the Free Software    # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA    #    #    # changelog    #    #   02.12.2005 - v1.0 - release    #   03.12.2005 - v1.1/v1.2 - fix:    #                 - kills the timer, without disabling status    #                 - small nosense bugs fixed    #                 - bot reset modes correctly    #   11.04.2006 - v1.3 - fix:    #                 - added /msg commands    #                 - script didn't automatically started after bot restart    #                 - fixed some problems with chanmodes etc..    #                add:    #                 - new triggers (like NULL (no trigger, only command))    #   27.04.2006 - v1.4 - fix:    #                 - help doens't work because of stupid mistake ;)    #    # short readme    #   after setting up your eggdrop, you can get a list of all commands with     #   &lt;botnick&gt; help     #   or    #   !help (only if u havn't change anything)    #        # --- namespace ::advert    namespace eval ::advert {                   # --- namespace variable         namespace eval variable {                # string variable default trigger [ no change need ]        variable trigger "!"                # string variable keyword [ need for /msg ]        variable keyword "advert"                # integer variable timer (must be greater than 15)                      variable timer 30                # string variable flag        variable flag "n|n"                # string variable database        variable database ".advert.db"                       # {{{ NOW don't change anything, if you aren't 100% sure what you are doing }}}        # {{{ NOW don't change anything, if you aren't 100% sure what you are doing }}}        # {{{ NOW don't change anything, if you aren't 100% sure what you are doing }}}        # {{{ NOW don't change anything, if you aren't 100% sure what you are doing }}}                 # initializes user defined string        setudef flag advert-status        setudef int advert-timer        setudef int advert-id                # string variable author        variable author "2006 Christian 'chris' Hopf \002(\002#chris - www.christianhopf.de\002)\002"                # string variable version        variable version "v1.4"            }                  if { $::advert::variable::timer &lt; 15 } {         set ::advert::variable::timer 15      }            if {![file exists $::advert::variable::database]} {        if { [catch { set database [open $::advert::variable::database "w"] } error] } {          die "can't create file &lt;:( \[$::advert::variable::database\]"        }                puts -nonewline $database ""        close $database      }                                  # binds      bind PUBM -|- {*} ::advert::pubm      bind MSGM -|- {*} ::advert::msgm            # - void proc pubm {bind PUBM}      proc pubm { nickname hostname handle channel arguments } {          ::advert::irc::parse $nickname $hostname $handle $arguments $channel "pubm"      }            # - void proc msgm {bind MSGM}      proc msgm { nickname hostname handle arguments } {          ::advert::irc::parse $nickname $hostname $handle $arguments [lindex [split $arguments] 2] "msgm"      }                        # namespace eval irc      namespace eval irc {                   # - void proc parse        proc parse { nickname hostname handle arguments channel mode} {            global botnick lastcommand channelcommand lastnickname lasthandle lastchannel lasttrigger lastucommand                        set utrigger [getuser $handle XTRA advert-trigger]            set temp $channel                if { $mode == "pubm" } {              if {[llength $utrigger] &lt; 1} {                set utrigger [join [string trim $::advert::variable::trigger]]              }                  if { [string equal -nocase $botnick [lindex [split $arguments] 0]]} {                set command [string tolower [lindex [split $arguments] 1]]                set arguments [join [lrange [split $arguments] 2 end]]                set trigger "$botnick $command"                } elseif { $utrigger == "NULL" }  {                set command [string tolower [lindex [split $arguments] 0]]                set arguments [join [lrange [split $arguments] 1 end]]                                set trigger "$command"                            } elseif { [string equal -nocase [string index [lindex [split $arguments] 0] 0] $utrigger] } {                set command [string range [string tolower [lindex [split $arguments] 0]] 1 end]                set arguments [join [lrange [split $arguments] 1 end]]                  set trigger "${utrigger}$command"              } else {                return              }                            if {[string index [lindex [split $arguments] 0] 0] == "#" &amp;&amp; [validchan [lindex [split $arguments] 0]]} {                set channel [lindex [split $arguments] 0]                set arguments [join [lrange [split $arguments] 1 end]]              }                        } elseif { $mode == "msgm" } {              if { [string equal -nocase [lindex [split $arguments] 0] ${::advert::variable::keyword}] } {                set command [lindex [split $arguments] 1]                set channel [lindex [split $arguments] 2]                              set arguments [join [lrange [split $arguments] 3 end]]                set trigger "$::advert::variable::keyword $command"                        } else {                return              }                          } else {              return            }                        if { ![matchattr $handle $::advert::variable::flag $temp] } {              return            } elseif {![info exists trigger] || [llength $trigger] &lt; 1} {              return            } elseif {(![info exists command] || [llength $command] &lt; 1)} {              return            } elseif { [info proc ::advert::irc::command:$command] == ""  } {              return            } elseif { ![regexp -- {^#(.+)$} $channel] || ![validchan $channel] } {              putquick "PRIVMSG $nickname :\002(\002advert\002)\002 you forgot the channel parameter"                            return            }                        set channelcommand "$temp"            set lastcommand  "$trigger"            set lastucommand "$command"            set lastnickname "$nickname"            set lasthandle "$handle"            set lastchannel "$channel"            set lasttrigger [join [lrange $trigger 0 end-1]]                        ::advert::irc::command:$command $nickname $hostname $handle $channel $arguments        }                                # - void proc add        proc command:add { nickname hostname handle channel arguments } {            global lastcommand                        set trigger [::advert::utilities::trigger $handle]                        if { [llength $arguments] &lt; 1 } {              putquick "NOTICE $nickname :\002(\002advert\002)\002 synta\037x\037\002:\002 $lastcommand \037?#channel?\037 &lt;message&gt;"                return            }              if {[::advert::utilities::exists $channel $arguments]} {              putquick "NOTICE $nickname :\002(\002advert\002)\002 message does already appear in the database."            } elseif {[::advert::utilities::add $channel $arguments]} {              putquick "NOTICE $nickname :\002(\002advert\002)\002 message successfully added to the database."                            if {[llength [::advert::utilities::create:list $channel]] == 1} {                putquick "NOTICE $nickname :\002(\002advert\002)\002 to start the script timer please use ${trigger}status \037enable\037"                                channel set $channel advert-id 1              }                                       } else {              putquick "NOTICE $nickname :\002(\002advert\002)\002 error while adding channel message to the database."            }        }                # - void proc remove        proc command:remove { nickname hostname handle channel arguments } {            global lastcommand                        set trigger [::advert::utilities::trigger $handle]                         if { [llength $arguments] &lt; 1 } {              putquick "NOTICE $nickname :\002(\002advert\002)\002 synta\037x\037\002:\002 $lastcommand \037?#channel?\037 &lt;message&gt;"                return            }                                     if {![::advert::utilities::exists $channel $arguments]} {              putquick "NOTICE $nickname :\002(\002advert\002)\002 message doesn't appear in the database."            } elseif {[::advert::utilities::remove $channel $arguments]} {              putquick "NOTICE $nickname :\002(\002advert\002)\002 message successfully removed from the database."                            if {[expr [llength [::advert::utilities::create:list $channel]] + 1] == [set max [channel get $channel advert-id]]} {                 channel set $channel advert-id 1              }                            if {[llength [::advert::utilities::create:list $channel]] == 0 &amp;&amp; [timerexists [list ::advert::utilities::display $channel]] != ""} {                  killtimer [timerexists [list ::advert::utilities::display $channel]]                  channel set $channel -advert-status                                    putquick "NOTICE $nickname :\002(\002advert\002)\002 advert script turned \0034off\003, because no messages are in the database"              }                                      } else {              putquick "NOTICE $nickname :\002(\002advert\002)\002 error while removing channel message from the database."            }        }                # - void proc status        proc command:status { nickname hostname handle channel arguments } {                    global lastcommand            set trigger [::advert::utilities::trigger $handle]                        if { [llength $arguments] &lt; 1 } {              putquick "NOTICE $nickname :\002(\002advert\002)\002 synta\037x\037\002:\002 $lastcommand \037?#channel?\037 \037enable\037|\037disable\037"                putquick "NOTICE $nickname :\002(\002advert\002)\002 currently advert script is [expr {([channel get $channel "advert-status"]) ? "\0033enabled\003" : "\0034disabled\003"}] "                            return            }                                  if { [llength [::advert::utilities::create:list $channel]] == 0 &amp;&amp; [string tolower $arguments] == "enable" } {              putquick "NOTICE $nickname :\002(\002advert\002)\002 warnin\037g\037\002:\002 can't start script, because no messages are in the database"                            return            }                        if {[string tolower $arguments] == "enable" || [string tolower $arguments] == "disable"} {              channel set $channel [expr {([string equal -nocase enable $arguments]) ? "+" : "-"}]advert-status                                 putquick "NOTICE $nickname :\002(\002advert\002)\002 advert script is now [expr {([channel get $channel "advert-status"]) ? "\0033enabled\003" : "\0034disabled\003"}] "            }                        ::advert::utilities::create:timer $channel                 }                          # - void proc help        proc command:help { nickname hostname handle channel arguments } {             ::advert::irc::command:userhelp $nickname $hostname $handle $channel $arguments        }                # - void proc showcommands        proc command:showcommands { nickname hostname handle channel arguments } {             ::advert::irc::command:userhelp $nickname $hostname $handle $channel $arguments        }                        # - void proc userhelp        proc command:userhelp { nickname hostname handle channel arguments } {                        set trigger [::advert::utilities::trigger $handle]                      putquick "NOTICE $nickname :\002(\002advert\002)\002 \037help overview\002\037:\002"                           putquick "NOTICE $nickname :\002(\002advert\002)\002 ${trigger}status \037?channel?\037 &lt;enable/disable&gt;"            putquick "NOTICE $nickname :\002(\002advert\002)\002 ${trigger}add \037?channel?\037 &lt;message&gt;"            putquick "NOTICE $nickname :\002(\002advert\002)\002 ${trigger}remove \037?channel?\037 &lt;#id/message&gt;"            putquick "NOTICE $nickname :\002(\002advert\002)\002 ${trigger}timer \037?channel?\037 &lt;minutes&gt;"            putquick "NOTICE $nickname :\002(\002advert\002)\002 ${trigger}list \037?channel?\037"            putquick "NOTICE $nickname :\002(\002advert\002)\002 ${trigger}trigger \037?#id?\037 \002(\002personal trigger, not global trigger\002)\002"            putquick "NOTICE $nickname :\002(\002advert\002)\002 ${trigger}version \037?channel?\037"                   }                # - void proc trigger        proc command:trigger { nickname hostname handle channel arguments } {             global botnick botname lastcommand            set trigger [::advert::utilities::trigger $handle]              array set triggers {              "1" {$} "2" {!} "3" {?} "4" {.} "5" {-}              "6" {²} "7" {%} "8" {&amp;} "9" {*} "10" {:}              "11" {§} "12" {°} "13" {^} "14" {NULL}            }                             if { [llength $arguments] &lt; 1 } {              putquick "NOTICE $nickname :\002(\002advert\002)\002 synta\037x\037\002:\002 $lastcommand \037?#id?\037"               putquick "NOTICE $nickname :\002(\002advert\002)\002 curren\037t\037\002:\002 $trigger"              set list ""              set id   0                            while {$id &lt; 10} {                incr id 1                lappend list "#$id ($triggers($id))"              }                            putquick "NOTICE $nickname :\002(\002advert\002)\002 available triggers are:"              putquick "NOTICE $nickname :[join $list ", "]"                            return            }                                     if { [string range $arguments 1 2] &lt; 15 &amp;&amp; [string range $arguments 1 2] &gt; 0 } {            setuser $handle XTRA advert-trigger $triggers([string range $arguments 1 2])            putquick "NOTICE $nickname :\002(\002advert\002)\002 your personal trigger is now: [getuser $handle XTRA advert-trigger]"          } else {            putquick "NOTICE $nickname :\002(\002advert\002)\002 synta\037x\037\002:\002 $lastcommand \037?\002#\002id?\037"          }        }                        # - void proc timer        proc command:timer { nickname hostname handle channel arguments } {                global lastcommand            set trigger [::advert::utilities::trigger $handle]              if { [llength $arguments] &lt; 1 } {              putquick "NOTICE $nickname :\002(\002advert\002)\002 synta\037x\037\002:\002 $lastcommand \037?channel?\037 &lt;minutes&gt;"                putquick "NOTICE $nickname :\002(\002advert\002)\002 curren\037t\037\002:\002 [channel get $channel advert-timer]"                  return            }                        if {![isnumber $arguments]} {              putquick "NOTICE $nickname :\002(\002advert\002)\002 erro\037r\037\002:\002 please enter a valid timer number"               } elseif { $arguments &lt; 15 } {              putquick "NOTICE $nickname :\002(\002advert\002)\002 erro\037r\037\002:\002 timer number must be greater than 14 minutes."               } elseif {[channel set $channel advert-timer $arguments] == ""} {              putquick "NOTICE $nickname :\002(\002advert\002)\002 inf\037o\037\002:\002 timer successfully set to \"[channel get $channel advert-timer]\""               } else {              putquick "NOTICE $nickname :\002(\002advert\002)\002 error while setting timer."            }        }                   # - void proc list        proc command:list { nickname hostname handle channel arguments } {                      set list ""            set count [llength [::advert::utilities::create:list $channel]]                        if { $count == "1" } {              putquick "NOTICE $nickname :\002(\002advert\002)\002 $count message is added on my database\002:\002"            } else {              putquick "NOTICE $nickname :\002(\002advert\002)\002 $count messages are added on my database\002:\002"            }                        set number 1                        foreach messages [::advert::utilities::create:list $channel] {                              putquick "NOTICE $nickname :\002(\002advert\002)\002 \002\[\002#${number}\002\]\002 [join $messages]"                            incr number            }                        unset number          }                          # - void proc version        proc command:version { nickname hostname handle channel arguments } {                        if {[info exists ::advert(protection_v)] &amp;&amp; [expr [unixtime] - $::advert(protection_v)] &lt; 30} {               return            }                      putquick "PRIVMSG $channel :\001ACTION is running the advert script $::advert::variable::version \002(\002c\002)\002 $::advert::variable::author\001"            set ::advert(protection_v) [unixtime]                }      }                  # namespace eval utilities      namespace eval utilities {                # - void proc exists        proc exists { channel message } {          if {[catch { set database [open $::advert::variable::database "r"] } error]} {             return 0          }                    set number 1                    while {![eof $database]} {            if {[set line [gets $database]] != ""} {              if { [lindex [split $line] 0] != $channel } {                 continue              }                            if {![isnumber [string range [join $message] 1 end]]} {                if {[lindex [split $line] 0] == "$channel" &amp;&amp; [lindex [split $line] 1] == "[decrypt www.christianhopf.de $message]"} {                  close $database                                    return 1                }              } else {                if {[lindex [split $line] 0] == "$channel" &amp;&amp; $number == [string range [join $message] 1 end]} {                  close $database                                    return 1                }              }            }            incr number          }                        close $database          return 0        }                # - void proc add        proc add { channel message } {          if {[catch { set database [open $::advert::variable::database "a"] } error]} {             return 0          }                    puts $database "$channel [encrypt www.christianhopf.de $message]"          close $database          return 1        }                        # - void proc remove        proc remove { channel message } {          if {[catch { set database [open $::advert::variable::database "r"] } error]} {             return 0          }                    set refill ""          set number 1                    while {![eof $database]} {            if {[set line [gets $database]] != ""} {              if {[lindex [split $line] 0] == "$channel"} {                if {[lindex [split $line] 1] == "[decrypt www.christianhopf.de $message]" || ([isnumber [string range [join $message] 1 end]] &amp;&amp; $number == [string range [join $message] 1 end])} {                   incr number                                    continue                }                                incr number;              }                            lappend refill $line            }          }                    close $database          set database [open $::advert::variable::database "w"]                    foreach data_refill $refill {            puts $database $data_refill          }                    close $database          return 1        }                          # - void proc create:list        proc create:list { channel } {          set data ""          set database [open $::advert::variable::database "r"]                    while {![eof $database]} {            if {[set line [gets $database]] != ""} {              if { [lindex [split $line] 0] == "$channel" } {                lappend data "[decrypt www.christianhopf.de [join [lrange [split $line] 1 end]]]"              }            }          }                    close $database          return $data        }                # - void proc create:timer          proc create:timer { channel } {          if {[channel get $channel advert-status]} {            if {[set timer [channel get $channel advert-timer]] &gt; 14} {              timer $timer [list ::advert::utilities::display $channel]            } else {              channel set $channel advert-timer $::advert::variable::timer                                    timer $::advert::variable::timer [list ::advert::utilities::display $channel]            }                     } else {            if {[timerexists [list ::advert::utilities::display $channel]] != ""} {               killtimer [timerexists [list ::advert::utilities::display $channel]]            }          }           }                # - void proc trigger {required string handle}        proc trigger { handle } {          set utrigger [getuser $handle XTRA advert-trigger]                    if {[llength $utrigger] &lt; 1 || ![validuser $handle]} {            set utrigger [join [string trim $::advert::variable::trigger]]          }                               return $utrigger                }                           # - void proc display        proc display { channel } {          set data [::advert::utilities::create:list $channel]          set maxmessageid [llength $data]          set messageid [channel get $channel advert-id]          set number 1          foreach message [::advert::utilities::create:list $channel] {                            if { $number == $messageid } {                            set modes ""              set remodes ""                            if { [string match *c* [lindex [split [getchanmode $channel]] 0]] } {                append modes "-c"                append remodes "+c"              }                            if { ![string match *m* [lindex [split [getchanmode $channel]] 0]] } {                 append modes "+m"                append remodes "-m"               }                            if { [string match "*\003*" $message] || [string match "*\002*" $message] } {                set iscolored 1              }                           if { $modes != "" &amp;&amp; [botisop $channel] } {                putquick "MODE $channel $modes"                utimer 2 [list putquick "MODE $channel $remodes"]              } elseif { [info exists iscolored] &amp;&amp; ![botisop $channel] &amp;&amp; [string match "*c*" $modes]} {                set message [stripcodes rcub $message]              }                            putquick "PRIVMSG $channel :[join $message]"                            if { [timerexists [list ::advert::utilities::display $channel]] == "" } {                timer [channel get $channel advert-timer] [list ::advert::utilities::display $channel]              }                            if { $number == $maxmessageid } {                 channel set $channel advert-id 1              } else {                channel set $channel advert-id [expr $messageid + 1]              }            }                        incr number          }        }      }           utimer 10 {        foreach start_channel [channels] {          if {![channel get $start_channel advert-status] || [timerexists [list ::advert::utilities::display $start_channel]] != ""} {             continue          }                  if {[llength [::advert::utilities::create:list $start_channel]] == 0} {             channel set $start_channel -advert-status                        continue          }                  ::advert::utilities::create:timer $start_channel               }      }                # log      putlog "advert version &lt;${::advert::variable::version}&gt; (c) $::advert::variable::author successfully successfully loaded ..."            }</code></pre></div><p>Statistics: Posted by <a href="https://forum.eggheads.org/memberlist.php?mode=viewprofile&amp;u=10393">Football</a> — Thu Jul 15, 2010 1:59 pm</p><hr />
]]></content>
	</entry>
	</feed>
