admin.py 15 KB

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