26/02/2023, 03:07
(This post was last modified: 26/02/2023, 17:20 by CrazyCat.
Edit Reason: Use TCL tags
)
Hello, I'm using this csript to change user's vhost in #vhost by HostServ. Is it posiable to change the script, to make it if someone with existing vhost into the db, if change their vhost the bot will set his new vhost and will delete the oldone from db.
tcl
set service "vHost.tcl"
#### Конфигурация ####
if {![file exists /home/services/vhost/scripts/vhost.txt]} { set fh [open /home/services/vhost/scripts/vhost.txt w] ; close $fh }
#Канал, в който ще е активна услугата:
set channel "#vhost"
set requestinuse 0
set badwords {
"*ircop*"
"*admin*"
"*oper*"
"*root*"
"*staff*"
"*globop*"
"*localop*"
"*locop*"
"*globalop*"
"*services*"
}
## === SCRIPT === Моля, не променяйте нищо от тук, ако не знаете точно какво правите === ##
bind join - "$::channel *" helpchan:join
bind raw - 307 zone:ident
bind pub -|- !vhost zone:vhost
proc helpchan:join {nick host hand chan} {
global zone_nick zone_ident
set zone_ident "1"
set zone_nick $nick
putserv "WHOIS $nick"
utimer 3 zone:not:ident
}
proc zone:vhost {nick host hand chan vhost} {
global zone_nick zone_ident zone_vhost
if {[lindex $vhost 0] == ""} { puthelp "notice $nick :Моля, използвайте само A-Z или 0-9 и отделяйте думите с точка"; return 0 }
if { $::requestinuse == 1 } {
putquick "NOTICE $nick :\002Floodprotection!\002 Командата може да се изпълнява само веднъж в минута!"
} else {
if {$::channel != $chan} {return 0}
set zone_ident "2"
set zone_vhost [lindex $vhost 0]
set zone_nick $nick
set ::requestinuse 1
timer 1 [list set ::requestinuse 0]
putserv "WHOIS $nick"
utimer 3 vhost:not:ident
}
}
proc zone:ident {from key args} {
global zone_ident zone_nick zone_vhost
set args [join $args]
set nick [string tolower [lindex $args 1]]
set regist [strlwr [lindex [lrange [split $args ":"] 1 end] 0]]
if {$zone_ident == "1" && $regist == "is a registered nick"} {
foreach j [utimers] {
if {[lindex $j 1] == "zone:not:ident"} { killutimer [lindex $j 2] }
}
}
if {$zone_ident == "2" && $regist == "is a registered nick"} {
foreach j [utimers] {
if {[lindex $j 1] == "vhost:not:ident"} { killutimer [lindex $j 2] }
}
badword:abfrage $zone_nick $zone_vhost
}
return 0
}
proc vhost:not:ident {} {
global zone_nick zone_vhost
putserv "NOTICE $zone_nick :Вашият вхост не е зададен! Моля, идентифицирайте се с основния си никнейм!"
}
proc badword:abfrage {nick host} {
global zone_nick zone_vhost
if {[string match "*.*" [string tolower $zone_vhost]]} {
set results 0
foreach x $::badwords {
if {[string match -nocase *$x* $zone_vhost]} {
incr results
}
}
set fh [open "/home/services/vhost/scripts/vhost.txt" r]
set data [read $fh]
close $fh
foreach line [split $data \n] {
if {[string match -nocase *$zone_vhost* $line]} {
putserv "NOTICE $zone_nick :\002Избраният вхост вече се използва от друг потребител. Моля, изберете друг вхост!\002" ; return 0 } }
if {$results > 0} {
putserv "NOTICE $zone_nick :Вашият vHost \002'$zone_vhost'\002 не беше зареден! Използвате забранена дума за vhost"
putserv "NOTICE $zone_nick :\002Съвет!\002 vHost може да съдържа знаците: A-Z, a-z, 0-9 и '.'"
} else {
putserv "PRIVMSG hostserv set $zone_nick $zone_vhost"
putserv "kick #vhost $zone_nick :Banned: Вашият вхост е успешно променен на $zone_vhost"
putserv "mode #vhost +b $zone_vhost"
set fh [open "/home/services/vhost/scripts/vhost.txt" a]
puts $fh $zone_vhost
close $fh
}
} else {
putserv "NOTICE $zone_nick :\002ГРЕШКА!\002 Вашият вхост трябва да съдържа поне едина точка ( . )"
}
}
putlog "$service беше зареден успешно!"