| |
| |
| |
| |
| |
| |
|
|
| from . import get_help |
|
|
| __doc__ = get_help("help_admintools") |
|
|
| import asyncio |
|
|
| from telethon.errors import BadRequestError |
| from telethon.errors.rpcerrorlist import ChatNotModifiedError, UserIdInvalidError |
| from telethon.tl.functions.channels import EditAdminRequest, GetFullChannelRequest |
| from telethon.tl.functions.messages import GetFullChatRequest, SetHistoryTTLRequest |
| from telethon.tl.types import InputMessagesFilterPinned |
| from telethon.utils import get_display_name |
|
|
| from pyUltroid.dB import DEVLIST |
| from pyUltroid.fns.admins import ban_time |
| from pyUltroid.fns.info import get_uinfo |
|
|
| from . import HNDLR, LOGS, eod, eor, get_string, inline_mention, types, ultroid_cmd |
|
|
|
|
| @ultroid_cmd( |
| pattern="promote( (.*)|$)", |
| admins_only=True, |
| manager=True, |
| require="add_admins", |
| fullsudo=True, |
| ) |
| async def prmte(ult): |
| xx = await ult.eor(get_string("com_1")) |
| user, rank = await get_uinfo(ult) |
| rank = rank or "Admin" |
| FullRight = False |
| if not user: |
| return await xx.edit(get_string("pro_1")) |
| if rank.split()[0] == "-f": |
| try: |
| rank = rank.split(maxsplit=1)[1] |
| except IndexError: |
| rank = "Admin" |
| FullRight = True |
| try: |
| if FullRight: |
| await ult.client( |
| EditAdminRequest(ult.chat_id, user.id, ult.chat.admin_rights, rank) |
| ) |
| else: |
| await ult.client.edit_admin( |
| ult.chat_id, |
| user.id, |
| invite_users=True, |
| ban_users=True, |
| delete_messages=True, |
| pin_messages=True, |
| manage_call=True, |
| title=rank, |
| ) |
| await eod( |
| xx, get_string("pro_2").format(inline_mention(user), ult.chat.title, rank) |
| ) |
| except Exception as ex: |
| return await xx.edit(f"`{ex}`") |
|
|
|
|
| @ultroid_cmd( |
| pattern="demote( (.*)|$)", |
| admins_only=True, |
| manager=True, |
| require="add_admins", |
| fullsudo=True, |
| ) |
| async def dmote(ult): |
| xx = await ult.eor(get_string("com_1")) |
| user, rank = await get_uinfo(ult) |
| if not rank: |
| rank = "Not Admin" |
| if not user: |
| return await xx.edit(get_string("de_1")) |
| try: |
| await ult.client.edit_admin( |
| ult.chat_id, |
| user.id, |
| invite_users=None, |
| ban_users=None, |
| delete_messages=None, |
| pin_messages=None, |
| manage_call=None, |
| title=rank, |
| ) |
| await eod(xx, get_string("de_2").format(inline_mention(user), ult.chat.title)) |
| except Exception as ex: |
| return await xx.edit(f"`{ex}`") |
|
|
|
|
| @ultroid_cmd( |
| pattern="ban( (.*)|$)", |
| admins_only=True, |
| manager=True, |
| require="ban_users", |
| fullsudo=True, |
| ) |
| async def bban(ult): |
| something = await get_uinfo(ult) |
| if not something: |
| return |
| user, reason = something |
| if not user: |
| return await eod(ult, get_string("ban_1")) |
| if user.id in DEVLIST: |
| return await eod(ult, get_string("ban_2")) |
| try: |
| await ult.client.edit_permissions(ult.chat_id, user.id, view_messages=False) |
| except UserIdInvalidError: |
| return await eod(ult, get_string("adm_1")) |
| except BadRequestError: |
| return await eod(ult, get_string("ban_3")) |
| senderme = inline_mention(await ult.get_sender()) |
| userme = inline_mention(user) |
| text = get_string("ban_4").format(userme, senderme, ult.chat.title) |
| if reason: |
| text += get_string("ban_5").format(reason) |
| await eod(ult, text) |
|
|
|
|
| @ultroid_cmd( |
| pattern="unban( (.*)|$)", |
| admins_only=True, |
| manager=True, |
| require="ban_users", |
| fullsudo=True, |
| ) |
| async def uunban(ult): |
| xx = await ult.eor(get_string("com_1")) |
| if ult.text[1:].startswith("unbanall"): |
| return |
| something = await get_uinfo(ult) |
| if not something: |
| return |
| user, reason = something |
| if not user: |
| return await xx.edit(get_string("unban_1")) |
| try: |
| await ult.client.edit_permissions(ult.chat_id, user.id, view_messages=True) |
| except UserIdInvalidError: |
| return await eod(ult, get_string("adm_1")) |
| except BadRequestError: |
| return await xx.edit(get_string("adm_2")) |
| sender = inline_mention(await ult.get_sender()) |
| text = get_string("unban_3").format(inline_mention(user), sender, ult.chat.title) |
| if reason: |
| text += get_string("ban_5").format(reason) |
| await xx.edit(text) |
|
|
|
|
| @ultroid_cmd( |
| pattern="kick( (.*)|$)", |
| manager=True, |
| require="ban_users", |
| fullsudo=True, |
| ) |
| async def kck(ult): |
| if "kickme" in ult.text: |
| return |
| if ult.is_private: |
| return await ult.eor("`Use this in Group/Channel.`", time=5) |
| ml = ult.text.split(" ", maxsplit=1)[0] |
| xx = await ult.eor(get_string("com_1")) |
| something = await get_uinfo(ult) |
| if not something: |
| return |
| user, reason = something |
| if not user: |
| return await xx.edit(get_string("adm_1")) |
| if user.id in DEVLIST: |
| return await xx.edit(get_string("kick_2")) |
| if getattr(user, "is_self", False): |
| return await xx.edit(get_string("kick_3")) |
| try: |
| await ult.client.kick_participant(ult.chat_id, user.id) |
| except BadRequestError as er: |
| LOGS.info(er) |
| return await xx.edit(get_string("kick_1")) |
| except Exception as e: |
| LOGS.exception(e) |
| return |
| text = get_string("kick_4").format( |
| inline_mention(user), inline_mention(await ult.get_sender()), ult.chat.title |
| ) |
| if reason: |
| text += get_string("ban_5").format(reason) |
| await xx.edit(text) |
|
|
|
|
| @ultroid_cmd( |
| pattern="tban( (.*)|$)", |
| admins_only=True, |
| manager=True, |
| require="ban_users", |
| fullsudo=True, |
| ) |
| async def tkicki(e): |
| huh = e.text.split() |
| inputt = None |
| try: |
| tme = huh[1] |
| except IndexError: |
| return await e.eor(get_string("adm_3"), time=15) |
| try: |
| inputt = huh[2] |
| except IndexError: |
| if e.reply_to_msg_id: |
| inputt = (await e.get_reply_message()).sender_id |
| if not inputt: |
| return await e.eor(get_string("tban_1")) |
| userid = await e.client.parse_id(inputt) |
| try: |
| user = await e.client.get_entity(userid) |
| except Exception as ex: |
| return await eor(e, f"`{ex}`") |
| try: |
| bun = ban_time(tme) |
| await e.client.edit_permissions( |
| e.chat_id, user.id, until_date=bun, view_messages=False |
| ) |
| await eod( |
| e, |
| get_string("tban_2").format(inline_mention(user), e.chat.title, tme), |
| time=15, |
| ) |
| except Exception as m: |
| return await e.eor(str(m)) |
|
|
|
|
| @ultroid_cmd(pattern="pin$", manager=True, require="pin_messages", fullsudo=True) |
| async def pin(msg): |
| if not msg.is_reply: |
| return await eor(msg, get_string("pin_1")) |
| me = await msg.get_reply_message() |
| if me.is_private: |
| text = "`Pinned.`" |
| else: |
| text = f"Pinned [This Message]({me.message_link}) !" |
| try: |
| await msg.client.pin_message(msg.chat_id, me.id, notify=False) |
| except BadRequestError: |
| return await eor(msg, get_string("adm_2")) |
| except Exception as e: |
| return await eor(msg, f"**ERROR:**`{e}`") |
| await eor(msg, text) |
|
|
|
|
| @ultroid_cmd( |
| pattern="unpin($| (.*))", |
| manager=True, |
| require="pin_messages", |
| fullsudo=True, |
| ) |
| async def unp(ult): |
| xx = await ult.eor(get_string("com_1")) |
| ch = (ult.pattern_match.group(1).strip()).strip() |
| msg = None |
| if ult.is_reply: |
| msg = ult.reply_to_msg_id |
| elif ch != "all": |
| return await xx.edit(get_string("unpin_1").format(HNDLR)) |
| try: |
| await ult.client.unpin_message(ult.chat_id, msg) |
| except BadRequestError: |
| return await xx.edit(get_string("adm_2")) |
| except Exception as e: |
| return await xx.edit(f"**ERROR:**`{e}`") |
| await xx.edit("`Unpinned!`") |
|
|
|
|
| @ultroid_cmd( |
| pattern="tpin( (.*)|$)", |
| admins_only=True, |
| manager=True, |
| require="pin_messages", |
| fullsudo=True, |
| ) |
| async def pin_message(ult): |
| match = ult.pattern_match.group(1).strip() |
| if not ult.is_reply: |
| return await ult.eor("`Reply to message..`", time=6) |
| if not match: |
| return await ult.eor("`Please provide time..`", time=8) |
| msg = await ult.eor(get_string("com_1")) |
| msg_id = ult.reply_to_msg_id |
| try: |
| time = ban_time(match) |
| await ult.client.pin_message(ult.chat_id, msg_id) |
| await msg.eor(f"`pinned for time` `{time}`", time=8) |
| except Exception as er: |
| return await msg.edit(str(er)) |
| await asyncio.sleep(time) |
| try: |
| await ult.client.unpin_message(ult.chat_id, msg_id) |
| except Exception as er: |
| LOGS.exception(er) |
|
|
|
|
| @ultroid_cmd(pattern="purge( (.*)|$)", manager=True, require="delete_messages") |
| async def fastpurger(purg): |
| match = purg.pattern_match.group(1).strip() |
| try: |
| ABC = purg.text[6] |
| except IndexError: |
| ABC = None |
| if ABC and purg.text[6] in ["m", "a"]: |
| return |
| if not purg._client._bot and ( |
| (match) |
| or (purg.is_reply and (purg.is_private or isinstance(purg.chat, types.Chat))) |
| ): |
| p = 0 |
| async for msg in purg.client.iter_messages( |
| purg.chat_id, |
| limit=int(match) if match else None, |
| min_id=purg.reply_to_msg_id if purg.is_reply else None, |
| ): |
| await msg.delete() |
| p += 0 |
| return await eor(purg, f"Purged {p} Messages! ", time=5) |
| if not purg.reply_to_msg_id: |
| return await eor(purg, get_string("purge_1"), time=10) |
| try: |
| await purg.client.delete_messages( |
| purg.chat_id, list(range(purg.reply_to_msg_id, purg.id)) |
| ) |
|
|
| except Exception as er: |
| LOGS.info(er) |
| await purg.eor("__Fast purge complete!__", time=5) |
|
|
|
|
| @ultroid_cmd( |
| pattern="purgeme( (.*)|$)", |
| ) |
| async def fastpurgerme(purg): |
| if num := purg.pattern_match.group(1).strip(): |
| try: |
| nnt = int(num) |
| except BaseException: |
| await eor(purg, get_string("com_3"), time=5) |
| return |
| mp = 0 |
| async for mm in purg.client.iter_messages( |
| purg.chat_id, limit=nnt, from_user="me" |
| ): |
| await mm.delete() |
| mp += 1 |
| await eor(purg, f"Purged {mp} Messages!", time=5) |
| return |
| elif not purg.reply_to_msg_id: |
| return await eod( |
| purg, |
| "`Reply to a message to purge from or use it like ``purgeme <num>`", |
| time=10, |
| ) |
| chat = await purg.get_input_chat() |
| msgs = [] |
| async for msg in purg.client.iter_messages( |
| chat, |
| from_user="me", |
| min_id=purg.reply_to_msg_id, |
| ): |
| msgs.append(msg) |
| if msgs: |
| await purg.client.delete_messages(chat, msgs) |
| await purg.eor( |
| "__Fast purge complete!__\n**Purged** `" + str(len(msgs)) + "` **messages.**", |
| time=5, |
| ) |
|
|
|
|
| @ultroid_cmd( |
| pattern="purgeall$", |
| ) |
| async def _(e): |
| if not e.is_reply: |
| return await eod( |
| e, |
| get_string("purgeall_1"), |
| ) |
|
|
| msg = await e.get_reply_message() |
| name = msg.sender |
| try: |
| await e.client.delete_messages(e.chat_id, from_user=msg.sender_id) |
| await e.eor(get_string("purgeall_2").format(name.first_name), time=5) |
| except Exception as er: |
| return await e.eor(str(er), time=5) |
|
|
| @ultroid_cmd(pattern="pinned", manager=True, groups_only=True) |
| async def djshsh(event): |
| chat = await event.get_chat() |
| if isinstance(chat, types.Chat): |
| FChat = await event.client(GetFullChatRequest(chat.id)) |
| elif isinstance(chat, types.Channel): |
| FChat = await event.client(GetFullChannelRequest(chat.id)) |
| else: |
| return |
| msg_id = FChat.full_chat.pinned_msg_id |
| if not msg_id: |
| return await event.eor(get_string("pinned_1")) |
| msg = await event.client.get_messages(chat.id, ids=msg_id) |
| if msg: |
| await event.eor(get_string("pinned_2").format(msg.message_link)) |
|
|
|
|
| @ultroid_cmd( |
| pattern="listpinned$", |
| ) |
| async def get_all_pinned(event): |
| x = await event.eor(get_string("com_1")) |
| chat_id = (str(event.chat_id)).replace("-100", "") |
| chat_name = get_display_name(event.chat) |
| a = "" |
| c = 1 |
| async for i in event.client.iter_messages( |
| event.chat_id, filter=InputMessagesFilterPinned |
| ): |
| if i.message: |
| t = " ".join(i.message.split()[:4]) |
| txt = f"{t}...." |
| else: |
| txt = "Go to message." |
| a += f"{c}. <a href=https://t.me/c/{chat_id}/{i.id}>{txt}</a>\n" |
| c += 1 |
|
|
| if c == 1: |
| m = f"<b>The pinned message in {chat_name}:</b>\n\n" |
| else: |
| m = f"<b>List of pinned message(s) in {chat_name}:</b>\n\n" |
|
|
| if not a: |
| return await eor(x, get_string("listpin_1"), time=5) |
|
|
| await x.edit(m + a, parse_mode="html") |
|
|
|
|
| @ultroid_cmd( |
| pattern="autodelete( (.*)|$)", |
| admins_only=True, |
| ) |
| async def autodelte(ult): |
| match = ult.pattern_match.group(1).strip() |
| if not match or match not in ["24h", "7d", "1m", "off"]: |
| return await ult.eor("`Please Use in Proper Format..`", time=5) |
| if match == "24h": |
| tt = 3600 * 24 |
| elif match == "7d": |
| tt = 3600 * 24 * 7 |
| elif match == "1m": |
| tt = 3600 * 24 * 31 |
| else: |
| tt = 0 |
| try: |
| await ult.client(SetHistoryTTLRequest(ult.chat_id, period=tt)) |
| except ChatNotModifiedError: |
| return await ult.eor( |
| f"Auto Delete Setting is Already same to `{match}`", time=5 |
| ) |
| await ult.eor(f"Auto Delete Status Changed to `{match}` !") |
|
|