diff --git a/main.py b/main.py index fd4ad3c..47365c2 100755 --- a/main.py +++ b/main.py @@ -67,7 +67,7 @@ def retry(msg=None): async def main(): # Logging in with a new device each time seems to fix encryption errors - device_id = str(uuid4()) + device_id = config_data['bot_auth'].get('device_id', str(uuid4())) matrix_helper = MatrixNioGPTHelper( auth_file=Path(config_data['bot_auth']['store_path'], 'bot_auth.json'), @@ -75,7 +75,7 @@ async def main(): passwd=config_data['bot_auth']['password'], homeserver=config_data['bot_auth']['homeserver'], store_path=config_data['bot_auth']['store_path'], - device_id=device_id # config_data['bot_auth'].get('device_id') + device_id=device_id, ) client = matrix_helper.client @@ -115,7 +115,7 @@ async def main(): return False # Login succeeded! - logger.info(f"Logged in as {client.user_id}") + logger.info(f"Logged in as {client.user_id} using device {device_id}.") if config_data.get('autojoin_rooms'): for room in config_data.get('autojoin_rooms'): r = await client.join(room) @@ -124,14 +124,15 @@ async def main(): time.sleep(1.5) # Log out old devices to keep the session clean - devices = (await client.devices()).devices + devices = list((await client.devices()).devices) device_list = [x.id for x in devices] - device_list.remove(device_id) - x = await client.delete_devices(device_list, { - "type": "m.login.password", - "user": config_data['bot_auth']['username'], - "password": config_data['bot_auth']['password'] - }) + if device_id in device_list: + device_list.remove(device_id) + x = await client.delete_devices(device_list, { + "type": "m.login.password", + "user": config_data['bot_auth']['username'], + "password": config_data['bot_auth']['password'] + }) await client.sync_forever(timeout=10000, full_state=True) except (ClientConnectionError, ServerDisconnectedError): diff --git a/matrix_gpt/bot/callbacks.py b/matrix_gpt/bot/callbacks.py index 1042151..87ea59e 100644 --- a/matrix_gpt/bot/callbacks.py +++ b/matrix_gpt/bot/callbacks.py @@ -84,10 +84,9 @@ class Callbacks: await process_chat(self.client, room, event, api_data, self.store, self.openai, thread_root_id=thread_content[0].event_id, system_prompt=self.system_prompt) return elif msg.startswith(f'{self.command_prefix} ') or room.member_count == 2: - # Otherwise if this is in a 1-1 with the bot or features a command prefix, - # treat it as a command + # Otherwise if this is in a 1-1 with the bot or features a command prefix, treat it as a command. msg = event.body if not event.body.startswith(self.command_prefix) else event.body[len(self.command_prefix):].strip() # Remove the command prefix - command = Command(self.client, self.store, msg, room, event, self.openai, self.reply_in_thread) + command = Command(self.client, self.store, msg, room, event, self.openai, self.reply_in_thread, system_prompt=self.system_prompt) await command.process() async def invite(self, room: MatrixRoom, event: InviteMemberEvent) -> None: @@ -190,10 +189,8 @@ class Callbacks: # f"it (your reminders will NOT be deleted, but the bot may respond to existing " # f"commands a second time).") - red_x_and_lock_emoji = "❌ 🔐" - - # React to the undecryptable event with some emoji - await react_to_event(self.client, room.room_id, event.event_id, red_x_and_lock_emoji, ) + if event.server_timestamp > self.startup_ts: + await react_to_event(self.client, room.room_id, event.event_id, "❌ 🔐") async def unknown(self, room: MatrixRoom, event: UnknownEvent) -> None: """Callback for when an event with a type that is unknown to matrix-nio is received. diff --git a/matrix_gpt/bot/chat_functions.py b/matrix_gpt/bot/chat_functions.py index cbf0de3..ef6d7b4 100644 --- a/matrix_gpt/bot/chat_functions.py +++ b/matrix_gpt/bot/chat_functions.py @@ -205,7 +205,6 @@ async def process_chat(client, room, event, command, store, openai, thread_root_ messages=messages, temperature=0, ) - logger.debug(response) text_response = response["choices"][0]["message"]["content"].strip().strip('\n') logger.info(f'Reply to {event.event_id} --> "{command}" and bot responded with "{text_response}"') resp = await send_text_to_room(client, room.room_id, text_response, reply_to_event_id=event.event_id, thread=True, thread_root_id=thread_root_id if thread_root_id else event.event_id)