recorder-mx-py

[MIRROR of https://git.nordgedanken.dev/mtrnord/matrix-call-multitrack-recorder/] A tool to record every participant of a legacy or new matrix, call to separate audio and video files.
git clone git://archive.git.mtrnord.blog/MTRNord/recorder-mx-py.git
Log | Files | Refs | README | LICENSE

commit 9b6d8592972ec2a7dd0768d2eaff77dcfff2f897
parent f7312b84970b99cf847944b27b6af48e86b125ee
Author: MTRNord <mtrnord1@gmail.com>
Date:   Sun, 29 Jan 2023 19:28:42 +0100

Apply pylint suggestions

Diffstat:
Mmatrix_call_multitrack_recorder/__main__.py | 18+++++++++---------
Mmatrix_call_multitrack_recorder/bot.py | 9+++------
Mmatrix_call_multitrack_recorder/recorder.py | 13++++++-------
Mpyproject.toml | 3++-
4 files changed, 20 insertions(+), 23 deletions(-)

diff --git a/matrix_call_multitrack_recorder/__main__.py b/matrix_call_multitrack_recorder/__main__.py @@ -3,10 +3,10 @@ # SPDX-License-Identifier: AGPL-3.0-or-later import asyncio +import sys from logbook import Logger, StreamHandler import logbook -import sys from matrix_call_multitrack_recorder.bot import RecordingBot, login @@ -16,28 +16,28 @@ logger.level = logbook.INFO # Entry -bot = None +BOT = None async def main() -> None: logger.info("Starting bot...") client = await login() - global bot - bot = RecordingBot(client=client) + global BOT + BOT = RecordingBot(client=client) - await bot.start() + await BOT.start() if __name__ == "__main__": try: asyncio.get_event_loop().run_until_complete(main()) except Exception: - if bot: - asyncio.get_event_loop().run_until_complete(bot.stop()) + if BOT: + asyncio.get_event_loop().run_until_complete(BOT.stop()) logger.exception("Fatal Runtime error.") sys.exit(1) except KeyboardInterrupt: - if bot: - asyncio.get_event_loop().run_until_complete(bot.stop()) + if BOT: + asyncio.get_event_loop().run_until_complete(BOT.stop()) print("Received keyboard interrupt.") sys.exit(0) diff --git a/matrix_call_multitrack_recorder/bot.py b/matrix_call_multitrack_recorder/bot.py @@ -7,6 +7,7 @@ import getpass import json import os import sys +from nio.events import to_device from nio import ( AsyncClient, LoginResponse, @@ -20,7 +21,6 @@ from nio import ( AsyncClientConfig, InviteEvent, MSC3401CallEvent, - to_device, CallMemberEvent, RoomMessageText, ProfileGetDisplayNameResponse, @@ -28,7 +28,6 @@ from nio import ( from logbook import Logger, StreamHandler import logbook -import sys from matrix_call_multitrack_recorder.recorder import Recorder @@ -90,7 +89,6 @@ class RecordingBot: logger.info("Stopping client") await self.recorder.stop() await self.client.close() - pass async def message_callback(self, room: MatrixRoom, event: RoomMessageText) -> None: """Handles incoming messages.""" @@ -121,7 +119,6 @@ class RecordingBot: await self.recorder.join_call(room) asyncio.create_task(command_handling()) - pass # TODO: Negotiate new streams # TODO: Handle m.call.negotiate to-device events @@ -222,7 +219,7 @@ def write_details_to_disk(resp: LoginResponse, homeserver) -> None: homeserver -- URL of homeserver, e.g. "https://matrix.example.org" """ # open the config file in write-mode - with open(CONFIG_FILE, "w") as f: + with open(CONFIG_FILE, "w", encoding="utf8") as f: # write the login details to disk json.dump( { @@ -286,7 +283,7 @@ async def login() -> AsyncClient: # Otherwise the config file exists, so we'll use the stored credentials else: # open the file in read-only mode - with open(CONFIG_FILE, "r") as f: + with open(CONFIG_FILE, "r", encoding="utf8") as f: config = json.load(f) client = AsyncClient( config["homeserver"], diff --git a/matrix_call_multitrack_recorder/recorder.py b/matrix_call_multitrack_recorder/recorder.py @@ -8,9 +8,10 @@ import os import random import string from typing import Dict, List, Optional, Tuple, Union +import sys +import time from logbook import Logger, StreamHandler import logbook -import sys from nio import ( AsyncClient, CallInviteEvent, @@ -24,10 +25,9 @@ from nio import ( ToDeviceCallHangupEvent, ) from aiortc import RTCPeerConnection, RTCSessionDescription, MediaStreamTrack -from aiortc.contrib.media import MediaRecorder, MediaBlackhole +from aiortc.contrib.media import MediaRecorder from aiortc.rtcicetransport import candidate_from_aioice from aioice.candidate import Candidate -import time StreamHandler(sys.stdout).push_application() logger = Logger(__name__) @@ -138,7 +138,6 @@ class Recorder: state_key=self.client.user_id, ) await conn.pc.close() - pass def add_call(self, conf_id: ConfID, room: MatrixRoom) -> None: logger.info(f"Adding conf {conf_id} to room {room.room_id}") @@ -527,7 +526,7 @@ class Recorder: try: conn = self.conns[unique_id] - except KeyError as e: + except KeyError: logger.warning("Received candidates for unknown call") return logger.info("Waiting for prepare") @@ -545,8 +544,8 @@ class Recorder: candidate = candidate_from_aioice( Candidate.from_sdp(raw_candidate.get("candidate")) ) - except ValueError as e: - logger.warning("Received invalid candidate: %s", e) + except ValueError as error: + logger.warning(f"Received invalid candidate: {error}") continue candidate.sdpMid = raw_candidate.get("sdpMid") candidate.sdpMLineIndex = raw_candidate.get("sdpMLineIndex") diff --git a/pyproject.toml b/pyproject.toml @@ -48,7 +48,8 @@ path = "matrix_call_multitrack_recorder/__about__.py" dependencies = [ "pytest", "pytest-cov", - "black" + "black", + "pylint" ] [tool.hatch.envs.default.scripts] cov = "pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=matrix_call_multitrack_recorder --cov=tests {args}"