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>
## 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 <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=
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=

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_last_name": "<code>No Last Name</code>",
"uname_change_msg": "✨ Changed username from {bef} ➡️ <code>{aft}</code>.\n",
"lastname_change_msg": "✨ Changed last name from {bef} ➡️ <code>{aft}</code>.\n",
"firstname_change_msg": "✨ Changed first name from {bef} ➡️ <code>{aft}</code>.\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 <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_enabled": "Sangmata enabled in your groups.",

View file

@ -4,7 +4,7 @@
"no_res": "No result found for `{kweri}`",
"dl_btn": "Download",
"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",
"err_parse": "Failed parse URL, check logs..",
"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_last_name": "<code>Tanpa Nama Belakang</code>",
"uname_change_msg": "✨ Mengubah nama depan dari {bef} ➡️ <code>{aft}</code>.\n",
"lastname_change_msg": "✨ Mengubah nama belakang dari {bef} ➡️ <code>{aft}</code>.\n",
"firstname_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} ➡️ {aft}.\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.",
"sangmata_already_on": "SangMata telah 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}`",
"dl_btn": "Unduh",
"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",
"err_parse": "Gagal menguraikan URL, periksa log..",
"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_last_name": "<kode>Ora Ana Jeneng mburi</code>",
"uname_change_msg": "✨ Jeneng pangguna diganti saka {bef} ➡️ <code>{aft}</code>.\n",
"lastname_change_msg": "✨ Ganti jeneng mburi saka {bef} ➡️ <code>{aft}</code>.\n",
"firstname_change_msg": "✨ Ganti jeneng ngarep saka {bef} ➡️ <code>{aft}</code>.\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 <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_enabled": "Sangmata diaktifake ing grup sampeyan.",

View file

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

View file

@ -4,7 +4,7 @@
"no_res": "Ora ana asil kanggo `{kweri}`",
"dl_btn": "Ngunduh",
"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",
"err_parse": "Gagal ngurai URL, mriksa log..",
"ngenteni": "Tulung ngenteni..",

View file

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

View file

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

View file

@ -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"<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:
teks = m.text.split()
amount = teks[1]
currency_from = teks[2]
currency_to = teks[3]
else:
return await kirimPesan(
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()
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:

View file

@ -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, "<b>Reading bot logs ...</b>")
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"<pre language='bash'>{html.escape(tail[0])}</pre>")
@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()

View file

@ -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"<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:
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"<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:
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}(<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)
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="<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,
)
@ -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"<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,
)
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"<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:
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"<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:
LOGGER.error(f"ERROR in Combot API Detection. {err}")
if userspammer != "":

View file

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