├── .vscode └── extensions.json ├── Dev ├── 0 │ ├── accounts-searched.json │ ├── config.json │ ├── config.json.example │ ├── follow-users.js │ ├── search-users.js │ ├── unfollow-users.js │ └── your _accounts_to_unfollow.js ├── .gitignore ├── LICENSE ├── README.md ├── package-lock.json └── package.json ├── GitHub-Search-Follow.code-workspace ├── LICENSE ├── README.md ├── images ├── logo.png └── screenshot.png ├── py └── Searching users.py └── sample ├── .gitignore ├── LICENSE ├── README.md ├── package-lock.json ├── package.json └── src ├── config.json.example ├── delete-repos.js └── fetch-repos.js /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "bierner.emojisense", 4 | "piotrpalarz.vscode-gitignore-generator", 5 | "steoates.autoimport", 6 | "njpwerner.autodocstring", 7 | "mgmcdermott.vscode-language-babel", 8 | "formulahendry.code-runner", 9 | "waderyan.gitblame", 10 | "donjayamanne.git-extension-pack", 11 | "mhutchie.git-graph", 12 | "donjayamanne.githistory", 13 | "shaharkazaz.git-merger", 14 | "felipecaputo.git-project-manager", 15 | "github.codespaces", 16 | "github.vscode-pull-request-github", 17 | "codezombiech.gitignore", 18 | "eamodio.gitlens", 19 | "znck.grammarly", 20 | "visualstudioexptteam.vscodeintellicode", 21 | "visualstudioexptteam.intellicode-api-usage-examples", 22 | "xabikos.javascriptsnippets", 23 | "yzhang.markdown-all-in-one", 24 | "bierner.markdown-emoji", 25 | "bierner.markdown-preview-github-styles", 26 | "davidanson.vscode-markdownlint", 27 | "pkief.material-icon-theme", 28 | "christian-kohler.path-intellisense", 29 | "esbenp.prettier-vscode", 30 | "davidrockburn.py-pack", 31 | "ms-python.vscode-pylance", 32 | "ms-python.python", 33 | "donjayamanne.python-environment-manager", 34 | "donjayamanne.python-extension-pack", 35 | "kevinrose.vsc-python-indent", 36 | "frhtylcn.pythonsnippets", 37 | "wallabyjs.quokka-vscode", 38 | "tabnine.tabnine-vscode", 39 | "wayou.vscode-todo-highlight", 40 | "gruntfuggly.todo-tree", 41 | "shardulm94.trailing-spaces", 42 | "lihui.vs-color-picker", 43 | "vscode-icons-team.vscode-icons" 44 | ] 45 | } -------------------------------------------------------------------------------- /Dev/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # Project-specific 61 | src/config.json 62 | src/repos.json 63 | -------------------------------------------------------------------------------- /Dev/0/accounts-searched.json: -------------------------------------------------------------------------------- 1 | [ 2 | "qawemlilo", 3 | "markwhitfeld", 4 | "JimiSmith", 5 | "nrwiersma", 6 | "Siyanda", 7 | "DoGByTe-ZN", 8 | "rcrichton", 9 | "itvarsity", 10 | "DevStarOps", 11 | "ImaniAN", 12 | "Brianspha", 13 | "taylorgibb", 14 | "ronaldlangeveld", 15 | "tomjuggler", 16 | "adgsenpai", 17 | "Ksimz", 18 | "TallStack", 19 | "caybokotze", 20 | "OliverRC", 21 | "SpectrixDev", 22 | "Siphenathi", 23 | "Sbonelo01", 24 | "shai-04", 25 | "duncandee", 26 | "siyanda-zama", 27 | "Guo-Jian-Wang", 28 | "duncanhoggan", 29 | "Mrena", 30 | "ahmadbk", 31 | "gomomohapi", 32 | "Syfolics", 33 | "blestab", 34 | "chrisfraser", 35 | "rdwallis", 36 | "kishyr", 37 | "markodayan", 38 | "BlackHat786", 39 | "Shamina05", 40 | "devlinhaines01", 41 | "wezzcoetzee", 42 | "SitholeWB", 43 | "luke-siedle", 44 | "kimvanwyk", 45 | "Cherlano", 46 | "d-mather", 47 | "Bromilow", 48 | "nqubekoh", 49 | "XienSingh", 50 | "ferile-github", 51 | "MicahSphelele", 52 | "Sandilem7789", 53 | "SaberZA", 54 | "Senzo00", 55 | "orazmyradov", 56 | "Psyfo", 57 | "AsandaM", 58 | "MondeLionel", 59 | "Baintastic", 60 | "ayaovi", 61 | "Wheatbix", 62 | "LawrenceAmo", 63 | "laurenpalaeo", 64 | "Phakeme", 65 | "faGH", 66 | "GabDewraj", 67 | "GiftKay", 68 | "sisimogangg", 69 | "RonaldMariah", 70 | "kylel", 71 | "malotho-zz", 72 | "mattadendorff", 73 | "WayneGoosen", 74 | "jfmadz", 75 | "mxolisizondi", 76 | "kewp", 77 | "callum09", 78 | "nkosingaleka", 79 | "autumn8", 80 | "scottdukes", 81 | "MfundoZA", 82 | "RyanGovender", 83 | "doron-nathan-epstein", 84 | "halcharger", 85 | "jeffjenk", 86 | "lulzbane", 87 | "jhswartz", 88 | "lordptolmy", 89 | "SOTASHE", 90 | "Sbusiey", 91 | "treveshan", 92 | "dominicpedro", 93 | "philane-Msibi-Ndlondlo", 94 | "kerwinc", 95 | "tHinqa", 96 | "Ryan-ED", 97 | "KhanyiTheGreat", 98 | "TenthPlanet", 99 | "DrStupit", 100 | "TonyStark42", 101 | "kiaanonthehub", 102 | "Spharah", 103 | "getlashified", 104 | "memelamc", 105 | "grae22", 106 | "Pham3n", 107 | "ntokozo-shagala", 108 | "SivalenSivalingam", 109 | "Caracal-IT", 110 | "JunaidZA", 111 | "larabaker96", 112 | "jiteshnunnan", 113 | "Axiematic", 114 | "mxoh20", 115 | "HaydenSookchand", 116 | "SamukeloNgidi", 117 | "Siphenathi-Nathi", 118 | "nielsberglund", 119 | "PaulHMason", 120 | "Lizardon09", 121 | "riyaadhm", 122 | "umsuka", 123 | "Hello-Zeze", 124 | "AndileDimba", 125 | "louisnelza", 126 | "Kbam7", 127 | "richard-keller", 128 | "darryldaniel", 129 | "Pattkhwela", 130 | "shanebowyer", 131 | "MaxEaston", 132 | "Robin--", 133 | "AutobidZA", 134 | "SihleNxasane", 135 | "ChanBos", 136 | "mpofukelvintafadzwa", 137 | "Praize", 138 | "mystus", 139 | "David-Tennant", 140 | "Kwenziwa", 141 | "jamesfosker", 142 | "peter-wiles", 143 | "robbiehaynes", 144 | "BrandonJellyfish", 145 | "NeeleshRambally", 146 | "ShaheenSolwa", 147 | "SiyaSok", 148 | "LungeloNkosi65", 149 | "DaylinBehr", 150 | "melzatkinson", 151 | "darinellman", 152 | "developmedev", 153 | "SytheZN", 154 | "AsadJeewa", 155 | "KKatlego", 156 | "rosstapson", 157 | "mgn2486", 158 | "jugR0jones", 159 | "nhlakaniphom", 160 | "Thokoza", 161 | "paulsebeikin", 162 | "shubhojitroy3", 163 | "wiley1za", 164 | "Dawood-Kamdar", 165 | "rohinijagath", 166 | "zizilebhekwayo", 167 | "NicoleMeinie", 168 | "Caiphe", 169 | "TheFivery", 170 | "kyber12", 171 | "secondhandbuddah", 172 | "robindevitt", 173 | "BroKyl1910", 174 | "omransalih", 175 | "Xenoty", 176 | "FerozAlly", 177 | "musa-zulu", 178 | "ksekwamote", 179 | "andrewmngoma", 180 | "noondaysun", 181 | "JasonJ9895", 182 | "swssr", 183 | "ArmandoThulas", 184 | "codemavric", 185 | "Zizwemkz", 186 | "ChrisCrawford13", 187 | "s220213909", 188 | "kearnh", 189 | "jevdiego", 190 | "xolanigumbi", 191 | "mckabuza", 192 | "wesrobb", 193 | "remiX-", 194 | "prav-raghu", 195 | "justdaver", 196 | "clintguy74", 197 | "joshuastewart-durban", 198 | "goosenn", 199 | "craighatting", 200 | "kwazimbn", 201 | "LondonMashabela", 202 | "MatthewSmythe", 203 | "JohanScheepers", 204 | "IamXolisaniNgcobo", 205 | "CadeJames", 206 | "SandileMP", 207 | "sohanasingh", 208 | "Ravzy7", 209 | "evanmalherbe", 210 | "mySpha", 211 | "dirkslab", 212 | "jmathewburns", 213 | "Lindokuhle1", 214 | "caseyvictor", 215 | "abdulaziz06426", 216 | "Digitaldevinc", 217 | "JanetKoen", 218 | "weightwd", 219 | "ianAtTheSourceCode", 220 | "StJimmy0", 221 | "Anathikhuzwayo", 222 | "thula1987", 223 | "Jason-Hodkinson", 224 | "carl10011", 225 | "ZekMis", 226 | "FireCool", 227 | "vuyiwetsako", 228 | "unltdmobile", 229 | "luketurk", 230 | "LungisaniZikali", 231 | "Kyle-Chelliah", 232 | "Infinetit", 233 | "dtb888", 234 | "deanjames1", 235 | "jp-ikhokha", 236 | "KaylaLamp", 237 | "junaidxabd", 238 | "SamkeleMbuyazi", 239 | "dbn-Learner", 240 | "SakhileV", 241 | "EffectualnessZA", 242 | "chan-t-source", 243 | "Respo2018", 244 | "osiniq", 245 | "MichaelChadbourne", 246 | "SandileMajola", 247 | "Jack-Mthembu", 248 | "daynemare", 249 | "NomaguguNkosazane", 250 | "markpape", 251 | "Faiyaz-Aboobaker", 252 | "AslamJeewa", 253 | "Nondaba", 254 | "WayneWhitehead", 255 | "Kaylin-Moodley", 256 | "Talhah", 257 | "StephSny", 258 | "ajayakv", 259 | "RoryGren", 260 | "Automatics", 261 | "amahlengcono", 262 | "M1993-mc", 263 | "vee17", 264 | "audiovisuallab001", 265 | "Pamelamdunjana", 266 | "Ashtonn77", 267 | "TheGordon", 268 | "dockerdurban", 269 | "21630827", 270 | "ThulasizweMkhwanazi", 271 | "PrecedenceMthethwa", 272 | "Buyani", 273 | "mcdavidxii", 274 | "LeevenP", 275 | "NjabuloHlophe", 276 | "thaichizel", 277 | "jolinkomo-code", 278 | "Camo-ono", 279 | "gengel0794", 280 | "frontendguy89", 281 | "Sinovuyo2337", 282 | "carina-e", 283 | "Lihle23", 284 | "JunaidKarimD", 285 | "margaretcane", 286 | "Jabesza", 287 | "ErnKor", 288 | "GhostRyder867", 289 | "daymunatsi", 290 | "ulouizia", 291 | "connectivity-del", 292 | "chuma91", 293 | "Amalalin21", 294 | "deanalcock", 295 | "Charlie-Hastings", 296 | "lucascreativeza", 297 | "NENdwandwe", 298 | "youngdavid25", 299 | "InSpEcToR7PaTz", 300 | "keaton-codes-tech", 301 | "Isrumk", 302 | "leejowtec", 303 | "mirzaather1704", 304 | "NetVeteran", 305 | "Yard8", 306 | "Posworx", 307 | "ArmantHitchcock", 308 | "SihleHlophe", 309 | "techmanifestsa", 310 | "ngwaneking", 311 | "DaZeeO100", 312 | "sapmarvins", 313 | "RomeoGADS20XX", 314 | "marssza", 315 | "razerh0", 316 | "Lihle9", 317 | "Jauhaar", 318 | "Roseliyah394", 319 | "crillonn", 320 | "RichardShephard", 321 | "Austin217078639", 322 | "KGina", 323 | "Faithzulu", 324 | "Nokusa-Duma", 325 | "synju", 326 | "Tech-a-lot", 327 | "Myutopiauniverse", 328 | "SjaakZN", 329 | "gobbogames", 330 | "seanblyth", 331 | "jonobobo", 332 | "FBIAgent-47", 333 | "hdsdev", 334 | "Pylot-KZN", 335 | "rikihuman", 336 | "AndySamPowell", 337 | "RashidMotala", 338 | "Burgess237", 339 | "patricktendai", 340 | "FritsSteyn", 341 | "skhalozulu", 342 | "kharisanker", 343 | "mzwandile16", 344 | "Jenks17", 345 | "Machiavell", 346 | "Mudahunga", 347 | "TherealMelusi", 348 | "Nomcebo-CODER", 349 | "Trineal", 350 | "JeshenG", 351 | "ashongwe", 352 | "speakuptoo", 353 | "Keanan21", 354 | "ThobaniLuthuli", 355 | "Sykd", 356 | "tyronlove", 357 | "nduduzo1992", 358 | "KarynRitzy", 359 | "ConanRC", 360 | "k3yboardnerd", 361 | "stiaanj", 362 | "Lauren369", 363 | "DanDuPreez", 364 | "22Nick22", 365 | "Vulth01", 366 | "redebeer", 367 | "Creativ1s", 368 | "Oliesta", 369 | "CABLEAUX", 370 | "samkele01", 371 | "LeeVanStaden", 372 | "itskhethon", 373 | "Canti", 374 | "Nortechnology", 375 | "specpaint", 376 | "MrKeepDurbaning", 377 | "sims007", 378 | "YoushlenNadesan", 379 | "insikayakwazulu", 380 | "AdminHQ", 381 | "ChanelleC", 382 | "MoniqueCamilleri", 383 | "matyre73", 384 | "LwazoShuku", 385 | "AdrianBeukes", 386 | "0896DanielH", 387 | "mconradiesa", 388 | "greenerai", 389 | "NikitaJade", 390 | "NkosieN", 391 | "skyllarrart2021", 392 | "Suvashan1", 393 | "lael-bateman", 394 | "JPKavCal", 395 | "glenifferg", 396 | "Casablanca25273", 397 | "Pravir7728", 398 | "Damo27", 399 | "AshleyDhevalall", 400 | "Akshay-M1994", 401 | "Nontobekodyantjies030", 402 | "Carrie7904", 403 | "Sandile-89", 404 | "Nontobekodyantjies030", 405 | "KyleSilas16", 406 | "Avishkar-Motheelal", 407 | "celempendulo", 408 | "BhavikRamsundar", 409 | "Nosipho25", 410 | "Sengate", 411 | "shaunmauer", 412 | "Mteee", 413 | "BradleyGoulding", 414 | "Shivz01", 415 | "Mnyamana", 416 | "wondermkhize", 417 | "Pantherphor", 418 | "musatotech", 419 | "kakapa", 420 | "Judahm147", 421 | "riccardosirchia", 422 | "BonkeGama", 423 | "ronnynijimbere", 424 | "iamtalentqwabe", 425 | "MuhummedRauff", 426 | "khubonebp", 427 | "CleverSpoon", 428 | "nicholasKirkiridis", 429 | "eduardcoertze", 430 | "roryjacobs", 431 | "nishkarr", 432 | "Barnabas02", 433 | "Adriel-Naidoo", 434 | "Rooiperd", 435 | "JoshuaMoulton", 436 | "sphilileh", 437 | "glenkitchen", 438 | "mlwise24", 439 | "Siyakhokha", 440 | "PrishaniN", 441 | "SanmariF", 442 | "mpilonhlehopewell", 443 | "maseinc", 444 | "DannyN01", 445 | "jamestrevorlees", 446 | "mattcremerband", 447 | "DigitalTechProz", 448 | "dhirensham", 449 | "milletech", 450 | "renzovan", 451 | "jaydpage", 452 | "Zanimagubane", 453 | "Ver-1", 454 | "Sebenzile97", 455 | "SaneleMtambo", 456 | "ShaunHaageCLAB", 457 | "Rupert-Meyer", 458 | "mkhinya", 459 | "ramoneryan", 460 | "Ntusi", 461 | "Philani-TechPro", 462 | "Pearl-Kunene", 463 | "jklanga", 464 | "MitchellCHale", 465 | "REU3EN", 466 | "JustinPringle", 467 | "LangaXulu", 468 | "ShepherdZA", 469 | "Lee337", 470 | "Lablonde-Developper", 471 | "MartinGitti", 472 | "paulschoeman", 473 | "MustafaRazaHoosen", 474 | "BinaryCobra", 475 | "BachZA", 476 | "Aris-ngoy", 477 | "siyabongaprospersithole", 478 | "Boberoo", 479 | "itsmewes", 480 | "Ntozakhona", 481 | "AyabongaMakhoba", 482 | "Csharpapps", 483 | "JasonJHodkinson", 484 | "WrittenSoftwareSolutions", 485 | "bioskoop", 486 | "chanelleThomas", 487 | "Logang1007", 488 | "poovendrenn", 489 | "mpenduloanswer", 490 | "MatthewinDurban", 491 | "NateCreedDonato", 492 | "mabasonk", 493 | "lindongobese", 494 | "BaneleMjaji", 495 | "Joselaubscher", 496 | "lushenmoodley", 497 | "SifisoScS", 498 | "SiboneloJunior", 499 | "siphiwemkhize", 500 | "21428432", 501 | "Derrick-sudo", 502 | "Shikaar", 503 | "blacksquaresa", 504 | "prashaanpillay", 505 | "bongani-khoza", 506 | "lunganisimon", 507 | "Abombusoinvestment", 508 | "GStrydom", 509 | "Thola07", 510 | "Philani-504", 511 | "corne711", 512 | "FortuneMbulazi", 513 | "SashenGovender", 514 | "clxdi", 515 | "gaj-ash2017", 516 | "niftiart", 517 | "SifundoMdletshe", 518 | "UmbrellaCorpz", 519 | "CamMuller", 520 | "Daedalusdigital", 521 | "MRIncWorld", 522 | "dotcom-africa", 523 | "FoskerMedia", 524 | "black-box-sa", 525 | "immedia", 526 | "creation-labs", 527 | "bitfoundryza", 528 | "South-Africa-Durban-UG", 529 | "opendatadurban", 530 | "bcomza", 531 | "TimelapseSys", 532 | "novationslab", 533 | "ameerismailphotography", 534 | "magebamz1", 535 | "mkhonyovu", 536 | "enerserv", 537 | "JacksonMatanzima", 538 | "morganderek", 539 | "GrantMAD", 540 | "jack6Mthembu", 541 | "tsanalytics", 542 | "ashleypillay", 543 | "sasha-abrahams", 544 | "gfroza", 545 | "robosa-tech", 546 | "DeepshaMaharaj", 547 | "akwanda", 548 | "JazzProphet", 549 | "merge-digital", 550 | "mikestrat58", 551 | "KashKXG", 552 | "jeromep777", 553 | "mandiboy", 554 | "21324467", 555 | "nick401", 556 | "makhoba", 557 | "MlondyM", 558 | "Incognizack", 559 | "vanwilda", 560 | "Nkanyiso-Maps", 561 | "rjczanikcorp", 562 | "Keagan-Epicdev", 563 | "kabuki-framework", 564 | "MandisaGono", 565 | "identisoft-alaric", 566 | "rosefirstdigital", 567 | "readout-inc", 568 | "FNation95", 569 | "bearded-fig", 570 | "AjayJamnadas", 571 | "DeonBarnard", 572 | "TinyGatsheni", 573 | "BenPillay", 574 | "michael-bouwer", 575 | "Reginwaldt", 576 | "prasadthutta", 577 | "yusuf-limbada", 578 | "PBHarichan", 579 | "derek-ikhokha", 580 | "ProximaIndustries", 581 | "NtetheWonder", 582 | "Mxolymx", 583 | "nzuzosphesihle", 584 | "CeejayB", 585 | "Nhlanhla-Muthwa", 586 | "clare-rose", 587 | "joashrajin", 588 | "7teenseconds", 589 | "neiloliverifc", 590 | "srvittal", 591 | "mrvv", 592 | "IrfaanKamo", 593 | "Miniza", 594 | "Kev560", 595 | "MartinHoltz", 596 | "Djlobzase", 597 | "V-Gotti", 598 | "SAWelshy", 599 | "Rox-anne", 600 | "CoffeeCreativeStudio", 601 | "MdeWet", 602 | "ohzna", 603 | "dleerob", 604 | "schalk1308", 605 | "NomceboSnothy", 606 | "SinenhlanhlaKhumalo", 607 | "KyleStevensonCon", 608 | "NguniCoder", 609 | "MthokoMbanjwa", 610 | "IUA", 611 | "magicspyder", 612 | "EvansCarume", 613 | "SayedGitHub", 614 | "LindokuhleNcanana13", 615 | "jason-andrew889", 616 | "JuJuLish", 617 | "WEEZYE5", 618 | "Mfanafuthi-droid", 619 | "1PT618", 620 | "KABB-Solutions", 621 | "WisolveDev", 622 | "maphumulops", 623 | "Philani58", 624 | "roymakumborenga", 625 | "ShakaMpetshwa", 626 | "ZoeNzimande", 627 | "DBailie96", 628 | "mazwimyeza", 629 | "Skullkid01", 630 | "shakings", 631 | "ksdc-davidr", 632 | "weylandswart", 633 | "Simangaliso-Hlongwa", 634 | "ThandokuhleLuthuli", 635 | "Kilumbilo", 636 | "Teit22", 637 | "mad9000", 638 | "CraigHMawer", 639 | "mtneben", 640 | "keananisaacgovender", 641 | "luphelelemsani", 642 | "nt-dev", 643 | "wdstephen", 644 | "Masiyah", 645 | "AubreyMpungose", 646 | "samkelosnb", 647 | "AshleyKorsman", 648 | "Keatonnagappa", 649 | "21702826", 650 | "TMadawo", 651 | "SolidCodeSoft", 652 | "Nokwah", 653 | "mo699116", 654 | "rodneykatula", 655 | "LynMohring", 656 | "CompuSoftHard", 657 | "ks198406", 658 | "hodaridigital", 659 | "GOiNGHARD", 660 | "YoungBenny", 661 | "shecodes4africa", 662 | "Prav-SoftIce", 663 | "woodendecking", 664 | "TalitaJ", 665 | "MziyandaM21", 666 | "ColinHolden", 667 | "Keenan00", 668 | "Gaz-Hook", 669 | "ThembelihleThabethe", 670 | "Torus-Tech", 671 | "steveMuland", 672 | "MarkDC95", 673 | "Xiphan", 674 | "AveshanPillay", 675 | "JamesNathanHansen", 676 | "pexxie", 677 | "mhlunguep", 678 | "developer-hut", 679 | "ntokozo-mathenjwa", 680 | "Gizmo144", 681 | "Xoidi", 682 | "ZyborgRSA", 683 | "KovlynReddy", 684 | "siphamandlamzobe", 685 | "FalsePozitive", 686 | "prospernlooto", 687 | "DjBhopopo", 688 | "Rishane", 689 | "OmegaShange", 690 | "yusufgoga", 691 | "nathinice02", 692 | "CodeMerchant", 693 | "software-dev-app", 694 | "bradlegassick", 695 | "uSamkelo", 696 | "Muhammad-Kader", 697 | "SirSiyandaCele", 698 | "gertcoet", 699 | "geofflimerick", 700 | "MyCodeBuddy", 701 | "reddycode", 702 | "Adloc8tor", 703 | "smeasy", 704 | "TheAkashicLabs", 705 | "DandosReis", 706 | "Rontyili", 707 | "JayvdWalt", 708 | "Utreson", 709 | "varMfundo", 710 | "roux26", 711 | "swelihle", 712 | "Katz0806", 713 | "kudaT", 714 | "RemarqueTrolley", 715 | "joubertr", 716 | "calvinboyce", 717 | "931202", 718 | "ThePixelMatte", 719 | "Sanele-Clinton", 720 | "AndreKotze", 721 | "hansieroberts", 722 | "RagingFlame", 723 | "jonoblom639", 724 | "MarcelSmuts", 725 | "kulkaythang", 726 | "Jimb56223", 727 | "lynchm", 728 | "bilalmagid", 729 | "RobertSCNet", 730 | "tvakisai", 731 | "fukulisane", 732 | "PhakamaniXulu", 733 | "ArnoldBosch", 734 | "duncan-chig", 735 | "ThePowerfulProgrammer", 736 | "VanTheMan1234", 737 | "RofhiwaS", 738 | "Llewellyn", 739 | "nichanafey", 740 | "AlmaAdicta", 741 | "phindile84", 742 | "krisp-kwazulu-natal", 743 | "KingGatsheni", 744 | "martinrokkit", 745 | "LungeloHlela", 746 | "Mulokoshi", 747 | "Denzil2185", 748 | "Zamanie001", 749 | "JennaLeighh", 750 | "melusigumede", 751 | "ugenit", 752 | "KatlehoMosase", 753 | "MrRaghu", 754 | "alannm", 755 | "brentusa7", 756 | "novusworks", 757 | "ClintBarends", 758 | "TallStack-Game-Studios", 759 | "BasilDoug", 760 | "jaredpillay-crash", 761 | "MfanaMkhize", 762 | "Narain-Solutions", 763 | "bongank", 764 | "ElmMac", 765 | "SiphiweB", 766 | "Kwaden-Services-BI", 767 | "Khathangana", 768 | "craigmawer", 769 | "GeorgeMpopo", 770 | "johan-lab", 771 | "randalx2", 772 | "rkayZA", 773 | "alexfotios", 774 | "TanyaKonono", 775 | "dev-shahzadali", 776 | "Shanebignell", 777 | "Red-Soft", 778 | "MxoD", 779 | "Sizmo", 780 | "Alenbakuza", 781 | "malcxmr", 782 | "zaki70", 783 | "dhashvir", 784 | "dumisani", 785 | "dsbehn", 786 | "KeshavJ", 787 | "Zane2704", 788 | "Sourcefeed", 789 | "JessicaGreaves", 790 | "Willemsimba", 791 | "botiyana", 792 | "ndilekamgwetha", 793 | "maps999x", 794 | "WendyWarrenZA", 795 | "markcatsshepherd", 796 | "JosephKalinda", 797 | "Sihle4658", 798 | "Migally", 799 | "sarpongp", 800 | "RobinZen", 801 | "chatbotmasterza", 802 | "VickyMb", 803 | "Sbonelo1", 804 | "Milton7", 805 | "gavin4p", 806 | "nokuzoalpearl", 807 | "junoir", 808 | "jamesverkerk", 809 | "21750657", 810 | "Cwele", 811 | "KRi570Ph3R", 812 | "Khulekani-Manzini", 813 | "Zimdollar", 814 | "JamesPrestonZA", 815 | "SASoftwareHouse", 816 | "JeroTech", 817 | "insanedust", 818 | "shelldon-wells", 819 | "Heekzbase", 820 | "Elidadt", 821 | "Thandojelly", 822 | "Nameshan04", 823 | "nmorisho", 824 | "UnclePraise", 825 | "LindoDuma", 826 | "AlladinIrshaad", 827 | "Mholi-BPC", 828 | "nosiphocmanxithi", 829 | "theothomson", 830 | "ralfepoisson", 831 | "TravisReed01", 832 | "Poimen", 833 | "MvuseleloNzama", 834 | "NikheelR97", 835 | "DevMtho", 836 | "BonganiKhoza", 837 | "awpillay", 838 | "Ndaba315", 839 | "turnersshipping", 840 | "Teshaylan", 841 | "KhulekaniThwalaPhotography", 842 | "SLCreativeStudio-2016", 843 | "mabenajoe", 844 | "Nkuleh", 845 | "TriciaGovindasamy", 846 | "Zim-Geqe", 847 | "human0", 848 | "Gallifreyan-Jedi", 849 | "Sanel-R", 850 | "AyandaMak", 851 | "veritesomwa", 852 | "Willem991", 853 | "Siphah", 854 | "MattyK-123", 855 | "Jordz2203", 856 | "ngcoya", 857 | "nicholasoobramoney", 858 | "Wendy002", 859 | "mcebisiDut", 860 | "zimprince", 861 | "Ashishqa", 862 | "zs5cey", 863 | "JessieHerron", 864 | "daynemare-dev", 865 | "9409150784084", 866 | "mdumakhosini", 867 | "CryptoPapa", 868 | "olamideayub", 869 | "Docker-Durban", 870 | "Vengesaie", 871 | "VulaneMthembu", 872 | "identisoft-johano", 873 | "Dhurbans29", 874 | "mohanmuthusamy", 875 | "Komikazii", 876 | "NiealsG", 877 | "Silulekobless7", 878 | "Mutanda", 879 | "GreenYellowBean", 880 | "sheru77", 881 | "olwethumendu", 882 | "Graham1904", 883 | "WAP719", 884 | "HeinVH", 885 | "Jondawg13", 886 | "richardhowes", 887 | "mpilomm", 888 | "seyderzn", 889 | "mzweh", 890 | "UbulwembuCommunicationSoftwareSolutions", 891 | "dylandupreez", 892 | "SuperMoe27", 893 | "mhlophe", 894 | "andyminnitt", 895 | "twinmagix", 896 | "casablinds", 897 | "devioc", 898 | "siyanda555", 899 | "21401824", 900 | "lizwikhanyile", 901 | "MndeCode", 902 | "DIYElectronicsZA", 903 | "LungeloNene", 904 | "ManikhweSchool", 905 | "NigelNaicker", 906 | "gstirk", 907 | "gouston", 908 | "Kb-Sparks", 909 | "sangwenikl", 910 | "GlobaTech", 911 | "theUseless", 912 | "Keeveshinnaidoo", 913 | "Rodney-Pillay", 914 | "RevTheDev09", 915 | "mqadi", 916 | "bluntspoon", 917 | "Sthembisoh10", 918 | "Zjybra", 919 | "Astrodude123", 920 | "DenysNienaber", 921 | "andilezulu", 922 | "THAMMY202", 923 | "rolandharrison", 924 | "ntsakom", 925 | "MegaMissile", 926 | "liyabonampokela", 927 | "ThuliNtshangase", 928 | "Bigdash89", 929 | "YudhiNaidoo", 930 | "DeviocDigital", 931 | "carldupreeez", 932 | "thobas", 933 | "TangibleSolutions", 934 | "SphehZn", 935 | "tigenix", 936 | "NikeshSaroop", 937 | "ZainGH", 938 | "DaveWardSA", 939 | "emo-e", 940 | "wisolve", 941 | "sbkhanyase", 942 | "Sakhile07", 943 | "buildersindurban", 944 | "frosg05", 945 | "mahmoudegypte", 946 | "vsharper", 947 | "IRaceComputers", 948 | "Xander-Educational-Apps", 949 | "Jengwa", 950 | "CodeNovators", 951 | "codestreamsystems", 952 | "Asanda302", 953 | "Archer2341", 954 | "KeithMatic", 955 | "Lwandle99Git", 956 | "raeeskkhan", 957 | "MduduziMathonsi", 958 | "NewmanSibisi400", 959 | "ShawnYWhite", 960 | "21352795", 961 | "deniellalla", 962 | "UXFoundry", 963 | "MS120", 964 | "siyandasokhela", 965 | "HopsMyeni", 966 | "MlungisiKhanyile", 967 | "joshuawoolf", 968 | "zoompix", 969 | "JBL2018", 970 | "garry-williams", 971 | "carl100011", 972 | "EFML", 973 | "KaraboLeso", 974 | "Cherelove00", 975 | "whereabouthq", 976 | "Shuhwaf", 977 | "peterah", 978 | "Carl311", 979 | "Kay-shokane", 980 | "Phumelele197", 981 | "Rock-louder", 982 | "Mfundoh", 983 | "carldupreez07", 984 | "boagorudolph", 985 | "trivolinmoodley", 986 | "ShaunFourie", 987 | "languteka", 988 | "Reactorize", 989 | "Sbothemaestro", 990 | "sisindisiwe", 991 | "scholarmaverick1991", 992 | "kgothalo-r", 993 | "grindrodam", 994 | "glarmadadotcom", 995 | "ostyosty", 996 | "identisoft", 997 | "pagedown-co", 998 | "abortionpills1", 999 | "wesleySpalmer", 1000 | "akalam-dev", 1001 | "lindile" 1002 | ] -------------------------------------------------------------------------------- /Dev/0/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "github_username": "ImaniAN", 3 | "fetch_following_api_url": "https://api.github.com/users", 4 | "followUN_api_url": "https://api.github.com/user/following", 5 | "users_api_url": "https://api.github.com/users", 6 | "base_api_url": "https://api.github.com", 7 | "access_token": "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", 8 | "user_search_api_url": "https://api.github.com/search/users?q=location:durban&per_page=100" 9 | } -------------------------------------------------------------------------------- /Dev/0/config.json.example: -------------------------------------------------------------------------------- 1 | { 2 | "api_url": "https://api.github.com", 3 | "access_token": "", 4 | "github_username": "" 5 | } 6 | 7 | "api_url": "https://api.github.com/search/users" 8 | "api_url": "https://api.github.com/search/users?q=location:durban" 9 | https://github.com/search?q=location%3A%22South+Africa%22 10 | 11 | // "api_url": "https://api.github.com/search/users?q=location:durban&per_page=100" 12 | 13 | https://github.com/search?q=mike+in:name+created%3A%3C2011-01-01+type%3Auser&type=Users 14 | https://github.com/search?q=bolton+in%3Afullname&type=Users 15 | https://github.com/search?q=location%3Aza&type=Users 16 | https://github.com/search?q=repos%3A1+location%3Aiceland&type=Users 17 | https://github.com/search?q=created%3A2013-03-06+location%3Alondon&type=Users 18 | https://github.com/search?q=sparkle+followers%3A1..10&type=Users 19 | https://github.com/search?q=hello+NOT+world&type=Users 20 | https://github.com/search?utf8=%E2%9C%93&q=mentions%3Adefunkt+-org%3Agithub&type=Issues 21 | 22 | https://github.com/search?q=is%3Asponsorable&type=Users 23 | 24 | 25 | 26 | #sort:joined', "followers" 27 | &per_page=100 28 | =imani+repos:%3E1+followers:%3E10 29 | #order:asc' 30 | #followers:>1, 31 | #fullname:imani, 32 | #order:"desc" 33 | #location:"South Africa",durban,rwanda, 34 | https://docs.github.com/en/search-github/searching-on-github/searching-users 35 | https://docs.github.com/en/rest/reference/search#search-users 36 | https://docs.github.com/en/search-github/searching-on-github/searching-users#search-by-account-name-full-name-or-public-email 37 | -------------------------------------------------------------------------------- /Dev/0/follow-users.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const fs = require('fs'); 3 | const config = require('./config'); 4 | 5 | const AccountToFollow = require('./accounts-searched'); 6 | 7 | function followAccounts(userAccounts) { 8 | userAccounts.forEach(async account => { 9 | const URL = `${config.followUN_api_url}/${account}`; 10 | await axios.put(URL, { 11 | headers: { 12 | 'Content-Length': '0', 13 | Accept: 'application/vnd.github.v3+json', 14 | Authorization: `token ${config.access_token}` 15 | } 16 | }) 17 | .then(() => { 18 | console.log(`${account} has been followed!`); 19 | }) 20 | .catch(() => { 21 | console.error(`Error following ${account}...`); 22 | }); 23 | }); 24 | } 25 | 26 | followAccounts(AccountToFollow); -------------------------------------------------------------------------------- /Dev/0/search-users.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const fs = require('fs'); 3 | const config = require('./config'); 4 | 5 | const username = config.github_username; 6 | const URL = `${config.user_search_api_url}`; //Your Users https://api.github.com/users/ImaniAN/followers 7 | 8 | async function fetchAccounts(url) { 9 | const accounts = []; 10 | let page = 1; 11 | let stopFinding = false; 12 | while (!stopFinding) { 13 | await axios 14 | .get(url, { 15 | headers: { 16 | Accept: 'application/vnd.github.v3+json', 17 | Authorization: `token ${config.access_token}` 18 | }, 19 | params: { 20 | page 21 | }, 22 | }) 23 | .then(res => { 24 | if (res.data.items.length === 0) { 25 | stopFinding = true; 26 | return; 27 | } 28 | const searchedAccounts = res.data.items 29 | .map(UserAccounts => UserAccounts.login); 30 | console.log( 31 | `[Page ${page}] Found ${searchedAccounts.length} User(s) out of ${ 32 | res.data.length 33 | }:`, 34 | ); 35 | console.log(searchedAccounts.join('\n') + '\n'); 36 | accounts.push(...searchedAccounts); 37 | page++; 38 | }) 39 | .catch(err => { 40 | console.error(`Error fetching page ${page}: ${err}`); 41 | stopFinding = true; 42 | }); 43 | } 44 | return accounts; 45 | } 46 | 47 | fetchAccounts(URL).then(result => { 48 | console.log('Number of accounts found:', result.length); 49 | console.log(result.join('\n')); 50 | fs.writeFileSync('accounts-searched.json', JSON.stringify(result, null, 2)); 51 | }); 52 | -------------------------------------------------------------------------------- /Dev/0/unfollow-users.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const fs = require('fs'); 3 | const config = require('./config'); 4 | 5 | const AccountToFollow = require('./AccountToFollow'); 6 | 7 | function followAccounts(userAccounts) { 8 | userAccounts.forEach(async account => { 9 | const URL = `${config.followUN_api_url}/${account}`; 10 | await axios.delete(URL, { 11 | headers: { 12 | content_length: 0, 13 | Accept: 'application/vnd.github.v3+json', 14 | Authorization: `token ${config.access_token}` 15 | } 16 | }) 17 | .then(() => { 18 | console.log(`${account} has been unfollowed!`); 19 | }) 20 | .catch(() => { 21 | console.error(`Error following ${account}...`); 22 | }); 23 | }); 24 | } 25 | 26 | followAccounts(AccountToFollow); 27 | -------------------------------------------------------------------------------- /Dev/0/your _accounts_to_unfollow.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const fs = require('fs'); 3 | const config = require('./config'); 4 | 5 | const username = config.github_username; 6 | const URL = `${config.base_api_url}/${account}`; 7 | 8 | async function fetchAccounts(url) { 9 | const accounts = []; 10 | let page = 1; 11 | let stopFinding = false; 12 | while (!stopFinding) { 13 | await axios 14 | .get(url, { 15 | headers: { 16 | Accept: 'application/vnd.github.v3+json', 17 | Authorization: `token ${config.access_token}` 18 | }, 19 | params: { 20 | page 21 | }, 22 | }) 23 | .then(res => { 24 | if (res.data.length === 0) { 25 | stopFinding = true; 26 | return; 27 | } 28 | const searchedAccounts = res.data.items 29 | .map(UserAccounts => UserAccounts.login); 30 | console.log( 31 | `[Page ${page}] Found ${searchedAccounts.length} User(s) out of ${ 32 | res.data.length 33 | }:`, 34 | ); 35 | console.log(searchedAccounts.join('\n') + '\n'); 36 | accounts.push(...searchedAccounts); 37 | page++; 38 | }) 39 | .catch(err => { 40 | console.error(`Error fetching page ${page}: ${err}`); 41 | stopFinding = true; 42 | }); 43 | } 44 | return accounts; 45 | } 46 | 47 | fetchAccounts(URL).then(result => { 48 | console.log('Number of accounts found:', result.length); 49 | console.log(result.join('\n')); 50 | fs.writeFileSync('accounts-to-unfollow.json', JSON.stringify(result, null, 2)); 51 | }); 52 | -------------------------------------------------------------------------------- /Dev/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Yangshun Tay 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Dev/README.md: -------------------------------------------------------------------------------- 1 | # Delete GitHub Forks 2 | 3 | Delete your forked GitHub repositories easily in two steps. 4 | 5 | **Note:** Node 8+ is required because some new language features are used. 6 | 7 | ## Motivations 8 | 9 | Deleting GitHub repositories via the GitHub interface is a hassle; you have to enter your password followed by the name of the repository. This is not scalable if you contribute to open source a fair bit and have many forked repositories that you may not necessarily want to keep. Using this script, you can fetch a list of your GitHub repositories and delete the unwanted repositories in one go. 10 | 11 | ## Getting Started 12 | 13 | Clone this repository. 14 | 15 | ``` 16 | $ npm install 17 | $ cp src/config.json.example src/config.json 18 | ``` 19 | 20 | Add your GitHub username and access token to `config.json`. To get the access token, go to [this page](https://github.com/settings/tokens/new) and create a token that has the following permissions: `public_repo` and `delete_repo`. 21 | 22 | ## Usage 23 | 24 | Firstly, run the following command to fetch all your forked repositories. 25 | 26 | ```sh 27 | $ cd src 28 | $ node fetch-repos.js # Writes to a repos.json file. 29 | ``` 30 | 31 | A JSON file, `repos.json` containing an array of your repositories will be written into the same directory. Manually inspect it and remove the forked repositories that you want to keep. **The repositories that remain inside `repos.json` will be deleted on the next command. It is an irreversible operation. Use with great caution!**. 32 | 33 | ```sh 34 | $ node delete-repos.js # Reads from repos.json and deletes the repos inside it. 35 | ``` 36 | 37 | And all the repositories within `repos.json` will be deleted! It's that easy. 38 | 39 | The scripts can be potentially modified to work on an organization's repositories as well just by changing the URLs. Pull requests to support this feature are welcome. 40 | 41 | ## License 42 | 43 | MIT 44 | -------------------------------------------------------------------------------- /Dev/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "delete-github-forks", 3 | "version": "0.1.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "delete-github-forks", 9 | "version": "0.1.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "axios": "^0.21.1" 13 | }, 14 | "devDependencies": {} 15 | }, 16 | "node_modules/axios": { 17 | "version": "0.21.1", 18 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", 19 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", 20 | "dependencies": { 21 | "follow-redirects": "^1.10.0" 22 | } 23 | }, 24 | "node_modules/follow-redirects": { 25 | "version": "1.13.1", 26 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", 27 | "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", 28 | "funding": [ 29 | { 30 | "type": "individual", 31 | "url": "https://github.com/sponsors/RubenVerborgh" 32 | } 33 | ], 34 | "engines": { 35 | "node": ">=4.0" 36 | }, 37 | "peerDependenciesMeta": { 38 | "debug": { 39 | "optional": true 40 | } 41 | } 42 | } 43 | }, 44 | "dependencies": { 45 | "axios": { 46 | "version": "0.21.1", 47 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", 48 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", 49 | "requires": { 50 | "follow-redirects": "^1.10.0" 51 | } 52 | }, 53 | "follow-redirects": { 54 | "version": "1.13.1", 55 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", 56 | "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Dev/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "delete-github-forks", 3 | "version": "0.1.0", 4 | "description": "Delete your Github forks.", 5 | "main": "fetch-repos.js", 6 | "dependencies": { 7 | "axios": "^0.21.1" 8 | }, 9 | "devDependencies": {}, 10 | "scripts": { 11 | "test": "echo \"Error: no test specified\" && exit 1" 12 | }, 13 | "author": "Yangshun Tay", 14 | "license": "MIT" 15 | } 16 | -------------------------------------------------------------------------------- /GitHub-Search-Follow.code-workspace: -------------------------------------------------------------------------------- 1 | { 2 | "folders": [ 3 | { 4 | "path": "." 5 | } 6 | ], 7 | "settings": {}, 8 | "extensions": { 9 | "recommendations": [ 10 | "bierner.emojisense", 11 | "piotrpalarz.vscode-gitignore-generator", 12 | "steoates.autoimport", 13 | "njpwerner.autodocstring", 14 | "mgmcdermott.vscode-language-babel", 15 | "formulahendry.code-runner", 16 | "waderyan.gitblame", 17 | "donjayamanne.git-extension-pack", 18 | "mhutchie.git-graph", 19 | "donjayamanne.githistory", 20 | "shaharkazaz.git-merger", 21 | "felipecaputo.git-project-manager", 22 | "github.codespaces", 23 | "github.vscode-pull-request-github", 24 | "codezombiech.gitignore", 25 | "eamodio.gitlens", 26 | "znck.grammarly", 27 | "visualstudioexptteam.vscodeintellicode", 28 | "visualstudioexptteam.intellicode-api-usage-examples", 29 | "xabikos.javascriptsnippets", 30 | "yzhang.markdown-all-in-one", 31 | "bierner.markdown-emoji", 32 | "bierner.markdown-preview-github-styles", 33 | "davidanson.vscode-markdownlint", 34 | "pkief.material-icon-theme", 35 | "christian-kohler.path-intellisense", 36 | "esbenp.prettier-vscode", 37 | "davidrockburn.py-pack", 38 | "ms-python.vscode-pylance", 39 | "ms-python.python", 40 | "donjayamanne.python-environment-manager", 41 | "donjayamanne.python-extension-pack", 42 | "kevinrose.vsc-python-indent", 43 | "frhtylcn.pythonsnippets", 44 | "wallabyjs.quokka-vscode", 45 | "tabnine.tabnine-vscode", 46 | "wayou.vscode-todo-highlight", 47 | "gruntfuggly.todo-tree", 48 | "shardulm94.trailing-spaces", 49 | "lihui.vs-color-picker", 50 | "vscode-icons-team.vscode-icons" 51 | ] 52 | } 53 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Imani 'King' Niyigena 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | 13 | 14 | 21 | [![Contributors][contributors-shield]][contributors-url] 22 | [![Forks][forks-shield]][forks-url] 23 | [![Stargazers][stars-shield]][stars-url] 24 | [![Issues][issues-shield]][issues-url] 25 | [![MIT License][license-shield]][license-url] 26 | [![LinkedIn][linkedin-shield]][linkedin-url] 27 | 28 | 29 | 30 | 31 |
32 |
33 | 34 | Logo 35 | 36 | 37 |

