diff --git a/killallmembers.py b/killallmembers.py index 2dbea06..d5aaa13 100644 --- a/killallmembers.py +++ b/killallmembers.py @@ -1,6 +1,7 @@ """ PagerMaid Plugin killallmembers """ from asyncio import sleep from telethon.tl.types import ChannelParticipantsAdmins +from telethon.errors.rpcerrorlist import FloodWaitError from pagermaid.listener import listener @listener(is_plugin=True, outgoing=True, command="killallmembers", @@ -9,43 +10,53 @@ async def killallmembers(context): """ PagerMaid Plugin killallmembers """ await context.edit('正在准备扬了这个破群的所有人...') chat = await context.get_chat() + is_channel = False if not context.is_group: - await context.edit('发生错误,请在群组中运行本命令。') + if context.is_channel: + is_channel = True + else: + is_channel = False + await context.edit('发生错误,请在群组或频道中运行本命令。') + await sleep(10) + await context.delete() + return + try: + chat = await context.get_chat() + admins = await context.client.get_participants(chat, filter=ChannelParticipantsAdmins) + users = await context.client.get_participants(chat) + admins_ids = [a.id for a in admins] + users_ids = [u.id for u in users] + users_wo_admins = list(set(users_ids).difference(set(admins_ids))) + except: + await context.edit('发生错误,无法获取本群名单。') await sleep(10) await context.delete() return False - else: - try: - chat = await context.get_chat() - admins = await context.client.get_participants(chat, filter=ChannelParticipantsAdmins) - users = await context.client.get_participants(chat) - admins_ids = [a.id for a in admins] - users_ids = [u.id for u in users] - users_wo_admins = list(set(users_ids).difference(set(admins_ids))) - except: - await context.edit('发生错误,无法获取本群名单。') - await sleep(10) - await context.delete() - return False - if context.sender.id in admins_ids: - i = 0 - for user_id in users_wo_admins: - try: - await context.client.edit_permissions(context.chat_id, user_id, view_messages=False) - i += 1 - if i == len(users_wo_admins): - await context.edit(f'完成!\n进度:{i}/{len(users_wo_admins)}') - elif (i < 10) or (i % 10 == 0): - await context.edit(f'进度:{i}/{len(users_wo_admins)}' - "{'percent: {:.0f}%'.format(i/len(users_wo_admins))") - except: - await context.edit('发生错误') - await sleep(10) - await context.delete() - await sleep(5) - await context.delete() - else: - await context.edit('你又不是管理员,你在这儿干个屁?') - await sleep(10) - await context.delete() + if (not is_channel) and (context.sender.id not in admins_ids): + await context.edit('你又不是管理员,你在这儿干个屁?') + await sleep(10) + await context.delete() + else: + i = 0 + for user_id in users_wo_admins: + try: + await context.client.edit_permissions(context.chat_id, user_id, view_messages=False) + i += 1 + if i == len(users_wo_admins): + await context.edit(f'完成!\n进度: {i}/{len(users_wo_admins)}') + a = 1 + elif (i < 3) or (i % 10 == 0): + percent = i/len(users_wo_admins) * 100 + await context.edit(f'进度: {i}/{len(users_wo_admins)}\nPercent: {percent:.2f}%') + await sleep(.5) + except FloodWaitError as e: + await context.edit('尝试次数过多,请稍后重试\n' + str(e)) + await sleep(10) + await context.delete() + return + except: + await context.edit('发生错误') + await sleep(10) + await context.delete() + return diff --git a/list.json b/list.json index 6ce2371..1dec051 100644 --- a/list.json +++ b/list.json @@ -292,7 +292,7 @@ }, { "name": "killallmembers", - "version": "1.03", + "version": "1.10", "section": "chat", "maintainer": "Pentacene", "size": "idk",