From 3852956a71a907e0db546e5cde05ffd5b8097671 Mon Sep 17 00:00:00 2001 From: Xubin Ren <52506698+Re-bin@users.noreply.github.com> Date: Sun, 23 Aug 2026 00:35:51 +0800 Subject: [PATCH] docs: include all community contributors --- README.md | 268 ++++++++++++++++++++++++++ scripts/update_readme_contributors.py | 27 ++- 2 files changed, 289 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 981e90fad..4d7f70a3c 100644 --- a/README.md +++ b/README.md @@ -438,6 +438,274 @@ Use nanobot for a real task, report what broke, and then pick a focused improvem cyzlmh zhuzhh zpljd258 +cms19859230182-lang +amplifierplus +LZDQ +wb213 +shaun0927 +wzrayyy +LHMQ878 +Michael-lhh +Mizarka +rick2047 +kuchazi-yy +Protocol-zero-0 +subalkum +vystartasv +ZJUCQR +ZegWe +ZhangYuanhan-AI +chtangwin +dxtime +ethanclaw +WufeiHalf +stutiredboy +stupidloud +asif786ka +robbyczgw-cla +cypggs +web-flow +eliumusk +mikaku9944 +mamamiyear +jr551 +invictus-z +imfondof +hyoukadev +hata33 +fengxiaohu +vivganes +themavik +flyzstu +pikaqqqqqq +wyjBot +pblocz +niradler +longle325 +primit1v0 +honjiaxuan +DeeJ4yNg +danielphang +yanalialiuk +zhouzhuojie +zerone0x +yrk111222 +Xerxes-cn +suger-m +mengyhang +Liwx1014 +Shizoqua +KailBug +19emtuck +tsubasakong +wseng +3927o +FloRainRJY +agbocsardi +JilunSun7274 +dvejmz +ddadaal +jiehaoZ +Lbin91 +Alex-yang00 +xek +Harvey-Mackie +chenyahui +angleyanalbedo +adabarbulescu +yoheinishikubo +WormW +WhalerO +thomya +Tejas1Koli +Seeratul +SJK-py +RongLei-intel +QQQ300kuai +MiguelPF +mterhar +Pringlas +pjbakker +luojiaaoo +NearlCrews +yongPhone +ZXGERIC +erikmackinnon +rickererer +ferkans-amir +for13to1 +futurist +Maaannnn +rubychilds +init-new-world +Idealist17 +gola +greyishsong +h4nz4 +hoaresky +hcanyz +himax12 +Zeknes +ZhihaoZhang97 +linziyanleo +akinolur +alairjt +noki1928 +barreler126 +bllackhu +brendanlevy-clarahealth +cdkey85 +ducheng121 +SamZhu19921116 +justforyoudear +choiking +cocolato +luomaohao +codedragoncom +d1ago +daliu858 +danielyangfei +dingyanyi2019 +djmaze +dulltackle +samyzhh +shen0122 +shenchengtsi +sidkang +skiyo +sontianye +spartan077 +tercerapersona +tlguszz1010 +vandazia +vincentchen0x2-dev +tianrking +wcmolin +dynames0098 +knightconnorp +wymcmh +weijun-xia +yaotutu +yeounhyeok +Endeavour-Yuan +ziuus +dsxyy +azhengzz +jhkim43 +kimkitsuragi26 +kinchahoy +A11Might +kronk307 +lailoo +lang07123 +tetratorus +spinvettel +li-yazhou +ALIZE126 +Rheasilvia +mru4913 +mt-huerta +mytechdream +nikube +npodbielski +oriengy +popcell +qixinbo +qulllee +rav-melisono +razzh7 +rise2689 +hlibr +gthieleb +Rafa-Ross +korruz +hyudryu +breitburg +IlyaSemenov +Tevkanbot +JakeRowe19 +JamesWrigley +La-Volpe +JavisPeng +Jefsky +letzdoo-js +95256155o +joel611 +NiceLargeHuo +kamalakarrao +KEEPSLAMDUNK +krisLu +Krislu1221 +kyya +rreben +ATECHPCS +adrianhoehne +Aisht669 +AlbertWang688 +AlexanderMerkel +khmylov +karimluna +Bayern4ever-dot +abhinavaditya811 +bjoshuanoah +hanouticelina +quanmou +ClaytonWWilson +kaseru +danielemden +dmarkey +desmondsow +intelliot +eugenechae +ehs208 +Felix8568 +GabrielWithTina +georgeatparallel +SHLE1 +lzmjlrt +saimonventura +SIDD-KIDD +sihyeonn +Seym0n +fyhertz +sohamb117 +Solaris-star +Syoc +tedyyan +xuayan-nokia +TheAutomatic +TomLisankie +tamvicky +MVS-source +wingkwong +wenjielei1990 +Wenzhang-Chen +wesleyzhangwq +XiaoHuo888-hue +Lyt060814 +limdingwen +luc-nguyen-cake +maciejwojcik86 +mvanhorn +twiddles +maxmilian +mrbob-git +MuataSr +Neutralmilkzzz +nblondiau +omdv +rbankole +orrinwitt +pjperez +pve +PeterDaveHello +Molunerfinn +power88 +srajasimman +groudas +RohitDayanand +katafractari +rudy-of-the-corner

diff --git a/scripts/update_readme_contributors.py b/scripts/update_readme_contributors.py index c1ced036e..734b3f3d6 100644 --- a/scripts/update_readme_contributors.py +++ b/scripts/update_readme_contributors.py @@ -7,17 +7,25 @@ import argparse import json import os from pathlib import Path +from typing import TypedDict, cast from urllib.request import Request, urlopen REPOSITORY = "HKUDS/nanobot" README = Path(__file__).resolve().parents[1] / "README.md" START = "" END = "" -MAX_CONTRIBUTORS = 100 +PER_PAGE = 100 MAINTAINERS = {"re-bin", "chengyongru"} -def fetch_contributors() -> list[dict[str, str]]: +class Contributor(TypedDict): + login: str + type: str + html_url: str + avatar_url: str + + +def fetch_contributors() -> list[Contributor]: headers = { "Accept": "application/vnd.github+json", "User-Agent": "nanobot-readme", @@ -26,9 +34,16 @@ def fetch_contributors() -> list[dict[str, str]]: if token := os.environ.get("GITHUB_TOKEN"): headers["Authorization"] = f"Bearer {token}" - url = f"https://api.github.com/repos/{REPOSITORY}/contributors?per_page={MAX_CONTRIBUTORS}" - with urlopen(Request(url, headers=headers), timeout=30) as response: # noqa: S310 - contributors = json.load(response) + contributors: list[Contributor] = [] + page = 1 + while True: + url = f"https://api.github.com/repos/{REPOSITORY}/contributors?per_page={PER_PAGE}&page={page}" + with urlopen(Request(url, headers=headers), timeout=30) as response: # noqa: S310 + batch = cast(list[Contributor], json.load(response)) + contributors.extend(batch) + if len(batch) < PER_PAGE: + break + page += 1 return [ contributor @@ -40,7 +55,7 @@ def fetch_contributors() -> list[dict[str, str]]: ] -def render_wall(contributors: list[dict[str, str]]) -> str: +def render_wall(contributors: list[Contributor]) -> str: avatars = [ ( f''