Make room joinable by members, improve logging
This commit is contained in:
parent
2ab0d2e93b
commit
a11a3ea2ac
|
@ -53,6 +53,8 @@ class Command:
|
||||||
self.event = event
|
self.event = event
|
||||||
self.args = self.command.split()[1:]
|
self.args = self.command.split()[1:]
|
||||||
|
|
||||||
|
logger.info("Running command `%s` because of %s", command, event.sender)
|
||||||
|
|
||||||
async def process(self):
|
async def process(self):
|
||||||
"""Process the command"""
|
"""Process the command"""
|
||||||
if self.command.startswith("echo"):
|
if self.command.startswith("echo"):
|
||||||
|
@ -133,27 +135,56 @@ class Command:
|
||||||
)
|
)
|
||||||
row = self.store.cursor.fetchone()
|
row = self.store.cursor.fetchone()
|
||||||
if row is not None:
|
if row is not None:
|
||||||
|
logger.warn("Vetting room already exists for %s", vetted_user_id)
|
||||||
text = f"A vetting room already exists for this user: https://matrix.to/#/{row[0]}"
|
text = f"A vetting room already exists for this user: https://matrix.to/#/{row[0]}"
|
||||||
await send_text_to_room(self.client, self.room.room_id, text)
|
await send_text_to_room(self.client, self.room.room_id, text)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
logger.info("Creating vetting room for %s", vetted_user_id)
|
||||||
|
|
||||||
# Get members to invite
|
# Get members to invite
|
||||||
invitees = [
|
invitees = set([
|
||||||
user.user_id
|
user.user_id
|
||||||
for user in self.room.users.values()
|
for user in self.room.users.values()
|
||||||
if user.power_level >= self.config.power_level_invite
|
if user.power_level >= self.config.power_level_invite
|
||||||
]
|
])
|
||||||
invitees.append(vetted_user_id)
|
invitees.add(vetted_user_id) # Invite user to vet
|
||||||
|
invitees.add(self.event.sender) # Invite user that sent the command
|
||||||
invitees.remove(self.client.user_id)
|
invitees.remove(self.client.user_id)
|
||||||
|
|
||||||
# Create new room
|
# Create new room
|
||||||
random_string = hex(random.randrange(4096, 65535))[2:].upper()
|
random_string = hex(random.randrange(4096, 65535))[2:].upper()
|
||||||
initial_state = [
|
initial_state = [
|
||||||
{ # Enable encryption
|
# Enable encryption
|
||||||
|
{
|
||||||
"type": "m.room.encryption",
|
"type": "m.room.encryption",
|
||||||
"content": {"algorithm": "m.megolm.v1.aes-sha2"},
|
"content": {"algorithm": "m.megolm.v1.aes-sha2"},
|
||||||
"state_key": "",
|
"state_key": "",
|
||||||
}
|
},
|
||||||
|
# Make room joinable by federation members
|
||||||
|
{
|
||||||
|
"type": "m.room.join_rules",
|
||||||
|
"state_key": "",
|
||||||
|
"content": {
|
||||||
|
"join_rule": "restricted",
|
||||||
|
"allow": [
|
||||||
|
{
|
||||||
|
"room_id": self.config.main_space_id,
|
||||||
|
"type": "m.room_membership",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"room_id": self.config.vetting_space_id,
|
||||||
|
"type": "m.room_membership",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
# Show message history to new members
|
||||||
|
{
|
||||||
|
"type": "m.room.history_visibility",
|
||||||
|
"state_key": "",
|
||||||
|
"content": {"history_visibility": "shared"},
|
||||||
|
},
|
||||||
]
|
]
|
||||||
room_resp = await self.client.room_create(
|
room_resp = await self.client.room_create(
|
||||||
name=f"Vetting {random_string}",
|
name=f"Vetting {random_string}",
|
||||||
|
@ -164,7 +195,7 @@ class Command:
|
||||||
if isinstance(room_resp, RoomCreateError):
|
if isinstance(room_resp, RoomCreateError):
|
||||||
text = f"Unable to create room: {room_resp}"
|
text = f"Unable to create room: {room_resp}"
|
||||||
await send_text_to_room(self.client, self.room.room_id, text)
|
await send_text_to_room(self.client, self.room.room_id, text)
|
||||||
logging.error(room_resp, stack_info=True)
|
logging.error(text, stack_info=True)
|
||||||
return
|
return
|
||||||
|
|
||||||
# Create new vetting entry
|
# Create new vetting entry
|
||||||
|
@ -173,6 +204,8 @@ class Command:
|
||||||
(vetted_user_id, room_resp.room_id, time.time()),
|
(vetted_user_id, room_resp.room_id, time.time()),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
logger.debug("Adding vetting room to space")
|
||||||
|
|
||||||
# Add newly created room to space
|
# Add newly created room to space
|
||||||
space_child_content = {
|
space_child_content = {
|
||||||
"suggested": False,
|
"suggested": False,
|
||||||
|
@ -185,7 +218,15 @@ class Command:
|
||||||
state_key=room_resp.room_id,
|
state_key=room_resp.room_id,
|
||||||
)
|
)
|
||||||
if not isinstance(space_resp, RoomPutStateResponse):
|
if not isinstance(space_resp, RoomPutStateResponse):
|
||||||
logging.error(space_resp, exc_info=True)
|
logging.error("Failed to add room to space: %s", space_resp, exc_info=True)
|
||||||
|
|
||||||
|
vetted_user_server = vetted_user_id.split(":", maxsplit=1)[1]
|
||||||
|
vetting_room_link = f"https://matrix.to/#/{room_resp.room_id}?via={self.client.server}&via={vetted_user_server}"
|
||||||
|
|
||||||
|
text = f"Created vetting room for https://matrix.to/#/{vetted_user_id}: {vetting_room_link}"
|
||||||
|
await send_text_to_room(self.client, self.room.room_id, text)
|
||||||
|
|
||||||
|
logger.info("Vetting room set up for %s", vetted_user_id)
|
||||||
|
|
||||||
async def _start_vote(self):
|
async def _start_vote(self):
|
||||||
"""Starts the vote"""
|
"""Starts the vote"""
|
||||||
|
@ -202,7 +243,8 @@ class Command:
|
||||||
|
|
||||||
# Check if vetting room exists for user and poll hasn't been started yet
|
# Check if vetting room exists for user and poll hasn't been started yet
|
||||||
self.store.cursor.execute(
|
self.store.cursor.execute(
|
||||||
"SELECT room_id, poll_event_id, room_id FROM vetting WHERE mxid=?", (vetted_user_id,)
|
"SELECT room_id, poll_event_id, room_id FROM vetting WHERE mxid=?",
|
||||||
|
(vetted_user_id,),
|
||||||
)
|
)
|
||||||
row = self.store.cursor.fetchone()
|
row = self.store.cursor.fetchone()
|
||||||
if row is None:
|
if row is None:
|
||||||
|
@ -268,7 +310,7 @@ class Command:
|
||||||
|
|
||||||
# Send link to vetting room
|
# Send link to vetting room
|
||||||
vetted_user_server = vetted_user_id.split(":", maxsplit=1)[1]
|
vetted_user_server = vetted_user_id.split(":", maxsplit=1)[1]
|
||||||
vetting_room_link = f"https://matrix.to/#/{vetting_room_id}?via={self.client.server}?via={vetted_user_server}"
|
vetting_room_link = f"https://matrix.to/#/{vetting_room_id}?via={self.client.server}&via={vetted_user_server}"
|
||||||
|
|
||||||
msg_content = {
|
msg_content = {
|
||||||
"m.relates_to": {"rel_type": "m.thread", "event_id": poll_resp.event_id},
|
"m.relates_to": {"rel_type": "m.thread", "event_id": poll_resp.event_id},
|
||||||
|
|
Loading…
Reference in New Issue