irctest/irctest/specifications.py

71 lines
1.7 KiB
Python

from __future__ import annotations
import enum
@enum.unique
class Specifications(enum.Enum):
RFC1459 = "RFC1459"
RFC2812 = "RFC2812"
IRCv3 = "IRCv3" # Mark with capabilities whenever possible
Ergo = "Ergo"
Ircdocs = "ircdocs"
"""Any document on ircdocs.horse (especially defs.ircdocs.horse),
excluding modern.ircdocs.horse"""
Modern = "modern"
@classmethod
def from_name(cls, name: str) -> Specifications:
name = name.upper()
for spec in cls:
if spec.value.upper() == name:
return spec
raise ValueError(name)
@enum.unique
class Capabilities(enum.Enum):
ACCOUNT_NOTIFY = "account-notify"
ACCOUNT_TAG = "account-tag"
AWAY_NOTIFY = "away-notify"
BATCH = "batch"
ECHO_MESSAGE = "echo-message"
EXTENDED_JOIN = "extended-join"
EXTENDED_MONITOR = "extended-monitor"
LABELED_RESPONSE = "labeled-response"
MESSAGE_TAGS = "message-tags"
MULTILINE = "draft/multiline"
MULTI_PREFIX = "multi-prefix"
SERVER_TIME = "server-time"
SETNAME = "setname"
STS = "sts"
@classmethod
def from_name(cls, name: str) -> Capabilities:
try:
return cls(name.lower())
except ValueError:
raise ValueError(name) from None
@enum.unique
class IsupportTokens(enum.Enum):
BOT = "BOT"
ELIST = "ELIST"
INVEX = "INVEX"
PREFIX = "PREFIX"
MONITOR = "MONITOR"
STATUSMSG = "STATUSMSG"
TARGMAX = "TARGMAX"
UTF8ONLY = "UTF8ONLY"
WHOX = "WHOX"
@classmethod
def from_name(cls, name: str) -> IsupportTokens:
try:
return cls(name.upper())
except ValueError:
raise ValueError(name) from None