admin.py 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522
  1. from pyrogram import filters
  2. from pyrogram.types import ChatPermissions
  3. from wbb import SUDOERS, app, BOT_ID
  4. from wbb.utils.errors import capture_err
  5. from wbb.utils.dbfunctions import add_warn, get_warn, remove_warns, int_to_alpha
  6. import asyncio
  7. __MODULE__ = "Admin"
  8. __HELP__ = '''/ban - Ban A User
  9. /unban - Unban A User
  10. /warn - Warn A User
  11. /rmwarns - Remove All Warning of A User
  12. /warns - Show Warning Of A User
  13. /kick - Kick A User
  14. /purge - Purge Messages
  15. /del - Delete Replied Message
  16. /promote - Promote A Member
  17. /pin - Pin A Message
  18. /mute - Mute A User
  19. /unmute - Unmute A User
  20. /ban_ghosts - Ban Deleted Accounts
  21. /report | @admins - Report A Message To Admins.'''
  22. async def list_admins(group_id):
  23. list_of_admins = []
  24. async for member in app.iter_chat_members(
  25. group_id, filter="administrators"):
  26. list_of_admins.append(member.user.id)
  27. return list_of_admins
  28. async def member_permissions(chat_id, user_id):
  29. perms = []
  30. member = (await app.get_chat_member(chat_id, user_id))
  31. if member.can_post_messages:
  32. perms.append("can_post_messages")
  33. if member.can_edit_messages:
  34. perms.append("can_edit_messages")
  35. if member.can_delete_messages:
  36. perms.append("can_delete_messages")
  37. if member.can_restrict_members:
  38. perms.append("can_restrict_members")
  39. if member.can_promote_members:
  40. perms.append("can_promote_members")
  41. if member.can_change_info:
  42. perms.append("can_change_info")
  43. if member.can_invite_users:
  44. perms.append("can_invite_users")
  45. if member.can_pin_messages:
  46. perms.append("can_pin_messages")
  47. if member.can_manage_voice_chats:
  48. perms.append("can_manage_voice_chats")
  49. return perms
  50. # Get List Of Members In A Chat
  51. async def list_members(group_id):
  52. list_of_members = []
  53. async for member in app.iter_chat_members(group_id):
  54. list_of_members.append(member.user.id)
  55. return list_of_members
  56. # Purge Messages
  57. @app.on_message(filters.command("purge") & ~filters.edited)
  58. @capture_err
  59. async def purge(client, message):
  60. try:
  61. message_ids = []
  62. chat_id = message.chat.id
  63. user_id = message.from_user.id
  64. if message.chat.type not in ("supergroup", "channel"):
  65. return
  66. permissions = await member_permissions(chat_id, user_id)
  67. if "can_delete_messages" in permissions or user_id in SUDOERS:
  68. if message.reply_to_message:
  69. for a_s_message_id in range(
  70. message.reply_to_message.message_id,
  71. message.message_id
  72. ):
  73. message_ids.append(a_s_message_id)
  74. if len(message_ids) == 100:
  75. await client.delete_messages(chat_id=chat_id,
  76. message_ids=message_ids,
  77. revoke=True)
  78. message_ids = []
  79. if len(message_ids) > 0:
  80. await client.delete_messages(
  81. chat_id=chat_id,
  82. message_ids=message_ids,
  83. revoke=True
  84. )
  85. else:
  86. await message.reply_text(
  87. "Reply To A Message To Delete It,"
  88. " Don't Make Fun Of Yourself!")
  89. else:
  90. await message.reply_text("Your Don't Have Enough Permissions!")
  91. await message.delete()
  92. except Exception as e:
  93. print(e)
  94. await message.reply_text(e)
  95. # Kick members
  96. @app.on_message(filters.command("kick") & ~filters.edited)
  97. @capture_err
  98. async def kick(_, message):
  99. try:
  100. from_user_id = message.from_user.id
  101. chat_id = message.chat.id
  102. permissions = await member_permissions(chat_id, from_user_id)
  103. if "can_restrict_members" not in permissions and from_user_id not in SUDOERS:
  104. await message.reply_text("You don't have enough permissions.")
  105. return
  106. if len(message.command) == 2:
  107. username = message.text.split(None, 1)[1]
  108. if (await app.get_users(username)).id in SUDOERS:
  109. await message.reply_text("You Wanna Kick The Elevated One?")
  110. else:
  111. await message.chat.kick_member(username)
  112. await asyncio.sleep(2)
  113. await message.chat.unban_member(username)
  114. await message.reply_text("Kicked")
  115. elif len(message.command) == 1 and message.reply_to_message:
  116. user_id = message.reply_to_message.from_user.id
  117. if user_id in SUDOERS:
  118. await message.reply_text("You Wanna Kick The Elevated One?")
  119. else:
  120. await message.reply_to_message.chat.kick_member(user_id)
  121. await asyncio.sleep(2)
  122. await message.reply_to_message.chat.unban_member(user_id)
  123. await message.reply_text("Kicked!")
  124. else:
  125. await message.reply_text("Provide a username or reply to a user's message to kick.")
  126. except Exception as e:
  127. print(e)
  128. await message.reply_text(e)
  129. # Ban members
  130. @app.on_message(filters.command("ban") & ~filters.edited)
  131. @capture_err
  132. async def ban(_, message):
  133. try:
  134. from_user_id = message.from_user.id
  135. chat_id = message.chat.id
  136. permissions = await member_permissions(chat_id, from_user_id)
  137. if "can_restrict_members" not in permissions and from_user_id not in SUDOERS:
  138. await message.reply_text("You don't have enough permissions.")
  139. return
  140. if len(message.command) == 2:
  141. username = message.text.split(None, 1)[1]
  142. if (await app.get_users(username)).id in SUDOERS:
  143. await message.reply_text("You Wanna Ban The Elevated One?")
  144. else:
  145. await message.chat.kick_member(username)
  146. await message.reply_text("Banned!")
  147. elif len(message.command) == 1 and message.reply_to_message:
  148. user_id = message.reply_to_message.from_user.id
  149. if user_id in SUDOERS:
  150. await message.reply_text("You Wanna Ban The Elevated One?")
  151. else:
  152. await message.reply_to_message.chat.kick_member(user_id)
  153. await message.reply_text("Banned!")
  154. else:
  155. await message.reply_text("Provide a username or reply to a user's message to ban.")
  156. except Exception as e:
  157. await message.reply_text(str(e))
  158. # Unban members
  159. @app.on_message(filters.command("unban") & ~filters.edited)
  160. @capture_err
  161. async def unban(_, message):
  162. try:
  163. from_user_id = message.from_user.id
  164. chat_id = message.chat.id
  165. permissions = await member_permissions(chat_id, from_user_id)
  166. if "can_restrict_members" not in permissions and from_user_id not in SUDOERS:
  167. await message.reply_text("You don't have enough permissions.")
  168. return
  169. if len(message.command) == 2:
  170. username = message.text.split(None, 1)[1]
  171. await message.chat.unban_member(username)
  172. await message.reply_text("Unbanned!")
  173. elif len(message.command) == 1 and message.reply_to_message:
  174. user_id = message.reply_to_message.from_user.id
  175. await message.chat.unban_member(user_id)
  176. await message.reply_text("Unbanned!")
  177. else:
  178. await message.reply_text("Provide a username or reply to a user's message to unban.")
  179. except Exception as e:
  180. await message.reply_text(str(e))
  181. # Delete messages
  182. @app.on_message(filters.command("del") & ~filters.edited)
  183. @capture_err
  184. async def delete(_, message):
  185. if not message.reply_to_message:
  186. await message.reply_text("Reply To A Message To Delete It")
  187. return
  188. try:
  189. from_user_id = message.from_user.id
  190. chat_id = message.chat.id
  191. permissions = await member_permissions(chat_id, from_user_id)
  192. if "can_delete_messages" not in permissions or from_user_id not in SUDOERS:
  193. await message.reply_text("You Don't Have Enough Permissions,"
  194. + " Consider Deleting Yourself!")
  195. return
  196. await message.reply_to_message.delete()
  197. await message.delete()
  198. except Exception as e:
  199. await message.reply_text(str(e))
  200. # Promote Members
  201. @app.on_message(filters.command("promote") & ~filters.edited)
  202. @capture_err
  203. async def promote(_, message):
  204. try:
  205. from_user_id = message.from_user.id
  206. chat_id = message.chat.id
  207. permissions = await member_permissions(chat_id, from_user_id)
  208. if "can_promote_members" not in permissions and from_user_id not in SUDOERS:
  209. await message.reply_text("You don't have enough permissions")
  210. return
  211. if len(message.command) == 2:
  212. username = message.text.split(None, 1)[1]
  213. user_id = (await app.get_users(username)).id
  214. await message.chat.promote_member(
  215. user_id=user_id,
  216. can_change_info=True,
  217. can_invite_users=True,
  218. can_delete_messages=True,
  219. can_restrict_members=False,
  220. can_pin_messages=True,
  221. can_promote_members=True,
  222. can_manage_chat=True,
  223. can_manage_voice_chats=True
  224. )
  225. await message.reply_text('Promoted!')
  226. elif len(message.command) == 1 and message.reply_to_message:
  227. user_id = message.reply_to_message.from_user.id
  228. await message.chat.promote_member(
  229. user_id=user_id,
  230. can_change_info=True,
  231. can_invite_users=True,
  232. can_delete_messages=True,
  233. can_restrict_members=False,
  234. can_pin_messages=True,
  235. can_promote_members=True,
  236. can_manage_chat=True,
  237. can_manage_voice_chats=True
  238. )
  239. await message.reply_text('Promoted!')
  240. else:
  241. await message.reply_text("Reply To A User's Message Or Give A Username To Promote.")
  242. except Exception as e:
  243. await message.reply_text(str(e))
  244. # Pin Messages
  245. @app.on_message(filters.command("pin") & ~filters.edited)
  246. @capture_err
  247. async def pin(_, message):
  248. if not message.reply_to_message:
  249. await message.reply_text("Reply To A Message To Pin.")
  250. return
  251. try:
  252. from_user_id = message.from_user.id
  253. chat_id = message.chat.id
  254. permissions = await member_permissions(chat_id, from_user_id)
  255. if "can_pin_messages" in permissions or from_user_id in SUDOERS:
  256. await message.reply_to_message.pin(disable_notification=True)
  257. else:
  258. await message.reply_text("You're Not An Admin, Stop Spamming!")
  259. except Exception as e:
  260. await message.reply_text(str(e))
  261. # Mute members
  262. @app.on_message(filters.command("mute") & ~filters.edited)
  263. @capture_err
  264. async def mute(_, message):
  265. try:
  266. from_user_id = message.from_user.id
  267. chat_id = message.chat.id
  268. permissions = await member_permissions(chat_id, from_user_id)
  269. if "can_restrict_members" not in permissions and from_user_id not in SUDOERS:
  270. await message.reply_text("You don't have enough permissions.")
  271. return
  272. if len(message.command) == 2:
  273. username = message.text.split(None, 1)[1]
  274. user_id = (await app.get_users(username)).id
  275. if user_id in SUDOERS:
  276. await message.reply_text("You Wanna Mute The Elevated One?")
  277. else:
  278. await message.chat.restrict_member(
  279. user_id,
  280. permissions=ChatPermissions()
  281. )
  282. await message.reply_text("Muted!")
  283. elif len(message.command) == 1 and message.reply_to_message:
  284. user_id = message.reply_to_message.from_user.id
  285. if user_id in SUDOERS:
  286. await message.reply_text("You Wanna Mute The Elevated One?")
  287. else:
  288. await message.chat.restrict_member(
  289. user_id,
  290. permissions=ChatPermissions()
  291. )
  292. await message.reply_text("Muted!")
  293. else:
  294. await message.reply_text("Provide a username or reply to a user's message to mute.")
  295. except Exception as e:
  296. await message.reply_text(str(e))
  297. # Unmute members
  298. @app.on_message(filters.command("unmute") & ~filters.edited)
  299. @capture_err
  300. async def unmute(_, message):
  301. try:
  302. from_user_id = message.from_user.id
  303. chat_id = message.chat.id
  304. permissions = await member_permissions(chat_id, from_user_id)
  305. if "can_restrict_members" not in permissions and from_user_id not in SUDOERS:
  306. await message.reply_text("You don't have enough permissions.")
  307. return
  308. if len(message.command) == 2:
  309. username = message.text.split(None, 1)[1]
  310. await message.chat.unban_member(username)
  311. await message.reply_text("Unmuted!")
  312. elif len(message.command) == 1 and message.reply_to_message:
  313. user_id = message.reply_to_message.from_user.id
  314. await message.chat.unban_member(user_id)
  315. await message.reply_text("Unmuted!")
  316. else:
  317. await message.reply_text("Provide a username or reply to a user's message to Unmute")
  318. except Exception as e:
  319. await message.reply_text(str(e))
  320. # Ban deleted accounts
  321. @app.on_message(filters.command("ban_ghosts"))
  322. async def ban_deleted_accounts(_, message):
  323. try:
  324. from_user_id = message.from_user.id
  325. chat_id = message.chat.id
  326. permissions = await member_permissions(chat_id, from_user_id)
  327. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  328. deleted_users = []
  329. banned_users = 0
  330. async for i in app.iter_chat_members(chat_id):
  331. if i.user.is_deleted:
  332. deleted_users.append(i.user.id)
  333. if len(deleted_users) > 0:
  334. for deleted_user in deleted_users:
  335. try:
  336. await message.chat.kick_member(deleted_user)
  337. except Exception as e:
  338. print(str(e))
  339. pass
  340. banned_users += 1
  341. await message.reply_text(f"Banned {banned_users} Deleted Accounts")
  342. else:
  343. await message.reply_text("No Deleted Accounts In This Chat")
  344. return
  345. else:
  346. await message.reply_text("You Don't Have Enough Permissions")
  347. except Exception as e:
  348. await message.reply_text(str(e))
  349. print(str(e))
  350. @app.on_message(filters.command("warn") & ~filters.edited)
  351. @capture_err
  352. async def warn_user(_, message):
  353. if not message.reply_to_message:
  354. await message.reply_text("Reply to a message to warn a user.")
  355. return
  356. try:
  357. from_user_id = message.from_user.id
  358. chat_id = message.chat.id
  359. permissions = await member_permissions(chat_id, from_user_id)
  360. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  361. user_id = message.reply_to_message.from_user.id
  362. mention = message.reply_to_message.from_user.mention
  363. if user_id in SUDOERS:
  364. await message.reply_text("You Wanna Warn The Elevated One?")
  365. elif user_id == BOT_ID:
  366. await message.reply_text("Huh, Can't warn myself.")
  367. elif user_id in await list_admins(message.chat.id):
  368. await message.reply_text("Can't warn an admin.")
  369. elif user_id == from_user_id:
  370. await message.reply_text("I wouldn't do that if i were you.")
  371. else:
  372. if user_id in await list_members(chat_id):
  373. warns = await get_warn(chat_id, await int_to_alpha(user_id))
  374. if warns:
  375. warns = warns['warns']
  376. else:
  377. warn = {"warns": 1}
  378. await add_warn(chat_id, await int_to_alpha(user_id), warn)
  379. await message.reply_text(f"Warned {mention} !, 1/3 warnings now.")
  380. return
  381. if warns >= 3:
  382. await message.chat.kick_member(user_id)
  383. await message.reply_text(f"Number of warns of {mention} exceeded, Banned!")
  384. await remove_warns(chat_id, await int_to_alpha(user_id))
  385. else:
  386. warn = {"warns": warns+1}
  387. await add_warn(chat_id, await int_to_alpha(user_id), warn)
  388. await message.reply_text(f"Warned {mention} !, {warns+1}/3 warnings now.")
  389. else:
  390. await message.reply_text("This user isn't here.")
  391. else:
  392. await message.reply_text("You don't have enough permissions.")
  393. except Exception as e:
  394. await message.reply_text(str(e))
  395. # Rmwarns
  396. @app.on_message(filters.command("rmwarns") & ~filters.edited)
  397. @capture_err
  398. async def remove_warnings(_, message):
  399. if not message.reply_to_message:
  400. await message.reply_text("Reply to a message to remove a user's warnings.")
  401. return
  402. try:
  403. from_user_id = message.from_user.id
  404. user_id = message.reply_to_message.from_user.id
  405. mention = message.reply_to_message.from_user.mention
  406. chat_id = message.chat.id
  407. permissions = await member_permissions(chat_id, from_user_id)
  408. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  409. warns = await get_warn(chat_id, await int_to_alpha(user_id))
  410. if warns:
  411. warns = warns['warns']
  412. if warns == 0 or not warns:
  413. await message.reply_text(f"{mention} have no warnings.")
  414. else:
  415. await remove_warns(chat_id, await int_to_alpha(user_id))
  416. await message.reply_text(f"Removed warnings of {mention}.")
  417. else:
  418. await message.reply_text("You don't have enough permissions")
  419. except Exception as e:
  420. await message.reply_text(str(e))
  421. # Warns
  422. @app.on_message(filters.command("warns") & ~filters.edited)
  423. @capture_err
  424. async def check_warns(_, message):
  425. if not message.reply_to_message:
  426. await message.reply_text("Reply to a message to check a user's warnings.")
  427. return
  428. try:
  429. user_id = message.reply_to_message.from_user.id
  430. mention_user = message.reply_to_message.from_user.mention
  431. mention_from_user = message.from_user.mention
  432. chat_id = message.chat.id
  433. if message.reply_to_message:
  434. warns = await get_warn(chat_id, await int_to_alpha(user_id))
  435. if warns:
  436. warns = warns['warns']
  437. else:
  438. await message.reply_text(f"{mention_user} have no warnings.")
  439. return
  440. await message.reply_text(f"{mention_user} have {warns}/3 warnings.")
  441. return
  442. warns = await get_warn(chat_id, await int_to_alpha(user_id))
  443. if warns:
  444. warns = warns['warns']
  445. else:
  446. await message.reply_text(f"{mention_user} have no warnings.")
  447. return
  448. await message.reply_text(f"{mention_from_user} have {warns}/3 warnings.")
  449. except Exception as e:
  450. await message.reply_text(str(e))
  451. # Report
  452. @app.on_message(filters.command(["report", "admins"], prefixes=["@", "/"]) & ~filters.edited)
  453. @capture_err
  454. async def report_user(_, message):
  455. if not message.reply_to_message:
  456. await message.reply_text("Reply to a message to report user.")
  457. return
  458. list_of_admins = await list_admins(message.chat.id)
  459. user_mention = message.reply_to_message.from_user.mention
  460. text = f"Reported {user_mention} to admins."
  461. for admin in list_of_admins:
  462. text += f"[\u2063](tg://user?id={admin})"
  463. await message.reply_text(text)