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.
Help for those learning Tcl or writing their own scripts.
ComputerTech
Master
Posts: 399 Joined: Sat Feb 22, 2020 10:29 am
Contact:
Post
by ComputerTech » Sun Jul 26, 2020 11:40 pm
so trying to add the option to give a beer to a user like !beer john
bot gives john a beer
this is the code I have so far
Code: Select all
#################################################################################################################################################################
# Bar.tcl 1.0.5
#################################################################################################################################################################
#ComputerTech
#Irc irc.technet.xi.ht #ComputerTech123
#Email ComputerTech312@Gmail.com
#GitHub https://github.com/computertech312
#Website http://tcl3.webnode.co.uk
#################################################################################################################################################################
#START OF SETTINGS#
#Set trigger
set barcmd ""
#Set the maxium amount the tab can be
set max "100"
#END OF SETTINGS#
#################################################################################################################################################################
namespace eval ::beer {
variable barcmd ";"
variable beer
array set bills {}
array set drinks {
heineken 6
wine 25
water 2
coke 5
orange 4
vodka 10
brandy 30
whiskey 9
budwiser 7
guinness 14
carlsberg 8
redbull 6
fanta 5
tea 4
coffee 6
}
foreach dr [array names drinks] {
bind pubm - "*$::beer::barcmd$dr*" ::beer::do_drink
}
bind pub - "${barcmd}pay" ::beer::do_the_pay
bind pub - "${barcmd}menu" ::beer::do_the_menu
proc do_drink {nick uhost handle chan text} {
set args [split $text " "]
set key [stripcodes abcgru [lindex $args 0]]
set key [string range $key 1 end]
set cost $::beer::drinks($key)
if {[array names ::beer::bills -exact $nick] ne ""} {
set bill $::beer::bills($nick)
if {$bill >= 50} {
putserv "PRIVMSG $chan : $nick Your Tab is full With the amount of \$$bill Please pay before ordering more drink"
return 0
}
} else {
set ::beer::bills($nick) 0
}
incr ::beer::bills($nick) $cost
if {[lindex [split $text] 0 ]} {
set dnick "[lindex [split $text] 0 ]"
putserv "privmsg $chan : here ya go go $dnick some $key"
} else {
putserv "PRIVMSG $chan :\001ACTION Fills up the glass with $key\001"
putserv "PRIVMSG $chan :\001ACTION Gives the $key to $nick\001"
putserv "PRIVMSG $chan : Enjoy your $key $nick, Your Total Bill Amount Is \$$::beer::bills($nick)"
}
}
proc do_the_pay {nick uhost handle chan text} {
set loaded [array names ::beer::bills -exact $nick]
if {$loaded eq ""} {
putserv "PRIVMSG $chan :$nick Your Already Payed Your Bill"
return
}
putserv "PRIVMSG $chan :$nick Thank You For Paying Your Bill, Here's your receipt"
putserv "NOTICE $nick : ------------------- "
putserv "NOTICE $nick :|Bar receipt "
putserv "NOTICE $nick :| \$$::beer::bills($nick) "
putserv "NOTICE $nick :| $nick "
putserv "NOTICE $nick :| $chan"
putserv "NOTICE $nick : ------------------- "
unset ::beer::bills($nick)
}
proc do_the_menu {nick uhost handle chan text} {
putserv "NOTICE $nick :Welcome $nick This is our Menu"
foreach {drink cost} [array get ::beer::drinks] {
putserv "NOTICE $nick :$::beer::barcmd$drink : \$$cost"
}
}
putlog "Barman 1.0.1 loaded"
}
putlog "Bar 1.0.5 Loaded"
#################################################################################################################################################################
ComputerTech
CrazyCat
Revered One
Posts: 1306 Joined: Sun Jan 13, 2002 8:00 pm
Location: France
Contact:
Post
by CrazyCat » Mon Jul 27, 2020 4:27 am
You can try the following:
Code: Select all
#################################################################################################################################################################
# Bar.tcl 1.0.5
#################################################################################################################################################################
#ComputerTech
#Irc irc.technet.xi.ht #ComputerTech123
#Email ComputerTech312@Gmail.com
#GitHub https://github.com/computertech312
#Website http://tcl3.webnode.co.uk
#################################################################################################################################################################
#START OF SETTINGS#
#Set trigger
set barcmd ""
#Set the maxium amount the tab can be
set max "100"
#END OF SETTINGS#
#################################################################################################################################################################
namespace eval ::beer {
variable barcmd ";"
variable beer
array set bills {}
array set drinks {
heineken 6
wine 25
water 2
coke 5
orange 4
vodka 10
brandy 30
whiskey 9
budwiser 7
guinness 14
carlsberg 8
redbull 6
fanta 5
tea 4
coffee 6
}
foreach dr [array names drinks] {
bind pubm - "*$::beer::barcmd$dr*" ::beer::do_drink
}
bind pub - "${barcmd}pay" ::beer::do_the_pay
bind pub - "${barcmd}menu" ::beer::do_the_menu
proc do_drink {nick uhost handle chan text} {
set args [split $text " "]
set key [stripcodes abcgru [lindex $args 0]]
set key [string range $key 1 end]
if { [llength $args]==2 } {
set vict [stripcodes abcgru [lindex $args 1]]
if {![onchan $vict $chan]} {
putserv "PRIVMSG $chan :$nick, you can't afford a $key to $vict, she/he is not here"
return 0
}
} else {
set vict $nick
}
set cost $::beer::drinks($key)
if {[array names ::beer::bills -exact $nick] ne ""} {
set bill $::beer::bills($nick)
if {$bill >= 50} {
putserv "PRIVMSG $chan : $nick Your Tab is full With the amount of \$$bill Please pay before ordering more drink"
return 0
}
} else {
set ::beer::bills($nick) 0
}
incr ::beer::bills($nick) $cost
putserv "PRIVMSG $chan :\001ACTION Fills up the glass with $key\001"
putserv "PRIVMSG $chan :\001ACTION Gives the $key to $vict\001"
putserv "PRIVMSG $chan : Enjoy your $key $nick, Your Total Bill Amount Is \$$::beer::bills($nick)"
}
proc do_the_pay {nick uhost handle chan text} {
set loaded [array names ::beer::bills -exact $nick]
if {$loaded eq ""} {
putserv "PRIVMSG $chan :$nick Your Already Payed Your Bill"
return
}
putserv "PRIVMSG $chan :$nick Thank You For Paying Your Bill, Here's your receipt"
putserv "NOTICE $nick : ------------------- "
putserv "NOTICE $nick :|Bar receipt "
putserv "NOTICE $nick :| \$$::beer::bills($nick) "
putserv "NOTICE $nick :| $nick "
putserv "NOTICE $nick :| $chan"
putserv "NOTICE $nick : ------------------- "
unset ::beer::bills($nick)
}
proc do_the_menu {nick uhost handle chan text} {
putserv "NOTICE $nick :Welcome $nick This is our Menu"
foreach {drink cost} [array get ::beer::drinks] {
putserv "NOTICE $nick :$::beer::barcmd$drink : \$$cost"
}
}
putlog "Barman 1.0.6 loaded"
}
ComputerTech
Master
Posts: 399 Joined: Sat Feb 22, 2020 10:29 am
Contact:
Post
by ComputerTech » Mon Jul 27, 2020 9:13 am
Haha, Cheers CrazyCat
I'll give it a go
*ComputerTech Gives CrazyCat A Beer
Last edited by
ComputerTech on Mon Jul 27, 2020 9:16 am, edited 1 time in total.
ComputerTech
CrazyCat
Revered One
Posts: 1306 Joined: Sun Jan 13, 2002 8:00 pm
Location: France
Contact:
Post
by CrazyCat » Mon Jul 27, 2020 9:14 am
ComputerTech
Master
Posts: 399 Joined: Sat Feb 22, 2020 10:29 am
Contact:
Post
by ComputerTech » Mon Jul 27, 2020 4:06 pm
Hmm, it works good, but this part
Code: Select all
putserv "PRIVMSG $chan :\001ACTION Fills up the glass with $key\001"
putserv "PRIVMSG $chan :\001ACTION Gives the $key to $vict\001"
putserv "PRIVMSG $chan : Enjoy your $key $nick, Your Total Bill Amount Is \$$::beer::bills($nick)"
if i change $nick to $vict ,will that make it if i just type !beer it will say giving to me?
and for this part.
Code: Select all
putserv "PRIVMSG $chan :$nick Thank You For Paying Your Bill, Here's your receipt"
putserv "NOTICE $nick : ------------------- "
putserv "NOTICE $nick :|Bar receipt "
putserv "NOTICE $nick :| \$$::beer::bills($nick) "
putserv "NOTICE $nick :| $nick "
putserv "NOTICE $nick :| $chan"
putserv "NOTICE $nick : ------------------- "
unset ::beer::bills($nick)
}
is there a way to make the receipt show each drink the user ordered on the receipt?
ComputerTech
CrazyCat
Revered One
Posts: 1306 Joined: Sun Jan 13, 2002 8:00 pm
Location: France
Contact:
Post
by CrazyCat » Mon Jul 27, 2020 6:47 pm
ComputerTech wrote: Hmm, it works good, but this part
Code: Select all
putserv "PRIVMSG $chan :\001ACTION Fills up the glass with $key\001"
putserv "PRIVMSG $chan :\001ACTION Gives the $key to $vict\001"
putserv "PRIVMSG $chan : Enjoy your $key $nick, Your Total Bill Amount Is \$$::beer::bills($nick)"
if i change $nick to $vict ,will that make it if i just type !beer it will say giving to me?
Read the beginning of the code, $vict is depending on the second part of the command:
Code: Select all
if { [llength $args]==2 } {
set vict [stripcodes abcgru [lindex $args 1]]
if {![onchan $vict $chan]} {
putserv "PRIVMSG $chan :$nick, you can't afford a $key to $vict, she/he is not here"
return 0
}
} else {
set vict $nick
}
ComputerTech wrote: and for this part.
Code: Select all
putserv "PRIVMSG $chan :$nick Thank You For Paying Your Bill, Here's your receipt"
putserv "NOTICE $nick : ------------------- "
putserv "NOTICE $nick :|Bar receipt "
putserv "NOTICE $nick :| \$$::beer::bills($nick) "
putserv "NOTICE $nick :| $nick "
putserv "NOTICE $nick :| $chan"
putserv "NOTICE $nick : ------------------- "
unset ::beer::bills($nick)
}
is there a way to make the receipt show each drink the user ordered on the receipt?
Wasn't in the previous question, and it's more elaborate than a simple bill counter.
I can do it, but managing bills and payments needs more things than "I want a bar script for fun"
ComputerTech
Master
Posts: 399 Joined: Sat Feb 22, 2020 10:29 am
Contact:
Post
by ComputerTech » Mon Jul 27, 2020 7:08 pm
Yeah, but when i did
it responded with
Code: Select all
*Fills up the glass with heineken
*Gives the heineken to j9hn
*Enjoy your heineken ComputerTech, Your Total Bill Amount Is $6
so i guess this >> *Enjoy your heineken ComputerTech, Your Total Bill Amount Is $6
is the problem, perhaps if it checked if i specified a person to say a different sentence
perhaps like this
Code: Select all
if {[llength [split $text] 0]}
putserv "privmsg $chan :here ya go john"
} else {
putserv "privmsg $chan :here ya go computertech"
something like that perhaps?
ComputerTech
CrazyCat
Revered One
Posts: 1306 Joined: Sun Jan 13, 2002 8:00 pm
Location: France
Contact:
Post
by CrazyCat » Tue Jul 28, 2020 12:49 am
Sorry, I didn't read totaly the last putserv which is used to speak to the "victim" and the afforder.
So, you have 2 choices:
- use separate lines to say "enjoy" and to give the total amount of the bill
- compare $vict and $nick and then choose an appropriate sentence.
First way:
Code: Select all
putserv "PRIVMSG $chan :: Enjoy your $key $vict, it's a gift from $nick"
putserv "PRIVMSG $chan: $nick, your Total Bill Amount is \$$::beer::bills($nick)"
Second way:
Code: Select all
if {$vict eq $nick} {
putserv "PRIVMSG $chan :Enjoy your $key $nick, Your Total Bill Amount Is \$$::beer::bills($nick)"
} else {
putserv "PRIVMSG $chan :Enjoy your $key $vict, the Total Bill Amount for $nick is \$$::beer::bills($nick)"
}
ComputerTech
Master
Posts: 399 Joined: Sat Feb 22, 2020 10:29 am
Contact:
Post
by ComputerTech » Tue Jul 28, 2020 6:36 am
Second Choice looks good
Thanks CrazyCat, i'll go add it right away
Cheers
ComputerTech
ComputerTech
Master
Posts: 399 Joined: Sat Feb 22, 2020 10:29 am
Contact:
Post
by ComputerTech » Wed Jul 29, 2020 11:27 pm
Cool, worked a treat CrazyCat
i was thinking of anothr feature, a tip service, could we work with this perhaps?
!tip $amount
and this adds to the receipt as a seperate line or array
but some how make a total amount of both the drinks and the tip
would this be possibly easy? or quite difficult to do?
All help appreciated as always
ComputerTech
ComputerTech
Master
Posts: 399 Joined: Sat Feb 22, 2020 10:29 am
Contact:
Post
by ComputerTech » Wed Aug 26, 2020 4:03 pm
Hmm, little problem with the bar script, if a user changes nick it clears their bar tab, is there a way to associate the variable with the user's hostmask?
Thanks in advanced
ComputerTech