| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- from os import remove
- from pyrogram import filters
- from wbb import app, arq
- from wbb.core.decorators.errors import capture_err
- from wbb.core.decorators.permissions import adminsOnly
- from wbb.utils.dbfunctions import is_nsfw_on, nsfw_off, nsfw_on
- from wbb.utils.filter_groups import nsfw_detect_group
- __MODULE__ = "NSFW"
- __HELP__ = """
- /nsfw_scan - Manually Scan An Image/Sticker/Document.
- /anti_nsfw [ENABLE | DISABLE] - Turn This Module On/Off
- """
- async def get_file_id_from_message(message):
- file_id = None
- if message.document:
- if int(message.document.file_size) > 3145728:
- return
- mime_type = message.document.mime_type
- if mime_type != "image/png" and mime_type != "image/jpeg":
- return
- file_id = message.document.file_id
- if message.sticker:
- if message.sticker.is_animated:
- if not message.sticker.thumbs:
- return
- file_id = message.sticker.thumbs[0].file_id
- else:
- file_id = message.sticker.file_id
- if message.photo:
- file_id = message.photo.file_id
- if message.animation:
- if not message.animation.thumbs:
- return
- file_id = message.animation.thumbs[0].file_id
- if message.video:
- if not message.video.thumbs:
- return
- file_id = message.video.thumbs[0].file_id
- return file_id
- @app.on_message(
- (
- filters.document
- | filters.photo
- | filters.sticker
- | filters.animation
- | filters.video
- )
- & ~filters.private,
- group=nsfw_detect_group,
- )
- @capture_err
- async def detect_nsfw(_, message):
- if not await is_nsfw_on(message.chat.id):
- return
- if not message.from_user:
- return
- file_id = await get_file_id_from_message(message)
- if not file_id:
- return
- file = await app.download_media(file_id)
- try:
- results = await arq.nsfw_scan(file=file)
- except Exception:
- return
- if not results.ok:
- return
- results = results.result
- remove(file)
- nsfw = results.is_nsfw
- if not nsfw:
- return
- try:
- await message.delete()
- except Exception:
- return
- await message.reply_text(
- f"""
- **NSFW Image Detected & Deleted Successfully!
- ————————————————————————**
- **User:** {message.from_user.mention} [`{message.from_user.id}`]
- **Safe:** `{results.neutral} %`
- **Porn:** `{results.porn} %`
- **Adult:** `{results.sexy} %`
- **Hentai:** `{results.hentai} %`
- **Drawings:** `{results.drawings} %`
- **————————————————————————**
- __Use `/anti_nsfw disable` to disable this.__
- """
- )
- @app.on_message(filters.command("nsfw_scan"))
- @capture_err
- async def nsfw_scan_command(_, message):
- if not message.reply_to_message:
- await message.reply_text(
- "Reply to an image/document/sticker/animation to scan it."
- )
- return
- reply = message.reply_to_message
- if (
- not reply.document
- and not reply.photo
- and not reply.sticker
- and not reply.animation
- and not reply.video
- ):
- await message.reply_text(
- "Reply to an image/document/sticker/animation to scan it."
- )
- return
- m = await message.reply_text("Scanning")
- file_id = await get_file_id_from_message(reply)
- if not file_id:
- return await m.edit("Something wrong happened.")
- file = await app.download_media(file_id)
- try:
- results = await arq.nsfw_scan(file=file)
- except Exception as e:
- return await m.edit(str(e))
- remove(file)
- if not results.ok:
- return await m.edit(results.result)
- results = results.result
- await m.edit(
- f"""
- **Neutral:** `{results.neutral} %`
- **Porn:** `{results.porn} %`
- **Hentai:** `{results.hentai} %`
- **Sexy:** `{results.sexy} %`
- **Drawings:** `{results.drawings} %`
- **NSFW:** `{results.is_nsfw}`
- """
- )
- @app.on_message(filters.command("anti_nsfw") & ~filters.private)
- @adminsOnly("can_change_info")
- async def nsfw_enable_disable(_, message):
- if len(message.command) != 2:
- await message.reply_text(
- "Usage: /anti_nsfw [enable | disable]"
- )
- return
- status = message.text.split(None, 1)[1].strip()
- status = status.lower()
- chat_id = message.chat.id
- if status == "enable":
- await nsfw_on(chat_id)
- await message.reply_text(
- "Enabled AntiNSFW System. I will Delete Messages Containing Inappropriate Content."
- )
- elif status == "disable":
- await nsfw_off(chat_id)
- await message.reply_text("Disabled AntiNSFW System.")
- else:
- await message.reply_text(
- "Unknown Suffix, Use /anti_nsfw [enable|disable]"
- )
|