Spaces:
Sleeping
Sleeping
File size: 5,459 Bytes
156ce57 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# Ultroid - UserBot
# Copyright (C) 2021-2023 TeamUltroid
#
# This file is a part of < https://github.com/TeamUltroid/Ultroid/ >
# PLease read the GNU Affero General Public License in
# <https://www.github.com/TeamUltroid/Ultroid/blob/main/LICENSE/>.
"""
✘ 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))
|