File size: 1,587 Bytes
2c41c5f
bec6dd3
2c41c5f
 
e581a8c
bec6dd3
2c41c5f
 
07f63a8
2c41c5f
e581a8c
 
07f63a8
e581a8c
07f63a8
e581a8c
 
 
2c41c5f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from pyrogram import Client
from pyrogram.enums import ChatMemberStatus
from pyrogram.types import ChatMemberUpdated

from Backend import db
from Backend.helper.settings_manager import SettingsManager
from Backend.logger import LOGGER


#----- Kick joiners of the subscription group who lack an active subscription
@Client.on_chat_member_updated()
async def on_user_join(client: Client, chat_member_updated: ChatMemberUpdated):
    if not SettingsManager.current().subscription:
        return
    if chat_member_updated.chat.id != SettingsManager.current().subscription_group_id:
        return

    new_status = chat_member_updated.new_chat_member.status if chat_member_updated.new_chat_member else None
    if new_status != ChatMemberStatus.MEMBER:
        return

    user = chat_member_updated.new_chat_member.user
    db_user = await db.get_user(user.id)
    if db.is_subscription_active(db_user):
        return

    try:
        await client.ban_chat_member(chat_member_updated.chat.id, user.id)
        await client.unban_chat_member(chat_member_updated.chat.id, user.id)
        LOGGER.info(f"Kicked unauthorized user {user.id} from group {chat_member_updated.chat.id}")
        await client.send_message(
            user.id,
            "❌ <b>Access Denied</b>\n\n"
            "You were removed from the private group because you do not have an active subscription.\n"
            "Please press /start in this bot to purchase or renew your subscription."
        )
    except Exception as e:
        LOGGER.error(f"Failed to kick/notify unauthorized user {user.id}: {e}")