admin.py 20 KB

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