message.py 1.2 KB

123456789101112131415161718192021222324252627282930
  1. from nio import MatrixRoom, RoomMessageText, MegolmEvent
  2. async def message_callback(room: MatrixRoom, event: RoomMessageText | MegolmEvent, bot):
  3. bot.logger.log(f"Received message from {event.sender} in room {room.room_id}")
  4. if isinstance(event, MegolmEvent):
  5. try:
  6. event = await bot.matrix_client.decrypt_event(event)
  7. except Exception as e:
  8. try:
  9. bot.logger.log("Requesting new encryption keys...")
  10. await bot.matrix_client.request_room_key(event)
  11. except:
  12. pass
  13. bot.logger.log(f"Error decrypting message: {e}", "error")
  14. await bot.send_message(room, "Sorry, I couldn't decrypt that message. Please try again later or switch to a room without encryption.", True)
  15. return
  16. if event.sender == bot.matrix_client.user_id:
  17. bot.logger.log("Message is from bot itself - ignoring")
  18. elif event.body.startswith("!gptbot"):
  19. await bot.process_command(room, event)
  20. elif event.body.startswith("!"):
  21. bot.logger.log(f"Received {event.body} - might be a command, but not for this bot - ignoring")
  22. else:
  23. await bot.process_query(room, event)