admin.py 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  1. from pyrogram import filters
  2. from pyrogram.types import ChatPermissions
  3. from wbb import OWNER_ID, SUDOERS, app
  4. from wbb.utils.botinfo import BOT_ID
  5. from wbb.utils.errors import capture_err
  6. from wbb.utils.dbfunctions import add_warn, get_warn, remove_warns, int_to_alpha
  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. 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. return perms
  47. # Get List Of Members In A Chat
  48. async def list_members(group_id):
  49. list_of_members = []
  50. async for member in app.iter_chat_members(group_id):
  51. list_of_members.append(member.user.id)
  52. return list_of_members
  53. # Purge Messages
  54. @app.on_message(filters.command("purge") & ~filters.edited)
  55. @capture_err
  56. async def purge(client, message):
  57. message_ids = []
  58. chat_id = message.chat.id
  59. user_id = message.from_user.id
  60. if message.chat.type not in ("supergroup", "channel"):
  61. return
  62. permissions = await member_permissions(chat_id, user_id)
  63. if "can_delete_messages" in permissions or user_id in SUDOERS:
  64. if message.reply_to_message:
  65. for a_s_message_id in range(
  66. message.reply_to_message.message_id,
  67. message.message_id
  68. ):
  69. message_ids.append(a_s_message_id)
  70. if len(message_ids) == 100:
  71. await client.delete_messages(chat_id=chat_id,
  72. message_ids=message_ids,
  73. revoke=True)
  74. message_ids = []
  75. if len(message_ids) > 0:
  76. await client.delete_messages(
  77. chat_id=chat_id,
  78. message_ids=message_ids,
  79. revoke=True
  80. )
  81. else:
  82. await message.reply_text(
  83. "Reply To A Message To Delete It,"
  84. " Don't Make Fun Of Yourself!")
  85. else:
  86. await message.reply_text("Your Don't Have Enough Permissions!")
  87. await message.delete()
  88. # Kick members
  89. @app.on_message(filters.command("kick") & ~filters.edited)
  90. @capture_err
  91. async def kick(_, message):
  92. try:
  93. from_user_id = message.from_user.id
  94. chat_id = message.chat.id
  95. permissions = await member_permissions(chat_id, from_user_id)
  96. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  97. if len(message.command) == 2:
  98. username = message.text.split(None, 1)[1]
  99. if (await app.get_users(username)).id in SUDOERS:
  100. await message.reply_text("You Wanna Kick The Elevated One?")
  101. else:
  102. if (await app.get_users(username)).id in \
  103. await list_members(chat_id):
  104. await message.chat.kick_member(username)
  105. await message.chat.unban_member(username)
  106. await message.reply_text(f"Kicked {username}")
  107. else:
  108. await message.reply_text("This user isn't here,"
  109. " consider kicking yourself.")
  110. if len(message.command) == 1 and message.reply_to_message:
  111. user_id = message.reply_to_message.from_user.id
  112. if user_id in SUDOERS:
  113. await message.reply_text("You Wanna Kick The Elevated One?")
  114. else:
  115. if user_id in await list_members(chat_id):
  116. await message.reply_to_message.chat.kick_member(user_id)
  117. await message.reply_to_message.chat.unban_member(user_id)
  118. await message.reply_text("Kicked!")
  119. else:
  120. await message.reply_text("This user isn't here.")
  121. except Exception as e:
  122. await message.reply_text(str(e))
  123. # Ban members
  124. @app.on_message(filters.command("ban") & ~filters.edited)
  125. @capture_err
  126. async def ban(_, message):
  127. try:
  128. from_user_id = message.from_user.id
  129. chat_id = message.chat.id
  130. permissions = await member_permissions(chat_id, from_user_id)
  131. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  132. if len(message.command) == 2:
  133. username = message.text.split(None, 1)[1]
  134. if (await app.get_users(username)).id in SUDOERS:
  135. await message.reply_text("You Wanna Ban The Elevated One?")
  136. else:
  137. if (await app.get_users(username)).id in \
  138. await list_members(chat_id):
  139. await message.chat.kick_member(username)
  140. await message.reply_text(f"Banned! {username}")
  141. else:
  142. await message.reply_text("This user isn't here,"
  143. " consider banning yourself.")
  144. if 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. if user_id in await list_members(chat_id):
  150. await message.reply_to_message.chat.kick_member(user_id)
  151. await message.reply_text("Banned!")
  152. else:
  153. await message.reply_text("This user isn't here.")
  154. except Exception as e:
  155. await message.reply_text(str(e))
  156. # Unban members
  157. @app.on_message(filters.command("unban") & ~filters.edited)
  158. @capture_err
  159. async def unban(_, message):
  160. try:
  161. from_user_id = message.from_user.id
  162. chat_id = message.chat.id
  163. permissions = await member_permissions(chat_id, from_user_id)
  164. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  165. if len(message.command) == 2:
  166. username = message.text.split(None, 1)[1]
  167. if (await app.get_users(username)).id not in \
  168. await list_members(message.chat.id):
  169. await message.chat.unban_member(username)
  170. await message.reply_text(f"Unbanned! {username}")
  171. else:
  172. await message.reply_text("This user is already here,"
  173. " consider banning yourself.")
  174. if len(message.command) == 1 and message.reply_to_message:
  175. user_id = message.reply_to_message.from_user.id
  176. if user_id not in \
  177. await list_members(chat_id):
  178. await message.chat.unban_member(user_id)
  179. await message.reply_text("Unbanned!")
  180. else:
  181. await message.reply_text("This user is already here.")
  182. except Exception as e:
  183. await message.reply_text(str(e))
  184. # Delete messages
  185. @app.on_message(filters.command("del") & ~filters.edited)
  186. @capture_err
  187. async def delete(_, message):
  188. if not message.reply_to_message:
  189. await message.reply_text("Reply To A Message To Delete It")
  190. return
  191. try:
  192. from_user_id = message.from_user.id
  193. chat_id = message.chat.id
  194. permissions = await member_permissions(chat_id, from_user_id)
  195. if "can_delete_messages" in permissions or from_user_id in SUDOERS:
  196. await message.reply_to_message.delete()
  197. await message.delete()
  198. else:
  199. await message.reply_text("You Don't Have Enough Permissions,"
  200. + " Consider Deleting Yourself!")
  201. except Exception as e:
  202. await message.reply_text(str(e))
  203. # Promote Members
  204. @app.on_message(filters.command("promote") & ~filters.edited)
  205. @capture_err
  206. async def promote(_, message):
  207. try:
  208. from_user_id = message.from_user.id
  209. chat_id = message.chat.id
  210. permissions = await member_permissions(chat_id, from_user_id)
  211. if "can_promote_members" in permissions or from_user_id in SUDOERS:
  212. if len(message.command) == 2:
  213. username = message.text.split(None, 1)[1]
  214. user_id = (await app.get_users(username)).id
  215. await message.chat.promote_member(
  216. user_id=user_id,
  217. can_change_info=True,
  218. can_invite_users=True,
  219. can_delete_messages=True,
  220. can_restrict_members=False,
  221. can_pin_messages=True,
  222. can_promote_members=True)
  223. await message.reply_text('Promoted!')
  224. elif len(message.command) == 1 and message.reply_to_message:
  225. user_id = message.reply_to_message.from_user.id
  226. await message.chat.promote_member(
  227. user_id=user_id,
  228. can_change_info=True,
  229. can_invite_users=True,
  230. can_delete_messages=True,
  231. can_restrict_members=False,
  232. can_pin_messages=True,
  233. can_promote_members=True)
  234. await message.reply_text('Promoted!')
  235. else:
  236. await message.reply_text("Reply To A User's Message Or Give A Username To Promote.")
  237. else:
  238. await message.reply_text("You're Not An Admin, Want A Good Ban?")
  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. if not message.reply_to_message:
  263. await message.reply_text("Reply To A User's Message!")
  264. return
  265. try:
  266. chat_id = message.chat.id
  267. from_user_id = message.from_user.id
  268. permissions = await member_permissions(chat_id, from_user_id)
  269. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  270. user_id = message.reply_to_message.from_user.id
  271. await message.chat.restrict_member(user_id,
  272. permissions=ChatPermissions())
  273. await message.reply_text("Muted!")
  274. else:
  275. await message.reply_text("Get Yourself An Admin Tag!")
  276. except Exception as e:
  277. await message.reply_text(str(e))
  278. # Unmute members
  279. @app.on_message(filters.command("unmute") & ~filters.edited)
  280. @capture_err
  281. async def unmute(_, message):
  282. if not message.reply_to_message:
  283. await message.reply_text("Reply To A User's Message!")
  284. return
  285. try:
  286. chat_id = message.chat.id
  287. from_user_id = message.from_user.id
  288. permissions = await member_permissions(chat_id, from_user_id)
  289. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  290. user_id = message.reply_to_message.from_user.id
  291. await message.chat.unban_member(user_id)
  292. await message.reply_text("Unmuted!")
  293. else:
  294. await message.reply_text("Get Yourself An Admin Tag!")
  295. except Exception as e:
  296. await message.reply_text(str(e))
  297. # Ban deleted accounts
  298. @app.on_message(filters.command("ban_ghosts"))
  299. async def ban_deleted_accounts(_, message):
  300. try:
  301. from_user_id = message.from_user.id
  302. chat_id = message.chat.id
  303. permissions = await member_permissions(chat_id, from_user_id)
  304. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  305. deleted_users = []
  306. banned_users = 0
  307. async for i in app.iter_chat_members(chat_id):
  308. if i.user.is_deleted:
  309. deleted_users.append(i.user.id)
  310. if len(deleted_users) > 0:
  311. for deleted_user in deleted_users:
  312. try:
  313. await message.chat.kick_member(deleted_user)
  314. except Exception as e:
  315. print(str(e))
  316. pass
  317. banned_users += 1
  318. await message.reply_text(f"Banned {banned_users} Deleted Accounts")
  319. else:
  320. await message.reply_text("No Deleted Accounts In This Chat")
  321. return
  322. else:
  323. await message.reply_text("You Don't Have Enough Permissions")
  324. except Exception as e:
  325. await message.reply_text(str(e))
  326. print(str(e))
  327. @app.on_message(filters.command("warn") & ~filters.edited)
  328. @capture_err
  329. async def warn_user(_, message):
  330. from_user_id = message.from_user.id
  331. chat_id = message.chat.id
  332. permissions = await member_permissions(chat_id, from_user_id)
  333. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  334. if message.reply_to_message:
  335. user_id = message.reply_to_message.from_user.id
  336. mention = message.reply_to_message.from_user.mention
  337. if user_id in SUDOERS:
  338. await message.reply_text("You Wanna Warn The Elevated One?")
  339. else:
  340. if user_id in await list_members(chat_id):
  341. warns = await get_warn(chat_id, await int_to_alpha(user_id))
  342. if warns:
  343. warns = warns['warns']
  344. else:
  345. warn = {"warns": 1}
  346. await add_warn(chat_id, await int_to_alpha(user_id), warn)
  347. await message.reply_text(f"Warned {mention} !, 1/3 warnings now.")
  348. return
  349. if warns >= 3:
  350. await message.chat.kick_member(user_id)
  351. await message.reply_text(f"Number of warns of {mention} exceeded, Banned!")
  352. await remove_warns(chat_id, await int_to_alpha(user_id))
  353. else:
  354. warn = {"warns": warns+1}
  355. await add_warn(chat_id, await int_to_alpha(user_id), warn)
  356. await message.reply_text(f"Warned {mention} !, {warns+1}/3 warnings now.")
  357. else:
  358. await message.reply_text("This user isn't here.")
  359. else:
  360. await message.reply_text("Reply to someone's message to warn him.")
  361. else:
  362. await message.reply_text("You don't have enough permissions.")
  363. # Rmwarns
  364. @app.on_message(filters.command("rmwarns") & ~filters.edited)
  365. @capture_err
  366. async def remove_warnings(_, message):
  367. try:
  368. from_user_id = message.from_user.id
  369. user_id = message.reply_to_message.from_user.id
  370. mention = message.reply_to_message.from_user.mention
  371. chat_id = message.chat.id
  372. permissions = await member_permissions(chat_id, from_user_id)
  373. if "can_restrict_members" in permissions or from_user_id in SUDOERS:
  374. if message.reply_to_message:
  375. warns = await get_warn(chat_id, await int_to_alpha(user_id))
  376. if warns:
  377. warns = warns['warns']
  378. if warns == 0 or not warns:
  379. await message.reply_text(f"{mention} have no warnings.")
  380. else:
  381. await remove_warns(chat_id, await int_to_alpha(user_id))
  382. await message.reply_text(f"Removed warnings of {mention}.")
  383. else:
  384. await message.reply_text("Reply to someone's message to remove Warnings")
  385. else:
  386. await message.reply_text("You don't have enough permissions")
  387. except Exception as e:
  388. await message.reply_text(str(e))
  389. # Warns
  390. @app.on_message(filters.command("warns") & ~filters.edited)
  391. @capture_err
  392. async def check_warns(_, message):
  393. try:
  394. from_user_id = message.from_user.id
  395. user_id = message.reply_to_message.from_user.id
  396. mention_user = message.reply_to_message.from_user.mention
  397. mention_from_user = message.from_user.mention
  398. chat_id = message.chat.id
  399. if message.reply_to_message:
  400. warns = await get_warn(chat_id, await int_to_alpha(user_id))
  401. if warns:
  402. warns = warns['warns']
  403. else:
  404. await message.reply_text(f"{mention_user} have no warnings.")
  405. return
  406. await message.reply_text(f"{mention_user} have {warns}/3 warnings.")
  407. return
  408. warns = await get_warn(chat_id, await int_to_alpha(user_id))
  409. if warns:
  410. warns = warns['warns']
  411. else:
  412. await message.reply_text(f"{mention_user} have no warnings.")
  413. return
  414. await message.reply_text(f"{mention__from_user} have {warns}/3 warnings.")
  415. except Exception as e:
  416. await message.reply_text(str(e))