One task per user

This commit is contained in:
yasir 2023-01-28 11:27:33 +07:00
parent 10a76f2049
commit 096bcb6931
4 changed files with 27 additions and 18 deletions

View file

@ -15,6 +15,7 @@ getLogger("pyrogram").setLevel(ERROR)
MOD_LOAD = [] MOD_LOAD = []
MOD_NOLOAD = [] MOD_NOLOAD = []
HELPABLE = {} HELPABLE = {}
DL_TASK = {}
cleanmode = {} cleanmode = {}
botStartTime = time.time() botStartTime = time.time()

View file

@ -8,14 +8,14 @@
import os import os
import time import time
import traceback import traceback
from asyncio import gather, sleep from asyncio import gather, sleep, Lock
from logging import getLogger from logging import getLogger
from shutil import rmtree from shutil import rmtree
from pyrogram import enums, filters from pyrogram import enums, filters
from pyrogram.errors import FloodWait from pyrogram.errors import FloodWait
from misskaty import BOT_USERNAME, app from misskaty import BOT_USERNAME, DL_TASK, app
from misskaty.core.decorator.errors import capture_err from misskaty.core.decorator.errors import capture_err
from misskaty.helper.ffmpeg_helper import genss_link, take_ss from misskaty.helper.ffmpeg_helper import genss_link, take_ss
from misskaty.helper.pyro_progress import progress_for_pyrogram from misskaty.helper.pyro_progress import progress_for_pyrogram
@ -41,9 +41,13 @@ async def genss(client, message):
if media is None: if media is None:
return await message.reply("Reply to a Telegram Video or document as video to generate screenshoot!") return await message.reply("Reply to a Telegram Video or document as video to generate screenshoot!")
process = await message.reply_text("`Processing, please wait..`") process = await message.reply_text("`Processing, please wait..`")
if not DL_TASK.get(message.from_user.id):
DL_TASK[message.from_user.id] = Lock()
if DL_TASK[message.from_user.id].locked():
return await process.edit("Sorry to avoid flood and error, bot only process one task at a time.")
c_time = time.time() c_time = time.time()
the_real_download_location = await client.download_media( the_real_download_location = await replied.download(
message=message.reply_to_message,
progress=progress_for_pyrogram, progress=progress_for_pyrogram,
progress_args=("Trying to download, please wait..", process, c_time), progress_args=("Trying to download, please wait..", process, c_time),
) )
@ -82,6 +86,7 @@ async def genss(client, message):
f"☑️ Uploaded [1] screenshoot.\n\n{message.from_user.first_name} (<code>{message.from_user.id}</code>)\n#️⃣ #ssgen #id{message.from_user.id}\n\nSS Generate by @{BOT_USERNAME}", f"☑️ Uploaded [1] screenshoot.\n\n{message.from_user.first_name} (<code>{message.from_user.id}</code>)\n#️⃣ #ssgen #id{message.from_user.id}\n\nSS Generate by @{BOT_USERNAME}",
reply_to_message_id=message.id, reply_to_message_id=message.id,
) )
del DL_TASK[message.from_user.id]
await process.delete() await process.delete()
try: try:
os.remove(images) os.remove(images)
@ -91,6 +96,7 @@ async def genss(client, message):
except Exception: except Exception:
exc = traceback.format_exc() exc = traceback.format_exc()
await message.reply(f"Gagal generate screenshot.\n\n{exc}") await message.reply(f"Gagal generate screenshot.\n\n{exc}")
del DL_TASK[message.from_user.id]
try: try:
os.remove(images) os.remove(images)
os.remove(the_real_download_location) os.remove(the_real_download_location)

View file

