sycgram/plugins/kick.py

55 lines
1.8 KiB
Python
Raw Permalink Normal View History

2022-04-06 14:39:27 +00:00
import asyncio
from inspect import Parameter
from loguru import logger
from core import command
from pyrogram import Client
from pyrogram.errors import FloodWait, RPCError
from pyrogram.types import Message
from tools.helpers import delete_this, get_cmd_error, kick_one
@Client.on_message(command('sb'))
async def sb(cli: Client, msg: Message):
"""回复一条消息,将在所有共同且拥有管理踢人权限的群组中踢出目标消息的主人"""
cmd, *_ = Parameter.get(msg)
reply_to_message = msg.reply_to_message
if not reply_to_message or msg.chat.type in ['bot', 'private']:
await msg.edit_text(get_cmd_error(cmd))
return
counter, target = 0, reply_to_message.from_user
common_groups = await target.get_common_chats()
logger.info(
f"Start to kick <{target.first_name}{target.last_name} <{target.id}>")
for chat in common_groups:
try:
if await kick_one(cli, chat.id, target.id):
counter = counter + 1
except FloodWait as e:
await asyncio.sleep(e.x)
if await kick_one(cli, chat.id, target.id):
counter = counter + 1
logger.success(
f"Kick this user out of <{chat.tile} {chat.id}>"
)
except RPCError as e:
logger.warning(
f"No admin rights in this group <{chat.title} {chat.id}>")
logger.warning(e)
# delete this user all messages
await cli.delete_user_history(msg.chat.id, target.id)
# Inform
text = f"😂 Kick {target.mention(style='md')} in {counter} common groups."
await msg.edit_text(text)
await asyncio.sleep(10)
await delete_this(msg)
# log
logger.success(f"{cmd} | {text}")
await logger.complete()