Invite users with certain power level; send link to room
This commit is contained in:
parent
ab6c4e7c8e
commit
2ab0d2e93b
|
@ -46,6 +46,8 @@ vetting:
|
||||||
# Requirements for getting accepted
|
# Requirements for getting accepted
|
||||||
min_yes_votes: 1
|
min_yes_votes: 1
|
||||||
max_no_votes: 0
|
max_no_votes: 0
|
||||||
|
# Minimum power level to automatically invite users from vetting room
|
||||||
|
power_level_invite: 10
|
||||||
|
|
||||||
# Logging setup
|
# Logging setup
|
||||||
logging:
|
logging:
|
||||||
|
|
|
@ -138,7 +138,11 @@ class Command:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Get members to invite
|
# Get members to invite
|
||||||
invitees = [member_id for member_id in self.room.users.keys()]
|
invitees = [
|
||||||
|
user.user_id
|
||||||
|
for user in self.room.users.values()
|
||||||
|
if user.power_level >= self.config.power_level_invite
|
||||||
|
]
|
||||||
invitees.append(vetted_user_id)
|
invitees.append(vetted_user_id)
|
||||||
invitees.remove(self.client.user_id)
|
invitees.remove(self.client.user_id)
|
||||||
|
|
||||||
|
@ -198,7 +202,7 @@ 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 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:
|
||||||
|
@ -207,12 +211,12 @@ class Command:
|
||||||
return
|
return
|
||||||
if row[1] is not None:
|
if row[1] is not None:
|
||||||
event_link = f"https://matrix.to/#/{self.config.vetting_room_id}/{row[1]}?via={self.client.server}"
|
event_link = f"https://matrix.to/#/{self.config.vetting_room_id}/{row[1]}?via={self.client.server}"
|
||||||
text = (
|
text = f"A poll has already been started for this user: {event_link}"
|
||||||
f"A poll has already been started for this user: {event_link}"
|
|
||||||
)
|
|
||||||
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
|
||||||
|
|
||||||
|
vetting_room_id = row[2]
|
||||||
|
|
||||||
poll_text = f"Accept {vetted_user_id} into the Federation?"
|
poll_text = f"Accept {vetted_user_id} into the Federation?"
|
||||||
choices = ["yes", "no", "blank"]
|
choices = ["yes", "no", "blank"]
|
||||||
choices_text = "".join(
|
choices_text = "".join(
|
||||||
|
@ -246,7 +250,7 @@ class Command:
|
||||||
|
|
||||||
if isinstance(poll_resp, RoomSendError):
|
if isinstance(poll_resp, RoomSendError):
|
||||||
logging.error(poll_resp, stack_info=True)
|
logging.error(poll_resp, stack_info=True)
|
||||||
text = "Failed to send poll."
|
text = f"Failed to send poll: {poll_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)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -262,6 +266,28 @@ class Command:
|
||||||
vetted_user_id, poll_resp.event_id, voting_start_time
|
vetted_user_id, poll_resp.event_id, voting_start_time
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Send link to vetting room
|
||||||
|
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}"
|
||||||
|
|
||||||
|
msg_content = {
|
||||||
|
"m.relates_to": {"rel_type": "m.thread", "event_id": poll_resp.event_id},
|
||||||
|
"msgtype": "m.text",
|
||||||
|
"body": f"Vetting room: {vetting_room_link}",
|
||||||
|
}
|
||||||
|
|
||||||
|
msg_resp = await self.client.room_send(
|
||||||
|
self.room.room_id,
|
||||||
|
message_type="m.room.message",
|
||||||
|
content=msg_content,
|
||||||
|
)
|
||||||
|
|
||||||
|
if isinstance(msg_resp, RoomSendError):
|
||||||
|
logging.error(msg_resp, stack_info=True)
|
||||||
|
text = f"Failed to send vetting room link: {msg_resp}"
|
||||||
|
await send_text_to_room(self.client, self.room.room_id, text)
|
||||||
|
return
|
||||||
|
|
||||||
async def _unknown_command(self):
|
async def _unknown_command(self):
|
||||||
await send_text_to_room(
|
await send_text_to_room(
|
||||||
self.client,
|
self.client,
|
||||||
|
|
|
@ -134,6 +134,10 @@ class Config:
|
||||||
self._get_cfg(["vetting", "max_no_votes"], required=True)
|
self._get_cfg(["vetting", "max_no_votes"], required=True)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.power_level_invite = int(
|
||||||
|
self._get_cfg(["vetting", "power_level_invite"], required=True)
|
||||||
|
)
|
||||||
|
|
||||||
def _get_cfg(
|
def _get_cfg(
|
||||||
self,
|
self,
|
||||||
path: List[str],
|
path: List[str],
|
||||||
|
|
Loading…
Reference in New Issue