+ @property
+ def illegal_nick_firstchars(self) -> str:
+ 'Calculated from hardcoded constants and .isupports.'
+ return (ILLEGAL_NICK_CHARS + ILLEGAL_NICK_FIRSTCHARS
+ + self.chan_prefixes + self.membership_prefixes)
+
+ @property
+ def chan_prefixes(self) -> str:
+ 'Registered possible channel name prefixes.'
+ return self.isupports['CHANTYPES'] or ISUPPORT_DEFAULTS['CHANTYPES']
+
+ @property
+ def membership_prefixes(self) -> str:
+ 'Registered possible membership nickname prefixes.'
+ prefix = self.isupports['PREFIX'] or ISUPPORT_DEFAULTS['PREFIX']
+ toks = prefix.split(')', maxsplit=1)
+ assert len(toks) == 2
+ assert toks[0][0] == '('
+ return toks[1]
+