|
9 | 9 | from bots.matrix import client
|
10 | 10 | from bots.matrix.client import bot
|
11 | 11 | from bots.matrix.info import client_name
|
12 |
| -from bots.matrix.message import MessageSession, FetchTarget |
| 12 | +from bots.matrix.message import MessageSession, FetchTarget, ReactionMessageSession |
13 | 13 | from core.builtins import PrivateAssets, Url
|
14 | 14 | from core.logger import Logger
|
15 | 15 | from core.parser.message import parser
|
@@ -50,36 +50,45 @@ async def on_room_member(room: nio.MatrixRoom, event: nio.RoomMemberEvent):
|
50 | 50 | Logger.info(f"Left empty room {room.room_id}")
|
51 | 51 |
|
52 | 52 |
|
53 |
| -async def on_message(room: nio.MatrixRoom, event: nio.RoomMessageFormatted): |
| 53 | +async def on_message(room: nio.MatrixRoom, event: nio.Event): |
54 | 54 | if event.sender != bot.user_id and bot.olm:
|
55 | 55 | for device_id, olm_device in bot.device_store[event.sender].items():
|
56 | 56 | if bot.olm.is_device_verified(olm_device):
|
57 | 57 | continue
|
58 | 58 | bot.verify_device(olm_device)
|
59 | 59 | Logger.info(f"trust olm device for device id {event.sender} -> {device_id}")
|
60 |
| - if event.source['content']['msgtype'] == 'm.notice': |
| 60 | + if isinstance(event, nio.RoomMessageFormatted) and event.source['content']['msgtype'] == 'm.notice': |
61 | 61 | # https://spec.matrix.org/v1.7/client-server-api/#mnotice
|
62 | 62 | return
|
63 | 63 | is_room = room.member_count != 2 or room.join_rule != 'invite'
|
64 | 64 | target_id = room.room_id if is_room else event.sender
|
65 | 65 | reply_id = None
|
66 | 66 | if 'm.relates_to' in event.source['content'] and 'm.in_reply_to' in event.source['content']['m.relates_to']:
|
67 | 67 | reply_id = event.source['content']['m.relates_to']['m.in_reply_to']['event_id']
|
| 68 | + |
68 | 69 | resp = await bot.get_displayname(event.sender)
|
69 | 70 | if isinstance(resp, nio.ErrorResponse):
|
70 | 71 | Logger.error(f"Failed to get display name for {event.sender}")
|
71 | 72 | return
|
72 | 73 | sender_name = resp.displayname
|
73 | 74 |
|
74 |
| - msg = MessageSession(MsgInfo(target_id=f'Matrix|{target_id}', |
75 |
| - sender_id=f'Matrix|{event.sender}', |
76 |
| - target_from=f'Matrix', |
77 |
| - sender_from='Matrix', |
78 |
| - sender_name=sender_name, |
79 |
| - client_name=client_name, |
80 |
| - message_id=event.event_id, |
81 |
| - reply_id=reply_id), |
82 |
| - Session(message=event.source, target=room.room_id, sender=event.sender)) |
| 75 | + target = MsgInfo(target_id=f'Matrix|{target_id}', |
| 76 | + sender_id=f'Matrix|{event.sender}', |
| 77 | + target_from=f'Matrix', |
| 78 | + sender_from='Matrix', |
| 79 | + sender_name=sender_name, |
| 80 | + client_name=client_name, |
| 81 | + message_id=event.event_id, |
| 82 | + reply_id=reply_id) |
| 83 | + session = Session(message=event.source, target=room.room_id, sender=event.sender) |
| 84 | + |
| 85 | + msg = None |
| 86 | + if isinstance(event, nio.RoomMessageFormatted): |
| 87 | + msg = MessageSession(target, session) |
| 88 | + elif isinstance(event, nio.ReactionEvent): |
| 89 | + msg = ReactionMessageSession(target, session) |
| 90 | + else: |
| 91 | + raise NotImplemented |
83 | 92 | asyncio.create_task(parser(msg))
|
84 | 93 |
|
85 | 94 |
|
@@ -141,6 +150,7 @@ async def start():
|
141 | 150 | bot.add_event_callback(on_invite, nio.InviteEvent)
|
142 | 151 | bot.add_event_callback(on_room_member, nio.RoomMemberEvent)
|
143 | 152 | bot.add_event_callback(on_message, nio.RoomMessageFormatted)
|
| 153 | + bot.add_event_callback(on_message, nio.ReactionEvent) |
144 | 154 | bot.add_to_device_callback(on_verify, nio.KeyVerificationEvent)
|
145 | 155 | bot.add_event_callback(on_in_room_verify, nio.RoomMessageUnknown)
|
146 | 156 |
|
|
0 commit comments