|
import asyncio |
|
|
|
from pyrogram import filters |
|
from pyrogram.enums import ChatMembersFilter |
|
from pyrogram.errors import FloodWait |
|
|
|
from DragMusic import app |
|
from DragMusic.misc import SUDOERS |
|
from DragMusic.utils.database import ( |
|
get_active_chats, |
|
get_authuser_names, |
|
get_client, |
|
get_served_chats, |
|
get_served_users, |
|
) |
|
from DragMusic.utils.decorators.language import language |
|
from DragMusic.utils.formatters import alpha_to_int |
|
from config import adminlist |
|
|
|
IS_BROADCASTING = False |
|
|
|
|
|
@app.on_message(filters.command("broadcast") & SUDOERS) |
|
@language |
|
async def braodcast_message(client, message, _): |
|
global IS_BROADCASTING |
|
if message.reply_to_message: |
|
x = message.reply_to_message.id |
|
y = message.chat.id |
|
else: |
|
if len(message.command) < 2: |
|
return await message.reply_text(_["broad_2"]) |
|
query = message.text.split(None, 1)[1] |
|
if "-pin" in query: |
|
query = query.replace("-pin", "") |
|
if "-nobot" in query: |
|
query = query.replace("-nobot", "") |
|
if "-pinloud" in query: |
|
query = query.replace("-pinloud", "") |
|
if "-assistant" in query: |
|
query = query.replace("-assistant", "") |
|
if "-user" in query: |
|
query = query.replace("-user", "") |
|
if query == "": |
|
return await message.reply_text(_["broad_8"]) |
|
|
|
IS_BROADCASTING = True |
|
await message.reply_text(_["broad_1"]) |
|
|
|
if "-nobot" not in message.text: |
|
sent = 0 |
|
pin = 0 |
|
chats = [] |
|
schats = await get_served_chats() |
|
for chat in schats: |
|
chats.append(int(chat["chat_id"])) |
|
for i in chats: |
|
try: |
|
m = ( |
|
await app.forward_messages(i, y, x) |
|
if message.reply_to_message |
|
else await app.send_message(i, text=query) |
|
) |
|
if "-pin" in message.text: |
|
try: |
|
await m.pin(disable_notification=True) |
|
pin += 1 |
|
except: |
|
continue |
|
elif "-pinloud" in message.text: |
|
try: |
|
await m.pin(disable_notification=False) |
|
pin += 1 |
|
except: |
|
continue |
|
sent += 1 |
|
await asyncio.sleep(0.2) |
|
except FloodWait as fw: |
|
flood_time = int(fw.value) |
|
if flood_time > 200: |
|
continue |
|
await asyncio.sleep(flood_time) |
|
except: |
|
continue |
|
try: |
|
await message.reply_text(_["broad_3"].format(sent, pin)) |
|
except: |
|
pass |
|
|
|
if "-user" in message.text: |
|
susr = 0 |
|
served_users = [] |
|
susers = await get_served_users() |
|
for user in susers: |
|
served_users.append(int(user["user_id"])) |
|
for i in served_users: |
|
try: |
|
m = ( |
|
await app.forward_messages(i, y, x) |
|
if message.reply_to_message |
|
else await app.send_message(i, text=query) |
|
) |
|
susr += 1 |
|
await asyncio.sleep(0.2) |
|
except FloodWait as fw: |
|
flood_time = int(fw.value) |
|
if flood_time > 200: |
|
continue |
|
await asyncio.sleep(flood_time) |
|
except: |
|
pass |
|
try: |
|
await message.reply_text(_["broad_4"].format(susr)) |
|
except: |
|
pass |
|
|
|
if "-assistant" in message.text: |
|
aw = await message.reply_text(_["broad_5"]) |
|
text = _["broad_6"] |
|
from DragMusic.core.userbot import assistants |
|
|
|
for num in assistants: |
|
sent = 0 |
|
client = await get_client(num) |
|
async for dialog in client.get_dialogs(): |
|
try: |
|
await client.forward_messages( |
|
dialog.chat.id, y, x |
|
) if message.reply_to_message else await client.send_message( |
|
dialog.chat.id, text=query |
|
) |
|
sent += 1 |
|
await asyncio.sleep(3) |
|
except FloodWait as fw: |
|
flood_time = int(fw.value) |
|
if flood_time > 200: |
|
continue |
|
await asyncio.sleep(flood_time) |
|
except: |
|
continue |
|
text += _["broad_7"].format(num, sent) |
|
try: |
|
await aw.edit_text(text) |
|
except: |
|
pass |
|
IS_BROADCASTING = False |
|
|
|
|
|
async def auto_clean(): |
|
while not await asyncio.sleep(10): |
|
try: |
|
served_chats = await get_active_chats() |
|
for chat_id in served_chats: |
|
if chat_id not in adminlist: |
|
adminlist[chat_id] = [] |
|
async for user in app.get_chat_members( |
|
chat_id, filter=ChatMembersFilter.ADMINISTRATORS |
|
): |
|
if user.privileges.can_manage_video_chats: |
|
adminlist[chat_id].append(user.user.id) |
|
authusers = await get_authuser_names(chat_id) |
|
for user in authusers: |
|
user_id = await alpha_to_int(user) |
|
adminlist[chat_id].append(user_id) |
|
except: |
|
continue |
|
|
|
|
|
asyncio.create_task(auto_clean()) |
|
|