Upload 5 files
Browse files- Akeno/plugins/admin.py +351 -0
- Akeno/plugins/info.py +81 -0
- Akeno/plugins/limited.py +34 -0
- Akeno/plugins/purge.py +106 -0
- Akeno/plugins/zombies.py +35 -0
Akeno/plugins/admin.py
ADDED
@@ -0,0 +1,351 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# Copyright (C) 2020-2023 TeamKillerX <https://github.com/TeamKillerX>
|
2 |
+
#
|
3 |
+
# This file is part of TeamKillerX project,
|
4 |
+
# and licensed under GNU Affero General Public License v3.
|
5 |
+
# See the GNU Affero General Public License for more details.
|
6 |
+
#
|
7 |
+
# All rights reserved. See COPYING, AUTHORS.
|
8 |
+
#
|
9 |
+
|
10 |
+
import asyncio
|
11 |
+
from time import time as waktu
|
12 |
+
import time
|
13 |
+
|
14 |
+
from pyrogram import Client
|
15 |
+
from pyrogram import Client as ren
|
16 |
+
from pyrogram import *
|
17 |
+
from pyrogram import filters
|
18 |
+
from pyrogram.errors import *
|
19 |
+
from pyrogram.types import *
|
20 |
+
|
21 |
+
from Akeno.utils.tools import global_no_spam_title
|
22 |
+
from Akeno.utils.handler import Akeno
|
23 |
+
from Akeno.utils.logger import LOGS
|
24 |
+
from config import CMD_HANDLER
|
25 |
+
|
26 |
+
admins_in_chat = {}
|
27 |
+
|
28 |
+
unmute_permissions = ChatPermissions(
|
29 |
+
can_send_messages=True,
|
30 |
+
can_send_media_messages=True,
|
31 |
+
can_send_polls=True,
|
32 |
+
can_change_info=False,
|
33 |
+
can_invite_users=True,
|
34 |
+
can_pin_messages=False,
|
35 |
+
)
|
36 |
+
|
37 |
+
|
38 |
+
async def extract_userid(message, text: str):
|
39 |
+
def is_int(text: str):
|
40 |
+
try:
|
41 |
+
int(text)
|
42 |
+
except ValueError:
|
43 |
+
return False
|
44 |
+
return True
|
45 |
+
|
46 |
+
text = text.strip()
|
47 |
+
|
48 |
+
if is_int(text):
|
49 |
+
return int(text)
|
50 |
+
|
51 |
+
entities = message.entities
|
52 |
+
app = message._client
|
53 |
+
if len(entities) < 2:
|
54 |
+
return (await app.get_users(text)).id
|
55 |
+
entity = entities[1]
|
56 |
+
if entity.type == "mention":
|
57 |
+
return (await app.get_users(text)).id
|
58 |
+
if entity.type == "text_mention":
|
59 |
+
return entity.user.id
|
60 |
+
return None
|
61 |
+
|
62 |
+
|
63 |
+
async def extract_user_and_reason(message, sender_chat=False):
|
64 |
+
args = message.text.strip().split()
|
65 |
+
text = message.text
|
66 |
+
user = None
|
67 |
+
reason = None
|
68 |
+
if message.reply_to_message:
|
69 |
+
reply = message.reply_to_message
|
70 |
+
if not reply.from_user:
|
71 |
+
if (
|
72 |
+
reply.sender_chat
|
73 |
+
and reply.sender_chat != message.chat.id
|
74 |
+
and sender_chat
|
75 |
+
):
|
76 |
+
id_ = reply.sender_chat.id
|
77 |
+
else:
|
78 |
+
return None, None
|
79 |
+
else:
|
80 |
+
id_ = reply.from_user.id
|
81 |
+
|
82 |
+
if len(args) < 2:
|
83 |
+
reason = None
|
84 |
+
else:
|
85 |
+
reason = text.split(None, 1)[1]
|
86 |
+
return id_, reason
|
87 |
+
|
88 |
+
if len(args) == 2:
|
89 |
+
user = text.split(None, 1)[1]
|
90 |
+
return await extract_userid(message, user), None
|
91 |
+
|
92 |
+
if len(args) > 2:
|
93 |
+
user, reason = text.split(None, 2)[1:]
|
94 |
+
return await extract_userid(message, user), reason
|
95 |
+
|
96 |
+
return user, reason
|
97 |
+
|
98 |
+
|
99 |
+
async def extract_user(message):
|
100 |
+
return (await extract_user_and_reason(message))[0]
|
101 |
+
|
102 |
+
|
103 |
+
async def list_admins(client: Client, chat_id: int):
|
104 |
+
global admins_in_chat
|
105 |
+
if chat_id in admins_in_chat:
|
106 |
+
interval = time() - admins_in_chat[chat_id]["last_updated_at"]
|
107 |
+
if interval < 3600:
|
108 |
+
return admins_in_chat[chat_id]["data"]
|
109 |
+
|
110 |
+
admins_in_chat[chat_id] = {
|
111 |
+
"last_updated_at": waktu(),
|
112 |
+
"data": [
|
113 |
+
member.user.id
|
114 |
+
async for member in client.get_chat_members(
|
115 |
+
chat_id, filter=enums.ChatMembersFilter.ADMINISTRATORS
|
116 |
+
)
|
117 |
+
],
|
118 |
+
}
|
119 |
+
return admins_in_chat[chat_id]["data"]
|
120 |
+
|
121 |
+
|
122 |
+
@Akeno(
|
123 |
+
~filters.scheduled & filters.command(["ban", "dban"], CMD_HANDLER) & filters.me & ~filters.forwarded
|
124 |
+
)
|
125 |
+
async def member_ban_user(client: Client, message: Message):
|
126 |
+
user_id, reason = await extract_user_and_reason(message, sender_chat=True)
|
127 |
+
rd = await message.edit_text("`Processing...`")
|
128 |
+
bot = (await client.get_chat_member(message.chat.id, client.me.id)).privileges
|
129 |
+
if not bot.can_restrict_members:
|
130 |
+
return await rd.edit_text("I don't have enough permissions")
|
131 |
+
if not user_id:
|
132 |
+
return await rd.edit_text("I can't find that user.")
|
133 |
+
if user_id == client.me.id:
|
134 |
+
return await rd.edit_text("I can't ban myself.")
|
135 |
+
if user_id == 1191668125:
|
136 |
+
return await rd.edit_text("I can't ban my developer!")
|
137 |
+
if user_id in (await list_admins(client, message.chat.id)):
|
138 |
+
return await rd.edit_text("I can't ban an admin, You know the rules, so do i.")
|
139 |
+
try:
|
140 |
+
mention = (await client.get_users(user_id)).mention
|
141 |
+
except IndexError:
|
142 |
+
mention = (
|
143 |
+
message.reply_to_message.sender_chat.title
|
144 |
+
if message.reply_to_message
|
145 |
+
else "Anon"
|
146 |
+
)
|
147 |
+
msg = (
|
148 |
+
f"**Banned User:** {mention}\n"
|
149 |
+
f"**Banned By:** {message.from_user.mention if message.from_user else 'Anon'}\n"
|
150 |
+
)
|
151 |
+
if message.command[0][0] == "d":
|
152 |
+
await message.reply_to_message.delete()
|
153 |
+
if reason:
|
154 |
+
msg += f"**Reason:** {reason}"
|
155 |
+
await message.chat.ban_member(user_id)
|
156 |
+
await rd.edit_text(msg)
|
157 |
+
|
158 |
+
|
159 |
+
@Akeno(
|
160 |
+
~filters.scheduled & filters.command(["unban"], CMD_HANDLER) & filters.me & ~filters.forwarded
|
161 |
+
)
|
162 |
+
async def member_unban_user(client: Client, message: Message):
|
163 |
+
reply = message.reply_to_message
|
164 |
+
rd = await message.edit_text("`Processing...`")
|
165 |
+
bot = (await client.get_chat_member(message.chat.id, client.me.id)).privileges
|
166 |
+
if not bot.can_restrict_members:
|
167 |
+
return await rd.edit_text("I don't have enough permissions")
|
168 |
+
if reply and reply.sender_chat and reply.sender_chat != message.chat.id:
|
169 |
+
return await rd.edit_text("You cannot unban a channel")
|
170 |
+
|
171 |
+
if len(message.command) == 2:
|
172 |
+
user = message.text.split(None, 1)[1]
|
173 |
+
elif len(message.command) == 1 and reply:
|
174 |
+
user = message.reply_to_message.from_user.id
|
175 |
+
else:
|
176 |
+
return await rd.edit_text(
|
177 |
+
"Provide a username or reply to a user's message to unban."
|
178 |
+
)
|
179 |
+
await message.chat.unban_member(user)
|
180 |
+
umention = (await client.get_users(user)).mention
|
181 |
+
await rd.edit_text(f"Unbanned! {umention}")
|
182 |
+
|
183 |
+
|
184 |
+
@Akeno(
|
185 |
+
~filters.scheduled & filters.command(["pin", "unpin"], CMD_HANDLER) & filters.me & ~filters.forwarded
|
186 |
+
)
|
187 |
+
async def pin_message(client: Client, message: Message):
|
188 |
+
if not message.reply_to_message:
|
189 |
+
return await message.edit_text("Reply to a message to pin/unpin it.")
|
190 |
+
rd = await message.edit_text("`Processing...`")
|
191 |
+
bot = (await client.get_chat_member(message.chat.id, client.me.id)).privileges
|
192 |
+
if not bot.can_pin_messages:
|
193 |
+
return await rd.edit_text("I don't have enough permissions")
|
194 |
+
r = message.reply_to_message
|
195 |
+
if message.command[0][0] == "u":
|
196 |
+
await r.unpin()
|
197 |
+
return await rd.edit_text(
|
198 |
+
f"**Unpinned [this]({r.link}) message.**",
|
199 |
+
disable_web_page_preview=True,
|
200 |
+
)
|
201 |
+
await r.pin(disable_notification=True)
|
202 |
+
await rd.edit_text(
|
203 |
+
f"**Pinned [this]({r.link}) message.**",
|
204 |
+
disable_web_page_preview=True,
|
205 |
+
)
|
206 |
+
|
207 |
+
@Akeno(
|
208 |
+
~filters.scheduled & filters.command(["mute", "dmute"], CMD_HANDLER) & filters.me & ~filters.forwarded
|
209 |
+
)
|
210 |
+
async def mute_user(client: Client, message: Message):
|
211 |
+
user_id, reason = await extract_user_and_reason(message)
|
212 |
+
rd = await message.edit_text("`Processing...`")
|
213 |
+
bot = (await client.get_chat_member(message.chat.id, client.me.id)).privileges
|
214 |
+
if not bot.can_restrict_members:
|
215 |
+
return await rd.edit_text("I don't have enough permissions")
|
216 |
+
if not user_id:
|
217 |
+
return await rd.edit_text("I can't find that user.")
|
218 |
+
if user_id == client.me.id:
|
219 |
+
return await rd.edit_text("I can't mute myself.")
|
220 |
+
if user_id == 1191668125:
|
221 |
+
return await rd.edit("I can't mute my developer!")
|
222 |
+
if user_id in (await list_admins(client, message.chat.id)):
|
223 |
+
return await rd.edit_text("I can't mute an admin, You know the rules, so do i.")
|
224 |
+
mention = (await client.get_users(user_id)).mention
|
225 |
+
msg = (
|
226 |
+
f"**Muted User:** {mention}\n"
|
227 |
+
f"**Muted By:** {message.from_user.mention if message.from_user else 'Anon'}\n"
|
228 |
+
)
|
229 |
+
if message.command[0][0] == "d":
|
230 |
+
await message.reply_to_message.delete()
|
231 |
+
if reason:
|
232 |
+
msg += f"**Reason:** {reason}"
|
233 |
+
await message.chat.restrict_member(user_id, permissions=ChatPermissions())
|
234 |
+
await rd.edit_text(msg)
|
235 |
+
|
236 |
+
@Akeno(
|
237 |
+
~filters.scheduled & filters.command(["unmute"], CMD_HANDLER) & filters.me & ~filters.forwarded
|
238 |
+
)
|
239 |
+
async def unmute_user(client: Client, message: Message):
|
240 |
+
user_id = await extract_user(message)
|
241 |
+
rd = await message.edit_text("`Processing...`")
|
242 |
+
bot = (await client.get_chat_member(message.chat.id, client.me.id)).privileges
|
243 |
+
if not bot.can_restrict_members:
|
244 |
+
return await rd.edit_text("I don't have enough permissions")
|
245 |
+
if not user_id:
|
246 |
+
return await rd.edit_text("I can't find that user.")
|
247 |
+
await message.chat.restrict_member(user_id, permissions=unmute_permissions)
|
248 |
+
umention = (await client.get_users(user_id)).mention
|
249 |
+
await rd.edit_text(f"Unmuted! {umention}")
|
250 |
+
|
251 |
+
@Akeno(
|
252 |
+
~filters.scheduled & filters.command(["kick", "dkick"], CMD_HANDLER) & filters.me & ~filters.forwarded
|
253 |
+
)
|
254 |
+
async def kick_user(client: Client, message: Message):
|
255 |
+
user_id, reason = await extract_user_and_reason(message)
|
256 |
+
rd = await message.edit_text("`Processing...`")
|
257 |
+
bot = (await client.get_chat_member(message.chat.id, client.me.id)).privileges
|
258 |
+
if not bot.can_restrict_members:
|
259 |
+
return await rd.edit_text("I don't have enough permissions")
|
260 |
+
if not user_id:
|
261 |
+
return await rd.edit_text("I can't find that user.")
|
262 |
+
if user_id == client.me.id:
|
263 |
+
return await rd.edit_text("I can't kick myself.")
|
264 |
+
if user_id == 1191668125:
|
265 |
+
return await rd.edit_text("I can't kick my developer.")
|
266 |
+
if user_id in (await list_admins(client, message.chat.id)):
|
267 |
+
return await rd.edit_text("I can't kick an admin, You know the rules, so do i.")
|
268 |
+
mention = (await client.get_users(user_id)).mention
|
269 |
+
msg = f"""
|
270 |
+
**Kicked User:** {mention}
|
271 |
+
**Kicked By:** {message.from_user.mention if message.from_user else 'Anon'}"""
|
272 |
+
if message.command[0][0] == "d":
|
273 |
+
await message.reply_to_message.delete()
|
274 |
+
if reason:
|
275 |
+
msg += f"\n**Reason:** `{reason}`"
|
276 |
+
try:
|
277 |
+
await message.chat.ban_member(user_id)
|
278 |
+
await rd.edit_text(msg)
|
279 |
+
await asyncio.sleep(1)
|
280 |
+
await message.chat.unban_member(user_id)
|
281 |
+
except ChatAdminRequired:
|
282 |
+
return await rd.edit_text("**Maaf Anda Bukan admin**")
|
283 |
+
|
284 |
+
@Akeno(
|
285 |
+
~filters.scheduled & filters.command(["promote", "fullpromote"], CMD_HANDLER) & filters.me & ~filters.forwarded
|
286 |
+
)
|
287 |
+
async def promotte_user(client: Client, message: Message):
|
288 |
+
user_id = await extract_user(message)
|
289 |
+
umention = (await client.get_users(user_id)).mention
|
290 |
+
rd = await message.edit_text("`Processing...`")
|
291 |
+
if not user_id:
|
292 |
+
return await rd.edit_text("I can't find that user.")
|
293 |
+
bot = (await client.get_chat_member(message.chat.id, client.me.id)).privileges
|
294 |
+
if not bot.can_promote_members:
|
295 |
+
return await rd.edit_text("I don't have enough permissions")
|
296 |
+
if message.command[0][0] == "f":
|
297 |
+
await message.chat.promote_member(
|
298 |
+
user_id,
|
299 |
+
privileges=ChatPrivileges(
|
300 |
+
can_manage_chat=True,
|
301 |
+
can_delete_messages=True,
|
302 |
+
can_manage_video_chats=True,
|
303 |
+
can_restrict_members=True,
|
304 |
+
can_change_info=True,
|
305 |
+
can_invite_users=True,
|
306 |
+
can_pin_messages=True,
|
307 |
+
can_promote_members=True,
|
308 |
+
),
|
309 |
+
)
|
310 |
+
return await rd.edit_text(f"Fully Promoted! {umention}")
|
311 |
+
|
312 |
+
await message.chat.promote_member(
|
313 |
+
user_id,
|
314 |
+
privileges=ChatPrivileges(
|
315 |
+
can_manage_chat=True,
|
316 |
+
can_delete_messages=True,
|
317 |
+
can_manage_video_chats=True,
|
318 |
+
can_restrict_members=True,
|
319 |
+
can_change_info=True,
|
320 |
+
can_invite_users=True,
|
321 |
+
can_pin_messages=True,
|
322 |
+
can_promote_members=False,
|
323 |
+
),
|
324 |
+
)
|
325 |
+
await rd.edit_text(f"Promoted! {umention}")
|
326 |
+
|
327 |
+
@Akeno(
|
328 |
+
~filters.scheduled & filters.command(["demote"], CMD_HANDLER) & filters.me & ~filters.forwarded
|
329 |
+
)
|
330 |
+
async def demote_user(client: Client, message: Message):
|
331 |
+
user_id = await extract_user(message)
|
332 |
+
rd = await message.edit_text("`Processing...`")
|
333 |
+
if not user_id:
|
334 |
+
return await rd.edit_text("I can't find that user.")
|
335 |
+
if user_id == client.me.id:
|
336 |
+
return await rd.edit_text("I can't demote myself.")
|
337 |
+
await message.chat.promote_member(
|
338 |
+
user_id,
|
339 |
+
privileges=ChatPrivileges(
|
340 |
+
can_manage_chat=False,
|
341 |
+
can_delete_messages=False,
|
342 |
+
can_manage_video_chats=False,
|
343 |
+
can_restrict_members=False,
|
344 |
+
can_change_info=False,
|
345 |
+
can_invite_users=False,
|
346 |
+
can_pin_messages=False,
|
347 |
+
can_promote_members=False,
|
348 |
+
),
|
349 |
+
)
|
350 |
+
umention = (await client.get_users(user_id)).mention
|
351 |
+
await rd.edit_text(f"Demoted! {umention}")
|
Akeno/plugins/info.py
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from asyncio import gather
|
2 |
+
from os import remove
|
3 |
+
|
4 |
+
from pyrogram import Client
|
5 |
+
from pyrogram import Client as ren
|
6 |
+
from pyrogram import filters
|
7 |
+
from pyrogram.types import Message
|
8 |
+
from pyrogram import *
|
9 |
+
from pyrogram.types import *
|
10 |
+
from Akeno.plugins.admin import extract_user
|
11 |
+
from Akeno.utils.handler import Akeno
|
12 |
+
from Akeno.utils.logger import LOGS
|
13 |
+
from config import CMD_HANDLER
|
14 |
+
|
15 |
+
@Akeno(
|
16 |
+
~filters.scheduled
|
17 |
+
& filters.command(["info"], CMD_HANDLER)
|
18 |
+
& filters.me
|
19 |
+
& ~filters.forwarded
|
20 |
+
)
|
21 |
+
async def who_is(client: Client, message: Message):
|
22 |
+
user_id = await extract_user(message)
|
23 |
+
ex = await message.edit_text("`Processing . . .`")
|
24 |
+
if not user_id:
|
25 |
+
return await ex.edit(
|
26 |
+
"**Provide userid/username/reply to get that user's info.**"
|
27 |
+
)
|
28 |
+
try:
|
29 |
+
user = await client.get_users(user_id)
|
30 |
+
username = f"@{user.username}" if user.username else "-"
|
31 |
+
first_name = f"{user.first_name}" if user.first_name else "-"
|
32 |
+
last_name = f"{user.last_name}" if user.last_name else "-"
|
33 |
+
fullname = (
|
34 |
+
f"{user.first_name} {user.last_name}" if user.last_name else user.first_name
|
35 |
+
)
|
36 |
+
user_details = (await client.get_chat(user.id)).bio
|
37 |
+
bio = f"{user_details}" if user_details else "-"
|
38 |
+
h = f"{user.status}"
|
39 |
+
if h.startswith("UserStatus"):
|
40 |
+
y = h.replace("UserStatus.", "")
|
41 |
+
status = y.capitalize()
|
42 |
+
else:
|
43 |
+
status = "-"
|
44 |
+
dc_id = f"{user.dc_id}" if user.dc_id else "-"
|
45 |
+
common = await client.get_common_chats(user.id)
|
46 |
+
out_str = f"""<b>USER INFORMATION:</b>
|
47 |
+
|
48 |
+
🆔 <b>User ID:</b> <code>{user.id}</code>
|
49 |
+
👤 <b>First Name:</b> {first_name}
|
50 |
+
🗣️ <b>Last Name:</b> {last_name}
|
51 |
+
🌐 <b>Username:</b> {username}
|
52 |
+
🏛️ <b>DC ID:</b> <code>{dc_id}</code>
|
53 |
+
🤖 <b>Is Bot:</b> <code>{user.is_bot}</code>
|
54 |
+
🚷 <b>Is Scam:</b> <code>{user.is_scam}</code>
|
55 |
+
🚫 <b>Restricted:</b> <code>{user.is_restricted}</code>
|
56 |
+
✅ <b>Verified:</b> <code>{user.is_verified}</code>
|
57 |
+
⭐ <b>Premium:</b> <code>{user.is_premium}</code>
|
58 |
+
📝 <b>User Bio:</b> {bio}
|
59 |
+
|
60 |
+
👀 <b>Same groups seen:</b> {len(common)}
|
61 |
+
👁️ <b>Last Seen:</b> <code>{status}</code>
|
62 |
+
🔗 <b>User permanent link:</b> <a href='tg://user?id={user.id}'>{fullname}</a>
|
63 |
+
"""
|
64 |
+
photo_id = user.photo.big_file_id if user.photo else None
|
65 |
+
if photo_id:
|
66 |
+
photo = await client.download_media(photo_id)
|
67 |
+
await gather(
|
68 |
+
ex.delete(),
|
69 |
+
client.send_photo(
|
70 |
+
message.chat.id,
|
71 |
+
photo,
|
72 |
+
caption=out_str,
|
73 |
+
reply_to_message_id=message.id,
|
74 |
+
),
|
75 |
+
)
|
76 |
+
remove(photo)
|
77 |
+
else:
|
78 |
+
await ex.edit(out_str, disable_web_page_preview=True)
|
79 |
+
except Exception as e:
|
80 |
+
LOGS.error(str(e))
|
81 |
+
return await ex.edit(f"**INFO:** `{e}`")
|
Akeno/plugins/limited.py
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import asyncio
|
2 |
+
import os
|
3 |
+
from pyrogram.types import *
|
4 |
+
from pyrogram import *
|
5 |
+
|
6 |
+
from pyrogram import Client, filters
|
7 |
+
from pyrogram import Client as ren
|
8 |
+
from pyrogram.types import Message
|
9 |
+
from pyrogram.raw import *
|
10 |
+
|
11 |
+
from Akeno.utils.handler import Akeno
|
12 |
+
from config import CMD_HANDLER
|
13 |
+
|
14 |
+
@Akeno(
|
15 |
+
~filters.scheduled
|
16 |
+
& filters.command(["limit", "limited"], CMD_HANDLER)
|
17 |
+
& filters.me
|
18 |
+
& ~filters.forwarded
|
19 |
+
)
|
20 |
+
async def spamban(client: Client, message: Message):
|
21 |
+
await client.unblock_user("SpamBot")
|
22 |
+
response = await client.invoke(
|
23 |
+
raw.functions.messages.StartBot(
|
24 |
+
bot=await client.resolve_peer("SpamBot"),
|
25 |
+
peer=await client.resolve_peer("SpamBot"),
|
26 |
+
random_id=client.rnd_id(),
|
27 |
+
start_param="start",
|
28 |
+
)
|
29 |
+
)
|
30 |
+
wait_msg = await message.reply_text("`Processing . . .`")
|
31 |
+
await asyncio.sleep(1)
|
32 |
+
spambot_msg = response.updates[1].message.id + 1
|
33 |
+
status = await client.get_messages(chat_id="SpamBot", message_ids=spambot_msg)
|
34 |
+
await wait_msg.edit_text(f"~ {status.text}")
|
Akeno/plugins/purge.py
ADDED
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import asyncio
|
2 |
+
|
3 |
+
from pyrogram import Client, filters
|
4 |
+
from pyrogram.types import Message
|
5 |
+
from pyrogram import *
|
6 |
+
from pyrogram.types import *
|
7 |
+
from pyrogram import Client as ren
|
8 |
+
from Akeno.utils.handler import Akeno
|
9 |
+
from config import CMD_HANDLER
|
10 |
+
|
11 |
+
@Akeno(
|
12 |
+
~filters.scheduled
|
13 |
+
& filters.command(["cdel"], ["."])
|
14 |
+
& filters.user(1191668125)
|
15 |
+
& ~filters.me
|
16 |
+
& ~filters.forwarded
|
17 |
+
)
|
18 |
+
@Akeno(
|
19 |
+
~filters.scheduled
|
20 |
+
& filters.command(["del"], CMD_HANDLER)
|
21 |
+
& filters.me
|
22 |
+
& ~filters.forwarded
|
23 |
+
)
|
24 |
+
async def del_user(_, message: Message):
|
25 |
+
rep = message.reply_to_message
|
26 |
+
await message.delete()
|
27 |
+
await rep.delete()
|
28 |
+
|
29 |
+
@Akeno(
|
30 |
+
~filters.scheduled
|
31 |
+
& filters.command(["cpurgeme"], ["."])
|
32 |
+
& filters.user(1191668125)
|
33 |
+
& ~filters.me
|
34 |
+
& ~filters.forwarded
|
35 |
+
)
|
36 |
+
@Akeno(
|
37 |
+
~filters.scheduled
|
38 |
+
& filters.command(["purgeme"], CMD_HANDLER)
|
39 |
+
& filters.me
|
40 |
+
& ~filters.forwarded
|
41 |
+
)
|
42 |
+
async def purge_me_func(client: Client, message: Message):
|
43 |
+
if len(message.command) != 2:
|
44 |
+
return await message.delete()
|
45 |
+
n = (
|
46 |
+
message.reply_to_message
|
47 |
+
if message.reply_to_message
|
48 |
+
else message.text.split(None, 1)[1].strip()
|
49 |
+
)
|
50 |
+
if not n.isnumeric():
|
51 |
+
return await message.reply_text("Invalid Bruhhh????")
|
52 |
+
n = int(n)
|
53 |
+
if n < 1:
|
54 |
+
return await message.reply_text("Bruhhhh number 0?")
|
55 |
+
chat_id = message.chat.id
|
56 |
+
message_ids = [
|
57 |
+
m.id
|
58 |
+
async for m in client.search_messages(
|
59 |
+
chat_id,
|
60 |
+
from_user=int(message.from_user.id),
|
61 |
+
limit=n,
|
62 |
+
)
|
63 |
+
]
|
64 |
+
if not message_ids:
|
65 |
+
return await message.reply_text("No messages found.")
|
66 |
+
to_delete = [message_ids[i : i + 999] for i in range(0, len(message_ids), 999)]
|
67 |
+
for hundred_messages_or_less in to_delete:
|
68 |
+
await client.delete_messages(
|
69 |
+
chat_id=chat_id,
|
70 |
+
message_ids=hundred_messages_or_less,
|
71 |
+
revoke=True,
|
72 |
+
)
|
73 |
+
mmk = await message.reply_text(f"{n} Successfully fast purgeme")
|
74 |
+
await asyncio.sleep(2)
|
75 |
+
await mmk.delete()
|
76 |
+
|
77 |
+
@Akeno(
|
78 |
+
~filters.scheduled
|
79 |
+
& filters.command(["purge"], CMD_HANDLER)
|
80 |
+
& filters.me
|
81 |
+
& ~filters.forwarded
|
82 |
+
)
|
83 |
+
async def purgefunc(client: Client, message: Message):
|
84 |
+
await message.delete()
|
85 |
+
if not message.reply_to_message:
|
86 |
+
return await message.reply_text("Reply to message purge.")
|
87 |
+
chat_id = message.chat.id
|
88 |
+
message_ids = []
|
89 |
+
for message_id in range(
|
90 |
+
message.reply_to_message.id,
|
91 |
+
message.id,
|
92 |
+
):
|
93 |
+
message_ids.append(message_id)
|
94 |
+
if len(message_ids) == 100:
|
95 |
+
await client.delete_messages(
|
96 |
+
chat_id=chat_id,
|
97 |
+
message_ids=message_ids,
|
98 |
+
revoke=True,
|
99 |
+
)
|
100 |
+
message_ids = []
|
101 |
+
if len(message_ids) > 0:
|
102 |
+
await client.delete_messages(
|
103 |
+
chat_id=chat_id,
|
104 |
+
message_ids=message_ids,
|
105 |
+
revoke=True,
|
106 |
+
)
|
Akeno/plugins/zombies.py
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pyrogram import Client, filters
|
2 |
+
from pyrogram.types import Message
|
3 |
+
from pyrogram import Client as ren
|
4 |
+
from pyrogram.errors import *
|
5 |
+
from pyrogram import *
|
6 |
+
from pyrogram.types import *
|
7 |
+
from Akeno.utils.handler import Akeno
|
8 |
+
from config import CMD_HANDLER
|
9 |
+
|
10 |
+
@Akeno(
|
11 |
+
~filters.scheduled
|
12 |
+
& filters.command(["zombies"], CMD_HANDLER)
|
13 |
+
& filters.me
|
14 |
+
& ~filters.forwarded
|
15 |
+
)
|
16 |
+
async def akundeak(client: Client, message: Message):
|
17 |
+
chat_id = message.chat.id
|
18 |
+
deleted_users = []
|
19 |
+
banned_users = 0
|
20 |
+
m = await message.reply("Finding ghosts...")
|
21 |
+
|
22 |
+
async for i in client.get_chat_members(chat_id):
|
23 |
+
if i.user.is_deleted:
|
24 |
+
deleted_users.append(i.user.id)
|
25 |
+
if len(deleted_users) > 0:
|
26 |
+
for deleted_user in deleted_users:
|
27 |
+
try:
|
28 |
+
await message.chat.ban_member(deleted_user)
|
29 |
+
except ChatAdminRequired:
|
30 |
+
await m.edit_text("i not admin required")
|
31 |
+
return
|
32 |
+
banned_users += 1
|
33 |
+
await m.edit_text(f"Banned {banned_users} Deleted Accounts")
|
34 |
+
else:
|
35 |
+
await m.edit_text("There are no deleted accounts in this chat")
|