space.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. from nio.events.room_events import RoomMessageText
  2. from nio.rooms import MatrixRoom
  3. from nio.responses import RoomInviteError
  4. async def command_space(room: MatrixRoom, event: RoomMessageText, bot):
  5. if len(event.body.split()) == 3:
  6. request = event.body.split()[2]
  7. if request.lower() == "enable":
  8. bot.logger.log("Enabling space...")
  9. with bot.database.cursor() as cursor:
  10. cursor.execute(
  11. "SELECT space_id FROM user_spaces WHERE user_id = ? AND active = TRUE", (event.sender,))
  12. space = cursor.fetchone()
  13. if not space:
  14. space = await bot.create_space("GPTBot")
  15. bot.logger.log(
  16. f"Created space {space} for user {event.sender}")
  17. with bot.database.cursor() as cursor:
  18. cursor.execute(
  19. "INSERT INTO user_spaces (space_id, user_id) VALUES (?, ?)", (space, event.sender))
  20. else:
  21. space = space[0]
  22. response = await bot.matrix_client.room_invite(space, event.sender)
  23. if isinstance(response, RoomInviteError):
  24. bot.logger.log(
  25. f"Failed to invite user {event.sender} to space {space}", "error")
  26. await bot.send_message(
  27. room, "Sorry, I couldn't invite you to the space. Please try again later.", True)
  28. return
  29. bot.database.commit()
  30. await bot.send_message(room, "Space enabled.", True)
  31. request = "update"
  32. elif request.lower() == "disable":
  33. bot.logger.log("Disabling space...")
  34. with bot.database.cursor() as cursor:
  35. cursor.execute(
  36. "SELECT space_id FROM user_spaces WHERE user_id = ? AND active = TRUE", (event.sender,))
  37. space = cursor.fetchone()[0]
  38. if not space:
  39. bot.logger.log(f"User {event.sender} does not have a space")
  40. await bot.send_message(room, "You don't have a space enabled.", True)
  41. return
  42. with bot.database.cursor() as cursor:
  43. cursor.execute(
  44. "UPDATE user_spaces SET active = FALSE WHERE user_id = ?", (event.sender,))
  45. bot.database.commit()
  46. await bot.send_message(room, "Space disabled.", True)
  47. return
  48. if request.lower() == "update":
  49. bot.logger.log("Updating space...")
  50. with bot.database.cursor() as cursor:
  51. cursor.execute(
  52. "SELECT space_id FROM user_spaces WHERE user_id = ? AND active = TRUE", (event.sender,))
  53. space = cursor.fetchone()[0]
  54. if not space:
  55. bot.logger.log(f"User {event.sender} does not have a space")
  56. await bot.send_message(
  57. room, "You don't have a space enabled. Create one first using `!gptbot space enable`.", True)
  58. return
  59. rooms = bot.matrix_client.rooms
  60. join_rooms = []
  61. for room in rooms.values():
  62. if event.sender in room.users.keys():
  63. bot.logger.log(
  64. f"Adding room {room.room_id} to space {space}")
  65. join_rooms.append(room.room_id)
  66. await bot.add_rooms_to_space(space, join_rooms)
  67. await bot.send_message(room, "Space updated.", True)
  68. return
  69. if request.lower() == "invite":
  70. bot.logger.log("Inviting user to space...")
  71. with bot.database.cursor() as cursor:
  72. cursor.execute(
  73. "SELECT space_id FROM user_spaces WHERE user_id = ?", (event.sender,))
  74. space = cursor.fetchone()[0]
  75. if not space:
  76. bot.logger.log(f"User {event.sender} does not have a space")
  77. await bot.send_message(
  78. room, "You don't have a space enabled. Create one first using `!gptbot space enable`.", True)
  79. return
  80. response = await bot.matrix_client.room_invite(space, event.sender)
  81. if isinstance(response, RoomInviteError):
  82. bot.logger.log(
  83. f"Failed to invite user {user} to space {space}", "error")
  84. await bot.send_message(
  85. room, "Sorry, I couldn't invite you to the space. Please try again later.", True)
  86. return
  87. await bot.send_message(room, "Invited you to the space.", True)
  88. return
  89. with bot.database.cursor() as cursor:
  90. cursor.execute(
  91. "SELECT active FROM user_spaces WHERE user_id = ?", (event.sender,))
  92. status = cursor.fetchone()
  93. if not status:
  94. await bot.send_message(
  95. room, "You don't have a space enabled. Create one using `!gptbot space enable`.", True)
  96. return
  97. if not status[0]:
  98. await bot.send_message(
  99. room, "Your space is disabled. Enable it using `!gptbot space enable`.", True)
  100. return
  101. await bot.send_message(
  102. room, "Your space is enabled. Rooms will be added to it automatically.", True)
  103. return