import threading
from random import choice
from os import listdir
from time import sleep
import time
import re
from itertools import islice
from datetime import datetime
from SQL import Account
from SQL import DateTime
from SQL import Username
from SQL import AdminsBot
from SQL import Groups
from SQL import SettingAddmember
from SQL import AddStatistics
from pyrogram import Client
from pyrogram import filters
from pyrogram import idle
from pyrogram import errors
from pyrogram.types import InlineKeyboardButton as button
from pyrogram.types import InlineKeyboardMarkup as markup
from pyrogram.types import ForceReply as reply
api_id, api_hash = 2624818, "9d6e5f2365a2a9867d219e869f3e3656" #api_id,"api_hash"
token="1690295388:AAHC0gcrIlDGnjIW7cWYpoDL_-TO8auo_Hs" #Token bot API
app = Client("bot",api_id,api_hash,bot_token=token)
numbers = list()
for fil in listdir('sessions'):
numbers.append(fil.split("phone")[-1].split(".")[0])
global step
global phone_code_hashs
global sessions
global y
step= 'None'
phone_code_hashs= dict()
sessions= dict()
y= 0
Message = None
@app.on_message(filters.command(['start']))
def start (client,message):
chat_id = message.chat.id
print("Start id ->",chat_id)
message_id = message.message_id
Menu(chat_id,message_id)
@app.on_callback_query()
def querys(_, query):
chat_id = query.message.chat.id
message_id = query.message.message_id
data = query.data
db = AdminsBot("Model.db")
db.create_table()
listadmins = db.get_list_admins()
DeleteAdmin = [Id[1] for Id in listadmins]
db.close()
db = Groups("Model.db")
db.create_table()
List_groups = db.get_list_groups()
DeleteGroup = [Id[1] for Id in List_groups]
AddToGroup = [Id[1]for Id in List_groups]
db.close()
if data == "StartLogin" : StartLogin(chat_id,message_id,query)
if data == "ComebackToMenu" : Menu2(chat_id,message_id)
if data == "StartUAR" : StartUAR(chat_id,message_id)
if data == "StarCollect" : StarCollect(chat_id,message_id,query)
if data == "StartSet" : StartSet(chat_id,message_id)
if data == "SetAdd" : SetAdd(chat_id,message_id,query)
if data == "EditAccount" : EditAccount(chat_id,message_id)
if data == "RemoveAccount" : RemoveAccount(chat_id,message_id,query)
if data == "EditAdmins" : EditAdmins(chat_id,message_id)
if data == "ComebackSettings": StartSet(chat_id,message_id)
if data == "AddAdmin" : AddAdmin(chat_id,message_id,query)
if data == "RemoveAdmin" : RemoveAdmin(chat_id,message_id,query)
if data == "ShowAdmins" : ShowAdmins(chat_id,message_id,query)
if data == "StartStat" : Statistics(chat_id,message_id)
if data == "Accounts" : Accounts(chat_id,message_id,query)
if data == "Activity" : Activityy(chat_id,message_id,query)
if data == "EditGroups" : EditGroups(chat_id,message_id)
if data == "AddGroup" : AddGroup(chat_id,message_id)
if data == "SettingAdd" : SettingAdd(chat_id,message_id)
if data == "RemoveGroup" : RemoveGroup(chat_id,message_id,query)
if data == "ShowGroup" : ShowGroup(chat_id,message_id,query)
if data == "ShowSettings" : ShowSettings(chat_id,message_id,query)
if data == "StartAdd" : StartAdd(chat_id,message_id,query)
if data == "EditSettings" : EditSettings(chat_id,message_id)
if data == "IDeas" : IDeas(chat_id,message_id)
if data == "None" : MessageNone(chat_id,message_id,query)
if data[:2] == "re" and data[2:] in DeleteAdmin : DeleteAdmins(chat_id,message_id,query,data)
if data[:2] == "re" and data[2:] in DeleteGroup : DeleteGroups(chat_id,message_id,query,data)
if data[:2] == "ad" and data[2:] in AddToGroup : AddToGroups(chat_id,message_id,query,data)
@app.on_message()
def Updates(app,message):
global step
chat_id = message.chat.id
message_id = message.message_id
text = message.text
if step == "GetPhone":
GetPhone(chat_id,message_id,text)
elif step.split(" ")[0] == "LoginCode":
LoginCode(chat_id,message_id,text)
elif step == "GetUsername":
GetUsername(chat_id,message_id,text)
elif step == "SaveAdmin":
SaveAdmin(chat_id,message_id,text,message)
elif step == "SaveGroup":
SaveGroup(chat_id,message_id,text,message)
elif step == "GetActivityRange":
GetActivityRange(chat_id,message_id,text,message)
elif step == "DeleteAccount":
DeleteAccount(chat_id,message_id,text,message)
elif step[:11] == "GetAddRange" and step[11:].isdigit():
GetAddRange(chat_id,message_id,text,message)
elif step[:18] == "GettActivityNumber":
GettActivityNumber(chat_id,message_id,text,message)
#Menu------------------------------------------------------------------------------------------------------------
def Menu(chat_id,message_id):
modir = 1569699710 #add chat_id modir
db = AdminsBot("Model.db")
db.create_table()
list_admin = db.get_list_admins()
db.close()
list_a = [i[1] for i in list_admin]
if chat_id == modir or str(chat_id) in list_a:
app.send_message(chat_id,
" ??? Hi Admin. \nSelect Your Fav",
reply_to_message_id = message_id,
reply_markup = markup([[button("Login New Account ?",callback_data="StartLogin")],
[button("Collect Usernames ?",callback_data="StarCollect"),button("Add ? to Group ?",callback_data="StartAdd")],
[button("Statistics ?",callback_data="StartStat"),button("? Bot Settings ⚙️",callback_data="StartSet")],
[button("Update Account Reports",callback_data="StartUAR")]
]))
else:
app.send_message(chat_id,f"⭕️ You are not allowed to use this robot
",parse_mode='html')
def Menu2(chat_id,message_id):
app.edit_message_text(chat_id,message_id,
" ??? Hi Admin. \nSelect Your Fav",
reply_markup = markup([[button("Login New Account ?",callback_data="StartLogin")],
[button("Collect Usernames ?",callback_data="StarCollect"),button("Add ? to Group ?",callback_data="StartAdd")],
[button("Statistics ?",callback_data="StartStat"),button("? Bot Settings ⚙️",callback_data="StartSet")],
[button("Update Account Reports",callback_data="StartUAR")]
]))
#/----------------------------------------------------------------------------------------------------------------
#MessageNone------------------------------------------------------------------------------------------------------
def MessageNone(chat_id,message_id,query):
query.answer(f"??? ??? ?????")
#/----------------------------------------------------------------------------------------------------------------
#MessageTwo-------------------------------------------------------------------------------------------------------
def MessageTwo(chat_id,message_id):
app.send_message(chat_id,"The ID list is empty")
#/----------------------------------------------------------------------------------------------------------------
#MessageTree-------------------------------------------------------------------------------------------------------
def MessageThree(chat_id,message_id):
app.send_message(chat_id,"The number of accounts you request is more than the existing accounts")
#/----------------------------------------------------------------------------------------------------------------
#log in-----------------------------------------------------------------------------------------------------------
def StartLogin(chat_id,message_id,query):
global step
app.edit_message_text(chat_id,message_id,"Send Your Number
\nFor example: +989381754806",parse_mode="html")
step = "GetPhone"
def GetPhone(chat_id,message_id,text):
global step
if not text[1:].isdigit() or text[0] != "+":
app.send_message(chat_id, f"Your Number Is Wrong
❌",parse_mode="html",reply_to_message_id = message_id)
step = "GetPhone"
return
Send_Code_Request(chat_id, message_id, text.replace(" ", ""))
def Send_Code_Request(chat_id,message_id,number):
global step
global phone_code_hashs
global sessions
session = f'sessions/phone{number}'
api_id, api_hash = 2624818, "9d6e5f2365a2a9867d219e869f3e3656" #api_id,"api_hash"
client = Client(session,api_id,api_hash)
client.connect()
try:
phone_code_hash = client.send_code(number).phone_code_hash
app.send_message(chat_id, f"Code Sended To
{number} \nPlease Enter 5 digit Login Code!
",parse_mode="html",reply_to_message_id=message_id)
sessions[number] = client
phone_code_hashs[number] = phone_code_hash
step = f"LoginCode {number}"
except errors.PhoneNumberInvalid as error:
print(error)
app.send_message(chat_id,"The phone number is invalid!\nPlease correct the number or send another number",parse_mode="html", reply_to_message_id = message_id)
step = 'GetPhone'
def LoginCode(chat_id,message_id,code):
global step
global phone_code_hashs
global sessions
if not code.isdigit() or len(code) != 5:
app.send_message(chat_id,"Your Login Code Is Wrong
",parse_mode='html',reply_to_message_id = message_id)
return
number = step.split(" ")[1]
client = sessions[number]
#Register and Login
try:
client.sign_in(phone_number= number,phone_code_hash =phone_code_hashs[number], phone_code=code)
except errors.PhoneNumberUnoccupied as error:
client.sign_up(phone_number= number,phone_code_hash= phone_code_hash, first_name= "aryn" , last_name= "kaviani")
app.send_message(chat_id,"Register and Login Successfull!",parse_mode="html", reply_to_message_id= message_id)
step = 'None'
return
except errors.SessionPasswordNeeded as error:
print(error)
app.send_message(chat_id,"Two-step verification password required!\nPlease disable the two steps and then send the number here",parse_mode="html", reply_to_message_id = message_id)
step = 'GetPhone'
return
except errors.PhoneCodeExpired as error:
print(error)
app.send_message(chat_id,"The confirmation code has expired!",parse_mode="html", reply_to_message_id= message_id)
step = 'None'
return
except errors.PhoneCodeInvalid as error:
print(error)
app.send_message(chat_id,"The confirmation code is invalid!",parse_mode="html", reply_to_message_id= message_id)
step = 'None'
except Exception as error:
print(error)
else:
app.send_message(chat_id, "Login Successfull.
",parse_mode="html", reply_to_message_id=message_id)
SpamBot(chat_id,message_id,number)
def SpamBot(chat_id,message_id,number,c=None):
api_id, api_hash = 2624818, "9d6e5f2365a2a9867d219e869f3e3656" #api_id,"api_hash"
try:
with Client(f'sessions/phone{number}',api_id,api_hash)as app:
app.send_message("@SpamBot","/start")
count = 1
for message in app.iter_history("SpamBot"):
if count == 1:
text = message.text
count += 1
if re.search(r"^Good news",text) or re.search(r"^مژده",text):
report = False
elif re.search(r"Unfortunately",text):
report = "Permanent"
elif re.search(r"limited until(.*)\.",text):
reep = re.findall(r"limited until(.*)\.",text)
report =reep[0]
else:pass
#DataBaste
db = Account("Model.db")
db.create_table()#Create Table
all_phone_number = db.get_list_phone()
if str(number) not in all_phone_number:
SaveAccountNew(chat_id,number,api_id,api_hash,report)
elif str(number) in all_phone_number:
UpdatesReportAccount(report,number,c,chat_id,message_id)
db.close()
except Exception as error:
print(f"Error 1{error}")
def SaveAccountNew(chat_id,number,api_id,api_hash,report):
date = DateTime().d
time = DateTime().t
SuccessfulAdds,UnSuccessfulAdds,Adds = 0,0,0
AllData = (f"{number}",f"{api_id}",f"{api_hash}",f"{report}",f"False",f"{date}",f"01-01-2020",f"{time}",f"{0}",f"{0}",f"{0}")
db = Account("Model.db")
db.insert_data(AllData)
print(f"insert data phone number {number} to database")
app.send_message(chat_id,f"✅ Insert Data Phone Number
{number} To Database
")
db.close()
def UpdatesReportAccount(report,number,c,chat_id,message_id):
global y,Message
db = Account("Model.db")
reports = (f"{report}",f"{number}")
db.update_report(reports)
list_account = db.get_list_phone()
db.close()
l = len(list_account)
print(f"({number}) -> report:{report}")
if y <= 0:
Message= app.send_message(chat_id,f"({number})
-> report:{report}
",parse_mode='html')
y += 1
else:
app.edit_message_text(chat_id,Message.message_id,f"({number})
\nreport:{report}
",parse_mode='html')
if c == l:
sleep(1)
app.send_message(chat_id,f"✅ The report status of your accounts has been updated
",parse_mode='html',reply_to_message_id=message_id)
else:pass
#/-----------------------------------------------------------------------------------------------------------------
#get username------------------------------------------------------------------------------------------------------
def StarCollect(chat_id,message_id,query):
global step
app.edit_message_text(chat_id,message_id,"Send The Group Link Or Username
\nFor example: @username",parse_mode="html",
reply_markup=markup([[button("Comeback To Menu ? ",callback_data="ComebackToMenu")]]))
step = "GetUsername"
def GetUsername(chat_id,message_id,text):
api_id, api_hash = 2624818, "9d6e5f2365a2a9867d219e869f3e3656" #api_id,"api_hash"
try:
with Client('session_me',api_id,api_hash) as app:
count = 0
try:
app.join_chat(text)
except Exception as error:print(error)
try:
for member in app.iter_chat_members(f"{text[1:]}"):
if member.user.username != None and member.user.is_self != True and member.user.is_bot != True:
user_username = member.user.username
user_id = member.user.id
db = Username("Model.db")
db.create_table()
all_username_database = db.get_list_username
if user_username not in all_username_database():
AllData = (f"{user_username}",f"{member.user.id}")
db.insert_data(AllData)
count += 1
db.close()
print(f"save username {member.user.username}")
else:pass
else:pass
except Exception as error:print(error)
MessageSaveUsername(chat_id,text,count)
except Exception as error:print (error)
def MessageSaveUsername(chat_id,text,count):
if count > 0:
print("end Save username")
app.send_message(chat_id,f"{count} usernames from group {text} were added to the database
",parse_mode="html")
step ="None"
else:
app.send_message(chat_id,f"No usernames were added to the database
",parse_mode="html")
step="None"
#/-----------------------------------------------------------------------------------------------------------------
#settings-----------------------------------------------------------------------------------------------------------
def StartSet(chat_id,message_id):#setting -> Edit Admins - Edit Groups - Setting Addmember
global step
app.edit_message_text(chat_id,message_id,"Click the desired button to set and edit",
reply_markup=markup([[button("Admins ?",callback_data="EditAdmins"),button("Groups ?",callback_data="EditGroups")],
[button("Settings Addmember ?",callback_data="SettingAdd"),button("Account ?",callback_data="EditAccount")],
[button("Comeback To Menu ? ",callback_data="ComebackToMenu")]]))
step = 'None'
def EditAdmins(chat_id,message_id):#edit admins -> AddAdmin - RemoveAdmin - ShowAdmins
global step
modir = 1569699710 #add chat_id modir
if chat_id == modir:
app.edit_message_text(chat_id,message_id,"Edit Admins",
reply_markup=markup([[button("Remove Admin ➖",callback_data="RemoveAdmin"),button("Add Admin ➕",callback_data="AddAdmin")],
[button("Show Admins",callback_data="ShowAdmins")],
[button("Comeback To Menu ? ",callback_data="ComebackToMenu"),button("Comeback ?",callback_data="ComebackSettings")]]))
step = 'None'
def AddAdmin(chat_id,message_id,query):
global step
app.edit_message_text(chat_id,message_id,"Send us the New Admin Username
\nFor example: @username",parse_mode="html")
step = "SaveAdmin"
def SaveAdmin(chat_id,message_id,text,message):
global step
api_id, api_hash = 2624818, "9d6e5f2365a2a9867d219e869f3e3656" #api_id,"api_hash"
try:
with Client('session_me',api_id,api_hash) as app:
try:
chat = app.get_chat(f"{text[1:]}")
Id = chat.id
name = chat.first_name
username = chat.username
except Exception as error:print(error)
AllData = (f"{name}",f"{Id}",f"{username}")
db = AdminsBot("Model.db")
db.create_table()
db.insert_data(AllData)
print("save admin in admins")
MessageSaveAdmin(chat_id,message_id,text)
db.close()
except Exception as error:print(error)
def MessageSaveAdmin(chat_id,message_id,text):
app.send_message(chat_id,f"Save {text} in Admins
",reply_to_message_id=message_id)
def RemoveAdmin(chat_id,message_id,query):
try:
db = AdminsBot("Model.db")
db.create_table()
listadmins = db.get_list_admins()
db.close()
if len(listadmins) > 0:
keyboard = [button(f"{admin[0]}",callback_data= f"re{admin[1]}") for admin in listadmins]
key = iter(keyboard)
Output = [list(islice(key,elem))for elem in[2 for n in range(len(keyboard))]]
app.edit_message_text(chat_id,message_id,"Remove\nClick on admin name to remove",
reply_markup=markup(Output))
else:
query.answer(f"not admin")
StartSet(chat_id,message_id)
except Exception as error:print(error)
def DeleteAdmins(chat_id,message_id,query,data):
try:
ID = (f"{data[2:]}",)
db = AdminsBot("Model.db")
db.create_table()
db.delete_admin(ID)
db.close()
query.answer(f"delete admin")
RemoveAdmin(chat_id,message_id,query)
except Exception as error:print(error)
def ShowAdmins(chat_id,message_id,query):
try:
db = AdminsBot("Model.db")
db.create_table()
listadmins = db.get_list_admins()
if len(listadmins) > 0:
keyboard = [button(f"{admin[0]}",url=f"https://t.me/{admin[2]}")for admin in listadmins]
key = iter(keyboard)
Output = [list(islice(key,elem))for elem in[2 for n in range(len(keyboard))]]
app.edit_message_text(chat_id,message_id,"Admins AddMemberBot",reply_markup=markup(Output))
else:
query.answer(f"not admin")
StartSet(chat_id,message_id)
except Exception as error:print(error)
def EditGroups(chat_id,message_id):#edit groups -> AddGroup - RemoveGroup - ShowGroups
app.edit_message_text(chat_id,message_id,"Edit Groups",
reply_markup=markup([[button("Remove Group ➖",callback_data="RemoveGroup"),button("Add Group ➕",callback_data="AddGroup")],
[button("Show Group",callback_data="ShowGroup")],
[button("Comeback To Menu ? ",callback_data="ComebackToMenu"),button("Comeback ?",callback_data="ComebackSettings")]]))
step = 'None'
def AddGroup(chat_id,message_id):
global step
app.edit_message_text(chat_id,message_id,"Send us the new Group Username
\nFor example: @username",parse_mode="html")
step = "SaveGroup"
def SaveGroup(chat_id,message_id,text,message):
api_id, api_hash = 2624818, "9d6e5f2365a2a9867d219e869f3e3656" #api_id,"api_hash"
with Client('session_me',api_id,api_hash) as app:
try:
chat = app.get_chat(f"{text[1:]}")
Id = chat.id
name = chat.title
username = chat.username
except Exception as error:print(error)
AllData = (f"{name}",f"{Id}",f"{username}")
db = Groups("Model.db")
db.create_table()
db.insert_data(AllData)
db.close()
print("save group in groups")
MessageSaveGroup(chat_id,message_id,text)
def MessageSaveGroup(chat_id,message_id,text):
app.send_message(chat_id,f"save {text} in Groups",reply_to_message_id=message_id)
def RemoveGroup(chat_id,message_id,query):
try:
db = Groups("Model.db")
db.create_table()
listgroups = db.get_list_groups()
if len(listgroups) > 0:
keyboard = [button(f"{group[0]}",callback_data= f"re{group[1]}") for group in listgroups]
key = iter(keyboard)
Output = [list(islice(key,elem))for elem in[2 for n in range(len(keyboard))]]
app.edit_message_text(chat_id,message_id,"Remove\nClick on group name to remove",
reply_markup=markup(Output))
else:
query.answer(f"not group")
StartSet(chat_id,message_id)
except Exception as error:print(error)
def DeleteGroups(chat_id,message_id,query,data):
try:
ID = (f"{data[2:]}",)
db = Groups("Model.db")
db.create_table()
db.delete_group(ID)
db.close()
query.answer(f"delete Group")
RemoveGroup(chat_id,message_id,query)
except Exception as error:print(error)
def ShowGroup(chat_id,message_id,query):
db = Groups("Model.db")
db.create_table()
listgroups = db.get_list_groups()
print(len(listgroups))
if len(listgroups) > 0:
keyboard = [button(f"{group[0]}",url=f"https://t.me/{group[2]}")for group in listgroups]
key = iter(keyboard)
Output = [list(islice(key,elem))for elem in[2 for n in range(len(keyboard))]]
app.edit_message_text(chat_id,message_id,"Groups AddMemberBot",reply_markup=markup(Output))
else:
query.answer(f"Not Group! ❌")
StartSet(chat_id,message_id)
def EditAccount(chat_id,message_id):
global step
app.edit_message_text(chat_id,message_id,"Edit Account",
reply_markup=markup([[button("Remove Account ❌",callback_data="RemoveAccount")],
[button("Comeback To Menu ? ",callback_data="ComebackToMenu"),button("Comeback ?",callback_data="ComebackSettings")]]))
step = 'None'
def RemoveAccount(chat_id,message_id,query):
global step
app.edit_message_text(chat_id,message_id,"Send Number")
step = "DeleteAccount"
def DeleteAccount(chat_id,message_id,text,message):
global step
try:
phone = (f"{text}",)
db = Account("Model.db")
db.create_table()
db.delete_account(phone)
db.close()
app.send_message(chat_id,f"The account with the number {text} was removed from the list of database accounts",parse_mode='html',
reply_to_message_id=message_id)
print(f"delete account {text}")
step = 'None'
except Exception as error:print(error)
def SettingAdd(chat_id,message_id):#SettingAdd
app.edit_message_text(chat_id,message_id,"SettingAdd",
reply_markup=markup([[button("Set Settings ?",callback_data="EditSettings"),button("Show Setting",callback_data="ShowSettings")],
[button("Comeback To Menu ? ",callback_data="ComebackToMenu"),button("Comeback ?",callback_data="ComebackSettings")]]))
def ShowSettings(chat_id,message_id,query):
db = SettingAddmember("Model.db")
db.create_table()
list_Settingss = db.get_list_Setting()
print(list_Settingss)
if len(list_Settingss) >= 1:
keyboard = [
[button("تعداد دعوت",callback_data="None"),button("استراحت اکانت ها ",callback_data="None")],
[button(f"{list_Settingss[0][2]} ممبر",callback_data="None"),button(f"روز {list_Settingss[0][1]}",callback_data="None")],
[button("Comeback To Menu ? ",callback_data="ComebackToMenu"),button("Comeback ?",callback_data="StartSet")]
]
app.edit_message_text(chat_id,message_id,"Settings\nSettings Add Member",reply_markup=markup(keyboard))
else:
query.answer(f"Not Settings")
StartSet(chat_id,message_id)
def EditSettings(chat_id,message_id):
global step
app.send_message(chat_id,"Send ActivityRange
\nFor example: 1 or 2 or 3 or..",parse_mode='html',reply_markup=reply(selective=True))
step = "GetActivityRange"
def GetActivityRange(chat_id,message_id,text,message):
try:
if len(text) == 5 and text[2] == ':':
global step
app.send_message(chat_id,"Send AddRange
\nFor example: 10 or 20 or 30 or..",parse_mode='html',reply_markup=reply(selective=True))
step = f"GetAddRange{text}"
elif text.isdigit():
step = f"GetAddRange{text}"
app.send_message(chat_id,"Send AddRange
\nFor example: 10 or 20 or 30 or..",reply_markup=reply(selective=True))
else:
app.send_message(chat_id,"Please send correctly
",parse_mode='html',reply_to_message_id=message_id)
except Exception as error:print(error)
def GetAddRange(chat_id,message_id,text,message):
global step
db = SettingAddmember("Model.db")
db.create_table()
list_setting = db.get_list_Setting()
if len(list_setting) < 1:
InsertData = (1,f"{step[11:]}",f"{text}")
db.insert_data(InsertData)
step = 'None'
app.send_message(chat_id,f"✅ Your settings have been applied
",parse_mode='html',reply_to_message_id=message_id)
print(f"Add settings recorded")
elif len(list_setting) >=1:
UpdateData = (f"{step[11:]}",f"{text}")
db.update_data(UpdateData)
step = 'None'
app.send_message(chat_id,f"✅ Your settings have been applied
",reply_to_message_id=message_id)
print(f"Add settings updated")
#/-----------------------------------------------------------------------------------------------------------
#Statistics--------------------------------------------------------------------------------------------------
def Statistics(chat_id,message_id):
global step
if step == "reStatistics":
app.delete_messages(chat_id,message_id)
app.send_message(chat_id,"Activity statistics and accounts",
reply_markup=markup([[button("Activity",callback_data="Activity"),button("Accounts",callback_data="Accounts")],
[button("Comeback To Menu ? ",callback_data="ComebackToMenu")]]))
else:
app.edit_message_text(chat_id,message_id,"Activity statistics and accounts",
reply_markup=markup([[button("Activity",callback_data="Activity"),button("Accounts",callback_data="Accounts"),button("IDeas",callback_data="IDeas")],
[button("Comeback To Menu ? ",callback_data="ComebackToMenu")]]))
def Accounts(chat_id,message_id,query):
global step
db = Account("Model.db")
db.create_table()
list_phone = db.get_list_phone()
len_phone = len(list_phone)
list_healthy_account = db.get_list_healthy_account()
len_healthy = len(list_healthy_account)
list_Temporary_report = db.get_list_Temporary_report()
len_Temporary = len(list_Temporary_report)
list_Permanent_report = db.get_list_Permanent_report()
len_Permanent = len(list_Permanent_report)
list_Deleted = db.get_list_deleted_account()
len_delete = len(list_Deleted)
list_phone_Activity = db.get_list_phone_Activity()
db.close()
list_accounts_add = list()
stdelta = None
setting = None
db = SettingAddmember("Model.db")
db.create_table()
get_list_Setting = db.get_list_Setting()
#check len settings addmember
if len(get_list_Setting) < 1:
print(f"no set setting {len(get_list_Setting)} ")
query.answer(f"❌ Not Set Settings")
else:
print(f"len setting {len(get_list_Setting)}")
setting = get_list_Setting[0][1]
#accounts Activity
ac = 0
for Activity in list_phone_Activity:
lastActivity = str(Activity[1]) + ' ' + str(Activity[2])
date = DateTime().d
time = DateTime().t
TimeNow = str(date) + ' ' + str(time)
FMT = '%d-%m-%Y %H:%M:%S'
tdeltaa = datetime.strptime(TimeNow, FMT) - datetime.strptime(lastActivity, FMT)
stdelta= str(tdeltaa)
print(stdelta)
if re.search(r'(\d.*).day',stdelta):
bet = re.findall(r'(\d.*).day',stdelta)
print(f"bet: {bet}\n setting:{setting}")
if bet[0] >= setting:
ac += 1
list_accounts_add.append(Activity[0])
else:
print('not account')
else:
list_accounts_add.append(Activity[0])
len_list_accounts_add = len(list_accounts_add)
if len_phone > 0:
keyboard = [
[button("اکانت های سالم",callback_data="None"),button("اکانت ها",callback_data="None")],
[button(f"{len_healthy}",callback_data="None"),button(f"{len_phone}",callback_data="None")],
[button("ریپورت های دائمی",callback_data="None"),button("ریپورت موقت",callback_data="None")],
[button(f"{len_Permanent}",callback_data="None"),button(f"{len_Temporary}",callback_data="None")],
[button("حذف شده",callback_data="None"),button('اکانت های قابل استفاده',callback_data="None")],
[button(f"{len_delete}",callback_data="None"),button(f"{ac}",callback_data="None")],
[button("Comeback To Menu ? ",callback_data="ComebackToMenu"),button("Comeback ?",callback_data="StartStat")]
]
app.edit_message_text(chat_id,message_id,"Statistics\nStatistics Accounts",reply_markup=markup(keyboard))
else:
step ="reStatistics"
query.answer(f"❌ Not Account")
Statistics(chat_id,message_id)
def Activityy(chat_id,message_id,query):
global step
db = AddStatistics("Model.db")
db.create_table()
list_activity = db.get_list_Statistics()
db.close()
if len(list_activity) > 0:
keyboard = [
[button("درصد دعوت های موفق",callback_data="None"),button("دعوت ها",callback_data="None")],
[button(f"0",callback_data="None"),button(f"{list_activity[0][5]}",callback_data="None")],
[button("درخواست ها",callback_data="None"),button("دعوت های امروز",callback_data="None")],
[button(f"{list_activity[0][4]}",callback_data="None"),button(f"{list_activity[0][3]}",callback_data="None")],
[button("اخرین فعالیت",callback_data="None"),button("اخرین دعوت",callback_data="None")],
[button(f"{list_activity[0][2]}",callback_data="None"),button(f"{list_activity[0][1]}",callback_data="None")],
[button("Comeback To Menu ? ",callback_data="ComebackToMenu"),button("Comeback ?",callback_data="StartStat")]
]
app.edit_message_text(chat_id,message_id,"Statistics\nStatistics Activity",reply_markup=markup(keyboard))
else:
step ="reStatistics"
query.answer(f"Not Activity")
Statistics(chat_id,message_id)
def IDeas(chat_id,message_id):
global step
db = Username("Model.db")
db.create_table()
list_username = db.get_list_username()
db.close()
if len(list_username) > 0:
keyboard = [
[button("آیدی ها",callback_data="None")],
[button(f"{len(list_username)}",callback_data="None")],
[button("Comeback To Menu ? ",callback_data="ComebackToMenu"),button("Comeback ?",callback_data="StartStat")]
]
app.edit_message_text(chat_id,message_id,"Statistics\nStatistics Activity",reply_markup=markup(keyboard))
else:
step ="reStatistics"
query.answer(f"Not id")
Statistics(chat_id,message_id)
#/------------------------------------------------------------------------------------------------------------
#Update Account Reports---------------------------------------------------------------------------------------
def StartUAR(chat_id,message_id):
db = Account("Model.db")
db.create_table()
list_Account = db.get_list_phone()
Message=app.send_message(chat_id,"Start Updating Account Reports")
l = len(list_Account)
c = 0
if len(list_Account) > 0:
for account in list_Account:
c+=1
sleep(3)
threading.Thread(target=SpamBot, args = [chat_id,message_id,account,c]).start()
else:
app.send_message(chat_id,"To update the report status of accounts ... I do not see any accounts
",parse_mode='html',reply_to_message_id=message_id)
db.close()
#/------------------------------------------------------------------------------------------------------------
#Add Member---------------------------------------------------------------------------------------------------
def StartAdd(chat_id,message_id,query):
global step
db = Groups("Model.db")
db.create_table()
listgroups = db.get_list_groups()
db.close()
db = SettingAddmember("Model.db")
db.create_table()
listsettings = db.get_list_Setting()
db.close()
lenG = len(listgroups)
lenS = len(listsettings)
text1 = f"\
Add Member\n\n\
In which group do you want to join?
\n\n\
Click on the Group name \n\
If the group name is not in the list, Add the group name to your groups"
text2 = f"The list of groups is empty and no settings have been set\n\
? Register your group
\n\
? Save the relevant invitation settings
"
text3 = f"Settings not set\n\
? Save the relevant invitation settings
"
text4 = f"The list of groups is empty\n\
? Register your group
"
if lenG > 0 and lenS > 0:
other = [[button("other groups",callback_data="OtherGroups")]]
keyboard = [button(f"{group[0]}",callback_data= f"ad{group[1]}") for group in listgroups]
key = iter(keyboard)
Output = [list(islice(key,elem))for elem in[2 for n in range(len(keyboard))]]
app.edit_message_text(chat_id,message_id,text1,
parse_mode="html",reply_markup=markup(Output))
elif lenG < 1 and lenS < 1:
app.edit_message_text(chat_id,message_id,text2,parse_mode='html')
elif lenG > 0 and lenS < 1:
app.edit_message_text(chat_id,message_id,text3,parse_mode='html')
elif lenG < 1 and lenS > 0:
app.edit_message_text(chat_id,message_id,text4,parse_mode='html')
step = 'None'
def AddToGroups(chat_id,message_id,query,data):
global step
app.edit_message_text(chat_id,message_id,f" How Many Accounts Do You want to work with?
\nFor example: 6 ",parse_mode="html")
step = f"GettActivityNumber{data}"
def GettActivityNumber(chat_id,message_id,text,message):
global step
UG = step[20:] #username Group
update = (f"{str(UG)}",)
db = Groups("Model.db")
db.create_table()
usergroup = db.get_list_username_groups(update)
AN = text
step ='None'
GeActivityAccounts(chat_id,message_id,usergroup,AN)
def GeActivityAccounts(chat_id,message_id,usergroup,AN):
db = Account("Model.db")
db.create_table()
list_phone_Activity = db.get_list_phone_Activity()
list_accounts_add = list()
for Activity in list_phone_Activity:
db = SettingAddmember("Model.db")
db.create_table()
get_list_Setting = db.get_list_Setting()
try:
setting = get_list_Setting[0][1]
except:pass
lastActivity = str(Activity[1]) + ' ' + str(Activity[2])
date = DateTime().d
time = DateTime().t
TimeNow = str(date) + ' ' + str(time)
FMT = '%d-%m-%Y %H:%M:%S'
tdeltaa = datetime.strptime(TimeNow, FMT) - datetime.strptime(lastActivity, FMT)
if re.search(r'(\d.*).day',str(tdeltaa)):
bet = re.findall(r'(\d.*).day',str(tdeltaa))
if bet[0] >= setting:
list_accounts_add.append(Activity[0])
else:
print('not account')
else:
pass
if len(list_accounts_add) >= int(AN):
list_Account = list_accounts_add[:int(AN)]
print(len(list_Account))
ForAddChatMember(chat_id,message_id,list_Account,usergroup)
else:
MessageThree(chat_id,message_id)
def ForAddChatMember(chat_id,message_id,list_Account,usergroup):
for account in list_Account:
print(f"Start Add -> [{account}]")
sleep(30)
threading.Thread(target=AddMemberToGroup, args = [account,usergroup,chat_id,message_id]).start()
def AddMemberToGroup(account,usergroup,chat_id,message_id):
db = SettingAddmember("Model.db")
db.create_table()
list_setting = db.get_list_Setting()
db.close()
db = Username("Model.db")
db.create_table()
list_username = db.get_list_username()
list_user = [x for x in list_username]
activity = int(list_setting[0][2])
today_send_success = 0
today_send_unsuccess = 0
F = 0
list_group_username = list()
try:
api_id, api_hash = 2624818, "9d6e5f2365a2a9867d219e869f3e3656" #api_id,"api_hash"
app = Client(f'sessions/phone{account}',api_id,api_hash)
app.start()
if len(list_user) <= 1:
MessageTwo(chat_id,message_id)
else:
try:
app.join_chat(usergroup[0])
except Exception as error:
print(f"[{account}]\tWhen Join Chat: {error}")
try:
for member in app.iter_chat_members(usergroup[0]):
if member.user.username != None and member.user.is_self != True and member.user.is_bot != True:
list_group_username.append(member.user.username)
else:pass
except Exception as error:print(error)
while today_send_success != activity:
user_id = choice(db.get_list_username())
time.sleep(5)
try:
if user_id not in list_group_username:
app.add_chat_members(usergroup[0],user_id )
else:pass
except errors.Forbidden as error:
deleteusername = (f"{user_id}",)
db.delete_username(deleteusername)
print(f"Error [{account}] {error}")
today_send_unsuccess += 1
continue
except errors.PeerFlood as error:
today_send_unsuccess += 1
F += 1
print(f"Error ({F}) [{account}] {error}")
if F == 3:
print(f"Add [{account}] Completed.Due to Limitation")
break
else:pass
except errors.FloodWait as error:
print(f"Error [{account}] {error}")
today_send_unsuccess += 1
FW +=1
if FW == 3:
break
else:pass
except errors.BadRequest as error:
print(f"Error [{account}] {error}")
except Exception as error:
print(f"Error Exception [{account}] {error}")
today_send_unsuccess += 1
else:
deleteusername = (f"{user_id}",)
db.delete_username(deleteusername)
today_send_success += 1
print(f"[{account}]\tsucessfull: {today_send_success}")
MessageAddMember(chat_id,message_id,today_send_success,today_send_unsuccess,account)
except errors.SessionRevoked as error:
print(f"Error 1 {error} Phone: {account}")
DeleteSessionRevoked(chat_id,message_id,account)
except errors.UserDeactivated as error:
print(f"Error 2 {error} Phone: {account}")
UpdateDeleteAccount(chat_id,message_id,account)
except errors.AuthKeyUnregistered as error:
print(f"Error 3 {error} Phone: {account}")
DeleteSessionRevoked(chat_id,message_id,account)
except Exception as error:
print(f"Error 4 {error} Phone: {account}")
def DeleteSessionRevoked(chat_id,message_id,account):
db = Account("Model.db")
db.create_table()
db.delete_account((account,))
db.close()
app.send_message(chat_id,f"This account[{account}
] can not be activated due to logout.\n\
Deleted from the database. Please re-enter this number in the bot
"
,parse_mode="html")
def UpdateDeleteAccount(chat_id,message_id,account):
db = Account("Model.db")
db.create_table()
db.update_delete(("True",account))
db.close()
app.send_message(chat_id,f"This account[{account}
] was deleted by Telegram",parse_mode="html")
def MessageAddMember(chat_id,message_id,today_send_success,today_send_unsuccess,account):
app.send_message(chat_id,f"Account{account}
did {today_send_success} successful and {today_send_unsuccess} unsuccessful",parse_mode="html")
SaveAddsAccount(chat_id,message_id,today_send_success,today_send_unsuccess,account)
def SaveAddsAccount (chat_id,message_id,today_send_success,today_send_unsuccess,account):
db = Account("Model.db")
db.create_table()
aaccount = (f"{account}",)
list_Addaccount = db.get_SuccessfulAdds_UnSuccessfulAdds_Adds(aaccount)
date = DateTime().d
time = DateTime().t
LastAdd,LastActivity = date,time
SuccessfulAdds = int(list_Addaccount[0][0])+today_send_success
UnSuccessfulAdds = int(list_Addaccount[0][1])+today_send_unsuccess
Adds = int(list_Addaccount[0][2])+today_send_success
db.close()
try:
db = Account("Model.db")
AllData = (f"{LastAdd}",f"{LastActivity}",f"{SuccessfulAdds}",f"{UnSuccessfulAdds}",f"{Adds}",account)
db.update_account(AllData)
db.close()
print(f"SaveAddsAccount -> ({account})")
SaveAddStatistics(chat_id,message_id,today_send_success,today_send_unsuccess,account,date,time)
except Exception as error:
print(f"Error:{error}")
def SaveAddStatistics(chat_id,message_id,today_send_success,today_send_unsuccess,account,date,time):
db = AddStatistics("Model.db")
db.create_table()
list_AddStatistics = db.get_list_Statistics()
if len(list_AddStatistics) < 1:
LastAdd, LastActivity = date,time
RequestedAdditions = 1
Adds = today_send_success
AddToday = today_send_success
PercentAddsSuccessful = (today_send_success * 100 ) / 10
try:
AllData = (f"{PercentAddsSuccessful}", f"{LastAdd}", f"{LastActivity}", f"{AddToday}", f"{RequestedAdditions}", f"{Adds}")
db.insert_data(AllData)
db.close()
print("insert SaveAddStatistics")
except Exception as error:
print(f"Error:{error}")
elif len(list_AddStatistics) >= 1:
LastAdd, LastActivity = date,time
Last_timeAdd_dateAdd = db.get_list_Statistics()
lastActivity = str(Last_timeAdd_dateAdd[0][1]) + ' ' + str(Last_timeAdd_dateAdd[0][2])
TimeNow = str(date) + ' ' + str(time)
FMT = '%d-%m-%Y %H:%M:%S'
tdeltaa = datetime.strptime(TimeNow, FMT) - datetime.strptime(lastActivity, FMT)
if re.search(r'(\d).day',str(tdeltaa)):
bet = re.findall(r'(\d).day',str(tdeltaa))
if int(bet[0]) >= 1:
AddToday = today_send_success
else:
print(f"else:{bet[0]}")
else:
AddToday = int(list_AddStatistics[0][3])+ today_send_success
RequestedAdditions = int(list_AddStatistics[0][4]) + 1
Adds = int(list_AddStatistics[0][5])+ today_send_success
PercentAddsSuccessful = (today_send_success * 100 ) / 10
try:
AllData = (f"{PercentAddsSuccessful}", f"{LastAdd}", f"{LastActivity}", f"{AddToday}", f"{RequestedAdditions}", f"{Adds}",account)
db.update_data(AllData)
print(f"Update SaveAddStatistics -> ({account})")
db.close()
except Exception as error:
print(f"Error:{error}")
#/-------------------------------------------------------------------------------------------------------------
app.start()
print("runing..")
idle()
app.stop()