Spaces:
Running
Running
# This file is part of the AutoAnime distribution. | |
# Copyright (c) 2024 Kaif_00z | |
# | |
# This program is free software: you can redistribute it and/or modify | |
# it under the terms of the GNU General Public License as published by | |
# the Free Software Foundation, version 3. | |
# | |
# This program is distributed in the hope that it will be useful, but | |
# WITHOUT ANY WARRANTY; without even the implied warranty of | |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
# General Public License for more details. | |
# | |
# License can be found in < | |
# https://github.com/kaif-00z/AutoAnimeBot/blob/main/LICENSE > . | |
# if you are using this following code then don't forgot to give proper | |
# credit to t.me/kAiF_00z (github.com/kaif-00z) | |
from traceback import format_exc | |
from telethon import Button, events | |
from core.bot import Bot | |
from core.executors import Executors | |
from database import DataBase | |
from functions.info import AnimeInfo | |
from functions.schedule import ScheduleTasks, Var | |
from functions.tools import Tools, asyncio | |
from functions.utils import AdminUtils | |
from libs.ariawarp import Torrent | |
from libs.logger import LOGS, Reporter | |
from libs.subsplease import SubsPlease | |
tools = Tools() | |
tools.init_dir() | |
bot = Bot() | |
dB = DataBase() | |
subsplease = SubsPlease(dB) | |
torrent = Torrent() | |
schedule = ScheduleTasks(bot) | |
admin = AdminUtils(dB, bot) | |
async def _start(event): | |
xnx = await event.reply("`Please Wait...`") | |
msg_id = event.pattern_match.group(1) | |
await dB.add_broadcast_user(event.sender_id) | |
if Var.FORCESUB_CHANNEL and Var.FORCESUB_CHANNEL_LINK: | |
is_user_joined = await bot.is_joined(Var.FORCESUB_CHANNEL, event.sender_id) | |
if is_user_joined: | |
pass | |
else: | |
return await xnx.edit( | |
f"**Please Join The Following Channel To Use This Bot π«‘**", | |
buttons=[ | |
[Button.url("π JOIN CHANNEL", url=Var.FORCESUB_CHANNEL_LINK)], | |
[ | |
Button.url( | |
"β»οΈ REFRESH", | |
url=f"https://t.me/{((await bot.get_me()).username)}?start={msg_id}", | |
) | |
], | |
], | |
) | |
if msg_id: | |
if msg_id.isdigit(): | |
msg = await bot.get_messages(Var.BACKUP_CHANNEL, ids=int(msg_id)) | |
await event.reply(msg) | |
else: | |
items = await dB.get_store_items(msg_id) | |
if items: | |
for id in items: | |
msg = await bot.get_messages(Var.CLOUD_CHANNEL, ids=id) | |
await event.reply(file=[i for i in msg]) | |
else: | |
if event.sender_id == Var.OWNER: | |
return await xnx.edit( | |
"** < ADMIN PANEL > **", | |
buttons=admin.admin_panel(), | |
) | |
await event.reply( | |
f"**Enjoy Ongoing Anime's Best Encode 24/7 π«‘**", | |
buttons=[ | |
[ | |
Button.url("π¨βπ» DEV", url="t.me/kaif_00z"), | |
Button.url( | |
"π OPEN SOURCE", | |
url="https://github.com/kaif-00z/AutoAnimeBot/", | |
), | |
] | |
], | |
) | |
await xnx.delete() | |
async def _(e): | |
await admin._about(e) | |
async def _(e): | |
await admin._logs(e) | |
async def _(e): | |
await admin._restart(e, schedule) | |
async def _(e): | |
await admin._encode_t(e) | |
async def _(e): | |
await admin._btn_t(e) | |
async def _(e): | |
await admin._sep_c_t(e) | |
async def _(e): | |
await admin.broadcast_bt(e) | |
async def _(e): | |
await e.edit(buttons=admin.admin_panel()) | |
async def anime(data): | |
try: | |
torr = [data.get("480p"), data.get("720p"), data.get("1080p")] | |
anime_info = AnimeInfo(torr[0].title) | |
poster = await tools._poster(bot, anime_info) | |
if await dB.is_separate_channel_upload(): | |
chat_info = await tools.get_chat_info(bot, anime_info, dB) | |
await poster.edit( | |
buttons=[ | |
[ | |
Button.url( | |
f"EPISODE {anime_info.data.get('episode_number', '')}".strip(), | |
url=chat_info["invite_link"], | |
) | |
] | |
] | |
) | |
poster = await tools._poster(bot, anime_info, chat_info["chat_id"]) | |
btn = [[]] | |
original_upload = await dB.is_original_upload() | |
button_upload = await dB.is_button_upload() | |
for i in torr: | |
try: | |
filename = f"downloads/{i.title}" | |
reporter = Reporter(bot, i.title) | |
await reporter.alert_new_file_founded() | |
await torrent.download_magnet(i.link, "./downloads/") | |
exe = Executors( | |
bot, | |
dB, | |
{ | |
"original_upload": original_upload, | |
"button_upload": button_upload, | |
}, | |
filename, | |
AnimeInfo(i.title), | |
reporter, | |
) | |
result, _btn = await exe.execute() | |
if result: | |
if _btn: | |
if len(btn[0]) == 2: | |
btn.append([_btn]) | |
else: | |
btn[0].append(_btn) | |
await poster.edit(buttons=btn) | |
asyncio.ensure_future(exe.further_work()) | |
continue | |
await reporter.report_error(_btn, log=True) | |
await reporter.msg.delete() | |
except BaseException: | |
await reporter.report_error(str(format_exc()), log=True) | |
await reporter.msg.delete() | |
except BaseException: | |
LOGS.error(str(format_exc())) | |
try: | |
bot.loop.run_until_complete(subsplease.on_new_anime(anime)) | |
bot.run() | |
except KeyboardInterrupt: | |
subsplease._exit() | |