message.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from nio import MatrixRoom, RoomMessageText, MegolmEvent
  2. from datetime import datetime
  3. async def message_callback(room: MatrixRoom | str, event: RoomMessageText | MegolmEvent, bot):
  4. bot.logger.log(f"Received message from {event.sender} in room {room.room_id}")
  5. sent = datetime.fromtimestamp(event.server_timestamp / 1000)
  6. received = datetime.now()
  7. latency = received - sent
  8. if isinstance(event, MegolmEvent):
  9. try:
  10. event = await bot.matrix_client.decrypt_event(event)
  11. except Exception as e:
  12. try:
  13. bot.logger.log("Requesting new encryption keys...")
  14. await bot.matrix_client.request_room_key(event)
  15. except:
  16. pass
  17. bot.logger.log(f"Error decrypting message: {e}", "error")
  18. await bot.send_message(room, "Sorry, I couldn't decrypt that message. Please try again later or switch to a room without encryption.", True)
  19. return
  20. if event.sender == bot.matrix_client.user_id:
  21. bot.logger.log("Message is from bot itself - ignoring")
  22. elif event.body.startswith("!gptbot"):
  23. await bot.process_command(room, event)
  24. elif event.body.startswith("!"):
  25. bot.logger.log(f"Received {event.body} - might be a command, but not for this bot - ignoring")
  26. else:
  27. await bot.process_query(room, event)
  28. processed = datetime.now()
  29. processing_time = processed - received
  30. bot.logger.log(f"Message processing took {processing_time.total_seconds()} seconds (latency: {latency.total_seconds()} seconds)")
  31. if bot.room_uses_timing(room):
  32. await bot.send_message(room, f"Message processing took {processing_time.total_seconds()} seconds (latency: {latency.total_seconds()} seconds)", True)