Handle room topic events.
This commit is contained in:
parent
ae8aba1a3c
commit
e0ca75b56a
1 changed files with 50 additions and 0 deletions
|
@ -19,6 +19,7 @@ from builtins import str
|
||||||
|
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
from matrix.globals import W
|
from matrix.globals import W
|
||||||
|
|
||||||
|
@ -140,6 +141,8 @@ class RoomInfo():
|
||||||
membership_events.append(RoomInfo._membership_from_dict(event))
|
membership_events.append(RoomInfo._membership_from_dict(event))
|
||||||
elif event["type"] == "m.room.power_levels":
|
elif event["type"] == "m.room.power_levels":
|
||||||
other_events.append(RoomPowerLevels.from_dict(event))
|
other_events.append(RoomPowerLevels.from_dict(event))
|
||||||
|
elif event["type"] == "m.room.topic":
|
||||||
|
other_events.append(RoomTopicEvent.from_dict(event))
|
||||||
|
|
||||||
return (membership_events, other_events)
|
return (membership_events, other_events)
|
||||||
|
|
||||||
|
@ -367,3 +370,50 @@ class RoomPowerLevels(RoomEvent):
|
||||||
def execute(self, server, room, buff, tags):
|
def execute(self, server, room, buff, tags):
|
||||||
level_func = partial(self._set_power_level, room, buff)
|
level_func = partial(self._set_power_level, room, buff)
|
||||||
map(level_func, self.power_levels)
|
map(level_func, self.power_levels)
|
||||||
|
|
||||||
|
|
||||||
|
class RoomTopicEvent(RoomEvent):
|
||||||
|
|
||||||
|
def __init__(self, event_id, sender, age, topic):
|
||||||
|
self.topic = topic
|
||||||
|
RoomEvent.__init__(self, event_id, sender, age)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_dict(cls, event_dict):
|
||||||
|
event_id = sanitize_id(event_dict["event_id"])
|
||||||
|
sender = sanitize_id(event_dict["sender"])
|
||||||
|
age = sanitize_age(event_dict["unsigned"]["age"])
|
||||||
|
|
||||||
|
topic = sanitize_text(event_dict["content"]["topic"])
|
||||||
|
|
||||||
|
return cls(event_id, sender, age, topic)
|
||||||
|
|
||||||
|
def execute(self, server, room, buff, tags):
|
||||||
|
topic = self.topic
|
||||||
|
|
||||||
|
nick, color_name = sender_to_nick_and_color(room, self.sender)
|
||||||
|
|
||||||
|
author = ("{nick_color}{user}{ncolor}").format(
|
||||||
|
nick_color=W.color(color_name), user=nick, ncolor=W.color("reset"))
|
||||||
|
|
||||||
|
# TODO print old topic if configured so
|
||||||
|
message = ("{prefix}{nick} has changed "
|
||||||
|
"the topic for {chan_color}{room}{ncolor} "
|
||||||
|
"to \"{topic}\"").format(
|
||||||
|
prefix=W.prefix("network"),
|
||||||
|
nick=author,
|
||||||
|
chan_color=W.color("chat_channel"),
|
||||||
|
ncolor=W.color("reset"),
|
||||||
|
room=strip_matrix_server(room.alias),
|
||||||
|
topic=topic)
|
||||||
|
|
||||||
|
tags = ["matrix_topic", "log3", "matrix_id_{}".format(self.event_id)]
|
||||||
|
|
||||||
|
date = date_from_age(self.age)
|
||||||
|
|
||||||
|
W.buffer_set(buff, "title", topic)
|
||||||
|
W.prnt_date_tags(buff, date, ",".join(tags), message)
|
||||||
|
|
||||||
|
room.topic = topic
|
||||||
|
room.topic_author = self.sender
|
||||||
|
room.topic_date = datetime.fromtimestamp(date_from_age(self.age))
|
||||||
|
|
Loading…
Add table
Reference in a new issue