|
14 | 14 | Callable,
|
15 | 15 | Coroutine,
|
16 | 16 | Dict,
|
| 17 | + Final, |
17 | 18 | List,
|
18 | 19 | Optional,
|
19 | 20 | Sequence,
|
@@ -46,6 +47,9 @@ class SASLMechanism(IntEnum):
|
46 | 47 | EXTERNAL = auto()
|
47 | 48 |
|
48 | 49 |
|
| 50 | +_CAP_LIST_MIN_PARAMS: Final = 3 # CAP <subcmd> :a b c |
| 51 | + |
| 52 | + |
49 | 53 | async def _internal_ping(conn: "IrcProtocol", message: "Message") -> None:
|
50 | 54 | conn.send(f"PONG {message.parameters}")
|
51 | 55 |
|
@@ -130,7 +134,7 @@ async def _internal_cap_handler(
|
130 | 134 | raise ValueError(msg)
|
131 | 135 |
|
132 | 136 | caplist: List[Cap] = []
|
133 |
| - if len(message.parameters) > 2: |
| 137 | + if len(message.parameters) > (_CAP_LIST_MIN_PARAMS - 1): |
134 | 138 | caplist = CapList.parse(message.parameters[-1])
|
135 | 139 |
|
136 | 140 | if message.parameters[1] == "LS":
|
@@ -248,6 +252,8 @@ def __init__(
|
248 | 252 | sasl_mech: Optional[SASLMechanism] = None,
|
249 | 253 | logger: Optional["Logger"] = None,
|
250 | 254 | loop: Optional["AbstractEventLoop"] = None,
|
| 255 | + *, |
| 256 | + max_lag: float = 60, |
251 | 257 | ) -> None:
|
252 | 258 | """Create protocol for IRC connection.
|
253 | 259 |
|
@@ -275,6 +281,7 @@ def __init__(
|
275 | 281 | self.sasl_mech = SASLMechanism(sasl_mech or SASLMechanism.NONE)
|
276 | 282 | self.logger = logger
|
277 | 283 | self.loop = loop or asyncio.get_event_loop()
|
| 284 | + self.max_lag = max_lag |
278 | 285 |
|
279 | 286 | if self.sasl_mech == SASLMechanism.PLAIN and self.sasl_auth is None:
|
280 | 287 | msg = "You must specify sasl_auth when using SASL PLAIN"
|
@@ -333,7 +340,7 @@ async def pinger(self) -> None:
|
333 | 340 | msg = "Server not set in ping handler"
|
334 | 341 | raise ValueError(msg)
|
335 | 342 |
|
336 |
| - if self.server.lag > 60: |
| 343 | + if self.server.lag > self.max_lag: |
337 | 344 | self.loop.create_task(self.connect())
|
338 | 345 | else:
|
339 | 346 | self.send(f"PING :LAG{time.time()}")
|
|
0 commit comments