2 Commits

Author SHA1 Message Date
eleksir
657090b5f7 Fix inconsistence of city name pick decision introduced in fa59102 2023-05-07 18:57:15 +03:00
eleksir
a0fd6faafc Introduce option country in config to use either country code or coordinates as secondary id for city.
Looks like openweathermap.org gives incorrect or mangled coutry codes for some cities for whatever reasons.
So we have to introduce this option in order to cool-down irritation of some engaging users.
2023-05-07 16:22:33 +03:00
2 changed files with 90 additions and 38 deletions

View File

@@ -26,6 +26,8 @@
"forwards_max" : 5, "forwards_max" : 5,
"openweathermap" : { "openweathermap" : {
# (For shitty political reasons) 0 - use coordinates instead of coutry code, 1 - use country codes
"country" : 0,
"appid" : "get_it_on_openweathermap.org" "appid" : "get_it_on_openweathermap.org"
}, },

View File

@@ -585,46 +585,96 @@ sub Weather {
if ($w) { if ($w) {
if ($w->{temperature_min} == $w->{temperature_max}) { if ($w->{temperature_min} == $w->{temperature_max}) {
$reply = sprintf ( if ($c->{openweathermap}->{country}) {
"Погода в городе %s, %s:\n%s, ветер %s %s м/c, температура %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст", $reply = sprintf (
$city, "Погода в городе %s, %s:\n%s, ветер %s %s м/c, температура %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст",
$w->{country}, $city,
ucfirst $w->{description}, $w->{country},
$w->{wind_direction}, ucfirst $w->{description},
$w->{wind_speed}, $w->{wind_direction},
$w->{temperature_min}, $w->{wind_speed},
$w->{temperature_feelslike}, $w->{temperature_min},
$w->{humidity}, $w->{temperature_feelslike},
$w->{pressure}, $w->{humidity},
); $w->{pressure},
);
} else {
$reply = sprintf (
"Погода в городе %s, (ш:%s, д:%s):\n%s, ветер %s %s м/c, температура %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст",
$city,
$g->{lat},
$g->{lon},
ucfirst $w->{description},
$w->{wind_direction},
$w->{wind_speed},
$w->{temperature_min},
$w->{temperature_feelslike},
$w->{humidity},
$w->{pressure},
);
}
} elsif ($w->{temperature_min} < 0 && $w->{temperature_max} <= 0) { } elsif ($w->{temperature_min} < 0 && $w->{temperature_max} <= 0) {
$reply = sprintf ( if ($c->{openweathermap}->{country}) {
"Погода в городе %s, %s:\n%s, ветер %s %s м/c, температура от %s до %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст", $reply = sprintf (
$w->{name}, "Погода в городе %s, %s:\n%s, ветер %s %s м/c, температура от %s до %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст",
$w->{country}, $city,
ucfirst $w->{description}, $w->{country},
$w->{wind_direction}, ucfirst $w->{description},
$w->{wind_speed}, $w->{wind_direction},
$w->{temperature_max}, $w->{wind_speed},
$w->{temperature_min}, $w->{temperature_max},
$w->{temperature_feelslike}, $w->{temperature_min},
$w->{humidity}, $w->{temperature_feelslike},
$w->{pressure}, $w->{humidity},
); $w->{pressure},
);
} else {
$reply = sprintf (
"Погода в городе %s, (ш:%s, д:%s):\n%s, ветер %s %s м/c, температура от %s до %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст",
$city,
$g->{lat},
$g->{lon},
ucfirst $w->{description},
$w->{wind_direction},
$w->{wind_speed},
$w->{temperature_max},
$w->{temperature_min},
$w->{temperature_feelslike},
$w->{humidity},
$w->{pressure},
);
}
} else { } else {
$reply = sprintf ( if ($c->{openweathermap}->{country}) {
"Погода в городе %s, %s:\n%s, ветер %s %s м/c, температура от %s до %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст", $reply = sprintf (
$w->{name}, "Погода в городе %s, %s:\n%s, ветер %s %s м/c, температура от %s до %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст",
$w->{country}, $city,
ucfirst $w->{description}, $w->{country},
$w->{wind_direction}, ucfirst $w->{description},
$w->{wind_speed}, $w->{wind_direction},
$w->{temperature_min}, $w->{wind_speed},
$w->{temperature_max}, $w->{temperature_min},
$w->{temperature_feelslike}, $w->{temperature_max},
$w->{humidity}, $w->{temperature_feelslike},
$w->{pressure}, $w->{humidity},
); $w->{pressure},
);
} else {
$reply = sprintf (
"Погода в городе %s, (ш:%s, д:%s):\n%s, ветер %s %s м/c, температура от %s до %s°C, ощущается как %s°C, относительная влажность %s%%, давление %s мм.рт.ст",
$city,
$g->{lat},
$g->{lon},
ucfirst $w->{description},
$w->{wind_direction},
$w->{wind_speed},
$w->{temperature_min},
$w->{temperature_max},
$w->{temperature_feelslike},
$w->{humidity},
$w->{pressure},
);
}
} }
} else { } else {
$reply = "Я не знаю, какая погода в $city"; $reply = "Я не знаю, какая погода в $city";