| from pyrogram import filters, Client, enums |
| from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup |
| from database.connections_mdb import add_connection, all_connections, if_active, delete_connection |
| from info import ADMINS |
| import logging |
|
|
| logger = logging.getLogger(__name__) |
| logger.setLevel(logging.ERROR) |
|
|
|
|
| @Client.on_message((filters.private | filters.group) & filters.command('connect')) |
| async def addconnection(client, message): |
| userid = message.from_user.id if message.from_user else None |
| if not userid: |
| return await message.reply(f"You are anonymous admin. Use /connect {message.chat.id} in PM") |
| chat_type = message.chat.type |
|
|
| if chat_type == enums.ChatType.PRIVATE: |
| try: |
| cmd, group_id = message.text.split(" ", 1) |
| except: |
| await message.reply_text( |
| "<b>Enter in correct format!</b>\n\n" |
| "<code>/connect groupid</code>\n\n" |
| "<i>Get your Group id by adding this bot to your group and use <code>/id</code></i>", |
| quote=True |
| ) |
| return |
|
|
| elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: |
| group_id = message.chat.id |
|
|
| try: |
| st = await client.get_chat_member(group_id, userid) |
| if ( |
| st.status != enums.ChatMemberStatus.ADMINISTRATOR |
| and st.status != enums.ChatMemberStatus.OWNER |
| and userid not in ADMINS |
| ): |
| return await message.reply_text("You should be an admin in Given group!", quote=True) |
| except Exception as e: |
| logger.exception(e) |
| return await message.reply_text("Invalid Group ID!\n\nIf correct, Make sure I'm present in your group!!", quote=True,) |
| try: |
| st = await client.get_chat_member(group_id, "me") |
| if st.status == enums.ChatMemberStatus.ADMINISTRATOR: |
| ttl = await client.get_chat(group_id) |
| title = ttl.title |
|
|
| addcon = await add_connection(str(group_id), str(userid)) |
| if addcon: |
| await message.reply_text( |
| f"Successfully connected to **{title}**\nNow manage your group from my pm !", |
| quote=True, |
| parse_mode=enums.ParseMode.MARKDOWN |
| ) |
| if chat_type in ["group", "supergroup"]: |
| await client.send_message( |
| userid, |
| f"Connected to **{title}** !", |
| parse_mode=enums.ParseMode.MARKDOWN |
| ) |
| else: |
| await message.reply_text("You're already connected to this chat!", quote=True) |
| else: |
| await message.reply_text("Add me as an admin in group", quote=True) |
| except Exception as e: |
| logger.exception(e) |
| return await message.reply_text('Some error occurred! Try again later.', quote=True) |
| |
|
|
| @Client.on_message((filters.private | filters.group) & filters.command('disconnect')) |
| async def deleteconnection(client, message): |
| userid = message.from_user.id if message.from_user else None |
| if not userid: |
| return await message.reply(f"You are anonymous admin. Use /connect {message.chat.id} in PM") |
| chat_type = message.chat.type |
| if chat_type == enums.ChatType.PRIVATE: |
| await message.reply_text("Run /connections to view or disconnect from groups!", quote=True) |
| elif chat_type in [enums.ChatType.GROUP, enums.ChatType.SUPERGROUP]: |
| group_id = message.chat.id |
|
|
| st = await client.get_chat_member(group_id, userid) |
| if ( |
| st.status != enums.ChatMemberStatus.ADMINISTRATOR |
| and st.status != enums.ChatMemberStatus.OWNER |
| and str(userid) not in ADMINS |
| ): |
| return |
|
|
| delcon = await delete_connection(str(userid), str(group_id)) |
| if delcon: |
| await message.reply_text("Successfully disconnected from this chat", quote=True) |
| else: |
| await message.reply_text("This chat isn't connected to me!\nDo /connect to connect.", quote=True) |
|
|
|
|
| @Client.on_message(filters.private & filters.command(["connections"])) |
| async def connections(client, message): |
| userid = message.from_user.id |
| groupids = await all_connections(str(userid)) |
| if groupids is None: |
| return await message.reply_text("There are no active connections!! Connect to some groups first.", quote=True) |
| buttons = [] |
| for groupid in groupids: |
| try: |
| ttl = await client.get_chat(int(groupid)) |
| title = ttl.title |
| active = await if_active(str(userid), str(groupid)) |
| act = " - ACTIVE" if active else "" |
| buttons.append([InlineKeyboardButton(f"{title}{act}", callback_data=f"groupcb:{groupid}:{act}")]) |
| except: |
| pass |
| if buttons: |
| await message.reply_text("Your connected group details ;\n\n", reply_markup=InlineKeyboardMarkup(buttons), quote=True) |
| else: |
| await message.reply_text("There are no active connections!! Connect to some groups first.", quote=True) |
|
|