File size: 5,604 Bytes
c7dfe8b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# <============================================== IMPORTS =========================================================>
from os import remove
from pyrogram import filters
from Database.mongodb.toggle_mongo import is_nsfw_on, nsfw_off, nsfw_on
from Mikobot import BOT_USERNAME, DRAGONS, app
from Mikobot.state import arq
from Mikobot.utils.can_restrict import can_restrict
from Mikobot.utils.errors import capture_err
# <=======================================================================================================>
# <================================================ FUNCTION =======================================================>
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 not in ("image/png", "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=8,
)
@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 _.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 message.from_user.id in DRAGONS:
return
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} %`
"""
)
@app.on_message(filters.command(["nsfwscan", f"nsfwscan@{BOT_USERNAME}"]))
@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 _.download_media(file_id)
try:
results = await arq.nsfw_scan(file=file)
except Exception:
return
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(["antinsfw", f"antinsfw@{BOT_USERNAME}"]) & ~filters.private
)
@can_restrict
async def nsfw_enable_disable(_, message):
if len(message.command) != 2:
await message.reply_text("Usage: /antinsfw [on/off]")
return
status = message.text.split(None, 1)[1].strip()
status = status.lower()
chat_id = message.chat.id
if status in ("on", "yes"):
if await is_nsfw_on(chat_id):
await message.reply_text("Antinsfw is already enabled.")
return
await nsfw_on(chat_id)
await message.reply_text(
"Enabled AntiNSFW System. I will Delete Messages Containing Inappropriate Content."
)
elif status in ("off", "no"):
if not await is_nsfw_on(chat_id):
await message.reply_text("Antinsfw is already disabled.")
return
await nsfw_off(chat_id)
await message.reply_text("Disabled AntiNSFW System.")
else:
await message.reply_text("Unknown Suffix, Use /antinsfw [on/off]")
# <=================================================== HELP ====================================================>
__mod_name__ = "ANTI-NSFW"
__help__ = """
*π Helps in detecting NSFW material and removing it*.
β *Usage:*
Β» /antinsfw [on/off]: Enables Anti-NSFW system.
Β» /nsfwscan <reply to message>: Scans the file replied to.
"""
# <================================================ END =======================================================>
|