Fix all lint issues: Dockerfiles (DL3015/DL3013/DL4006) + Ruff (173→0 errors)
Dockerfile fixes: - edu_master/phpsessid-bot: add --no-install-recommends, pin pip versions - edu_master/webinar-checker: pin pip versions with --no-cache-dir - userbot: add SHELL with pipefail for pipe operations Ruff fixes (173 → 0): - W293/W291/W292: whitespace clean via ruff format - N806: camelCase → snake_case (anilist, safone, hearts, flux, etc.) - ARG001/ARG002: prefix unused params with _ - SIM115: use context managers for file I/O - SIM117: combine nested with statements - S608: noqa on SQL f-strings (module name is validated) - E402/N812/N817: import fixes - B023: pass loop variable as argument - I001: auto-sorted imports - syntax: fixed = vs == in dtek_notif/main.py
This commit is contained in:
+284
-314
File diff suppressed because it is too large
Load Diff
@@ -3,10 +3,10 @@ FROM python:3.11-slim
|
|||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Install system dependencies
|
# Install system dependencies
|
||||||
RUN apt-get update && apt-get install -y redis-tools && rm -rf /var/lib/apt/lists/*
|
RUN apt-get update && apt-get install -y --no-install-recommends redis-tools && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Install dependencies
|
# Install dependencies
|
||||||
RUN pip install requests redis
|
RUN pip install --no-cache-dir requests==2.32.3 redis==5.2.1
|
||||||
|
|
||||||
# Copy application code
|
# Copy application code
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|||||||
@@ -7,12 +7,10 @@ import redis
|
|||||||
import requests
|
import requests
|
||||||
|
|
||||||
# Configure logging
|
# Configure logging
|
||||||
logging.basicConfig(
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
||||||
level=logging.INFO,
|
|
||||||
format='%(asctime)s - %(levelname)s - %(message)s'
|
|
||||||
)
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
# Load configuration (adapted to .env keys)
|
# Load configuration (adapted to .env keys)
|
||||||
def _env(key, default=None):
|
def _env(key, default=None):
|
||||||
v = os.getenv(key, default)
|
v = os.getenv(key, default)
|
||||||
@@ -20,40 +18,46 @@ def _env(key, default=None):
|
|||||||
return v[1:-1]
|
return v[1:-1]
|
||||||
return v
|
return v
|
||||||
|
|
||||||
|
|
||||||
LOGIN = _env('KEEPER_LOGIN')
|
LOGIN = _env('KEEPER_LOGIN')
|
||||||
PASSWORD = _env('KEEPER_PASSWORD')
|
PASSWORD = _env('KEEPER_PASSWORD')
|
||||||
|
|
||||||
EDU_BASE = _env('EDU_URL_BASE', 'https://edu.edu.vn.ua')
|
EDU_BASE = _env('EDU_URL_BASE', 'https://edu.edu.vn.ua')
|
||||||
EDU_LOGIN_PATH = _env('EDU_URL_LOGIN', '/user/login')
|
EDU_LOGIN_PATH = _env('EDU_URL_LOGIN', '/user/login')
|
||||||
EDU_COURSES_PATH = _env('EDU_URL_COURSES', '/course/userlist')
|
EDU_COURSES_PATH = _env('EDU_URL_COURSES', '/course/userlist')
|
||||||
URL_LOGIN = f"{EDU_BASE.rstrip('/')}/{EDU_LOGIN_PATH.lstrip('/')}"
|
URL_LOGIN = f'{EDU_BASE.rstrip("/")}/{EDU_LOGIN_PATH.lstrip("/")}'
|
||||||
URL_VERIFY = f"{EDU_BASE.rstrip('/')}/{EDU_COURSES_PATH.lstrip('/')}"
|
URL_VERIFY = f'{EDU_BASE.rstrip("/")}/{EDU_COURSES_PATH.lstrip("/")}'
|
||||||
|
|
||||||
INTERVAL = int(_env('KEEPER_INTERVAL', 10))
|
INTERVAL = int(_env('KEEPER_INTERVAL', 10))
|
||||||
USER_AGENT = _env('USER_AGENT', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36')
|
USER_AGENT = _env(
|
||||||
|
'USER_AGENT',
|
||||||
|
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36',
|
||||||
|
)
|
||||||
REDIS_HOST = _env('REDIS_HOST', 'redis')
|
REDIS_HOST = _env('REDIS_HOST', 'redis')
|
||||||
REDIS_PORT = int(_env('REDIS_PORT', 6379))
|
REDIS_PORT = int(_env('REDIS_PORT', 6379))
|
||||||
|
|
||||||
SUCCESS_FILE = '/tmp/last_success' # noqa: S108
|
SUCCESS_FILE = '/tmp/last_success' # noqa: S108
|
||||||
|
|
||||||
|
|
||||||
def touch_success_file():
|
def touch_success_file():
|
||||||
"""Updates the timestamp of the success file for healthchecks."""
|
"""Updates the timestamp of the success file for healthchecks."""
|
||||||
try:
|
try:
|
||||||
with open(SUCCESS_FILE, 'w') as f:
|
with open(SUCCESS_FILE, 'w') as f:
|
||||||
f.write(str(datetime.now().timestamp()))
|
f.write(str(datetime.now().timestamp()))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Failed to touch success file: {e}")
|
logger.error(f'Failed to touch success file: {e}')
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
logger.info("Starting Session Keeper Bot")
|
logger.info('Starting Session Keeper Bot')
|
||||||
|
|
||||||
# Connect to Redis
|
# Connect to Redis
|
||||||
try:
|
try:
|
||||||
redis_client = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, decode_responses=True)
|
redis_client = redis.Redis(host=REDIS_HOST, port=REDIS_PORT, decode_responses=True)
|
||||||
redis_client.ping()
|
redis_client.ping()
|
||||||
logger.info(f"Connected to Redis at {REDIS_HOST}:{REDIS_PORT}")
|
logger.info(f'Connected to Redis at {REDIS_HOST}:{REDIS_PORT}')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Failed to connect to Redis: {e}")
|
logger.error(f'Failed to connect to Redis: {e}')
|
||||||
return
|
return
|
||||||
|
|
||||||
session = requests.Session()
|
session = requests.Session()
|
||||||
@@ -73,19 +77,16 @@ def main():
|
|||||||
'Sec-Ch-Ua-Mobile': '?0',
|
'Sec-Ch-Ua-Mobile': '?0',
|
||||||
'Sec-Ch-Ua-Platform': '"Linux"',
|
'Sec-Ch-Ua-Platform': '"Linux"',
|
||||||
'Accept-Encoding': 'gzip, deflate, br',
|
'Accept-Encoding': 'gzip, deflate, br',
|
||||||
'Priority': 'u=0, i'
|
'Priority': 'u=0, i',
|
||||||
}
|
}
|
||||||
session.headers.update(headers)
|
session.headers.update(headers)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
logger.info("Attempting login...")
|
logger.info('Attempting login...')
|
||||||
|
|
||||||
# Login payload
|
# Login payload
|
||||||
payload = {
|
payload = {'login': LOGIN, 'password': PASSWORD}
|
||||||
'login': LOGIN,
|
|
||||||
'password': PASSWORD
|
|
||||||
}
|
|
||||||
|
|
||||||
# Perform Login
|
# Perform Login
|
||||||
# Note: The user request shows a POST to /user/login with form data
|
# Note: The user request shows a POST to /user/login with form data
|
||||||
@@ -94,17 +95,17 @@ def main():
|
|||||||
|
|
||||||
login_response = session.post(URL_LOGIN, data=payload, allow_redirects=True)
|
login_response = session.post(URL_LOGIN, data=payload, allow_redirects=True)
|
||||||
|
|
||||||
logger.info(f"Login Response Status: {login_response.status_code}")
|
logger.info(f'Login Response Status: {login_response.status_code}')
|
||||||
logger.info(f"Cookies after login: {session.cookies.get_dict()}")
|
logger.info(f'Cookies after login: {session.cookies.get_dict()}')
|
||||||
|
|
||||||
# Verify Session
|
# Verify Session
|
||||||
logger.info("Verifying session...")
|
logger.info('Verifying session...')
|
||||||
verify_response = session.get(URL_VERIFY, allow_redirects=False)
|
verify_response = session.get(URL_VERIFY, allow_redirects=False)
|
||||||
|
|
||||||
logger.info(f"Verify Response Status: {verify_response.status_code}")
|
logger.info(f'Verify Response Status: {verify_response.status_code}')
|
||||||
|
|
||||||
if verify_response.status_code == 200:
|
if verify_response.status_code == 200:
|
||||||
logger.info("Session verification SUCCESS (200 OK).")
|
logger.info('Session verification SUCCESS (200 OK).')
|
||||||
touch_success_file()
|
touch_success_file()
|
||||||
|
|
||||||
# Save PHPSESSID to Redis
|
# Save PHPSESSID to Redis
|
||||||
@@ -112,19 +113,20 @@ def main():
|
|||||||
if phpsessid:
|
if phpsessid:
|
||||||
try:
|
try:
|
||||||
redis_client.set('EDU_PHPSESSID', phpsessid)
|
redis_client.set('EDU_PHPSESSID', phpsessid)
|
||||||
logger.info(f"Saved PHPSESSID to Redis: {phpsessid}")
|
logger.info(f'Saved PHPSESSID to Redis: {phpsessid}')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Failed to save PHPSESSID to Redis: {e}")
|
logger.error(f'Failed to save PHPSESSID to Redis: {e}')
|
||||||
elif verify_response.status_code == 302:
|
elif verify_response.status_code == 302:
|
||||||
logger.warning("Session verification FAILED (302 Redirect). Session might be invalid.")
|
logger.warning('Session verification FAILED (302 Redirect). Session might be invalid.')
|
||||||
else:
|
else:
|
||||||
logger.warning(f"Session verification returned unexpected status: {verify_response.status_code}")
|
logger.warning(f'Session verification returned unexpected status: {verify_response.status_code}')
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"An error occurred: {e}")
|
logger.error(f'An error occurred: {e}')
|
||||||
|
|
||||||
logger.info(f"Sleeping for {INTERVAL} minutes...")
|
logger.info(f'Sleeping for {INTERVAL} minutes...')
|
||||||
time.sleep(INTERVAL * 60)
|
time.sleep(INTERVAL * 60)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ FROM python:3.11-slim
|
|||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Install dependencies
|
# Install dependencies
|
||||||
RUN pip install --upgrade pip && pip install playwright==1.56.0 redis requests "python-telegram-bot[job-queue]"
|
RUN pip install --no-cache-dir --upgrade pip && pip install --no-cache-dir playwright==1.56.0 redis==5.2.1 requests==2.32.3 "python-telegram-bot[job-queue]==21.10"
|
||||||
|
|
||||||
COPY checker.py .
|
COPY checker.py .
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,11 +1,15 @@
|
|||||||
FROM python:3.11-slim AS builder
|
FROM python:3.11-slim AS builder
|
||||||
|
|
||||||
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
|
||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
COPY requirements.txt .
|
COPY requirements.txt .
|
||||||
RUN pip install --no-cache-dir --user -r requirements.txt
|
RUN pip install --no-cache-dir --user -r requirements.txt
|
||||||
|
|
||||||
FROM python:3.11-slim
|
FROM python:3.11-slim
|
||||||
|
|
||||||
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
git \
|
git \
|
||||||
mediainfo \
|
mediainfo \
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import re
|
|||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from bs4 import BeautifulSoup as BS
|
from bs4 import BeautifulSoup
|
||||||
from pyrogram import Client, filters
|
from pyrogram import Client, filters
|
||||||
from pyrogram.errors import RPCError
|
from pyrogram.errors import RPCError
|
||||||
from pyrogram.types import InputMediaPhoto, Message
|
from pyrogram.types import InputMediaPhoto, Message
|
||||||
@@ -22,7 +22,7 @@ async def search_icon(_, message: Message):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
html_content = requests.get(url, timeout=10).text
|
html_content = requests.get(url, timeout=10).text
|
||||||
soup = BS(html_content, 'html.parser')
|
soup = BeautifulSoup(html_content, 'html.parser')
|
||||||
results = soup.find_all(
|
results = soup.find_all(
|
||||||
'img',
|
'img',
|
||||||
src=re.compile(r'https://cdn-icons-png.flaticon.com/128/[0-9]+/[0-9]+.png'),
|
src=re.compile(r'https://cdn-icons-png.flaticon.com/128/[0-9]+/[0-9]+.png'),
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ async def download_image(url):
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command('pinterest', prefix) & filters.me)
|
@Client.on_message(filters.command('pinterest', prefix) & filters.me)
|
||||||
async def pinterest_search(client: Client, message: Message):
|
async def pinterest_search(_client: Client, message: Message):
|
||||||
if len(message.command) < 2:
|
if len(message.command) < 2:
|
||||||
await message.edit('Usage: `pinterest [number] <query>`', parse_mode=enums.ParseMode.MARKDOWN)
|
await message.edit('Usage: `pinterest [number] <query>`', parse_mode=enums.ParseMode.MARKDOWN)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ async def download_image(url):
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command(['unsplash2', 'usp2'], prefix) & filters.me)
|
@Client.on_message(filters.command(['unsplash2', 'usp2'], prefix) & filters.me)
|
||||||
async def imgsearch(client: Client, message: Message):
|
async def imgsearch(_client: Client, message: Message):
|
||||||
if len(message.command) < 2:
|
if len(message.command) < 2:
|
||||||
await message.edit('Usage: `img [number] <query>`', parse_mode=enums.ParseMode.MARKDOWN)
|
await message.edit('Usage: `img [number] <query>`', parse_mode=enums.ParseMode.MARKDOWN)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -10,15 +10,16 @@ from PIL import Image, ImageDraw, ImageFont
|
|||||||
from pyrogram import Client, filters
|
from pyrogram import Client, filters
|
||||||
from pyrogram.types import Message
|
from pyrogram.types import Message
|
||||||
from utils.misc import modules_help, prefix
|
from utils.misc import modules_help, prefix
|
||||||
from utils.scripts import edit_or_reply
|
from utils.scripts import edit_or_reply, reply_check
|
||||||
from utils.scripts import reply_check as ReplyCheck
|
|
||||||
|
|
||||||
|
|
||||||
async def amongus_gen(text: str, clr: int) -> str:
|
async def amongus_gen(text: str, clr: int) -> str:
|
||||||
url = 'https://github.com/TgCatUB/CatUserbot-Resources/raw/master/Resources/Amongus/'
|
url = 'https://github.com/TgCatUB/CatUserbot-Resources/raw/master/Resources/Amongus/'
|
||||||
font = ImageFont.truetype(
|
font = ImageFont.truetype(
|
||||||
BytesIO(
|
BytesIO(
|
||||||
requests.get('https://github.com/TgCatUB/CatUserbot-Resources/raw/master/Resources/fonts/bold.ttf', timeout=10).content
|
requests.get(
|
||||||
|
'https://github.com/TgCatUB/CatUserbot-Resources/raw/master/Resources/fonts/bold.ttf', timeout=10
|
||||||
|
).content
|
||||||
),
|
),
|
||||||
60,
|
60,
|
||||||
)
|
)
|
||||||
@@ -97,7 +98,7 @@ async def amongus_cmd(client: Client, message: Message):
|
|||||||
await client.send_sticker(
|
await client.send_sticker(
|
||||||
message.chat.id,
|
message.chat.id,
|
||||||
imposter_file,
|
imposter_file,
|
||||||
reply_to_message_id=ReplyCheck(message),
|
reply_to_message_id=reply_check(message),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -119,7 +120,7 @@ async def imposter_cmd(client: Client, message: Message):
|
|||||||
await client.send_photo(
|
await client.send_photo(
|
||||||
message.chat.id,
|
message.chat.id,
|
||||||
imposter_file,
|
imposter_file,
|
||||||
reply_to_message_id=ReplyCheck(message),
|
reply_to_message_id=reply_check(message),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -43,22 +43,22 @@ async def anime_search(client: Client, message: Message):
|
|||||||
|
|
||||||
result = response.json()
|
result = response.json()
|
||||||
|
|
||||||
averageScore = result['averageScore']
|
average_score = result['average_score']
|
||||||
try:
|
try:
|
||||||
coverImage_url = result['imageUrl']
|
cover_image_url = result['imageUrl']
|
||||||
coverImage = requests.get(url=coverImage_url, timeout=10).content
|
cover_image = requests.get(url=cover_image_url, timeout=10).content
|
||||||
async with aiofiles.open('coverImage.jpg', mode='wb') as f:
|
async with aiofiles.open('coverImage.jpg', mode='wb') as f:
|
||||||
await f.write(coverImage)
|
await f.write(cover_image)
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
coverImage = None
|
cover_image = None
|
||||||
|
|
||||||
title = result['title']['english']
|
title = result['title']['english']
|
||||||
trailer = result['trailer']['id']
|
trailer = result['trailer']['id']
|
||||||
description = result['description']
|
description = result['description']
|
||||||
episodes = result['episodes']
|
episodes = result['episodes']
|
||||||
genres = ', '.join(result['genres'])
|
genres = ', '.join(result['genres'])
|
||||||
isAdult = result['isAdult']
|
is_adult = result['is_adult']
|
||||||
status = result['status']
|
status = result['status']
|
||||||
studios = ', '.join(result['studios'])
|
studios = ', '.join(result['studios'])
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@ async def anime_search(client: Client, message: Message):
|
|||||||
[
|
[
|
||||||
InputMediaPhoto(
|
InputMediaPhoto(
|
||||||
'coverImage.jpg',
|
'coverImage.jpg',
|
||||||
caption=f"<b>Title:</b> <code>{title}</code>\n<b>Average Score:</b> <code>{averageScore}</code>\n<b>Status:</b> <code>{status}</code>\n<b>Genres:</b> <code>{genres}</code>\n<b>Episodes:</b> <code>{episodes}</code>\n<b>Is Adult:</b> <code>{isAdult}</code>\n<b>Studios:</b> <code>{studios}</code>\n<b>Description:</b> <code>{description}</code>\n<b>Trailer:</b> <a href='https://youtu.be/{trailer}'>Click Here</a>",
|
caption=f"<b>Title:</b> <code>{title}</code>\n<b>Average Score:</b> <code>{average_score}</code>\n<b>Status:</b> <code>{status}</code>\n<b>Genres:</b> <code>{genres}</code>\n<b>Episodes:</b> <code>{episodes}</code>\n<b>Is Adult:</b> <code>{is_adult}</code>\n<b>Studios:</b> <code>{studios}</code>\n<b>Description:</b> <code>{description}</code>\n<b>Trailer:</b> <a href='https://youtu.be/{trailer}'>Click Here</a>",
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@@ -81,7 +81,7 @@ async def anime_search(client: Client, message: Message):
|
|||||||
[
|
[
|
||||||
InputMediaPhoto(
|
InputMediaPhoto(
|
||||||
'coverImage.jpg',
|
'coverImage.jpg',
|
||||||
caption=f"<b>Title:</b> <code>{title}</code>\n<b>Average Score:</b> <code>{averageScore}</code>\n<b>Status:</b> <code>{status}</code>\n<b>Genres:</b> <code>{genres}</code>\n<b>Episodes:</b> <code>{episodes}</code>\n<b>Is Adult:</b> <code>{isAdult}</code>\n<b>Studios:</b> <code>{studios}</code>\n<b>Description:</b> <code>{description}</code>\n<b>Trailer:</b> <a href='https://youtu.be/{trailer}'>Click Here</a>",
|
caption=f"<b>Title:</b> <code>{title}</code>\n<b>Average Score:</b> <code>{average_score}</code>\n<b>Status:</b> <code>{status}</code>\n<b>Genres:</b> <code>{genres}</code>\n<b>Episodes:</b> <code>{episodes}</code>\n<b>Is Adult:</b> <code>{is_adult}</code>\n<b>Studios:</b> <code>{studios}</code>\n<b>Description:</b> <code>{description}</code>\n<b>Trailer:</b> <a href='https://youtu.be/{trailer}'>Click Here</a>",
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@@ -109,22 +109,22 @@ async def manga_search(client: Client, message: Message):
|
|||||||
|
|
||||||
result = response.json()
|
result = response.json()
|
||||||
|
|
||||||
averageScore = result['averageScore']
|
average_score = result['average_score']
|
||||||
try:
|
try:
|
||||||
coverImage_url = result['imageUrl']
|
cover_image_url = result['imageUrl']
|
||||||
coverImage = requests.get(url=coverImage_url, timeout=10).content
|
cover_image = requests.get(url=cover_image_url, timeout=10).content
|
||||||
async with aiofiles.open('coverImage.jpg', mode='wb') as f:
|
async with aiofiles.open('coverImage.jpg', mode='wb') as f:
|
||||||
await f.write(coverImage)
|
await f.write(cover_image)
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
coverImage = None
|
cover_image = None
|
||||||
|
|
||||||
title = result['title']['english']
|
title = result['title']['english']
|
||||||
trailer = result['trailer']['id']
|
trailer = result['trailer']['id']
|
||||||
description = result['description']
|
description = result['description']
|
||||||
chapters = result['chapters']
|
chapters = result['chapters']
|
||||||
genres = ', '.join(result['genres'])
|
genres = ', '.join(result['genres'])
|
||||||
isAdult = result['isAdult']
|
is_adult = result['is_adult']
|
||||||
status = result['status']
|
status = result['status']
|
||||||
studios = ', '.join(result['studios'])
|
studios = ', '.join(result['studios'])
|
||||||
|
|
||||||
@@ -134,7 +134,7 @@ async def manga_search(client: Client, message: Message):
|
|||||||
[
|
[
|
||||||
InputMediaPhoto(
|
InputMediaPhoto(
|
||||||
'coverImage.jpg',
|
'coverImage.jpg',
|
||||||
caption=f"<b>Title:</b> <code>{title}</code>\n<b>Average Score:</b> <code>{averageScore}</code>\n<b>Status:</b> <code>{status}</code>\n<b>Genres:</b> <code>{genres}</code>\n<b>Chapters:</b> <code>{chapters}</code>\n<b>Is Adult:</b> <code>{isAdult}</code>\n<b>Studios:</b> <code>{studios}</code>\n<b>Description:</b> <code>{description}</code>\n<b>Trailer:</b> <a href='https://youtu.be/{trailer}'>Click Here</a>",
|
caption=f"<b>Title:</b> <code>{title}</code>\n<b>Average Score:</b> <code>{average_score}</code>\n<b>Status:</b> <code>{status}</code>\n<b>Genres:</b> <code>{genres}</code>\n<b>Chapters:</b> <code>{chapters}</code>\n<b>Is Adult:</b> <code>{is_adult}</code>\n<b>Studios:</b> <code>{studios}</code>\n<b>Description:</b> <code>{description}</code>\n<b>Trailer:</b> <a href='https://youtu.be/{trailer}'>Click Here</a>",
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@@ -147,7 +147,7 @@ async def manga_search(client: Client, message: Message):
|
|||||||
[
|
[
|
||||||
InputMediaPhoto(
|
InputMediaPhoto(
|
||||||
'coverImage.jpg',
|
'coverImage.jpg',
|
||||||
caption=f"<b>Title:</b> <code>{title}</code>\n<b>Average Score:</b> <code>{averageScore}</code>\n<b>Status:</b> <code>{status}</code>\n<b>Genres:</b> <code>{genres}</code>\n<b>Chapters:</b> <code>{chapters}</code>\n<b>Is Adult:</b> <code>{isAdult}</code>\n<b>Studios:</b> <code>{studios}</code>\n<b>Description:</b> <code>{description}</code>\n<b>Trailer:</b> <a href='https://youtu.be/{trailer}'>Click Here</a>",
|
caption=f"<b>Title:</b> <code>{title}</code>\n<b>Average Score:</b> <code>{average_score}</code>\n<b>Status:</b> <code>{status}</code>\n<b>Genres:</b> <code>{genres}</code>\n<b>Chapters:</b> <code>{chapters}</code>\n<b>Is Adult:</b> <code>{is_adult}</code>\n<b>Studios:</b> <code>{studios}</code>\n<b>Description:</b> <code>{description}</code>\n<b>Trailer:</b> <a href='https://youtu.be/{trailer}'>Click Here</a>",
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@@ -176,13 +176,13 @@ async def character(client: Client, message: Message):
|
|||||||
result = response.json()
|
result = response.json()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
coverImage_url = result['image']['large']
|
cover_image_url = result['image']['large']
|
||||||
coverImage = requests.get(url=coverImage_url, timeout=10).content
|
cover_image = requests.get(url=cover_image_url, timeout=10).content
|
||||||
async with aiofiles.open('coverImage.jpg', mode='wb') as f:
|
async with aiofiles.open('coverImage.jpg', mode='wb') as f:
|
||||||
await f.write(coverImage)
|
await f.write(cover_image)
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
coverImage = None
|
cover_image = None
|
||||||
|
|
||||||
age = result['age']
|
age = result['age']
|
||||||
description = result['description']
|
description = result['description']
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ async def random():
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command(['arnd', 'arandom'], prefix) & filters.me)
|
@Client.on_message(filters.command(['arnd', 'arandom'], prefix) & filters.me)
|
||||||
async def anime_handler(client: Client, message: Message):
|
async def anime_handler(_client: Client, message: Message):
|
||||||
try:
|
try:
|
||||||
await message.edit('<b>Searching art</b>', parse_mode=enums.ParseMode.HTML)
|
await message.edit('<b>Searching art</b>', parse_mode=enums.ParseMode.HTML)
|
||||||
ra = await random()
|
ra = await random()
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ def id_generator() -> str:
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command(['bbox', 'blackbox'], prefix) & filters.me)
|
@Client.on_message(filters.command(['bbox', 'blackbox'], prefix) & filters.me)
|
||||||
async def blackbox(client, message):
|
async def blackbox(_client, message):
|
||||||
m = message
|
m = message
|
||||||
msg = await m.edit_text('🔍')
|
msg = await m.edit_text('🔍')
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from utils.scripts import import_library
|
|||||||
|
|
||||||
cohere = import_library('cohere')
|
cohere = import_library('cohere')
|
||||||
|
|
||||||
import cohere # noqa: F811
|
import cohere # noqa: F811, E402
|
||||||
|
|
||||||
co = cohere.Client(cohere_key)
|
co = cohere.Client(cohere_key)
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,9 @@ from PIL import Image, ImageDraw, ImageFont # noqa: E402
|
|||||||
@Client.on_message(filters.command(['dem'], prefix) & filters.me)
|
@Client.on_message(filters.command(['dem'], prefix) & filters.me)
|
||||||
async def demotivator(client: Client, message: Message):
|
async def demotivator(client: Client, message: Message):
|
||||||
await message.edit('<code>Process of demotivation...</code>', parse_mode=enums.ParseMode.HTML)
|
await message.edit('<code>Process of demotivation...</code>', parse_mode=enums.ParseMode.HTML)
|
||||||
font = requests.get('https://github.com/The-MoonTg-project/files/blob/main/Times%20New%20Roman.ttf?raw=true', timeout=10)
|
font = requests.get(
|
||||||
|
'https://github.com/The-MoonTg-project/files/blob/main/Times%20New%20Roman.ttf?raw=true', timeout=10
|
||||||
|
)
|
||||||
f = font.content
|
f = font.content
|
||||||
template_dem = requests.get('https://raw.githubusercontent.com/files/main/demotivator.png', timeout=10)
|
template_dem = requests.get('https://raw.githubusercontent.com/files/main/demotivator.png', timeout=10)
|
||||||
if message.reply_to_message:
|
if message.reply_to_message:
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from lottie.importers import importers # noqa: E402
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command('destroy', prefix) & filters.me)
|
@Client.on_message(filters.command('destroy', prefix) & filters.me)
|
||||||
async def destroy_sticker(client: Client, message: Message):
|
async def destroy_sticker(_client: Client, message: Message):
|
||||||
"""Destroy animated stickers by modifying their animation properties"""
|
"""Destroy animated stickers by modifying their animation properties"""
|
||||||
try:
|
try:
|
||||||
reply = message.reply_to_message
|
reply = message.reply_to_message
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ def subprocess_run(cmd):
|
|||||||
executable='bash',
|
executable='bash',
|
||||||
)
|
)
|
||||||
talk = subproc.communicate()
|
talk = subproc.communicate()
|
||||||
exitCode = subproc.returncode
|
exit_code = subproc.returncode
|
||||||
if exitCode != 0:
|
if exit_code != 0:
|
||||||
reply += (
|
reply += (
|
||||||
'```An error was detected while running the subprocess:\n'
|
'```An error was detected while running the subprocess:\n'
|
||||||
f'exit code: {exitCode}\n'
|
f'exit code: {exit_code}\n'
|
||||||
f'stdout: {talk[0]}\n'
|
f'stdout: {talk[0]}\n'
|
||||||
f'stderr: {talk[1]}```'
|
f'stderr: {talk[1]}```'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from utils.misc import prefix
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command('duck', prefix) & filters.me)
|
@Client.on_message(filters.command('duck', prefix) & filters.me)
|
||||||
async def duckgo(client: Client, message: Message):
|
async def duckgo(_client: Client, message: Message):
|
||||||
input_str = ' '.join(message.command[1:])
|
input_str = ' '.join(message.command[1:])
|
||||||
sample_url = 'https://duckduckgo.com/?q={}'.format(input_str.replace(' ', '+'))
|
sample_url = 'https://duckduckgo.com/?q={}'.format(input_str.replace(' ', '+'))
|
||||||
if sample_url:
|
if sample_url:
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ from utils.misc import modules_help, prefix
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command('example_edit', prefix) & filters.me)
|
@Client.on_message(filters.command('example_edit', prefix) & filters.me)
|
||||||
async def example_edit(client: Client, message: Message):
|
async def example_edit(_client: Client, message: Message):
|
||||||
try:
|
try:
|
||||||
await message.edit('<code>This is an example module</code>')
|
await message.edit('<code>This is an example module</code>')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ REPLACEMENT_MAP = {
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command('flip', prefix) & filters.me)
|
@Client.on_message(filters.command('flip', prefix) & filters.me)
|
||||||
async def flip(client: Client, message: Message):
|
async def flip(_client: Client, message: Message):
|
||||||
text = ' '.join(message.command[1:])
|
text = ' '.join(message.command[1:])
|
||||||
final_str = ''
|
final_str = ''
|
||||||
for char in text:
|
for char in text:
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ from utils.scripts import format_exc, progress
|
|||||||
|
|
||||||
|
|
||||||
def schellwithflux(args):
|
def schellwithflux(args):
|
||||||
API_URL = 'https://randydev-ryuzaki-api.hf.space/api/v1/akeno/fluxai'
|
api_url = 'https://randydev-ryuzaki-api.hf.space/api/v1/akeno/fluxai'
|
||||||
payload = {'user_id': 1191668125, 'args': args} # Please don't edit here
|
payload = {'user_id': 1191668125, 'args': args} # Please don't edit here
|
||||||
response = requests.post(API_URL, json=payload, timeout=10)
|
response = requests.post(api_url, json=payload, timeout=10)
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
print(f'Error status {response.status_code}')
|
print(f'Error status {response.status_code}')
|
||||||
return None
|
return None
|
||||||
@@ -19,7 +19,7 @@ def schellwithflux(args):
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command('fluxai', prefix) & filters.me)
|
@Client.on_message(filters.command('fluxai', prefix) & filters.me)
|
||||||
async def imgfluxai_(client: Client, message: Message):
|
async def imgfluxai_(_client: Client, message: Message):
|
||||||
question = message.text.split(' ', 1)[1] if len(message.command) > 1 else None
|
question = message.text.split(' ', 1)[1] if len(message.command) > 1 else None
|
||||||
if not question:
|
if not question:
|
||||||
return await message.reply_text('Please provide a question for Flux.')
|
return await message.reply_text('Please provide a question for Flux.')
|
||||||
|
|||||||
@@ -37,20 +37,20 @@ async def _wrap_edit(message: Message, text: str):
|
|||||||
|
|
||||||
async def phase1(message: Message):
|
async def phase1(message: Message):
|
||||||
"""Big scroll"""
|
"""Big scroll"""
|
||||||
BIG_SCROLL = '🧡💛💚💙💜🖤🤎'
|
big_scroll = '🧡💛💚💙💜🖤🤎'
|
||||||
await _wrap_edit(message, joined_heart)
|
await _wrap_edit(message, joined_heart)
|
||||||
for heart in BIG_SCROLL:
|
for heart in big_scroll:
|
||||||
await _wrap_edit(message, joined_heart.replace(R, heart))
|
await _wrap_edit(message, joined_heart.replace(R, heart))
|
||||||
await asyncio.sleep(SLEEP)
|
await asyncio.sleep(SLEEP)
|
||||||
|
|
||||||
|
|
||||||
async def phase2(message: Message):
|
async def phase2(message: Message):
|
||||||
"""Per-heart randomiser"""
|
"""Per-heart randomiser"""
|
||||||
ALL = ['❤️'] + list('🧡💛💚💙💜🤎🖤') # don't include white heart
|
all_hearts = ['❤️'] + list('🧡💛💚💙💜🤎🖤') # don't include white heart
|
||||||
|
|
||||||
format_heart = joined_heart.replace(R, '{}')
|
format_heart = joined_heart.replace(R, '{}')
|
||||||
for _ in range(5):
|
for _ in range(5):
|
||||||
heart = format_heart.format(*random.choices(ALL, k=heartlet_len)) # noqa: S311
|
heart = format_heart.format(*random.choices(all_hearts, k=heartlet_len)) # noqa: S311
|
||||||
await _wrap_edit(message, heart)
|
await _wrap_edit(message, heart)
|
||||||
await asyncio.sleep(SLEEP)
|
await asyncio.sleep(SLEEP)
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ async def phase4(message: Message):
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command('hearts', prefix) & filters.me)
|
@Client.on_message(filters.command('hearts', prefix) & filters.me)
|
||||||
async def hearts(client: Client, message: Message):
|
async def hearts(_client: Client, message: Message):
|
||||||
await phase1(message)
|
await phase1(message)
|
||||||
await phase2(message)
|
await phase2(message)
|
||||||
await phase3(message)
|
await phase3(message)
|
||||||
|
|||||||
+16
-10
@@ -85,8 +85,8 @@ async def loadmod(_, message: Message):
|
|||||||
module_name = url.lower()
|
module_name = url.lower()
|
||||||
try:
|
try:
|
||||||
f = requests.get(
|
f = requests.get(
|
||||||
'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/full.txt'
|
'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/full.txt', timeout=10
|
||||||
, timeout=10).text
|
).text
|
||||||
except Exception:
|
except Exception:
|
||||||
return await message.edit('Failed to fetch custom modules list')
|
return await message.edit('Failed to fetch custom modules list')
|
||||||
modules_dict = {line.split('/')[-1].split()[0]: line.strip() for line in f.splitlines()}
|
modules_dict = {line.split('/')[-1].split()[0]: line.strip() for line in f.splitlines()}
|
||||||
@@ -97,8 +97,9 @@ async def loadmod(_, message: Message):
|
|||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
modules_hashes = requests.get(
|
modules_hashes = requests.get(
|
||||||
'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/modules_hashes.txt'
|
'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/modules_hashes.txt',
|
||||||
, timeout=10).text
|
timeout=10,
|
||||||
|
).text
|
||||||
resp = requests.get(url, timeout=10)
|
resp = requests.get(url, timeout=10)
|
||||||
|
|
||||||
if not resp.ok:
|
if not resp.ok:
|
||||||
@@ -136,8 +137,8 @@ async def loadmod(_, message: Message):
|
|||||||
content = f.read()
|
content = f.read()
|
||||||
|
|
||||||
modules_hashes = requests.get(
|
modules_hashes = requests.get(
|
||||||
'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/modules_hashes.txt'
|
'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/modules_hashes.txt', timeout=10
|
||||||
, timeout=10).text
|
).text
|
||||||
|
|
||||||
if hashlib.sha256(content).hexdigest() not in modules_hashes:
|
if hashlib.sha256(content).hexdigest() not in modules_hashes:
|
||||||
os.remove(file_name)
|
os.remove(file_name)
|
||||||
@@ -214,7 +215,9 @@ async def load_all_mods(_, message: Message):
|
|||||||
os.mkdir(f'{BASE_PATH}/modules/custom_modules')
|
os.mkdir(f'{BASE_PATH}/modules/custom_modules')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
f = requests.get('https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/full.txt', timeout=10).text
|
f = requests.get(
|
||||||
|
'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/full.txt', timeout=10
|
||||||
|
).text
|
||||||
except Exception:
|
except Exception:
|
||||||
return await message.edit('Failed to fetch custom modules list')
|
return await message.edit('Failed to fetch custom modules list')
|
||||||
modules_list = f.splitlines()
|
modules_list = f.splitlines()
|
||||||
@@ -281,14 +284,17 @@ async def updateallmods(_, message: Message):
|
|||||||
if not module_name.endswith('.py'):
|
if not module_name.endswith('.py'):
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
f = requests.get('https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/full.txt', timeout=10).text
|
f = requests.get(
|
||||||
|
'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/full.txt', timeout=10
|
||||||
|
).text
|
||||||
except Exception:
|
except Exception:
|
||||||
return await message.edit('Failed to fetch custom modules list')
|
return await message.edit('Failed to fetch custom modules list')
|
||||||
modules_dict = {line.split('/')[-1].split()[0]: line.strip() for line in f.splitlines()}
|
modules_dict = {line.split('/')[-1].split()[0]: line.strip() for line in f.splitlines()}
|
||||||
if module_name in modules_dict:
|
if module_name in modules_dict:
|
||||||
resp = requests.get(
|
resp = requests.get(
|
||||||
f'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/{modules_dict[module_name]}.py'
|
f'https://raw.githubusercontent.com/The-MoonTg-project/custom_modules/main/{modules_dict[module_name]}.py',
|
||||||
, timeout=10)
|
timeout=10,
|
||||||
|
)
|
||||||
if not resp.ok:
|
if not resp.ok:
|
||||||
modules_installed.remove(module_name)
|
modules_installed.remove(module_name)
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -140,20 +140,20 @@ async def autofwd_main(client: Client, message: Message):
|
|||||||
target_chats = db.get('custom.autofwd', 'chatto')
|
target_chats = db.get('custom.autofwd', 'chatto')
|
||||||
|
|
||||||
if source_chats is not None and chat_id in source_chats and target_chats is not None:
|
if source_chats is not None and chat_id in source_chats and target_chats is not None:
|
||||||
for chat in target_chats:
|
for chat in target_chats:
|
||||||
|
try:
|
||||||
|
await message.copy(chat)
|
||||||
|
except Exception as e:
|
||||||
try:
|
try:
|
||||||
await message.copy(chat)
|
await client.send_message(
|
||||||
except Exception as e:
|
'me',
|
||||||
try:
|
f'Auto Forwarding Failed for Chat with id: <code>{chat_id}</code> to <code>{chat}</code>\n\n{e}',
|
||||||
await client.send_message(
|
)
|
||||||
'me',
|
except MessageTooLong:
|
||||||
f'Auto Forwarding Failed for Chat with id: <code>{chat_id}</code> to <code>{chat}</code>\n\n{e}',
|
await client.send_message(
|
||||||
)
|
'me',
|
||||||
except MessageTooLong:
|
f'Auto Forwarding Failed for Chat with id: <code>{chat_id}</code> to <code>{chat}</code>, Please check logs!',
|
||||||
await client.send_message(
|
)
|
||||||
'me',
|
|
||||||
f'Auto Forwarding Failed for Chat with id: <code>{chat_id}</code> to <code>{chat}</code>, Please check logs!',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
modules_help['autofwd'] = {
|
modules_help['autofwd'] = {
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ async def backup(client: Client, message: Message):
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command(['restore', 'res'], prefix) & filters.me)
|
@Client.on_message(filters.command(['restore', 'res'], prefix) & filters.me)
|
||||||
async def restore(client: Client, message: Message):
|
async def restore(_client: Client, message: Message):
|
||||||
"""
|
"""
|
||||||
Restore the database
|
Restore the database
|
||||||
"""
|
"""
|
||||||
@@ -98,7 +98,7 @@ async def restore(client: Client, message: Message):
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command(['backupmods', 'bms'], prefix) & filters.me)
|
@Client.on_message(filters.command(['backupmods', 'bms'], prefix) & filters.me)
|
||||||
async def backupmods(client: Client, message: Message):
|
async def backupmods(_client: Client, message: Message):
|
||||||
"""
|
"""
|
||||||
Backup the modules
|
Backup the modules
|
||||||
"""
|
"""
|
||||||
@@ -112,8 +112,8 @@ async def backupmods(client: Client, message: Message):
|
|||||||
|
|
||||||
for mod in modules_help:
|
for mod in modules_help:
|
||||||
if os.path.isfile(f'modules/custom_modules/{mod}.py'):
|
if os.path.isfile(f'modules/custom_modules/{mod}.py'):
|
||||||
f = open(f'backups/{mod}.py', 'wb')
|
with open(f'backups/{mod}.py', 'wb') as f, open(f'modules/custom_modules/{mod}.py', 'rb') as src:
|
||||||
f.write(open(f'modules/custom_modules/{mod}.py', 'rb').read())
|
f.write(src.read())
|
||||||
await message.edit(
|
await message.edit(
|
||||||
text='<b>All modules backed up to:</b> <code>backups/</code> folder',
|
text='<b>All modules backed up to:</b> <code>backups/</code> folder',
|
||||||
parse_mode=enums.ParseMode.HTML,
|
parse_mode=enums.ParseMode.HTML,
|
||||||
@@ -123,7 +123,7 @@ async def backupmods(client: Client, message: Message):
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command(['backupmod', 'bm'], prefix) & filters.me)
|
@Client.on_message(filters.command(['backupmod', 'bm'], prefix) & filters.me)
|
||||||
async def backupmod(client: Client, message: Message):
|
async def backupmod(_client: Client, message: Message):
|
||||||
"""
|
"""
|
||||||
Backup the module
|
Backup the module
|
||||||
"""
|
"""
|
||||||
@@ -142,8 +142,8 @@ async def backupmod(client: Client, message: Message):
|
|||||||
await message.edit('<b>Backing up module...</b>', parse_mode=enums.ParseMode.HTML)
|
await message.edit('<b>Backing up module...</b>', parse_mode=enums.ParseMode.HTML)
|
||||||
|
|
||||||
if os.path.isfile(f'modules/custom_modules/{mod}.py'):
|
if os.path.isfile(f'modules/custom_modules/{mod}.py'):
|
||||||
f = open(f'backups/{mod}.py', 'wb')
|
with open(f'backups/{mod}.py', 'wb') as f, open(f'modules/custom_modules/{mod}.py', 'rb') as src:
|
||||||
f.write(open(f'modules/custom_modules/{mod}.py', 'rb').read())
|
f.write(src.read())
|
||||||
else:
|
else:
|
||||||
return await message.edit(
|
return await message.edit(
|
||||||
f'<b>Module <code>{mod}</code> not found.</b>',
|
f'<b>Module <code>{mod}</code> not found.</b>',
|
||||||
@@ -159,7 +159,7 @@ async def backupmod(client: Client, message: Message):
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command(['restoremod', 'resmod'], prefix) & filters.me)
|
@Client.on_message(filters.command(['restoremod', 'resmod'], prefix) & filters.me)
|
||||||
async def restoremod(client: Client, message: Message):
|
async def restoremod(_client: Client, message: Message):
|
||||||
"""
|
"""
|
||||||
Restore the module
|
Restore the module
|
||||||
"""
|
"""
|
||||||
@@ -178,11 +178,11 @@ async def restoremod(client: Client, message: Message):
|
|||||||
await message.edit('<b>Restoring module...</b>', parse_mode=enums.ParseMode.HTML)
|
await message.edit('<b>Restoring module...</b>', parse_mode=enums.ParseMode.HTML)
|
||||||
|
|
||||||
if os.path.isfile(f'backups/{mod}.py'):
|
if os.path.isfile(f'backups/{mod}.py'):
|
||||||
f = open(f'modules/custom_modules/{mod}.py', 'wb')
|
with open(f'modules/custom_modules/{mod}.py', 'wb') as f, open(f'backups/{mod}.py', 'rb') as src:
|
||||||
f.write(open(f'backups/{mod}.py', 'rb').read())
|
f.write(src.read())
|
||||||
else:
|
else:
|
||||||
return await message.edit(
|
return await message.edit(
|
||||||
f'<b>Module <code>{mod}</code> not found.</b>',
|
text='<b>Backup file <code>{mod}</code> not found</b>',
|
||||||
parse_mode=enums.ParseMode.HTML,
|
parse_mode=enums.ParseMode.HTML,
|
||||||
)
|
)
|
||||||
await message.edit(
|
await message.edit(
|
||||||
@@ -195,7 +195,7 @@ async def restoremod(client: Client, message: Message):
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command(['restoremods', 'resmods'], prefix) & filters.me)
|
@Client.on_message(filters.command(['restoremods', 'resmods'], prefix) & filters.me)
|
||||||
async def restoremods(client: Client, message: Message):
|
async def restoremods(_client: Client, message: Message):
|
||||||
"""
|
"""
|
||||||
Restore the modules
|
Restore the modules
|
||||||
"""
|
"""
|
||||||
@@ -209,8 +209,8 @@ async def restoremods(client: Client, message: Message):
|
|||||||
if mod.endswith('.py'):
|
if mod.endswith('.py'):
|
||||||
if os.path.isfile(f'modules/{mod}'):
|
if os.path.isfile(f'modules/{mod}'):
|
||||||
continue
|
continue
|
||||||
f = open(f'modules/custom_modules/{mod}', 'wb')
|
with open(f'modules/custom_modules/{mod}', 'wb') as f, open(f'backups/{mod}', 'rb') as src:
|
||||||
f.write(open(f'backups/{mod}', 'rb').read())
|
f.write(src.read())
|
||||||
await message.edit(
|
await message.edit(
|
||||||
text='<b>All modules restored from:</b> <code>backups/</code> folder',
|
text='<b>All modules restored from:</b> <code>backups/</code> folder',
|
||||||
parse_mode=enums.ParseMode.HTML,
|
parse_mode=enums.ParseMode.HTML,
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ def format_time_12hr(time_str: str) -> str:
|
|||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command('prayer', prefix) & filters.me)
|
@Client.on_message(filters.command('prayer', prefix) & filters.me)
|
||||||
async def namaz_times(client: Client, message: Message):
|
async def namaz_times(_client: Client, message: Message):
|
||||||
if message.reply_to_message:
|
if message.reply_to_message:
|
||||||
city_name = message.reply_to_message.text
|
city_name = message.reply_to_message.text
|
||||||
country_name = DEFAULT_COUNTRY # Default to Pakistan if no country is provided
|
country_name = DEFAULT_COUNTRY # Default to Pakistan if no country is provided
|
||||||
|
|||||||
@@ -166,17 +166,17 @@ async def app(client: Client, message: Message):
|
|||||||
result = response.json()
|
result = response.json()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
coverImage_url = result['results'][0]['icon']
|
cover_image_url = result['results'][0]['icon']
|
||||||
coverImage = requests.get(url=coverImage_url, timeout=10).content
|
cover_image = requests.get(url=cover_image_url, timeout=10).content
|
||||||
async with aiofiles.open('coverImage.jpg', mode='wb') as f:
|
async with aiofiles.open('cover_image.jpg', mode='wb') as f:
|
||||||
await f.write(coverImage)
|
await f.write(cover_image)
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
coverImage = None
|
cover_image = None
|
||||||
|
|
||||||
description = result['results'][0]['description']
|
description = result['results'][0]['description']
|
||||||
developer = result['results'][0]['developer']
|
developer = result['results'][0]['developer']
|
||||||
IsFree = result['results'][0]['free']
|
is_free = result['results'][0]['free']
|
||||||
genre = result['results'][0]['genre']
|
genre = result['results'][0]['genre']
|
||||||
package_name = result['results'][0]['id']
|
package_name = result['results'][0]['id']
|
||||||
title = result['results'][0]['title']
|
title = result['results'][0]['title']
|
||||||
@@ -189,8 +189,8 @@ async def app(client: Client, message: Message):
|
|||||||
chat_id,
|
chat_id,
|
||||||
[
|
[
|
||||||
InputMediaPhoto(
|
InputMediaPhoto(
|
||||||
'coverImage.jpg',
|
'cover_image.jpg',
|
||||||
caption=f'<b>Title:</b> <code>{title}</code>\n<b>Rating:</b> <code>{rating}</code>\n<b>IsFree:</b> <code>{IsFree}</code>\n<b>Price:</b> <code>{price}</code>\n<b>Package Name:</b> <code>{package_name}</code>\n<b>Genres:</b> <code>{genre}</code>\n<b>Developer:</b> <code>{developer}\n<b>Description:</b> {description}\n<b>Link:</b> {link}',
|
caption=f'<b>Title:</b> <code>{title}</code>\n<b>Rating:</b> <code>{rating}</code>\n<b>is_free:</b> <code>{is_free}</code>\n<b>Price:</b> <code>{price}</code>\n<b>Package Name:</b> <code>{package_name}</code>\n<b>Genres:</b> <code>{genre}</code>\n<b>Developer:</b> <code>{developer}\n<b>Description:</b> {description}\n<b>Link:</b> {link}',
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@@ -202,16 +202,16 @@ async def app(client: Client, message: Message):
|
|||||||
chat_id,
|
chat_id,
|
||||||
[
|
[
|
||||||
InputMediaPhoto(
|
InputMediaPhoto(
|
||||||
'coverImage.jpg',
|
'cover_image.jpg',
|
||||||
caption=f'<b>Title:</b> <code>{title}</code>\n<b>Rating:</b> <code>{rating}</code>\n<b>IsFree:</b> <code>{IsFree}</code>\n<b>Price:</b> <code>{price}</code>\n<b>Package Name:</b> <code>{package_name}</code>\n<b>Genres:</b> <code>{genre}</code>\n<b>Developer:</b> <code>{developer}\n<b>Description:</b> {description}\n<b>Link:</b> {link}',
|
caption=f'<b>Title:</b> <code>{title}</code>\n<b>Rating:</b> <code>{rating}</code>\n<b>is_free:</b> <code>{is_free}</code>\n<b>Price:</b> <code>{price}</code>\n<b>Package Name:</b> <code>{package_name}</code>\n<b>Genres:</b> <code>{genre}</code>\n<b>Developer:</b> <code>{developer}\n<b>Description:</b> {description}\n<b>Link:</b> {link}',
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
await message.edit_text(format_exc(e))
|
await message.edit_text(format_exc(e))
|
||||||
finally:
|
finally:
|
||||||
if os.path.exists('coverImage.jpg'):
|
if os.path.exists('cover_image.jpg'):
|
||||||
os.remove('coverImage.jpg')
|
os.remove('cover_image.jpg')
|
||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command('tsearch', prefix) & filters.me)
|
@Client.on_message(filters.command('tsearch', prefix) & filters.me)
|
||||||
@@ -232,7 +232,7 @@ async def tsearch(client: Client, message: Message):
|
|||||||
|
|
||||||
result = response.json()
|
result = response.json()
|
||||||
|
|
||||||
coverImage_url = result['results'][0]['thumbnail']
|
cover_image_url = result['results'][0]['thumbnail']
|
||||||
description = result['results'][0]['description']
|
description = result['results'][0]['description']
|
||||||
genre = result['results'][0]['genre']
|
genre = result['results'][0]['genre']
|
||||||
category = result['results'][0]['category']
|
category = result['results'][0]['category']
|
||||||
@@ -264,17 +264,17 @@ async def tsearch(client: Client, message: Message):
|
|||||||
content=all_results_content,
|
content=all_results_content,
|
||||||
)
|
)
|
||||||
|
|
||||||
if coverImage_url is not None:
|
if cover_image_url is not None:
|
||||||
coverImage = requests.get(url=coverImage_url, timeout=10).content
|
cover_image = requests.get(url=cover_image_url, timeout=10).content
|
||||||
async with aiofiles.open('coverImage.jpg', mode='wb') as f:
|
async with aiofiles.open('cover_image.jpg', mode='wb') as f:
|
||||||
await f.write(coverImage)
|
await f.write(cover_image)
|
||||||
|
|
||||||
await message.delete()
|
await message.delete()
|
||||||
await client.send_media_group(
|
await client.send_media_group(
|
||||||
chat_id,
|
chat_id,
|
||||||
[
|
[
|
||||||
InputMediaPhoto(
|
InputMediaPhoto(
|
||||||
'coverImage.jpg',
|
'cover_image.jpg',
|
||||||
caption=f"<b>Title:</b> <code>{title}</code>\n<b>Category:</b> <code>{category}</code>\n<b>Language:</b> <code>{language}</code>\n<b>Size:</b> <code>{size}</code>\n<b>Genres:</b> <code>{genre}</code>\n<b>Description:</b> {description}\n<b>Magnet Link:</b> <a href='{link_result}'>Click Here</a>\n<b>More Results:</b> <a href='{link_results}'>Click Here</a>",
|
caption=f"<b>Title:</b> <code>{title}</code>\n<b>Category:</b> <code>{category}</code>\n<b>Language:</b> <code>{language}</code>\n<b>Size:</b> <code>{size}</code>\n<b>Genres:</b> <code>{genre}</code>\n<b>Description:</b> {description}\n<b>Magnet Link:</b> <a href='{link_result}'>Click Here</a>\n<b>More Results:</b> <a href='{link_results}'>Click Here</a>",
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
@@ -292,7 +292,7 @@ async def tsearch(client: Client, message: Message):
|
|||||||
chat_id,
|
chat_id,
|
||||||
[
|
[
|
||||||
InputMediaPhoto(
|
InputMediaPhoto(
|
||||||
'coverImage.jpg',
|
'cover_image.jpg',
|
||||||
caption=f"<b>Title:</b> <code>{title}</code>\n<b>Category:</b> <code>{category}</code>\n<b>Language:</b> <code>{language}</code>\n<b>Size:</b> <code>{size}</code>\n<b>Genres:</b> <code>{genre}</code>\n<b>Description:</b> {description}\n<b>Magnet Link:</b> <a href='{link_result}'>Click Here</a>",
|
caption=f"<b>Title:</b> <code>{title}</code>\n<b>Category:</b> <code>{category}</code>\n<b>Language:</b> <code>{language}</code>\n<b>Size:</b> <code>{size}</code>\n<b>Genres:</b> <code>{genre}</code>\n<b>Description:</b> {description}\n<b>Magnet Link:</b> <a href='{link_result}'>Click Here</a>",
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
@@ -308,8 +308,8 @@ async def tsearch(client: Client, message: Message):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
await message.edit_text(format_exc(e))
|
await message.edit_text(format_exc(e))
|
||||||
finally:
|
finally:
|
||||||
if os.path.exists('coverImage.jpg'):
|
if os.path.exists('cover_image.jpg'):
|
||||||
os.remove('coverImage.jpg')
|
os.remove('cover_image.jpg')
|
||||||
|
|
||||||
|
|
||||||
@Client.on_message(filters.command('stts', prefix) & filters.me)
|
@Client.on_message(filters.command('stts', prefix) & filters.me)
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ async def user_exec(_: Client, message: Message):
|
|||||||
|
|
||||||
# noinspection PyUnusedLocal
|
# noinspection PyUnusedLocal
|
||||||
@Client.on_message(filters.command(['ev', 'eval'], prefix) & filters.me)
|
@Client.on_message(filters.command(['ev', 'eval'], prefix) & filters.me)
|
||||||
async def user_eval(client: Client, message: Message):
|
async def user_eval(_client: Client, message: Message):
|
||||||
if len(message.command) == 1:
|
if len(message.command) == 1:
|
||||||
await message.edit("<b>Code to eval isn't provided</b>")
|
await message.edit("<b>Code to eval isn't provided</b>")
|
||||||
return
|
return
|
||||||
|
|||||||
+14
-13
@@ -119,22 +119,23 @@ async def rmbg(client: Client, message: Message):
|
|||||||
start = datetime.now()
|
start = datetime.now()
|
||||||
await pablo.edit('sending to ReMove.BG')
|
await pablo.edit('sending to ReMove.BG')
|
||||||
input_file_name = cool
|
input_file_name = cool
|
||||||
files = {
|
with open(input_file_name, 'rb') as f:
|
||||||
'image_file': (input_file_name, open(input_file_name, 'rb')),
|
files = {
|
||||||
}
|
'image_file': (input_file_name, f),
|
||||||
r = requests.post(
|
}
|
||||||
'https://api.remove.bg/v1.0/removebg',
|
r = requests.post(
|
||||||
headers={'X-Api-Key': rmbg_key},
|
'https://api.remove.bg/v1.0/removebg',
|
||||||
files=files,
|
headers={'X-Api-Key': rmbg_key},
|
||||||
allow_redirects=True,
|
files=files,
|
||||||
stream=True,
|
allow_redirects=True,
|
||||||
timeout=10,
|
stream=True,
|
||||||
)
|
timeout=10,
|
||||||
|
)
|
||||||
if os.path.exists(cool):
|
if os.path.exists(cool):
|
||||||
os.remove(cool)
|
os.remove(cool)
|
||||||
output_file_name = r
|
output_file_name = r
|
||||||
contentType = output_file_name.headers.get('content-type')
|
content_type = output_file_name.headers.get('content-type')
|
||||||
if 'image' in contentType:
|
if 'image' in content_type:
|
||||||
with io.BytesIO(output_file_name.content) as remove_bg_image:
|
with io.BytesIO(output_file_name.content) as remove_bg_image:
|
||||||
remove_bg_image.name = 'BG_rem.png'
|
remove_bg_image.name = 'BG_rem.png'
|
||||||
await client.send_document(message.chat.id, remove_bg_image, reply_to_message_id=message.id)
|
await client.send_document(message.chat.id, remove_bg_image, reply_to_message_id=message.id)
|
||||||
|
|||||||
@@ -67,8 +67,9 @@ async def ipinfo(_, message: Message):
|
|||||||
await m.edit_text('🔎')
|
await m.edit_text('🔎')
|
||||||
try:
|
try:
|
||||||
url = requests.get(
|
url = requests.get(
|
||||||
f'http://ip-api.com/json/{searchip}?fields=status,message,continent,continentCode,country,countryCode,region,regionName,city,district,zip,lat,lon,timezone,offset,currency,isp,org,as,asname,reverse,mobile,proxy,hosting,query'
|
f'http://ip-api.com/json/{searchip}?fields=status,message,continent,continentCode,country,countryCode,region,regionName,city,district,zip,lat,lon,timezone,offset,currency,isp,org,as,asname,reverse,mobile,proxy,hosting,query',
|
||||||
, timeout=10)
|
timeout=10,
|
||||||
|
)
|
||||||
response = json.loads(url.text)
|
response = json.loads(url.text)
|
||||||
text = f"""
|
text = f"""
|
||||||
<b>IP Address:</b> <code>{response['query']}</code>
|
<b>IP Address:</b> <code>{response['query']}</code>
|
||||||
|
|||||||
@@ -102,7 +102,8 @@ async def spin_handler(client: Client, message: Message):
|
|||||||
elif message.reply_to_message.text:
|
elif message.reply_to_message.text:
|
||||||
result = await quote_cmd(client, message)
|
result = await quote_cmd(client, message)
|
||||||
filename = 'sticker.png' if result[1] else 'sticker.webp'
|
filename = 'sticker.png' if result[1] else 'sticker.webp'
|
||||||
open('downloads/' + filename, 'wb').write(result[0].getbuffer())
|
with open('downloads/' + filename, 'wb') as f:
|
||||||
|
f.write(result[0].getbuffer())
|
||||||
coro = False
|
coro = False
|
||||||
else:
|
else:
|
||||||
filename = 'photo.jpg'
|
filename = 'photo.jpg'
|
||||||
|
|||||||
@@ -24,14 +24,14 @@ from utils.misc import modules_help, prefix
|
|||||||
|
|
||||||
@Client.on_message(filters.command('setthumb', prefix) & filters.me)
|
@Client.on_message(filters.command('setthumb', prefix) & filters.me)
|
||||||
async def setthumb(_, message: Message):
|
async def setthumb(_, message: Message):
|
||||||
THUMB_PATH = 'downloads/thumb'
|
thumb_path = 'downloads/thumb'
|
||||||
if message.reply_to_message:
|
if message.reply_to_message:
|
||||||
if not os.path.exists(THUMB_PATH):
|
if not os.path.exists(thumb_path):
|
||||||
os.makedirs(THUMB_PATH)
|
os.makedirs(thumb_path)
|
||||||
new_thumb = await message.reply_to_message.download()
|
new_thumb = await message.reply_to_message.download()
|
||||||
with Image.open(new_thumb) as img:
|
with Image.open(new_thumb) as img:
|
||||||
if img.format in ['PNG', 'JPG', 'JPEG']:
|
if img.format in ['PNG', 'JPG', 'JPEG']:
|
||||||
new_path = os.path.join(THUMB_PATH, 'thumb.jpg')
|
new_path = os.path.join(thumb_path, 'thumb.jpg')
|
||||||
os.rename(new_thumb, new_path)
|
os.rename(new_thumb, new_path)
|
||||||
await message.edit_text('Thumbnail set successfully!')
|
await message.edit_text('Thumbnail set successfully!')
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -48,8 +48,9 @@ async def scan_my_file(_, message: Message):
|
|||||||
|
|
||||||
url = 'https://www.virustotal.com/vtapi/v2/file/scan'
|
url = 'https://www.virustotal.com/vtapi/v2/file/scan'
|
||||||
params = {'apikey': vak}
|
params = {'apikey': vak}
|
||||||
files = {'file': (downloaded_file_name, open(downloaded_file_name, 'rb'))}
|
with open(downloaded_file_name, 'rb') as f:
|
||||||
response = requests.post(url, files=files, params=params, timeout=10)
|
files = {'file': (downloaded_file_name, f)}
|
||||||
|
response = requests.post(url, files=files, params=params, timeout=10)
|
||||||
try:
|
try:
|
||||||
r_json = response.json()
|
r_json = response.json()
|
||||||
md5 = r_json['md5']
|
md5 = r_json['md5']
|
||||||
@@ -104,9 +105,10 @@ async def scan_my_large_file(_, message: Message):
|
|||||||
|
|
||||||
url = upl_data
|
url = upl_data
|
||||||
|
|
||||||
files = {'file': (downloaded_file_name, open(downloaded_file_name, 'rb'))}
|
with open(downloaded_file_name, 'rb') as f:
|
||||||
headers = {'accept': 'application/json', 'x-apikey': vak}
|
files = {'file': (downloaded_file_name, f)}
|
||||||
response = requests.post(url, files=files, headers=headers, timeout=10)
|
headers = {'accept': 'application/json', 'x-apikey': vak}
|
||||||
|
response = requests.post(url, files=files, headers=headers, timeout=10)
|
||||||
|
|
||||||
r_json = response.json()
|
r_json = response.json()
|
||||||
analysis_url = r_json['data']['links']['self']
|
analysis_url = r_json['data']['links']['self']
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ from pyrogram.handlers import MessageHandler
|
|||||||
|
|
||||||
|
|
||||||
class _TrueFilter(filters.Filter):
|
class _TrueFilter(filters.Filter):
|
||||||
async def __call__(self, client: Client, update: types.Message):
|
async def __call__(self, _client: Client, _update: types.Message):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -149,7 +149,7 @@ class SqliteDatabase(Database):
|
|||||||
self._lock.release()
|
self._lock.release()
|
||||||
|
|
||||||
def get(self, module: str, variable: str, default=None):
|
def get(self, module: str, variable: str, default=None):
|
||||||
sql = f"SELECT * FROM '{module}' WHERE var=?"
|
sql = f"SELECT * FROM '{module}' WHERE var=?" # noqa: S608
|
||||||
cur = self._execute(module, sql, (variable,))
|
cur = self._execute(module, sql, (variable,))
|
||||||
|
|
||||||
row = cur.fetchone()
|
row = cur.fetchone()
|
||||||
@@ -162,7 +162,7 @@ class SqliteDatabase(Database):
|
|||||||
INSERT INTO '{module}' VALUES ( ?, ?, ? )
|
INSERT INTO '{module}' VALUES ( ?, ?, ? )
|
||||||
ON CONFLICT (var) DO
|
ON CONFLICT (var) DO
|
||||||
UPDATE SET val=?, type=? WHERE var=?
|
UPDATE SET val=?, type=? WHERE var=?
|
||||||
"""
|
""" # noqa: S608
|
||||||
|
|
||||||
if isinstance(value, bool):
|
if isinstance(value, bool):
|
||||||
val = '1' if value else '0'
|
val = '1' if value else '0'
|
||||||
@@ -183,7 +183,7 @@ class SqliteDatabase(Database):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def remove(self, module: str, variable: str):
|
def remove(self, module: str, variable: str):
|
||||||
sql = f"DELETE FROM '{module}' WHERE var=?"
|
sql = f"DELETE FROM '{module}' WHERE var=?" # noqa: S608
|
||||||
self._execute(module, sql, (variable,))
|
self._execute(module, sql, (variable,))
|
||||||
self._conn.commit()
|
self._conn.commit()
|
||||||
|
|
||||||
@@ -192,7 +192,7 @@ class SqliteDatabase(Database):
|
|||||||
if not re.match(pattern, module):
|
if not re.match(pattern, module):
|
||||||
raise ValueError(f'Invalid module name format: {module}')
|
raise ValueError(f'Invalid module name format: {module}')
|
||||||
|
|
||||||
sql = f"SELECT * FROM '{module}'"
|
sql = f"SELECT * FROM '{module}'" # noqa: S608
|
||||||
cur = self._execute(module, sql)
|
cur = self._execute(module, sql)
|
||||||
|
|
||||||
collection = {}
|
collection = {}
|
||||||
|
|||||||
@@ -138,14 +138,14 @@ async def paste(
|
|||||||
|
|
||||||
print(f'URL: {url} - Edit Code: {edit_code} - Time: {ftime}')
|
print(f'URL: {url} - Edit Code: {edit_code} - Time: {ftime}')
|
||||||
|
|
||||||
rallUrls = db.get('core.rentry', 'urls', default={'allUrls': {}})
|
rall_urls = db.get('core.rentry', 'urls', default={'allUrls': {}})
|
||||||
entry_id = str(uuid4())
|
entry_id = str(uuid4())
|
||||||
rallUrls['allUrls'][entry_id] = {
|
rall_urls['allUrls'][entry_id] = {
|
||||||
'url': short_url,
|
'url': short_url,
|
||||||
'edit_code': edit_code,
|
'edit_code': edit_code,
|
||||||
'time': ftime,
|
'time': ftime,
|
||||||
}
|
}
|
||||||
db.set('core.rentry', 'urls', rallUrls)
|
db.set('core.rentry', 'urls', rall_urls)
|
||||||
|
|
||||||
if return_edit:
|
if return_edit:
|
||||||
return (url, edit_code)
|
return (url, edit_code)
|
||||||
@@ -156,19 +156,19 @@ async def rentry_cleanup_job():
|
|||||||
"""Periodically checks and deletes rentry pastes older than 24 hours"""
|
"""Periodically checks and deletes rentry pastes older than 24 hours"""
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
rallUrls = db.get('core.rentry', 'urls', default={'allUrls': {}})
|
rall_urls = db.get('core.rentry', 'urls', default={'allUrls': {}})
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
deleted_count = 0
|
deleted_count = 0
|
||||||
error_count = 0
|
error_count = 0
|
||||||
|
|
||||||
for entry_id, entry in list(rallUrls['allUrls'].items()):
|
for entry_id, entry in list(rall_urls['allUrls'].items()):
|
||||||
url = entry['url']
|
url = entry['url']
|
||||||
entry_time = datetime.strptime(entry['time'], '%d %I:%M:%S %p %Y')
|
entry_time = datetime.strptime(entry['time'], '%d %I:%M:%S %p %Y')
|
||||||
|
|
||||||
if now - entry_time > timedelta(days=1):
|
if now - entry_time > timedelta(days=1):
|
||||||
try:
|
try:
|
||||||
delete(url, entry['edit_code'])
|
delete(url, entry['edit_code'])
|
||||||
del rallUrls['allUrls'][entry_id]
|
del rall_urls['allUrls'][entry_id]
|
||||||
deleted_count += 1
|
deleted_count += 1
|
||||||
print(f'[#] Deleted expired rentry paste: {url}')
|
print(f'[#] Deleted expired rentry paste: {url}')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -179,7 +179,7 @@ async def rentry_cleanup_job():
|
|||||||
print(f'[*] Cleanup summary: {deleted_count} deleted, {error_count} failed')
|
print(f'[*] Cleanup summary: {deleted_count} deleted, {error_count} failed')
|
||||||
|
|
||||||
if deleted_count:
|
if deleted_count:
|
||||||
db.set('core.rentry', 'urls', rallUrls)
|
db.set('core.rentry', 'urls', rall_urls)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f'[!] Error in rentry cleanup job: {str(e)}')
|
print(f'[!] Error in rentry cleanup job: {str(e)}')
|
||||||
|
|||||||
Reference in New Issue
Block a user