| | |
| | |
| | |
| | |
| | |
| | |
| | """ |
| | ✘ Commands Available - |
| | |
| | • `{i}fsub <chat username><id>` |
| | Enable ForceSub in Used Chat ! |
| | |
| | • `{i}checkfsub` |
| | Check/Get Active ForceSub Setting of Used Chat. |
| | |
| | • `{i}remfsub` |
| | Remove ForceSub from Used Chat ! |
| | |
| | Note - You Need to be Admin in Both Channel/Chats |
| | in order to Use ForceSubscribe. |
| | """ |
| |
|
| | import re |
| |
|
| | from telethon.errors.rpcerrorlist import ChatAdminRequiredError, UserNotParticipantError |
| | from telethon.tl.custom import Button |
| | from telethon.tl.functions.channels import GetParticipantRequest |
| | from telethon.tl.functions.messages import ExportChatInviteRequest |
| | from telethon.tl.types import ( |
| | Channel, |
| | ChannelParticipantBanned, |
| | ChannelParticipantLeft, |
| | User, |
| | ) |
| |
|
| | from pyUltroid.dB.forcesub_db import add_forcesub, get_forcesetting, rem_forcesub |
| |
|
| | from . import ( |
| | LOGS, |
| | asst, |
| | callback, |
| | events, |
| | get_string, |
| | in_pattern, |
| | inline_mention, |
| | udB, |
| | ultroid_bot, |
| | ultroid_cmd, |
| | ) |
| |
|
| | CACHE = {} |
| |
|
| |
|
| | @ultroid_cmd(pattern="fsub( (.*)|$)", admins_only=True, groups_only=True) |
| | async def addfor(e): |
| | match = e.pattern_match.group(1).strip() |
| | if not match: |
| | return await e.eor(get_string("fsub_1"), time=5) |
| | try: |
| | match = await e.client.parse_id(match) |
| | except BaseException: |
| | return await e.eor(get_string("fsub_2"), time=5) |
| | add_forcesub(e.chat_id, match) |
| | await e.eor("Added ForceSub in This Chat !") |
| | ultroid_bot.add_handler(force_sub, events.NewMessage(incoming=True)) |
| |
|
| |
|
| | @ultroid_cmd(pattern="remfsub$") |
| | async def remor(e): |
| | res = rem_forcesub(e.chat_id) |
| | if not res: |
| | return await e.eor(get_string("fsub_3"), time=5) |
| | await e.eor("Removed ForceSub...") |
| |
|
| |
|
| | @ultroid_cmd(pattern="checkfsub$") |
| | async def getfsr(e): |
| | res = get_forcesetting(e.chat_id) |
| | if not res: |
| | return await e.eor("ForceSub is Not Active In This Chat !", time=5) |
| | cha = await e.client.get_entity(int(res)) |
| | await e.eor(f"**ForceSub Status** : `Active`\n- **{cha.title}** `({res})`") |
| |
|
| |
|
| | @in_pattern("fsub( (.*)|$)", owner=True) |
| | async def fcall(e): |
| | match = e.pattern_match.group(1).strip() |
| | spli = match.split("_") |
| | user = await ultroid_bot.get_entity(int(spli[0])) |
| | cl = await ultroid_bot.get_entity(int(spli[1])) |
| | text = f"Hi {inline_mention(user)}, You Need to Join" |
| | text += f" {cl.title} in order to Chat in this Group." |
| | el = ( |
| | f"https://t.me/{cl.username}" |
| | if cl.username |
| | else (await ultroid_bot(ExportChatInviteRequest(cl))).link |
| | ) |
| |
|
| | res = [ |
| | await e.builder.article( |
| | title="forcesub", |
| | text=text, |
| | buttons=[ |
| | [Button.url(text=get_string("fsub_4"), url=el)], |
| | [Button.inline(get_string("fsub_5"), data=f"unm_{match}")], |
| | ], |
| | ) |
| | ] |
| | await e.answer(res) |
| |
|
| |
|
| | @callback(re.compile("unm_(.*)")) |
| | async def diesoon(e): |
| | match = (e.data_match.group(1)).decode("UTF-8") |
| | spli = match.split("_") |
| | if e.sender_id != int(spli[0]): |
| | return await e.answer(get_string("fsub_7"), alert=True) |
| | try: |
| | values = await ultroid_bot(GetParticipantRequest(int(spli[1]), int(spli[0]))) |
| | if isinstance(values.participant, ChannelParticipantLeft) or ( |
| | isinstance(values.participant, ChannelParticipantBanned) and values.left |
| | ): |
| | raise UserNotParticipantError("") |
| | except UserNotParticipantError: |
| | return await e.answer( |
| | "Please Join That Channel !\nThen Click This Button !", alert=True |
| | ) |
| | await ultroid_bot.edit_permissions( |
| | e.chat_id, int(spli[0]), send_messages=True, until_date=None |
| | ) |
| | await e.edit(get_string("fsub_8")) |
| |
|
| |
|
| | async def force_sub(ult): |
| | if not udB.get_key("FORCESUB"): |
| | return |
| | user = await ult.get_sender() |
| | joinchat = get_forcesetting(ult.chat_id) |
| | if (not joinchat) or (isinstance(user, User) and user.bot): |
| | return |
| | if CACHE.get(ult.chat_id): |
| | if CACHE[ult.chat_id].get(user.id): |
| | CACHE[ult.chat_id].update({user.id: CACHE[ult.chat_id][user.id] + 1}) |
| | else: |
| | CACHE[ult.chat_id].update({user.id: 1}) |
| | else: |
| | CACHE.update({ult.chat_id: {user.id: 1}}) |
| | count = CACHE[ult.chat_id][user.id] |
| | if count == 11: |
| | CACHE[ult.chat_id][user.id] = 1 |
| | return |
| | if count in range(2, 11): |
| | return |
| | try: |
| | await ultroid_bot.get_permissions(int(joinchat), user.id) |
| | return |
| | except UserNotParticipantError: |
| | pass |
| | if isinstance(user, Channel): |
| | try: |
| | await ultroid_bot.edit_permissions( |
| | ult.chat_id, user.id, view_messages=False |
| | ) |
| | return |
| | except BaseException as er: |
| | LOGS.exception(er) |
| | try: |
| | await ultroid_bot.edit_permissions(ult.chat_id, user.id, send_messages=False) |
| | except ChatAdminRequiredError: |
| | return |
| | except Exception as e: |
| | await ult.delete() |
| | LOGS.info(e) |
| | res = await ultroid_bot.inline_query(asst.me.username, f"fsub {user.id}_{joinchat}") |
| | await res[0].click(ult.chat_id, reply_to=ult.id) |
| |
|
| |
|
| | if udB.get_key("FORCESUB"): |
| | ultroid_bot.add_handler(force_sub, events.NewMessage(incoming=True)) |
| |
|