wer
unknown
python
3 years ago
3.6 kB
8
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...