Handle dicts in power level event, improve sorting
This commit is contained in:
parent
7d7376a5cf
commit
9674bf6a84
@ -5,7 +5,7 @@ import logging as log
|
|||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from html import escape
|
from html import escape
|
||||||
from typing import TYPE_CHECKING, Optional, Tuple, Union
|
from typing import TYPE_CHECKING, Dict, Optional, Tuple, Union
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
|
|
||||||
import nio
|
import nio
|
||||||
@ -343,6 +343,10 @@ class NioCallbacks:
|
|||||||
|
|
||||||
# Event formatting
|
# Event formatting
|
||||||
|
|
||||||
|
changes = []
|
||||||
|
event_changes = []
|
||||||
|
user_changes = []
|
||||||
|
|
||||||
def lvl(level: int) -> str:
|
def lvl(level: int) -> str:
|
||||||
return (
|
return (
|
||||||
f"Admin ({level})" if level == 100 else
|
f"Admin ({level})" if level == 100 else
|
||||||
@ -350,20 +354,36 @@ class NioCallbacks:
|
|||||||
f"User ({level})"
|
f"User ({level})"
|
||||||
)
|
)
|
||||||
|
|
||||||
changes = []
|
def format_defaults_dict(
|
||||||
event_changes = []
|
levels: Dict[str, Union[int, dict]],
|
||||||
user_changes = []
|
previous: Dict[str, Union[int, dict]],
|
||||||
|
prefix: str = "",
|
||||||
|
) -> None:
|
||||||
|
for name, level in levels.items():
|
||||||
|
if not prefix and name in ("users", "events"):
|
||||||
|
continue
|
||||||
|
|
||||||
# Default levels changes
|
if isinstance(level, dict):
|
||||||
|
prev = previous.get(name, {})
|
||||||
|
|
||||||
for default, level in ev.source["content"].items():
|
if not isinstance(prev, dict):
|
||||||
if default in ("users", "events"):
|
prev = {}
|
||||||
continue
|
|
||||||
|
|
||||||
old = previous.get(default, levels.defaults.users_default)
|
format_defaults_dict(level, prev, f"{prefix}{name}.")
|
||||||
|
continue
|
||||||
|
|
||||||
if level != old or not previous:
|
default_0 = ("users_default", "events_default", "invite")
|
||||||
changes.append(f"{default} | {lvl(old)} | {lvl(level)}")
|
old = previous.get(
|
||||||
|
name, 0 if not prefix and name in default_0 else 50,
|
||||||
|
)
|
||||||
|
|
||||||
|
if not isinstance(old, int):
|
||||||
|
old = 50
|
||||||
|
|
||||||
|
if level != old or not previous:
|
||||||
|
changes.append((f"{prefix}{name}", old, level))
|
||||||
|
|
||||||
|
format_defaults_dict(ev.source["content"], previous)
|
||||||
|
|
||||||
# Minimum level to send event changes
|
# Minimum level to send event changes
|
||||||
|
|
||||||
@ -390,12 +410,18 @@ class NioCallbacks:
|
|||||||
# Gather and format changes
|
# Gather and format changes
|
||||||
|
|
||||||
if changes or event_changes or user_changes:
|
if changes or event_changes or user_changes:
|
||||||
|
changes.sort(key=lambda c: (c[2], c[0]))
|
||||||
|
changes_lines = [
|
||||||
|
f"{name} | {lvl(old)} | {lvl(now)}"
|
||||||
|
for name, old, now in changes
|
||||||
|
]
|
||||||
|
|
||||||
co = HTML_PROCESSOR.from_markdown("\n".join([
|
co = HTML_PROCESSOR.from_markdown("\n".join([
|
||||||
"%1 changed the room's permissions:",
|
"%1 changed the room's permissions",
|
||||||
"",
|
"",
|
||||||
"Change | Previous | Current ",
|
"Change | Previous | Current ",
|
||||||
"--- | --- | ---",
|
"--- | --- | ---",
|
||||||
*sorted(changes),
|
*changes_lines,
|
||||||
*sorted(event_changes),
|
*sorted(event_changes),
|
||||||
*sorted(user_changes),
|
*sorted(user_changes),
|
||||||
]))
|
]))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user