egghelp.org community Forum Index
[ egghelp.org home | forum home ]
egghelp.org community
Discussion of eggdrop bots, shell accounts and tcl scripts.
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

BlackWeather.tcl - display metric+fahrenheit in the output

 
Post new topic   Reply to topic    egghelp.org community Forum Index -> Script Requests
View previous topic :: View next topic  
Author Message
kthxbye
Voice


Joined: 03 Jan 2023
Posts: 3

PostPosted: Tue Jan 03, 2023 3:50 am    Post subject: BlackWeather.tcl - display metric+fahrenheit in the output Reply with quote

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
View user's profile Send private message
simo
Revered One


Joined: 22 Mar 2015
Posts: 1027

PostPosted: Tue Jan 03, 2023 5:09 am    Post subject: Reply with quote

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
View user's profile Send private message
kthxbye
Voice


Joined: 03 Jan 2023
Posts: 3

PostPosted: Tue Jan 03, 2023 5:36 am    Post subject: Reply with quote

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 Smile
Back to top
View user's profile Send private message
BLaCkShaDoW
Op


Joined: 11 Jan 2009
Posts: 117
Location: Romania

PostPosted: Tue Jan 03, 2023 9:06 am    Post subject: Reply with quote

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
View user's profile Send private message Send e-mail Visit poster's website
play4free2
Voice


Joined: 23 Nov 2013
Posts: 34

PostPosted: Sun Jan 15, 2023 9:30 pm    Post subject: Reply with quote

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
View user's profile Send private message Visit poster's website
kthxbye
Voice


Joined: 03 Jan 2023
Posts: 3

PostPosted: Mon Jan 16, 2023 2:22 am    Post subject: Reply with quote

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
View user's profile Send private message
caesar
Mint Rubber


Joined: 14 Oct 2001
Posts: 3767
Location: Mint Factory

PostPosted: Mon Jan 16, 2023 12:58 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    egghelp.org community Forum Index -> Script Requests All times are GMT - 4 Hours
Page 1 of 1

 
Jump to:  
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


Forum hosting provided by Reverse.net

Powered by phpBB © 2001, 2005 phpBB Group
subGreen style by ktauber