ircrobots/ircrobots/params.py

70 lines
1.6 KiB
Python
Raw Normal View History

2020-09-25 18:03:02 +00:00
from typing import List, Optional
from dataclasses import dataclass, field
class SASLParams(object):
mechanism: str
@dataclass
class _SASLUserPass(SASLParams):
username: str
password: str
class SASLUserPass(_SASLUserPass):
mechanism = "USERPASS"
class SASLSCRAM(_SASLUserPass):
mechanism = "SCRAM"
class SASLExternal(SASLParams):
mechanism = "EXTERNAL"
@dataclass
class STSPolicy(object):
created: int
port: int
duration: int
preload: bool
2020-04-25 18:30:36 +00:00
@dataclass
class ResumePolicy(object):
address: str
token: str
@dataclass
class ConnectionParams(object):
nickname: str
host: str
port: int
2020-04-03 08:50:30 +00:00
tls: bool
username: Optional[str] = None
realname: Optional[str] = None
bindhost: Optional[str] = None
2020-04-13 18:10:02 +00:00
password: Optional[str] = None
2020-04-03 08:50:30 +00:00
tls_verify: bool = True
2020-04-02 21:43:34 +00:00
sasl: Optional[SASLParams] = None
2020-04-25 18:30:36 +00:00
sts: Optional[STSPolicy] = None
resume: Optional[ResumePolicy] = None
reconnect: int = 10 # seconds
alt_nicknames: List[str] = field(default_factory=list)
2020-09-25 18:03:02 +00:00
autojoin: List[str] = field(default_factory=list)
@staticmethod
def from_hoststring(
nickname: str,
hoststring: str
) -> "ConnectionParams":
host, _, port_s = hoststring.strip().partition(":")
if port_s.startswith("+"):
tls = True
port_s = port_s.lstrip("+") or "6697"
elif not port_s:
tls = False
port_s = "6667"
return ConnectionParams(nickname, host, int(port_s), tls)