Spaces:
Running
Running
File size: 3,221 Bytes
de1ee14 |
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 |
# This file is part of the AutoAnime distribution.
# Copyright (c) 2025 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)
import asyncio
import hashlib
import shutil
import sys
from itertools import count
from traceback import format_exc
import anitopy
from feedparser import parse
from database import LOGS, DataBase
class SubsPlease:
def __init__(self, dB: DataBase):
self.db = dB
def digest(self, string: str):
return hashlib.sha256(string.encode()).hexdigest()
def _exit(self):
LOGS.info("Stopping The Bot...")
try:
[shutil.rmtree(fold) for fold in ["downloads", "thumbs", "encode"]]
except BaseException:
LOGS.error(format_exc())
sys.exit(0)
def rss_feed_data(self):
try:
return (
parse("https://subsplease.org/rss/?r=1080"),
parse("https://subsplease.org/rss/?r=720"),
parse("https://subsplease.org/rss/?r=sd"),
)
except KeyboardInterrupt:
self._exit()
except BaseException:
LOGS.error(format_exc())
return None, None, None
async def feed_optimizer(self):
d1080, d720, d480 = self.rss_feed_data()
if not d1080 or not d720 or not d480:
return None
for i in range(2, -1, -1):
try:
f1080, f720, f480 = d1080.entries[i], d720.entries[i], d480.entries[i]
a1080, a720, a480 = (
(anitopy.parse(f1080.title)).get("anime_title"),
(anitopy.parse(f720.title)).get("anime_title"),
(anitopy.parse(f480.title)).get("anime_title"),
)
if a1080 == a720 == a480:
if (
"[Batch]" in f1080.title
or "[Batch]" in f720.title
or "[Batch]" in f480.title
):
continue
uid = self.digest(f1080.title + f720.title + f480.title)
if not await self.db.is_anime_uploaded(uid):
return {"uid": uid, "1080p": f1080, "720p": f720, "480p": f480}
except BaseException:
LOGS.error(format_exc())
return None
async def on_new_anime(self, function):
for i in count():
data = await self.feed_optimizer()
if data:
await function(data)
await self.db.add_anime(data.get("uid"))
await asyncio.sleep(5)
|