View previous topic :: View next topic |
Author |
Message |
kthxbye Voice
Joined: 03 Jan 2023 Posts: 3
|
Posted: Tue Jan 03, 2023 3:50 am Post subject: BlackWeather.tcl - display metric+fahrenheit in the output |
|
|
Hello!
I would like to request an option for BlackWeather.tcl to output both metric and fahrenheit in the same reply.
Thanks! |
|
Back to top |
|
 |
simo Revered One
Joined: 22 Mar 2015 Posts: 1027
|
Posted: Tue Jan 03, 2023 5:09 am Post subject: |
|
|
If you could pastebin the code we could take a look at it as i believe whatever output u currently have can be converted with a calculation |
|
Back to top |
|
 |
kthxbye Voice
Joined: 03 Jan 2023 Posts: 3
|
Posted: Tue Jan 03, 2023 5:36 am Post subject: |
|
|
simo wrote: | If you could pastebin the code we could take a look at it as i believe whatever output u currently have can be converted with a calculation |
Thank you!
I actually posted this to address this script's original author. We had a conversation on #eggdrop@libera and he asked me to post a request on the forum, so that he can implement this feature.
I already linked him to this request, so I'd rather wait for his action.
PS tho Im a bit in doubt he meant this forum to place a request to, as we didn't discuss further. I hope I was right to post here  |
|
Back to top |
|
 |
BLaCkShaDoW Op

