|
|
|
|
|
|
|
|
|
|
|
|
|
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()) |
|
|