|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import asyncio |
|
|
|
from telethon import events |
|
from telethon.errors.rpcerrorlist import UserNotParticipantError |
|
from telethon.tl.functions.channels import GetParticipantRequest |
|
from telethon.utils import get_display_name |
|
|
|
from pyUltroid.dB import stickers |
|
from pyUltroid.dB.echo_db import check_echo |
|
from pyUltroid.dB.forcesub_db import get_forcesetting |
|
from pyUltroid.dB.gban_mute_db import is_gbanned |
|
from pyUltroid.dB.greetings_db import get_goodbye, get_welcome, must_thank |
|
from pyUltroid.dB.nsfw_db import is_profan |
|
from pyUltroid.fns.helper import inline_mention |
|
from pyUltroid.fns.tools import async_searcher, create_tl_btn, get_chatbot_reply |
|
|
|
try: |
|
from ProfanityDetector import detector |
|
except ImportError: |
|
detector = None |
|
from . import LOG_CHANNEL, LOGS, asst, get_string, types, udB, ultroid_bot |
|
from ._inline import something |
|
|
|
|
|
@ultroid_bot.on(events.ChatAction()) |
|
async def Function(event): |
|
try: |
|
await DummyHandler(event) |
|
except Exception as er: |
|
LOGS.exception(er) |
|
|
|
|
|
async def DummyHandler(ult): |
|
|
|
key = udB.get_key("CLEANCHAT") or [] |
|
if ult.chat_id in key: |
|
try: |
|
await ult.delete() |
|
except BaseException: |
|
pass |
|
|
|
|
|
if must_thank(ult.chat_id): |
|
chat_count = (await ult.client.get_participants(ult.chat_id, limit=0)).total |
|
if chat_count % 100 == 0: |
|
stik_id = chat_count / 100 - 1 |
|
sticker = stickers[stik_id] |
|
await ult.respond(file=sticker) |
|
|
|
if ( |
|
udB.get_key("FORCESUB") |
|
and ((ult.user_joined or ult.user_added)) |
|
and get_forcesetting(ult.chat_id) |
|
): |
|
user = await ult.get_user() |
|
if not user.bot: |
|
joinchat = get_forcesetting(ult.chat_id) |
|
try: |
|
await ultroid_bot(GetParticipantRequest(int(joinchat), user.id)) |
|
except UserNotParticipantError: |
|
await ultroid_bot.edit_permissions( |
|
ult.chat_id, user.id, send_messages=False |
|
) |
|
res = await ultroid_bot.inline_query( |
|
asst.me.username, f"fsub {user.id}_{joinchat}" |
|
) |
|
await res[0].click(ult.chat_id, reply_to=ult.action_message.id) |
|
|
|
if ult.user_joined or ult.added_by: |
|
user = await ult.get_user() |
|
chat = await ult.get_chat() |
|
|
|
if udB.get_key("ULTROID_BANS"): |
|
try: |
|
is_banned = await async_searcher( |
|
"https://bans.ultroid.tech/api/status", |
|
json={"userId": user.id}, |
|
post=True, |
|
re_json=True, |
|
) |
|
if is_banned["is_banned"]: |
|
await ult.client.edit_permissions( |
|
chat.id, |
|
user.id, |
|
view_messages=False, |
|
) |
|
await ult.respond( |
|
f'**@UltroidBans:** Banned user detected and banned!\n`{str(is_banned)}`.\nBan reason: {is_banned["reason"]}', |
|
) |
|
|
|
except BaseException: |
|
pass |
|
reason = is_gbanned(user.id) |
|
if reason and chat.admin_rights: |
|
try: |
|
await ult.client.edit_permissions( |
|
chat.id, |
|
user.id, |
|
view_messages=False, |
|
) |
|
gban_watch = get_string("can_1").format(inline_mention(user), reason) |
|
await ult.reply(gban_watch) |
|
except Exception as er: |
|
LOGS.exception(er) |
|
|
|
|
|
elif get_welcome(ult.chat_id): |
|
user = await ult.get_user() |
|
chat = await ult.get_chat() |
|
title = chat.title or "this chat" |
|
count = ( |
|
chat.participants_count |
|
or (await ult.client.get_participants(chat, limit=0)).total |
|
) |
|
mention = inline_mention(user) |
|
name = user.first_name |
|
fullname = get_display_name(user) |
|
uu = user.username |
|
username = f"@{uu}" if uu else mention |
|
wel = get_welcome(ult.chat_id) |
|
msgg = wel["welcome"] |
|
med = wel["media"] or None |
|
userid = user.id |
|
msg = None |
|
if msgg: |
|
msg = msgg.format( |
|
mention=mention, |
|
group=title, |
|
count=count, |
|
name=name, |
|
fullname=fullname, |
|
username=username, |
|
userid=userid, |
|
) |
|
if wel.get("button"): |
|
btn = create_tl_btn(wel["button"]) |
|
await something(ult, msg, med, btn) |
|
elif msg: |
|
send = await ult.reply( |
|
msg, |
|
file=med, |
|
) |
|
await asyncio.sleep(150) |
|
await send.delete() |
|
else: |
|
await ult.reply(file=med) |
|
elif (ult.user_left or ult.user_kicked) and get_goodbye(ult.chat_id): |
|
user = await ult.get_user() |
|
chat = await ult.get_chat() |
|
title = chat.title or "this chat" |
|
count = ( |
|
chat.participants_count |
|
or (await ult.client.get_participants(chat, limit=0)).total |
|
) |
|
mention = inline_mention(user) |
|
name = user.first_name |
|
fullname = get_display_name(user) |
|
uu = user.username |
|
username = f"@{uu}" if uu else mention |
|
wel = get_goodbye(ult.chat_id) |
|
msgg = wel["goodbye"] |
|
med = wel["media"] |
|
userid = user.id |
|
msg = None |
|
if msgg: |
|
msg = msgg.format( |
|
mention=mention, |
|
group=title, |
|
count=count, |
|
name=name, |
|
fullname=fullname, |
|
username=username, |
|
userid=userid, |
|
) |
|
if wel.get("button"): |
|
btn = create_tl_btn(wel["button"]) |
|
await something(ult, msg, med, btn) |
|
elif msg: |
|
send = await ult.reply( |
|
msg, |
|
file=med, |
|
) |
|
await asyncio.sleep(150) |
|
await send.delete() |
|
else: |
|
await ult.reply(file=med) |
|
|
|
|
|
@ultroid_bot.on(events.NewMessage(incoming=True)) |
|
async def chatBot_replies(e): |
|
sender = await e.get_sender() |
|
if not isinstance(sender, types.User) or sender.bot: |
|
return |
|
if check_echo(e.chat_id, e.sender_id): |
|
try: |
|
await e.respond(e.message) |
|
except Exception as er: |
|
LOGS.exception(er) |
|
key = udB.get_key("CHATBOT_USERS") or {} |
|
if e.text and key.get(e.chat_id) and sender.id in key[e.chat_id]: |
|
msg = await get_chatbot_reply(e.message.message) |
|
if msg: |
|
sleep = udB.get_key("CHATBOT_SLEEP") or 1.5 |
|
await asyncio.sleep(sleep) |
|
await e.reply(msg) |
|
chat = await e.get_chat() |
|
if e.is_group and sender.username: |
|
await uname_stuff(e.sender_id, sender.username, sender.first_name) |
|
elif e.is_private and chat.username: |
|
await uname_stuff(e.sender_id, chat.username, chat.first_name) |
|
if detector and is_profan(e.chat_id) and e.text: |
|
x, y = detector(e.text) |
|
if y: |
|
await e.delete() |
|
|
|
|
|
@ultroid_bot.on(events.Raw(types.UpdateUserName)) |
|
async def uname_change(e): |
|
await uname_stuff(e.user_id, e.usernames[0] if e.usernames else None, e.first_name) |
|
|
|
|
|
async def uname_stuff(id, uname, name): |
|
if udB.get_key("USERNAME_LOG"): |
|
old_ = udB.get_key("USERNAME_DB") or {} |
|
old = old_.get(id) |
|
|
|
if old and old == uname: |
|
return |
|
if old and uname: |
|
await asst.send_message( |
|
LOG_CHANNEL, |
|
get_string("can_2").format(old, uname), |
|
) |
|
elif old: |
|
await asst.send_message( |
|
LOG_CHANNEL, |
|
get_string("can_3").format(f"[{name}](tg://user?id={id})", old), |
|
) |
|
elif uname: |
|
await asst.send_message( |
|
LOG_CHANNEL, |
|
get_string("can_4").format(f"[{name}](tg://user?id={id})", uname), |
|
) |
|
|
|
old_[id] = uname |
|
udB.set_key("USERNAME_DB", old_) |
|
|