Joined: 11 Jan 2009 Posts: 117 Location: Romania
|
Posted: Tue Jan 03, 2023 9:06 am Post subject: |
|
|
Code: |
#######################################################################################################
## BlackWeather.tcl 1.2 (25/05/2021) Copyright 2008 - 2021 @ WwW.TCLScripts.NET ##
## _ _ _ _ _ _ _ _ _ _ _ _ _ _ ##
## / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ ##
## ( T | C | L | S | C | R | I | P | T | S | . | N | E | T ) ##
## \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ##
## ##
## ® BLaCkShaDoW Production ® ##
## ##
## PRESENTS ##
## ® ##
########################################## BLACK WEATHER TCL #######################################
## ##
## DESCRIPTION: ##
## Displays real-time weather conditions, local time from any city in the world. ##
## ##
## Supports US Zipcode, UK Postcode, Canada Postalcode or worldwide city name. ##
## ##
## Few of the available variable: max./min. and 'feels like' temperatures, wind speed,,local time ##
## ##
## ##
## ATTENTION: search does not support diacritic markst as: á, é, í, ó, ú, ü, ñ, ¿, ¡, etc. ##
## ##
## Tested on Eggdrop v1.8.3 (Debian Linux 3.16.0-4-amd64) Tcl version: 8.6.6 ##
## ##
#######################################################################################################
## ##
## /===============================\ ##
## | This Space For Rent | ##
## \===============================/ ##
## ##
#######################################################################################################
## ##
## INSTALLATION: ##
## ++ http package is REQUIRED for this script to work. ##
## ++ json package is REQUIRED for this script to work. ##
## ++ Edit the BlackWeather.tcl script and place it into your /scripts directory, ##
## ++ add "source scripts/BlackWeather.tcl" to your eggdrop config and rehash the bot. ##
## ##
#######################################################################################################
#######################################################################################################
## ##
## OFFICIAL LINKS: ##
## E-mail : BLaCkShaDoW[at]tclscripts.net ##
## Bugs report : http://www.tclscripts.net ##
## GitHub page : https://github.com/tclscripts/ ##
## Online help : irc://irc.undernet.org/tcl-help ##
## #TCL-HELP / UnderNet ##
## You can ask in english or romanian ##
## ##
## paypal.me/DanielVoipan = Please consider a donation. Thanks! ##
## ##
#######################################################################################################
## ##
## You want a customised TCL Script for your eggdrop? ##
## Easy-peasy, just tell me what you need! ##
## I can create almost anything in TCL based on your ideas and donations. ##
## Email blackshadow@tclscripts.net or info@tclscripts.net with your ##
## request informations and I'll contact you as soon as possible. ##
## ##
#######################################################################################################
## ##
## To activate: .chanset +weather | from BlackTools: .set #channel +weather ##
## ##
## !w [?|help] - shows all available commands. ##
## ##
## !w [set] [nick|zipcode|city,state|city,state,country|airport] ##
## ##
## !time [nick|zipcode|city,state|city,state,country|airport] ##
## - returns a default user local time. ##
## ##
## !w version - shows the actual weather script version. ##
## ##
## Supports: US Zipcode, UK Postcode, Canada Postalcodes or worldwide city name. ##
## ##
## ATTENTION: search does not support diacritic markst as: á, é, í, ó, ú, ü, ñ, ¿, ¡, etc. ##
## ##
####################################################################################################### ##
#######################################################################################################
## ##
## LICENSE: ##
## This code comes with ABSOLUTELY NO WARRANTY. ##
## ##
## This program is free software; you can redistribute it and/or modify it under the terms of ##
## the GNU General Public License version 3 as published by the Free Software Foundation. ##
## ##
## This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty of ##
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ##
## USE AT YOUR OWN RISK. ##
## ##
## See the GNU General Public License for more details. ##
## (http://www.gnu.org/copyleft/library.txt) ##
## ##
## Copyright 2008 - 2021 @ WwW.TCLScripts.NET ##
## ##
#######################################################################################################
#######################################################################################################
## CONFIGURATION FOR BlackWeather.TCL ##
#######################################################################################################
###
# Channel flags
# - to activate the script:
# .set +weather or .chanset #channel +weather
#
###
###
# Cmdchar trigger
# - set here the trigger you want to use.
###
set weather(cmd_char) "!"
###
#Api keys from http://api.weatherstack.com
#(works with multiple keys now)
###
set weather(nr_id) {
"key 1"
"key 2"
}
###
#Use weather short output ?
# 0 - yes ; 1 - no
###
set weather(short_out) "0"
###
# User db file
# - specifies the file where all users weather locations are stored.
###
set weather(user_file) "scripts/Blackweather.users.txt"
###
# FLOOD PROTECTION
#Set the number of minute(s) to ignore flooders, 0 to disable flood protection
###
set weather(ignore_prot) "1"
###
# FLOOD PROTECTION
#Set the number of requests within specifide number of seconds to trigger flood protection.
# By default, 4:10, which allows for upto 3 queries in 10 seconds. 4 or more quries in 10 seconds would cuase
# the forth and later queries to be ignored for the amount of time specifide above.
###
set weather(flood_prot) "3:10"
#######################################################################################################
### DO NOT MODIFY HERE UNLESS YOU KNOW WHAT YOU'RE DOING ###
#######################################################################################################
setudef flag weather
bind pubm - * weather:get
###
package require tls
package require http
package require json
if {![file exists $weather(user_file)]} {
set file [open $weather(user_file) w]
close $file
}
proc weather:get {nick host hand chan arg} {
global weather black
if {![channel get $chan weather]} {
return
}
set first_cmd [lindex [split $arg] 0]
if {[string match -nocase "$weather(cmd_char)w" $first_cmd]} {
set cmd_type 0
} elseif {[string match -nocase "$weather(cmd_char)time" $first_cmd]} {
set cmd_type 1
} else { return }
set flood_protect [weather:flood:prot $chan $host]
if {$flood_protect == "1"} {
set get_seconds [weather:get:flood_time $host $chan]
weather:say $nick $chan [list $get_seconds "6" $nick] 0
return
}
set cmd [lindex [split $arg] 1]
set location [lrange [split $arg] 1 end]
set setup_location [join [lrange [split $arg] 2 end]]
set slocation [join $setup_location "%20"]
switch $cmd {
set {
if {$setup_location == ""} {
weather:say $nick $chan $weather(cmd_char) 7
return
}
set units [weather:get_units $setup_location]
set units_type [lindex $units 0]
set units_specified [lindex $units 1]
set new_loc [lindex $units 2]
weather:say $nick $chan [list $nick $new_loc $units_type] 8
weather:setlocation $nick $host $chan $setup_location
}
? {
weather:say $nick $chan $weather(cmd_char) 10
}
version {
weather:say $nick $chan $weather(cmd_char) version
}
default {
if {$cmd == ""} {
set getlocation [weather:getlocation $nick $host $chan]
set units [weather:get_units $getlocation]
set units_type [lindex $units 0]
set units_specified [lindex $units 1]
set new_loc [lindex $units 2]
if {$units_specified == "1"} {
set getlocation [join $new_loc "%20"]
} else {
set getlocation [join $getlocation "%20"]
}
if {$getlocation == "0"} {
weather:say $nick $chan [list $nick $weather(cmd_char)] 9
} else {
weather:getinfo $nick $chan $getlocation $units_type $cmd_type
}
} else {
if {[onchan $cmd $chan]} {
set get_host [getchanhost $cmd $chan]
set getlocation [weather:getlocation $nick $get_host $chan]
set units [weather:get_units $getlocation]
set units_type [lindex $units 0]
set units_specified [lindex $units 1]
set new_loc [lindex $units 2]
if {$units_specified == "1"} {
set getlocation [join $new_loc "%20"]
} else {
set getlocation [join $getlocation "%20"]
}
if {$getlocation == "0"} {
weather:say $nick $chan [list $cmd ] 11
return
}
weather:getinfo $nick $chan $getlocation $units_type $cmd_type
return
}
set units [weather:get_units $location]
set units_type [lindex $units 0]
set units_specified [lindex $units 1]
set new_loc [lindex $units 2]
if {$units_specified == "1"} {
set location [join $new_loc "%20"]
} else {
set location [join $location "%20"]
}
weather:getinfo $nick $chan $location $units_type $cmd_type
}
}
}
}
###
proc weather:get_units {location} {
global weather
set units ""
if {[regexp {[,]} $location]} {
set units [string trimleft [lindex [weather:wsplit $location ","] 1] " "]
switch [concat $units] {
m {
set location [regsub -all {\s+} [lindex [weather:wsplit $location ","] 0] " "]
return [list m 1 $location]
}
f {
set location [regsub -all {\s+} [lindex [weather:wsplit $location ","] 0] " "]
return [list f 1 $location]
}
default {
set location [regsub -all {\s+} [lindex [weather:wsplit $location ","] 0] " "]
return [list "m" 0 $location]
}
}
} else {
return [list "m" 0 $location]
}
}
###
proc weather:getinfo {nick chan location units cmd_type} {
global weather
if {![info exists weather(id_num)]} {
set weather(id_num) 0
}
set data [weather:getdata $chan $location $units $weather(id_num)]
set error [weather:getjson "error" $data]
if {$error != ""} {
incr weather(id_num)
if {[lindex $weather(nr_id) $weather(id_num)] != ""} {
weather:getinfo $nick $chan $location $units $cmd_type
return
} else {
unset weather(id_num)
}
set error_text [lindex $error 5]
weather:say $nick $chan [list $error_text] 6
return
}
set location [weather:getjson "location" $data]
set name [encoding convertfrom utf-8 [lindex $location 1]]
set country [encoding convertfrom utf-8 [lindex $location 3]]
set region [encoding convertfrom utf-8 [lindex $location 5]]
set lat [lindex $location 7]
set lon [lindex $location 9]
set latlon [join "$lat $lon" ", "]
if {[string equal -nocase $name $region] || $region == ""} {
set get_location [join [list $name $country] ", "]
} else {
set get_location [join [list $name $region $country] ", "]
}
set timezone [lindex $location 11]
set get [catch {exec env TZ=$timezone date -R | tr -s " "} dat]
set dat [join [lreplace [split $dat " "] 5 5]]
set clock_scan [clock scan $dat -format "%a, %e %b %Y %H:%M:%S"]
set day [clock format $clock_scan -format %A]
set localtime [clock format $clock_scan -format "%d %b %Y %R"]
if {$cmd_type == "1"} {
weather:say $nick $chan [list $get_location $latlon $localtime $day] 3
return
}
set current [weather:getjson "current" $data]
set feelslike_temp [lindex $current 25]
set f_feelslike_temp [expr {[expr {[expr {$feelslike_temp * 9}] / 5.0}] + 32}]
set cloud_cover_percent [lindex $current 19]
set humidity [lindex $current 21]
set wind_dir [lindex $current 15]
set wind_speed [lindex $current 11]
set pressure [lindex $current 17]
set precip [lindex $current 19]
set uv [lindex $current 23]
set desc [join [lindex $current 9]]
set temp [lindex $current 3]
set ftemp [expr {[expr {[expr {$temp * 9}] / 5.0}] + 32}]
set observation_time [lindex $current 1]
if {$weather(short_out) == "0"} {
if {$units == "m"} {
weather:say $nick $chan [list $get_location $latlon $desc $feelslike_temp $f_feelslike_temp] 1
} else {
weather:say $nick $chan [list $get_location $latlon $desc $feelslike_temp $f_feelslike_temp] 2
}
} else {
if {$units == "m"} {
weather:say $nick $chan [list $get_location $latlon $temp $feelslike_temp $humidity $wind_dir $wind_speed $pressure $cloud_cover_percent $uv $observation_time $precip $desc $f_feelslike_temp $ftemp] 4
} else {
weather:say $nick $chan [list $get_location $latlon $temp $feelslike_temp $humidity $wind_dir $wind_speed $pressure $cloud_cover_percent $uv $observation_time $precip $desc] 5
}
}
}
###
proc weather:say {nick chan arg num} {
global black
set inc 0
foreach s $arg {
set inc [expr $inc + 1]
set replace(%msg.$inc%) $s
}
set reply [string map [array get replace] $black(weather.en.$num)]
putserv "PRIVMSG $chan :$reply"
}
###
proc weather:getlocation {nick host chan} {
global black weather
set file [open $weather(user_file) "r"]
set read_location ""
while {[gets $file line] != -1} {
set read_chan [lindex [split $line] 0]
set enc_chan [encoding convertfrom utf-8 $read_chan]
set read_host [lindex [split $line] 2]
if {[string equal -nocase $enc_chan $chan] && [string match -nocase $host $read_host]} {
set read_location [join [lrange [split $line] 3 end]]
}
}
close $file
if {$read_location == ""} {
return 0
} else {
return $read_location
}
}
###
proc weather:getdata {chan location units num} {
global weather black
set wid [lindex $weather(nr_id) $num]
set weatherlink "http://api.weatherstack.com/current?access_key=${wid}&query=$location&units=m"
set ipq [http::config -useragent "lynx"]
set ipq [::http::geturl "$weatherlink" -timeout 10000]
set data [http::data $ipq]
::http::cleanup $ipq
return $data
}
###
proc weather:getjson {get data} {
global weather
set parse [::json::json2dict $data]
set return ""
foreach {name info} $parse {
if {[string equal -nocase $name $get]} {
set return $info
break;
}
}
return $return
}
###
proc weather:flood:prot {chan host} {
global weather
set number [scan $weather(flood_prot) %\[^:\]]
set timer [scan $weather(flood_prot) %*\[^:\]:%s]
if {[info exists weather(flood:$host:$chan:act)]} {
return 1
}
foreach tmr [utimers] {
if {[string match "*weather:remove:flood $host $chan*" [join [lindex $tmr 1]]]} {
killutimer [lindex $tmr 2]
}
}
if {![info exists weather(flood:$host:$chan)]} {
set weather(flood:$host:$chan) 0
}
incr weather(flood:$host:$chan)
utimer $timer [list weather:remove:flood $host $chan]
if {$weather(flood:$host:$chan) > $number} {
set weather(flood:$host:$chan:act) 1
utimer 60 [list weather:expire:flood $host $chan]
return 1
} else {
return 0
}
}
###
proc weather:expire:flood {host chan} {
global black weather
if {[info exists weather(flood:$host:$chan:act)]} {
unset weather(flood:$host:$chan:act)
}
}
###
proc weather:remove:flood {host chan} {
global black weather
if {[info exists weather(flood:$host:$chan)]} {
unset weather(flood:$host:$chan)
}
}
###
proc weather:get:flood_time {host chan} {
global weather
foreach tmr [utimers] {
if {[string match "*weather:expire:flood $host $chan*" [join [lindex $tmr 1]]]} {
return [lindex $tmr 0]
}
}
}
###
proc weather:test_alpha {string} {
global weather
set return 0
for {set i 0} {$i < [string length $string]} {incr i} {
set char [string index $string $i]
if {[regexp -all {[a-zA-Z0-9]} $char]} {
continue
} else {
set return 1
break;
}
}
return $return
}
###
set weather(projectName) "BlackWeather"
set weather(author) "BLaCkShaDoW"
set weather(website) "wWw.TCLScriptS.NeT"
set weather(email) "blackshadow\[at\]tclscripts.net"
set weather(version) "v1.2"
#http://wiki.tcl.tk/989
###
proc weather:wsplit {string sep} {
set first [string first $sep $string]
if {$first == -1} {
return [list $string]
} else {
set l [string length $sep]
set left [string range $string 0 [expr {$first-1}]]
set right [string range $string [expr {$first+$l}] end]
return [concat [list $left] [weather:wsplit $right $sep]]
}
}
###
proc weather:setlocation {nick host chan location} {
global black weather
set file [open $weather(user_file) "r"]
set timestamp [clock format [clock seconds] -format {%Y%m%d%H%M%S}]
set temp "weather_temp.$timestamp"
set tempwrite [open $temp w]
while {[gets $file line] != -1} {
set read_chan [lindex [split $line] 0]
set enc_chan [encoding convertfrom utf-8 $read_chan]
set read_host [lindex [split $line] 2]
if {[string equal -nocase $enc_chan $chan] && [string match -nocase $host $read_host]} {
continue
} else {
puts $tempwrite $line
}
}
close $tempwrite
close $file
file rename -force $temp $weather(user_file)
set file [open $weather(user_file) a]
puts $file "$chan $nick $host $location"
close $file
}
set grade_sign [encoding convertfrom "utf-8" "°"]
set black(weather.en.1) "\002%msg.1%\002 (%msg.2%) -- %msg.3% and %msg.4%$grade_sign C (%msg.5%$grade_sign F)"
set black(weather.en.2) "\002%msg.1%\002 (%msg.2%) -- %msg.3% and %msg.4%$grade_sign F"
set black(weather.en.3) "\002%msg.1%\002 (%msg.2%) -- \002%msg.4%\002, %msg.3%"
set black(weather.en.4) "\002%msg.1%\002 (%msg.2%) -- %msg.13% and %msg.3%$grade_sign C (%msg.15%$grade_sign F) | \002Feels Like\002: %msg.4%$grade_sign C (%msg.14%$grade_sign F) | \002Humidity\002: %msg.5%% | \002Wind\002: %msg.6% @ %msg.7% KPH | \002Pressure\002: %msg.8%mb | \002Clouds\002: %msg.9%% | \002Rainfall\002: %msg.12%% | \002UV Index\002: %msg.10% | \002Observation time\002: %msg.11%"
set black(weather.en.5) "\002%msg.1%\002 (%msg.2%) -- %msg.13% and %msg.3%$grade_sign F | \002Feels Like\002: %msg.4%$grade_sign F | \002Humidity\002: %msg.5%% | \002Wind\002: %msg.6% @ %msg.7% MPH | \002Pressure\002: %msg.8%in | \002Clouds\002: %msg.9%% | \002Rainfall\002: %msg.12%% | \002UV Index\002: %msg.10% | \002Observation time\002: %msg.11%"
set black(weather.en.6) "\002Error\002: %msg.1%"
set black(weather.en.7) "SYNTAX: \002%msg.1%w set <location,(m/f)>\002 to set one."
set black(weather.en.8) "\002%msg.1%\002: your default location saved as:\002 %msg.2%\002 with \002%msg.3%\002 unit."
set black(weather.en.9) "\002%msg.1%\002: no location found linked to your nick. To link one, use: \002%msg.2%w set <location,(m/f)>\002"
set black(weather.en.10) "SYNTAX: \002%msg.1%w <location>\002 to get the live weather."
set black(weather.en.11) "No location found linked to \002%msg.1%\002."
set black(weather.en.version) "\002$weather(projectName) $weather(version)\002 coded by\002 $weather(author)\002 ($weather(email)) --\002 $weather(website)\002"
putlog "\002$weather(projectName) $weather(version)\002 coded by\002 $weather(author)\002 ($weather(website)): Loaded & initialised.."
#######################
#######################################################################################################
### *** END OF BlackWeather TCL *** ###
#######################################################################################################
|
_________________ BLaCkShaDoW Production @ WwW.TclScripts.Net |
|
Back to top |
|
 |
play4free2 Voice

Joined: 23 Nov 2013 Posts: 34
|
Posted: Sun Jan 15, 2023 9:30 pm Post subject: |
|
|
BLaCkShaDoW I have been using your script for awhile and it just quit working. I tried this copy and still no replay from the bot. I would tell you what error I was getting in console, but unfortunately the server I am on has me firewalled from chatting with my bot. _________________
420-HIGHTIMES IRC Network |
|
Back to top |
|
 |
kthxbye Voice
Joined: 03 Jan 2023 Posts: 3
|
Posted: Mon Jan 16, 2023 2:22 am Post subject: |
|
|
play4free2 wrote: | I tried this copy and still no replay from the bot. |
Hi. Over the past month it's been indeed on and off a few times. Would suddenly stop reacting then 1-2 days later starts working again... |
|
Back to top |
|
 |
caesar Mint Rubber

Joined: 14 Oct 2001 Posts: 3767 Location: Mint Factory
|
Posted: Mon Jan 16, 2023 12:58 pm Post subject: |
|
|
You should consider getting the Standard package if you do more than the 250 requests / month that are in the free plan. _________________ Once the game is over, the king and the pawn go back in the same box. |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|