@ -15,7 +15,7 @@ from pyrogram import filters
from pyrogram.errors import FloodWait from pyrogram.errors import FloodWait
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from misskaty import app from misskaty import app, DL_TASK
from misskaty.helper.media_helper import post_to_telegraph, runcmd from misskaty.helper.media_helper import post_to_telegraph, runcmd
from misskaty.helper.pyro_progress import progress_for_pyrogram from misskaty.helper.pyro_progress import progress_for_pyrogram
from misskaty.vars import COMMAND_HANDLER from misskaty.vars import COMMAND_HANDLER
@ -28,17 +28,18 @@ async def mediainfo(client, message):
process = await message.reply_text("`Sedang memproses, lama waktu tergantung ukuran file kamu...`", quote=True) process = await message.reply_text("`Sedang memproses, lama waktu tergantung ukuran file kamu...`", quote=True)
file_info = get_file_id(message.reply_to_message) file_info = get_file_id(message.reply_to_message)
if file_info is None: if file_info is None:
await process.edit_text("Balas ke format media yang valid") return await process.edit_text("Balas ke format media yang valid")
return if not DL_TASK.get(message.from_user.id):
DL_TASK[message.from_user.id] = asyncio.Lock()
if DL_TASK[message.from_user.id].locked():
return await process.edit("Sorry to avoid flood and error, bot only process one task at a time.")
c_time = time.time() c_time = time.time()
try: file_path = await message.reply_to_message.download(
file_path = await client.download_media( progress=progress_for_pyrogram,
message=message.reply_to_message, progress_args=("trying to download, sabar yakk..", process, c_time),
progress=progress_for_pyrogram, )
progress_args=("trying to download, sabar yakk..", process, c_time),
)
except Exception as err:
return await message.reply(f"Failed to download media. Err detail -> {err}")
output_ = await runcmd(f'mediainfo "{file_path}"') output_ = await runcmd(f'mediainfo "{file_path}"')
out = output_[0] if len(output_) != 0 else None out = output_[0] if len(output_) != 0 else None
body_text = f""" body_text = f"""
@ -54,9 +55,10 @@ async def mediainfo(client, message):
link = post_to_telegraph(title, body_text) link = post_to_telegraph(title, body_text)
markup = InlineKeyboardMarkup([[InlineKeyboardButton(text=text_, url=link)]]) markup = InlineKeyboardMarkup([[InlineKeyboardButton(text=text_, url=link)]])
try: try:
await message.reply(" **MEDIA INFO**", reply_markup=markup, quote=True) await message.reply(" <b>MEDIA INFO</b>", reply_markup=markup, quote=True)
except FloodWait as f: except FloodWait as f:
await asyncio.sleep(f.value) await asyncio.sleep(f.value)
del DL_TASK[message.from_user.id]
await process.delete() await process.delete()
try: try:
osremove(file_path) osremove(file_path)

View file

@ -71,7 +71,7 @@ async def wastepaste(_, message):
if not reply and len(message.command) < 2: if not reply and len(message.command) < 2:
return await message.reply_text(f"**Reply To A Message With /{target} or with command**") return await message.reply_text(f"**Reply To A Message With /{target} or with command**")
msg = await message.reply_text("`Pasting to Wastebin...`") msg = await message.reply_text("`Pasting to YasirBin...`")
data = "" data = ""
limit = 1024 * 1024 limit = 1024 * 1024
if reply and reply.document: if reply and reply.document:
@ -125,7 +125,7 @@ async def wastepaste(_, message):
[InlineKeyboardButton("Share Link", url=f"https://telegram.me/share/url?url={url}")], [InlineKeyboardButton("Share Link", url=f"https://telegram.me/share/url?url={url}")],
] ]
pasted = f"**Successfully pasted your data to Nekobin<a href='{url}'>.</a>\n\nPaste by {uname}**" pasted = f"**Successfully pasted your data to YasirBin<a href='{url}'>.</a>\n\nPaste by {uname}**"
await msg.edit(pasted, reply_markup=InlineKeyboardMarkup(button)) await msg.edit(pasted, reply_markup=InlineKeyboardMarkup(button))
# Nekobin Paste # Nekobin Paste