Spaces:
Running
Running
# Ultroid - UserBot | |
# Copyright (C) 2021-2023 TeamUltroid | |
# | |
# This file is a part of < https://github.com/TeamUltroid/Ultroid/ > | |
# PLease read the GNU Affero General Public License in | |
# <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>. | |
from . import get_help | |
__doc__ = get_help("help_broadcast") | |
import asyncio | |
import io | |
from telethon.utils import get_display_name | |
from pyUltroid.dB.base import KeyManager | |
from . import HNDLR, LOGS, eor, get_string, udB, ultroid_bot, ultroid_cmd | |
KeyM = KeyManager("BROADCAST", cast=list) | |
async def broadcast_adder(event): | |
msgg = event.pattern_match.group(1).strip() | |
x = await event.eor(get_string("bd_1")) | |
if msgg == "all": | |
await x.edit(get_string("bd_2")) | |
chats = [ | |
e.entity | |
for e in await event.client.get_dialogs() | |
if (e.is_group or e.is_channel) | |
] | |
new = 0 | |
for i in chats: | |
try: | |
if ( | |
i.broadcast | |
and (i.creator or i.admin_rights) | |
and not KeyM.contains(i.id) | |
): | |
new += 1 | |
cid = f"-100{i.id}" | |
KeyM.add(int(cid)) | |
except Exception as Ex: | |
LOGS.exception(Ex) | |
await x.edit(get_string("bd_3").format(KeyM.count(), new)) | |
return | |
if event.reply_to_msg_id: | |
previous_message = await event.get_reply_message() | |
raw_text = previous_message.text | |
lines = raw_text.split("\n") | |
length = len(lines) | |
for line_number in range(1, length - 2): | |
channel_id = lines[line_number][4:-1] | |
if not KeyM.contains(channel_id): | |
KeyM.add(channel_id) | |
await x.edit(get_string("bd_4")) | |
await asyncio.sleep(3) | |
await event.delete() | |
return | |
chat_id = event.chat_id | |
if chat_id == udB.get_key("LOG_CHANNEL"): | |
return | |
if KeyM.contains(chat_id): | |
await x.edit(get_string("bd_6")) | |
elif xx := KeyM.add(chat_id): | |
await x.edit(get_string("bd_5")) | |
else: | |
await x.edit(get_string("sf_8")) | |
await asyncio.sleep(3) | |
await x.delete() | |
async def broadcast_remover(event): | |
chat_id = event.pattern_match.group(1).strip() or event.chat_id | |
x = await event.eor(get_string("com_1")) | |
if chat_id == "all": | |
await x.edit(get_string("bd_8")) | |
udB.del_key("BROADCAST") | |
await x.edit("Database cleared.") | |
return | |
if KeyM.contains(chat_id): | |
KeyM.remove(chat_id) | |
await x.edit(get_string("bd_7")) | |
else: | |
await x.edit(get_string("bd_9")) | |
await asyncio.sleep(3) | |
await x.delete() | |
async def list_all(event): | |
x = await event.eor(get_string("com_1")) | |
channels = KeyM.get() | |
num = KeyM.count() | |
if not channels: | |
return await eor(x, "No chats were added.", time=5) | |
msg = "Channels in database:\n" | |
for channel in channels: | |
name = "" | |
try: | |
name = get_display_name(await event.client.get_entity(channel)) | |
except ValueError: | |
name = "" | |
msg += f"=> **{name}** [`{channel}`]\n" | |
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) | |
async def forw(event): | |
if not event.is_reply: | |
return await event.eor(get_string("ex_1")) | |
ultroid_bot = event.client | |
channels = KeyM.get() | |
x = await event.eor("Sending...") | |
if not channels: | |
return await x.edit(f"Please add channels by using `{HNDLR}add` in them.") | |
error_count = 0 | |
sent_count = 0 | |
previous_message = await event.get_reply_message() | |
error_count = 0 | |
for channel in channels: | |
try: | |
await ultroid_bot.forward_messages(channel, previous_message) | |
sent_count += 1 | |
await x.edit( | |
f"Sent : {sent_count}\nError : {error_count}\nTotal : {len(channels)}", | |
) | |
except Exception: | |
try: | |
await ultroid_bot.send_message( | |
udB.get_key("LOG_CHANNEL"), | |
f"Error in sending at {channel}.", | |
) | |
except Exception as Em: | |
LOGS.info(Em) | |
error_count += 1 | |
await x.edit( | |
f"Sent : {sent_count}\nError : {error_count}\nTotal : {len(channels)}", | |
) | |
await x.edit(f"{sent_count} messages sent with {error_count} errors.") | |
if error_count > 0: | |
await ultroid_bot.send_message( | |
udB.get_key("LOG_CHANNEL"), f"{error_count} Errors" | |
) | |
async def sending(event): | |
x = await event.eor(get_string("com_1")) | |
if not event.is_reply: | |
return await x.edit(get_string("ex_1")) | |
channels = KeyM.get() | |
if not channels: | |
return await x.edit(f"Please add channels by using `{HNDLR}add` in them.") | |
await x.edit("Sending....") | |
if event.reply_to_msg_id: | |
previous_message = await event.get_reply_message() | |
if previous_message.poll: | |
return await x.edit(f"Reply `{HNDLR}forward` for polls.") | |
if previous_message: | |
error_count = 0 | |
sent_count = 0 | |
for channel in channels: | |
try: | |
await ultroid_bot.send_message(channel, previous_message) | |
sent_count += 1 | |
await x.edit( | |
f"Sent : {sent_count}\nError : {error_count}\nTotal : {len(channels)}", | |
) | |
except Exception as error: | |
await ultroid_bot.send_message( | |
udB.get_key("LOG_CHANNEL"), | |
f"Error in sending at {channel}.\n\n{error}", | |
) | |
error_count += 1 | |
await x.edit( | |
f"Sent : {sent_count}\nError : {error_count}\nTotal : {len(channels)}", | |
) | |
await x.edit(f"{sent_count} messages sent with {error_count} errors.") | |
if error_count > 0: | |
await ultroid_bot.send_message( | |
udB.get_key("LOG_CHANNEL"), | |
f"{error_count} Errors", | |
) | |