# Copyright (C) 2020-2021 by DevsExpo@Github, < https://github.com/DevsExpo >. # # This file is part of < https://github.com/DevsExpo/FridayUserBot > project, # and is released under the "GNU v3.0 License Agreement". # Please see < https://github.com/DevsExpo/blob/master/LICENSE > # # All rights reserved. import os import time import requests from pyrogram import Client, enums, filters from pyrogram.types import Message from utils.config import vt_key as vak from utils.misc import modules_help, prefix from utils.scripts import edit_or_reply, format_exc, progress @Client.on_message(filters.command('vt', prefix) & filters.me) async def scan_my_file(_, message: Message): ms_ = await edit_or_reply(message, '`Please Wait! Scanning This File`') if not message.reply_to_message: return await ms_.edit( '`Please Reply To File To Scan For Viruses`', parse_mode=enums.ParseMode.MARKDOWN, ) if not message.reply_to_message.document: return await ms_.edit( '`Please Reply To File To Scan For Viruses`', parse_mode=enums.ParseMode.MARKDOWN, ) if vak is None: return await ms_.edit( '`You Need To Set VIRUSTOTAL_API_KEY For Functing Of This Plugin.`', parse_mode=enums.ParseMode.MARKDOWN, ) if int(message.reply_to_message.document.file_size) > 32000000: return await ms_.edit( f'**File Too Large, Use `{prefix}vtl` instead**', parse_mode=enums.ParseMode.MARKDOWN, ) c_time = time.time() downloaded_file_name = await message.reply_to_message.download( progress=progress, progress_args=(ms_, c_time, '`Downloading This File!`'), ) url = 'https://www.virustotal.com/vtapi/v2/file/scan' params = {'apikey': vak} files = {'file': (downloaded_file_name, open(downloaded_file_name, 'rb'))} response = requests.post(url, files=files, params=params, timeout=10) try: r_json = response.json() md5 = r_json['md5'] except Exception as e: return await ms_.edit(format_exc(e)) await ms_.edit( f'Scanned {message.reply_to_message.document.file_name}. You Can Visit : Here In 5-10 Min To See File Report' ) if os.path.exists(downloaded_file_name): os.remove(downloaded_file_name) @Client.on_message(filters.command('vtl', prefix) & filters.me) async def scan_my_large_file(_, message: Message): ms_ = await edit_or_reply(message, '`Please Wait! Scanning This File`') if not message.reply_to_message: return await ms_.edit( '`Please Reply To File To Scan For Viruses`', parse_mode=enums.ParseMode.MARKDOWN, ) if not message.reply_to_message.document: return await ms_.edit( '`Please Reply To File To Scan For Viruses`', parse_mode=enums.ParseMode.MARKDOWN, ) if vak is None: return await ms_.edit( '`You Need To Set VIRUSTOTAL_API_KEY For Functing Of This Plugin.`', parse_mode=enums.ParseMode.MARKDOWN, ) if int(message.reply_to_message.document.file_size) > 650000000: return await ms_.edit( '**File Too Large, exceeded Max capacity of 650MB**', parse_mode=enums.ParseMode.MARKDOWN, ) c_time = time.time() downloaded_file_name = await message.reply_to_message.download( progress=progress, progress_args=(ms_, c_time, '`Downloading This File!`'), ) url1 = 'https://www.virustotal.com/api/v3/files/upload_url' headers = {'accept': 'application/json', 'x-apikey': vak} rponse = requests.get(url1, headers=headers, timeout=10) try: r_json = rponse.json() upl_data = r_json['data'] except Exception as e: return await ms_.edit(format_exc(e)) url = upl_data files = {'file': (downloaded_file_name, open(downloaded_file_name, 'rb'))} headers = {'accept': 'application/json', 'x-apikey': vak} response = requests.post(url, files=files, headers=headers, timeout=10) r_json = response.json() analysis_url = r_json['data']['links']['self'] url = analysis_url headers = {'accept': 'application/json', 'x-apikey': vak} response_result = requests.get(url, headers=headers, timeout=10) try: r_json = response_result.json() md5 = r_json['meta']['file_info']['md5'] except Exception as e: return await ms_.edit(format_exc(e)) await ms_.edit( f'Scanned {message.reply_to_message.document.file_name}. You Can Visit : Here In 5-10 Min To See File Report' ) if os.path.exists(downloaded_file_name): os.remove(downloaded_file_name) modules_help['virustotal'] = { 'vt [reply to file]*': 'Scan for viruses on Virus Total (for lower file size <32MB)', 'vtl [reply to file]*': 'Scan for viruses on Virus Total (for lower file size >=32MB)', }