From cee1275e3c5abd50cf81a9b0999bfe7762d4c962 Mon Sep 17 00:00:00 2001 From: Nikita Tyukalov Date: Fri, 21 Aug 2026 07:08:53 +0300 Subject: [PATCH] Deleted logic.py --- logic.py | 148 ------------------------------------------------------- 1 file changed, 148 deletions(-) delete mode 100644 logic.py diff --git a/logic.py b/logic.py deleted file mode 100644 index f89506e..0000000 --- a/logic.py +++ /dev/null @@ -1,148 +0,0 @@ -"""Main logic implementation""" - -import traceback -from typing import Any -import html - -from nio import AsyncClient -from nio import JoinResponse, RoomSendResponse, RoomSendError -from nio import MatrixInvitedRoom, InviteMemberEvent -from nio import MatrixRoom, RoomMessageText - -from nio import OlmUnverifiedDeviceError - -from datatypes import * -import util - - -# -# DATA -# -_client: AsyncClient - - - -# -# PRIVATE -# -async def _verify_all_devices() -> None: - """Verifies all known devices""" - for user_id in _client.device_store.users: - for device_id, olm_device in _client.device_store[user_id].items(): - # can't trust ourselves - if device_id == _client.device_id and user_id == _client.user_id: - continue - # they are already verified - if olm_device.verified: - continue - # verify them - _client.verify_device(olm_device) - -def _handle_html_in_kwargs(kwargs: dict[str, Any]) -> None: - """Modified `kwargs` in-place so that `formatted_body` appears if needed""" - if "formatted_body" in kwargs or "body" not in kwargs: - return - is_html, text_without_html = util.check_and_remove_html(kwargs["body"]) - if not is_html: - return - kwargs["format"] = "org.matrix.custom.html" - kwargs["formatted_body"] = kwargs["body"] - kwargs["body"] = text_without_html - -async def _send_message_to(room_id: str, message_type: MessageType, **kwargs) -> str: - """Sends a message to the room and returns event_id. - - This function automatically detects `body` key in `kwargs` and checks - if it is a valid HTML. If it is a valid HTML, it will send it as such. - Moreover, `body` attribute will be cleaned from any HTML tags, so that - the text will be looking well. `formatted_body` attribute is added - automatically and you should not add it manually. - """ - try: - # handle HTML - _handle_html_in_kwargs(kwargs) - # try to send the message - result = await _client.room_send( - room_id=room_id, - message_type="m.room.message", - content={ - "msgtype": message_type.value, - **kwargs - } - ) - # success - if type(result) is RoomSendResponse: - return result.event_id - # error - elif type(result) is RoomSendError: - raise Exception(result) - # unknown error - else: - raise RuntimeError() - except OlmUnverifiedDeviceError as e: - # verify everyone and retry - await _verify_all_devices() - return await _send_message_to(room_id, message_type, **kwargs) - except: - raise - -async def _send_text_to(room_id: str, text: str) -> str: - """Sends a text message to the room. `text` may be HTML""" - return await _send_message_to( - room_id=room_id, - message_type=MessageType.TEXT, - body=text - ) - - - -# -# CALLBACKS -# -async def _message_callback(room: MatrixRoom, event: RoomMessageText) -> None: - """Handle commands received from Matrix""" - try: - # do not process messages sent by ourselves - if event.sender == _client.user_id: - return - # prepare response - response = "Получено сообщение" - response += f"

Room ID: {html.escape(room.room_id)}" - response += f"
Sender: {html.escape(event.sender)}" - print(await _send_text_to(room.room_id, response)) - except: - traceback.print_exc() - -async def _invite_callback(room: MatrixInvitedRoom, event: InviteMemberEvent) -> None: - """Happens when the bot is invited to somewhere""" - try: - result = await _client.join(room.room_id) - if type(result) is JoinResponse: - util.log_info(f"Joined the room {room.room_id}") - else: - util.log_error(f"Can't join room {room.room_id}") - except: - traceback.print_exc() - -async def _generic_test_callback(*args, **kwargs) -> None: - """Use this callback to check argument types""" - print("GENERIC TEST CALLBACK") - for a in args: - print(f" - {type(a)}") - for k in kwargs: - print(f" * {k} = {kwargs[k]}") - - - -# -# PUBLIC -# -async def setup(client: AsyncClient) -> None: - global _client - _client = client - client.add_event_callback(_message_callback, RoomMessageText) # type: ignore - client.add_event_callback(_invite_callback, InviteMemberEvent) # type: ignore - -async def stop() -> None: - """Stop all ongoing processes""" - pass