# Ultroid - UserBot # Copyright (C) 2021-2023 TeamUltroid # # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > # PLease read the GNU Affero General Public License in # . """ ✘ Commands Available - • `{i}setstory ` Set replied media as your story. • `{i}storydl ` Download and upload user stories or specific story from link! """ import os import re from contextlib import suppress from . import ultroid_cmd, get_string, LOGS from telethon import TelegramClient from telethon.tl.functions.channels import GetFullChannelRequest from telethon.tl.types import ( User, UserFull, InputPeerSelf, InputPrivacyValueAllowAll, Channel, InputUserSelf, ) from telethon.tl.functions.stories import SendStoryRequest, GetStoriesByIDRequest from telethon.tl.functions.users import GetFullUserRequest from telethon.events import NewMessage @ultroid_cmd("setstory") async def setStory(event: NewMessage.Event): reply = await event.get_reply_message() if not (reply and (reply.photo or reply.video)): await event.eor("Please reply to a photo or video!", time=5) return msg = await event.eor(get_string("com_1")) try: await event.client( SendStoryRequest( InputPeerSelf(), reply.media, privacy_rules=[InputPrivacyValueAllowAll()], ) ) await msg.eor("🔥 **Story is Live!**", time=5) except Exception as er: await msg.edit(f"__ERROR: {er}__") LOGS.exception(er) @ultroid_cmd("storydl") async def downloadUserStories(event: NewMessage.Event): replied = await event.get_reply_message() message = await event.eor(get_string("com_1")) try: text_input = event.text.split(maxsplit=1)[1] # Check if input is a Telegram story link story_link_pattern = r"https?://t\.me/([^/]+)/s/(\d+)" match = re.match(story_link_pattern, text_input) if match: # Extract username and story ID from link username = match.group(1) story_id = int(match.group(2)) try: # Get the entity for the username entity = await event.client.get_entity(username) # Using GetStoriesByIDRequest to fetch the specific story stories_response = await event.client( GetStoriesByIDRequest(entity.id, id=[story_id]) ) print(stories_response) if not stories_response.stories: return await message.eor("ERROR: Story not found or expired!") # Download and upload the story for story in stories_response.stories: client: TelegramClient = event.client file = await client.download_media(story.media) caption = story.caption if hasattr(story, "caption") else "" await message.reply(caption, file=file) os.remove(file) return await message.eor("**Uploaded Story!**", time=5) except Exception as er: await message.eor(f"ERROR while fetching story: __{er}__") LOGS.exception(er) return # If not a story link, proceed with the original functionality username = text_input except IndexError as er: LOGS.exception if replied and isinstance(replied.sender, User): username = replied.sender_id else: return await message.eor( "Please reply to a user, provide username or story link!" ) with suppress(ValueError): username = int(username) stories = None try: entity = await event.client.get_entity(username) if isinstance(entity, Channel): full_user: UserFull = ( await event.client(GetFullChannelRequest(entity.id)) ).full_channel stories = full_user.stories else: full_user: UserFull = ( await event.client(GetFullUserRequest(id=username)) ).full_user stories = full_user.stories except Exception as er: await message.eor(f"ERROR: __{er}__") return if not (stories and stories.stories): await message.eor("ERROR: Stories not found!") return for story in stories.stories[:5]: client: TelegramClient = event.client file = await client.download_media(story.media) caption = story.caption if hasattr(story, "caption") else "" await message.reply(caption, file=file) os.remove(file) await message.eor("**Uploaded Stories!**", time=5)