wer

 avatar
unknown
python
2 years ago
3.6 kB
4
Indexable
from pyrogram import Client, filters
from pyrogram.types import Message, ChatMember
from apscheduler.schedulers.asyncio import AsyncIOScheduler
import asyncio
from pyrogram.enums.chat_members_filter import ChatMembersFilter
from pyrogram.enums.chat_member_status import ChatMemberStatus
from dotenv import load_dotenv
import random
import os

if not os.path.exists("config.env"):
    print("config.env dosyanizi olusturun.")
    exit(0)

load_dotenv("config.env")

api_id = os.environ.get("API_ID", None)
api_hash = os.environ.get("API_HASH", None)
bot_token = os.environ.get("BOT_TOKEN", None)
groups = os.environ.get("GROUPS", None)
users = {}
random_users = []
run_task = False


async def tag_func(client: Client, message: Message, metin: str, chat_id):
    global random_users
    if users:
        while True:
            rand = random.randint(0, len(users) - 1)
            rand_user: ChatMember = users[chat_id][rand]
            if rand_user not in random_users:
                await app.send_message(
                    chat_id="-" + chat_id, text=f"{rand_user.user.mention} {metin}"
                )
                random_users.append(rand_user)
                break
            if len(users) == len(random_users):
                random_users = []


app = Client(
    name="Bot",
    api_id=api_id,
    api_hash=api_hash,
    bot_token=bot_token,
    sleep_threshold=60,
)

scheduler = AsyncIOScheduler()
scheduler.start()
tasked_groups = []


@app.on_message(filters.group & filters.command("tag", [".", "/", "!"]))
async def tag_user(client: Client, message: Message):
    global tasked_groups
    if message.chat.id in tasked_groups:
        await message.reply("`Zaten etiket atıyorum.`", quote=True)
        return
    if str(message.chat.id) in groups and str(message.chat.id) not in tasked_groups:
        admins = [
            i.user.id
            async for i in client.get_chat_members(
                message.chat.id, filter=ChatMembersFilter.ADMINISTRATORS
            )
        ]
        if message.from_user.id not in admins:
            return
        metin = " ".join(message.text.split(" ")[1:])
        global users
        users[str(message.chat.id).replace("-", "")] = [
            i
            async for i in client.get_chat_members(message.chat.id)
            if i.status == ChatMemberStatus.MEMBER
        ]
        scheduler.add_job(
            tag_func,
            "interval",
            args=[client, message, metin, str(message.chat.id).replace("-", "")],
            seconds=3,
            id=str(message.chat.id).replace("-", ""),
        )
        tasked_groups.append(str(message.chat.id))
        c = await message.reply("Etiket atıyorum...", quote=True)
        await asyncio.sleep(1)
        await c.delete()


@app.on_message(filters.group & filters.command("stop", [".", "/", "!"]))
async def stop_tag(client: Client, message: Message):
    if str(message.chat.id) in groups:
        admins = [
            i.user.id
            async for i in client.get_chat_members(
                message.chat.id, filter=ChatMembersFilter.ADMINISTRATORS
            )
        ]
        if message.from_user.id not in admins:
            return
        scheduler.remove_job(str(message.chat.id).replace("-", ""))
        bit = await message.reply("`Yoruldum artık bırakıyorum.`", quote=True)
        await asyncio.sleep(1)
        await bit.delete()


if __name__ == "__main__":
    print("Bot başladı.")
    app.run()
    print("Bot durdu.")
Editor is loading...