| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | 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_) |
| |
|