| |
| |
| |
| |
| |
| |
| from . import get_help |
|
|
| __doc__ = get_help("help_channelhacks") |
|
|
|
|
| import asyncio |
| import io |
|
|
| from telethon.errors.rpcerrorlist import FloodWaitError |
| from telethon.utils import get_display_name, get_peer_id |
|
|
| from pyUltroid.dB.base import KeyManager |
|
|
| from . import LOGS, asst, eor, events, get_string, udB, ultroid_bot, ultroid_cmd |
|
|
| ERROR = {} |
| SourceM = KeyManager("CH_SOURCE", cast=list) |
| DestiM = KeyManager("CH_DESTINATIONS", cast=list) |
|
|
|
|
| async def autopost_func(e): |
| if not udB.get_key("AUTOPOST"): |
| return |
| x = SourceM.get() |
| th = await e.get_chat() |
| if get_peer_id(th) not in x: |
| return |
| y = DestiM.get() |
| for ys in y: |
| try: |
| await e.client.send_message(int(ys), e.message) |
| except Exception as ex: |
| try: |
| ERROR[str(ex)] |
| except KeyError: |
| ERROR.update({str(ex): ex}) |
| Error = f"**Error on AUTOPOST**\n\n`{ex}`" |
| await asst.send_message(udB.get_key("LOG_CHANNEL"), Error) |
|
|
|
|
| @ultroid_cmd(pattern="shift (.*)") |
| async def _(e): |
| x = e.pattern_match.group(1).strip() |
| z = await e.eor(get_string("com_1")) |
| a, b = x.split("|") |
| try: |
| c = await e.client.parse_id(a) |
| except Exception: |
| await z.edit(get_string("cha_1")) |
| return |
| try: |
| d = await e.client.parse_id(b) |
| except Exception as er: |
| LOGS.exception(er) |
| await z.edit(get_string("cha_1")) |
| return |
| async for msg in e.client.iter_messages(int(c), reverse=True): |
| try: |
| await asyncio.sleep(2) |
| await e.client.send_message(int(d), msg) |
| except FloodWaitError as er: |
| await asyncio.sleep(er.seconds + 5) |
| await e.client.send_message(int(d), msg) |
| except BaseException as er: |
| LOGS.exception(er) |
| await z.edit("Done") |
|
|
|
|
| @ultroid_cmd(pattern="asource (.*)") |
| async def source(e): |
| if x := e.pattern_match.group(1).strip(): |
| try: |
| y = await e.client.parse_id(x) |
| except Exception as er: |
| LOGS.exception(er) |
| return |
| else: |
| y = e.chat_id |
| if not SourceM.contains(y): |
| SourceM.add(y) |
| await e.eor(get_string("cha_2")) |
| ultroid_bot.add_handler(autopost_func, events.NewMessage()) |
| else: |
| await e.eor(get_string("cha_3")) |
|
|
|
|
| @ultroid_cmd(pattern="dsource( (.*)|$)") |
| async def dd(event): |
| chat_id = event.pattern_match.group(1).strip() |
| x = await event.eor(get_string("com_1")) |
| if chat_id == "all": |
| await x.edit(get_string("bd_8")) |
| udB.del_key("CH_SOURCE") |
| await x.edit(get_string("cha_4")) |
| return |
| if chat_id: |
| try: |
| y = await event.client.parse_id(chat_id) |
| except Exception as er: |
| LOGS.exception(er) |
| return |
| else: |
| y = event.chat_id |
| if SourceM.contains(y): |
| SourceM.remove(y) |
| await eor(x, get_string("cha_5"), time=5) |
| else: |
| await eor(x, "Source channel is already removed from database. ", time=3) |
|
|
|
|
| @ultroid_cmd(pattern="listsource") |
| async def list_all(event): |
| x = await event.eor(get_string("com_1")) |
| num = SourceM.count() |
| if not num: |
| return await eor(x, "No chats were added.", time=5) |
| msg = get_string("cha_8") |
| channels = SourceM.get() |
| for channel in channels: |
| name = "" |
| try: |
| name = get_display_name(await event.client.get_entity(int(channel))) |
| except BaseException: |
| name = "" |
| msg += f"\n=> **{name}** [`{channel}`]" |
| msg += f"\nTotal {num} channels." |
| if len(msg) > 4096: |
| MSG = msg.replace("*", "").replace("`", "") |
| with io.BytesIO(str.encode(MSG)) as out_file: |
| out_file.name = "channels.txt" |
| await event.reply( |
| "Channels in database", |
| file=out_file, |
| force_document=True, |
| allow_cache=False, |
| ) |
| await x.delete() |
| else: |
| await x.edit(msg) |
|
|
|
|
| @ultroid_cmd(pattern="adest (.*)") |
| async def destination(e): |
| if x := e.pattern_match.group(1).strip(): |
| try: |
| y = await e.client.parse_id(x) |
| except Exception as er: |
| LOGS.exception(er) |
| return |
| else: |
| y = e.chat_id |
| if not DestiM.contains(y): |
| DestiM.add(y) |
| await e.eor("Destination added succesfully") |
| else: |
| await e.eor("Destination channel already added") |
|
|
|
|
| @ultroid_cmd(pattern="ddest( (.*)|$)") |
| async def dd(event): |
| chat_id = event.pattern_match.group(1).strip() |
| x = await event.eor(get_string("com_1")) |
| if chat_id == "all": |
| await x.edit(get_string("bd_8")) |
| udB.del_key("CH_DESTINATION") |
| await x.edit("Destinations database cleared.") |
| return |
| if chat_id: |
| try: |
| y = await event.client.parse_id(chat_id) |
| except Exception as er: |
| LOGS.exception(er) |
| return |
| else: |
| y = event.chat_id |
| if DestiM.contains(y): |
| DestiM.remove(y) |
| await eor(x, "Destination removed from database") |
| else: |
| await eor(x, "Destination channel is already removed from database. ", time=5) |
|
|
|
|
| @ultroid_cmd(pattern="listdest") |
| async def list_all(event): |
| ultroid_bot = event.client |
| x = await event.eor(get_string("com_1")) |
| channels = DestiM.get() |
| num = len(channels) |
| if not num: |
| return await eor(x, "No chats were added.", time=5) |
| msg = get_string("cha_7") |
| for channel in channels: |
| name = "" |
| try: |
| name = get_display_name(await ultroid_bot.get_entity(int(channel))) |
| except BaseException: |
| name = "" |
| msg += f"\n=> **{name}** [`{channel}`]" |
| msg += f"\nTotal {num} channels." |
| if len(msg) > 4096: |
| MSG = msg.replace("*", "").replace("`", "") |
| with io.BytesIO(str.encode(MSG)) as out_file: |
| out_file.name = "channels.txt" |
| await ultroid_bot.send_file( |
| event.chat_id, |
| out_file, |
| force_document=True, |
| allow_cache=False, |
| caption="Destination channels in database", |
| reply_to=event, |
| ) |
| await x.delete() |
| else: |
| await x.edit(msg) |
|
|
|
|
| if udB.get_key("AUTOPOST"): |
| ultroid_bot.add_handler(autopost_func, events.NewMessage()) |
|
|