Skip to content

Instantly share code, notes, and snippets.

@devhaozi
Forked from wozulong/issues_baipiao_checker.py
Created October 15, 2024 16:39
Show Gist options
  • Select an option

  • Save devhaozi/ada89c42c6ac712221897d20a77c74df to your computer and use it in GitHub Desktop.

Select an option

Save devhaozi/ada89c42c6ac712221897d20a77c74df to your computer and use it in GitHub Desktop.

Revisions

  1. @wozulong wozulong revised this gist Nov 23, 2023. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions issues_baipiao_checker.py
    Original file line number Diff line number Diff line change
    @@ -95,6 +95,9 @@ def lock_issue(repo, issue_number):

    issues = get_issues(github_repo)
    for issue in issues:
    if 'pull_request' in issue:
    continue

    login = issue['user']['login']
    if login not in stargazers:
    print('issue: {}, login: {} not in stargazers'.format(issue['number'], login))
  2. @wozulong wozulong revised this gist Nov 17, 2023. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions issues_baipiao_checker.py
    Original file line number Diff line number Diff line change
    @@ -12,7 +12,7 @@

    def get_stargazers(repo):
    page = 1
    _stargazers = []
    _stargazers = {}
    while True:
    queries = {
    'per_page': 100,
    @@ -29,7 +29,7 @@ def get_stargazers(repo):
    break

    for stargazer in data:
    _stargazers.append(stargazer['login'])
    _stargazers[stargazer['login']] = True
    page += 1

    print('list stargazers done, total: ' + str(len(_stargazers)))
  3. @wozulong wozulong created this gist Nov 17, 2023.
    104 changes: 104 additions & 0 deletions issues_baipiao_checker.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,104 @@
    import requests

    issue_labels = ['no respect']
    github_repo = '<owner>/<repo>'
    github_token = '<github token>'
    headers = {
    'Authorization': 'Bearer ' + github_token,
    'Accept': 'application/vnd.github+json',
    'X-GitHub-Api-Version': '2022-11-28',
    }


    def get_stargazers(repo):
    page = 1
    _stargazers = []
    while True:
    queries = {
    'per_page': 100,
    'page': page,
    }
    url = 'https://api.github.com/repos/{}/stargazers?'.format(repo)

    resp = requests.get(url, headers=headers, params=queries)
    if resp.status_code != 200:
    raise Exception('Error get stargazers: ' + resp.text)

    data = resp.json()
    if not data:
    break

    for stargazer in data:
    _stargazers.append(stargazer['login'])
    page += 1

    print('list stargazers done, total: ' + str(len(_stargazers)))
    return _stargazers


    def get_issues(repo):
    page = 1
    _issues = []
    while True:
    queries = {
    'state': 'open',
    'sort': 'created',
    'direction': 'desc',
    'per_page': 100,
    'page': page,
    }
    url = 'https://api.github.com/repos/{}/issues?'.format(repo)

    resp = requests.get(url, headers=headers, params=queries)
    if resp.status_code != 200:
    raise Exception('Error get issues: ' + resp.text)

    data = resp.json()
    if not data:
    break

    _issues += data
    page += 1

    print('list issues done, total: ' + str(len(_issues)))
    return _issues


    def close_issue(repo, issue_number):
    url = 'https://api.github.com/repos/{}/issues/{}'.format(repo, issue_number)
    data = {
    'state': 'closed',
    'state_reason': 'not_planned',
    'labels': issue_labels,
    }
    resp = requests.patch(url, headers=headers, json=data)
    if resp.status_code != 200:
    raise Exception('Error close issue: ' + resp.text)

    print('issue: {} closed'.format(issue_number))


    def lock_issue(repo, issue_number):
    url = 'https://api.github.com/repos/{}/issues/{}/lock'.format(repo, issue_number)
    data = {
    'lock_reason': 'spam',
    }
    resp = requests.put(url, headers=headers, json=data)
    if resp.status_code != 204:
    raise Exception('Error lock issue: ' + resp.text)

    print('issue: {} locked'.format(issue_number))


    if '__main__' == __name__:
    stargazers = get_stargazers(github_repo)

    issues = get_issues(github_repo)
    for issue in issues:
    login = issue['user']['login']
    if login not in stargazers:
    print('issue: {}, login: {} not in stargazers'.format(issue['number'], login))
    close_issue(github_repo, issue['number'])
    lock_issue(github_repo, issue['number'])

    print('done')