# HG changeset patch # User Matti Hamalainen # Date 1612433792 -7200 # Node ID 90da5691cc8178a49e3690b8514e2f73016cd325 # Parent 76d19fa28753781c0d814f53761ea89d85576065 weather: Use new command matching. diff -r 76d19fa28753 -r 90da5691cc81 config.weather.example --- a/config.weather.example Thu Feb 04 12:15:54 2021 +0200 +++ b/config.weather.example Thu Feb 04 12:16:32 2021 +0200 @@ -22,6 +22,18 @@ set weather_cmd_name "!saa" +# Sub-command name regexp patterns +array set weather_commands { + "help" {^(\?|help|apua)$} + "stations" {^(stations|asemat)$} + "nearest" {^(lahin|lähin|lähin|closest|nearest)$} + "default" {^(vakiot?|defaults?)$} + "alias" {^(alias)$} + "unalias" {^(unalias)$} + "list" {^(list|listaa?)$} +} + + ### ### Settings ### diff -r 76d19fa28753 -r 90da5691cc81 weather.tcl --- a/weather.tcl Thu Feb 04 12:15:54 2021 +0200 +++ b/weather.tcl Thu Feb 04 12:16:32 2021 +0200 @@ -291,6 +291,12 @@ } +proc weather_cmd_match { uid ustr } { + global weather_commands + return [utl_cmd_match weather_commands $uid $ustr] +} + + #------------------------------------------------------------------------- proc weather_cmd {unick $uhost uhand uchan uargs upublic} { global weather_default_locations weather_data weather_max_results weather_aliases @@ -300,14 +306,13 @@ set rarglist [::textutil::split::splitx $uargs {\s+}] set rcmd [lindex $rarglist 0] - if {$rcmd == "?" || $rcmd == "help" || $rcmd == "apua"} { + if {[weather_cmd_match "help" $rcmd]} { + # Show help foreach ukey $weather_messages(help_full) { weather_msg $upublic $unick $uchan $ukey } return 1 - } - - if {$rcmd == "asemat" || $rcmd == "stations"} { + } elseif {[weather_cmd_match "stations" $rcmd]} { # List stations/locations matching the given pattern if {[llength $rarglist] < 2} { weather_msg $upublic $unick $uchan "help_stations" @@ -335,7 +340,7 @@ weather_msg $upublic $unick $uchan "stations_list" [list $res] return 1 - } elseif {$rcmd == "lahin" || $rcmd == "lähin" || $rcmd == "closest" || $rcmd == "nearest"} { + } elseif {[weather_cmd_match "nearest" $rcmd]} { # List stations nearest to given coordinates set qargs [join [lrange $rarglist 1 end] ""] if {![regexp {@?(\d+|\d+\.\d+|\.\d+)\s*,\s*(\d+|\d+\.\d+|\.\d+)} $qargs -> d_lat d_lng]} { @@ -373,7 +378,7 @@ set res [join $uresult " ; "] weather_msg $upublic $unick $uchan "nearest_stations" [list $d_lat $d_lng $res] return 1 - } elseif {$rcmd == "vakio" || $rcmd == "default" || $rcmd == "vakiot" || $rcmd == "defaults"} { + } elseif {[weather_cmd_match "default" $rcmd]} { # List or set the default weather station name patterns for this user # Access check @@ -403,7 +408,7 @@ } } return 1 - } elseif {$rcmd == "alias"} { + } elseif {[weather_cmd_match "alias" $rcmd]} { # Alias a string to another, only certain users have access (+n flag) if {![utl_valid_user $uhand] || ![matchattr $uhand n]} { weather_msg $upublic $unick $uchan "no_access" @@ -430,7 +435,7 @@ weather_save_aliases return 1 - } elseif {$rcmd == "unalias"} { + } elseif {[weather_cmd_match "unalias" $rcmd]} { # Remove one alias, only certain users have access (+n flag) if {![utl_valid_user $uhand] || ![matchattr $uhand n]} { weather_msg $upublic $unick $uchan "no_access" @@ -454,7 +459,7 @@ weather_save_aliases return 1 - } elseif {$rcmd == "list"} { + } elseif {[weather_cmd_match "list" $rcmd]} { # List all currently defined aliases set ulist {} set ulistitem [weather_qm "alias_item"]