# 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 # . import re from telethon import Button from telethon.errors.rpcerrorlist import ( BotInlineDisabledError, BotResponseTimeoutError, MessageNotModifiedError, ) from telethon.tl import types from telethon.tl.functions.users import GetFullUserRequest as gu from . import ( HNDLR, LOGS, asst, callback, get_string, in_pattern, inline_mention, ultroid_bot, ultroid_cmd, ) buddhhu = {} @ultroid_cmd( pattern="wspr( (.*)|$)", ) async def _(e): if e.reply_to_msg_id: okk = await e.get_reply_message() put = f"@{okk.sender.username}" if okk.sender.username else okk.sender_id else: put = e.pattern_match.group(1).strip() if put: try: results = await e.client.inline_query(asst.me.username, f"msg {put}") except BotResponseTimeoutError: return await e.eor( get_string("help_2").format(HNDLR), ) except BotInlineDisabledError: return await e.eor(get_string("help_3")) await results[0].click(e.chat_id, reply_to=e.reply_to_msg_id, hide_via=True) return await e.delete() await e.eor(get_string("wspr_3")) @in_pattern("wspr", owner=True) async def _(e): iuser = e.query.user_id zzz = e.text.split(maxsplit=2) try: query = zzz[1] if query.isdigit(): query = int(query) logi = await ultroid_bot.get_entity(query) if not isinstance(logi, types.User): raise ValueError("Invalid Username.") except IndexError: sur = await e.builder.article( title="Give Username", description="You Didn't Type Username or id.", text="You Didn't Type Username or id.", ) return await e.answer([sur]) except ValueError as er: LOGS.exception(er) sur = await e.builder.article( title="User Not Found", description="Make sure username or id is correct.", text="Make sure username or id is correct.", ) return await e.answer([sur]) try: desc = zzz[2] except IndexError: sur = await e.builder.article( title="Type ur msg", text="You Didn't Type Your Msg" ) return await e.answer([sur]) button = [ [ Button.inline("Secret Msg", data=f"dd_{e.id}"), Button.inline("Delete Msg", data=f"del_{e.id}"), ], [ Button.switch_inline( "New", query=f"wspr {logi.username or logi.id}", same_peer=True ) ], ] us = logi.username or logi.first_name sur = await e.builder.article( title=logi.first_name, description=desc, text=get_string("wspr_1").format(us), buttons=button, ) buddhhu.update({e.id: [logi.id, iuser, desc]}) await e.answer([sur]) @in_pattern("msg", owner=True) async def _(e): zzz = e.text.split(maxsplit=1) desc = "Touch me" try: query = zzz[1] if query.isdigit(): query = int(query) logi = await ultroid_bot(gu(id=query)) user = logi.users[0] mention = inline_mention(user) x = user.status if isinstance(x, types.UserStatusOnline): status = "Online" elif isinstance(x, types.UserStatusOffline): status = "Offline" elif isinstance(x, types.UserStatusRecently): status = "Last Seen Recently" elif isinstance(x, types.UserStatusLastMonth): status = "Last seen months ago" elif isinstance(x, types.UserStatusLastWeek): status = "Last seen weeks ago" else: status = "Can't Tell" text = f"**Name:** `{user.first_name}`\n" text += f"**Id:** `{user.id}`\n" if user.username: text += f"**Username:** `{user.username}`\n" url = f"https://t.me/{user.username}" else: text += f"**Mention:** `{mention}`\n" url = f"tg://user?id={user.id}" text += f"**Status:** `{status}`\n" text += f"**About:** `{logi.full_user.about}`" button = [ Button.url("Private", url=url), Button.switch_inline( "Secret msg", query=f"wspr {query} Hello 👋", same_peer=True, ), ] sur = e.builder.article( title=user.first_name, description=desc, text=text, buttons=button, ) except IndexError: sur = e.builder.article( title="Give Username", description="You Didn't Type Username or id.", text="You Didn't Type Username or id.", ) except BaseException as er: LOGS.exception(er) name = get_string("wspr_4").format(query) sur = e.builder.article( title=name, text=name, ) await e.answer([sur]) @callback( re.compile( "dd_(.*)", ), ) async def _(e): ids = int(e.pattern_match.group(1).strip().decode("UTF-8")) if buddhhu.get(ids): if e.sender_id in buddhhu[ids]: await e.answer(buddhhu[ids][-1], alert=True) else: await e.answer("Not For You", alert=True) else: await e.answer(get_string("wspr_2"), alert=True) @callback(re.compile("del_(.*)")) async def _(e): ids = int(e.pattern_match.group(1).strip().decode("UTF-8")) if buddhhu.get(ids): if e.sender_id in buddhhu[ids]: buddhhu.pop(ids) try: await e.edit(get_string("wspr_2")) except MessageNotModifiedError: pass else: await e.answer(get_string("wspr_5"), alert=True)