Allow generating invite links that need join approval

This commit is contained in:
Tulir Asokan
2022-03-28 15:03:22 +03:00
parent 2b8b853fec
commit 819dd1bcff
2 changed files with 19 additions and 4 deletions
+8 -2
View File
@@ -159,12 +159,13 @@ def _parse_delta(value: str) -> timedelta | None:
@command_handler(
help_section=SECTION_PORTAL_MANAGEMENT,
help_text="Get a Telegram invite link to the current chat.",
help_args="[--uses=<amount>] [--expire=<time delta, e.g. 1d>]",
help_args="[--uses=<amount>] [--expire=<time delta, e.g. 1d>] [--request-needed] [title]",
)
async def invite_link(evt: CommandEvent) -> EventID:
# TODO once we switch to Python 3.9 minimum, use argparse with exit_on_error=False
uses = None
expire = None
request_needed = False
while evt.args:
try:
flag, value = _parse_flag(evt.args)
@@ -180,6 +181,9 @@ async def invite_link(evt: CommandEvent) -> EventID:
if not expire_delta:
await evt.reply("Invalid format for expiry time delta")
expire = datetime.now() + expire_delta
elif flag in ("request", "request-needed", "r"):
request_needed = True
title = " ".join(evt.args)
portal = await po.Portal.get_by_mxid(evt.room_id)
if not portal:
@@ -189,7 +193,9 @@ async def invite_link(evt: CommandEvent) -> EventID:
return await evt.reply("You can't invite users to private chats.")
try:
link = await portal.get_invite_link(evt.sender, uses=uses, expire=expire)
link = await portal.get_invite_link(
evt.sender, uses=uses, expire=expire, request_needed=request_needed, title=title
)
return await evt.reply(f"Invite link to {portal.title}: {link}")
except ValueError as e:
return await evt.reply(e.args[0])
+11 -2
View File
@@ -3455,7 +3455,12 @@ class Portal(DBPortal, BasePortal):
raise
async def get_invite_link(
self, user: u.User, uses: int | None = None, expire: datetime | None = None
self,
user: u.User,
uses: int | None = None,
expire: datetime | None = None,
request_needed: bool = False,
title: str | None = None,
) -> str:
if self.peer_type == "user":
raise ValueError("You can't invite users to private chats.")
@@ -3463,7 +3468,11 @@ class Portal(DBPortal, BasePortal):
return f"https://t.me/{self.username}"
link = await user.client(
ExportChatInviteRequest(
peer=await self.get_input_entity(user), expire_date=expire, usage_limit=uses
peer=await self.get_input_entity(user),
expire_date=expire,
usage_limit=uses,
request_needed=request_needed,
title=title,
)
)
return link.link