Weather script for mIRC

Platform:  mIRC
Published  Dec 10, 2009
Updated  Oct 08, 2013


VERSION 5.0 AND UP NOTICE: Script now REQUIRES an API key. You must get your own key in order for you to use version 5.0 and up.
Go to and sign up for free. Follow the steps to create a API Key ID. When complete, Insert it into the code below in the 'Preparation' section set %wu_api
wundergoround is phasing out their old xml site and up to Version 4.0 held on as long as possible. The script has been updated to work with wundergrounds new API. I can not give out my API key due to the limit of hits my API key can take before billing gets involved. Sorry for the inconvenience.

Weather Bot Script. Does !WEATHER - !CURRENT - !FORECASTS - !ALERTS - !TIME - !ALMANAC WorldWide coverage.

I built a Weather bot script for that gets its data from site for mIRC. It allows the ability to get the weather, forecasts, alerts, and time from around the world.

I did see there was one for php but needed one for mIRC. only accepts US zipcodes, and there are users from across the world. This will work with US and outside zipcodes (ex: e2l1n5) or city and state (dallas,tx) or city,country (Sydney,AU or Sydney, Australia) and airports (LAX)

!w or !weather [zipcode|city,state|city,country|airport] = will return weather current conditions.
!current [zipcode|city,state|city,country|airport] = will return current conditions.
!forecast [zipcode|city,state|city,country|airport] = will give detailed 3 day forecast (for us)
!forecast5 [zipcode|city,state|city,country|airport] = will send 5 day forecast to $nick that requested. (to prevent chan flooding)
!alerts [zipcode|city,state|city,country|airport] = will tell you if there are any weather alerts in your area.
!alertinfo [zipcode|city,state|city,country|airport] = will send $nick the detailed report of alerts in said area
!time [zipcode|city,state|city,country|airport] = will return current time.

Script uses 1 socket for all above commands, but each command links to slightly different xml page.
It is setup right now to grab all the data from the xml page and set them to all to corresponding variables.(long list of if statements) To view what it returns, just comment out the unset %wu_* at the bottom of the script. execute the script (ex: !weather 90210) and then look at your variables.

