2929###
3030
3131from supybot import callbacks
32- from supybot .commands import *
32+ from supybot .commands import wrap
3333
3434try :
3535 from supybot .i18n import PluginInternationalization
3838except ImportError :
3939 # Placeholder that allows to run the plugin on a bot
4040 # without the i18n module
41- _ = lambda x : x
41+ def _ (text ):
42+ return text
43+
4244
4345try :
4446 from iso3166 import countries
4547except ImportError as ie :
4648 raise ImportError (f"Cannot import module: { ie } " )
4749
4850
51+ MAX_LOOKUP_LENGTH = 64
52+
53+
54+ def normalise_lookup (value ):
55+ """Normalise a country lookup value before querying iso3166."""
56+ lookup = str (value or "" ).strip ().lower ()
57+ if not lookup :
58+ raise ValueError ("Country code or name is required." )
59+ if len (lookup ) > MAX_LOOKUP_LENGTH :
60+ raise ValueError ("Country code or name is too long." )
61+ return lookup
62+
63+
64+ def lookup_country (value ):
65+ """Return alpha-2 code and country name for a safe lookup value."""
66+ lookup = normalise_lookup (value )
67+ try :
68+ country = countries .get (lookup )
69+ except KeyError :
70+ raise ValueError ("Unknown country code or name." )
71+ name = country [0 ]
72+ alpha2 = country [1 ]
73+ return alpha2 , name
74+
75+
4976class ISO (callbacks .Plugin ):
5077 """Convert alpha2 country codes to country name."""
5178
@@ -58,13 +85,10 @@ def country(self, irc, msg, args, code):
5885 Convert country name to alpha2 country codes.
5986 """
6087
61- code = code .lower ()
6288 try :
63- country = countries .get (code )
64- name = country [0 ]
65- alpha2 = country [1 ]
66- except KeyError as error :
67- raise callbacks .Error (f"{ error } unknown country code." )
89+ alpha2 , name = lookup_country (code )
90+ except ValueError as error :
91+ raise callbacks .Error (str (error ))
6892 irc .reply (f"{ alpha2 } { name } " , prefixNick = False )
6993
7094
0 commit comments