Merge pull request #115 from Olaroll/weather-pattern-fix

Fix weather pattern matching regression
This commit is contained in:
Spicy Marinara
2026-01-17 21:15:06 +01:00
committed by GitHub
+33 -75
View File
@@ -105,90 +105,48 @@ function getCurrentTime() {
return null;
}
// Patterns for specific weather conditions (order matters - combined effects first)
// Grouped by languages for easy editing
const WEATHER_PATTERNS_BY_LANGUAGE = {
en: [
{ id: "blizzard", patterns: [ "blizzard" ] }, // Snow + Wind
{ id: "storm", patterns: [ "storm", "thunder", "lightning" ] }, // Rain + Lightning
{ id: "wind", patterns: [ "wind", "breeze", "gust", "gale" ] },
{ id: "snow", patterns: [ "snow", "flurries" ] },
{ id: "rain", patterns: [ "rain", "drizzle", "shower" ] },
{ id: "mist", patterns: [ "mist", "fog", "haze" ] },
{ id: "sunny", patterns: [ "sunny", "clear", "bright" ] },
{ id: "none", patterns: [ "cloud", "overcast", "indoor", "inside" ] },
],
ru: [
{ id: "blizzard", patterns: [ "метель" ] },
{ id: "storm", patterns: [ "гроза", "буря", "шторм" ] },
{ id: "wind", patterns: [ "ветер", "ветрено", "ветерок", "бриз", "легкий бриз", "слегка ветрено", "легкий ветер", "шквал,буря" ] },
{ id: "snow", patterns: [ "снег", "снегопад" ] },
{ id: "rain", patterns: [ "дождь", "морось", "ливень" ] },
{ id: "mist", patterns: [ "мгла", "туман", "туманно" ] },
{ id: "sunny", patterns: [ "солнечно", "ясно", "ярко", "ясное утро", "ясный день" ] },
{ id: "none", patterns: [ "облачно", "пасмурно", "в помещении", "внутри" ] },
],
}
/**
* Parse weather text to determine effect type
*/
function parseWeatherType(weatherText) {
if (!weatherText) return 'none';
if (!weatherText) return "none";
const text = weatherText.toLowerCase();
const weather_en = new Map([
["blizzard", "blizzard"],
["storm", "storm,thunder,lightning"],
["wind", "wind,breeze,gust,gale"],
["snow", "snow,flurries"],
["rain", "rain,drizzle,shower"],
["mist", "mist,fog,haze"],
["sunny", "sunny,clear,bright"],
["none", "cloud,overcast,indoor,inside"],
]);
for (const language of Object.values(WEATHER_PATTERNS_BY_LANGUAGE)) {
for (const { id, patterns } of language) {
if (patterns.some(p => text.includes(p))) {
return id;
}
}
}
const weather_ru = new Map([
["blizzard", "метель"],
["storm", "гроза,буря,шторм"],
[
"wind",
"ветер,ветрено,ветерок,бриз,легкий бриз,слегка ветрено,легкий ветер,шквал,буря",
],
["snow", "снег,снегопад"],
["rain", "дождь,морось,ливень"],
["mist", "мгла,туман,туманно"],
["sunny", "солнечно,ясно,ярко,ясное утро,ясный день"],
["none", "облачно,пасмурно,в помещении,внутри"],
]);
// Check for specific weather conditions (order matters - check combined effects first)
if (
weather_en.get("blizzard").includes(text) ||
weather_ru.get("blizzard").includes(text)
) {
return "blizzard"; // Snow + Wind
}
if (
weather_en.get("storm").includes(text) ||
weather_ru.get("storm").includes(text)
) {
return "storm"; // Rain + Lightning
}
if (
weather_en.get("wind").includes(text) ||
weather_ru.get("wind").includes(text)
) {
return "wind";
}
if (
weather_en.get("snow").includes(text) ||
weather_ru.get("snow").includes(text)
) {
return "snow";
}
if (
weather_en.get("rain").includes(text) ||
weather_ru.get("rain").includes(text)
) {
return "rain";
}
if (
weather_en.get("mist").includes(text) ||
weather_ru.get("mist").includes(text)
) {
return "mist";
}
if (
weather_en.get("sunny").includes(text) ||
weather_ru.get("sunny").includes(text)
) {
return "sunny";
}
if (
weather_en.get("none").includes(text) ||
weather_ru.get("none").includes(text)
) {
return "none";
}
return "none";
}
/**