admin.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368
  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. __MODULE__ = "Admin"
  7. __HELP__ = '''/ban - Ban A User
  8. /unban - Unban A User
  9. /kick - Kick A User
  10. /purge - Purge Messages
  11. /del - Delete Replied Message
  12. /promote - Promote A Member
  13. /pin - Pin A Message
  14. /mute - Mute A User
  15. /unmute - Unmute A User'''
  16. async def member_permissions(chat_id, user_id):
  17. perms = []
  18. member = (await app.get_chat_member(chat_id, user_id))
  19. if member.can_post_messages:
  20. perms.append("can_post_messages")
  21. if member.can_edit_messages:
  22. perms.append("can_edit_messages")
  23. if member.can_delete_messages:
  24. perms.append("can_delete_messages")
  25. if member.can_restrict_members:
  26. perms.append("can_restrict_members")
  27. if member.can_promote_members:
  28. perms.append("can_promote_members")
  29. if member.can_change_info:
  30. perms.append("can_change_info")
  31. if member.can_invite_users:
  32. perms.append("can_invite_users")
  33. if member.can_pin_messages:
  34. perms.append("can_pin_messages")
  35. return perms
  36. # Get List Of Members In A Chat
  37. async def list_members(group_id):
  38. list_of_members = []
  39. async for member in app.iter_chat_members(group_id):
  40. list_of_members.append(member.user.id)
  41. return list_of_members
  42. # Purge Messages
  43. @app.on_message(filters.command("purge") & ~filters.edited)
  44. @capture_err
  45. async def purge(client, message):
  46. message_ids = []
  47. chat_id = message.chat.id
  48. user_id = message.from_user.id
  49. if message.chat.type not in ("supergroup", "channel"):
  50. return
  51. permissions = await member_permissions(chat_id, user_id)
  52. if "can_delete_messages" in permissions or user_id in SUDOERS:
  53. if message.reply_to_message:
  54. for a_s_message_id in range(
  55. message.reply_to_message.message_id,
  56. message.message_id
  57. ):
  58. message_ids.append(a_s_message_id)
  59. if len(message_ids) == 100:
  60. await client.delete_messages(chat_id=chat_id,
  61. message_ids=message_ids,
  62. revoke=True)
  63. message_ids = []
  64. if len(message_ids) > 0:
  65. await client.delete_messages(
  66. chat_id=chat_id,
  67. message_ids=message_ids,
  68. revoke=True
  69. )
  70. else:
  71. await message.reply_text(
  72. "Reply To A Message To Delete It,"
  73. " Don't Make Fun Of Yourself!")
  74. else:
  75. await message.reply_text("Your Don't Have Enough Permissions!")
  76. await message.delete()
  77. # Kick members
  78. @app.on_message(filters.command("kick") & ~filters.edited)
  79. @capture_err
  80. async def kick(_, message):
  81. try:
  82. from_user_id = message.from_user.id
  83. chat_id = message.chat.id
  84. permissions = await member_permissions(chat_id, from_user_id)
  85. if "can_restrict_members" in permissions or from_user_id in SUDO:
  86. if len(message.command) == 2:
  87. username = message.text.split(None, 1)[1]
  88. if (await app.get_users(username)).id in SUDO:
  89. await message.reply_text("You Wanna Kick The Elevated One?")
  90. else:
  91. if (await app.get_users(username)).id in \
  92. await list_members(chat_):
  93. await message.chat.kick_member(username)
  94. await message.chat.unban_member(username)
  95. await message.reply_text(f"Kicked {username}")
  96. else:
  97. await message.reply_text("This user isn't here,"
  98. " consider kicking yourself.")
  99. if len(message.command) == 1 and message.reply_to_message:
  100. user_id = message.reply_to_message.from_user.id
  101. if user_id in SUDO:
  102. await message.reply_text("You Wanna Kick The Elevated One?")
  103. else:
  104. if user_id in await list_members(chat_id):
  105. await message.reply_to_message.chat.kick_member(user_id)
  106. await message.reply_to_message.chat.unban_member(user_id)
  107. await message.reply_text("Kicked!")
  108. else:
  109. await message.reply_text("This user isn't here.")
  110. except Exception as e:
  111. await message.reply_text(str(e))
  112. # Ban members
  113. @app.on_message(filters.command("ban") & ~filters.edited)
  114. @capture_err
  115. async def ban(_, message):
  116. try:
  117. from_user_id = message.from_user.id
  118. chat_id = message.chat.id
  119. permissions = await member_permissions(chat_id, from_user_id)
  120. if "can_restrict_members" in permissions or from_user_id in SUDO:
  121. if len(message.command) == 2:
  122. username = message.text.split(None, 1)[1]
  123. if (await app.get_users(username)).id in SUDO:
  124. await message.reply_text("You Wanna Ban The Elevated One?")
  125. else:
  126. if (await app.get_users(username)).id in \
  127. await list_members(chat_id):
  128. await message.chat.kick_member(username)
  129. await message.reply_text(f"Banned! {username}")
  130. else:
  131. await message.reply_text("This user isn't here,"
  132. " consider banning yourself.")
  133. if len(message.command) == 1 and message.reply_to_message:
  134. user_id = message.reply_to_message.from_user.id
  135. if user_id in SUDO:
  136. await message.reply_text("You Wanna Ban The Elevated One?")
  137. else:
  138. if user_id in await list_members(chat_id):
  139. await message.reply_to_message.chat.kick_member(user_id)
  140. await message.reply_text("Banned!")
  141. else:
  142. await message.reply_text("This user isn't here.")
  143. except Exception as e:
  144. await message.reply_text(str(e))
  145. # Unban members
  146. @app.on_message(filters.command("unban") & ~filters.edited)
  147. @capture_err
  148. async def unban(_, message):
  149. try:
  150. from_user_id = message.from_user.id
  151. chat_id = message.chat.id
  152. permissions = await member_permissions(chat_id, from_user_id)
  153. if "can_restrict_members" in permissions or from_user_id in sudo:
  154. if len(message.command) == 2:
  155. username = message.text.split(None, 1)[1]
  156. if (await app.get_users(username)).id not in \
  157. await list_members(message.chat.id):
  158. await message.chat.unban_member(username)
  159. await message.reply_text(f"Unbanned! {username}")
  160. else:
  161. await message.reply_text("This user is already here,"
  162. " consider banning yourself.")
  163. if len(message.command) == 1 and message.reply_to_message:
  164. user_id = message.reply_to_message.from_user.id
  165. if user_id not in \
  166. await list_members(chat_id):
  167. await message.chat.unban_member(user_id)
  168. await message.reply_text("Unbanned!")
  169. else:
  170. await message.reply_text("This user is already here.")
  171. except Exception as e:
  172. await message.reply_text(str(e))
  173. # Delete messages
  174. @app.on_message(filters.command("del") & ~filters.edited)
  175. @capture_err
  176. async def delete(_, message):
  177. if not message.reply_to_message:
  178. await message.reply_text("Reply To A Message To Delete It")
  179. return
  180. try:
  181. from_user_id = message.from_user.id
  182. chat_id = message.chat.id
  183. permissions = await member_permissions(chat_id, from_user_id)
  184. if "can_delete_messages" in permissions or from_user_id in sudo:
  185. await message.reply_to_message.delete()
  186. await message.delete()
  187. else:
  188. await message.reply_text("You Don't Have Enough Permissions,"
  189. + " Consider Deleting Yourself!")
  190. except Exception as e:
  191. await message.reply_text(str(e))
  192. # Promote Members
  193. @app.on_message(filters.command("promote") & ~filters.edited)
  194. @capture_err
  195. async def promote(_, message):
  196. try:
  197. from_user_id = message.from_user.id
  198. chat_id = message.chat.id
  199. permissions = await member_permissions(chat_id, from_user_id)
  200. if "can_promote_members" in permissions or from_user_id in sudo:
  201. if len(message.command) == 2:
  202. username = message.text.split(None, 1)[1]
  203. user_id = (await app.get_users(username)).id
  204. await message.chat.promote_member(
  205. user_id=user_id,
  206. can_change_info=True,
  207. can_invite_users=True,
  208. can_delete_messages=True,
  209. can_restrict_members=False,
  210. can_pin_messages=True,
  211. can_promote_members=True)
  212. await message.reply_text('Promoted!')
  213. elif len(message.command) == 1 and message.reply_to_message:
  214. user_id = message.reply_to_message.from_user.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. else:
  225. await message.reply_text("Reply To A User's Message Or Give A Username To Promote.")
  226. else:
  227. await message.reply_text("You're Not An Admin, Want A Good Ban?")
  228. except Exception as e:
  229. await message.reply_text(str(e))
  230. # Pin Messages
  231. @app.on_message(filters.command("pin") & ~filters.edited)
  232. @capture_err
  233. async def pin(_, message):
  234. if not message.reply_to_message:
  235. await message.reply_text("Reply To A Message To Pin.")
  236. return
  237. try:
  238. from_user_id = message.from_user.id
  239. chat_id = message.chat.id
  240. permissions = await member_permissions(chat_id, from_user_id)
  241. if "can_pin_messages" in permissions or from_user_id in sudo:
  242. await message.reply_to_message.pin(disable_notification=True)
  243. else:
  244. await message.reply_text("You're Not An Admin, Stop Spamming!")
  245. except Exception as e:
  246. await message.reply_text(str(e))
  247. # Mute members
  248. @app.on_message(filters.command("mute") & ~filters.edited)
  249. @capture_err
  250. async def mute(_, message):
  251. if not message.reply_to_message:
  252. await message.reply_text("Reply To A User's Message!")
  253. return
  254. try:
  255. chat_id = message.chat.id
  256. from_user_id = message.from_user.id
  257. permissions = await member_permissions(chat_id, from_user_id)
  258. if "can_restrict_members" in permissions or from_user_id in sudo:
  259. user_id = message.reply_to_message.from_user.id
  260. await message.chat.restrict_member(user_id,
  261. permissions=ChatPermissions())
  262. await message.reply_text("Muted!")
  263. else:
  264. await message.reply_text("Get Yourself An Admin Tag!")
  265. except Exception as e:
  266. await message.reply_text(str(e))
  267. # Unmute members
  268. @app.on_message(filters.command("unmute") & ~filters.edited)
  269. @capture_err
  270. async def unmute(_, message):
  271. if not message.reply_to_message:
  272. await message.reply_text("Reply To A User's Message!")
  273. return
  274. try:
  275. chat_id = message.chat.id
  276. from_user_id = message.from_user.id
  277. permissions = await member_permissions(chat_id, from_user_id)
  278. if "can_restrict_members" in permissions or from_user_id in sudo:
  279. user_id = message.reply_to_message.from_user.id
  280. await message.chat.unban_member(user_id)
  281. await message.reply_text("Unmuted!")
  282. else:
  283. await message.reply_text("Get Yourself An Admin Tag!")
  284. except Exception as e:
  285. await message.reply_text(str(e))
  286. # Ban deleted accounts
  287. @app.on_message(filters.command("ban_ghosts"))
  288. async def ban_deleted_accounts(_, message)
  289. try:
  290. from_user_id = message.from_user.id
  291. chat_id = message.chat.id
  292. permissions = await member_permissions(chat_id, from_user_id)
  293. if "can_restrict_members" in permissions or from_user_id in SUDO:
  294. deleted_users = []
  295. banned_users = 0
  296. async for i in app.iter_chat_members(chat_id):
  297. if i.user.is_deleted:
  298. deleted_users.append(i.user.id)
  299. if len(deleted_users) > 0:
  300. for deleted_user in deleted_users:
  301. try:
  302. await message.chat.kick_member(deleted_user)
  303. except Exception as e:
  304. print(str(e))
  305. pass
  306. banned_users += 1
  307. await message.reply_text(f"Banned {banned_users} Deleted Accounts")
  308. else:
  309. await message.reply_text("No Deleted Accounts In This Chat")
  310. return
  311. else:
  312. await message.reply_text("You Don't Have Enough Permissions")
  313. except Exception as e:
  314. await message.reply_text(str(e))
  315. print(str(e))