GitHub-Search-Follow

38 | 39 |

40 | Automatically following GitHub Accounts based on filtered results from the GitHub public Search API 41 |
42 | Explore the docs » 43 |
44 |
45 | View Demo 46 | · 47 | Report Bug 48 | · 49 | Request Feature 50 |

51 |
52 | 53 | 54 | 55 | 56 |
57 | Table of Contents 58 |
    59 |
  1. 60 | About The Project 61 | 64 |
  2. 65 |
  3. 66 | Getting Started 67 | 71 |
  4. 72 |
  5. Usage
  6. 73 |
  7. Roadmap
  8. 74 |
  9. Contributing
  10. 75 |
  11. License
  12. 76 |
  13. Contact
  14. 77 |
  15. Acknowledgments
  16. 78 |
79 |
80 | 81 | 82 | 83 | 84 | ## About The Project 85 | 86 | [![Product Name Screen Shot][product-screenshot]](https://example.com) 87 | 88 | Here's a blank template to get started: To avoid retyping too much info. Do a search and replace with your text editor for the following: `github_username`, `repo_name`, `twitter_handle`, `linkedin_username`, `email_client`, `email`, `project_title`, `project_description` 89 | 90 |

(back to top)

91 | 92 | 93 | 94 | ### Built With 95 | 96 | * [![Next][Next.js]][Next-url] 97 | * [![React][React.js]][React-url] 98 | * [![Vue][Vue.js]][Vue-url] 99 | * [![Angular][Angular.io]][Angular-url] 100 | * [![Svelte][Svelte.dev]][Svelte-url] 101 | * [![Laravel][Laravel.com]][Laravel-url] 102 | * [![Bootstrap][Bootstrap.com]][Bootstrap-url] 103 | * [![JQuery][JQuery.com]][JQuery-url] 104 | 105 |