on sockclose you will find a lot of $+ and $chr(##) actions. This is to squish the results together and to add items like °F ($chr(176),F) or I have spacers like -|- ($chr(45) $+ $chr(124) $+ $chr(45))
ex: msg %wu_chan %wu_full $+ : %wu_weather and $+(%wu_temp_f,$chr(176),F,$chr(40),%wu_temp_c,$chr(176),C,$chr(41))
gives you City,State: Overcast and 34°F(1°C)

Revisions noted in bottom of script ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;; weather underground for mIRC ;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;by eqrunner ;;v5.41;

- Go to and sign up for free.
- Follow the steps to create a API Key ID.
- When complete, Insert it into the code below in the 'Preperation' section set %wu_api

!w or !weather [zipcode|city,state|city,country|airport] = will return weather current conditions.
!current [zipcode|city,state|city,country|airport] = will return current conditions.
!forecast [zipcode|city,state|city,country|airport] = will give detailed 3 day forecast (for us)
!forecast[1-10] [zipcode|city,state|city,country|airport] = will send from 1 day up to 10 day forecast to $nick that requested. (to prevent chan flooding)
!alerts [zipcode|city,state|city,country|airport] = will tell you if there are any weather alerts in your area.
!alertinfo [zipcode|city,state|city,country|airport] = will send $nick the detailed report of alerts in said area
!time [zipcode|city,state|city,country|airport] = will return current time.
!almanac [zipcode|city,state|city,country|airport] = will return the record highs and lows.

Register - Each user can assign a default location with themself. So in the future they can use just the command ( !weather, or !forecast, or !alerts, etc)
![w|forecast|forecast5|alerts|alertinfo|time|current|almanac] REGISTER [zipcode|city,state|city,country|airport] = will link user to said default location
![w|forecast|forecast5|alerts|alertinfo|time|current|almanac] REGISTER [zipcode|city,state|city,country|airport] = will CHANGE users default if they already have registured.
![w|forecast|forecast5|alerts|alertinfo|time|current|almanac] REMOVE = will remove the users default location
User can use any of the !commands to registure. !weather register 90210, will work just as well as !time register 90210

-- HELP --
![w|forecast|forecast5|alerts|alertinfo|time|current|almanac] [?|help] = Will message user the list of above commands just as they are written.

-- Switch --
![w|forecast|forecast5|alerts|alertinfo|time|current|almanac] [ON|OFF] = Will turn the script ON or OFF. Currently only set for Ops only.

-- NOTES- -
Notes from wunderground:
We don't support old style abbreviations like Conn. for Connecticut, use CT
If you are searching for an international city, try the name of the country or province
Don't use provinces for non-us cities (ie: Vancouver, BC)
Zipcodes only work in Canada, UK and the US

on *:CONNECT: {
if ($hget(wu_reg) == $null) { hmake wu_reg 100 }
if ($isfile(wu_reg.dat)) { hload wu_reg wu_reg.dat }
if ($hget(wu_reg)) { hsave -o wu_reg wu_reg.dat }

on $*:INPUT:#: {
if ($regex($1,/^[!](w|weather|forecast|forecast5|alert|alerts|alertinfo|alertsinfo|time|current|almanac)/Si)) wunderground $1-

on $*:text:/^[!](w|weather|forecast|forecast5|alert|alerts|alertinfo|alertsinfo|time|current|almanac)/Si:#: {
wunderground $1-

; Preperation

alias wunderground {
unset %wu_*

;--- Preperation. Sets up all the variables needed for the script ---
set %wu_command $1
set %wu_2 $2
set %wu_location $2-
set %wu_3 $3
set %wu_3_long $3-
set %wu_nick $nick
set %wu_network $network
set %wu_chan $chan
set %wu_host

set %wu_api YourAPICodeGoesHere

;--- Registration Check. Checks to see if the $nick already has a 'default' location on file ---
if ($2 == $null) {
if ($hget(wu_reg,%wu_nick) != $null) {
set %wu_location $hget(wu_reg,%wu_nick)
if ($hget(wu_reg,%wu_nick) == $null) {
.notice $nick Please specify a location $1 [zipcode|city,state|city,country|airport]

;--- Modify Registration and Help and ON/OFF Switch ---
if ($2 != $null) {
if (%wu_2 == register) && (%wu_3 != $null) {
hadd -m wu_reg %wu_nick %wu_3_long
.notice %wu_nick You are now linked to %wu_3_long
set %wu_location $hget(wu_reg,%wu_nick)
;echo -s %wu_location
if (%wu_2 == remove) {
hdel wu_reg %wu_nick
.notice %wu_nick Your location association has been removed.
;;--- Checks to see if the $2 is an already registured nick. ----
if ($hget(wu_reg,%wu_2) != $null) {
set %wu_location $hget(wu_reg,%wu_2)
if (%wu_2 == ?) || (%wu_2 == help) {
;;;---Below is used to turn the script on or off, but only if user is an op of a channel ---

if (%wu_2 == on) || (%wu_2 == off) && (%wu_nick isop %wu_chan) {
if (%wu_2 == on) {
set $+(%,wunderground_,%wu_chan) ON
.notice %wu_nick !weather script is now ON
if (%wu_2 == off) {
set $+(%,wunderground_,%wu_chan) OFF
.notice %wu_nick !weather script is now OFF
} ;end of %wu_on/off

;--- Default for a channel ---
if ($2 == shoutdrive) && (%wu_network == iPocalypse) {
set %wu_location 90046
} ; end of Default for a channel

} ;end of ($2 != $null)

;--- Checks if wunderground is suppost to be OFF for the channel --
if ($($+(%,wunderground_,%wu_chan),2) == OFF) {

;---Command Prep. Checks command to see which data file it will be pulling from depending on command entered ---
;Reformats City, State to the corrected /State/City.xml

if ($chr(44) isin %wu_location) {
;set %wu_location_format $+(/,$remove($gettok(%wu_location,2,44),/,$gettok(%wu_location,1,44))
var %wu_location_city $replace($gettok(%wu_location,1,44),$chr(32),$chr(95))
var %wu_location_state $remove($gettok(%wu_location,2,44),$chr(32))
;echo -s %wu_location_city %wu_location_State
set %wu_address $+(/,%wu_location_state,/,%wu_location_city)

;echo -s %wu_address
if ($chr(44) !isin %wu_location) {
set %wu_address $replace(%wu_location,$chr(32),$chr(95))
;echo -s %wu_address

;-- Sets specific %wu_links depending on what is requested.

;-- Weather --
if (%wu_command == !w ) set %wu_command !weather
if (%wu_command == !weather) || (%wu_command == !current) || (%wu_command == !time) {
;Eample: set %wu_link $+(/api/154dfe245e155eee1/conditions/q/20721.xml)
set %wu_link $+(/api/,%wu_api,/conditions/q/,%wu_address,.xml)
;-- Forecast --
;- Below finds out if it is a !forecast or a !forecast[1-10]. If there is a number,
; then it strips the number and sets %wu_command back to !forecast5 so remainder of the code
; works. and creates a %wu_forecast_count to be used after the sock closes.

if ($left(%wu_command,9) == !forecast) {
if ($mid(%wu_command,10,0) > 0) {
set %wu_forecast_count $remove(%wu_command,!forecast)
; ^ removes !forecast, leaving only the number
if (%wu_forecast_count > 10) set %wu_forecast_count 10
; ^ If number is greater than 10. Changes it to 10. (no one wants 999 days of forecast)
set %wu_command !forecast5
; ^ resets %wu_command back to !forecast5 so the rest of the code works.

if (%wu_command == !forecast) || (%wu_command == !forecast5) {
set %wu_link $+(/api/,%wu_api,/forecast10day/q/,%wu_address,.xml)

;-- Alerts --
if (%wu_command == !alert) set %wu_command !alerts
if (%wu_command == !alertsinfo) set %wu_command !alertinfo
if (%wu_command == !alerts) || (%wu_command == !alertinfo) {
set %wu_link $+(/api/,%wu_api,/alerts/q/,%wu_address,.xml)
set %wu_a_count 0
;-- Almanac --
if (%wu_command == !almanac) {
set %wu_link $+(/api/,%wu_api,/almanac/q/,%wu_address,.xml)
sockopen wunderground %wu_host 80
;echo -s LINK: %wu_link


on *:sockopen:wunderground: {
sockwrite -n $sockname GET %wu_link HTTP/1.1
sockwrite -n $sockname Host: %wu_host
sockwrite -n $sockname $crlf



on *:sockread:wunderground: {
sockread %wu_temp
if ($regex(%wu_temp,/([[:xdigit:]]{2});/)) {
set %wu_temp $replace(%wu_temp,$+(&#x,$regml(1),;),$chr($base($regml(1),16,10)))
set %wu_temp $regsubex(%wu_temp,/[\46\43](\d+)\73/g,$chr(\1))
set %wu_temp $replacex(%wu_temp,&quot;,",&amp;lt;,<,&amp;rt;,>,&amp;deg;,°,&amp;,&)
if (<name> isin %wu_temp) && (%wu_name == $null) %wu_name = $remove(%wu_temp,<name>,</name>,$chr(9))

;checks for an error
if (<error> isin %wu_temp) set %wu_error Error
if (%wu_error == Error) && (<description> isin %wu_temp) {
set %wu_error_description $remove(%wu_temp,<description>,</description>,$chr(9))

if (<results> isin %wu_temp) set %wu_results ON
if (%wu_results == ON) {
if (<result> isin %wu_temp) inc %wu_result_count
if (<city> isin %wu_temp) set $+(%,wu_result_city,%wu_result_count) $remove(%wu_temp,<city>,</city>,$chr(9))
if (<state> isin %wu_temp) set $+(%,wu_result_state,%wu_result_count) $remove(%wu_temp,<state>,</state>,$chr(9))
if (<country_name> isin %wu_temp) set $+(%,wu_result_country_name,%wu_result_count) $remove(%wu_temp,<country_name>,</country_name>,$chr(9))



;set %wu_temp $regsubex(%wu_temp,/&#(\d+)\;/g,$chr(\1))
;echo -s %wu_temp

;--- Variables for Weather, Current and Time Command ---
if (%wu_command == !weather) || (%wu_command == !current) || (%wu_command == !time) {
; local info
if (<full> isin %wu_temp) && (%wu_full == $null) %wu_full = $remove(%wu_temp,<full>,</full>,$chr(9))
if (<city> isin %wu_temp) && (%wu_city == $null) %wu_city = $remove(%wu_temp,<city>,</city>,$chr(9))
if (<state> isin %wu_temp) && (%wu_state == $null) %wu_state = $remove(%wu_temp,<state>,</state>,$chr(9))
if (<state_name> isin %wu_temp) && (%wu_state_name == $null) %wu_state_name = $remove(%wu_temp,<state_name>,</state_name>,$chr(9))
if (<country> isin %wu_temp) && (%wu_country == $null) %wu_country = $remove(%wu_temp,<country>,</country>,$chr(9))
if (<country_iso3166> isin %wu_temp) && (%wu_country_iso3166 == $null) %wu_country_iso3166 = $remove(%wu_temp,<country_iso3166>,</country_iso3166>,$chr(9))
if (<zip> isin %wu_temp) && (%wu_zip == $null) %wu_zip = $remove(%wu_temp,<zip>,</zip>,$chr(9))
if (<latitude> isin %wu_temp) && (%wu_latitude == $null) %wu_latitude = $remove(%wu_temp,<latitude>,</latitude>,$chr(9))
if (<longitude> isin %wu_temp) && (%wu_longitude == $null) %wu_longitude = $remove(%wu_temp,<longitude>,</longitude>,$chr(9))
if (<elevation> isin %wu_temp) && (%wu_elevation == $null) %wu_elevation = $remove(%wu_temp,<elevation>,</elevation>,$chr(9))

;; NO LONGER if (<local_time> isin %wu_temp) %wu_local_time = $remove(%wu_temp,<local_time>,</local_time>,$chr(9))
if (<local_time_rfc822> isin %wu_temp) %wu_local_time_rfc822 = $remove(%wu_temp,<local_time_rfc822>,</local_time_rfc822>,$chr(9))

; current weather
if (<weather> isin %wu_temp) %wu_weather = $remove(%wu_temp,<weather>,</weather>,$chr(9))
if (<temperature_string> isin %wu_temp) %wu_temperature_string = $remove(%wu_temp,<temperature_string>,</temperature_string>,$chr(9))
if (<temp_f> isin %wu_temp) %wu_temp_f = $remove(%wu_temp,<temp_f>,</temp_f>,$chr(9))
if (<temp_c> isin %wu_temp) %wu_temp_c = $remove(%wu_temp,<temp_c>,</temp_c>,$chr(9))
if (<relative_humidity> isin %wu_temp) %wu_relative_humidity = $remove(%wu_temp,<relative_humidity>,</relative_humidity>,$chr(9))

; wind
if (<wind_string> isin %wu_temp) %wu_wind_string = $remove(%wu_temp,<wind_string>,</wind_string>,$chr(9))
if (<wind_dir> isin %wu_temp) %wu_wind_dir = $remove(%wu_temp,<wind_dir>,</wind_dir>,$chr(9))
if (<wind_degrees> isin %wu_temp) %wu_wind_degrees = $remove(%wu_temp,<wind_degrees>,</wind_degrees>,$chr(9))
if (<wind_mph> isin %wu_temp) %wu_wind_mph = $remove(%wu_temp,<wind_mph>,</wind_mph>,$chr(9))
if (<wind_gust_mph> isin %wu_temp) %wu_wind_gust_mph = $remove(%wu_temp,<wind_gust_mph>,</wind_gust_mph>,$chr(9))

if (<pressure_string> isin %wu_temp) %wu_pressure_string = $remove(%wu_temp,<pressure_string>,</pressure_string>,$chr(9))
if (<pressure_mb> isin %wu_temp) %wu_pressure_mb = $remove(%wu_temp,<pressure_mb>,</pressure_mb>,$chr(9))
if (<pressure_in> isin %wu_temp) %wu_pressure_in = $remove(%wu_temp,<pressure_in>,</pressure_in>,$chr(9))
if (<dewpoint_string> isin %wu_temp) %wu_dewpoint_string = $remove(%wu_temp,<dewpoint_string>,</dewpoint_string>,$chr(9))
if (<dewpoint_f> isin %wu_temp) %wu_dewpoint_f = $remove(%wu_temp,<dewpoint_f>,</dewpoint_f>,$chr(9))
if (<dewpoint_c> isin %wu_temp) %wu_dewpoint_c = $remove(%wu_temp,<dewpoint_c>,</dewpoint_c>,$chr(9))

if (<heat_index_string> isin %wu_temp) %wu_heat_index_string = $remove(%wu_temp,<heat_index_string>,</heat_index_string>,$chr(9))
if (<heat_index_f> isin %wu_temp) %wu_heat_index_f = $remove(%wu_temp,<heat_index_f>,</heat_index_f>,$chr(9))
if (<heat_index_c> isin %wu_temp) %wu_heat_index_c = $remove(%wu_temp,<heat_index_c>,</heat_index_c>,$chr(9))
if (<windchill_string> isin %wu_temp) %wu_windchill_string = $remove(%wu_temp,<windchill_string>,</windchill_string>,$chr(9))
if (<windchill_f> isin %wu_temp) %wu_windchill_f = $remove(%wu_temp,<windchill_f>,</windchill_f>,$chr(9))
if (<windchill_c> isin %wu_temp) %wu_windchill_c = $remove(%wu_temp,<windchill_c>,</windchill_c>,$chr(9))

if (<visibility_mi> isin %wu_temp) %wu_visibility_mi = $remove(%wu_temp,<visibility_mi>,</visibility_mi>,$chr(9))
if (<visibility_km> isin %wu_temp) %wu_visibility_km = $remove(%wu_temp,<visibility_km>,</visibility_km>,$chr(9))

;--- Variables for Forecast Command ---
if (%wu_command == !forecast) || (%wu_command == !forecast5) {
if (<simpleforecast> isin %wu_temp) set %wu_period 1
set %wu_temp $remove(%wu_temp,<![CDATA[,]]>)
if (<period> isin %wu_temp) set %wu_period $remove(%wu_temp,<period>,</period>,$chr(9),$chr(32))

;-- Detailed Forecast ---
if (%wu_command == !forecast) {
if (<title> isin %wu_temp) set $+(%,wu_df_title_,%wu_period) $remove(%wu_temp,<title>,</title>,$chr(9))
if (<fcttext> isin %wu_temp) set $+(%,wu_df_fcttext_,%wu_period) $remove(%wu_temp,<fcttext>,</fcttext>,$chr(9))
if (<fcttext_metric> isin %wu_temp) set $+(%,wu_df_fcttext_metric_,%wu_period) $remove(%wu_temp,<fcttext_metric>,</fcttext_metric>,$chr(9))
if (<pop> isin %wu_temp) set $+(%,wu_df_pop_,%wu_period) $remove(%wu_temp,<pop>,</pop>,$chr(9))
; pop = possibility of precipitation

;-- Simple Forecast ---
if (%wu_command == !forecast5) {
if (<simpleforecast> isin %wu_temp) set %wu_period 1
;-- ^ Resets %wu_period to 1 when entering the <simpleforecast> section
if (</forecastday> isin %wu_temp) inc %wu_period
;-- ^ Need the increase becasue the <period> is after the <weekday>

if (<weekday> isin %wu_temp) set $+(%,wu_sf_weekday_,%wu_period) $remove(%wu_temp,<weekday>,</weekday>,$chr(9))
if (<high> isin %wu_temp) set %wu_sf_temp high
if (<low> isin %wu_temp) set %wu_sf_temp low
if (<fahrenheit> isin %wu_temp) set $+(%,wu_sf_fahrenheit_,%wu_sf_temp,_,%wu_period) $+($remove(%wu_temp,<fahrenheit>,</fahrenheit>,$chr(9)),$chr(176),F)
if (<celsius> isin %wu_temp) set $+(%,wu_sf_celsius_,%wu_sf_temp,_,%wu_period) $+($remove(%wu_temp,<celsius>,</celsius>,$chr(9)),$chr(176),C)
if (<conditions> isin %wu_temp) set $+(%,wu_sf_conditions_,%wu_period) $remove(%wu_temp,<conditions>,</conditions>,$chr(9))

;--- Variables for Alerts Command ---
if (%wu_command == !alerts) || (%wu_command == !alertinfo) {
;echo -s %wu_temp
;set -n %wu_ac <alert count="
;-- Counts the amount of alerts.
if (<alert> isin %wu_temp) { inc %wu_a_i | inc %wu_a_count }

;-- Writes variables for each alert.
if (<type> isin %wu_temp) set $+(%,wu_a,%wu_a_i,_type) $remove(%wu_temp,<type>,</type>,$chr(9))
if (<description> isin %wu_temp) set $+(%,wu_a,%wu_a_i,_description) $remove(%wu_temp,<description>,</description>,$chr(9))
if (<date> isin %wu_temp) set $+(%,wu_a,%wu_a_i,_date) $remove(%wu_temp,<date>,</date>,$chr(9))
if (<expires> isin %wu_temp) set $+(%,wu_a,%wu_a_i,_expires) $remove(%wu_temp,<expires>,</expires>,$chr(9))
if (</message> isin %wu_temp) { set %wu_msg OFF | set $+(%,wu_a,%wu_a_i,_count) $(%wu_msg_c,2) | set %wu_msg_c 0 }
if (%wu_msg == ON) {
inc %wu_msg_gc
inc %wu_msg_c
set $+(%,wu_a,%wu_a_i,_message,%wu_msg_c) %wu_temp
if (<message> isin %wu_temp) { set %wu_msg ON }

;---- Variables for Almanac ----
if (%wu_command == !almanac) {
if (<airport_code> isin %wu_temp) {
set %wu_airport $remove(%wu_temp,<airport_code>,</airport_code>,$chr(9))
if (%wu_airport == $null) {
set %wu_almanac_error NotFound
sockclose wunderground
if (<temp_high> isin %wu_temp) set %wu_almanac_temp high
if (<temp_low> isin %wu_temp) set %wu_almanac_temp low
if (<normal> isin %wu_temp) set %wu_almanac_rate normal
if (<record> isin %wu_temp) set %wu_almanac_rate record
if (<F> isin %wu_temp) set $+(%,wu_almanac_,%wu_almanac_rate,_,%wu_almanac_temp,_F) $+($remove(%wu_temp,<F>,</F>,$chr(9)),$chr(176),F)
if (<C> isin %wu_temp) set $+(%,wu_almanac_,%wu_almanac_rate,_,%wu_almanac_temp,_C) $+($remove(%wu_temp,<C>,</C>,$chr(9)),$chr(176),C)
if (<recordyear> isin %wu_temp) set $+(%,wu_almanac_,%wu_almanac_temp,_year) $remove(%wu_temp,<recordyear>,</recordyear>,$chr(9))
;---- End of xml ----
if (</response> isin %wu_temp) {
; This is so at the end of the reading, it immedely closes the socket and moves on, instead of waiting for the connection to time out.
;echo -s ---- wunderground sockclose ----
sockclose wunderground


on *:sockclose:wunderground: {
; This section has been changed to an alias.



alias wu_sockclose {
;echo -s Result: wu_sockclose
;--- Spacers. Such as -|- | and -|
set %wu_space $+($chr(45),$chr(124),$chr(45))
set %wu_space2 $+($chr(32),$chr(124),$chr(32))
set %wu_spaceend $+($chr(45),$chr(124))

;--- Removes + sign from address variable
set %wu_address $replace(%wu_address,$chr(43),$chr(32))

; Error? Was there an error?
if (%wu_error == error) {
msg %wu_chan Error: %wu_error_description

if (%wu_results == ON) {
msg %wu_nick %wu_result_count Found. Please be more specific:
set %wu_results_int 1
while (%wu_results_int <= %wu_result_count) {
.timer 1 %wu_results_int .msg %wu_nick Option $+(%wu_results_int,$chr(58)) $+($($+(%,wu_result_city,%wu_results_int),2),$chr(44)) $+($($+(%,wu_result_state,%wu_results_int),2),$chr(46)) Country: $+(%,wu_result_country_name,%wu_results_int)
inc %wu_results_int
.timer 1 %wu_results_int wu_cleanup


if (%wu_command == !weather) {

msg %wu_chan %wu_full $+ : %wu_weather and $+(%wu_temp_f,$chr(176),F,$chr(47),%wu_temp_c,$chr(176),C)
if (%wu_command == !current) {
msg %wu_chan %wu_full $+ : %wu_weather and $+(%wu_temp_f,$chr(176),F,$chr(47),%wu_temp_c,$chr(176),C) $&
$+ %wu_space2 Heat Index: $+(%wu_heat_index_f,$chr(176),F,$chr(47),%wu_heat_index_c,$chr(176),C)$&
$+ %wu_space2 Winds %wu_wind_string $&
$+ %wu_space2 Windchill: $+(%wu_windchill_f,$chr(176),F,$chr(47),%wu_windchill_c,$chr(176),C) $&
$+ %wu_space2 Pressure: $+(%wu_pressure_in,in,$chr(47),%wu_pressure_mb,mb) $&
$+ %wu_space2 Humidity: %wu_relative_humidity $&
$+ %wu_space2 Dew: $+(%wu_dewpoint_f,$chr(176),F,$chr(47),%wu_dewpoint_c,$chr(176),C) $&
$+ %wu_space2 Visiblity: $+(%wu_visibility_mi,mi,$chr(47),%wu_visibility_km,km)
if (%wu_command == !time) {
; Military time format (Strait from the code):
msg %wu_chan %wu_full $+ : %wu_local_time_rfc822

; Standard time format (modified):
;Coming soon, maybe.


;To Start, Let see if the location accually exists:
if (%wu_command == !forecast) {
.timer 1 0 msg %wu_chan %wu_location $+ : %wu_df_title_0 $+ : %wu_df_fcttext_0 %wu_space %wu_df_title_1 $+ : %wu_df_fcttext_1
.timer 1 1 msg %wu_chan %wu_df_title_2 $+ : %wu_df_fcttext_2 %wu_space %wu_df_title_3 $+ : %wu_df_fcttext_3

if (%wu_command == !forecast5) {
;echo -s %wu_forecast_count

.timer 1 0 .msg %wu_nick Your forecast for %wu_location

set %wu_f_i 1
while (%wu_f_i <= %wu_forecast_count) {
; Setup variables
set %wu_sf_dow $($+(%,wu_sf_weekday_,%wu_f_i),2)
set %wu_sf_con $($+(%,wu_sf_conditions_,%wu_f_i),2)
set %wu_sf_fh $($+(%,wu_sf_fahrenheit_high_,%wu_f_i),2)
set %wu_sf_ch $($+(%,wu_sf_celsius_high_,%wu_f_i),2)
set %wu_sf_fl $($+(%,wu_sf_fahrenheit_low_,%wu_f_i),2)
set %wu_sf_cl $($+(%,wu_sf_celsius_low_,%wu_f_i),2)
; msg nick: DayOfWeek: CurrentCondition. High: 00°F(00°C) - Low: 00°F(00°C)
.timer 1 %wu_f_i .msg %wu_nick %wu_sf_dow $+ : %wu_sf_con $+ . High: $+(%wu_sf_fh,$chr(40),%wu_sf_ch,$chr(41)) - Low: $+(%wu_sf_fl,$chr(40),%wu_sf_cl,$chr(41))
inc %wu_f_i

if (%wu_command == !alerts) {
;echo -s --Start of alerts---
if (%wu_a_count == 0) msg %wu_chan %wu_location $+ : No Alerts
if (%wu_a_count > 0) {
msg %wu_chan %wu_location $+ : %wu_a_count Alerts
var %i 1
while (%i <= %wu_a_count) {
.timer 1 %i msg %wu_chan %wu_a_start $($+(%,wu_a,%i,_description),2) till $($+(%,wu_a,%i,_expires),2) %wu_a_end
inc %i
.timer 1 %i .notice %wu_nick use $chr(2) !alertinfo $chr(2) [zipcode|city,state|city,country|airport] for alert details
if (%wu_command == !alertinfo) {
if (%wu_a_count == 0) msg %wu_chan %wu_location $+ : No Alerts
if (%wu_a_count > 0) {
;msg %wu_chan %wu_location $+ : %wu_a_count Alerts - See PM for details
.timer 1 1 .msg %wu_nick %wu_location $+ : %wu_a_count Alerts
.timer 1 2 .msg %wu_nick Type STOP at any time to end.

set %wu_alert_total_alerts 1
; Used to count the while loops compaired to the origial totall of Alerts
; Aka, what Alert are we on.

set %wu_alert_timer_msgcount 3
; Used to tally the message count used for timers

while (%wu_alert_total_alerts <= %wu_a_count) { ;Is the tally of alerts less than or equal to the Total a_counts
;echo -s Total Alerts %wu_alert_total_alerts
set %wu_alert_alert_message 1

.timer 1 %wu_alert_timer_msgcount .msg %wu_nick $chr(2) $($+(%,wu_a,%wu_alert_total_alerts,_description),2) $chr(2) from $($+(%,wu_a,%wu_alert_total_alerts,_date),2) till $($+(%,wu_a,%wu_alert_total_alerts,_expires),2)
inc %wu_alert_timer_msgcount

while (%wu_alert_alert_message <= $($+(%,wu_a,%wu_alert_total_alerts,_count),2)) {
;echo -s Total Alert %wu_alert_total_alerts Messages %wu_alert_alert_message
$+(.,timer_wu_,%wu_nick,_,alert_,%wu_alert_total_alerts,_message,%wu_alert_alert_message) 1 %wu_alert_timer_msgcount .msg %wu_nick $($+(%,wu_a,%wu_alert_total_alerts,_message,%wu_alert_alert_message),2)

inc %wu_alert_alert_message
inc %wu_alert_timer_msgcount

inc %wu_alert_total_alerts
$+(.,timer_wu_,%wu_nick,_,alert_,%wu_alert_total_alerts,_message_End) 1 %wu_alert_timer_msgcount .msg %wu_nick --------- End of Alerts -------

if (%wu_command == !almanac) {
if (%wu_almanac_error == NotFound) && (%wu_name == $null) msg %wu_chan Location Not Found. Try location near an airport.
if (%wu_almanac_error == $null) && (%wu_name != $null) msg %wu_chan %wu_name Found. No data provided.

if (%wu_almanac_error == $null) && (%wu_name == $null) {
.timer 1 0 msg %wu_chan $+(%wu_airport,$chr(58)) Normal High: $+(%wu_almanac_normal_high_F,$chr(47),%wu_almanac_normal_high_C,$chr(46)) Normal Low: $+(%wu_almanac_normal_low_F,$chr(47),%wu_almanac_normal_low_C,$chr(46))
.timer 1 1 msg %wu_chan $+(%wu_airport,$chr(58)) Record High: $+(%wu_almanac_record_high_F,$chr(47),%wu_almanac_record_high_C) in %wu_almanac_high_year - Record Low: $+(%wu_almanac_record_low_F,$chr(47),%wu_almanac_record_low_C,) in %wu_almanac_low_year

;echo -s End-------- of WU $time --------



;--- Private Message ----
; -- If user requested !AlertsInfo, and wants to stop the long string of alerts. they can simply type STOP ---
on 1:OPEN:?:*stop*:{
$+(.,timer_wu_,$nick,$chr(42)) off
.msg $nick --------- Alerts Stopped -------



alias wu_help {
.timer 1 0 .msg %wu_nick $me $+ ' Weather Commands: (16 lines)
.timer 1 1 .msg %wu_nick !weather !current !forecast !forecast5 !alerts !alertinfo !time !almanac
.timer 1 2 .msg %wu_nick Use above commands with your desired location.
.timer 1 3 .msg %wu_nick !weather [zipcode|city,state|city,country|airport]
.timer 1 4 .msg %wu_nick Examples: !weather 90210 - !weather Beverly Hills, CA - !weather LAX - !weather E2J4C7
.timer 1 5 .msg %wu_nick You can also set a default location for yourself. Just type: !weather REGISTER [location]
.timer 1 6 .msg %wu_nick To remove from the list, simply type !weather REMOVE
.timer 1 7 .msg %wu_nick After you have registure, You can simply use !weather and it will bring up your default
.timer 1 8 .msg %wu_nick -----END OF WEATHER HELP -----

alias wu_cleanup {
;echo -s End-------- of WU $time --------
unset %wu_*

- Original creation

- Added !current command
- Unknown modifications (Did so many, I can't remember)

- Added REGISTER and HELP functions
- Fixed !forecast, !forecast5, !alerts !alertinfo Address still including + sign error.

- Added !weather ON and OFF command to turn the script on or off. (set for OPS ONLY)

- Modified !weather ON/OFF command. Now the ON and OFF commands are Per #channel basis. (allowing it to be on in one chan, but off in another

- Line 238, TOS line had changed. Updated $remove() to reflect new text.

- Local Support. Now Local user (mIRC client hosting the script) can also activate and use the script. .
- Fixed !w command. Now it works.

- New Format: Code now uses wunderground's API. YOU MUST HAVE AN API code in order for this to work.
- Various parts changed to accomidate the new API requirments. OLD stuff commented out and NEW stuff noted (For those who read the code)
- Current code uses CONDITIONS, FORECAST. But wunderground has more paramerters you can pull from not included in this code:
- Release to the public in Working order. But may still have bugs.
- Added line spacers to each section. (I kept getting lost, so I decided to add spacers for each section so I knew where I was in the code)
- Added !almanac for record highs and lows.
- Fixed !alerts, !alertinfo, Now works with new API platform
- Added STOP ablity to long !alertinfo. (Simply type STOP in the private message window)
- Fixed !forecast and !forecast5 to new API platform.
- Added !forecast[1-10] ablity. Now you can request up to 10 days of private messages. Instead of the default 5. Want 3 days? !forecast3. Want 10 days? !forecast10
- Fixed Spelling issue with forecast. (forEcast)
- Fixed Location Not Found to effect All commands. Added responce if city is found, but with out any information. Ex: ORD (Chicago-O'Hare International Airport)
- Fixed !almanac not responding to local input. Due to extra space on INPUT, If line.
- Adjusted !forecast $chan message. To include %wu_location
- Fixed !weather REMOVE command resulting in a /sockopen: insufficient parameters error.
- Fixed "Location Found, No results." Multiple locations are actually found, user is givin a list to choose from.
- Fixed !alertinfo From [Time] till [Time] glitch. (had old $right() from old xml that was removing text)
- Fixed !alertinfo Message timer glitch. Kept overwriting previous alert messages.
- Added script ULR to top of code for easy refference
- Changed Location Not Found to now output the error reported from wunderground



Sign in to comment.
tlchost   -  Apr 20, 2014
How can I modify the script so that all messages go to the nick, rather then the channel?

cptpan  -  Apr 21, 2014
Change instances of msg $chan to either notice $nick or msg $nick
tlchost  -  Apr 24, 2014
ah...the current version of the script doesn't seem to have those instances.
cptpan  -  Apr 26, 2014
Fuks me then. Soz
eqrunner  -  May 03, 2014
You can change all the "msg %wu_chan" to "msg %wu_nick" (Lines

Sign in to comment

anviska   -  Mar 15, 2014
Great script! thanks! I just have one problem. When I type i. e. "!w finland" and the bot PM's me all the available location, there is so much data coming in such a short time that Quakenet kills my bot for excess flood. What kind of flood settings I should have in mIRC to prevent this from happening or is there any script that would somehow make the locations come a bit slower?
Jibberish   -  Mar 10, 2014
This script has a major security flaw in the !w register command that leaves anyone running this open to possible attacks. Im not going into public detail about what is wrong with it so that this wont become a widely known flaw. the author can contact me for a better explanation, The exploit was tested several times on several different users and it does infact work
damaks   -  Feb 27, 2014
Hi, great script, but could you please make metric version? Than it would be prefect!
eqrunner  -  Mar 11, 2014
There is already metric in the script. if you comment out the 'unset' at the very bottom in the alias 'WUCLEANUP' . Run the script, and look at all the variables tab for all the available results. Then simply modify the msg %wu_chan Lines in the alias 'WU_SOCKCLOSE' to adapt to your likeing. A simple of change of things like "%wu_windchill_f" to "%wu_windchill_c", or "%wu_visibility_mi" to %wu_visibility_km" would work as a simple fix.

I do have intentions at some point to give an option in the beginning of the script to select Imperial or Metric as the 'primary.' But that would result in a lot of adjustment to the code. Along with each user who uses my code may have a different audience who lives in different locations. But I will keep this in mind. [As I write this, I could see my self adding to the !weather REGISTER function a way to also specify your preferred measurement scale. I will continue to ponder this one]
damaks  -  Mar 11, 2014
yes i have changed all eg. %wu_windchill_f to %wu_windchill_c" , and everything works great except !forecast . with that i cant do anything about, it always shows in imperial units
eqrunner  -  Mar 13, 2014
Forecast has it. You need to use the #wu_fcttext_metric variable.
damaks  -  Mar 14, 2014
thx! :)
Sign in to comment

cptpan   -  Feb 16, 2014
There are so many areas now that just result in:

WHATEVER Found. No data provided.
eqrunner  -  Feb 17, 2014
That is due to the site the script pulls from. It's api shows that the location exisits, but the site does not have any information from that location at all. Nothing that I can do on the script will fix this issue. Your users will just have to enter in a more populated/larger city.
cptpan  -  Feb 22, 2014
lol. It often happens for some of the biggest cities in the world.

Their API must be a piece of $hit then.
eqrunner  -  Feb 23, 2014
I can understand this being a big issue if it was in the states. But around the world, there are so many cities and countries around the world. And not all of the are connected to the internet 24/7. Or have sensors in those towns that are made public that can be accessed online.
Sign in to comment

chachin2009   -  Jan 16, 2014
I know i've asked this before.. and it was a loooong time ago and code has changed so much i cant find a way to do it.. so how can i have
<chachin> !fc amy is not my bot..
<Amy> Baytown, TX Forecast (High/Low) - Updated: 11:41 CST
<Amy> Thursday: Clear, 20/6°C (68/43°F)
<Amy> Friday: Clear, 18/3°C (64/37°F)
<Amy> Saturday: Clear, 20/8°C (68/46°F)

instead of all that stuff on pm do show 3 days only like that on chan instead of pm :) ty like always
rebel9  -  Jan 16, 2014
You can make it message a channel now.

Line 553:
.timer 1 %wu_f_i .msg %wu_nick %wu_sf_dow $+ : %wu_sf_con $+ . High: $+(%wu_sf_fh,$chr(40),%wu_sf_ch,$chr(41)) - Low: $+(%wu_sf_fl,$chr(40),%wu_sf_cl,$chr(41))

Change that to:
.timer 1 %wu_f_i .msg %wu_chan %wu_sf_dow $+ : %wu_sf_con $+ . High: $+(%wu_sf_fh,$chr(40),%wu_sf_ch,$chr(41)) - Low: $+(%wu_sf_fl,$chr(40),%wu_sf_cl,$chr(41))

You can also make it notice by changing .msg %wu_chan to .notice %wu_nick. This way it doesn't spam the channel when people !forecast3/4/5/6 etc and only you get the information, nobody else cares about what your weather is going to do for 5 days in your area.
Sign in to comment

chachin2009   -  Dec 08, 2013
what about instead of posting Heat Index: NA°F/NA°C or cold index na make it so it hides it when you do .current to make it look clean or shorter since its not there why bother having heat or cold depending on weather :)
ovelayer  -  Dec 08, 2013
well it works for me when it is 0 and we have a windchill factor like now its -2
Sign in to comment

TerrapinStaion   -  Nov 25, 2013
eqrunner, Perhaps the script could be ported to or even yahoo weather. As was bought out by the weather channel. The weather channel is believe it or not a very bias reporting weather network. They are bias on reporting weather news on the cities on the east coast almost exclusively. Even if its just a half inch of rain their going to receive or 3 inches of snow. This is a catastrophe for the east coast cities according to the Weather Channel. Also weather network and website WeatherNation "" founded by world founded by world famous meteorologist from Minnesota Paul Douglas would also be another excellent source.
eqrunner  -  Nov 26, 2013
@TerrapinStaion The buyout was over 18 months ago and has not affected the wundergound script that I have created. The Weather Channel may be opinionated to be biast, but the script above is not. What The Weather Channel reports on has no effect on the wunderground script as the individual user requests the info they want. I have looked at and in the past but neither of them support an API platform on which the script now runs on. Yahoo Weather API does not contain all the additional features that wunderground supports. Hence the reason why I have stuck with wunderground as the source.
Sign in to comment

Wizardkat   -  Nov 12, 2013
What are the chances of adding a Celsius to Fahrenheit converter and vice versa to the script? Something like !convert 15F or !convert 15C
eqrunner  -  Nov 12, 2013
Odds are stacked against you. If you are looking for the script to spit out Celsius answers, you can always modify the msg $chan section, as there are Celsius variables availble (%wu_temp_c, %wu_dewpoint_c, %wu_heat_index_c, %wu_windchill_c, etc) This weather script is not intended to do conversions.

Might I suggest you search above for a temperature converter script, or post a request in the forums

(after doing a little searching) I can suggest or That is a simple script you can use.
Sign in to comment

morte   -  Nov 05, 2013
Sorry, I am new here and thought I screwed something up and posted something that is not at all relevant to this script.
chachin2009   -  Nov 04, 2013
Hey eqrunner could you be cool and come to #chick3n to help me out with a script? :P
RIcko   -  Oct 24, 2013
In spite of the on INPUT and on TEXT issues, I'm getting this error each time I typ !weather or !forecast:

(Oct-Fri-25|4:30:04|am) <~Ricko> !weather Florida
[my bot's status window]: * /sockopen: 'wunderground' socket in use (line 224, Weather-Script-2.ini)
blackvenomm666  -  Oct 24, 2013
On your bot type /sockclose wunderground then try using it again
Sign in to comment

^WeSt   -  Oct 09, 2013
LOL have a look here:

<westor> !wow
-RafaeLLa-v2- Please specify a location !wow [zipcode|city,state|city,country|airport]
* /sockopen: insufficient parameters (line 224, script4.ini)
<westor> !what-a-fark
-RafaeLLa-v2- Please specify a location !what-a-fark [zipcode|city,state|city,country|airport]
* /sockopen: insufficient parameters (line 224, script4.ini)
<westor> !w
-RafaeLLa-v2- Please specify a location !w [zipcode|city,state|city,country|airport]
* /sockopen: insufficient parameters (line 224, script4.ini)
eqrunner  -  Oct 09, 2013
Yup, this is a problem I still haven't been able to get right. It is in the on INPUT and on TEXT part. For some reason, because of the w| part. If I add a space w |. It doesn't work. But if is just the w|. I t will respond to all W related things.
^WeSt  -  Oct 11, 2013
This is an several bug , into my bot i have a lot of !w.... commands so you must find a way to fix this, try an other way and not the regex.
^WeSt  -  Oct 11, 2013
Also the problem is not only in !weather and on the other commands:


eqrunner  -  Oct 11, 2013
I am unable to recreate your issue. Other than !forecast. But I will keep an eye on this.

For now, just remove the W from the on text and on input section.
^WeSt  -  Oct 11, 2013
Ok but i don't know why this is happening.
rebel9  -  Oct 20, 2013

on $*:text:/^[!](weather|forecast|forecast5|alert|alerts|alertinfo|alertsinfo|time|current|almanac)? /Si:#: {
wunderground $1-
} A simple ? after the (weather|forecast|etc|)? /Si: <--will fix the issue.
eqrunner  -  Oct 23, 2013
@rebel9 That works for the onTEXT. But not for the onINPUT
rebel9  -  Oct 23, 2013
on $*:INPUT:#: {
if ($regex($1,/^[!](weather|forecast|forecast5|alert|alerts|alertinfo|alertsinfo|time|current|almanac)? /Si)) wunderground $1-
This doesnt work? If not try almanac)? \w+$/Si))
Sign in to comment

chachin2009   -  Oct 08, 2013
Yo eqrunner. SO i went and try to do the code change so i can use . instead of ! so the bot doesn't interfere with the other bot i have that uses !w for other stuff but that one bot is'nt mine so i can't do nothing about it and im not op to kick the that bot :P so i went for the lines 47 to 53 then try to go down to 130 to 131 or whatever but couldnt find the rest so Im stuck on 47 to 53.. if you wanna be cool to help me once again.. you're just too awesome. thanks anyways :)
eqrunner  -  Oct 09, 2013
Let me simplify that for you. Change the following: (Lines 55 thru 58)

This is just changing the ! to a .

And add this code right below the APIKEY area (Insert at line 88)

This will solve all your problems. This allows you to use .weather .time .forecast etc. But once the script is started. It internally changes it back to !weather !time !forecast, etc. So that the rest of the code works.
chachin2009  -  Oct 10, 2013
wow just wow this is so much better.. thank you man.. like always you're just too awesome :)
Sign in to comment

^WeSt   -  Oct 08, 2013
The 5.4 version has an bug into the !weather command, i use !weather Athens, Greece with my SAME api key but the resault is location not found i had a backup of 5.3 and i restore it and i use !weather Athens, Greece and the resaults were correct, so please re-check the 5.4 version!
^WeSt  -  Oct 08, 2013

I use all commands (with no parameters) => * /sockopen: insufficient parameters (line 224, script4.ini)

Also all commands are not working on me => Location not found

Also one suggestion to add BOLD on output messages, or an %wu_bold option to enable/disable it!

- Thanks!
eqrunner  -  Oct 08, 2013
-You have me stumped on this one. Line 224 is the sockopen command. And nothing has changed with that.

-I have changed 5.41 to now show the error from the info. Try running this and send me back what errors you are recieving.
-If I was to add a bold option, Which part of the messages would I be bolding?
^WeSt  -  Oct 08, 2013
Well before when i c/p the new code (5.4) without changing my KEY and using !weather AXD it said me that Location not found now when i c/p the new (5.41) have done the same told me that i have wrong key setted, ( I HAVE NOTHING CHANGED )

Anyway without changing nothing when i set the new KEY it was working good into the 5.41 version.

Now about the BOLD i mean something like this:

!weather AXD
[<b>westor</b>]: Athens, Greece: <b>Scattered Clodes</b> and <b>69.6°F/20.9°C</b>

and the error messages too: [<b>westor</b>]: Error, this key does not exist!
^WeSt  -  Oct 08, 2013
Also in v5.41 i found some problems:

(08/Oct/2013 20:10:15) <@westor> !almanac AXD
(08/Oct/2013 20:10:19) <@RafaeLLa-v2> LGAL: Normal High: 70°F/21°C. Normal Low: 54°F/12°C.
(08/Oct/2013 20:10:20) <@RafaeLLa-v2> LGAL: Record High: / in - Record Low: / in

(08/Oct/2013 21:10:47) <@westor> !current Bah, India
(08/Oct/2013 21:10:48) <@RafaeLLa-v2> Bah, India: and 81°F/27°C | Heat Index: 82°F/28°C | Winds From the West at 6 MPH | Windchill: NA°F/NA°C | Pressure: in/mb | Humidity: 69% | Dew: 70°F/21°C | Visiblity: mi/km

(08/Oct/2013 21:10:16) <@westor> !w RUP
(08/Oct/2013 21:10:17) <@RafaeLLa-v2> Rupsi, India: and 73°F/23°C

(08/Oct/2013 21:10:42) <@westor> !time RUP
(08/Oct/2013 21:10:48) <@RafaeLLa-v2> Rupsi, India: Tue, 08 Oct 2013 23:39:50 +0530

(08/Oct/2013 21:10:15) <@westor> !almanac RUP
(08/Oct/2013 21:10:18) <@RafaeLLa-v2> Location Not Found. Try location near an airport.

(08/Oct/2013 22:10:11) <@westor> !w Athens
(08/Oct/2013 22:10:13) <RafaeLLa-v2> 19 Found. Please be more specific:
(08/Oct/2013 22:10:14) <RafaeLLa-v2> Option 1: Athens, AL. Country:
(08/Oct/2013 22:10:15) <RafaeLLa-v2> Option 2: Athens, AR. Country:
(08/Oct/2013 22:10:16) <RafaeLLa-v2> Option 3: Athens, CA. Country:
(08/Oct/2013 22:10:17) <RafaeLLa-v2> Option 4: Athens, GA. Country:
(08/Oct/2013 22:10:18) <RafaeLLa-v2> Option 5: Athens, . Country:
(08/Oct/2013 22:10:19) <RafaeLLa-v2> Option 6: Athens, IL. Country:
(08/Oct/2013 22:10:20) <RafaeLLa-v2> Option 7: Athens, IN. Country:
(08/Oct/2013 22:10:21) <RafaeLLa-v2> Option 8: Athens, LA. Country:
(08/Oct/2013 22:10:22) <RafaeLLa-v2> Option 9: Athens, ME. Country:
(08/Oct/2013 22:10:24) <RafaeLLa-v2> Option 10: Athens, MI. Country:
(08/Oct/2013 22:10:24) <RafaeLLa-v2> Option 11: Athens, MO. Country:
(08/Oct/2013 22:10:25) <RafaeLLa-v2> Option 12: Athens, NY. Country:
(08/Oct/2013 22:10:26) <RafaeLLa-v2> Option 13: Athens, OH. Country:
(08/Oct/2013 22:10:27) <RafaeLLa-v2> Option 14: Athens, PA. Country:
(08/Oct/2013 22:10:28) <RafaeLLa-v2> Option 15: Athens, TN. Country:
(08/Oct/2013 22:10:29) <RafaeLLa-v2> Option 16: Athens, TX. Country:
(08/Oct/2013 22:10:31) <RafaeLLa-v2> Option 17: Athens, VT. Country:
(08/Oct/2013 22:10:32) <RafaeLLa-v2> Option 18: Athens, WV. Country:
(08/Oct/2013 22:10:32) <RafaeLLa-v2> Option 19: Athens, WI. Country:

(08/Oct/2013 22:10:08) <@westor> !w Greece
(08/Oct/2013 22:10:54) <RafaeLLa-v2> 55 Found. Please be more specific:
(08/Oct/2013 22:10:55) <RafaeLLa-v2> Option 1: Agrinion, . Country:
(08/Oct/2013 22:10:56) <RafaeLLa-v2> Option 2: Aktion, . Country:
(08/Oct/2013 22:10:57) <RafaeLLa-v2> Option 3: Alexandroupoli, . Country:
(08/Oct/2013 22:10:58) <RafaeLLa-v2> Option 4: Aliartos, . Country:
eqrunner  -  Oct 08, 2013
!almanac: There are empty slots, this is due to there is no information provided by wunderground (aka items don't exisit) I will see what I can do about "IF $null" type items. It will take a while as there is a lot of extra code to check "is there an variable| If so then send message| If not, then don't'

!current: Same thing. It is hard enough to get it to complete the entire msg %wu_chan portion. Let alone, checking in advance if it even exists. Same applies to metric vs imperial. I want to do something about it. There just adds in a long list of additional IF/Then statement I will need to add.

!almanac RUS: Simular issue I had before. There are multiple resuts for RUP when it comes to the almanac page. These things are unexpected, and hard to test every s location around. The almanac data is also very sparce an usually is only from a airport data log. In this case, RUP in almanac shows two results, even thou in !time it knows which one. This is unpredictable, but will keep this in mind.

!weather Athens, and !weather Greece. A City and State or City and Country is needed. Since you didn't specify, you got a response page with all the options. I will look at redoing this so you don't end up with 55+ messages. Testing from my side, it does say "Option 1: Agrinion, . Country: Greece" Not sure why yours does not. But it is listing all the parts of Greece that you can use.
^WeSt  -  Oct 09, 2013
Ok with the others i have just reported because i saw them.

Now about the !weather Athens command if you can see in the output display of 19 items does not say the Country: ?? this output message must be fixed, also the same with the !w Greece .

- Thanks!
Sign in to comment

eqrunner   -  Oct 07, 2013
Version 5.4 Posted with a small list of fixes to glitches.

For those who are asking. The old NON-API version is now posted here. [url] [/url] Posted for reference purposes only. No support will be available for that script.
chachin2009  -  Oct 07, 2013
no matter what location I give it.. it says " Location not found " :( yes on 5.4
eqrunner  -  Oct 08, 2013
I made a small adjustment and posted 5.41. It no longer says "Location Not Found", But will spit back the error that the site gives. Location not found, is now "No cities matched your search query"
Try it with your issue, and tell me what the error is that comes back. I wonder if it is "this key does not exisit" which means your API key was entered in wrong.
chachin2009  -  Oct 08, 2013
woo 5.41 fixed it :D keep up the good job man you're awesome thanks for your work :)
Sign in to comment

^WeSt   -  Oct 06, 2013
There is an bug when i use : !weather ZIPCODE

e.g: !weather 19200

return me an error: * /sockopen: insufficient parameters (line 237, script4.ini)

also one more bug is:

e.g: !w REMOVE

NOTICE ME: Your location association has been removed.

but return me an error: * /sockopen: insufficient parameters (line 237, script4.ini)
Chromatic  -  Oct 06, 2013
Hrmm.. not sure what is going on. However, recently I had to upgrade and modify my code since an API key is now required for OAUTHentication...

I have a solidly working weather script from EQrunner -- It is somewhere on here, but I am just going to paste the code I use that I know works.. You can find it here:

Just note you will need to put your own API key in where it is denoted in the script -- you have to sign up as the script directs in the notation to obtain your key.. it takes 2 minutes to do. Hope this helps.
Sign in to comment

cptpan   -  Sep 28, 2013
I have updated the script to the above and still get 'Location not found' for !weather and !current
cptpan  -  Sep 28, 2013
fark. Just read I need to register or whatever.
cptpan  -  Sep 28, 2013
Now I'm getting: Location found. No data provided. (Replacing 'location' with whatever location was used in search)
eqrunner  -  Oct 03, 2013
Go down to line 593 and comment out the unset. Run the command. Then look at your variables. Your results should look like this:

Try a more common location and see if it still does the same. Your location may not be available.
cptpan  -  Oct 04, 2013
Some locations work, others don't. But there are places that are so large they should have data (ie, some major cities have 'No data' and some VERY small towns do).
eqrunner  -  Oct 05, 2013
Can you specify what towns you are mentioning? I might be able to look at them and see if there is something else that may be a fault.
cptpan  -  Oct 07, 2013
[18:00] <@Me> !weather yorkshire
[18:00] <Bot> Yorkshire Found. No data provided.
eqrunner  -  Oct 07, 2013
@cptpan This is because you are not specifying the State. If you look at the xml page: You will see that there are two locations listed. Same if you searched it directly on wunderground ( ) It is asking for which location. NY or OH. But let me see what I can do about adding this option as a feature.

Update: New v5.4 code posted. It will now notify you if your request has multiple results.
cptpan  -  Oct 08, 2013
[11:19] <me> !weather wollongong new south wales australia
[11:19] <bot> Wollongong Found. No data provided.

The weird thing is it returns weather for nearby locations that are MUCH smaller than Wollongong.
Sign in to comment

zland   -  Sep 26, 2013
About a week and a half ago version 4.1 stopped working for me, which IIRC it uses the "free" and uncapped Wunderground API, yet I have a web application that utilizes the same free API and that still works. What caused the old script to mess up?

I know you probably don't support it anymore, but I just don't want to have to deal with the hassle of Wunderground's capped API.
eqrunner  -  Sep 26, 2013
The xml pages became un reliable. Along with how mIRC handles reading webpages. For example, the sockopen section. I go through a lot of testing to get the "sockwrite -n $sockname GET %wu_link HTTP/1.1" Section to work correctly. Some use XML/1.0, or XML/1.1. or in this case HTTP/1.1 vs 1.0. And some times it is not needed. Your other app may work fine because it reads the sock differently vs how mIRC reads it. I don't know the specifics, but mIRC can be extremely finicky on how it reads webpages. And wunderground was beginning to kick back more errors, hence why I changed to the API version.

I will try and look back at the old and see if I can get something to work. I found more options and capabilities in the API. (like almanac)
zland  -  Sep 26, 2013
Ah, that makes sense. Btw, this is unrelated to my first comment, but I caught a bug, and this is with calling up alerts. No time is specified, and instead just shows "T".

[9/26/2013 4:36:30pm] <WeatherBot> 33592: 1 Alerts
[9/26/2013 4:36:32pm] <WeatherBot> Coastal Hazard Statement till T on September 26, 2013
Sign in to comment

eqrunner   -  Sep 16, 2013
I guess everything is working with no issues as there are no new comments. I will keep updating as I expand and improve the script.
incognitus  -  Sep 17, 2013
Hey Eqrunner,

Is it me or !alerts and !alertinfo stopped working? I cant trigger both commands anymore. Can you check that?

Thanks man, keep up the good work!
DragonHeart  -  Sep 20, 2013
@eqrunner - I keep getting the 'Location not found' even after updating to the lastest script and restarting bot.
eqrunner  -  Sep 20, 2013
@incognitus !alerts and !alertinfo apear to be working fine. Not sure what could be causing your glitch.

@DragonHeart I was having that same problem with one of the nicks registered with the bot on my end. It wasn't until they re-registured a different location, that it worked fine. If this happens, send comment out the unset at the bottom and send me your %wu_link variable (with api key removed/changed) And I will look to see what might be influencing it.
DragonHeart  -  Sep 21, 2013
@eqrunner: got it, thanks. Somehow my API key had an extra character. Think OE (operator error :))
Truk  -  Sep 30, 2013
This is my Fav script and most used on my bot - thanks for you work on this!
Sign in to comment

Snakey   -  Sep 06, 2013
EQ.. Could just be me but registering a location doesnt "stay" in the script after a reboot.

Is hadd -m meant to write the variables to a file or table someplace? I'm presuming a hashtable but for some reason any times I had to reboot script, re-registering is required.
eqrunner  -  Sep 06, 2013
hadd is a hash table. That is what keeps track of the registration. (a lot faster than reading/writing to a txt file).
The on:connect and on:disconnect actions occur so that when you disconnect from a server, it will write the hashtable to a wu_reg.dat file in your local directory. When you start up your mIRC client, the on:connect will first create a hash table (hmake) unless one already exisits. Then will read the wu_reg.dat file and put that info into the hash table.

As to why it is not working on yours could be a bunch of issues. First. The action occurs when you Connect and Disconnect from a server. Not when you close and open the program. Second. The file saved goes in the local directory folder of mIRC. Maybe there is a computer OS administration based issue not allowing mIRC to write the file.

I use to manage my scripts in mIRC. You might want to try it, to see if it is correctly recording the registration. Then disconnect and see if it writes the file wu_reg.dat

The registration part has not changed since v 3.2. Only change was around line 117. Where the script now will allow other users to !weather [Friendsnick] and bring up their forecast. Aka, anyone can use the registered users nick's to find their weather. (it use to be only the $nick that registered their own location could, and anyone else would get a 'location not found)
Sign in to comment

Snakey   -  Sep 05, 2013
Cheers for replying to me on Twitter, I didn't see the update otherwise lol.
So glad you updated the code!! Seems like wunderground forced your hand after all. Downloaded and will attempt it tomorrow. Truly appreciate all your help and work dude
ovelayer  -  Sep 05, 2013
i would like to second the cheers part lovin the new code!
you might wanna think about adding flood protection maybe like a 6 sec delay for a user
i noticed a user can use !forecast5 then to !forecast4 so quickly they both flood together..just a thought for you next update
keep up the great work!
Sign in to comment

ovelayer   -  Aug 29, 2013
when i do !forecast5 i get this
[4:27pm] <Bong> : . High: °F(°C) - Low: °F(°C)
[4:27pm] <Bong> : . High: °F(°C) - Low: °F(°C)
[4:27pm] <Bong> : . High: °F(°C) - Low: °F(°C)
[4:27pm] <Bong> : . High: °F(°C) - Low: °F(°C)
[4:27pm] <Bong> : . High: °F(°C) - Low: °F(°C)
[4:27pm] <Bong> : . High: °F(°C) - Low: °F(°C)
i installed the api just fine
chachin2009  -  Aug 29, 2013
Same here...
eqrunner  -  Aug 30, 2013
Yup. I hadn't tested that function before posting. It will be in my next release.
ovelayer  -  Aug 30, 2013
Nice thanks.
like the !almanac feature great job
chachin2009  -  Aug 30, 2013
thanks eqrunner you're awesome :)
eqrunner  -  Aug 30, 2013
v5.2 Fixes the !forecast5 (just posted)
Wizardkat  -  Aug 30, 2013
very nice updates, Although I'm getting no response from the !almanac command. Any ideas?
ovelayer  -  Aug 30, 2013
almanac works here..
all of the other commands work for you?
Wizardkat  -  Aug 30, 2013
All other commands work yes, but for whatever reason !almanac doesn't
Wizardkat  -  Sep 03, 2013
Let me correct my statement, it works for everyone but me.
eqrunner  -  Sep 03, 2013
My only guess is that you have copied and pasted my weather script on to the same remote.ini script page as everything else in your mIRC program. And that something else that has !alm... is before my weather script and thus sees that command first and never gets down to mine.
Open up your scripts editor window. Make sure you have the [Remote] tab selected. Then go to File/New. Copy and paste my script there. Then File/Save as... wunderground.ini. And remove it from the other page. View/Remote.ini.
Try that and see if it works. This seperates my script from any other scripts you may have running.
Wizardkat  -  Sep 04, 2013
I tried what you said but still no luck. I have no other !alm... commands. this is strange.
eqrunner  -  Sep 04, 2013
@Wizardkat I sent you a message. see your inbox and we can try to work this out.
eqrunner  -  Sep 04, 2013
As mentioned in @Wizardkat, the remedy to his issue was I had an extra space after "|almanac )" in line 57. (on Input response). That has now been fixed for v5.3.
My bad, hope that didn't cause to many people to much pain.
Sign in to comment

chachin2009   -  Aug 29, 2013
how do you go about adding the API key? and wtf is this.. I need to have a website to have an api key? man this script has gone from simple to utter difficult :P
eqrunner  -  Aug 30, 2013
Sorry for the discomfort the API key stuff is causing. You can just enter in random information or leave it blank. That is what I did. I can't help the fact wunderground is phasing out the old xml pages I use to reference from. Only adapt.
Sign in to comment

Ryahn   -  Aug 28, 2013
I had this working somehow and now I came back a day later and the !w location doesnt work. But everything else does
Kilim  -  Aug 29, 2013
Same problem here, seems as though something changed on weather underground's side, hoping for an update soon!
Ryahn  -  Aug 29, 2013
Hopefully, its been a year since the last update
eqrunner  -  Aug 29, 2013
I am still attentive, even thou it has been over a year since the last update. (Why fix something that is not broken). I too am getting the same issue on my end. [strike]I will see what I can do to resolve this.[/strike]
Updated version for the new wunderground API has been posted. See the read me at the top of the code before continuing.
Wizardkat  -  Aug 29, 2013
Works! thank you :)
Wizardkat  -  Aug 29, 2013
can't get !almanac to work here
Wizardkat  -  Aug 29, 2013
Also is it possible to show !time as standard and nonstandard (military), I've noticed also that !alerts and alertinfo aren't working. Thanks for all your hard work.
Sign in to comment

chachin2009   -  Nov 16, 2012
suddenly the script stopped working :( there's no response from bot.
chachin   -  Oct 07, 2012
MEH I couldn't figure out why the thing you said to change didn't work for me.. I'll just leave my script as is with !
eqrunner   -  Sep 30, 2012

Similar to what I did for @bladerunner

chachin   -  Sep 29, 2012
How would i go about changing the comands from ! to .?
eqrunner   -  Sep 05, 2012
@Bladerunner I suppose. I know exactly what you are asking. Problem with wunderground. They don't have an 'error' line. So I am going to have to make something up. Something that looks at the variable and if $null, will reply to the user that the location is wrong.
I will look at that when I get the chance.
Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.