Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Contributors Tool #240

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 1 addition & 11 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,6 @@ A lot of users spent much time on helping us adding more translations to this re

---

[<img alt="TehZombiJesus" src="https://avatars.githubusercontent.com/u/81379135?v=4&s=117" width="117">](https://github.com/TehZombiJesus)[<img alt="timokueck" src="https://avatars.githubusercontent.com/u/59776330?v=4&s=117" width="117">](https://github.com/timokueck)[<img alt="DAmNRelentless" src="https://avatars.githubusercontent.com/u/16513358?v=4&s=117" width="117">](https://github.com/DAmNRelentless)[<img alt="Greazi-Timesk" src="https://avatars.githubusercontent.com/u/69437555?v=4&s=117" width="117">](https://github.com/Greazi-Times)[<img alt="Serviettesky" src="https://avatars.githubusercontent.com/u/56211508?v=4&s=117" width="117">](https://github.com/Serviettesky)[<img alt="Hitman477" src="https://avatars.githubusercontent.com/u/19522113?v=4&s=117" width="117">](https://github.com/Hitman477)

[<img alt="ItsWagPvP" src="https://avatars.githubusercontent.com/u/71121134?v=4&s=117" width="117">](https://github.com/ItsWagPvP)[<img alt="EazyFTW" src="https://avatars.githubusercontent.com/u/13033307?v=4&s=117" width="117">](https://github.com/EazyFTW)[<img alt="TechsCode" src="https://avatars.githubusercontent.com/u/14386031?v=4&s=117" width="117">](https://github.com/TechsCode)[<img alt="MeepTortoise" src="https://avatars.githubusercontent.com/u/72234877?v=4&s=117" width="117">](https://github.com/MeepTortoise)[<img alt="PanOkurka" src="https://avatars.githubusercontent.com/u/67430231?v=4&s=117" width="117">](https://github.com/PanOkurka)[<img alt="editon96" src="https://avatars.githubusercontent.com/u/42817235?v=4&s=117" width="117">](https://github.com/editon96)

[<img alt="Fedee0" src="https://avatars.githubusercontent.com/u/84406177?v=4&s=117" width="117">](https://github.com/Fedee0)[<img alt="Crosby601" src="https://avatars.githubusercontent.com/u/59035656?v=4&s=117" width="117">](https://github.com/Crosby601)[<img alt="CREEPERGAMER138" src="https://avatars.githubusercontent.com/u/24595466?v=4&s=117" width="117">](https://github.com/CREEPERGAMER138)[<img alt="NE137" src="https://avatars.githubusercontent.com/u/39844782?v=4&s=117" width="117">](https://github.com/NE137)[<img alt="Kraineff" src="https://avatars.githubusercontent.com/u/7906418?v=4&s=117" width="117">](https://github.com/Kraineff)[<img alt="Mellisen" src="https://avatars.githubusercontent.com/u/42451222?v=4&s=117" width="117">](https://github.com/Mellisen)

[<img alt="CraftJunkies" src="https://avatars.githubusercontent.com/u/73276572?v=4&s=117" width="117">](https://github.com/CraftJunkies)[<img alt="iFlyinq" src="https://avatars.githubusercontent.com/u/20583400?v=4&s=117" width="117">](https://github.com/iFlyinq)[<img alt="mrodz" src="https://avatars.githubusercontent.com/u/79176075?v=4&s=117" width="117">](https://github.com/mrodz)[<img alt="faab007" src="https://avatars.githubusercontent.com/u/28200451?v=4&s=117" width="117">](https://github.com/faab007)[<img alt="Im-Fran" src="https://avatars.githubusercontent.com/u/30329003?v=4&s=117" width="117">](https://github.com/Im-Fran)[<img alt="codebyxemu" src="https://avatars.githubusercontent.com/u/74688700?v=4&s=117" width="117">](https://github.com/codebyxemu)

[<img alt="JamesBach93" src="https://avatars.githubusercontent.com/u/18316658?v=4&s=117" width="117">](https://github.com/JamesBach93)[<img alt="Larskrs" src="https://avatars.githubusercontent.com/u/56251963?v=4&s=117" width="117">](https://github.com/Larskrs)[<img alt="chickiyeah" src="https://avatars.githubusercontent.com/u/55694044?v=4&s=117" width="117">](https://github.com/chickiyeah)[<img alt="Polda18" src="https://avatars.githubusercontent.com/u/25118993?v=4&s=117" width="117">](https://github.com/Polda18)[<img alt="reussy" src="https://avatars.githubusercontent.com/u/63428864?v=4&s=117" width="117">](https://github.com/reussy)[<img alt="dlsf" src="https://avatars.githubusercontent.com/u/35780068?v=4&s=117" width="117">](https://github.com/dlsf)

[<img alt="Mitricum" src="https://avatars.githubusercontent.com/u/63245289?v=4&s=117" width="117">](https://github.com/Mitricum)
[<img alt="Greazi-Times" src="https://avatars.githubusercontent.com/u/69437555?v=4" width="117">](https://github.com/Greazi-Times)[<img alt="Fedee0" src="https://avatars.githubusercontent.com/u/84406177?v=4" width="117">](https://github.com/Fedee0)[<img alt="slaapkopamy" src="https://avatars.githubusercontent.com/u/32595704?v=4" width="117">](https://github.com/slaapkopamy)[<img alt="TehZombiJesus" src="https://avatars.githubusercontent.com/u/81379135?v=4" width="117">](https://github.com/TehZombiJesus)[<img alt="rlnt" src="https://avatars.githubusercontent.com/u/16513358?v=4" width="117">](https://github.com/rlnt)[<img alt="timomatrix" src="https://avatars.githubusercontent.com/u/59776330?v=4" width="117">](https://github.com/timomatrix)[<img alt="Serviettesky" src="https://avatars.githubusercontent.com/u/56211508?v=4" width="117">](https://github.com/Serviettesky)[<img alt="OnlyMatty" src="https://avatars.githubusercontent.com/u/106517045?v=4" width="117">](https://github.com/OnlyMatty)[<img alt="Hitman477" src="https://avatars.githubusercontent.com/u/19522113?v=4" width="117">](https://github.com/Hitman477)[<img alt="PanOkurka" src="https://avatars.githubusercontent.com/u/67430231?v=4" width="117">](https://github.com/PanOkurka)[<img alt="gabrielecabrini" src="https://avatars.githubusercontent.com/u/71121134?v=4" width="117">](https://github.com/gabrielecabrini)[<img alt="SrLink16" src="https://avatars.githubusercontent.com/u/48114435?v=4" width="117">](https://github.com/SrLink16)[<img alt="editon96" src="https://avatars.githubusercontent.com/u/42817235?v=4" width="117">](https://github.com/editon96)[<img alt="chencu5958" src="https://avatars.githubusercontent.com/u/82279230?v=4" width="117">](https://github.com/chencu5958)[<img alt="faab007nl" src="https://avatars.githubusercontent.com/u/28200451?v=4" width="117">](https://github.com/faab007nl)[<img alt="Josesillo94" src="https://avatars.githubusercontent.com/u/88514757?v=4" width="117">](https://github.com/Josesillo94)[<img alt="NE137" src="https://avatars.githubusercontent.com/u/39844782?v=4" width="117">](https://github.com/NE137)[<img alt="Im-Fran" src="https://avatars.githubusercontent.com/u/30329003?v=4" width="117">](https://github.com/Im-Fran)[<img alt="CraftJunkies" src="https://avatars.githubusercontent.com/u/73276572?v=4" width="117">](https://github.com/CraftJunkies)[<img alt="Irowynn" src="https://avatars.githubusercontent.com/u/55800050?v=4" width="117">](https://github.com/Irowynn)[<img alt="KahpotVanilla" src="https://avatars.githubusercontent.com/u/85695775?v=4" width="117">](https://github.com/KahpotVanilla)[<img alt="Crosby601" src="https://avatars.githubusercontent.com/u/59035656?v=4" width="117">](https://github.com/Crosby601)[<img alt="iFlyinq" src="https://avatars.githubusercontent.com/u/20583400?v=4" width="117">](https://github.com/iFlyinq)[<img alt="WEBTER" src="https://avatars.githubusercontent.com/u/98613744?v=4" width="117">](https://github.com/WEBTER)[<img alt="timokueck" src="https://avatars.githubusercontent.com/u/14386031?v=4" width="117">](https://github.com/timokueck)[<img alt="Wolf-Organisation" src="https://avatars.githubusercontent.com/u/75575497?v=4" width="117">](https://github.com/Wolf-Organisation)[<img alt="mrodz" src="https://avatars.githubusercontent.com/u/79176075?v=4" width="117">](https://github.com/mrodz)[<img alt="enterih" src="https://avatars.githubusercontent.com/u/15361899?v=4" width="117">](https://github.com/enterih)[<img alt="JamesBach93" src="https://avatars.githubusercontent.com/u/18316658?v=4" width="117">](https://github.com/JamesBach93)[<img alt="ImYenil" src="https://avatars.githubusercontent.com/u/85287520?v=4" width="117">](https://github.com/ImYenil)[<img alt="blixy77" src="https://avatars.githubusercontent.com/u/116496257?v=4" width="117">](https://github.com/blixy77)[<img alt="YoshiiKun" src="https://avatars.githubusercontent.com/u/67446592?v=4" width="117">](https://github.com/YoshiiKun)[<img alt="EazyFTW" src="https://avatars.githubusercontent.com/u/13033307?v=4" width="117">](https://github.com/EazyFTW)[<img alt="MeepTortoise" src="https://avatars.githubusercontent.com/u/72234877?v=4" width="117">](https://github.com/MeepTortoise)[<img alt="codebyxemu" src="https://avatars.githubusercontent.com/u/74688700?v=4" width="117">](https://github.com/codebyxemu)[<img alt="MineTommy" src="https://avatars.githubusercontent.com/u/17363482?v=4" width="117">](https://github.com/MineTommy)

---
74 changes: 74 additions & 0 deletions utils/contributorsUpdater
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import requests

# Constants
GITHUB_API_URL = "https://api.github.com"
OUTPUT_FILE = "contributors.md"


def fetch_contributors_with_stats(owner, repo):
"""Fetch contributors of the GitHub repository with their stats."""
url = f"{GITHUB_API_URL}/repos/{owner}/{repo}/stats/contributors"
response = requests.get(url)

if response.status_code != 200:
print(f"Failed to fetch contributors: {response.status_code} {response.text}")
return []

data = response.json()
if not data:
print("No contributors or stats data available.")
return []

contributors = [
{
"login": contributor["author"]["login"],
"avatar_url": contributor["author"]["avatar_url"],
"lines_changed": sum(week["a"] + week["d"] for week in contributor["weeks"]),
}
for contributor in data
]

# Sort contributors by lines changed, descending
contributors.sort(key=lambda x: x["lines_changed"], reverse=True)
return contributors


def update_contributors_file(contributors):
"""Update the Contributors file with the list of contributors."""
with open(OUTPUT_FILE, "w") as file:
file.write("# **Contributors**\n\n")
file.write("This page is for crediting work of other people.\n\n")
file.write(
"Since this repository moved multiple times, a lot of contribution credits were lost.<br>\n"
)
file.write(
"A lot of users spent much time on helping us adding more translations to this repository, we want to thank them with this list.\n\n"
)
file.write("---\n\n")

for contributor in contributors:
file.write(
f"[<img alt=\"{contributor['login']}\" src=\"{contributor['avatar_url']}\" width=\"117\">](https://github.com/{contributor['login']})"
)
file.write("\n\n---\n")

print(f"Contributors have been written to {OUTPUT_FILE}.")


def main():
"""Main function to execute the tool."""
owner = "TechsCode"
repo = "PluginTranslations"

print(f"Fetching contributors for {owner}/{repo}...")
contributors = fetch_contributors_with_stats(owner, repo)

if contributors:
print(f"Fetched {len(contributors)} contributors.")
update_contributors_file(contributors)
else:
print("No contributors found or failed to fetch contributors.")


if __name__ == "__main__":
main()