(back to top)

106 | 107 | 108 | 109 | 110 | ## Getting Started 111 | 112 | This is an example of how you may give instructions on setting up your project locally. 113 | To get a local copy up and running follow these simple example steps. 114 | 115 | ### Prerequisites 116 | 117 | This is an example of how to list things you need to use the software and how to install them. 118 | * npm 119 | ```sh 120 | npm install npm@latest -g 121 | ``` 122 | 123 | ### Installation 124 | 125 | 1. Get a free API Key at [https://example.com](https://example.com) 126 | 2. Clone the repo 127 | ```sh 128 | git clone https://github.com/ImaniAN/GitHub-Search-Follow.git 129 | ``` 130 | 3. Install NPM packages 131 | ```sh 132 | npm install 133 | ``` 134 | 4. Enter your API in `config.js` 135 | ```js 136 | const API_KEY = 'ENTER YOUR API'; 137 | ``` 138 | 139 |

(back to top)

140 | 141 | 142 | 143 | 144 | ## Usage 145 | 146 | Use this space to show useful examples of how a project can be used. Additional screenshots, code examples and demos work well in this space. You may also link to more resources. 147 | 148 | _For more examples, please refer to the [Documentation](https://example.com)_ 149 | 150 |

(back to top)

151 | 152 | 153 | 154 | 155 | ## Roadmap 156 | 157 | - [ ] Feature 1 158 | - [ ] Feature 2 159 | - [ ] Feature 3 160 | - [ ] Nested Feature 161 | 162 | See the [open issues](https://github.com/ImaniAN/GitHub-Search-Follow/issues) for a full list of proposed features (and known issues). 163 | 164 |

