diff --git a/misskaty/__init__.py b/misskaty/__init__.py index 027aebbf..e7c54e56 100644 --- a/misskaty/__init__.py +++ b/misskaty/__init__.py @@ -1,4 +1,4 @@ -from logging import basicConfig, FileHandler, StreamHandler, getLogger +from logging import basicConfig, FileHandler, StreamHandler import time from pyrogram import Client from misskaty.vars import API_ID, API_HASH, BOT_TOKEN, USER_SESSION @@ -12,7 +12,6 @@ basicConfig( MOD_LOAD = [] MOD_NOLOAD = [] HELPABLE = {} -LOGGER = getLogger(__name__) botStartTime = time.time() # Pyrogram Bot Client diff --git a/misskaty/__main__.py b/misskaty/__main__.py index 6717995c..295d6284 100644 --- a/misskaty/__main__.py +++ b/misskaty/__main__.py @@ -6,7 +6,8 @@ * Copyright @YasirPedia All rights reserved """ import asyncio, importlib, re -from misskaty import app, user, HELPABLE, LOGGER +from logging import getLogger +from misskaty import app, user, HELPABLE from misskaty.plugins import ALL_MODULES from misskaty.helper import paginate_modules from misskaty.helper.tools import bot_sys_stats @@ -17,6 +18,7 @@ from pyrogram.raw.all import layer from pyrogram import idle, __version__, filters from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup +LOGGER = getLogger(__name__) loop = asyncio.get_event_loop() # Run Bot diff --git a/misskaty/plugins/admin.py b/misskaty/plugins/admin.py index 4bda289e..3e3690d5 100644 --- a/misskaty/plugins/admin.py +++ b/misskaty/plugins/admin.py @@ -1,4 +1,5 @@ import asyncio, re +from logging import getLogger from misskaty import app from misskaty.helper.functions import ( extract_user_and_reason, @@ -21,6 +22,8 @@ from misskaty.core.keyboard import ikb from misskaty.vars import SUDO, COMMAND_HANDLER from database.warn_db import get_warn, remove_warns, add_warn +LOGGER = getLogger(__name__) + __MODULE__ = "Admin" __HELP__ = """ /ban - Ban A User From A Group diff --git a/misskaty/plugins/auto_forwarder.py b/misskaty/plugins/auto_forwarder.py index 86197975..eec5bf7f 100644 --- a/misskaty/plugins/auto_forwarder.py +++ b/misskaty/plugins/auto_forwarder.py @@ -1,5 +1,6 @@ # Code copy from https://github.com/AbirHasan2005/Forward-Client -from misskaty import user, LOGGER +from misskaty import user +from logging import getLogger from pyrogram import filters from asyncio import sleep from pyrogram.types import Message @@ -13,6 +14,8 @@ from misskaty.vars import ( MINIMUM_FILE_SIZE, ) +LOGGER = getLogger(__name__) + async def FilterMessage(message: Message): if (message.forward_from or message.forward_from_chat) and ( diff --git a/misskaty/plugins/download_upload.py b/misskaty/plugins/download_upload.py index 34edc8aa..f5e22335 100644 --- a/misskaty/plugins/download_upload.py +++ b/misskaty/plugins/download_upload.py @@ -5,8 +5,9 @@ import os import aiohttp import json from misskaty.helper.http import http +from logging import getLogger from bs4 import BeautifulSoup -from misskaty import app, LOGGER +from misskaty import app from pySmartDL import SmartDL from datetime import datetime from misskaty.core.decorator.errors import capture_err @@ -18,6 +19,8 @@ from misskaty.helper.pyro_progress import ( humanbytes, ) +LOGGER = getLogger(__name__) + __MODULE__ = "Download/Upload" __HELP__ = """ /download [url] - Download file from URL (Sudo Only) diff --git a/misskaty/plugins/genss.py b/misskaty/plugins/genss.py index bd37a814..f8a035c6 100644 --- a/misskaty/plugins/genss.py +++ b/misskaty/plugins/genss.py @@ -8,13 +8,16 @@ import os, time, traceback from asyncio import sleep, gather from shutil import rmtree +from logging import getLogger from pyrogram import filters, enums from pyrogram.errors import FloodWait -from misskaty import app, LOGGER +from misskaty import app from misskaty.helper.ffmpeg_helper import take_ss, genss_link from misskaty.vars import COMMAND_HANDLER from misskaty.helper.pyro_progress import progress_for_pyrogram +LOGGER = getLogger(__name__) + __MODULE__ = "MediaTool" __HELP__ = """" /genss [reply to video] - Generate Screenshot From Video. diff --git a/misskaty/plugins/grup_tools.py b/misskaty/plugins/grup_tools.py index ff8337ec..f3c8f0fb 100644 --- a/misskaty/plugins/grup_tools.py +++ b/misskaty/plugins/grup_tools.py @@ -1,11 +1,17 @@ from datetime import datetime, timedelta import time import os +from logging import getLogger from misskaty.helper.http import http from pyrogram import enums, filters from pyrogram.types import ChatMemberUpdated, InlineKeyboardButton, InlineKeyboardMarkup -from pyrogram.errors import ChatSendMediaForbidden, MessageTooLong, RPCError, SlowmodeWait -from misskaty import app, LOGGER +from pyrogram.errors import ( + ChatSendMediaForbidden, + MessageTooLong, + RPCError, + SlowmodeWait, +) +from misskaty import app from misskaty.core.decorator.errors import capture_err, asyncify from PIL import Image, ImageChops, ImageDraw, ImageFont import textwrap @@ -14,6 +20,8 @@ from utils import temp from pyrogram.errors import ChatAdminRequired from misskaty.vars import SUDO, LOG_CHANNEL, SUPPORT_CHAT, COMMAND_HANDLER +LOGGER = getLogger(__name__) + def circle(pfp, size=(215, 215)): pfp = pfp.resize(size, Image.ANTIALIAS).convert("RGBA") @@ -37,7 +45,9 @@ def draw_multiple_line_text(image, text, font, text_start_height): lines = textwrap.wrap(text, width=50) for line in lines: line_width, line_height = font.getsize(line) - draw.text(((image_width - line_width) / 2, y_text), line, font=font, fill="black") + draw.text( + ((image_width - line_width) / 2, y_text), line, font=font, fill="black" + ) y_text += line_height @@ -47,20 +57,38 @@ def welcomepic(pic, user, chat, count, id): background = background.resize((1024, 500), Image.ANTIALIAS) pfp = Image.open(pic).convert("RGBA") pfp = circle(pfp) - pfp = pfp.resize((265, 265)) # Resizes the Profilepicture so it fits perfectly in the circle - font = ImageFont.truetype("Calistoga-Regular.ttf", 37) # <- Text Font of the Member Count. Change the text size for your preference + pfp = pfp.resize( + (265, 265) + ) # Resizes the Profilepicture so it fits perfectly in the circle + font = ImageFont.truetype( + "Calistoga-Regular.ttf", 37 + ) # <- Text Font of the Member Count. Change the text size for your preference member_text = f"User#{count}, Selamat Datang {user}" # <- Text under the Profilepicture with the Membercount draw_multiple_line_text(background, member_text, font, 395) draw_multiple_line_text(background, chat, font, 47) - ImageDraw.Draw(background).text((530, 460), "Generated by @MissKatyRoBot", font=ImageFont.truetype("Calistoga-Regular.ttf", 28), size=20, align="right") - background.paste(pfp, (379, 123), pfp) # Pastes the Profilepicture on the Background Image - background.save(f"downloads/welcome#{id}.png") # Saves the finished Image in the folder with the filename + ImageDraw.Draw(background).text( + (530, 460), + "Generated by @MissKatyRoBot", + font=ImageFont.truetype("Calistoga-Regular.ttf", 28), + size=20, + align="right", + ) + background.paste( + pfp, (379, 123), pfp + ) # Pastes the Profilepicture on the Background Image + background.save( + f"downloads/welcome#{id}.png" + ) # Saves the finished Image in the folder with the filename return f"downloads/welcome#{id}.png" @app.on_chat_member_updated(filters.group & filters.chat(-1001128045651)) async def member_has_joined(c: app, member: ChatMemberUpdated): - if not member.new_chat_member or member.new_chat_member.status in {"banned", "left", "restricted"} or member.old_chat_member: + if ( + not member.new_chat_member + or member.new_chat_member.status in {"banned", "left", "restricted"} + or member.old_chat_member + ): return user = member.new_chat_member.user if member.new_chat_member else member.from_user if user.id in SUDO: @@ -79,15 +107,21 @@ async def member_has_joined(c: app, member: ChatMemberUpdated): pass mention = f"{user.first_name}" joined_date = datetime.fromtimestamp(time.time()).strftime("%Y.%m.%d %H:%M:%S") - first_name = f"{user.first_name} {user.last_name}" if user.last_name else user.first_name + first_name = ( + f"{user.first_name} {user.last_name}" if user.last_name else user.first_name + ) id = user.id dc = user.dc_id or "Member tanpa PP" count = await app.get_chat_members_count(member.chat.id) try: - pic = await app.download_media(user.photo.big_file_id, file_name=f"pp{user.id}.png") + pic = await app.download_media( + user.photo.big_file_id, file_name=f"pp{user.id}.png" + ) except AttributeError: pic = "img/profilepic.png" - welcomeimg = await welcomepic(pic, user.first_name, member.chat.title, count, user.id) + welcomeimg = await welcomepic( + pic, user.first_name, member.chat.title, count, user.id + ) temp.MELCOW[f"welcome-{member.chat.id}"] = await c.send_photo( member.chat.id, photo=welcomeimg, @@ -96,18 +130,30 @@ async def member_has_joined(c: app, member: ChatMemberUpdated): userspammer = "" # Spamwatch Detection try: - headers = {"Authorization": "Bearer XvfzE4AUNXkzCy0DnIVpFDlxZi79lt6EnwKgBj8Quuzms0OSdHvf1k6zSeyzZ_lz"} - apispamwatch = (await http.get(f"https://api.spamwat.ch/banlist/{user.id}", headers=headers)).json() + headers = { + "Authorization": "Bearer XvfzE4AUNXkzCy0DnIVpFDlxZi79lt6EnwKgBj8Quuzms0OSdHvf1k6zSeyzZ_lz" + } + apispamwatch = ( + await http.get( + f"https://api.spamwat.ch/banlist/{user.id}", headers=headers + ) + ).json() if not apispamwatch.get("error"): - await app.ban_chat_member(member.chat.id, user.id, datetime.now() + timedelta(seconds=30)) + await app.ban_chat_member( + member.chat.id, user.id, datetime.now() + timedelta(seconds=30) + ) userspammer += f"#SpamWatch Federation Ban\nUser {mention} [{user.id}] has been kicked because {apispamwatch.get('reason')}.\n" except Exception as err: LOGGER.error(f"ERROR in Spamwatch Detection. {err}") # Combot API Detection try: - apicombot = (await http.get(f"https://api.cas.chat/check?user_id={user.id}")).json() + apicombot = ( + await http.get(f"https://api.cas.chat/check?user_id={user.id}") + ).json() if apicombot.get("ok") == "true": - await app.ban_chat_member(member.chat.id, user.id, datetime.now() + timedelta(seconds=30)) + await app.ban_chat_member( + member.chat.id, user.id, datetime.now() + timedelta(seconds=30) + ) userspammer += f"#CAS Federation Ban\nUser {mention} [{user.id}] detected as spambot and has been kicked. Powered by Combot AntiSpam." except Exception as err: LOGGER.error(f"ERROR in Combot API Detection. {err}") @@ -135,7 +181,9 @@ async def save_group(bot, message): await db.add_chat(message.chat.id, message.chat.title) if message.chat.id in temp.BANNED_CHATS: # Inspired from a boat of a banana tree - buttons = [[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]] + buttons = [ + [InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")] + ] reply_markup = InlineKeyboardMarkup(buttons) k = await message.reply( text="CHAT NOT ALLOWED 🐞\n\nMy admins has restricted me from working here ! If you want to know more about it contact support..", @@ -148,17 +196,31 @@ async def save_group(bot, message): pass await bot.leave_chat(message.chat.id) return - buttons = [[InlineKeyboardButton("ℹ️ Help", url=f"https://t.me/{temp.U_NAME}?start=help"), InlineKeyboardButton("📢 Updates", url="https://t.me/YasirPediaChannel")]] + buttons = [ + [ + InlineKeyboardButton( + "ℹ️ Help", url=f"https://t.me/{temp.U_NAME}?start=help" + ), + InlineKeyboardButton("📢 Updates", url="https://t.me/YasirPediaChannel"), + ] + ] reply_markup = InlineKeyboardMarkup(buttons) - await message.reply_text(text=f"Terimakasih sudah menambahkan saya di {message.chat.title} ❣️\n\nJika ada kendala atau saran bisa kontak ke saya.", reply_markup=reply_markup) + await message.reply_text( + text=f"Terimakasih sudah menambahkan saya di {message.chat.title} ❣️\n\nJika ada kendala atau saran bisa kontak ke saya.", + reply_markup=reply_markup, + ) else: for u in message.new_chat_members: count = await app.get_chat_members_count(message.chat.id) try: - pic = await app.download_media(u.photo.big_file_id, file_name=f"pp{u.id}.png") + pic = await app.download_media( + u.photo.big_file_id, file_name=f"pp{u.id}.png" + ) except AttributeError: pic = "img/profilepic.png" - welcomeimg = await welcomepic(pic, u.first_name, message.chat.title, count, u.id) + welcomeimg = await welcomepic( + pic, u.first_name, message.chat.title, count, u.id + ) if (temp.MELCOW).get(f"welcome-{message.chat.id}") is not None: try: await (temp.MELCOW[f"welcome-{message.chat.id}"]).delete() @@ -189,7 +251,9 @@ async def leave_a_chat(bot, message): except: chat = chat try: - buttons = [[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]] + buttons = [ + [InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")] + ] reply_markup = InlineKeyboardMarkup(buttons) await bot.send_message( chat_id=chat, @@ -221,14 +285,22 @@ async def disable_chat(bot, message): if not cha_t: return await message.reply("Chat Not Found In DB") if cha_t["is_disabled"]: - return await message.reply(f"This chat is already disabled:\nReason- {cha_t['reason']} ") + return await message.reply( + f"This chat is already disabled:\nReason- {cha_t['reason']} " + ) await db.disable_chat(chat_, reason) temp.BANNED_CHATS.append(chat_) await message.reply("Chat Succesfully Disabled") try: - buttons = [[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]] + buttons = [ + [InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")] + ] reply_markup = InlineKeyboardMarkup(buttons) - await bot.send_message(chat_id=chat_, text=f"Hello Friends, \nMy admin has told me to leave from group so i go! If you wanna add me again contact my support group. \nReason : {reason}", reply_markup=reply_markup) + await bot.send_message( + chat_id=chat_, + text=f"Hello Friends, \nMy admin has told me to leave from group so i go! If you wanna add me again contact my support group. \nReason : {reason}", + reply_markup=reply_markup, + ) await bot.leave_chat(chat_) except Exception as e: await message.reply(f"Error - {e}") @@ -267,24 +339,32 @@ async def gen_invite(bot, message): try: link = await bot.create_chat_invite_link(chat) except ChatAdminRequired: - return await message.reply("Invite Link Generation Failed, Iam Not Having Sufficient Rights") + return await message.reply( + "Invite Link Generation Failed, Iam Not Having Sufficient Rights" + ) except Exception as e: return await message.reply(f"Error {e}") await message.reply(f"Here is your Invite Link {link.invite_link}") -@app.on_message(filters.command(["adminlist", "adminlist@MissKatyRoBot"], COMMAND_HANDLER)) +@app.on_message( + filters.command(["adminlist", "adminlist@MissKatyRoBot"], COMMAND_HANDLER) +) @capture_err async def adminlist(_, message): if message.chat.type == enums.ChatType.PRIVATE: return await message.reply("Perintah ini hanya untuk grup") try: administrators = [] - async for m in app.get_chat_members(message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS): + async for m in app.get_chat_members( + message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS + ): administrators.append(f"{m.user.first_name}") res = "".join(f"~ {i}\n" for i in administrators) - return await message.reply(f"Daftar Admin di {message.chat.title} ({message.chat.id}):\n~ {res}") + return await message.reply( + f"Daftar Admin di {message.chat.title} ({message.chat.id}):\n~ {res}" + ) except Exception as e: await message.reply(f"ERROR: {str(e)}") @@ -302,7 +382,9 @@ async def kickme(_, message): await message.reply_text(txt) await message.unban_member(message.from_user.id) except RPCError as ef: - await message.reply_text(f"Sepertinya ada error, silahkan report ke owner saya. \nERROR: {str(ef)}") + await message.reply_text( + f"Sepertinya ada error, silahkan report ke owner saya. \nERROR: {str(ef)}" + ) return diff --git a/misskaty/plugins/misc_tools.py b/misskaty/plugins/misc_tools.py index 342ac68c..1eb11002 100644 --- a/misskaty/plugins/misc_tools.py +++ b/misskaty/plugins/misc_tools.py @@ -18,12 +18,15 @@ from misskaty.vars import COMMAND_HANDLER from utils import extract_user, get_file_id, demoji import time from datetime import datetime +from logging import getLogger from pykeyboard import InlineKeyboard from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery from misskaty.core.decorator.errors import capture_err from misskaty.helper.tools import rentry, GENRES_EMOJI from misskaty.helper.http import http -from misskaty import app, LOGGER +from misskaty import app + +LOGGER = getLogger(__name__) __MODULE__ = "Misc" __HELP__ = """ diff --git a/misskaty/plugins/sub_extractor.py b/misskaty/plugins/sub_extractor.py index 4a4e52f5..5f65e05b 100644 --- a/misskaty/plugins/sub_extractor.py +++ b/misskaty/plugins/sub_extractor.py @@ -5,7 +5,8 @@ * @projectName MissKatyPyro * Copyright @YasirPedia All rights reserved """ -from misskaty import app, LOGGER +from misskaty import app +from logging import getLogger from pyrogram import filters from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from misskaty.vars import COMMAND_HANDLER @@ -17,6 +18,8 @@ from re import split as ngesplit, I from urllib.parse import unquote from misskaty.helper.tools import get_random_string +LOGGER = getLogger(__name__) + ARCH_EXT = [".mkv", ".avi", ".mp4", ".mov"] __MODULE__ = "MediaExtract" diff --git a/misskaty/plugins/webss.py b/misskaty/plugins/webss.py index 49b461d4..551943b4 100644 --- a/misskaty/plugins/webss.py +++ b/misskaty/plugins/webss.py @@ -2,11 +2,14 @@ from asyncio import gather from base64 import b64decode from io import BytesIO from pyrogram import filters -from misskaty import app, LOGGER +from logging import getLogger +from misskaty import app from misskaty.vars import COMMAND_HANDLER from misskaty.core.decorator.errors import capture_err from misskaty.helper.http import post +LOGGER = getLogger(__name__) + __MODULE__ = "WebSS" __HELP__ = """ /webss [URL] [FULL_SIZE?, use (y|yes|true) to get full size image. (optional)] - Take A Screenshot Of A Webpage. diff --git a/misskaty/plugins/ytdl_download.py b/misskaty/plugins/ytdl_download.py index 2bf3c6e6..e8067b40 100644 --- a/misskaty/plugins/ytdl_download.py +++ b/misskaty/plugins/ytdl_download.py @@ -1,10 +1,11 @@ import os, json, shutil, asyncio, time -from misskaty import app, LOGGER +from misskaty import app from PIL import Image from pyrogram import filters from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from misskaty.vars import COMMAND_HANDLER from datetime import datetime +from logging import getLogger from hachoir.metadata import extractMetadata from hachoir.parser import createParser from misskaty.helper.ytdl_helper import random_char, DownLoadFile diff --git a/misskaty/vars.py b/misskaty/vars.py index a005462c..b9d427d5 100644 --- a/misskaty/vars.py +++ b/misskaty/vars.py @@ -1,8 +1,9 @@ -from misskaty import LOGGER +from logging import getLogger from os import environ from dotenv import load_dotenv load_dotenv("config.env", override=True) +LOGGER = getLogger(__name__) def getConfig(name: str): diff --git a/utils.py b/utils.py index 17badac2..16c0d183 100644 --- a/utils.py +++ b/utils.py @@ -5,13 +5,14 @@ from pyrogram.errors import ( UserIsBlocked, ) import asyncio -from misskaty import LOGGER +from logging import getLogger from pyrogram.types import Message from typing import Union import os import emoji from database.users_chats_db import db +LOGGER = getLogger(__name__) BANNED = {}