#!/usr/bin/env python3 # This Source Code Form is licensed MPL-2.0: http://mozilla.org/MPL/2.0 import sys, os, re, requests userdict = {} def get_github_user_info(username): url = f"https://api.github.com/users/{username}" headers = { 'Authorization': f'token {os.getenv("GITHUB_TOKEN")}' } response = requests.get(url, headers=headers) if response.status_code == 200: user_info = response.json() return user_info.get('name'), user_info.get('company'), user_info.get('blog') else: print(f"Failed to fetch user information for {username}") return None, None, None def convert_handles_to_names(text): username_pattern = re.compile(r' @([\w-]+)\b') usernames = username_pattern.findall(text) for username in usernames: if username not in userdict: name, company, blog = get_github_user_info(username) userdict[username] = (name, company, blog) if name: text = text.replace(f'@{username}', name + f' (@{username})') return text def main(): if os.getenv("GITHUB_TOKEN") is None: print("Please set the GITHUB_TOKEN environment variable.", file=sys.stderr) sys.exit(1) # Read from stdin input_text = sys.stdin.read() converted_text = convert_handles_to_names(input_text) print(converted_text) if __name__ == "__main__": main() # Usage: # cat changelog.txt | python github-username-expander # Deps: # pip install requests # export GITHUB_TOKEN=your_github_token_here