Ndyvfydyc / tabchi.py
Vfhgcxff's picture
Update tabchi.py
8f8a5fc
try:
import os,re,json,random,aiocron,asyncio
from telethon.sync import TelegramClient,events,functions,types
except ModuleNotFoundError:
os.system('pip install --upgrade pip && pip install telethon && pip install asyncio && pip install aiocron && clear')
os.sys.exit('installed the required packages !')
def get(file):
with open(file,'r') as r:
return json.load(r)
def put(file,data):
with open(file,'w') as w:
json.dump(data,w)
def font(text):
if isinstance(text,str):
text = text.lower()
return text.translate(text.maketrans('qwertyuiopasdfghjklzxcvbnm-0123456789','ǫᴡᴇʀᴛʏᴜɪᴏᴘᴀsᴅғɢʜᴊᴋʟᴢxᴄᴠʙɴᴍ-𝟎𝟏𝟐𝟑𝟒𝟓𝟔𝟕𝟖𝟗'))
else:
return None
api_id = 11724276
api_hash = '0b7fd91855bf2ed8dd40e0d8cb685b86'
session = input('enter the session name : ')
bot = TelegramClient(session,api_id,api_hash)
dev = 5682758308
if not os.path.exists('data') or not os.path.isdir('data'):
os.mkdir('data')
if not os.path.exists(f'data/{session}.json') or not os.path.isfile(f'data/{session}.json'):
data = {'bot':'on','autojoin':'off','contact':'off','secretary':'off','forward':'off','forwardauthor':'off','forwardtime':10,'forwardid':0,'forwardchat':None,'forwardtype':None,'forwardreply':None,'subscription':30,'admins':[],'groups':[],'secretarytext':[]}
put(f'data/{session}.json',data)
async def forward_message(to_peer,id,from_peer,reply_text,drop_author):
message = await bot(functions.messages.ForwardMessagesRequest(from_peer = from_peer,id = [id],to_peer = to_peer,drop_author = drop_author))
if reply_text:
await bot.send_message(to_peer,reply_text,reply_to = message.updates[0].id)
forwardtime = get(f'data/{session}.json')['forwardtime']
@aiocron.crontab(f'*/{forwardtime} * * * *')
async def clock():
data = get(f'data/{session}.json')
if data['bot'] == 'on' and data['subscription'] != 0:
if data['forward'] == 'on':
if data['forwardid'] and data['forwardchat'] and data['forwardtype']:
i = 0
async for dialog in bot.iter_dialogs():
if (data['forwardtype'] == 'privates' and isinstance(dialog.entity,types.User)) or (data['forwardtype'] == 'groups' and isinstance(dialog.entity,types.Chat)) or (data['forwardtype'] == 'super groups' and isinstance(dialog.entity,types.Channel) and dialog.entity.megagroup):
try:
await forward_message(dialog.id,data['forwardid'],data['forwardchat'],data['forwardreply'],data['forwardauthor'] == 'off')
i += 1
except Exception as e:
await bot.send_message(dev,font(e))
await bot.send_message(dev,font(f'Sent to {i} of ' + data['forwardtype'] + ' !'))
@aiocron.crontab(f'12 12 * * *')
async def subscription():
data = get(f'data/{session}.json')
if data['subscription'] > 0:
data['subscription'] -= 1
put(f'data/{session}.json',data)
else:
await bot.send_message(dev,font('The subscription to this tabchi has ended !'))
@bot.on(events.NewMessage())
async def updateMessage(event):
data = get(f'data/{session}.json')
text = event.raw_text
chat_id = event.chat_id
from_id = event.sender_id
if from_id == dev or from_id in data['admins'] or chat_id in data['groups']:
if from_id == dev:
if match := re.match(r'AddSubscription (\d+)',text):
time = int(match.group(1))
data['subscription'] += time
put(f'data/{session}.json',data)
await event.reply(font('The subscription of the robot has been successfully increased !'))
elif match := re.match(r'LowSubscription (\d+)',text):
time = int(match.group(1))
data['subscription'] -= time
put(f'data/{session}.json',data)
await event.reply(font('The subscription of the robot has been successfully reduced !'))
if from_id != dev and data['subscription'] == 0:
return await event.reply(font('Your subscription has ended !'))
if match := re.match(r'(Bot|Secretary|Contact|AutoJoin|Forward|ForwardAuthor) ([Oo][Nn]|[Oo][Ff][Ff])',text):
index = match.group(1).lower()
status = match.group(2).lower()
data[index] = status
put(f'data/{session}.json',data)
await event.reply(font(f'{index} now is {status} !'))
elif data['bot'] == 'on':
if text == 'Help':
await event.reply(f'''
خاموش و روشن کردن ربات :
Bot on | off
خاموش و روشن کردن حالت منشی :
Secretary on | off
خاموش و روشن کردن حالت ذخیره خودکار مخاطب :
Contact on | off
خاموش و روشن کردن حالت عضو شدن خودکار لینک های خصوصی :
AutoJoin on | off
خاموش و روشن کردن فوروارد خودکار :
Forward on | off
فوروارد بدون نقل قول یا با نقل قول :
ForwardAuthor on | off
اطلاع از آنلاین بودن ربات :
Ping
گرفتن اطلاعات ربات :
Info
بدست آوردن اطلاعات یک فرد :
Id (REPLY)
اضافه کردن ادمین به ربات :
AddSudo (ID)
حذف ادمین از ربات :
DeleteSudo (ID)
گرفتن لیست ادمین ها :
SudoList
تغییر نام اکانت :
SetFirstName
تغییر نام خانوادگی اکانت :
SetLastName
تغییر بیوگرافی اکانت :
SetBiography
تغییر یوزرنیم اکانت :
SetUserName
تنظیم عکس برای عکس پروفایل اکانت :
SetPhoto (REPLY)
حذف تمام عکس های پروفایل ربات :
DeletePhoto
اضافه کردن متن منشی رندوم :
AddSecretary (TEXT)
حذف متن منشی :
DeleteSecretary (TEXT)
لیست متن های منشی رندوم :
SecretaryList
استارت کردن ربات :
Start (@username)
عضو شدن در یک گروه یا کانال :
Join (@username)
لفت دادن از یک گروه یا کانال :
Left (@username)
پاکسازی لیست مخاطبین :
CleanContactsList
اشتراک گزاری شماره اکانت :
Share
تنظیم زمان فوروارد خودکار :
ForwardTime (TIME)
اد کردن یه کاربر به همه‌ی گروه ها :
AddAll (REPLY)
فوروارد برای همه :
ForwardAll (REPLY)
فوروارد برای پیوی ها :
ForwardPrivates (REPLY)
فوروارد برای گروه های عادی :
ForwardGroups (REPLY)
فوروارد برای سوپر گروه ها :
ForwardSuperGroups (REPLY)
تنظیم فوروارد خودکار :
SetForward privates | super groups | groups
تنظیم متن ریپلی کردن روی پیام فوروارد شده :
SetForwardReply (REPLY)
حذف متن ریپلی شده روی پیام فوروارد شده :
DeleteForwardReply
اضافه کردن یک گروه به عنوان گروه مدیریت اکانت :
AddGp (IN GROUP)
حذف کردن یک گروه از لیست گروه های مدیریت اکانت :
DeleteGp (IN GROUP)
اشتراک ربات : {data['subscription']}
''')
elif text == 'Ping':
await event.reply(font('I am Online !'))
elif text == 'Info':
private_chats = 0
bots = 0
groups = 0
broadcast_channels = 0
admin_in_groups = 0
creator_in_groups = 0
admin_in_broadcast_channels = 0
creator_in_channels = 0
unread_mentions = 0
unread = 0
largest_group_member_count = 0
largest_group_with_admin = 0
async for dialog in bot.iter_dialogs():
entity = dialog.entity
if isinstance(entity,types.Channel):
if entity.broadcast:
broadcast_channels += 1
if entity.creator or entity.admin_rights:
admin_in_broadcast_channels += 1
if entity.creator:
creator_in_channels += 1
elif entity.megagroup:
groups += 1
if entity.creator or entity.admin_rights:
admin_in_groups += 1
if entity.creator:
creator_in_groups += 1
elif isinstance(entity,types.User):
private_chats += 1
if entity.bot:
bots += 1
elif isinstance(entity,types.Chat):
groups += 1
if entity.creator or entity.admin_rights:
admin_in_groups += 1
if entity.creator:
creator_in_groups += 1
unread_mentions += dialog.unread_mentions_count
unread += dialog.unread_count
list = f'status !'
list += f'\nprivate chats : {private_chats}'
list += f'\nbots : {bots}'
list += f'\ngroups : {groups}'
list += f'\nbroadcast channels : {broadcast_channels}'
list += f'\nadmin in groups : {admin_in_groups}'
list += f'\ncreator in groups : {creator_in_groups}'
list += f'\nadmin in broadcast channels : {admin_in_broadcast_channels}'
list += f'\ncreator in channels : {creator_in_channels}'
list += f'\nunread mentions : {unread_mentions}'
list += f'\nunread : {unread}'
list += f'\nlargest group member count : {largest_group_member_count}'
list += f'\nlargest group with admin : {largest_group_with_admin}'
await event.reply(font(list))
elif match := re.match(r'AddSudo (\d+)',text):
id = int(match.group(1))
data['admins'].append(id)
put(f'data/{session}.json',data)
await event.respond(font(f'{id} was successfully added to the list of admins !'))
elif match := re.match(r'DeleteSudo (\d+)',text):
id = int(match.group(1))
data['admins'].remove(id)
put(f'data/{session}.json',data)
await event.respond(font(f'{id} was successfully removed from the list of admins !'))
elif text == 'SudoList':
list = font('Sudo List :')
for id in data['admins']:
list += f'\n• [ᴜsᴇʀ](tg://user?id={id})'
await event.respond(font(list))
elif text == 'CleanSudoList':
data['admins'] = []
put(f'data/{session}.json',data)
elif match := re.match(r'SetFirstName (.*)',text):
try:
await bot(functions.account.UpdateProfileRequest(first_name = match.group(1)))
await event.reply(font('Your first name has been successfully changed !'))
except Exception as e:
await event.reply(font(e))
elif match := re.match(r'SetLastName (.*)',text):
try:
await bot(functions.account.UpdateProfileRequest(last_name = match.group(1)))
await event.reply(font('Your last name has been successfully changed !'))
except Exception as e:
await event.reply(font(e))
elif match := re.match(r'SetBiography (.*)',text):
try:
await bot(functions.account.UpdateProfileRequest(about = match.group(1)))
await event.reply(font('Your Biography has been successfully changed !'))
except Exception as e:
await event.reply(font(e))
elif match := re.match(r'SetUserName (.*)',text):
try:
await bot(functions.account.UpdateUsernameRequest(username = match.group(1)))
await event.reply(font('Your username has been successfully changed !'))
except Exception as e:
await event.reply(font(e))
elif text == 'DeletePhoto':
try:
photos = await bot.get_profile_photos('me')
for photo in photos:
await bot(functions.photos.DeletePhotosRequest(id = [types.InputPhoto(id = photo.id,access_hash = photo.access_hash,file_reference = photo.file_reference)]))
await event.reply(font('All your photos have been deleted !'))
except Exception as e:
await event.reply(font(e))
elif match := re.match(r'AddSecretary (.*)',text):
if match.group(1) in data['secretarytext']:
await event.respond(font('This text is already saved !'))
else:
data['secretarytext'].append(match.group(1))
put(f'data/{session}.json',data)
await event.respond(font('This text has been successfully added !'))
elif match := re.match(r'DeleteSecretary (.*)',text):
if match.group(1) in data['secretarytext']:
data['secretarytext'].remove(match.group(1))
put(f'data/{session}.json',data)
await event.respond(font('This text has been successfully removed !'))
else:
await event.respond(font('This text does not exist !'))
elif text == 'SecretaryList':
list = font('Secretary List :')
for text in data['secretarytext']:
list += f'\n• {text}'
await event.respond(font(list))
elif match := re.match(r'Start (.*)',text):
try:
await bot.send_message(match.group(1),'/start')
await event.reply(font('The bot started successfully !'))
except Exception as e:
await event.reply(font(e))
elif match := re.match(r'Join (.*)',text):
invitelink = match.group(1)
explode = invitelink.split('/')
if len(explode) > 1:
try:
await bot(functions.messages.ImportChatInviteRequest(explode[-1]))
await event.reply(font('I became a member !'))
except Exception as e:
await event.reply(font(e))
else:
try:
await bot(functions.channels.JoinChannelRequest(invitelink))
await event.reply(font('I became a member !'))
except Exception as e:
await event.reply(font(e))
elif match := re.match(r'Left (.*)',text):
invitelink = match.group(1)
explode = invitelink.split('/')
if len(explode) > 1:
try:
group = await client.get_entity(invitelink)
await bot(functions.messages.DeleteExportedChatInviteRequest(int('-100' + str(group.id))))
event.reply(font('I became a member !'))
except Exception as e:
await event.reply(font(e))
else:
try:
await bot(functions.channels.LeaveChannelRequest(invitelink))
await event.reply(font('I became a member !'))
except Exception as e:
await event.reply(font(e))
elif text == 'CleanContactsList':
try:
contacts = await bot(functions.contacts.GetContactsRequest(hash = 0))
await bot(functions.contacts.DeleteContactsRequest(id = [contact.id for contact in contacts.users]))
await event.reply(font('All your contacts have been deleted !'))
except Exception as e:
await event.reply(font(e))
elif text == 'Share':
me = await bot.get_me()
await bot.send_file(event.chat_id,types.InputMediaContact(phone_number = me.phone,first_name = me.first_name,last_name = me.last_name or str(),vcard = str()))
elif match := re.match(r'ForwardTime (\d+)',text):
time = int(match.group(1))
clock.spec = f'*/{time} * * * *'
clock.start()
data['forwardtime'] = time
put(f'data/{session}.json',data)
await event.respond(font(f'The forwarding time was automatically set to {time} minute !'))
elif text == 'DeleteForwardReply':
data['forwardreply'] = None
put(f'data/{session}.json',data)
await event.reply(font(f'Replay on the forwarded message was successfully deleted !'))
elif event.is_reply:
if text == 'Id':
getMessage = await event.get_reply_message()
sender = getMessage.sender
id = sender.id
first_name = sender.first_name
last_name = sender.last_name
username = sender.username
phone = sender.phone
list = f'id : {id}'
list += f'\nfirst name : {first_name}'
list += f'\nlast name : {last_name}'
list += f'\nusername : {username}'
list += f'\nphone : {phone}'
await event.reply(font(list))
elif text == 'SetPhoto':
try:
message = await event.get_reply_message()
media = await bot.download_media(message)
await bot(functions.photos.UploadProfilePhotoRequest(await bot.upload_file(media)))
os.remove(media)
await event.reply(font('Your photo has been successfully changed !'))
except Exception as e:
await event.reply(font(e))
elif text == 'AddAll':
getMessage = await event.get_reply_message()
id = getMessage.sender.id
i = 0
async for dialog in bot.iter_dialogs():
if isinstance(dialog.entity,types.Chat) or (isinstance(dialog.entity,types.Channel) and dialog.entity.megagroup):
try:
await bot(functions.channels.InviteToChannelRequest(dialog.entity,[id]))
i += 1
except Exception as e:
await event.reply(font(e))
await event.reply(font(f'User {id} was successfully added to {i} groups !'))
elif text == 'ForwardAll':
i = 0
async for dialog in bot.iter_dialogs():
if isinstance(dialog.entity,(types.Chat,types.User)) or (isinstance(dialog.entity,types.Channel) and dialog.entity.megagroup):
try:
await forward_message(dialog.id,event.reply_to_msg_id,event.chat_id,data['forwardreply'],data['forwardauthor'] == 'off')
i += 1
except Exception as e:
await event.reply(font(e))
await event.reply(font(f'Sent to {i} of groups and super groups and privates !'))
elif text == 'ForwardPrivates':
i = 0
async for dialog in bot.iter_dialogs():
if isinstance(dialog.entity,types.User):
try:
await forward_message(dialog.id,event.reply_to_msg_id,event.chat_id,data['forwardreply'],data['forwardauthor'] == 'off')
i += 1
except Exception as e:
await event.reply(font(e))
await event.reply(font(f'Sent to {i} of privates !'))
elif text == 'ForwardGroups':
i = 0
async for dialog in bot.iter_dialogs():
if isinstance(dialog.entity,types.Chat):
try:
await forward_message(dialog.id,event.reply_to_msg_id,event.chat_id,data['forwardreply'],data['forwardauthor'] == 'off')
i += 1
except Exception as e:
await event.reply(font(e))
await event.reply(font(f'Sent to {i} of groups !'))
elif text == 'ForwardSuperGroups':
i = 0
async for dialog in bot.iter_dialogs():
if isinstance(dialog.entity,types.Channel) and dialog.entity.megagroup:
try:
await forward_message(dialog.id,event.reply_to_msg_id,event.chat_id,data['forwardreply'],data['forwardauthor'] == 'off')
i += 1
except Exception as e:
await event.reply(font(e))
await event.reply(font(f'Sent to {i} of super groups !'))
elif match := re.match(r'SetForward (privates|super groups|groups)',text):
data['forwardid'] = event.reply_to_msg_id
data['forwardchat'] = event.chat_id
data['forwardtype'] = match.group(1)
put(f'data/{session}.json',data)
await event.reply(font('Automatic forwarding has been successfully set !'))
elif text == 'SetForwardReply':
getMessage = await event.get_reply_message()
if getMessage.raw_text:
data['forwardreply'] = getMessage.raw_text
put(f'data/{session}.json',data)
await event.reply(font(f'The replay text was successfully set on the forwarded message !'))
else:
await event.reply(font(f'Please only reply to the text message !'))
elif event.is_group:
if text == 'AddGp':
data['groups'].append(int(chat_id))
put(f'data/{session}.json',data)
await event.reply(font('This group was added to the list of bot management groups !'))
elif text == 'DeleteGp':
data['groups'].remove(int(chat_id))
put(f'data/{session}.json',data)
await event.reply(font('This group was removed from the list of bot management groups !'))
elif text == 'AddContact':
try:
contacts = await bot(functions.contacts.GetContactsRequest(hash = 0))
await bot(functions.channels.InviteToChannelRequest(event.chat_id,[contact.id for contact in contacts.users]))
except Exception as e:
await event.reply(font(e))
await event.reply(font('I added most of my contacts to this group !'))
elif data['bot'] == 'on' and data['subscription'] != 0:
if data['secretary'] == 'on' and event.is_private:
if len(data['secretarytext']) > 0:
await event.reply(random.choice(data['secretarytext']))
if data['contact'] == 'on' and event.contact:
await bot(functions.contacts.AddContactRequest(id = event.contact.user_id,first_name = event.contact.first_name,last_name = event.contact.last_name,phone = event.contact.phone_number,add_phone_privacy_exception = False))
if data['autojoin'] == 'on':
if links := re.findall('(?:https?://)?(t|telegram)\.me/(?:\+|joinchat/)([\w\-]+)',text):
for link in links:
await bot(functions.messages.ImportChatInviteRequest(link[-1]))
bot.start()
clock.start()
subscription.start()
bot.run_until_disconnected()
asyncio.get_event_loop().run_forever()