newroom.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from nio.events.room_events import RoomMessageText
  2. from nio import RoomCreateError, RoomInviteError
  3. from nio.rooms import MatrixRoom
  4. async def command_newroom(room: MatrixRoom, event: RoomMessageText, bot):
  5. room_name = " ".join(event.body.split()[
  6. 2:]) or bot.default_room_name
  7. bot.logger.log("Creating new room...")
  8. new_room = await bot.matrix_client.room_create(name=room_name)
  9. if isinstance(new_room, RoomCreateError):
  10. bot.logger.log(f"Failed to create room: {new_room.message}")
  11. await bot.send_message(room, f"Sorry, I was unable to create a new room. Please try again later, or create a room manually.", True)
  12. return
  13. bot.logger.log(f"Inviting {event.sender} to new room...")
  14. invite = await bot.matrix_client.room_invite(new_room.room_id, event.sender)
  15. if isinstance(invite, RoomInviteError):
  16. bot.logger.log(f"Failed to invite user: {invite.message}")
  17. await bot.send_message(room, f"Sorry, I was unable to invite you to the new room. Please try again later, or create a room manually.", True)
  18. return
  19. with bot.database.cursor() as cursor:
  20. cursor.execute(
  21. "SELECT space_id FROM user_spaces WHERE user_id = ? AND active = TRUE", (event.sender,))
  22. space = cursor.fetchone()
  23. if space:
  24. bot.logger.log(f"Adding new room to space {space[0]}...")
  25. await bot.add_rooms_to_space(space[0], [new_room.room_id])
  26. await bot.matrix_client.room_put_state(
  27. new_room.room_id, "m.room.power_levels", {"users": {event.sender: 100}})
  28. await bot.matrix_client.joined_rooms()
  29. await bot.send_message(room, f"Alright, I've created a new room called '{room_name}' and invited you to it. You can find it at {new_room.room_id}", True)
  30. await bot.send_message(bot.rooms[new_room.room_id], f"Welcome to the new room! What can I do for you?")