Files
zoitechat/docs/plugin-api-additions/names.md
T

1.1 KiB

Explicit IRC comparison keys

IRCName(text, context=None, casemapping=None, connection_id=None) is an immutable helper, not a str subclass. Construct it explicitly for dictionary/set keys; existing get_info/list/event values remain normal strings. Equality and hashing include the connection ID and captured casemapping, so identical-looking names on different connections are different keys. An IRCName never compares equal to a plain str. str(key) / key.text recover the spelling.

irc_casefold(text, casemapping='rfc1459') supports ascii, strict-rfc1459 and rfc1459. Only ASCII IRC characters fold; Unicode casefold would be incorrect. The new get_info('casemapping') reports the comparator actually used by core. Current master handles ASCII and RFC1459; this patch does not change its handling of advertised strict-rfc1459. An explicit mapping is available for scripts that need strict-rfc1459 independently. Keys capture their mapping so hashes stay stable; rebuild a collection if the connection's mapping changes.

seen = {zoitechat.IRCName('[SomeNick]')}
assert zoitechat.IRCName('{somenick}') in seen  # RFC1459 connection