Some Improvement (#47)

This commit is contained in:
yasirarism 2023-04-13 11:01:04 +07:00 committed by GitHub
parent 58d093b51e
commit 63e76023e0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 189 additions and 103 deletions

View file

@ -4,13 +4,13 @@
</h1> </h1>
## NOTES ## NOTES
This repo has many bugs and i dont have time to fix it. If you can help me, please open pull request (PR). This repo has some small bugs and i dont have time to fix it. If you can help me, please open pull request (PR).
## Demo ## Demo
You can check demo this repo in this bot [MissKatyPyro](https://t.me/MissKatyRoBot) You can check demo this repo in this bot [MissKatyPyro](https://t.me/MissKatyRoBot)
## Features and Give Support ## Features and Give Support
* Please open this web https://yasirpedia.eu.org/ to check some feature or give support to me. * Please open this web https://yasirpedia.eu.org/ to know about me or support me.
## Variables ## Variables
@ -23,9 +23,9 @@ You can check demo this repo in this bot [MissKatyPyro](https://t.me/MissKatyRoB
* `LOG_CHANNEL` : A channel to log the activities of bot. Make sure bot is an admin in the channel. * `LOG_CHANNEL` : A channel to log the activities of bot. Make sure bot is an admin in the channel.
* `USER_SESSION` : Session string for Userbot. * `USER_SESSION` : Session string for Userbot.
### Optional Variables ### Optional Variables
Check by yourself for optional vars. Check by yourself in config files.
## Deploy (Must Use Docker to Run This Bot) ## Deploy (Must Use Docker to Run This Bot, since i had make it built in all requirements)
- Start Docker daemon (Skip if already running): - Start Docker daemon (Skip if already running):
``` ```
@ -43,8 +43,28 @@ sudo docker run misskaty
``` ```
sudo docker ps sudo docker ps
``` ```
sudo docker stop <pid>
#### Build And Run The Docker Image Using docker-compose
- Install docker-compose
``` ```
sudo docker stop id sudo apt install docker-compose
```
- Build and run Docker image or to view current running image:
```
sudo docker-compose up
```
- After editing files with nano for example (nano start.sh):
```
sudo docker-compose up --build
```
- To stop the running image:
```
sudo docker ps
```
```
sudo docker-compose stop <pid>
``` ```
---- ----

View file

@ -1,7 +1,11 @@
ADMINS=617426792
API_HASH= API_HASH=
DATABASE_NAME=
API_ID= API_ID=
SUPPORT_CHAT=YasirPediaChannel
DATABASE_URI=mongodb+srv://
BOT_TOKEN= BOT_TOKEN=
LOG_CHANNEL=-100 DATABASE_NAME=MissKatyPyro
DATABASE_URI=mongodb+srv://
LOG_CHANNEL=
SUPPORT_CHAT=YasirPediaChannel
USER_SESSION=
OPENAI_API=
CURRENCY_API=

View file

@ -0,0 +1,13 @@
{
"sudo_join_msg": "Wow, my cool owner just joined the group!",
"log_bot_added": "#New Group\nGroup = {ttl}(<code>{cid}</code>)\nNumber of Members = <code>{tot}</code>\nAdded by - {r_j}",
"support_btn": "Support",
"help_btn": " Help",
"update_btn": "📢 Updates",
"chat_not_allowed": "<b>CHAT NOT ALLOWED 🐞\n\nMy owner has banned me from working here! You can contact the owner of this bot..</b>",
"welcome_thanks": "<b>Thank you for adding me to {ttl} ❣️\n\nIf you have any problems or suggestions, you can contact me.</b>",
"capt_welc": "Hi {umention} [<code>{uid}</code>], Welcome to the {ttl} group.",
"combot_msg": "<b>#CAS Federation Ban</b>\nUser {umention} [<code>{uid}</code>] has been detected as a spambot and has been banned. Powered by <a href='https://api.cas.chat/check?user_id={u.id}'>Combot AntiSpam.</a>",
"spamwatch_msg": "<b>#SpamWatch Federation Ban</b>\nUser {umention} [<code>{uid}</code>] has been banned for <code>{reas}</code>.\n" ,
"welcpic_msg": "Welcome {userr} [{id}]"
}

View file

@ -1,9 +1,9 @@
{ {
"no_uname": "<code>No Username</code>", "no_uname": "<code>No Username</code>",
"no_last_name": "<code>No Last Name</code>", "no_last_name": "<code>No Last Name</code>",
"uname_change_msg": "✨ Changed username from {bef} ➡️ <code>{aft}</code>.\n", "uname_change_msg": "✨ Changed username from {bef} ➡️ {aft}.\n",
"lastname_change_msg": "✨ Changed last name from {bef} ➡️ <code>{aft}</code>.\n", "lastname_change_msg": "✨ Changed last name from {bef} ➡️ {aft}.\n",
"firstname_change_msg": "✨ Changed first name from {bef} ➡️ <code>{aft}</code>.\n", "firstname_change_msg": "✨ Changed first name from {bef} ➡️ {aft}.\n",
"set_sangmata_help": "Use <code>/{cmd} on</code>, to enable sangmata. If you want disable, you can use off parameter.", "set_sangmata_help": "Use <code>/{cmd} on</code>, to enable sangmata. If you want disable, you can use off parameter.",
"sangmata_already_on": "SangMata already enabled in your groups.", "sangmata_already_on": "SangMata already enabled in your groups.",
"sangmata_enabled": "Sangmata enabled in your groups.", "sangmata_enabled": "Sangmata enabled in your groups.",

View file

@ -4,7 +4,7 @@
"no_res": "No result found for `{kweri}`", "no_res": "No result found for `{kweri}`",
"dl_btn": "Download", "dl_btn": "Download",
"back": "Back", "back": "Back",
"yts_msg": "Published {pub}\n\n<b> Duration:</b> {dur}\n<b> Views:</b> {vi}\n<b> Uploader:</b> <a href={clink}>{cname}</a>\n\n", "yts_msg": "Published {pub}\n\n<b> Duration:</b> {dur}\n<b> Views:</b> {vi}\n<b> Uploader:</b> <a href='{clink}'>{cname}</a>\n\n",
"invalid_link": "Please input a valid YT-DLP Supported URL", "invalid_link": "Please input a valid YT-DLP Supported URL",
"err_parse": "Failed parse URL, check logs..", "err_parse": "Failed parse URL, check logs..",
"wait": "Please wait..", "wait": "Please wait..",

View file

@ -0,0 +1,13 @@
{
"sudo_join_msg": "Waw, Pemilikku yang keren baru saja bergabung ke grup!",
"log_bot_added": "#GrupBaru\nGrup = {ttl}(<code>{cid}</code>)\nJumlah Anggota = <code>{tot}</code>\nDitambahkan oleh - {r_j}",
"support_btn": "Dukungan",
"help_btn": " Bantuan",
"update_btn": "📢 Updates",
"chat_not_allowed": "<b>CHAT TIDAK DIIJINKAN 🐞\n\nPemilik saya sudah melarang saya untuk bekerja disini! Kamu bisa menghubungi pemilik bot ini..</b>",
"welcome_thanks": "<b>Terimakasih sudah menambahkan saya di {ttl} ❣️\n\nJika ada kendala atau saran bisa kontak ke saya.</b>",
"capt_welc": "Hai {umention} [<code>{uid}</code>], Selamat datang digrup {ttl}.",
"combot_msg": "<b>#CAS Federation Ban</b>\nPengguna {umention} [<code>{uid}</code>] terdeteksi sebagai spambot dan telah dikeluarkan. Powered by <a href='https://api.cas.chat/check?user_id={u.id}'>Combot AntiSpam.</a>",
"spamwatch_msg": "<b>#SpamWatch Federation Ban</b>\nPengguna {umention} [<code>{uid}</code>] telah dikeluarkan karena <code>{reas}</code>.\n",
"welcpic_msg": "Selamat Datang {userr} [{id}]"
}

View file

@ -1,9 +1,9 @@
{ {
"no_uname": "<code>Tanpa Username</code>", "no_uname": "<code>Tanpa Username</code>",
"no_last_name": "<code>Tanpa Nama Belakang</code>", "no_last_name": "<code>Tanpa Nama Belakang</code>",
"uname_change_msg": "✨ Mengubah nama depan dari {bef} ➡️ <code>{aft}</code>.\n", "uname_change_msg": "✨ Mengubah nama depan dari {bef} ➡️ {aft}.\n",
"lastname_change_msg": "✨ Mengubah nama belakang dari {bef} ➡️ <code>{aft}</code>.\n", "lastname_change_msg": "✨ Mengubah nama belakang dari {bef} ➡️ {aft}.\n",
"firstname_change_msg": "✨ Mengubah nama depan dari {bef} ➡️ <code>{aft}</code>.\n", "firstname_change_msg": "✨ Mengubah nama depan dari {bef} ➡️ {aft}.\n",
"set_sangmata_help": "Gunakan <code>/{cmd} on</code>, untuk mengaktifkan sangmata. Jika Anda ingin menonaktifkan, Anda dapat menggunakan parameter off.", "set_sangmata_help": "Gunakan <code>/{cmd} on</code>, untuk mengaktifkan sangmata. Jika Anda ingin menonaktifkan, Anda dapat menggunakan parameter off.",
"sangmata_already_on": "SangMata telah diaktifkan di grup Anda.", "sangmata_already_on": "SangMata telah diaktifkan di grup Anda.",
"sangmata_enabled": "Sangmata diaktifkan di grup Anda.", "sangmata_enabled": "Sangmata diaktifkan di grup Anda.",

View file

@ -4,7 +4,7 @@
"no_res": "Tidak ada hasil yang ditemukan untuk `{kweri}`", "no_res": "Tidak ada hasil yang ditemukan untuk `{kweri}`",
"dl_btn": "Unduh", "dl_btn": "Unduh",
"kembali": "kembali", "kembali": "kembali",
"yts_msg": "Dipublikasikan {pub}\n\n<b> Durasi:</b> {dur}\n<b> Penayangan:</b> {vi}\n<b> Pengunggah:< /b> <a href={clink}>{cname}</a>\n\n", "yts_msg": "Dipublikasikan {pub}\n\n<b> Durasi:</b> {dur}\n<b> Penayangan:</b> {vi}\n<b> Pengunggah:</b> <a href='{clink}'>{cname}</a>\n\n",
"invalid_link": "Masukkan URL yang Didukung YT-DLP yang valid", "invalid_link": "Masukkan URL yang Didukung YT-DLP yang valid",
"err_parse": "Gagal menguraikan URL, periksa log..", "err_parse": "Gagal menguraikan URL, periksa log..",
"tunggu": "Harap tunggu..", "tunggu": "Harap tunggu..",

View file

@ -0,0 +1,13 @@
{
"sudo_join_msg": "Waw, Pemilikku sing ganteng gabung menyang grup!",
"log_bot_added": "#GrupBaru\nGrup = {ttl}(<code>{cid}</code>)\nJumlah Anggota = <code>{tot}</code>\nDitambahake dening - {r_j}",
"support_btn": "Dukungan",
"help_btn": " Pitulungan",
"update_btn": "📢 Nganyari",
"chat_not_allowed": "<b>CHAT ORA DIIJINKE 🐞\n\nPemilik ku wes nglarang aku kerja neng kene! Sampeyan bisa hubungi pemilik bot iki..</b>",
"welcome_thanks": "<b>Terimakasih wis nambahi saya ing {ttl} ❣️\n\nYen ana kendal utawa saran bisa hubungi saya.</b>",
"capt_welc": "Hai {umention} [<code>{uid}</code>], sugeng rawuh ing grup {ttl}.",
"combot_msg": "<b>Larangan Federasi #CAS</b>\nPengguna {umention} [<kode>{uid}</code>] dideteksi minangka spambot lan wis dibusak. Powered by <a href='https://api.cas.chat/check?user_id={u.id}'>Combot AntiSpam.</a>",
"spamwatch_msg": "<b>Larangan Federasi #SpamWatch</b>\nPengguna {umention} [<code>{uid}</code>] wis dibusak amarga <code>{reas}</code>.\n" ,
"welcpic_msg": "Sugeng Rawuh {userr} [{id}]"
}

View file

@ -1,9 +1,9 @@
{ {
"no_uname": "<code>Ora Jeneng Panganggo</code>", "no_uname": "<code>Ora Jeneng Panganggo</code>",
"no_last_name": "<kode>Ora Ana Jeneng mburi</code>", "no_last_name": "<kode>Ora Ana Jeneng mburi</code>",
"uname_change_msg": "✨ Jeneng pangguna diganti saka {bef} ➡️ <code>{aft}</code>.\n", "uname_change_msg": "✨ Jeneng pangguna diganti saka {bef} ➡️ {aft}.\n",
"lastname_change_msg": "✨ Ganti jeneng mburi saka {bef} ➡️ <code>{aft}</code>.\n", "lastname_change_msg": "✨ Ganti jeneng mburi saka {bef} ➡️ {aft}.\n",
"firstname_change_msg": "✨ Ganti jeneng ngarep saka {bef} ➡️ <code>{aft}</code>.\n", "firstname_change_msg": "✨ Ganti jeneng ngarep saka {bef} ➡️ {aft}.\n",
"set_sangmata_help": "Gunakake <code>/{cmd} on</code>, kanggo ngaktifake sangmata. Yen sampeyan pengin mateni, sampeyan bisa nggunakake parameter mati.", "set_sangmata_help": "Gunakake <code>/{cmd} on</code>, kanggo ngaktifake sangmata. Yen sampeyan pengin mateni, sampeyan bisa nggunakake parameter mati.",
"sangmata_already_on": "SangMata wis diaktifake ing grup sampeyan.", "sangmata_already_on": "SangMata wis diaktifake ing grup sampeyan.",
"sangmata_enabled": "Sangmata diaktifake ing grup sampeyan.", "sangmata_enabled": "Sangmata diaktifake ing grup sampeyan.",

View file

@ -6,7 +6,7 @@
"back_btn": "↩️ Mbalik", "back_btn": "↩️ Mbalik",
"dl_text": "⬇️ Unduh", "dl_text": "⬇️ Unduh",
"cat_text": "💠 Kategori", "cat_text": "💠 Kategori",
"kualitas": "Kualitas", "kualitas": "Kwalitas",
"ex_data": "👇 Ekstrak Data ", "ex_data": "👇 Ekstrak Data ",
"unauth": "Tombol iki dudu kanggo sampeyan..", "unauth": "Tombol iki dudu kanggo sampeyan..",
"invalid_cb": "Data callback ora valid, kirim printah maneh..", "invalid_cb": "Data callback ora valid, kirim printah maneh..",

View file

@ -4,7 +4,7 @@
"no_res": "Ora ana asil kanggo `{kweri}`", "no_res": "Ora ana asil kanggo `{kweri}`",
"dl_btn": "Ngunduh", "dl_btn": "Ngunduh",
"back": "Mbalik", "back": "Mbalik",
"yts_msg": "Diterbitake {pub}\n\n<b> Duration:</b> {dur}\n<b> Ndeleng:</b> {vi}\n<b> Uploader:< /b> <a href={clink}>{cname}</a>\n\n", "yts_msg": "Diterbitake {pub}\n\n<b> Duration:</b> {dur}\n<b> Ndeleng:</b> {vi}\n<b> Uploader:</b> <a href='{clink}'>{cname}</a>\n\n",
"invalid_link": "Mangga lebokna URL Dhukungan YT-DLP sing valid", "invalid_link": "Mangga lebokna URL Dhukungan YT-DLP sing valid",
"err_parse": "Gagal ngurai URL, mriksa log..", "err_parse": "Gagal ngurai URL, mriksa log..",
"ngenteni": "Tulung ngenteni..", "ngenteni": "Tulung ngenteni..",

View file

@ -17,8 +17,6 @@ async def member_permissions(chat_id: int, user_id: int):
perms = [] perms = []
try: try:
member = (await app.get_chat_member(chat_id, user_id)).privileges member = (await app.get_chat_member(chat_id, user_id)).privileges
except Exception:
return []
if member.can_post_messages: if member.can_post_messages:
perms.append("can_post_messages") perms.append("can_post_messages")
if member.can_edit_messages: if member.can_edit_messages:
@ -38,6 +36,8 @@ async def member_permissions(chat_id: int, user_id: int):
if member.can_manage_video_chats: if member.can_manage_video_chats:
perms.append("can_manage_video_chats") perms.append("can_manage_video_chats")
return perms return perms
except:
return []
async def check_perms( async def check_perms(
@ -126,12 +126,8 @@ async def check_perms(
else: else:
sender = message.reply_text sender = message.reply_text
chat = message.chat chat = message.chat
# TODO: Cache all admin permissions in db.
if not message.from_user: if not message.from_user:
# For anonymous admins return bool(message.sender_chat and message.sender_chat.id == message.chat.id)
if message.sender_chat and message.sender_chat.id == message.chat.id:
return True
return False
user = await chat.get_member(message.from_user.id) user = await chat.get_member(message.from_user.id)
if user.status == enums.ChatMemberStatus.OWNER: if user.status == enums.ChatMemberStatus.OWNER:
return True return True

View file

@ -5,7 +5,7 @@ from time import time
from pyrogram import enums, filters from pyrogram import enums, filters
from pyrogram.errors import ChatAdminRequired, FloodWait from pyrogram.errors import ChatAdminRequired, FloodWait
from pyrogram.types import ChatPermissions from pyrogram.types import ChatPermissions, ChatPrivileges
from database.warn_db import add_warn, get_warn, remove_warns from database.warn_db import add_warn, get_warn, remove_warns
from misskaty import app from misskaty import app
@ -366,6 +366,7 @@ async def promoteFunc(client, message, strings):
if message.command[0][0] == "f": if message.command[0][0] == "f":
await message.chat.promote_member( await message.chat.promote_member(
user_id=user_id, user_id=user_id,
privileges=ChatPrivileges(
can_change_info=bot.privileges.can_change_info, can_change_info=bot.privileges.can_change_info,
can_invite_users=bot.privileges.can_invite_users, can_invite_users=bot.privileges.can_invite_users,
can_delete_messages=bot.privileges.can_delete_messages, can_delete_messages=bot.privileges.can_delete_messages,
@ -374,11 +375,13 @@ async def promoteFunc(client, message, strings):
can_promote_members=bot.privileges.can_promote_members, can_promote_members=bot.privileges.can_promote_members,
can_manage_chat=bot.privileges.can_manage_chat, can_manage_chat=bot.privileges.can_manage_chat,
can_manage_video_chats=bot.privileges.can_manage_video_chats, can_manage_video_chats=bot.privileges.can_manage_video_chats,
),
) )
return await message.reply_text(strings("full_promote").format(umention=umention)) return await message.reply_text(strings("full_promote").format(umention=umention))
await message.chat.promote_member( await message.chat.promote_member(
user_id=user_id, user_id=user_id,
privileges=ChatPrivileges(
can_change_info=False, can_change_info=False,
can_invite_users=bot.privileges.can_invite_users, can_invite_users=bot.privileges.can_invite_users,
can_delete_messages=bot.privileges.can_delete_messages, can_delete_messages=bot.privileges.can_delete_messages,
@ -387,6 +390,7 @@ async def promoteFunc(client, message, strings):
can_promote_members=False, can_promote_members=False,
can_manage_chat=bot.privileges.can_manage_chat, can_manage_chat=bot.privileges.can_manage_chat,
can_manage_video_chats=bot.privileges.can_manage_video_chats, can_manage_video_chats=bot.privileges.can_manage_video_chats,
),
) )
await message.reply_text(strings("normal_promote").format(umention=umention)) await message.reply_text(strings("normal_promote").format(umention=umention))
@ -408,6 +412,7 @@ async def demote(client, message, strings):
return await message.reply_text(strings("demote_sudo_err")) return await message.reply_text(strings("demote_sudo_err"))
await message.chat.promote_member( await message.chat.promote_member(
user_id=user_id, user_id=user_id,
privileges=ChatPrivileges(
can_change_info=False, can_change_info=False,
can_invite_users=False, can_invite_users=False,
can_delete_messages=False, can_delete_messages=False,
@ -416,6 +421,7 @@ async def demote(client, message, strings):
can_promote_members=False, can_promote_members=False,
can_manage_chat=False, can_manage_chat=False,
can_manage_video_chats=False, can_manage_video_chats=False,
),
) )
umention = (await app.get_users(user_id)).mention umention = (await app.get_users(user_id)).mention
await message.reply_text(f"Demoted! {umention}") await message.reply_text(f"Demoted! {umention}")

View file

@ -18,15 +18,18 @@ LOGGER = logging.getLogger(__name__)
@app.on_message(filters.command(["currency"], COMMAND_HANDLER)) @app.on_message(filters.command(["currency"], COMMAND_HANDLER))
async def currency(c: Client, m: Message): async def currency(c: Client, m: Message):
if CURRENCY_API is None: if CURRENCY_API is None:
return await kirimPesan(m, f"<code>Oops!!get the API from</code> " "<a href='https://app.exchangerate-api.com/sign-up'>HERE</a> " "<code>& add it to config vars</code> (<code>CURRENCY_API</code>)", disable_web_page_preview=True) return await kirimPesan(
if len(m.text.split()) == 4: m,
"<code>Oops!!get the API from</code> <a href='https://app.exchangerate-api.com/sign-up'>HERE</a> <code>& add it to config vars</code> (<code>CURRENCY_API</code>)",
disable_web_page_preview=True,
)
if len(m.text.split()) != 4:
return await kirimPesan(m, f"Use format /{m.command[0]} [amount] [currency_from] [currency_to] to convert currency.")
teks = m.text.split() teks = m.text.split()
amount = teks[1] amount = teks[1]
currency_from = teks[2] currency_from = teks[2]
currency_to = teks[3] currency_to = teks[3]
else:
return await kirimPesan(m, f"Use format /{m.command[0]} [amount] [currency_from] [currency_to] to convert currency.")
if amount.isdigit(): if amount.isdigit():
url = f"https://v6.exchangerate-api.com/v6/{CURRENCY_API}/" f"pair/{currency_from}/{currency_to}/{amount}" url = f"https://v6.exchangerate-api.com/v6/{CURRENCY_API}/" f"pair/{currency_from}/{currency_to}/{amount}"
try: try:

View file

@ -40,6 +40,9 @@ __HELP__ = """
/json - Send structure message Telegram in JSON using Pyrogram Style. /json - Send structure message Telegram in JSON using Pyrogram Style.
""" """
var = {}
teskode = {}
async def edit_or_reply(msg, **kwargs): async def edit_or_reply(msg, **kwargs):
func = msg.edit_text if msg.from_user.is_self else msg.reply func = msg.edit_text if msg.from_user.is_self else msg.reply
@ -51,7 +54,8 @@ async def edit_or_reply(msg, **kwargs):
@use_chat_lang() @use_chat_lang()
async def log_file(bot, message, strings): async def log_file(bot, message, strings):
"""Send log file""" """Send log file"""
try: msg = await kirimPesan(message, "<b>Reading bot logs ...</b>")
if len(message.command) == 1:
await message.reply_document( await message.reply_document(
"MissKatyLogs.txt", "MissKatyLogs.txt",
caption="Log Bot MissKatyPyro", caption="Log Bot MissKatyPyro",
@ -66,9 +70,11 @@ async def log_file(bot, message, strings):
] ]
), ),
) )
except: await hapusPesan(msg)
err = traceback.format_exc() elif len(message.command) == 2:
await message.reply(str(err)) val = message.text.split()
tail = await shell_exec(f"tail -n {val[1]} -v MissKatyLogs.txt")
await editPesan(msg, f"<pre language='bash'>{html.escape(tail[0])}</pre>")
@app.on_message(filters.command(["donate"], COMMAND_HANDLER)) @app.on_message(filters.command(["donate"], COMMAND_HANDLER))
@ -192,6 +198,9 @@ async def cmd_eval(self, message: types.Message, strings) -> Optional[str]:
"self": self, "self": self,
"humantime": humantime, "humantime": humantime,
"m": message, "m": message,
"var": var,
"app": app,
"teskode": teskode,
"re": re, "re": re,
"os": os, "os": os,
"asyncio": asyncio, "asyncio": asyncio,
@ -205,6 +214,8 @@ async def cmd_eval(self, message: types.Message, strings) -> Optional[str]:
"http": http, "http": http,
"replied": message.reply_to_message, "replied": message.reply_to_message,
} }
eval_vars.update(var)
eval_vars.update(teskode)
try: try:
return "", await meval(code, globals(), **eval_vars) return "", await meval(code, globals(), **eval_vars)
except Exception as e: # skipcq: PYL-W0703 except Exception as e: # skipcq: PYL-W0703
@ -232,7 +243,7 @@ async def cmd_eval(self, message: types.Message, strings) -> Optional[str]:
el_str = get_readable_time(el_us) el_str = get_readable_time(el_us)
except: except:
el_str = "1s" el_str = "1s"
if el_str == "" or el_str is None: if not el_str or el_str is None:
el_str = "0.1s" el_str = "0.1s"
out = out_buf.getvalue() out = out_buf.getvalue()

View file

@ -14,6 +14,7 @@ from misskaty import BOT_USERNAME, app
from misskaty.core.decorator.ratelimiter import ratelimiter from misskaty.core.decorator.ratelimiter import ratelimiter
from misskaty.core.decorator.errors import asyncify, capture_err from misskaty.core.decorator.errors import asyncify, capture_err
from misskaty.helper.http import http from misskaty.helper.http import http
from misskaty.helper.localization import use_chat_lang
from misskaty.vars import COMMAND_HANDLER, LOG_CHANNEL, SUDO, SUPPORT_CHAT from misskaty.vars import COMMAND_HANDLER, LOG_CHANNEL, SUDO, SUPPORT_CHAT
from utils import temp from utils import temp
@ -47,14 +48,14 @@ def draw_multiple_line_text(image, text, font, text_start_height):
@asyncify @asyncify
def welcomepic(pic, user, chat, id): def welcomepic(pic, user, chat, id, strings):
background = Image.open("assets/bg.png") # <- Background Image (Should be PNG) background = Image.open("assets/bg.png") # <- Background Image (Should be PNG)
background = background.resize((1024, 500), Image.ANTIALIAS) background = background.resize((1024, 500), Image.ANTIALIAS)
pfp = Image.open(pic).convert("RGBA") pfp = Image.open(pic).convert("RGBA")
pfp = circle(pfp) pfp = circle(pfp)
pfp = pfp.resize((265, 265)) # Resizes the Profilepicture so it fits perfectly in the circle pfp = pfp.resize((265, 265)) # Resizes the Profilepicture so it fits perfectly in the circle
font = ImageFont.truetype("assets/Calistoga-Regular.ttf", 37) # <- Text Font of the Member Count. Change the text size for your preference font = ImageFont.truetype("assets/Calistoga-Regular.ttf", 37) # <- Text Font of the Member Count. Change the text size for your preference
member_text = f"Selamat Datang {user} [{id}]" # <- Text under the Profilepicture with the Membercount member_text = strings("welcpic_msg").format(userr=user, id=id) # <- Text under the Profilepicture with the Membercount
draw_multiple_line_text(background, member_text, font, 395) draw_multiple_line_text(background, member_text, font, 395)
draw_multiple_line_text(background, chat, font, 47) draw_multiple_line_text(background, chat, font, 47)
ImageDraw.Draw(background).text( ImageDraw.Draw(background).text(
@ -70,14 +71,15 @@ def welcomepic(pic, user, chat, id):
@app.on_chat_member_updated(filters.group & filters.chat([-1001128045651, -1001777794636])) @app.on_chat_member_updated(filters.group & filters.chat([-1001128045651, -1001777794636]))
async def member_has_joined(c: app, member: ChatMemberUpdated): @use_chat_lang()
async def member_has_joined(c: app, member: ChatMemberUpdated, strings):
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 return
user = member.new_chat_member.user if member.new_chat_member else member.from_user user = member.new_chat_member.user if member.new_chat_member else member.from_user
if user.id in SUDO: if user.id in SUDO:
await c.send_message( await c.send_message(
member.chat.id, member.chat.id,
"Waw, owner ku yang keren baru saja bergabung ke grup!", strings("sudo_join_msg"),
) )
return return
elif user.is_bot: elif user.is_bot:
@ -98,7 +100,7 @@ async def member_has_joined(c: app, member: ChatMemberUpdated):
except AttributeError: except AttributeError:
pic = "assets/profilepic.png" pic = "assets/profilepic.png"
try: try:
welcomeimg = await welcomepic(pic, user.first_name, member.chat.title, user.id) welcomeimg = await welcomepic(pic, user.first_name, member.chat.title, user.id, strings)
temp.MELCOW[f"welcome-{member.chat.id}"] = await c.send_photo( temp.MELCOW[f"welcome-{member.chat.id}"] = await c.send_photo(
member.chat.id, member.chat.id,
photo=welcomeimg, photo=welcomeimg,
@ -113,7 +115,7 @@ async def member_has_joined(c: app, member: ChatMemberUpdated):
apispamwatch = (await http.get(f"https://api.spamwat.ch/banlist/{user.id}", headers=headers)).json() apispamwatch = (await http.get(f"https://api.spamwat.ch/banlist/{user.id}", headers=headers)).json()
if not apispamwatch.get("error"): 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" userspammer += strings("spamwatch_msg").format(umention=user.mention, uid=user.id, reas=apispamwatch.get("reason"))
except Exception as err: except Exception as err:
LOGGER.error(f"ERROR in Spamwatch Detection. {err}") LOGGER.error(f"ERROR in Spamwatch Detection. {err}")
# Combot API Detection # Combot API Detection
@ -121,7 +123,7 @@ async def member_has_joined(c: app, member: ChatMemberUpdated):
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": 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>" userspammer += strings("combot_msg").format(umention=user.mention, uid=user.id)
except Exception as err: except Exception as err:
LOGGER.error(f"ERROR in Combot API Detection. {err}") LOGGER.error(f"ERROR in Combot API Detection. {err}")
if userspammer != "": if userspammer != "":
@ -134,7 +136,8 @@ async def member_has_joined(c: app, member: ChatMemberUpdated):
@app.on_message(filters.new_chat_members & filters.group) @app.on_message(filters.new_chat_members & filters.group)
async def save_group(bot, message): @use_chat_lang()
async def save_group(bot, message, strings):
r_j_check = [u.id for u in message.new_chat_members] r_j_check = [u.id for u in message.new_chat_members]
if temp.ME in r_j_check: if temp.ME in r_j_check:
if not await db.get_chat(message.chat.id): if not await db.get_chat(message.chat.id):
@ -142,16 +145,16 @@ async def save_group(bot, message):
r_j = message.from_user.mention if message.from_user else "Anonymous" r_j = message.from_user.mention if message.from_user else "Anonymous"
await bot.send_message( await bot.send_message(
LOG_CHANNEL, LOG_CHANNEL,
f"#NewGroup\nGroup = {message.chat.title}(<code>{message.chat.id}</code>)\nMembers Count = <code>{total}</code>\nAdded by - {r_j}", strings("log_bot_added").format(ttl=message.chat.title, cid=message.chat.id, tot=total, r_j=r_j),
) )
await db.add_chat(message.chat.id, message.chat.title) await db.add_chat(message.chat.id, message.chat.title)
if message.chat.id in temp.BANNED_CHATS: if message.chat.id in temp.BANNED_CHATS:
# Inspired from a boat of a banana tree # Inspired from a boat of a banana tree
buttons = [[InlineKeyboardButton("Support", url=f"https://t.me/{SUPPORT_CHAT}")]] buttons = [[InlineKeyboardButton(strings("support_btn"), url=f"https://t.me/{SUPPORT_CHAT}")]]
reply_markup = InlineKeyboardMarkup(buttons) reply_markup = InlineKeyboardMarkup(buttons)
k = await message.reply( 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>", text=strings("chat_not_allowed"),
reply_markup=reply_markup, reply_markup=reply_markup,
) )
@ -163,13 +166,13 @@ async def save_group(bot, message):
return return
buttons = [ buttons = [
[ [
InlineKeyboardButton(" Help", url=f"https://t.me/{temp.U_NAME}?start=help"), InlineKeyboardButton(strings("help_btn"), url=f"https://t.me/{temp.U_NAME}?start=help"),
InlineKeyboardButton("📢 Updates", url="https://t.me/YasirPediaChannel"), InlineKeyboardButton(strings("update_btn"), url="https://t.me/YasirPediaChannel"),
] ]
] ]
reply_markup = InlineKeyboardMarkup(buttons) reply_markup = InlineKeyboardMarkup(buttons)
await message.reply_text( 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>", text=strings("welcome_thanks").format(ttl=message.chat.title),
reply_markup=reply_markup, reply_markup=reply_markup,
) )
else: else:
@ -184,11 +187,11 @@ async def save_group(bot, message):
except: except:
pass pass
try: try:
welcomeimg = await welcomepic(pic, u.first_name, message.chat.title, u.id) welcomeimg = await welcomepic(pic, u.first_name, message.chat.title, u.id, strings)
temp.MELCOW[f"welcome-{message.chat.id}"] = await app.send_photo( temp.MELCOW[f"welcome-{message.chat.id}"] = await app.send_photo(
message.chat.id, message.chat.id,
photo=welcomeimg, photo=welcomeimg,
caption=f"Hai {u.mention}, Selamat datang digrup {message.chat.title}.", caption=strings("capt_welc").format(umention=u.mention, uid=u.id, ttl=message.chat.title),
) )
userspammer = "" userspammer = ""
# Spamwatch Detection # Spamwatch Detection
@ -197,7 +200,7 @@ async def save_group(bot, message):
apispamwatch = (await http.get(f"https://api.spamwat.ch/banlist/{u.id}", headers=headers)).json() apispamwatch = (await http.get(f"https://api.spamwat.ch/banlist/{u.id}", headers=headers)).json()
if not apispamwatch.get("error"): if not apispamwatch.get("error"):
await app.ban_chat_member(message.chat.id, u.id, datetime.now() + timedelta(seconds=30)) await app.ban_chat_member(message.chat.id, u.id, datetime.now() + timedelta(seconds=30))
userspammer += f"<b>#SpamWatch Federation Ban</b>\nUser {u.mention} [<code>{u.id}</code>] has been kicked because <code>{apispamwatch.get('reason')}</code>.\n" userspammer += strings("spamwatch_msg").format(umention=u.mention, uid=u.id, reas=apispamwatch.get("reason"))
except Exception as err: except Exception as err:
LOGGER.error(f"ERROR in Spamwatch Detection. {err}") LOGGER.error(f"ERROR in Spamwatch Detection. {err}")
# Combot API Detection # Combot API Detection
@ -205,7 +208,7 @@ async def save_group(bot, message):
apicombot = (await http.get(f"https://api.cas.chat/check?user_id={u.id}")).json() apicombot = (await http.get(f"https://api.cas.chat/check?user_id={u.id}")).json()
if apicombot.get("ok") == "true": if apicombot.get("ok") == "true":
await app.ban_chat_member(message.chat.id, u.id, datetime.now() + timedelta(seconds=30)) await app.ban_chat_member(message.chat.id, u.id, datetime.now() + timedelta(seconds=30))
userspammer += f"<b>#CAS Federation Ban</b>\nUser {u.mention} [<code>{u.id}</code>] detected as spambot and has been kicked. Powered by <a href='https://api.cas.chat/check?user_id={u.id}'>Combot AntiSpam.</a>" userspammer += strings("combot_msg").format(umention=u.mention, uid=u.id)
except Exception as err: except Exception as err:
LOGGER.error(f"ERROR in Combot API Detection. {err}") LOGGER.error(f"ERROR in Combot API Detection. {err}")
if userspammer != "": if userspammer != "":

View file

@ -9,6 +9,7 @@ import re
from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup
from database.users_chats_db import db from database.users_chats_db import db
from pyrogram import filters from pyrogram import filters
from pyrogram.errors import ChannelPrivate
from misskaty import app, BOT_USERNAME, HELPABLE, BOT_NAME from misskaty import app, BOT_USERNAME, HELPABLE, BOT_NAME
from misskaty.vars import COMMAND_HANDLER, LOG_CHANNEL from misskaty.vars import COMMAND_HANDLER, LOG_CHANNEL
from misskaty.core.message_utils import * from misskaty.core.message_utils import *
@ -69,7 +70,10 @@ keyboard = InlineKeyboardMarkup(
async def start(_, message, strings): async def start(_, message, strings):
if message.chat.type.value != "private": if message.chat.type.value != "private":
if not await db.get_chat(message.chat.id): if not await db.get_chat(message.chat.id):
try:
total = await app.get_chat_members_count(message.chat.id) total = await app.get_chat_members_count(message.chat.id)
except ChannelPrivate:
return await message.chat.leave()
await app.send_message( await app.send_message(
LOG_CHANNEL, LOG_CHANNEL,
strings("newgroup_log").format(jdl=message.chat.title, id=message.chat.id, c=total), strings("newgroup_log").format(jdl=message.chat.title, id=message.chat.id, c=total),