Path: blob/master/bot/modules/cancel_task.py
1620 views
from asyncio import sleep12from .. import task_dict, task_dict_lock, user_data, multi_tags3from ..core.config_manager import Config4from ..helper.ext_utils.bot_utils import new_task5from ..helper.ext_utils.status_utils import (6get_task_by_gid,7get_all_tasks,8MirrorStatus,9)10from ..helper.telegram_helper import button_build11from ..helper.telegram_helper.bot_commands import BotCommands12from ..helper.telegram_helper.filters import CustomFilters13from ..helper.telegram_helper.message_utils import (14send_message,15auto_delete_message,16delete_message,17edit_message,18)192021@new_task22async def cancel(_, message):23user_id = message.from_user.id if message.from_user else message.sender_chat.id24msg = message.text.split()25if len(msg) > 1:26gid = msg[1]27if len(gid) == 4:28multi_tags.discard(gid)29return30else:31task = await get_task_by_gid(gid)32if task is None:33await send_message(message, f"GID: <code>{gid}</code> Not Found.")34return35elif reply_to_id := message.reply_to_message_id:36async with task_dict_lock:37task = task_dict.get(reply_to_id)38if task is None:39await send_message(message, "This is not an active task!")40return41elif len(msg) == 1:42msg = (43"Reply to an active Command message which was used to start the download"44f" or send <code>/{BotCommands.CancelTaskCommand[0]} GID</code> to cancel it!"45)46await send_message(message, msg)47return48if (49Config.OWNER_ID != user_id50and task.listener.user_id != user_id51and (user_id not in user_data or not user_data[user_id].get("SUDO"))52):53await send_message(message, "This task is not for you!")54return55obj = task.task()56await obj.cancel_task()575859@new_task60async def cancel_multi(_, query):61data = query.data.split()62user_id = query.from_user.id63if user_id != int(data[1]) and not await CustomFilters.sudo("", query):64await query.answer("Not Yours!", show_alert=True)65return66tag = int(data[2])67if tag in multi_tags:68multi_tags.discard(int(data[2]))69msg = "Stopped!"70else:71msg = "Already Stopped/Finished!"72await query.answer(msg, show_alert=True)73await delete_message(query.message)747576async def cancel_all(status, user_id):77matches = await get_all_tasks(status.strip(), user_id)78if not matches:79return False80for task in matches:81obj = task.task()82await obj.cancel_task()83await sleep(2)84return True858687def create_cancel_buttons(is_sudo, user_id=""):88buttons = button_build.ButtonMaker()89buttons.data_button(90"Downloading", f"canall ms {MirrorStatus.STATUS_DOWNLOAD} {user_id}"91)92buttons.data_button(93"Uploading", f"canall ms {MirrorStatus.STATUS_UPLOAD} {user_id}"94)95buttons.data_button("Seeding", f"canall ms {MirrorStatus.STATUS_SEED} {user_id}")96buttons.data_button("Spltting", f"canall ms {MirrorStatus.STATUS_SPLIT} {user_id}")97buttons.data_button("Cloning", f"canall ms {MirrorStatus.STATUS_CLONE} {user_id}")98buttons.data_button(99"Extracting", f"canall ms {MirrorStatus.STATUS_EXTRACT} {user_id}"100)101buttons.data_button(102"Archiving", f"canall ms {MirrorStatus.STATUS_ARCHIVE} {user_id}"103)104buttons.data_button(105"QueuedDl", f"canall ms {MirrorStatus.STATUS_QUEUEDL} {user_id}"106)107buttons.data_button(108"QueuedUp", f"canall ms {MirrorStatus.STATUS_QUEUEUP} {user_id}"109)110buttons.data_button(111"SampleVideo", f"canall ms {MirrorStatus.STATUS_SAMVID} {user_id}"112)113buttons.data_button(114"ConvertMedia", f"canall ms {MirrorStatus.STATUS_CONVERT} {user_id}"115)116buttons.data_button("FFmpeg", f"canall ms {MirrorStatus.STATUS_FFMPEG} {user_id}")117buttons.data_button("Paused", f"canall ms {MirrorStatus.STATUS_PAUSED} {user_id}")118buttons.data_button("All", f"canall ms All {user_id}")119if is_sudo:120if user_id:121buttons.data_button("All Added Tasks", f"canall bot ms {user_id}")122else:123buttons.data_button("My Tasks", f"canall user ms {user_id}")124buttons.data_button("Close", f"canall close ms {user_id}")125return buttons.build_menu(2)126127128@new_task129async def cancel_all_buttons(_, message):130async with task_dict_lock:131count = len(task_dict)132if count == 0:133await send_message(message, "No active tasks!")134return135is_sudo = await CustomFilters.sudo("", message)136button = create_cancel_buttons(is_sudo, message.from_user.id)137can_msg = await send_message(message, "Choose tasks to cancel!", button)138await auto_delete_message(message, can_msg)139140141@new_task142async def cancel_all_update(_, query):143data = query.data.split()144message = query.message145reply_to = message.reply_to_message146user_id = int(data[3]) if len(data) > 3 else ""147is_sudo = await CustomFilters.sudo("", query)148if not is_sudo and user_id and user_id != query.from_user.id:149await query.answer("Not Yours!", show_alert=True)150else:151await query.answer()152if data[1] == "close":153await delete_message(reply_to)154await delete_message(message)155elif data[1] == "back":156button = create_cancel_buttons(is_sudo, user_id)157await edit_message(message, "Choose tasks to cancel!", button)158elif data[1] == "bot":159button = create_cancel_buttons(is_sudo, "")160await edit_message(message, "Choose tasks to cancel!", button)161elif data[1] == "user":162button = create_cancel_buttons(is_sudo, query.from_user.id)163await edit_message(message, "Choose tasks to cancel!", button)164elif data[1] == "ms":165buttons = button_build.ButtonMaker()166buttons.data_button("Yes!", f"canall {data[2]} confirm {user_id}")167buttons.data_button("Back", f"canall back confirm {user_id}")168buttons.data_button("Close", f"canall close confirm {user_id}")169button = buttons.build_menu(2)170await edit_message(171message, f"Are you sure you want to cancel all {data[2]} tasks", button172)173else:174button = create_cancel_buttons(is_sudo, user_id)175await edit_message(message, "Choose tasks to cancel.", button)176res = await cancel_all(data[1], user_id)177if not res:178await send_message(reply_to, f"No matching tasks for {data[1]}!")179180181