admin.py 19 KB

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