# Ultroid - UserBot # Copyright (C) 2021-2025 TeamUltroid # # This file is a part of < https://github.com/TeamUltroid/Ultroid/ > # PLease read the GNU Affero General Public License in # . """ ✘ Commands Available - • `{i}setname ` Change your profile name. • `{i}setbio ` Change your profile bio. • `{i}setpic ` Change your profile pic. • `{i}delpfp (optional)` Delete one profile pic, if no value given, else delete n number of pics. • `{i}poto /reply` `{i}poto /all` Ex: `{i}poto 10` - uploads starting 10 pfps of user. Upload the photo of Chat/User if Available. """ import os from telethon.tl.functions.account import UpdateProfileRequest from telethon.tl.functions.photos import DeletePhotosRequest, UploadProfilePhotoRequest from . import eod, eor, get_string, mediainfo, ultroid_cmd TMP_DOWNLOAD_DIRECTORY = "resources/downloads/" # bio changer @ultroid_cmd(pattern="setbio( (.*)|$)", fullsudo=True) async def _(ult): ok = await ult.eor("...") set = ult.pattern_match.group(1).strip() try: await ult.client(UpdateProfileRequest(about=set)) await eod(ok, f"Profile bio changed to\n`{set}`") except Exception as ex: await eod(ok, f"Error occured.\n`{str(ex)}`") # name changer @ultroid_cmd(pattern="setname ?((.|//)*)", fullsudo=True) async def _(ult): ok = await ult.eor("...") names = first_name = ult.pattern_match.group(1).strip() last_name = "" if "//" in names: first_name, last_name = names.split("//", 1) try: await ult.client( UpdateProfileRequest( first_name=first_name, last_name=last_name, ), ) await eod(ok, f"Name changed to `{names}`") except Exception as ex: await eod(ok, f"Error occured.\n`{str(ex)}`") # profile pic @ultroid_cmd(pattern="setpic$", fullsudo=True) async def _(ult): if not ult.is_reply: return await ult.eor("`Reply to a Media..`", time=5) reply_message = await ult.get_reply_message() ok = await ult.eor(get_string("com_1")) replfile = await reply_message.download_media() file = await ult.client.upload_file(replfile) try: if "pic" in mediainfo(reply_message.media): await ult.client(UploadProfilePhotoRequest(file=file)) else: await ult.client(UploadProfilePhotoRequest(video=file)) await eod(ok, "`My Profile Photo has Successfully Changed !`") except Exception as ex: await eod(ok, f"Error occured.\n`{str(ex)}`") os.remove(replfile) # delete profile pic(s) @ultroid_cmd(pattern="delpfp( (.*)|$)", fullsudo=True) async def remove_profilepic(delpfp): ok = await eor(delpfp, "`...`") group = delpfp.text[8:] if group == "all": lim = 0 elif group.isdigit(): lim = int(group) else: lim = 1 pfplist = await delpfp.client.get_profile_photos("me", limit=lim) await delpfp.client(DeletePhotosRequest(pfplist)) await eod(ok, f"`Successfully deleted {len(pfplist)} profile picture(s).`") @ultroid_cmd(pattern="poto( (.*)|$)") async def gpoto(e): ult = e.pattern_match.group(1).strip() if e.is_reply: gs = await e.get_reply_message() user_id = gs.sender_id elif ult: split = ult.split() user_id = split[0] if len(ult) > 1: ult = ult[-1] else: ult = None else: user_id = e.chat_id a = await e.eor(get_string("com_1")) limit = None just_dl = ult in ["-dl", "--dl"] if just_dl: ult = None if ult and ult != "all": try: limit = int(ult) except ValueError: pass if not limit or e.client._bot: okla = await e.client.download_profile_photo(user_id) else: okla = [] if limit == "all": limit = None async for photo in e.client.iter_profile_photos(user_id, limit=limit): photo_path = await e.client.download_media(photo) if photo.video_sizes: await e.respond(file=photo_path) os.remove(photo_path) else: okla.append(photo_path) if not okla: return await eor(a, "`Pfp Not Found...`") if not just_dl: await a.delete() await e.reply(file=okla) if not isinstance(okla, list): okla = [okla] for file in okla: os.remove(file) return if isinstance(okla, list): okla = "\n".join(okla) await a.edit(f"Downloaded pfp to [ `{okla}` ].")