admin.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. from pyrogram import filters
  2. from pyrogram.types import Message, ChatPermissions
  3. from wbb import OWNER_ID, SUDO_USER_ID, app
  4. from wbb.utils import cust_filter
  5. from wbb.utils.botinfo import BOT_ID
  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. /banme - Bans A User Who Issued The Command
  13. /kickme - Kicks A User Who Issued The Command
  14. /promote - Promote A Member
  15. /pin - Pin A Message
  16. /unpin - Unpin A Message
  17. /mute - Mute A User
  18. /unmute - Unmute A User
  19. /report - Report To All Admins'''
  20. SUDO = [OWNER_ID, SUDO_USER_ID]
  21. # Get List Of Admins In A Chat
  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. # Get List Of Members In A Chat
  29. async def list_members(group_id):
  30. list_of_members = []
  31. async for member in app.iter_chat_members(group_id):
  32. list_of_members.append(member.user.id)
  33. return list_of_members
  34. # Purge Messages
  35. @app.on_message(cust_filter.command(commands=("purge")) & ~filters.edited)
  36. async def purge(client, message: Message):
  37. message_ids = []
  38. if message.chat.type not in ("supergroup", "channel"):
  39. return
  40. admins = await list_admins(message.chat.id)
  41. if message.from_user.id in admins \
  42. or message.from_user.id in SUDO:
  43. chat_id = message.chat.id
  44. from_user_id = message.from_user.id
  45. if (await app.get_chat_member(chat_id,
  46. from_user_id)).can_delete_messages \
  47. or (await app.get_chat_member(chat_id, from_user_id)).status \
  48. == 'creator' \
  49. or message.from_user.id in SUDO:
  50. if message.reply_to_message:
  51. for a_s_message_id in range(
  52. message.reply_to_message.message_id,
  53. message.message_id
  54. ):
  55. message_ids.append(a_s_message_id)
  56. if len(message_ids) == 100:
  57. await client.delete_messages(
  58. chat_id=message.chat.id,
  59. message_ids=message_ids,
  60. revoke=True
  61. )
  62. message_ids = []
  63. if len(message_ids) > 0:
  64. await client.delete_messages(
  65. chat_id=message.chat.id,
  66. message_ids=message_ids,
  67. revoke=True
  68. )
  69. else:
  70. await message.reply_text(
  71. "Reply To A Message To Delete It,"
  72. " Don't Make Fun Of Yourself!")
  73. else:
  74. await message.reply_text("Your Don't Have Enough Permissions!")
  75. await message.delete()
  76. # Kick members
  77. @app.on_message(cust_filter.command(commands=("kick")) & ~filters.edited)
  78. async def kick(_, message: Message):
  79. try:
  80. username = (message.text.split(None, 2)[1])
  81. except IndexError:
  82. username = ""
  83. if (await app.get_chat_member(
  84. message.chat.id, message.from_user.id)).status == 'creator' \
  85. or (await app.get_chat_member(
  86. message.chat.id, message.from_user.id)).can_restrict_members \
  87. is True or message.from_user.id in SUDO:
  88. if username != "":
  89. if username in SUDO or (await app.get_users(username)).id in SUDO:
  90. await message.reply_text("You Wanna Kick The Elevated One?")
  91. else:
  92. if (await app.get_users(username)).id in \
  93. await list_members(message.chat.id):
  94. await message.chat.kick_member(username)
  95. await message.chat.unban_member(username)
  96. await message.reply_text(f"Kicked {username}")
  97. else:
  98. await message.reply_text("This user isn't here,"
  99. " consider kicking yourself.")
  100. else:
  101. if username in SUDO or message.reply_to_message.from_user.id \
  102. in SUDO:
  103. await message.reply_text("You Wanna Kick The Elevated One?")
  104. else:
  105. if message.reply_to_message.from_user.id in \
  106. await list_members(message.chat.id):
  107. user_id = message.reply_to_message.from_user.id
  108. await message.reply_to_message.chat.kick_member(user_id)
  109. await message.reply_to_message.chat.unban_member(user_id)
  110. await message.reply_text(f"Kicked {username}")
  111. else:
  112. await message.reply_text("This user isn't here,"
  113. " consider kicking yourself.")
  114. # Ban members
  115. @app.on_message(cust_filter.command(commands=("ban")) & ~filters.edited)
  116. async def ban(_, message: Message):
  117. try:
  118. username = (message.text.split(None, 2)[1])
  119. except IndexError:
  120. username = ""
  121. if (await app.get_chat_member(
  122. message.chat.id, message.from_user.id)).status == 'creator' \
  123. or (await app.get_chat_member(
  124. message.chat.id, message.from_user.id)).can_restrict_members \
  125. is True or message.from_user.id in SUDO:
  126. if username != "":
  127. if username in SUDO or (await app.get_users(username)).id in SUDO:
  128. await message.reply_text("You Wanna Ban The Elevated One?")
  129. else:
  130. if (await app.get_users(username)).id in \
  131. await list_members(message.chat.id):
  132. await message.chat.kick_member(username)
  133. await message.reply_text(f"Banned {username}")
  134. else:
  135. await message.reply_text("This user isn't here,"
  136. " consider banning yourself.")
  137. else:
  138. if username in SUDO or message.reply_to_message.from_user.id \
  139. in SUDO:
  140. await message.reply_text("You Wanna Ban The Elevated One?")
  141. else:
  142. if (await app.get_users(username)).id in \
  143. await list_members(message.chat.id):
  144. user_id = message.reply_to_message.from_user.id
  145. await message.reply_to_message.chat.kick_member(user_id)
  146. await message.reply_text(f"Banned {username}")
  147. else:
  148. await message.reply_text("This user isn't here,"
  149. " consider kicking yourself.")
  150. # Unban members
  151. @app.on_message(cust_filter.command(commands=("unban")) & ~filters.edited)
  152. async def unban(_, message: Message):
  153. try:
  154. username = (message.text.split(None, 2)[1])
  155. except IndexError:
  156. username = ""
  157. if (await app.get_chat_member(
  158. message.chat.id, message.from_user.id)).status == 'creator' \
  159. or (await app.get_chat_member(
  160. message.chat.id, message.from_user.id)).can_restrict_members \
  161. is True or message.from_user.id in SUDO:
  162. if username != "":
  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. " don't bully me!")
  170. else:
  171. if (await app.get_users(username)).id not in \
  172. await list_members(message.chat.id):
  173. user_id = message.reply_to_message.from_user.id
  174. await message.reply_to_message.chat.unban_member(user_id)
  175. await message.reply_text(f"Unbanned {username}")
  176. else:
  177. await message.reply_text("This user is already here,"
  178. " don't bully me!")
  179. # Kick members on their own call
  180. @app.on_message(cust_filter.command(commands=("kickme")) & ~filters.edited)
  181. async def kickme(_, message: Message):
  182. if message.from_user.id not in SUDO:
  183. await message.chat.kick_member(message.from_user.id)
  184. await message.chat.unban_member(message.from_user.id)
  185. await message.reply_text("Kicked!, Joke's on you, I'm into that shit!")
  186. else:
  187. await message.reply_text("It doesn't works that way mate.")
  188. # Ban members on their own call
  189. @app.on_message(cust_filter.command(commands=("banme")))
  190. async def banme(_, message: Message):
  191. if message.from_user.id not in SUDO:
  192. await message.chat.kick_member(message.from_user.id)
  193. await message.reply_text("Banned!, Joke's on you, I'm into that shit!")
  194. else:
  195. await message.reply_text("It doesn't works that way mate.")
  196. # Delete messages
  197. @app.on_message(cust_filter.command(commands=("del")))
  198. async def delete(_, message: Message):
  199. admins = await list_admins(message.chat.id)
  200. chat_id = message.chat.id
  201. from_user_id = message.from_user.id
  202. if message.from_user.id in admins \
  203. or message.from_user.id in SUDO:
  204. if (await app.get_chat_member(chat_id,
  205. from_user_id)).can_delete_messages \
  206. or (await app.get_chat_member(chat_id, from_user_id)).status \
  207. == 'creator' \
  208. or message.from_user.id in SUDO:
  209. await message.reply_to_message.delete()
  210. await message.delete()
  211. else:
  212. await message.reply_text("You Don't Have Enough Permissions,"
  213. + " Consider Deleting Yourself!")
  214. # Promote Members
  215. @app.on_message(cust_filter.command(commands=("promote")) & ~filters.edited)
  216. async def promote(_, message: Message):
  217. admins = await list_admins(message.chat.id)
  218. chat_id = message.chat.id
  219. from_user_id = message.from_user.id
  220. if (await app.get_chat_member(chat_id,
  221. BOT_ID)).can_promote_members:
  222. if message.from_user.id in admins \
  223. or message.from_user.id in SUDO:
  224. if (await app.get_chat_member(chat_id,
  225. from_user_id)).can_promote_members \
  226. or (await app.get_chat_member(chat_id, from_user_id)).status \
  227. == 'creator' \
  228. or message.from_user.id in SUDO:
  229. if message.text != '/promote':
  230. username = message.text.replace('/promote', '')
  231. user_id = (await app.get_users(username)).id
  232. await message.chat.promote_member(
  233. user_id=user_id,
  234. can_change_info=True,
  235. can_invite_users=True,
  236. can_restrict_members=True,
  237. can_delete_messages=True,
  238. can_pin_messages=True,
  239. can_promote_members=True)
  240. await message.reply_text('Promoted!')
  241. else:
  242. user_id = message.reply_to_message.from_user.id
  243. await message.chat.promote_member(
  244. user_id=user_id,
  245. can_change_info=True,
  246. can_invite_users=True,
  247. can_restrict_members=True,
  248. can_delete_messages=True,
  249. can_pin_messages=True,
  250. can_promote_members=True)
  251. await message.reply_text('Promoted!')
  252. else:
  253. await message.reply_text("Yeah, I Can See You're An Admin,"
  254. + " But You Don't Have Permissions"
  255. + " To Promote Someone.")
  256. else:
  257. await message.reply_text("You're Not An Admin, Want A Good Ban?")
  258. else:
  259. await message.reply_text("Well, Your Know What?, I'M NOT AN ADMIN!"
  260. + " MAKE ME ADMIN!")
  261. # Pin Messages
  262. @app.on_message(cust_filter.command(commands=("pin")) & ~filters.edited)
  263. async def pin(_, message: Message):
  264. admins = await list_admins(message.chat.id)
  265. chat_id = message.chat.id
  266. from_user_id = message.from_user.id
  267. if message.from_user.id in admins \
  268. or message.from_user.id in SUDO:
  269. if (await app.get_chat_member(chat_id,
  270. from_user_id)).can_pin_messages \
  271. or (await app.get_chat_member(chat_id, from_user_id)).status \
  272. == 'creator' \
  273. or message.from_user.id in SUDO:
  274. await message.reply_to_message.pin()
  275. else:
  276. await message.reply_text("You're Not An Admin, Stop Spamming!")
  277. # Unpin Messages
  278. @app.on_message(cust_filter.command(commands=("unpin")) & ~filters.edited)
  279. async def unpin(_, message: Message):
  280. admins = await list_admins(message.chat.id)
  281. chat_id = message.chat.id
  282. from_user_id = message.from_user.id
  283. if message.from_user.id in admins \
  284. or message.from_user.id in SUDO:
  285. if (await app.get_chat_member(chat_id,
  286. from_user_id)).can_pin_messages \
  287. or (await app.get_chat_member(chat_id, from_user_id)).status \
  288. == 'creator' \
  289. or message.from_user.id in SUDO:
  290. await app.unpin_all_chat_messages(chat_id)
  291. else:
  292. await message.reply_text("You're Not An Admin, Stop Spamming!")
  293. # Mute members
  294. @app.on_message(cust_filter.command(commands=("mute")) & ~filters.edited)
  295. async def mute(_, message: Message):
  296. chat_id = message.chat.id
  297. admins = await list_admins(chat_id)
  298. from_user_id = message.from_user.id
  299. username = message.text.replace("/mute", "")
  300. if from_user_id in admins or from_user_id in SUDO:
  301. if username != "":
  302. victim = username
  303. else:
  304. victim = message.reply_to_message.from_user.id
  305. await message.chat.restrict_member(victim,
  306. permissions=ChatPermissions())
  307. await message.reply_text("Muted!")
  308. else:
  309. await message.reply_text("Get Yourself An Admin Tag!")
  310. # Unmute members
  311. @app.on_message(cust_filter.command(commands=("unmute")) & ~filters.edited)
  312. async def unmute(_, message: Message):
  313. chat_id = message.chat.id
  314. admins = await list_admins(chat_id)
  315. from_user_id = message.from_user.id
  316. username = message.text.replace("/unmute", "")
  317. if from_user_id in admins or from_user_id in SUDO:
  318. if username != "":
  319. victim = username
  320. else:
  321. victim = message.reply_to_message.from_user.id
  322. await message.chat.unban_member(victim)
  323. await message.reply_text("Unmuted!")
  324. else:
  325. await message.reply_text("Get Yourself An Admin Tag!")