admin.py 14 KB

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