(back to top)

165 | 166 | 167 | 168 | 169 | ## Contributing 170 | 171 | Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. 172 | 173 | If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". 174 | Don't forget to give the project a star! Thanks again! 175 | 176 | 1. Fork the Project 177 | 2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) 178 | 3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) 179 | 4. Push to the Branch (`git push origin feature/AmazingFeature`) 180 | 5. Open a Pull Request 181 | 182 |

(back to top)

183 | 184 | 185 | 186 | 187 | ## License 188 | 189 | Distributed under the MIT License. See `LICENSE.txt` for more information. 190 | 191 |

(back to top)

192 | 193 | 194 | 195 | 196 | ## Contact 197 | 198 | Imani Niyigena - [@king_niyigena](https://twitter.com/king_niyigena) - imanix8@gmail.com 199 | 200 | Project Link: [https://github.com/ImaniAN](https://github.com/ImaniAN) 201 | 202 |

(back to top)

203 | 204 | 205 | 206 | 207 | ## Acknowledgments 208 | 209 | * [Imani Niyigena](https://github.com/ImaniAN) 210 | * []() 211 | * []() 212 | 213 |

(back to top)

214 | 215 | 216 | 217 | 218 | 219 | [contributors-shield]: https://img.shields.io/github/contributors/ImaniAN/GitHub-Search-Follow.svg?style=for-the-badge 220 | [contributors-url]: https://github.com/ImaniAN/GitHub-Search-Follow/graphs/contributors 221 | [forks-shield]: https://img.shields.io/github/forks/ImaniAN/GitHub-Search-Follow.svg?style=for-the-badge 222 | [forks-url]: https://github.com/ImaniAN/GitHub-Search-Follow/network/members 223 | [stars-shield]: https://img.shields.io/github/stars/ImaniAN/GitHub-Search-Follow.svg?style=for-the-badge 224 | [stars-url]: https://github.com/ImaniAN/GitHub-Search-Follow/stargazers 225 | [issues-shield]: https://img.shields.io/github/issues/ImaniAN/GitHub-Search-Follow.svg?style=for-the-badge 226 | [issues-url]: https://github.com/ImaniAN/GitHub-Search-Follow/issues 227 | [license-shield]: https://img.shields.io/github/license/ImaniAN/GitHub-Search-Follow.svg?style=for-the-badge 228 | [license-url]: https://github.com/ImaniAN/GitHub-Search-Follow/blob/master/LICENSE.txt 229 | [linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555 230 | [linkedin-url]: https://www.linkedin.com/in/imani-niyigena-04ab47136/ 231 | [product-screenshot]: images/screenshot.png 232 | 233 | [Svelte.dev]: https://img.shields.io/badge/Svelte-4A4A55?style=for-the-badge&logo=svelte&logoColor=FF3E00 234 | [Svelte-url]: https://svelte.dev/ 235 | 236 | [Bootstrap.com]: https://img.shields.io/badge/Bootstrap-563D7C?style=for-the-badge&logo=bootstrap&logoColor=white 237 | [Bootstrap-url]: https://getbootstrap.com 238 | [JQuery.com]: https://img.shields.io/badge/jQuery-0769AD?style=for-the-badge&logo=jquery&logoColor=white 239 | [JQuery-url]: https://jquery.com 240 | -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ImaniAN/GitHub-Search-Follow/794c4ce8887a1fb1e97dd8e16396600d65aaeda7/images/logo.png -------------------------------------------------------------------------------- /images/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ImaniAN/GitHub-Search-Follow/794c4ce8887a1fb1e97dd8e16396600d65aaeda7/images/screenshot.png -------------------------------------------------------------------------------- /py/Searching users.py: -------------------------------------------------------------------------------- 1 | from github import Github 2 | import schedule 3 | import time 4 | 5 | # First create a Github instance: 6 | 7 | # using an access token 8 | g = Github(login_or_token="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") 9 | #g = Github(login_or_token="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", timeout=3, retry=2) 10 | #g = Github(login_or_token="ImaniAN", password="PurposePa$$w0rd960311", timeout=20) 11 | 12 | # Search For users 13 | for users in g.search_users(query="location:durban, type:user", sort="followers",): 14 | g.get_user().add_to_following(following=users) 15 | print("You are now following", users.name) 16 | 17 | #followers:>1, 18 | #fullname:imani, niyigena 19 | #sort="followers", joined, 20 | #order="desc" 21 | #location:"South Africa",durban,rwanda, 22 | # # code goes here 23 | -------------------------------------------------------------------------------- /sample/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # Project-specific 61 | src/config.json 62 | src/repos.json 63 | -------------------------------------------------------------------------------- /sample/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Yangshun Tay 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /sample/README.md: -------------------------------------------------------------------------------- 1 | # Delete GitHub Forks 2 | 3 | Delete your forked GitHub repositories easily in two steps. 4 | 5 | **Note:** Node 8+ is required because some new language features are used. 6 | 7 | ## Motivations 8 | 9 | Deleting GitHub repositories via the GitHub interface is a hassle; you have to enter your password followed by the name of the repository. This is not scalable if you contribute to open source a fair bit and have many forked repositories that you may not necessarily want to keep. Using this script, you can fetch a list of your GitHub repositories and delete the unwanted repositories in one go. 10 | 11 | ## Getting Started 12 | 13 | Clone this repository. 14 | 15 | ``` 16 | $ npm install 17 | $ cp src/config.json.example src/config.json 18 | ``` 19 | 20 | Add your GitHub username and access token to `config.json`. To get the access token, go to [this page](https://github.com/settings/tokens/new) and create a token that has the following permissions: `public_repo` and `delete_repo`. 21 | 22 | ## Usage 23 | 24 | Firstly, run the following command to fetch all your forked repositories. 25 | 26 | ```sh 27 | $ cd src 28 | $ node fetch-repos.js # Writes to a repos.json file. 29 | ``` 30 | 31 | A JSON file, `repos.json` containing an array of your repositories will be written into the same directory. Manually inspect it and remove the forked repositories that you want to keep. **The repositories that remain inside `repos.json` will be deleted on the next command. It is an irreversible operation. Use with great caution!**. 32 | 33 | ```sh 34 | $ node delete-repos.js # Reads from repos.json and deletes the repos inside it. 35 | ``` 36 | 37 | And all the repositories within `repos.json` will be deleted! It's that easy. 38 | 39 | The scripts can be potentially modified to work on an organization's repositories as well just by changing the URLs. Pull requests to support this feature are welcome. 40 | 41 | ## License 42 | 43 | MIT 44 | -------------------------------------------------------------------------------- /sample/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "delete-github-forks", 3 | "version": "0.1.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "delete-github-forks", 9 | "version": "0.1.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "axios": "^0.21.1" 13 | }, 14 | "devDependencies": {} 15 | }, 16 | "node_modules/axios": { 17 | "version": "0.21.1", 18 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", 19 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", 20 | "dependencies": { 21 | "follow-redirects": "^1.10.0" 22 | } 23 | }, 24 | "node_modules/follow-redirects": { 25 | "version": "1.13.1", 26 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", 27 | "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", 28 | "funding": [ 29 | { 30 | "type": "individual", 31 | "url": "https://github.com/sponsors/RubenVerborgh" 32 | } 33 | ], 34 | "engines": { 35 | "node": ">=4.0" 36 | }, 37 | "peerDependenciesMeta": { 38 | "debug": { 39 | "optional": true 40 | } 41 | } 42 | } 43 | }, 44 | "dependencies": { 45 | "axios": { 46 | "version": "0.21.1", 47 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", 48 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", 49 | "requires": { 50 | "follow-redirects": "^1.10.0" 51 | } 52 | }, 53 | "follow-redirects": { 54 | "version": "1.13.1", 55 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", 56 | "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /sample/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "delete-github-forks", 3 | "version": "0.1.0", 4 | "description": "Delete your Github forks.", 5 | "main": "fetch-repos.js", 6 | "dependencies": { 7 | "axios": "^0.21.1" 8 | }, 9 | "devDependencies": {}, 10 | "scripts": { 11 | "test": "echo \"Error: no test specified\" && exit 1" 12 | }, 13 | "author": "Yangshun Tay", 14 | "license": "MIT" 15 | } 16 | -------------------------------------------------------------------------------- /sample/src/config.json.example: -------------------------------------------------------------------------------- 1 | { 2 | "api_url": "https://api.github.com", 3 | "access_token": "", 4 | "github_username": "" 5 | } 6 | -------------------------------------------------------------------------------- /sample/src/delete-repos.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const fs = require('fs'); 3 | const config = require('./config'); 4 | 5 | const reposForDeletion = require('./repos'); 6 | 7 | function deleteRepos(repos) { 8 | repos.forEach(async repo => { 9 | const URL = `${config.api_url}/repos/${repo}`; 10 | await axios.delete(URL, { 11 | headers: { 12 | Accept: 'application/vnd.github.v3+json', 13 | Authorization: `token ${config.access_token}` 14 | } 15 | }) 16 | .then(() => { 17 | console.log(`${repo} deleted!`); 18 | }) 19 | .catch(() => { 20 | console.error(`Error deleting ${repo}...`); 21 | }); 22 | }); 23 | } 24 | 25 | deleteRepos(reposForDeletion); 26 | -------------------------------------------------------------------------------- /sample/src/fetch-repos.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | const fs = require('fs'); 3 | const config = require('./config'); 4 | 5 | const username = config.github_username; 6 | const URL = `${config.api_url}/users/${username}/repos`; 7 | 8 | async function fetchRepos(url) { 9 | const repos = []; 10 | let page = 1; 11 | let stopFinding = false; 12 | while (!stopFinding) { 13 | await axios 14 | .get(url, { 15 | headers: { 16 | Accept: 'application/vnd.github.v3+json', 17 | Authorization: `token ${config.access_token}` 18 | }, 19 | params: { 20 | page 21 | }, 22 | }) 23 | .then(res => { 24 | if (res.data.length === 0) { 25 | stopFinding = true; 26 | return; 27 | } 28 | const forkedRepos = res.data 29 | .filter(repo => repo.fork) 30 | .map(repo => repo.full_name); 31 | console.log( 32 | `[Page ${page}] Found ${forkedRepos.length} User(s) out of ${ 33 | res.data.length 34 | }:`, 35 | ); 36 | console.log(forkedRepos.join('\n') + '\n'); 37 | repos.push(...forkedRepos); 38 | page++; 39 | }) 40 | .catch(err => { 41 | console.error(`Error fetching page ${page}: ${err}`); 42 | stopFinding = true; 43 | }); 44 | } 45 | return repos; 46 | } 47 | 48 | fetchRepos(URL).then(result => { 49 | console.log('Forked repos found:', result.length); 50 | console.log(result.join('\n')); 51 | fs.writeFileSync('repos.json', JSON.stringify(result, null, 2)); 52 | }); 53 | --------------------------------------------------------------------------------