View previous topic :: View next topic |
Author |
Message |
sauk Voice
Joined: 05 Jul 2020 Posts: 16
|
Posted: Thu May 19, 2022 5:44 pm Post subject: Uptime contest |
|
|
Hello everybody.
I have failed in my internet search for possible old scripts from uptime contest (for example on Quakenet).
And I come here to ask, first, if anyone has one already scripted and published, and if not, if someone would help me with the script.
The function of the script is to make an UPTIME championship with all the users in channel X, therefore:
1-When we execute the !start command, the competition will start and the bot will grant +v to all users in that channel. (And the bot will save the list of users, with the information for example of the hosts)
2-When a user who had +v in the channel does quit/part, the bot will announce with a say that that user has been eliminated from the competition.
3-The last user to lose their connection and therefore leave the channel will win. (This would be fine if the bot logs in for a number every time someone lands so that if you're not online you can look at it later).
PS: After the competition has started the bot should not give any more +v to anyone, so simply by looking at the list of people who have a voice in the channel you will know who is still in force in the championship.
Another idea is that when the last user falls, the bot can automatically publish the winner in the channel topic, for example.
I don't know if you can help me, but I see for example CrazyCat very active around here and he doesn't mind helping me anyway.
Thanks in advance.
Idea based on http://uptime.quakenut.org/quicklink/page/help (There you can probably understand something that I have not explained well) |
|
Back to top |
|
 |
CrazyCat Revered One

Joined: 13 Jan 2002 Posts: 1145 Location: France
|
Posted: Thu May 19, 2022 6:03 pm Post subject: Re: Uptime contest |
|
|
sauk wrote: | I don't know if you can help me, but I see for example CrazyCat very active around here and he doesn't mind helping me anyway. |
I don't know you, as it's your first post here, how can you tell that ?
This kind of script is quite simple to do, but like I don't mind helping you (dixit you), I won't help you.
Best regards. _________________ Eggdrop community - French IRC network |
|
Back to top |
|
 |
sauk Voice
Joined: 05 Jul 2020 Posts: 16
|
Posted: Thu May 19, 2022 6:14 pm Post subject: Re: Uptime contest |
|
|
CrazyCat wrote: | sauk wrote: | I don't know if you can help me, but I see for example CrazyCat very active around here and he doesn't mind helping me anyway. |
I don't know you, as it's your first post here, how can you tell that ?
This kind of script is quite simple to do, but like I don't mind helping you (dixit you), I won't help you.
Best regards. |
I have probably expressed myself badly because I wanted to translate the text so that it remains without errors and I think that it has made a mistake.
I wanted to say in that sentence that you quoted, let's see if someone, for example your CrazyCat, could lend me a hand.
If you don't mind using your time to help me which I appreciate, but I see that it is mistranslated and interpreted and sorry for that. |
|
Back to top |
|
 |
sauk Voice
Joined: 05 Jul 2020 Posts: 16
|
Posted: Thu May 19, 2022 6:15 pm Post subject: |
|
|
That is, my sentence was to praise your work here and not to despise it.
In order to say Quote: | I don't know if you can help me, but I see for example CrazyCat very active around here and he doesn't mind helping me anyway.
|
I wanted to say: Quote: | I don't know if you can help me, but I see for example CrazyCat very active around here and I wonder if he doesn't mind helping me. |
|
|
Back to top |
|
 |
CrazyCat Revered One

Joined: 13 Jan 2002 Posts: 1145 Location: France
|
|
Back to top |
|
 |
CrazyCat Revered One

Joined: 13 Jan 2002 Posts: 1145 Location: France
|
Posted: Fri May 20, 2022 5:02 am Post subject: |
|
|
few hours later:
Code: | namespace eval uptime {
# Change the trigger if you want
variable trigger "!start"
# Do not modify
variable players
bind pub -|- $::uptime::trigger ::uptime::start
proc start {nick uhost handle chan text} {
if {[info exists ::uptime::players($chan)] && [llength ::uptime::players($chan)]>0} { return }
set ::uptime::players($chan) {}
foreach u [chanlist $chan] {
if {[isbotnick $u]} { continue }
pushmode $chan +v $u
lappend ::uptime::players($chan) $u
}
flushmode $chan
putserv "PRIVMSG $chan :Uptime contest is now running!"
}
bind nick - * ::uptime::renuser
proc renuser {nick uhost handle chan nnick} {
if {![info exists ::uptime::players($chan)]} { return }
set ind [lsearch $::uptime::players($chan) $nick]
if { $ind > -1} {
set ::uptime::players($chan) [lreplace $::uptime::players($chan) $ind $ind $nnick]
}
}
bind part - * ::uptime::part
proc part {nick uhost handle chan text} {
if {![info exists ::uptime::players($chan)]} { return }
::uptime::lose $chan $nick
}
bind sign - * ::uptime::sign
proc sign {nick uhost handle chan text} {
if {![info exists ::uptime::players($chan)]} { return }
::uptime::lose $chan $nick
}
proc lose {chan nick} {
if {![info exists ::uptime::players($chan)]} { return }
set ind [lsearch $::uptime::players($chan) $nick]
if {$ind > -1} {
putserv "PRIVMSG $chan :$nick is no more playing ! LoOose !"
set ::uptime::players($chan) [lreplace $::uptime::players($chan) $ind $ind]
}
if {[llength $::uptime::players($chan)]==1} {
putserv "PRIVMSG $chan :And the winner is... [lindex $::uptime::players($chan) 0]"
unset ::uptime::players($chan)
}
}
} |
Actually the script doesn't save winners and anyone on the chan can launch the game. _________________ Eggdrop community - French IRC network |
|
Back to top |
|
 |
sauk Voice
Joined: 05 Jul 2020 Posts: 16
|
Posted: Fri May 20, 2022 2:44 pm Post subject: |
|
|
Let me test and I will give you feedback, thank you mate. |
|
Back to top |
|
 |
sauk Voice
Joined: 05 Jul 2020 Posts: 16
|
Posted: Fri May 20, 2022 3:06 pm Post subject: |
|
|
A command for manual stopping the contest and clearing DB will be usefull.
Also if player got kicked should be removed from it. |
|
Back to top |
|
 |
sauk Voice
Joined: 05 Jul 2020 Posts: 16
|
Posted: Fri May 20, 2022 3:14 pm Post subject: |
|
|
Giving more feedback, bot needs to ignore for example service names or contest will never finish. In this case for example
Q or ChanServ |
|
Back to top |
|
 |
sauk Voice
Joined: 05 Jul 2020 Posts: 16
|
Posted: Fri May 20, 2022 3:26 pm Post subject: |
|
|
Thinking to do a complete script would be great,
When we launch the contest with !start the bot should change topic to a for example:
"New #Uptime contest started at $date"
And when the contest finishes the bot should upgrade the current topic setting with
"Update contest finished ($startdate/$finishdate) - Total Update championships: $counter - Last winner: $winner
You know what I'm telling? I don't know if im explaining badly |
|
Back to top |
|
 |
CrazyCat Revered One

Joined: 13 Jan 2002 Posts: 1145 Location: France
|
Posted: Fri May 20, 2022 6:48 pm Post subject: |
|
|
All the thing you ask are quite easy to add.
The only question is about stoping game: who can stop it ? The initial launcher, the chan owner, any op or halfop, ... ? _________________ Eggdrop community - French IRC network |
|
Back to top |
|
 |
sauk Voice
Joined: 05 Jul 2020 Posts: 16
|
Posted: Fri May 20, 2022 7:07 pm Post subject: |
|
|
I already added n|n on the start command, so only bot owner can start.
Bot owner should be able to stop only. |
|
Back to top |
|
 |
CrazyCat Revered One

Joined: 13 Jan 2002 Posts: 1145 Location: France
|
Posted: Sat May 21, 2022 10:12 am Post subject: |
|
|
New version :
Code: | namespace eval uptime {
variable triggerS "!start"
variable triggerE "!stop"
# list of excluded nick
variable excluded {$::botnick "Q" "ChanServ" "\[Bot1\]"}
# Format of the date (see strftime documentation)
variable tformat "%d/%m/%Y %H:%M:%S"
# precision of the duration
variable precision 3
variable players
bind pub -|- $::uptime::triggerS ::uptime::start
bind pub -|n $::uptime::triggerE ::uptime::stop
variable tstart
proc start {nick uhost handle chan text} {
if {[info exists ::uptime::players($chan)] && [llength ::uptime::players($chan)]>0} { return }
set ::uptime::players($chan) {}
foreach u [chanlist $chan] {
if {[isbotnick $u] || [lsearch -nocase $::uptime::excluded $u]>-1} { continue }
pushmode $chan +v $u
lappend ::uptime::players($chan) $u
}
flushmode $chan
set ::uptime::tstart [clock seconds]
putserv "TOPIC $chan :New Uptime contest started at [clock format $::uptime::tstart -format $::uptime::tformat]"
putserv "PRIVMSG $chan :Uptime contest is now running!"
}
proc stop {nick uhost handle chan text} {
if {![info exists ::uptime::players($chan)] || [llength ::uptime::players($chan)]==0} { return }
foreach u $::uptime::players($chan) {
pushmode $chan -v $u
}
flushmode $chan
unset ::uptime::players($chan)
unset ::uptime::tstart
putserv "PRIVMSG $chan :Uptime contest stopped by $nick"
putserv "TOPIC $chan :Uptime contest stopped by $nick at [clock format [clock seconds] -format $::uptime::tformat]"
}
bind nick - * ::uptime::renuser
proc renuser {nick uhost handle chan nnick} {
if {![info exists ::uptime::players($chan)]} { return }
set ind [lsearch $::uptime::players($chan) $nick]
if { $ind > -1} {
set ::uptime::players($chan) [lreplace $::uptime::players($chan) $ind $ind $nnick]
}
}
bind part - * ::uptime::part
proc part {nick uhost handle chan text} {
if {![info exists ::uptime::players($chan)]} { return }
::uptime::lose $chan $nick
}
bind sign - * ::uptime::sign
proc sign {nick uhost handle chan text} {
if {![info exists ::uptime::players($chan)]} { return }
::uptime::lose $chan $nick
}
bind kick - * ::uptime::kick
proc kick {nick uhost handle chan target reason} {
if {![info exists ::uptime::players($chan)]} { return }
::uptime::lose $chan $target
}
proc lose {chan nick} {
if {![info exists ::uptime::players($chan)]} { return }
set ind [lsearch $::uptime::players($chan) $nick]
if {$ind > -1} {
putserv "PRIVMSG $chan :$nick is no more playing ! LoOose !"
set ::uptime::players($chan) [lreplace $::uptime::players($chan) $ind $ind]
}
if {[llength $::uptime::players($chan)]==1} {
putserv "PRIVMSG $chan :And the winner is... [lindex $::uptime::players($chan) 0]"
putserv "TOPIC $chan :Uptime contest finished ([clock format $::uptime::tstart -format $::uptime::tformat] - [clock format [clock seconds] -format $::uptime::tformat]) - Uptime winner is [lindex $::uptime::players($chan) 0] with [::uptime::duration $::uptime::tstart]"
unset ::uptime::players($chan)
}
}
proc duration {start {end 0}} {
set slang {year month day hour minute second}
if {$end eq 0} {
set end [clock seconds]
}
set out {}
set years [expr {[clock format $end -format %Y] - [clock format $start -format %Y]}]
set delay [clock format [expr {$end - $start}] -format "%m-%d %H:%M:%S"]
regexp {(\d+)-(\d+) 0?(\d+):0?(\d+):0?(\d+)} $delay -> months days hours minutes seconds
set tdata [list $years [incr months -1] [incr days -1] [incr hours -1] $minutes $seconds]
set i 0
foreach val $tdata {
if {$val > 0} {
if {$val>1} { set s "s" } else { set s "" }
lappend out "$val [lindex $slang $i]$s"
}
incr i
}
if {$::uptime::precision <= 2 || [llength $out]<$::uptime::precision} {
set tmpret [join [lrange $out 0 [expr {$::uptime::precision - 1}]] " and "]
} else {
set tmpret [join [lrange $out 0 [expr {$::uptime::precision - 2}]] ", "]
set tmpret "$tmpret and [join [lindex $out [expr {$::uptime::precision - 1}]]]"
}
return $tmpret
}
putlog "Uptime Contest v220521 by CrazyCat <https://forum.eggdrop.fr> Loaded"
} |
#test wrote: | 16:06:56 <CrazyCat> !start
16:06:57 -- Raspdrop a changé le titre pour #test de "Uptime contest finished (21/05/2022 - 15:43:46 - 21/05/2022 - 16:02:40) - Uptime winner is CrazyCat in 18 minutes and 54 seconds" en "New Uptime contest started at 21/05/2022 16:06:56"
16:06:58 <Raspdrop> Uptime contest is now running!
16:07:19 <-- CrazyCat a éjecté Myrddin (just a trys)
16:07:20 --> Myrddin [Excalibur] (http://www.eggdrop.fr) (Myrddin@eggdrop.fr) a rejoint #test
16:07:20 <Raspdrop> Myrddin is no more playing ! LoOose !
16:07:53 -- Mode #test [+o Raspdrop] par CrazyCat
16:08:07 <-- Z (4ed93d66@zeolia-D3E23F37) a quitté (Quit: Connection closed)
16:08:08 <@Raspdrop> Z is no more playing ! LoOose !
16:08:09 <@Raspdrop> And the winner is... CrazyCat
16:08:10 -- Raspdrop a changé le titre pour #test de "New Uptime contest started at 21/05/2022 16:06:56" en "Uptime contest finished (21/05/2022 16:06:56 - 21/05/2022 16:08:07) - Uptime winner is CrazyCat with 1 minute and 11 seconds" |
_________________ Eggdrop community - French IRC network
Last edited by CrazyCat on Sun May 22, 2022 7:05 am; edited 1 time in total |
|
Back to top |
|
 |
sauk Voice
Joined: 05 Jul 2020 Posts: 16
|
Posted: Sat May 21, 2022 8:02 pm Post subject: |
|
|
I will test soon, and reply after. Thank you |
|
Back to top |
|
 |
sauk Voice
Joined: 05 Jul 2020 Posts: 16
|
Posted: Sun May 22, 2022 4:53 am Post subject: |
|
|
Very good job, we can upgrade..
Seting up a command !setprize and setting add the prize of the contest, example:
!setprize .com domain
Then the bot when we start the contest puts also the prize in topic.
Like:
Quote: | putserv "TOPIC $chan :New Uptime contest started at [clock format $::uptime::tstart -format $::uptime::tformat] - Prize: .com domain" |
Also will be great when contest finishes on the topic upgrade setup a counter with total finished contests.
Quote: | putserv "TOPIC $chan :Uptime contest finished ([clock format $::uptime::tstart -format $::uptime::tformat] - [clock format [clock seconds] -format $::uptime::tformat]) - Uptime winner is [lindex $::uptime::players($chan) 0] with [::uptime::duration $::uptime::tstart]" - Total contests: 30 |
|
|
Back to top |
|
 |
|