From 63e76023e0da72f69da814948dfd5e9124109216 Mon Sep 17 00:00:00 2001 From: yasirarism <55983182+yasirarism@users.noreply.github.com> Date: Thu, 13 Apr 2023 11:01:04 +0700 Subject: [PATCH] Some Improvement (#47) --- README.md | 30 +++++++++++--- config.env.sample | 12 ++++-- locales/en-US/grup_tools.json | 13 ++++++ locales/en-US/sangmata.json | 6 +-- locales/en-US/ytdl_plugins.json | 2 +- locales/id-ID/grup_tools.json | 13 ++++++ locales/id-ID/sangmata.json | 6 +-- locales/id-ID/ytdl_plugins.json | 2 +- locales/id-JW/grup_tools.json | 13 ++++++ locales/id-JW/sangmata.json | 6 +-- locales/id-JW/web_scraper.json | 2 +- locales/id-JW/ytdl_plugins.json | 2 +- misskaty/core/decorator/permissions.py | 46 ++++++++++----------- misskaty/plugins/admin.py | 56 ++++++++++++++------------ misskaty/plugins/currency.py | 17 ++++---- misskaty/plugins/dev.py | 21 +++++++--- misskaty/plugins/grup_tools.py | 39 +++++++++--------- misskaty/plugins/start_help.py | 6 ++- 18 files changed, 189 insertions(+), 103 deletions(-) create mode 100644 locales/en-US/grup_tools.json create mode 100644 locales/id-ID/grup_tools.json create mode 100644 locales/id-JW/grup_tools.json diff --git a/README.md b/README.md index 2862c9fe..66056f4e 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,13 @@ ## 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 You can check demo this repo in this bot [MissKatyPyro](https://t.me/MissKatyRoBot) ## 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 @@ -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. * `USER_SESSION` : Session string for Userbot. ### 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): ``` @@ -43,8 +43,28 @@ sudo docker run misskaty ``` sudo docker ps ``` +sudo docker stop + +#### 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 ``` ---- diff --git a/config.env.sample b/config.env.sample index 63f927a0..8cf6b318 100644 --- a/config.env.sample +++ b/config.env.sample @@ -1,7 +1,11 @@ +ADMINS=617426792 API_HASH= -DATABASE_NAME= API_ID= -SUPPORT_CHAT=YasirPediaChannel -DATABASE_URI=mongodb+srv:// BOT_TOKEN= -LOG_CHANNEL=-100 +DATABASE_NAME=MissKatyPyro +DATABASE_URI=mongodb+srv:// +LOG_CHANNEL= +SUPPORT_CHAT=YasirPediaChannel +USER_SESSION= +OPENAI_API= +CURRENCY_API= diff --git a/locales/en-US/grup_tools.json b/locales/en-US/grup_tools.json new file mode 100644 index 00000000..5a58ec0d --- /dev/null +++ b/locales/en-US/grup_tools.json @@ -0,0 +1,13 @@ +{ + "sudo_join_msg": "Wow, my cool owner just joined the group!", + "log_bot_added": "#New Group\nGroup = {ttl}({cid})\nNumber of Members = {tot}\nAdded by - {r_j}", + "support_btn": "Support", + "help_btn": "ℹ️ Help", + "update_btn": "📢 Updates", + "chat_not_allowed": "CHAT NOT ALLOWED 🐞\n\nMy owner has banned me from working here! You can contact the owner of this bot..", + "welcome_thanks": "Thank you for adding me to {ttl} ❣️\n\nIf you have any problems or suggestions, you can contact me.", + "capt_welc": "Hi {umention} [{uid}], Welcome to the {ttl} group.", + "combot_msg": "#CAS Federation Ban\nUser {umention} [{uid}] has been detected as a spambot and has been banned. Powered by Combot AntiSpam.", + "spamwatch_msg": "#SpamWatch Federation Ban\nUser {umention} [{uid}] has been banned for {reas}.\n" , + "welcpic_msg": "Welcome {userr} [{id}]" +} \ No newline at end of file diff --git a/locales/en-US/sangmata.json b/locales/en-US/sangmata.json index 86bb0e79..9d3bf82b 100644 --- a/locales/en-US/sangmata.json +++ b/locales/en-US/sangmata.json @@ -1,9 +1,9 @@ { "no_uname": "No Username", "no_last_name": "No Last Name", - "uname_change_msg": "✨ Changed username from {bef} ➡️ {aft}.\n", - "lastname_change_msg": "✨ Changed last name from {bef} ➡️ {aft}.\n", - "firstname_change_msg": "✨ Changed first name from {bef} ➡️ {aft}.\n", + "uname_change_msg": "✨ Changed username from {bef} ➡️ {aft}.\n", + "lastname_change_msg": "✨ Changed last name from {bef} ➡️ {aft}.\n", + "firstname_change_msg": "✨ Changed first name from {bef} ➡️ {aft}.\n", "set_sangmata_help": "Use /{cmd} on, to enable sangmata. If you want disable, you can use off parameter.", "sangmata_already_on": "SangMata already enabled in your groups.", "sangmata_enabled": "Sangmata enabled in your groups.", diff --git a/locales/en-US/ytdl_plugins.json b/locales/en-US/ytdl_plugins.json index 85f2269a..02280c27 100644 --- a/locales/en-US/ytdl_plugins.json +++ b/locales/en-US/ytdl_plugins.json @@ -4,7 +4,7 @@ "no_res": "No result found for `{kweri}`", "dl_btn": "Download", "back": "Back", - "yts_msg": "Published {pub}\n\n❯ Duration: {dur}\n❯ Views: {vi}\n❯ Uploader: {cname}\n\n", + "yts_msg": "Published {pub}\n\n❯ Duration: {dur}\n❯ Views: {vi}\n❯ Uploader: {cname}\n\n", "invalid_link": "Please input a valid YT-DLP Supported URL", "err_parse": "Failed parse URL, check logs..", "wait": "Please wait..", diff --git a/locales/id-ID/grup_tools.json b/locales/id-ID/grup_tools.json new file mode 100644 index 00000000..84effeb3 --- /dev/null +++ b/locales/id-ID/grup_tools.json @@ -0,0 +1,13 @@ +{ + "sudo_join_msg": "Waw, Pemilikku yang keren baru saja bergabung ke grup!", + "log_bot_added": "#GrupBaru\nGrup = {ttl}({cid})\nJumlah Anggota = {tot}\nDitambahkan oleh - {r_j}", + "support_btn": "Dukungan", + "help_btn": "ℹ️ Bantuan", + "update_btn": "📢 Updates", + "chat_not_allowed": "CHAT TIDAK DIIJINKAN 🐞\n\nPemilik saya sudah melarang saya untuk bekerja disini! Kamu bisa menghubungi pemilik bot ini..", + "welcome_thanks": "Terimakasih sudah menambahkan saya di {ttl} ❣️\n\nJika ada kendala atau saran bisa kontak ke saya.", + "capt_welc": "Hai {umention} [{uid}], Selamat datang digrup {ttl}.", + "combot_msg": "#CAS Federation Ban\nPengguna {umention} [{uid}] terdeteksi sebagai spambot dan telah dikeluarkan. Powered by Combot AntiSpam.", + "spamwatch_msg": "#SpamWatch Federation Ban\nPengguna {umention} [{uid}] telah dikeluarkan karena {reas}.\n", + "welcpic_msg": "Selamat Datang {userr} [{id}]" +} \ No newline at end of file diff --git a/locales/id-ID/sangmata.json b/locales/id-ID/sangmata.json index 60acc7ba..0d372357 100644 --- a/locales/id-ID/sangmata.json +++ b/locales/id-ID/sangmata.json @@ -1,9 +1,9 @@ { "no_uname": "Tanpa Username", "no_last_name": "Tanpa Nama Belakang", - "uname_change_msg": "✨ Mengubah nama depan dari {bef} ➡️ {aft}.\n", - "lastname_change_msg": "✨ Mengubah nama belakang dari {bef} ➡️ {aft}.\n", - "firstname_change_msg": "✨ Mengubah nama depan dari {bef} ➡️ {aft}.\n", + "uname_change_msg": "✨ Mengubah nama depan dari {bef} ➡️ {aft}.\n", + "lastname_change_msg": "✨ Mengubah nama belakang dari {bef} ➡️ {aft}.\n", + "firstname_change_msg": "✨ Mengubah nama depan dari {bef} ➡️ {aft}.\n", "set_sangmata_help": "Gunakan /{cmd} on, untuk mengaktifkan sangmata. Jika Anda ingin menonaktifkan, Anda dapat menggunakan parameter off.", "sangmata_already_on": "SangMata telah diaktifkan di grup Anda.", "sangmata_enabled": "Sangmata diaktifkan di grup Anda.", diff --git a/locales/id-ID/ytdl_plugins.json b/locales/id-ID/ytdl_plugins.json index 88605d0b..37a66173 100644 --- a/locales/id-ID/ytdl_plugins.json +++ b/locales/id-ID/ytdl_plugins.json @@ -4,7 +4,7 @@ "no_res": "Tidak ada hasil yang ditemukan untuk `{kweri}`", "dl_btn": "Unduh", "kembali": "kembali", - "yts_msg": "Dipublikasikan {pub}\n\n❯ Durasi: {dur}\n❯ Penayangan: {vi}\n❯ Pengunggah:< /b> {cname}\n\n", + "yts_msg": "Dipublikasikan {pub}\n\n❯ Durasi: {dur}\n❯ Penayangan: {vi}\n❯ Pengunggah: {cname}\n\n", "invalid_link": "Masukkan URL yang Didukung YT-DLP yang valid", "err_parse": "Gagal menguraikan URL, periksa log..", "tunggu": "Harap tunggu..", diff --git a/locales/id-JW/grup_tools.json b/locales/id-JW/grup_tools.json new file mode 100644 index 00000000..aa0ef5d2 --- /dev/null +++ b/locales/id-JW/grup_tools.json @@ -0,0 +1,13 @@ +{ + "sudo_join_msg": "Waw, Pemilikku sing ganteng gabung menyang grup!", + "log_bot_added": "#GrupBaru\nGrup = {ttl}({cid})\nJumlah Anggota = {tot}\nDitambahake dening - {r_j}", + "support_btn": "Dukungan", + "help_btn": "ℹ️ Pitulungan", + "update_btn": "📢 Nganyari", + "chat_not_allowed": "CHAT ORA DIIJINKE 🐞\n\nPemilik ku wes nglarang aku kerja neng kene! Sampeyan bisa hubungi pemilik bot iki..", + "welcome_thanks": "Terimakasih wis nambahi saya ing {ttl} ❣️\n\nYen ana kendal utawa saran bisa hubungi saya.", + "capt_welc": "Hai {umention} [{uid}], sugeng rawuh ing grup {ttl}.", + "combot_msg": "Larangan Federasi #CAS\nPengguna {umention} [{uid}] dideteksi minangka spambot lan wis dibusak. Powered by Combot AntiSpam.", + "spamwatch_msg": "Larangan Federasi #SpamWatch\nPengguna {umention} [{uid}] wis dibusak amarga {reas}.\n" , + "welcpic_msg": "Sugeng Rawuh {userr} [{id}]" +} \ No newline at end of file diff --git a/locales/id-JW/sangmata.json b/locales/id-JW/sangmata.json index c16d9edd..e79416c4 100644 --- a/locales/id-JW/sangmata.json +++ b/locales/id-JW/sangmata.json @@ -1,9 +1,9 @@ { "no_uname": "Ora Jeneng Panganggo", "no_last_name": "Ora Ana Jeneng mburi", - "uname_change_msg": "✨ Jeneng pangguna diganti saka {bef} ➡️ {aft}.\n", - "lastname_change_msg": "✨ Ganti jeneng mburi saka {bef} ➡️ {aft}.\n", - "firstname_change_msg": "✨ Ganti jeneng ngarep saka {bef} ➡️ {aft}.\n", + "uname_change_msg": "✨ Jeneng pangguna diganti saka {bef} ➡️ {aft}.\n", + "lastname_change_msg": "✨ Ganti jeneng mburi saka {bef} ➡️ {aft}.\n", + "firstname_change_msg": "✨ Ganti jeneng ngarep saka {bef} ➡️ {aft}.\n", "set_sangmata_help": "Gunakake /{cmd} on, kanggo ngaktifake sangmata. Yen sampeyan pengin mateni, sampeyan bisa nggunakake parameter mati.", "sangmata_already_on": "SangMata wis diaktifake ing grup sampeyan.", "sangmata_enabled": "Sangmata diaktifake ing grup sampeyan.", diff --git a/locales/id-JW/web_scraper.json b/locales/id-JW/web_scraper.json index 99dd9162..f03b6d25 100644 --- a/locales/id-JW/web_scraper.json +++ b/locales/id-JW/web_scraper.json @@ -6,7 +6,7 @@ "back_btn": "↩️ Mbalik", "dl_text": "⬇️ Unduh", "cat_text": "💠 Kategori", - "kualitas": "Kualitas", + "kualitas": "Kwalitas", "ex_data": "👇 Ekstrak Data ", "unauth": "Tombol iki dudu kanggo sampeyan..", "invalid_cb": "Data callback ora valid, kirim printah maneh..", diff --git a/locales/id-JW/ytdl_plugins.json b/locales/id-JW/ytdl_plugins.json index 4170b220..62d82260 100644 --- a/locales/id-JW/ytdl_plugins.json +++ b/locales/id-JW/ytdl_plugins.json @@ -4,7 +4,7 @@ "no_res": "Ora ana asil kanggo `{kweri}`", "dl_btn": "Ngunduh", "back": "Mbalik", - "yts_msg": "Diterbitake {pub}\n\n❯ Duration: {dur}\n❯ Ndeleng: {vi}\n❯ Uploader:< /b> {cname}\n\n", + "yts_msg": "Diterbitake {pub}\n\n❯ Duration: {dur}\n❯ Ndeleng: {vi}\n❯ Uploader: {cname}\n\n", "invalid_link": "Mangga lebokna URL Dhukungan YT-DLP sing valid", "err_parse": "Gagal ngurai URL, mriksa log..", "ngenteni": "Tulung ngenteni..", diff --git a/misskaty/core/decorator/permissions.py b/misskaty/core/decorator/permissions.py index a7ee26c8..568d17bd 100644 --- a/misskaty/core/decorator/permissions.py +++ b/misskaty/core/decorator/permissions.py @@ -17,27 +17,27 @@ async def member_permissions(chat_id: int, user_id: int): perms = [] try: member = (await app.get_chat_member(chat_id, user_id)).privileges - except Exception: + if member.can_post_messages: + perms.append("can_post_messages") + if member.can_edit_messages: + perms.append("can_edit_messages") + if member.can_delete_messages: + perms.append("can_delete_messages") + if member.can_restrict_members: + perms.append("can_restrict_members") + if member.can_promote_members: + perms.append("can_promote_members") + if member.can_change_info: + perms.append("can_change_info") + if member.can_invite_users: + perms.append("can_invite_users") + if member.can_pin_messages: + perms.append("can_pin_messages") + if member.can_manage_video_chats: + perms.append("can_manage_video_chats") + return perms + except: return [] - if member.can_post_messages: - perms.append("can_post_messages") - if member.can_edit_messages: - perms.append("can_edit_messages") - if member.can_delete_messages: - perms.append("can_delete_messages") - if member.can_restrict_members: - perms.append("can_restrict_members") - if member.can_promote_members: - perms.append("can_promote_members") - if member.can_change_info: - perms.append("can_change_info") - if member.can_invite_users: - perms.append("can_invite_users") - if member.can_pin_messages: - perms.append("can_pin_messages") - if member.can_manage_video_chats: - perms.append("can_manage_video_chats") - return perms async def check_perms( @@ -126,12 +126,8 @@ async def check_perms( else: sender = message.reply_text chat = message.chat - # TODO: Cache all admin permissions in db. if not message.from_user: - # For anonymous admins - if message.sender_chat and message.sender_chat.id == message.chat.id: - return True - return False + return bool(message.sender_chat and message.sender_chat.id == message.chat.id) user = await chat.get_member(message.from_user.id) if user.status == enums.ChatMemberStatus.OWNER: return True diff --git a/misskaty/plugins/admin.py b/misskaty/plugins/admin.py index 2571124d..28f44e97 100644 --- a/misskaty/plugins/admin.py +++ b/misskaty/plugins/admin.py @@ -5,7 +5,7 @@ from time import time from pyrogram import enums, filters 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 misskaty import app @@ -366,27 +366,31 @@ async def promoteFunc(client, message, strings): if message.command[0][0] == "f": await message.chat.promote_member( user_id=user_id, - can_change_info=bot.privileges.can_change_info, - can_invite_users=bot.privileges.can_invite_users, - can_delete_messages=bot.privileges.can_delete_messages, - can_restrict_members=bot.privileges.can_restrict_members, - can_pin_messages=bot.privileges.can_pin_messages, - can_promote_members=bot.privileges.can_promote_members, - can_manage_chat=bot.privileges.can_manage_chat, - can_manage_video_chats=bot.privileges.can_manage_video_chats, + privileges=ChatPrivileges( + can_change_info=bot.privileges.can_change_info, + can_invite_users=bot.privileges.can_invite_users, + can_delete_messages=bot.privileges.can_delete_messages, + can_restrict_members=bot.privileges.can_restrict_members, + can_pin_messages=bot.privileges.can_pin_messages, + can_promote_members=bot.privileges.can_promote_members, + can_manage_chat=bot.privileges.can_manage_chat, + can_manage_video_chats=bot.privileges.can_manage_video_chats, + ), ) return await message.reply_text(strings("full_promote").format(umention=umention)) await message.chat.promote_member( user_id=user_id, - can_change_info=False, - can_invite_users=bot.privileges.can_invite_users, - can_delete_messages=bot.privileges.can_delete_messages, - can_restrict_members=bot.privileges.can_restrict_members, - can_pin_messages=bot.privileges.can_pin_messages, - can_promote_members=False, - can_manage_chat=bot.privileges.can_manage_chat, - can_manage_video_chats=bot.privileges.can_manage_video_chats, + privileges=ChatPrivileges( + can_change_info=False, + can_invite_users=bot.privileges.can_invite_users, + can_delete_messages=bot.privileges.can_delete_messages, + can_restrict_members=bot.privileges.can_restrict_members, + can_pin_messages=bot.privileges.can_pin_messages, + can_promote_members=False, + can_manage_chat=bot.privileges.can_manage_chat, + can_manage_video_chats=bot.privileges.can_manage_video_chats, + ), ) await message.reply_text(strings("normal_promote").format(umention=umention)) @@ -408,14 +412,16 @@ async def demote(client, message, strings): return await message.reply_text(strings("demote_sudo_err")) await message.chat.promote_member( user_id=user_id, - can_change_info=False, - can_invite_users=False, - can_delete_messages=False, - can_restrict_members=False, - can_pin_messages=False, - can_promote_members=False, - can_manage_chat=False, - can_manage_video_chats=False, + privileges=ChatPrivileges( + can_change_info=False, + can_invite_users=False, + can_delete_messages=False, + can_restrict_members=False, + can_pin_messages=False, + can_promote_members=False, + can_manage_chat=False, + can_manage_video_chats=False, + ), ) umention = (await app.get_users(user_id)).mention await message.reply_text(f"Demoted! {umention}") diff --git a/misskaty/plugins/currency.py b/misskaty/plugins/currency.py index f294a577..cb20ff24 100644 --- a/misskaty/plugins/currency.py +++ b/misskaty/plugins/currency.py @@ -18,15 +18,18 @@ LOGGER = logging.getLogger(__name__) @app.on_message(filters.command(["currency"], COMMAND_HANDLER)) async def currency(c: Client, m: Message): if CURRENCY_API is None: - return await kirimPesan(m, f"Oops!!get the API from " "HERE " "& add it to config vars (CURRENCY_API)", disable_web_page_preview=True) - if len(m.text.split()) == 4: - teks = m.text.split() - amount = teks[1] - currency_from = teks[2] - currency_to = teks[3] - else: + return await kirimPesan( + m, + "Oops!!get the API from HERE & add it to config vars (CURRENCY_API)", + 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() + amount = teks[1] + currency_from = teks[2] + currency_to = teks[3] if amount.isdigit(): url = f"https://v6.exchangerate-api.com/v6/{CURRENCY_API}/" f"pair/{currency_from}/{currency_to}/{amount}" try: diff --git a/misskaty/plugins/dev.py b/misskaty/plugins/dev.py index 9bab0594..b723c24e 100644 --- a/misskaty/plugins/dev.py +++ b/misskaty/plugins/dev.py @@ -40,6 +40,9 @@ __HELP__ = """ /json - Send structure message Telegram in JSON using Pyrogram Style. """ +var = {} +teskode = {} + async def edit_or_reply(msg, **kwargs): 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() async def log_file(bot, message, strings): """Send log file""" - try: + msg = await kirimPesan(message, "Reading bot logs ...") + if len(message.command) == 1: await message.reply_document( "MissKatyLogs.txt", caption="Log Bot MissKatyPyro", @@ -66,9 +70,11 @@ async def log_file(bot, message, strings): ] ), ) - except: - err = traceback.format_exc() - await message.reply(str(err)) + await hapusPesan(msg) + elif len(message.command) == 2: + val = message.text.split() + tail = await shell_exec(f"tail -n {val[1]} -v MissKatyLogs.txt") + await editPesan(msg, f"
{html.escape(tail[0])}
") @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, "humantime": humantime, "m": message, + "var": var, + "app": app, + "teskode": teskode, "re": re, "os": os, "asyncio": asyncio, @@ -205,6 +214,8 @@ async def cmd_eval(self, message: types.Message, strings) -> Optional[str]: "http": http, "replied": message.reply_to_message, } + eval_vars.update(var) + eval_vars.update(teskode) try: return "", await meval(code, globals(), **eval_vars) 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) except: el_str = "1s" - if el_str == "" or el_str is None: + if not el_str or el_str is None: el_str = "0.1s" out = out_buf.getvalue() diff --git a/misskaty/plugins/grup_tools.py b/misskaty/plugins/grup_tools.py index 28cf12f9..16f52334 100644 --- a/misskaty/plugins/grup_tools.py +++ b/misskaty/plugins/grup_tools.py @@ -14,6 +14,7 @@ from misskaty import BOT_USERNAME, app from misskaty.core.decorator.ratelimiter import ratelimiter from misskaty.core.decorator.errors import asyncify, capture_err 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 utils import temp @@ -47,14 +48,14 @@ def draw_multiple_line_text(image, text, font, text_start_height): @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 = 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("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, chat, font, 47) 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])) -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: return user = member.new_chat_member.user if member.new_chat_member else member.from_user if user.id in SUDO: await c.send_message( member.chat.id, - "Waw, owner ku yang keren baru saja bergabung ke grup!", + strings("sudo_join_msg"), ) return elif user.is_bot: @@ -98,7 +100,7 @@ async def member_has_joined(c: app, member: ChatMemberUpdated): except AttributeError: pic = "assets/profilepic.png" 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( member.chat.id, 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() if not apispamwatch.get("error"): 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" + userspammer += strings("spamwatch_msg").format(umention=user.mention, uid=user.id, reas=apispamwatch.get("reason")) except Exception as err: LOGGER.error(f"ERROR in Spamwatch Detection. {err}") # 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() if apicombot.get("ok") == "true": 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." + userspammer += strings("combot_msg").format(umention=user.mention, uid=user.id) except Exception as err: LOGGER.error(f"ERROR in Combot API Detection. {err}") if userspammer != "": @@ -134,7 +136,8 @@ async def member_has_joined(c: app, member: ChatMemberUpdated): @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] if temp.ME in r_j_check: 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" await bot.send_message( LOG_CHANNEL, - f"#NewGroup\nGroup = {message.chat.title}({message.chat.id})\nMembers Count = {total}\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) 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(strings("support_btn"), 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..", + text=strings("chat_not_allowed"), reply_markup=reply_markup, ) @@ -163,13 +166,13 @@ async def save_group(bot, message): return buttons = [ [ - InlineKeyboardButton("ℹ️ Help", url=f"https://t.me/{temp.U_NAME}?start=help"), - InlineKeyboardButton("📢 Updates", url="https://t.me/YasirPediaChannel"), + InlineKeyboardButton(strings("help_btn"), url=f"https://t.me/{temp.U_NAME}?start=help"), + InlineKeyboardButton(strings("update_btn"), 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.", + text=strings("welcome_thanks").format(ttl=message.chat.title), reply_markup=reply_markup, ) else: @@ -184,11 +187,11 @@ async def save_group(bot, message): except: pass 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( message.chat.id, 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 = "" # 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() if not apispamwatch.get("error"): await app.ban_chat_member(message.chat.id, u.id, datetime.now() + timedelta(seconds=30)) - userspammer += f"#SpamWatch Federation Ban\nUser {u.mention} [{u.id}] has been kicked because {apispamwatch.get('reason')}.\n" + userspammer += strings("spamwatch_msg").format(umention=u.mention, uid=u.id, reas=apispamwatch.get("reason")) except Exception as err: LOGGER.error(f"ERROR in Spamwatch Detection. {err}") # 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() if apicombot.get("ok") == "true": await app.ban_chat_member(message.chat.id, u.id, datetime.now() + timedelta(seconds=30)) - userspammer += f"#CAS Federation Ban\nUser {u.mention} [{u.id}] detected as spambot and has been kicked. Powered by Combot AntiSpam." + userspammer += strings("combot_msg").format(umention=u.mention, uid=u.id) except Exception as err: LOGGER.error(f"ERROR in Combot API Detection. {err}") if userspammer != "": diff --git a/misskaty/plugins/start_help.py b/misskaty/plugins/start_help.py index e4ac0318..58aed9e9 100644 --- a/misskaty/plugins/start_help.py +++ b/misskaty/plugins/start_help.py @@ -9,6 +9,7 @@ import re from pyrogram.types import InlineKeyboardButton, InlineKeyboardMarkup from database.users_chats_db import db from pyrogram import filters +from pyrogram.errors import ChannelPrivate from misskaty import app, BOT_USERNAME, HELPABLE, BOT_NAME from misskaty.vars import COMMAND_HANDLER, LOG_CHANNEL from misskaty.core.message_utils import * @@ -69,7 +70,10 @@ keyboard = InlineKeyboardMarkup( async def start(_, message, strings): if message.chat.type.value != "private": if not await db.get_chat(message.chat.id): - total = await app.get_chat_members_count(message.chat.id) + try: + total = await app.get_chat_members_count(message.chat.id) + except ChannelPrivate: + return await message.chat.leave() await app.send_message( LOG_CHANNEL, strings("newgroup_log").format(jdl=message.chat.title, id=message.chat.id, c=total),