This commit is contained in:
yasir 2022-12-02 21:54:44 +07:00
parent 1ea03aa5b5
commit a82c129a83
13 changed files with 150 additions and 43 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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 (

View file

@ -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)

View file

@ -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.

View file

@ -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"<a href='tg://user?id={user.id}'>{user.first_name}</a>"
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"<b>#SpamWatch Federation Ban</b>\nUser {mention} [<code>{user.id}</code>] has been kicked because <code>{apispamwatch.get('reason')}</code>.\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"<b>#CAS Federation Ban</b>\nUser {mention} [<code>{user.id}</code>] detected as spambot and has been kicked. Powered by <a href='https://api.cas.chat/check?user_id={user.id}'>Combot AntiSpam.</a>"
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="<b>CHAT NOT ALLOWED 🐞\n\nMy admins has restricted me from working here ! If you want to know more about it contact support..</b>",
@ -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"<b>Terimakasih sudah menambahkan saya di {message.chat.title} ❣️\n\nJika ada kendala atau saran bisa kontak ke saya.</b>", reply_markup=reply_markup)
await message.reply_text(
text=f"<b>Terimakasih sudah menambahkan saya di {message.chat.title} ❣️\n\nJika ada kendala atau saran bisa kontak ke saya.</b>",
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-<code> {cha_t['reason']} </code>")
return await message.reply(
f"This chat is already disabled:\nReason-<code> {cha_t['reason']} </code>"
)
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"<b>Hello Friends, \nMy admin has told me to leave from group so i go! If you wanna add me again contact my support group.</b> \nReason : <code>{reason}</code>", reply_markup=reply_markup)
await bot.send_message(
chat_id=chat_,
text=f"<b>Hello Friends, \nMy admin has told me to leave from group so i go! If you wanna add me again contact my support group.</b> \nReason : <code>{reason}</code>",
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 <b>{message.chat.title}</b> ({message.chat.id}):\n~ {res}")
return await message.reply(
f"Daftar Admin di <b>{message.chat.title}</b> ({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

View file

@ -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__ = """

View file

@ -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"

View file

@ -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.

View file

@ -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

View file

@ -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):

View file

@ -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 = {}