Try fix some error

This commit is contained in:
yasir 2023-02-01 20:58:54 +07:00
parent b6d5f54c18
commit b9c3852098
24 changed files with 226 additions and 198 deletions

View file

@ -9,5 +9,14 @@ from motor.motor_asyncio import AsyncIOMotorClient as MongoClient
from misskaty.vars import DATABASE_URI
from .afk_db import *
from .filters_db import *
from .imdb_db import *
from .karma_db import *
from .notes_db import *
from .sangmata_db import *
from .users_chats_db import *
from .warn_db import *
mongo = MongoClient(DATABASE_URI)
dbname = mongo.MissKatyDB

View file

@ -15,7 +15,6 @@ getLogger("pyrogram").setLevel(ERROR)
MOD_LOAD = []
MOD_NOLOAD = []
HELPABLE = {}
DL_TASK = {}
cleanmode = {}
botStartTime = time.time()

View file

@ -42,8 +42,7 @@ def capture_err(func):
try:
return await func(client, message, *args, **kwargs)
except ChatWriteForbidden:
await app.leave_chat(message.chat.id)
return
return await app.leave_chat(message.chat.id)
except Exception as err:
exc = traceback.format_exc()
error_feedback = split_limits(

View file

@ -0,0 +1,38 @@
from pyrogram import filters
from datetime import datetime
import datetime as dtime
import asyncio, time
data = {}
async def task(msg, warn = False, sec = None):
try:await msg.delete()
except:pass
if warn:
user = msg.from_user
ids = await msg.reply(f"Sorry {user.mention}, you're in cooldown now, wait for {sec}s to use command again..")
await asyncio.sleep(sec)
await ids.edit(f"Alright {user.mention}, your cooldown is over you can command again.")
await asyncio.sleep(1)
await ids.delete()
def wait(sec):
async def ___(flt, cli, msg):
user_id = msg.from_user.id
if user_id in data:
if msg.date >= data[user_id]['timestamp'] + flt.data:
data[user_id] = {'timestamp' : msg.date, 'warned' : False}
return True
else:
if not data[user_id]['warned']:
data[user_id]['warned'] = True
asyncio.ensure_future(task(msg, True, flt.data)) # for super accuracy use (future - time.time())
return False # cause we dont need delete again
asyncio.ensure_future(task(msg))
return False
else:
data.update({user_id : {'timestamp' : msg.date, 'warned' : False}})
return True
return filters.create(___, data=sec)

View file

@ -1,2 +1,13 @@
from .misc import paginate_modules
from .tools import bot_sys_stats
from .ffmpeg_helper import *
from .files import *
from .functions import *
from .http import *
from .human_read import *
from .kuso_utils import *
from .media_helper import *
from .misc import *
from .pyro_progress import *
from .stickerset import *
from .time_gap import *
from .tools import *
from .ytdl_helper import *

View file

@ -2,7 +2,6 @@ import os
import random
import string
import time
import json
import logging
from http.cookies import SimpleCookie
from urllib.parse import urlparse

View file

@ -71,7 +71,7 @@ async def admin_cache_func(_, cmu):
# Purge CMD
@app.on_message(filters.command("purge", COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command("purge", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_delete_messages")
async def purge(_, message):
try:
@ -124,7 +124,7 @@ async def purge(_, message):
# Kick members
@app.on_message(filters.command(["kick", "dkick"], COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command(["kick", "dkick"], COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members")
async def kickFunc(client, message):
user_id, reason = await extract_user_and_reason(message)
@ -153,7 +153,7 @@ async def kickFunc(client, message):
# Ban/DBan/TBan User
@app.on_message(filters.command(["ban", "dban", "tban"], COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command(["ban", "dban", "tban"], COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members")
async def banFunc(client, message):
user_id, reason = await extract_user_and_reason(message, sender_chat=True)
@ -203,7 +203,7 @@ async def banFunc(client, message):
# Unban members
@app.on_message(filters.command("unban", COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command("unban", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members")
async def unban_func(_, message):
# we don't need reasons for unban, also, we
@ -227,7 +227,7 @@ async def unban_func(_, message):
# Ban users listed in a message
@app.on_message(filters.user(SUDO) & filters.command("listban", COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.user(SUDO) & filters.command("listban", COMMAND_HANDLER) & filters.group)
async def list_ban_(c, message):
userid, msglink_reason = await extract_user_and_reason(message)
if not userid or not msglink_reason:
@ -276,7 +276,7 @@ async def list_ban_(c, message):
# Unban users listed in a message
@app.on_message(filters.user(SUDO) & filters.command("listunban", COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.user(SUDO) & filters.command("listunban", COMMAND_HANDLER) & filters.group)
async def list_unban_(c, message):
userid, msglink = await extract_user_and_reason(message)
if not userid or not msglink:
@ -317,7 +317,7 @@ async def list_unban_(c, message):
# Delete messages
@app.on_message(filters.command("del", COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command("del", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_delete_messages")
async def deleteFunc(_, message):
if not message.reply_to_message:
@ -330,7 +330,7 @@ async def deleteFunc(_, message):
# Promote Members
@app.on_message(filters.command(["promote", "fullpromote"], COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command(["promote", "fullpromote"], COMMAND_HANDLER) & filters.group)
@adminsOnly("can_promote_members")
async def promoteFunc(client, message):
try:
@ -374,7 +374,7 @@ async def promoteFunc(client, message):
# Demote Member
@app.on_message(filters.command("demote", COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command("demote", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_promote_members")
async def demote(client, message):
user_id = await extract_user(message)
@ -400,7 +400,7 @@ async def demote(client, message):
# Pin Messages
@app.on_message(filters.command(["pin", "unpin"], COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command(["pin", "unpin"], COMMAND_HANDLER) & filters.group)
@adminsOnly("can_pin_messages")
async def pin(_, message):
if not message.reply_to_message:
@ -426,7 +426,7 @@ async def pin(_, message):
# Mute members
@app.on_message(filters.command(["mute", "tmute"], COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command(["mute", "tmute"], COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members")
async def mute(client, message):
try:
@ -472,7 +472,7 @@ async def mute(client, message):
# Unmute members
@app.on_message(filters.command("unmute", COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command("unmute", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members")
async def unmute(_, message):
user_id = await extract_user(message)
@ -484,7 +484,7 @@ async def unmute(_, message):
# Ban deleted accounts
@app.on_message(filters.command("ban_ghosts", COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command("ban_ghosts", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members")
async def ban_deleted_accounts(_, message):
chat_id = message.chat.id
@ -507,7 +507,7 @@ async def ban_deleted_accounts(_, message):
await m.edit("There are no deleted accounts in this chat")
@app.on_message(filters.command(["warn", "dwarn"], COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command(["warn", "dwarn"], COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members")
async def warn_user(client, message):
user_id, reason = await extract_user_and_reason(message)
@ -609,7 +609,7 @@ async def unban_user(_, cq):
# Remove Warn
@app.on_message(filters.command("rmwarn", COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command("rmwarn", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_restrict_members")
async def remove_warnings(_, message):
if not message.reply_to_message:
@ -628,7 +628,7 @@ async def remove_warnings(_, message):
# Warns
@app.on_message(filters.command("warns", COMMAND_HANDLER) & ~filters.private)
@app.on_message(filters.command("warns", COMMAND_HANDLER) & filters.group)
@capture_err
async def check_warns(_, message):
user_id = await extract_user(message)
@ -644,7 +644,7 @@ async def check_warns(_, message):
# Report User in Group
@app.on_message((filters.command("report", COMMAND_HANDLER) | filters.command(["admins", "admin"], prefixes="@")) & ~filters.private)
@app.on_message((filters.command("report", COMMAND_HANDLER) | filters.command(["admins", "admin"], prefixes="@")) & filters.group)
@capture_err
async def report_user(_, message):
if not message.reply_to_message:

View file

@ -13,11 +13,13 @@ import time
from pyrogram import filters
from database.afk_db import add_afk, cleanmode_off, cleanmode_on, is_afk, remove_afk
from database.afk_db import (add_afk, cleanmode_off, cleanmode_on, is_afk,
remove_afk)
from misskaty import app
from misskaty.core.decorator.errors import capture_err
from misskaty.core.decorator.permissions import adminsOnly
from misskaty.helper.human_read import get_readable_time2
from misskaty.core.message_utils import kirimPesan
from misskaty.helper import get_readable_time2
from misskaty.vars import COMMAND_HANDLER
from utils import put_cleanmode
@ -33,7 +35,7 @@ Just type something in group to remove AFK Status."""
@app.on_message(filters.command(["afk"], COMMAND_HANDLER))
async def active_afk(_, message):
if message.sender_chat:
return
return await kirimPesan(message, "This feature not supported for channel.")
user_id = message.from_user.id
verifier, reasondb = await is_afk(user_id)
if verifier:
@ -176,24 +178,24 @@ async def active_afk(_, message):
}
await add_afk(user_id, details)
send = await message.reply_text(f"{message.from_user.mention} [<code>{message.from_user.id}</code>] is now AFK!.")
send = await kirimPesan(message, f"{message.from_user.mention} [<code>{message.from_user.id}</code>] is now AFK!.")
await put_cleanmode(message.chat.id, send.id)
@app.on_message(filters.command("afkdel") & ~filters.private)
@app.on_message(filters.command("afkdel", COMMAND_HANDLER) & filters.group)
@adminsOnly("can_change_info")
async def afk_state(_, message):
usage = "**Usage:**\n/afkdel [ENABLE|DISABLE]"
usage = "**Usage:**\n/afkdel [ENABLE|DISABLE] to enable or disable auto delete message."
if len(message.command) == 1:
return await message.reply_text(usage)
return await kirimPesan(message, usage)
chat_id = message.chat.id
state = message.text.split(None, 1)[1].strip()
state = state.lower()
if state == "enable":
await cleanmode_on(chat_id)
await message.reply_text("Enabled auto delete AFK message.")
await kirimPesan(message, "Enabled auto delete AFK message in this chat.")
elif state == "disable":
await cleanmode_off(chat_id)
await message.reply_text("Disabled auto delete AFK message.")
await kirimPesan(message, "Disabled auto delete AFK message.")
else:
await message.reply_text(usage)
await kirimPesan(message, usage)

View file

@ -13,6 +13,7 @@ from misskaty import app
from misskaty.core.decorator.errors import capture_err
# Filters Approve User by bot in channel @YMovieZNew
@capture_err
@app.on_chat_join_request(filters.chat(-1001686184174))
async def approve_join_chat(c, m):

View file

@ -3,6 +3,7 @@ from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup, Message
from database.users_chats_db import db
from misskaty import app
from misskaty.core.message_utils import kirimPesan
from misskaty.vars import SUPPORT_CHAT
from utils import temp
@ -24,7 +25,7 @@ disabled_group = filters.create(disabled_chat)
@app.on_message(filters.private & banned_user & filters.incoming)
async def ban_reply(bot, message):
ban = await db.get_ban_status(message.from_user.id)
await message.reply(f'Sorry Dude, You are Banned to use Me. \nBan Reason: {ban["ban_reason"]}')
await kirimPesan(message, f'Sorry Dude, You are Banned to use Me. \nBan Reason: {ban["ban_reason"]}')
@app.on_message(filters.group & disabled_group & filters.incoming)
@ -32,8 +33,9 @@ async def grp_bd(bot, message):
buttons = [[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]]
reply_markup = InlineKeyboardMarkup(buttons)
vazha = await db.get_chat(message.chat.id)
k = await message.reply(
text=f"CHAT NOT ALLOWED 🐞\n\nMy admins has restricted me from working here ! If you want to know more about it contact support..\nReason : <code>{vazha['reason']}</code>.",
k = await kirimPesan(
message,
f"CHAT NOT ALLOWED 🐞\n\nMy admins has restricted me from working here ! If you want to know more about it contact support..\nReason : <code>{vazha['reason']}</code>.",
reply_markup=reply_markup,
)
try:

View file

@ -6,6 +6,7 @@ from pyrogram import filters
from database.users_chats_db import db
from misskaty import app
from misskaty.core.message_utils import *
from misskaty.vars import SUDO
from utils import broadcast_messages
@ -14,7 +15,7 @@ from utils import broadcast_messages
async def broadcast(bot, message):
users = await db.get_all_users()
b_msg = message.reply_to_message
sts = await message.reply_text(text="Broadcasting your messages...")
sts = await kirimPesan(message, "Broadcasting your messages...")
start_time = time.time()
total_users = await db.total_users_count()
done = 0
@ -28,7 +29,7 @@ async def broadcast(bot, message):
if pti:
success += 1
elif pti is False:
if sh == "Bocked":
if sh == "Blocked":
blocked += 1
elif sh == "Deleted":
deleted += 1
@ -37,6 +38,6 @@ async def broadcast(bot, message):
done += 1
await asyncio.sleep(2)
if not done % 20:
await sts.edit(f"Broadcast in progress:\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}")
await editPesan(sts, f"Broadcast in progress:\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}")
time_taken = datetime.timedelta(seconds=int(time.time() - start_time))
await sts.edit(f"Broadcast Completed:\nCompleted in {time_taken} seconds.\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}")
await editPesan(sts, f"Broadcast Completed:\nCompleted in {time_taken} seconds.\n\nTotal Users {total_users}\nCompleted: {done} / {total_users}\nSuccess: {success}\nBlocked: {blocked}\nDeleted: {deleted}")

View file

@ -15,10 +15,9 @@ from pyrogram.errors import EntitiesTooLong, MessageTooLong
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from misskaty import app
from misskaty.core.message_utils import *
from misskaty.core.decorator.errors import capture_err
from misskaty.helper.http import http
from misskaty.helper.human_read import get_readable_file_size
from misskaty.helper.tools import rentry
from misskaty.helper import http, get_readable_file_size, rentry
from misskaty.vars import COMMAND_HANDLER
LIST_LINK = """
@ -89,15 +88,15 @@ def wetransfer_bypass(url: str) -> str:
@capture_err
async def bypass(_, message):
if len(message.command) == 1:
return await message.reply(f"Gunakan perintah /{message.command[0]} untuk bypass url")
return await kirimPesan(message, f"Gunakan perintah /{message.command[0]} untuk bypass url")
url = message.command[1]
urllib.parse.urlparse(url).netloc
msg = await message.reply("Bypassing URL..", quote=True)
msg = await kirimPesan(message, "Bypassing URL..", quote=True)
mention = f"**Bypasser:** {message.from_user.mention} ({message.from_user.id})"
if re.match(r"https?://(store.kde.org|www.pling.com)\/p\/(\d+)", url):
data = await pling_bypass(url)
try:
await msg.edit(f"{data}\n\n{mention}")
await editPesan(msg, f"{data}\n\n{mention}")
except (MessageTooLong, EntitiesTooLong):
result = await rentry(data)
markup = InlineKeyboardMarkup(
@ -108,13 +107,14 @@ async def bypass(_, message):
]
]
)
await msg.edit(
await editPesan(
msg,
f"{result}\n\nBecause your bypassed url is too long, so your link will be pasted to rentry.\n{mention}",
reply_markup=markup,
disable_web_page_preview=True,
)
elif "we.tl" or "wetransfer.com" in url:
data = wetransfer_bypass(url)
await msg.edit(f"{data}\n\n{mention}")
await editPesan(msg, f"{data}\n\n{mention}")
else:
await msg.edit("Unsupported URL..")
await editPesan(msg, "Unsupported URL..")

View file

@ -3,13 +3,14 @@ from pyrogram.errors import MessageNotModified
from misskaty import app
from misskaty.helper.http import http
from misskaty.core.message_utils import *
from misskaty.vars import COMMAND_HANDLER, OPENAI_API
@app.on_message(filters.command("ask", COMMAND_HANDLER))
async def chatbot(c, m):
if len(m.command) == 1:
return await m.reply(f"Gunakan perintah <code>/{m.command[0]} [pertanyaan]</code> untuk menanyakan pertanyaan menggunakan AI.")
return await kirimPesan(m, f"Gunakan perintah <code>/{m.command[0]} [pertanyaan]</code> untuk menanyakan pertanyaan menggunakan AI.")
pertanyaan = m.text.split(" ", maxsplit=1)[1]
headers = {
"Content-Type": "application/json",
@ -22,11 +23,11 @@ async def chatbot(c, m):
"max_tokens": 200,
"temperature": 0,
}
msg = await m.reply("Wait a moment looking for your answer..")
msg = await kirimPesan(m, "Wait a moment looking for your answer..")
try:
response = (await http.post("https://api.openai.com/v1/completions", headers=headers, json=json_data)).json()
await msg.edit(response["choices"][0]["text"])
await editPesan(msg, response["choices"][0]["text"])
except MessageNotModified:
pass
except Exception:
await msg.edit("Yahh, sorry i can't get your answer.")
await editPesan(msg, "Yahh, sorry i can't get your answer.")

View file

@ -27,7 +27,7 @@ from utils import put_cleanmode
)
async def chat_watcher_func(_, message):
if message.sender_chat:
return
return await message.reply("This feature not supported for channel.")
userid = message.from_user.id
user_name = message.from_user.first_name
if message.entities:

View file

@ -25,22 +25,19 @@ import re
from pyrogram import filters
from database.filters_db import (
delete_filter,
get_filter,
get_filters_names,
save_filter,
)
from database.filters_db import (delete_filter, get_filter, get_filters_names,
save_filter)
from misskaty import app
from misskaty.core.decorator.errors import capture_err
from misskaty.core.decorator.permissions import adminsOnly
from misskaty.core.keyboard import ikb
from misskaty.core.message_utils import *
from misskaty.helper.functions import extract_text_and_keyb
__MODULE__ = "Filters"
__HELP__ = """/filters To Get All The Filters In The Chat.
/addfilter [FILTER_NAME] To Save A Filter (Can be a sticker or text).
/stopfilter [FILTER_NAME] To Stop A Filter.
/addfilter [FILTER_NAME] : To Save A Filter (Can be a sticker or text).
/stopfilter [FILTER_NAME] : To Stop A Filter.
You can use markdown or html to save text too.
"""
@ -48,51 +45,51 @@ You can use markdown or html to save text too.
@app.on_message(filters.command("addfilter") & ~filters.private)
@adminsOnly("can_change_info")
async def save_filters(_, message):
if len(message.command) == 1 or not message.reply_to_message:
return await message.reply_text("**Usage:**\nReply to a text or sticker with /filter [FILTER_NAME] to save it.")
if not message.reply_to_message.text and not message.reply_to_message.sticker:
return await message.reply_text("__**You can only save text or stickers in filters for now.**__")
name = message.text.split(None, 1)[1].strip()
async def save_filters(_, m):
if len(m.command) == 1 or not m.reply_to_message:
return await kirimPesan(m, "**Usage:**\nReply to a text or sticker with /filter [FILTER_NAME] to save it.")
if not m.reply_to_message.text and not m.reply_to_message.sticker:
return await kirimPesan(m, "__**You can only save text or stickers in filters for now.**__")
name = m.text.split(None, 1)[1].strip()
if not name:
return await message.reply_text("**Usage:**\n__/filter [FILTER_NAME]__")
chat_id = message.chat.id
_type = "text" if message.reply_to_message.text else "sticker"
return await kirimPesan(m, "**Usage:**\n__/filter [FILTER_NAME]__")
chat_id = m.chat.id
_type = "text" if m.reply_to_message.text else "sticker"
_filter = {
"type": _type,
"data": message.reply_to_message.text.markdown if _type == "text" else message.reply_to_message.sticker.file_id,
"data": m.reply_to_message.text.markdown if _type == "text" else m.reply_to_message.sticker.file_id,
}
await save_filter(chat_id, name, _filter)
await message.reply(f"__**Saved filter {name}.**__")
await kirimPesan(m, f"__**Saved filter {name}.**__")
@app.on_message(filters.command("filters") & ~filters.private)
@capture_err
async def get_filterss(_, message):
_filters = await get_filters_names(message.chat.id)
async def get_filterss(_, m):
_filters = await get_filters_names(m.chat.id)
if not _filters:
return await message.reply_text("**No filters in this chat.**")
return await kirimPesan(m, "**No filters in this chat.**")
_filters.sort()
msg = f"List of filters in {message.chat.title} - {message.chat.id}\n"
msg = f"List of filters in {m.chat.title} - {m.chat.id}\n"
for _filter in _filters:
msg += f"**-** `{_filter}`\n"
await message.reply_text(msg)
await kirimPesan(m, msg)
@app.on_message(filters.command("stopfilter") & ~filters.private)
@adminsOnly("can_change_info")
async def del_filter(_, message):
if len(message.command) < 2:
return await message.reply_text("**Usage:**\n__/stop [FILTER_NAME]__")
name = message.text.split(None, 1)[1].strip()
async def del_filter(_, m):
if len(m.command) < 2:
return await kirimPesan(m, "**Usage:**\n__/stop [FILTER_NAME]__")
name = m.text.split(None, 1)[1].strip()
if not name:
return await message.reply_text("**Usage:**\n__/stop [FILTER_NAME]__")
chat_id = message.chat.id
return await kirimPesan(m, "**Usage:**\n__/stop [FILTER_NAME]__")
chat_id = m.chat.id
deleted = await delete_filter(chat_id, name)
if deleted:
await message.reply_text(f"**Deleted filter {name}.**")
await kirimPesan(m, f"**Deleted filter {name}.**")
else:
await message.reply_text("**No such filter.**")
await kirimPesan(m, "**No such filter.**")
@app.on_message(

View file

@ -15,10 +15,11 @@ from shutil import rmtree
from pyrogram import enums, filters
from pyrogram.errors import FloodWait
from misskaty import BOT_USERNAME, DL_TASK, app
from misskaty import BOT_USERNAME, app
from misskaty.core.message_utils import *
from misskaty.core.decorator.pyro_cooldown import wait
from misskaty.core.decorator.errors import capture_err
from misskaty.helper.ffmpeg_helper import genss_link, take_ss
from misskaty.helper.pyro_progress import progress_for_pyrogram
from misskaty.helper import genss_link, progress_for_pyrogram, take_ss
from misskaty.vars import COMMAND_HANDLER
LOGGER = getLogger(__name__)
@ -31,21 +32,16 @@ __HELP__ = """"
"""
@app.on_message(filters.command(["genss"], COMMAND_HANDLER))
@app.on_message(filters.command(["genss"], COMMAND_HANDLER) & wait(30))
@capture_err
async def genss(client, message):
replied = message.reply_to_message
async def genss(client, m):
replied = m.reply_to_message
if replied is not None:
vid = [replied.video, replied.document]
media = next((v for v in vid if v is not None), None)
if media is None:
return await message.reply("Reply to a Telegram Video or document as video to generate screenshoot!")
process = await message.reply_text("`Processing, please wait..`")
if DL_TASK.get(message.from_user.id):
return await process.edit("Sorry to avoid flood and error, bot only process one task per user at a time.")
if not DL_TASK.get(message.from_user.id):
DL_TASK[message.from_user.id] = True
return await kirimPesan(m, "Reply to a Telegram Video or document as video to generate screenshoot!")
process = await kirimPesan(m, "`Processing, please wait..`")
c_time = time.time()
the_real_download_location = await replied.download(
@ -54,40 +50,31 @@ async def genss(client, message):
)
if the_real_download_location is not None:
try:
await client.edit_message_text(
text=f"File video berhasil didownload dengan path <code>{the_real_download_location}</code>.",
chat_id=message.chat.id,
message_id=process.id,
)
await editPesan(process, f"File video berhasil didownload dengan path <code>{the_real_download_location}</code>.")
await sleep(2)
images = await take_ss(the_real_download_location)
await client.edit_message_text(
text="Mencoba mengupload, hasil generate screenshot..",
chat_id=message.chat.id,
message_id=process.id,
)
await client.send_chat_action(chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO)
await editPesan(process, "Mencoba mengupload, hasil generate screenshot..")
await client.send_chat_action(chat_id=m.chat.id, action=enums.ChatAction.UPLOAD_PHOTO)
try:
await gather(
*[
message.reply_document(images, reply_to_message_id=message.id),
message.reply_photo(images, reply_to_message_id=message.id),
m.reply_document(images, reply_to_message_id=m.id),
m.reply_photo(images, reply_to_message_id=m.id),
]
)
except FloodWait as e:
await sleep(e.value)
await gather(
*[
message.reply_document(images, reply_to_message_id=message.id),
message.reply_photo(images, reply_to_message_id=message.id),
m.reply_document(images, reply_to_message_id=m.id),
m.reply_photo(images, reply_to_message_id=m.id),
]
)
await message.reply(
f"☑️ Uploaded [1] screenshoot.\n\n{message.from_user.first_name} (<code>{message.from_user.id}</code>)\n#️⃣ #ssgen #id{message.from_user.id}\n\nSS Generate by @{BOT_USERNAME}",
reply_to_message_id=message.id,
await kirimPesan(
m, f"☑️ Uploaded [1] screenshoot.\n\n{m.from_user.first_name} (<code>{m.from_user.id}</code>)\n#️⃣ #ssgen #id{message.from_user.id}\n\nSS Generate by @{BOT_USERNAME}",
reply_to_message_id=m.id,
)
del DL_TASK[message.from_user.id]
await process.delete()
try:
os.remove(images)
@ -96,46 +83,40 @@ async def genss(client, message):
pass
except Exception:
exc = traceback.format_exc()
await message.reply(f"Gagal generate screenshot.\n\n{exc}")
del DL_TASK[message.from_user.id]
await kirimPesan(m, f"Gagal generate screenshot.\n\n{exc}")
try:
os.remove(images)
os.remove(the_real_download_location)
except:
pass
else:
await message.reply("Reply to a Telegram media to get screenshots from media..")
await kirimPesan(m, "Reply to a Telegram media to get screenshots from media..")
@app.on_message(filters.command(["genss_link"], COMMAND_HANDLER))
@capture_err
async def genss_link(client, message):
async def genss_link(client, m):
if len(m.command) == 1:
return await kirimPesan(m, f"Use <code>/{m.command[0]} link</code> to generate screenshot from URL.")
try:
link = message.text.split(" ")[1]
if link.startswith("https://file.yasirweb.my.id"):
link = link.replace("https://file.yasirweb.my.id", "https://file.yasiraris.workers.dev")
if link.startswith("https://link.yasirweb.my.id"):
link = link.replace("https://link.yasirweb.my.id", "https://yasirrobot.herokuapp.com")
process = await message.reply_text("`Processing, please wait..`")
tmp_directory_for_each_user = f"./MissKaty_Genss/{str(message.from_user.id)}"
link = m.text.split(" ")[1]
process = await kirimPesan(m, "`Processing, please wait..`")
tmp_directory_for_each_user = f"./MissKaty_Genss/{str(m.from_user.id)}"
if not os.path.isdir(tmp_directory_for_each_user):
os.makedirs(tmp_directory_for_each_user)
images = await genss_link(process, link, tmp_directory_for_each_user, 5, 8)
await sleep(2)
await client.edit_message_text(
text="Mencoba mengupload, hasil generate screenshot..",
chat_id=message.chat.id,
message_id=process.id,
)
await client.send_chat_action(chat_id=message.chat.id, action=enums.ChatAction.UPLOAD_PHOTO)
await editPesan(process, "Mencoba mengupload, hasil generate screenshot..")
await client.send_chat_action(chat_id=m.chat.id, action=enums.ChatAction.UPLOAD_PHOTO)
try:
await message.reply_media_group(images, reply_to_message_id=message.id)
await m.reply_media_group(images, reply_to_message_id=m.id)
except FloodWait as e:
await sleep(e.value)
await message.reply_media_group(images, reply_to_message_id=message.id)
await message.reply(
await m.reply_media_group(images, reply_to_message_id=m.id)
await kirimPesan(
m,
f"☑️ Uploaded [8] screenshoot.\n\nGenerated by @{BOT_USERNAME}.",
reply_to_message_id=message.id,
reply_to_message_id=m.id,
)
await process.delete()
try:
@ -144,7 +125,7 @@ async def genss_link(client, message):
pass
except Exception:
exc = traceback.format_exc()
await message.reply(f"Gagal generate screenshot.\n\n{exc}")
await kirimPesan(m, f"Gagal generate screenshot.\n\n{exc}")
try:
rmtree(tmp_directory_for_each_user)
except:

View file

@ -326,7 +326,7 @@ async def kickme(_, message):
try:
await message.chat.ban_member(message.from_user.id)
txt = f"Pengguna {message.from_user.mention} menendang dirinya sendiri. Mungkin dia sedang frustasi 😕"
txt += f"\n<b>Alasan</b>: {reason}" if reason else ""
txt += f"\n<b>Alasan</b>: {reason}" if reason else "-"
await message.reply_text(txt)
await message.chat.unban_member(message.from_user.id)
except RPCError as ef:

View file

@ -12,28 +12,23 @@ import time
from os import remove as osremove
from pyrogram import filters
from pyrogram.errors import FloodWait
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from misskaty import app, DL_TASK
from misskaty.helper.media_helper import post_to_telegraph, runcmd
from misskaty.helper.pyro_progress import progress_for_pyrogram
from misskaty import app
from misskaty.core.message_utils import *
from misskaty.core.decorator.pyro_cooldown import wait
from misskaty.helper import post_to_telegraph, runcmd, progress_for_pyrogram
from misskaty.vars import COMMAND_HANDLER
from utils import get_file_id
@app.on_message(filters.command(["mediainfo"], COMMAND_HANDLER))
@app.on_message(filters.command(["mediainfo"], COMMAND_HANDLER) & wait(30))
async def mediainfo(client, message):
if message.reply_to_message and message.reply_to_message.media:
process = await message.reply_text("`Sedang memproses, lama waktu tergantung ukuran file kamu...`", quote=True)
process = await kirimPesan(message, "`Sedang memproses, lama waktu tergantung ukuran file kamu...`", quote=True)
file_info = get_file_id(message.reply_to_message)
if file_info is None:
return await process.edit_text("Balas ke format media yang valid")
if DL_TASK.get(message.from_user.id):
return await process.edit("Sorry to avoid flood and error, bot only process one task per user at a time.")
if not DL_TASK.get(message.from_user.id):
DL_TASK[message.from_user.id] = 1
return await editPesan(process, "Balas ke format media yang valid")
c_time = time.time()
file_path = await message.reply_to_message.download(
@ -54,11 +49,7 @@ async def mediainfo(client, message):
text_ = file_info.message_type
link = post_to_telegraph(title, body_text)
markup = InlineKeyboardMarkup([[InlineKeyboardButton(text=text_, url=link)]])
try:
await message.reply(" <b>MEDIA INFO</b>", reply_markup=markup, quote=True)
except FloodWait as f:
await asyncio.sleep(f.value)
del DL_TASK[message.from_user.id]
await kirimPesan(message, " <b>MEDIA INFO</b>", reply_markup=markup, quote=True)
await process.delete()
try:
osremove(file_path)
@ -67,11 +58,11 @@ async def mediainfo(client, message):
else:
try:
link = message.text.split(" ", maxsplit=1)[1]
process = await message.reply_text("`Mohon tunggu sejenak...`")
process = await kirimPesan(message, "`Mohon tunggu sejenak...`")
try:
output = subprocess.check_output(["mediainfo", f"{link}"]).decode("utf-8")
except Exception:
return await process.edit("Sepertinya link yang kamu kirim tidak valid, pastikan direct link dan bisa di download.")
return await editPesan(process, "Sepertinya link yang kamu kirim tidak valid, pastikan direct link dan bisa di download.")
title = "MissKaty Bot Mediainfo"
body_text = f"""
<pre>{output}</pre>
@ -92,4 +83,4 @@ async def mediainfo(client, message):
)
await process.delete()
except IndexError:
return await message.reply_text("Gunakan command /mediainfo [link], atau reply telegram media dengan /mediainfo.")
return await kirimPesan(message, "Gunakan command /mediainfo [link], atau reply telegram media dengan /mediainfo.")

View file

@ -190,7 +190,7 @@ async def job_open_ymoviez():
@app.on_callback_query(filters.regex(r"^nightmd$"))
async def _callbackanightmd(c: Client, q: CallbackQuery):
async def callbackanightmd(c: Client, q: CallbackQuery):
await q.answer(
f"🔖 Hai, Aku {BOT_USERNAME} dibuat menggunakan Framework Pyrogram v{__version__} dan Python 3.10.\n\nMau buat bot seperti ini? Yuuk belajar di @botindonesia\nOwner: @YasirArisM",
show_alert=True,

View file

@ -11,6 +11,7 @@ from pyrogram import filters
from telegraph import upload_file
from misskaty import app
from misskaty.core.message_utils import *
from misskaty.core.decorator.errors import capture_err
from misskaty.helper.http import http
from misskaty.vars import COMMAND_HANDLER
@ -21,15 +22,15 @@ __HELP__ = "/ocr [reply to photo] - Read Text From Image"
@app.on_message(filters.command(["ocr"], COMMAND_HANDLER))
@capture_err
async def ocr(_, message):
reply = message.reply_to_message
async def ocr(_, m):
reply = m.reply_to_message
if not reply or not reply.photo and not reply.sticker:
return await message.reply_text(f"Reply photo with /{message.command[0]} command")
msg = await message.reply("Reading image...")
return await kirimPesan(m, f"Reply photo with /{m.command[0]} command")
msg = await kirimPesan(m, "Reading image...")
try:
file_path = await reply.download()
if reply.sticker:
file_path = await reply.download(f"ocr{message.from_user.id}.jpg")
file_path = await reply.download(f"ocr_{m.from_user.id}.jpg")
response = upload_file(file_path)
url = f"https://telegra.ph{response[0]}"
req = (
@ -38,8 +39,8 @@ async def ocr(_, message):
follow_redirects=True,
)
).json()
await msg.edit(f"Hasil OCR:\n<code>{req['text']}</code>")
await editPesan(msg, f"Hasil OCR:\n<code>{req['text']}</code>")
os.remove(file_path)
except Exception as e:
await msg.edit(str(e))
await editPesan(msg, str(e))
os.remove(file_path)

View file

@ -1,6 +1,8 @@
from misskaty import app
from pyrogram import filters
from database.sangmata_db import *
from misskaty import app
from misskaty.core.decorator.permissions import adminsOnly
from misskaty.vars import COMMAND_HANDLER
__MODULE__ = "SangMata"
@ -37,6 +39,7 @@ async def cek_mataa(_, m):
@app.on_message(
filters.group & filters.command("sangmata_set", COMMAND_HANDLER) & ~filters.bot & ~filters.via_bot
)
@adminsOnly("can_change_info")
async def set_mataa(_, m):
if len(m.command) == 1:
return await m.reply(f"Use <code>/{m.command[0]} on</code>, to enable sangmata. If you want disable, you can use off parameter.")

View file

@ -6,13 +6,12 @@ import html
import regex
from pyrogram import filters
from pyrogram.errors import MessageEmpty
from pyrogram.types import Message
from misskaty import app
@app.on_message(filters.regex(r"^s/(.+)?/(.+)?(/.+)?") & filters.reply)
async def sed(c: app, m: Message):
async def sed(c, m):
exp = regex.split(r"(?<![^\\]\\)/", m.text)
pattern = exp[1]
replace_with = exp[2].replace(r"\/", "/")

View file

@ -5,22 +5,15 @@ import shutil
import tempfile
from PIL import Image
from pyrogram import emoji, filters
from pyrogram import emoji, filters, enums
from pyrogram.errors import BadRequest, PeerIdInvalid, StickersetInvalid
from pyrogram.file_id import FileId
from pyrogram.raw.functions.messages import GetStickerSet, SendMedia
from pyrogram.raw.functions.stickers import (
AddStickerToSet,
CreateStickerSet,
RemoveStickerFromSet,
)
from pyrogram.raw.types import (
DocumentAttributeFilename,
InputDocument,
from pyrogram.raw.functions.stickers import (AddStickerToSet, CreateStickerSet,
RemoveStickerFromSet)
from pyrogram.raw.types import (DocumentAttributeFilename, InputDocument,
InputMediaUploadedDocument,
InputStickerSetItem,
InputStickerSetShortName,
)
InputStickerSetItem, InputStickerSetShortName)
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from misskaty import BOT_USERNAME, app
@ -30,7 +23,7 @@ from misskaty.vars import COMMAND_HANDLER, LOG_CHANNEL
__MODULE__ = "Stickers"
__HELP__ = """
/kang [Reply to sticker] - Add sticker to your pack.
/unkang [Reply to sticker] - Remove sticker from your pack.
/unkang [Reply to sticker] - Remove sticker from your pack (Only can remove sticker that added by this bot.).
/getsticker - Convert sticker to png.
/stickerid - View sticker ID
"""
@ -125,8 +118,8 @@ async def kang_sticker(c, m):
# mime_type: image/webp
resize = True
elif reply.document.mime_type in (
MessageMediaType.VIDEO,
MessageMediaType.ANIMATION,
enums.MessageMediaType.VIDEO,
enums.MessageMediaType.ANIMATION,
):
# mime_type: application/video
videos = True

View file

@ -7,6 +7,7 @@ from PIL import Image
from pyrogram import filters
from misskaty import app
from misskaty.core.message_utils import *
from misskaty.core.decorator.errors import capture_err
from misskaty.helper.http import http
from misskaty.vars import COMMAND_HANDLER
@ -19,19 +20,19 @@ __HELP__ = """
@app.on_message(filters.command(["webss"], COMMAND_HANDLER))
@capture_err
async def take_ss(_, message):
if len(message.command) == 1:
return await message.reply("Give A Url To Fetch Screenshot.")
url = message.command[1] if message.command[1].startswith("http") else f"https://{message.command[1]}"
filename = f"imageToSave_{message.from_user.id}.png"
m = await message.reply("Capturing screenshot...")
async def take_ss(_, m):
if len(m.command) == 1:
return await kirimPesan(m, "Give A Url To Fetch Screenshot.")
url = m.command[1] if m.command[1].startswith("http") else f"https://{m.command[1]}"
filename = f"webSS_{m.from_user.id}.jpg"
msg = await m.reply("Capturing screenshot...")
try:
photo = (await http.get(f"https://yasirapi.eu.org/webss?url={url}")).json()
img = Image.open(BytesIO(base64.decodebytes(bytes(photo["result"], "utf-8"))))
img.save(filename)
m = await m.edit("Uploading...")
await gather(*[message.reply_document(filename), message.reply_photo(filename)])
await m.delete()
await editPesan(msg, "Uploading...")
await gather(*[m.reply_document(filename), m.reply_photo(filename)])
await hapusPesan(m)
os.remove(filename)
except Exception as e:
await m.edit(f"Failed To Take Screenshot. {str(e)}")
await editPesan(msg, f"Failed To Take Screenshot. {str(e)}")