diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ee79715 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.env +*.pyc \ No newline at end of file diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..8a1c8be --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: python telebot_main.py \ No newline at end of file diff --git a/csv_handler.py b/csv_handler.py new file mode 100644 index 0000000..1725a1b --- /dev/null +++ b/csv_handler.py @@ -0,0 +1,26 @@ +import csv + +def readCSVfromFile(csv_file_path) : + repo_data = dict() + with open(csv_file_path) as csv_file: + csv_reader = csv.reader(csv_file, delimiter=',') + line_count = 0 + for row in csv_reader: + if line_count > 0 : + repo_data[line_count - 1] = row; + line_count += 1 + print(f'Processed {line_count} lines.') + return repo_data + +def writeToCSV(csv_file_path, repo_data) : + with open(csv_file_path, mode='w', newline='') as csv_file: + writer = csv.writer(csv_file, delimiter=',') + length = len(repo_data) + fieldname = ['chat_id', 'owner_name', 'repo_url'] + writer.writerow(fieldname) + for i in range(length): + writer.writerow(repo_data[i]); + + + + diff --git a/keep_alive.py b/keep_alive.py new file mode 100644 index 0000000..e69de29 diff --git a/repo_list.txt b/repo_list.txt new file mode 100644 index 0000000..fe14f3f --- /dev/null +++ b/repo_list.txt @@ -0,0 +1,5 @@ +chat_id,owner_name,repo_url +176037276,Albertsutz,https://github.com/indocom/gapura +176037276,Albertsutz,https://github.com/indocom/lumina +176037276,Albertsutz,https://github.com/indocom/pinus-telebot +176037276,Albertsutz,https://github.com/indocom/pinus-client diff --git a/requirement.txt b/requirement.txt deleted file mode 100644 index 2c6173d..0000000 --- a/requirement.txt +++ /dev/null @@ -1,14 +0,0 @@ -https://developers.google.com/calendar/api/quickstart/python -https://developers.google.com/workspace/guides/create-project -https://developers.google.com/workspace/guides/create-credentials - - -To run this quickstart, you need the following prerequisites: - -Python 2.6 or greater. -The pip package management tool -A Google Cloud Platform project with the API enabled. To create a project and enable an API, refer to Create a project and enable the API -Authorization credentials for a desktop application. To learn how to create credentials for a desktop application, refer to Create credentials. -A Google account with Google Calendar enabled. - - diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..c2f4e8a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +python-telegram-bot==12.7 +requests + diff --git a/sample.txt b/sample.txt new file mode 100644 index 0000000..b11bd2b --- /dev/null +++ b/sample.txt @@ -0,0 +1,881 @@ +[ + { + "id": 179052802, + "node_id": "MDEwOlJlcG9zaXRvcnkxNzkwNTI4MDI=", + "name": "gapura", + "full_name": "indocom/gapura", + "private": false, + "owner": { + "login": "indocom", + "id": 31363162, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjMxMzYzMTYy", + "avatar_url": "https://avatars.githubusercontent.com/u/31363162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/indocom", + "html_url": "https://github.com/indocom", + "followers_url": "https://api.github.com/users/indocom/followers", + "following_url": "https://api.github.com/users/indocom/following{/other_user}", + "gists_url": "https://api.github.com/users/indocom/gists{/gist_id}", + "starred_url": "https://api.github.com/users/indocom/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/indocom/subscriptions", + "organizations_url": "https://api.github.com/users/indocom/orgs", + "repos_url": "https://api.github.com/users/indocom/repos", + "events_url": "https://api.github.com/users/indocom/events{/privacy}", + "received_events_url": "https://api.github.com/users/indocom/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/indocom/gapura", + "description": "Online repository for NUANSA Cultural Production", + "fork": false, + "url": "https://api.github.com/repos/indocom/gapura", + "forks_url": "https://api.github.com/repos/indocom/gapura/forks", + "keys_url": "https://api.github.com/repos/indocom/gapura/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/indocom/gapura/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/indocom/gapura/teams", + "hooks_url": "https://api.github.com/repos/indocom/gapura/hooks", + "issue_events_url": "https://api.github.com/repos/indocom/gapura/issues/events{/number}", + "events_url": "https://api.github.com/repos/indocom/gapura/events", + "assignees_url": "https://api.github.com/repos/indocom/gapura/assignees{/user}", + "branches_url": "https://api.github.com/repos/indocom/gapura/branches{/branch}", + "tags_url": "https://api.github.com/repos/indocom/gapura/tags", + "blobs_url": "https://api.github.com/repos/indocom/gapura/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/indocom/gapura/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/indocom/gapura/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/indocom/gapura/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/indocom/gapura/statuses/{sha}", + "languages_url": "https://api.github.com/repos/indocom/gapura/languages", + "stargazers_url": "https://api.github.com/repos/indocom/gapura/stargazers", + "contributors_url": "https://api.github.com/repos/indocom/gapura/contributors", + "subscribers_url": "https://api.github.com/repos/indocom/gapura/subscribers", + "subscription_url": "https://api.github.com/repos/indocom/gapura/subscription", + "commits_url": "https://api.github.com/repos/indocom/gapura/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/indocom/gapura/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/indocom/gapura/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/indocom/gapura/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/indocom/gapura/contents/{+path}", + "compare_url": "https://api.github.com/repos/indocom/gapura/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/indocom/gapura/merges", + "archive_url": "https://api.github.com/repos/indocom/gapura/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/indocom/gapura/downloads", + "issues_url": "https://api.github.com/repos/indocom/gapura/issues{/number}", + "pulls_url": "https://api.github.com/repos/indocom/gapura/pulls{/number}", + "milestones_url": "https://api.github.com/repos/indocom/gapura/milestones{/number}", + "notifications_url": "https://api.github.com/repos/indocom/gapura/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/indocom/gapura/labels{/name}", + "releases_url": "https://api.github.com/repos/indocom/gapura/releases{/id}", + "deployments_url": "https://api.github.com/repos/indocom/gapura/deployments", + "created_at": "2019-04-02T10:19:49Z", + "updated_at": "2021-08-11T10:21:48Z", + "pushed_at": "2021-07-13T02:38:18Z", + "git_url": "git://github.com/indocom/gapura.git", + "ssh_url": "git@github.com:indocom/gapura.git", + "clone_url": "https://github.com/indocom/gapura.git", + "svn_url": "https://github.com/indocom/gapura", + "homepage": "", + "size": 52207, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Ruby", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "archived": true, + "disabled": false, + "open_issues_count": 13, + "license": { + "key": "gpl-3.0", + "name": "GNU General Public License v3.0", + "spdx_id": "GPL-3.0", + "url": "https://api.github.com/licenses/gpl-3.0", + "node_id": "MDc6TGljZW5zZTk=" + }, + "allow_forking": true, + "forks": 1, + "open_issues": 13, + "watchers": 0, + "default_branch": "development" + }, + { + "id": 245927992, + "node_id": "MDEwOlJlcG9zaXRvcnkyNDU5Mjc5OTI=", + "name": "lumina", + "full_name": "indocom/lumina", + "private": false, + "owner": { + "login": "indocom", + "id": 31363162, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjMxMzYzMTYy", + "avatar_url": "https://avatars.githubusercontent.com/u/31363162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/indocom", + "html_url": "https://github.com/indocom", + "followers_url": "https://api.github.com/users/indocom/followers", + "following_url": "https://api.github.com/users/indocom/following{/other_user}", + "gists_url": "https://api.github.com/users/indocom/gists{/gist_id}", + "starred_url": "https://api.github.com/users/indocom/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/indocom/subscriptions", + "organizations_url": "https://api.github.com/users/indocom/orgs", + "repos_url": "https://api.github.com/users/indocom/repos", + "events_url": "https://api.github.com/users/indocom/events{/privacy}", + "received_events_url": "https://api.github.com/users/indocom/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/indocom/lumina", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/indocom/lumina", + "forks_url": "https://api.github.com/repos/indocom/lumina/forks", + "keys_url": "https://api.github.com/repos/indocom/lumina/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/indocom/lumina/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/indocom/lumina/teams", + "hooks_url": "https://api.github.com/repos/indocom/lumina/hooks", + "issue_events_url": "https://api.github.com/repos/indocom/lumina/issues/events{/number}", + "events_url": "https://api.github.com/repos/indocom/lumina/events", + "assignees_url": "https://api.github.com/repos/indocom/lumina/assignees{/user}", + "branches_url": "https://api.github.com/repos/indocom/lumina/branches{/branch}", + "tags_url": "https://api.github.com/repos/indocom/lumina/tags", + "blobs_url": "https://api.github.com/repos/indocom/lumina/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/indocom/lumina/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/indocom/lumina/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/indocom/lumina/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/indocom/lumina/statuses/{sha}", + "languages_url": "https://api.github.com/repos/indocom/lumina/languages", + "stargazers_url": "https://api.github.com/repos/indocom/lumina/stargazers", + "contributors_url": "https://api.github.com/repos/indocom/lumina/contributors", + "subscribers_url": "https://api.github.com/repos/indocom/lumina/subscribers", + "subscription_url": "https://api.github.com/repos/indocom/lumina/subscription", + "commits_url": "https://api.github.com/repos/indocom/lumina/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/indocom/lumina/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/indocom/lumina/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/indocom/lumina/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/indocom/lumina/contents/{+path}", + "compare_url": "https://api.github.com/repos/indocom/lumina/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/indocom/lumina/merges", + "archive_url": "https://api.github.com/repos/indocom/lumina/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/indocom/lumina/downloads", + "issues_url": "https://api.github.com/repos/indocom/lumina/issues{/number}", + "pulls_url": "https://api.github.com/repos/indocom/lumina/pulls{/number}", + "milestones_url": "https://api.github.com/repos/indocom/lumina/milestones{/number}", + "notifications_url": "https://api.github.com/repos/indocom/lumina/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/indocom/lumina/labels{/name}", + "releases_url": "https://api.github.com/repos/indocom/lumina/releases{/id}", + "deployments_url": "https://api.github.com/repos/indocom/lumina/deployments", + "created_at": "2020-03-09T02:38:00Z", + "updated_at": "2021-08-14T10:19:13Z", + "pushed_at": "2021-08-14T10:17:50Z", + "git_url": "git://github.com/indocom/lumina.git", + "ssh_url": "git@github.com:indocom/lumina.git", + "clone_url": "https://github.com/indocom/lumina.git", + "svn_url": "https://github.com/indocom/lumina", + "homepage": null, + "size": 9367, + "stargazers_count": 3, + "watchers_count": 3, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 7, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": null, + "allow_forking": true, + "forks": 7, + "open_issues": 0, + "watchers": 3, + "default_branch": "master" + }, + { + "id": 118208890, + "node_id": "MDEwOlJlcG9zaXRvcnkxMTgyMDg4OTA=", + "name": "panutanq", + "full_name": "indocom/panutanq", + "private": false, + "owner": { + "login": "indocom", + "id": 31363162, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjMxMzYzMTYy", + "avatar_url": "https://avatars.githubusercontent.com/u/31363162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/indocom", + "html_url": "https://github.com/indocom", + "followers_url": "https://api.github.com/users/indocom/followers", + "following_url": "https://api.github.com/users/indocom/following{/other_user}", + "gists_url": "https://api.github.com/users/indocom/gists{/gist_id}", + "starred_url": "https://api.github.com/users/indocom/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/indocom/subscriptions", + "organizations_url": "https://api.github.com/users/indocom/orgs", + "repos_url": "https://api.github.com/users/indocom/repos", + "events_url": "https://api.github.com/users/indocom/events{/privacy}", + "received_events_url": "https://api.github.com/users/indocom/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/indocom/panutanq", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/indocom/panutanq", + "forks_url": "https://api.github.com/repos/indocom/panutanq/forks", + "keys_url": "https://api.github.com/repos/indocom/panutanq/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/indocom/panutanq/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/indocom/panutanq/teams", + "hooks_url": "https://api.github.com/repos/indocom/panutanq/hooks", + "issue_events_url": "https://api.github.com/repos/indocom/panutanq/issues/events{/number}", + "events_url": "https://api.github.com/repos/indocom/panutanq/events", + "assignees_url": "https://api.github.com/repos/indocom/panutanq/assignees{/user}", + "branches_url": "https://api.github.com/repos/indocom/panutanq/branches{/branch}", + "tags_url": "https://api.github.com/repos/indocom/panutanq/tags", + "blobs_url": "https://api.github.com/repos/indocom/panutanq/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/indocom/panutanq/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/indocom/panutanq/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/indocom/panutanq/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/indocom/panutanq/statuses/{sha}", + "languages_url": "https://api.github.com/repos/indocom/panutanq/languages", + "stargazers_url": "https://api.github.com/repos/indocom/panutanq/stargazers", + "contributors_url": "https://api.github.com/repos/indocom/panutanq/contributors", + "subscribers_url": "https://api.github.com/repos/indocom/panutanq/subscribers", + "subscription_url": "https://api.github.com/repos/indocom/panutanq/subscription", + "commits_url": "https://api.github.com/repos/indocom/panutanq/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/indocom/panutanq/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/indocom/panutanq/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/indocom/panutanq/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/indocom/panutanq/contents/{+path}", + "compare_url": "https://api.github.com/repos/indocom/panutanq/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/indocom/panutanq/merges", + "archive_url": "https://api.github.com/repos/indocom/panutanq/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/indocom/panutanq/downloads", + "issues_url": "https://api.github.com/repos/indocom/panutanq/issues{/number}", + "pulls_url": "https://api.github.com/repos/indocom/panutanq/pulls{/number}", + "milestones_url": "https://api.github.com/repos/indocom/panutanq/milestones{/number}", + "notifications_url": "https://api.github.com/repos/indocom/panutanq/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/indocom/panutanq/labels{/name}", + "releases_url": "https://api.github.com/repos/indocom/panutanq/releases{/id}", + "deployments_url": "https://api.github.com/repos/indocom/panutanq/deployments", + "created_at": "2018-01-20T04:27:59Z", + "updated_at": "2021-08-11T10:20:08Z", + "pushed_at": "2021-05-19T07:20:12Z", + "git_url": "git://github.com/indocom/panutanq.git", + "ssh_url": "git@github.com:indocom/panutanq.git", + "clone_url": "https://github.com/indocom/panutanq.git", + "svn_url": "https://github.com/indocom/panutanq", + "homepage": "", + "size": 3595, + "stargazers_count": 4, + "watchers_count": 4, + "language": "Ruby", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "archived": true, + "disabled": false, + "open_issues_count": 23, + "license": null, + "allow_forking": true, + "forks": 1, + "open_issues": 23, + "watchers": 4, + "default_branch": "master" + }, + { + "id": 292316619, + "node_id": "MDEwOlJlcG9zaXRvcnkyOTIzMTY2MTk=", + "name": "pinus-client", + "full_name": "indocom/pinus-client", + "private": false, + "owner": { + "login": "indocom", + "id": 31363162, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjMxMzYzMTYy", + "avatar_url": "https://avatars.githubusercontent.com/u/31363162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/indocom", + "html_url": "https://github.com/indocom", + "followers_url": "https://api.github.com/users/indocom/followers", + "following_url": "https://api.github.com/users/indocom/following{/other_user}", + "gists_url": "https://api.github.com/users/indocom/gists{/gist_id}", + "starred_url": "https://api.github.com/users/indocom/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/indocom/subscriptions", + "organizations_url": "https://api.github.com/users/indocom/orgs", + "repos_url": "https://api.github.com/users/indocom/repos", + "events_url": "https://api.github.com/users/indocom/events{/privacy}", + "received_events_url": "https://api.github.com/users/indocom/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/indocom/pinus-client", + "description": "Official website of Perhimpunan Indonesia NUS.", + "fork": false, + "url": "https://api.github.com/repos/indocom/pinus-client", + "forks_url": "https://api.github.com/repos/indocom/pinus-client/forks", + "keys_url": "https://api.github.com/repos/indocom/pinus-client/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/indocom/pinus-client/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/indocom/pinus-client/teams", + "hooks_url": "https://api.github.com/repos/indocom/pinus-client/hooks", + "issue_events_url": "https://api.github.com/repos/indocom/pinus-client/issues/events{/number}", + "events_url": "https://api.github.com/repos/indocom/pinus-client/events", + "assignees_url": "https://api.github.com/repos/indocom/pinus-client/assignees{/user}", + "branches_url": "https://api.github.com/repos/indocom/pinus-client/branches{/branch}", + "tags_url": "https://api.github.com/repos/indocom/pinus-client/tags", + "blobs_url": "https://api.github.com/repos/indocom/pinus-client/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/indocom/pinus-client/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/indocom/pinus-client/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/indocom/pinus-client/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/indocom/pinus-client/statuses/{sha}", + "languages_url": "https://api.github.com/repos/indocom/pinus-client/languages", + "stargazers_url": "https://api.github.com/repos/indocom/pinus-client/stargazers", + "contributors_url": "https://api.github.com/repos/indocom/pinus-client/contributors", + "subscribers_url": "https://api.github.com/repos/indocom/pinus-client/subscribers", + "subscription_url": "https://api.github.com/repos/indocom/pinus-client/subscription", + "commits_url": "https://api.github.com/repos/indocom/pinus-client/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/indocom/pinus-client/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/indocom/pinus-client/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/indocom/pinus-client/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/indocom/pinus-client/contents/{+path}", + "compare_url": "https://api.github.com/repos/indocom/pinus-client/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/indocom/pinus-client/merges", + "archive_url": "https://api.github.com/repos/indocom/pinus-client/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/indocom/pinus-client/downloads", + "issues_url": "https://api.github.com/repos/indocom/pinus-client/issues{/number}", + "pulls_url": "https://api.github.com/repos/indocom/pinus-client/pulls{/number}", + "milestones_url": "https://api.github.com/repos/indocom/pinus-client/milestones{/number}", + "notifications_url": "https://api.github.com/repos/indocom/pinus-client/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/indocom/pinus-client/labels{/name}", + "releases_url": "https://api.github.com/repos/indocom/pinus-client/releases{/id}", + "deployments_url": "https://api.github.com/repos/indocom/pinus-client/deployments", + "created_at": "2020-09-02T15:08:03Z", + "updated_at": "2021-08-28T09:57:53Z", + "pushed_at": "2021-09-13T01:25:40Z", + "git_url": "git://github.com/indocom/pinus-client.git", + "ssh_url": "git@github.com:indocom/pinus-client.git", + "clone_url": "https://github.com/indocom/pinus-client.git", + "svn_url": "https://github.com/indocom/pinus-client", + "homepage": "https://pinusonline.org", + "size": 20776, + "stargazers_count": 3, + "watchers_count": 3, + "language": "TypeScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 1, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 33, + "license": null, + "allow_forking": true, + "forks": 1, + "open_issues": 33, + "watchers": 3, + "default_branch": "master" + }, + { + "id": 328973298, + "node_id": "MDEwOlJlcG9zaXRvcnkzMjg5NzMyOTg=", + "name": "pinus-server", + "full_name": "indocom/pinus-server", + "private": false, + "owner": { + "login": "indocom", + "id": 31363162, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjMxMzYzMTYy", + "avatar_url": "https://avatars.githubusercontent.com/u/31363162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/indocom", + "html_url": "https://github.com/indocom", + "followers_url": "https://api.github.com/users/indocom/followers", + "following_url": "https://api.github.com/users/indocom/following{/other_user}", + "gists_url": "https://api.github.com/users/indocom/gists{/gist_id}", + "starred_url": "https://api.github.com/users/indocom/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/indocom/subscriptions", + "organizations_url": "https://api.github.com/users/indocom/orgs", + "repos_url": "https://api.github.com/users/indocom/repos", + "events_url": "https://api.github.com/users/indocom/events{/privacy}", + "received_events_url": "https://api.github.com/users/indocom/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/indocom/pinus-server", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/indocom/pinus-server", + "forks_url": "https://api.github.com/repos/indocom/pinus-server/forks", + "keys_url": "https://api.github.com/repos/indocom/pinus-server/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/indocom/pinus-server/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/indocom/pinus-server/teams", + "hooks_url": "https://api.github.com/repos/indocom/pinus-server/hooks", + "issue_events_url": "https://api.github.com/repos/indocom/pinus-server/issues/events{/number}", + "events_url": "https://api.github.com/repos/indocom/pinus-server/events", + "assignees_url": "https://api.github.com/repos/indocom/pinus-server/assignees{/user}", + "branches_url": "https://api.github.com/repos/indocom/pinus-server/branches{/branch}", + "tags_url": "https://api.github.com/repos/indocom/pinus-server/tags", + "blobs_url": "https://api.github.com/repos/indocom/pinus-server/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/indocom/pinus-server/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/indocom/pinus-server/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/indocom/pinus-server/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/indocom/pinus-server/statuses/{sha}", + "languages_url": "https://api.github.com/repos/indocom/pinus-server/languages", + "stargazers_url": "https://api.github.com/repos/indocom/pinus-server/stargazers", + "contributors_url": "https://api.github.com/repos/indocom/pinus-server/contributors", + "subscribers_url": "https://api.github.com/repos/indocom/pinus-server/subscribers", + "subscription_url": "https://api.github.com/repos/indocom/pinus-server/subscription", + "commits_url": "https://api.github.com/repos/indocom/pinus-server/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/indocom/pinus-server/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/indocom/pinus-server/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/indocom/pinus-server/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/indocom/pinus-server/contents/{+path}", + "compare_url": "https://api.github.com/repos/indocom/pinus-server/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/indocom/pinus-server/merges", + "archive_url": "https://api.github.com/repos/indocom/pinus-server/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/indocom/pinus-server/downloads", + "issues_url": "https://api.github.com/repos/indocom/pinus-server/issues{/number}", + "pulls_url": "https://api.github.com/repos/indocom/pinus-server/pulls{/number}", + "milestones_url": "https://api.github.com/repos/indocom/pinus-server/milestones{/number}", + "notifications_url": "https://api.github.com/repos/indocom/pinus-server/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/indocom/pinus-server/labels{/name}", + "releases_url": "https://api.github.com/repos/indocom/pinus-server/releases{/id}", + "deployments_url": "https://api.github.com/repos/indocom/pinus-server/deployments", + "created_at": "2021-01-12T12:01:43Z", + "updated_at": "2021-03-17T16:38:13Z", + "pushed_at": "2021-03-17T16:38:10Z", + "git_url": "git://github.com/indocom/pinus-server.git", + "ssh_url": "git@github.com:indocom/pinus-server.git", + "clone_url": "https://github.com/indocom/pinus-server.git", + "svn_url": "https://github.com/indocom/pinus-server", + "homepage": null, + "size": 2928, + "stargazers_count": 0, + "watchers_count": 0, + "language": "TypeScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": true, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 7, + "license": null, + "allow_forking": true, + "forks": 0, + "open_issues": 7, + "watchers": 0, + "default_branch": "main" + }, + { + "id": 405646052, + "node_id": "MDEwOlJlcG9zaXRvcnk0MDU2NDYwNTI=", + "name": "pinus-telebot", + "full_name": "indocom/pinus-telebot", + "private": false, + "owner": { + "login": "indocom", + "id": 31363162, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjMxMzYzMTYy", + "avatar_url": "https://avatars.githubusercontent.com/u/31363162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/indocom", + "html_url": "https://github.com/indocom", + "followers_url": "https://api.github.com/users/indocom/followers", + "following_url": "https://api.github.com/users/indocom/following{/other_user}", + "gists_url": "https://api.github.com/users/indocom/gists{/gist_id}", + "starred_url": "https://api.github.com/users/indocom/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/indocom/subscriptions", + "organizations_url": "https://api.github.com/users/indocom/orgs", + "repos_url": "https://api.github.com/users/indocom/repos", + "events_url": "https://api.github.com/users/indocom/events{/privacy}", + "received_events_url": "https://api.github.com/users/indocom/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/indocom/pinus-telebot", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/indocom/pinus-telebot", + "forks_url": "https://api.github.com/repos/indocom/pinus-telebot/forks", + "keys_url": "https://api.github.com/repos/indocom/pinus-telebot/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/indocom/pinus-telebot/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/indocom/pinus-telebot/teams", + "hooks_url": "https://api.github.com/repos/indocom/pinus-telebot/hooks", + "issue_events_url": "https://api.github.com/repos/indocom/pinus-telebot/issues/events{/number}", + "events_url": "https://api.github.com/repos/indocom/pinus-telebot/events", + "assignees_url": "https://api.github.com/repos/indocom/pinus-telebot/assignees{/user}", + "branches_url": "https://api.github.com/repos/indocom/pinus-telebot/branches{/branch}", + "tags_url": "https://api.github.com/repos/indocom/pinus-telebot/tags", + "blobs_url": "https://api.github.com/repos/indocom/pinus-telebot/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/indocom/pinus-telebot/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/indocom/pinus-telebot/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/indocom/pinus-telebot/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/indocom/pinus-telebot/statuses/{sha}", + "languages_url": "https://api.github.com/repos/indocom/pinus-telebot/languages", + "stargazers_url": "https://api.github.com/repos/indocom/pinus-telebot/stargazers", + "contributors_url": "https://api.github.com/repos/indocom/pinus-telebot/contributors", + "subscribers_url": "https://api.github.com/repos/indocom/pinus-telebot/subscribers", + "subscription_url": "https://api.github.com/repos/indocom/pinus-telebot/subscription", + "commits_url": "https://api.github.com/repos/indocom/pinus-telebot/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/indocom/pinus-telebot/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/indocom/pinus-telebot/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/indocom/pinus-telebot/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/indocom/pinus-telebot/contents/{+path}", + "compare_url": "https://api.github.com/repos/indocom/pinus-telebot/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/indocom/pinus-telebot/merges", + "archive_url": "https://api.github.com/repos/indocom/pinus-telebot/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/indocom/pinus-telebot/downloads", + "issues_url": "https://api.github.com/repos/indocom/pinus-telebot/issues{/number}", + "pulls_url": "https://api.github.com/repos/indocom/pinus-telebot/pulls{/number}", + "milestones_url": "https://api.github.com/repos/indocom/pinus-telebot/milestones{/number}", + "notifications_url": "https://api.github.com/repos/indocom/pinus-telebot/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/indocom/pinus-telebot/labels{/name}", + "releases_url": "https://api.github.com/repos/indocom/pinus-telebot/releases{/id}", + "deployments_url": "https://api.github.com/repos/indocom/pinus-telebot/deployments", + "created_at": "2021-09-12T13:14:11Z", + "updated_at": "2021-09-12T18:26:11Z", + "pushed_at": "2021-09-12T18:26:09Z", + "git_url": "git://github.com/indocom/pinus-telebot.git", + "ssh_url": "git@github.com:indocom/pinus-telebot.git", + "clone_url": "https://github.com/indocom/pinus-telebot.git", + "svn_url": "https://github.com/indocom/pinus-telebot", + "homepage": null, + "size": 1, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Python", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": null, + "allow_forking": true, + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "main" + }, + { + "id": 405261520, + "node_id": "MDEwOlJlcG9zaXRvcnk0MDUyNjE1MjA=", + "name": "pinus-ui-library", + "full_name": "indocom/pinus-ui-library", + "private": false, + "owner": { + "login": "indocom", + "id": 31363162, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjMxMzYzMTYy", + "avatar_url": "https://avatars.githubusercontent.com/u/31363162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/indocom", + "html_url": "https://github.com/indocom", + "followers_url": "https://api.github.com/users/indocom/followers", + "following_url": "https://api.github.com/users/indocom/following{/other_user}", + "gists_url": "https://api.github.com/users/indocom/gists{/gist_id}", + "starred_url": "https://api.github.com/users/indocom/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/indocom/subscriptions", + "organizations_url": "https://api.github.com/users/indocom/orgs", + "repos_url": "https://api.github.com/users/indocom/repos", + "events_url": "https://api.github.com/users/indocom/events{/privacy}", + "received_events_url": "https://api.github.com/users/indocom/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/indocom/pinus-ui-library", + "description": "UI Library of PINUS ", + "fork": false, + "url": "https://api.github.com/repos/indocom/pinus-ui-library", + "forks_url": "https://api.github.com/repos/indocom/pinus-ui-library/forks", + "keys_url": "https://api.github.com/repos/indocom/pinus-ui-library/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/indocom/pinus-ui-library/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/indocom/pinus-ui-library/teams", + "hooks_url": "https://api.github.com/repos/indocom/pinus-ui-library/hooks", + "issue_events_url": "https://api.github.com/repos/indocom/pinus-ui-library/issues/events{/number}", + "events_url": "https://api.github.com/repos/indocom/pinus-ui-library/events", + "assignees_url": "https://api.github.com/repos/indocom/pinus-ui-library/assignees{/user}", + "branches_url": "https://api.github.com/repos/indocom/pinus-ui-library/branches{/branch}", + "tags_url": "https://api.github.com/repos/indocom/pinus-ui-library/tags", + "blobs_url": "https://api.github.com/repos/indocom/pinus-ui-library/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/indocom/pinus-ui-library/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/indocom/pinus-ui-library/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/indocom/pinus-ui-library/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/indocom/pinus-ui-library/statuses/{sha}", + "languages_url": "https://api.github.com/repos/indocom/pinus-ui-library/languages", + "stargazers_url": "https://api.github.com/repos/indocom/pinus-ui-library/stargazers", + "contributors_url": "https://api.github.com/repos/indocom/pinus-ui-library/contributors", + "subscribers_url": "https://api.github.com/repos/indocom/pinus-ui-library/subscribers", + "subscription_url": "https://api.github.com/repos/indocom/pinus-ui-library/subscription", + "commits_url": "https://api.github.com/repos/indocom/pinus-ui-library/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/indocom/pinus-ui-library/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/indocom/pinus-ui-library/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/indocom/pinus-ui-library/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/indocom/pinus-ui-library/contents/{+path}", + "compare_url": "https://api.github.com/repos/indocom/pinus-ui-library/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/indocom/pinus-ui-library/merges", + "archive_url": "https://api.github.com/repos/indocom/pinus-ui-library/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/indocom/pinus-ui-library/downloads", + "issues_url": "https://api.github.com/repos/indocom/pinus-ui-library/issues{/number}", + "pulls_url": "https://api.github.com/repos/indocom/pinus-ui-library/pulls{/number}", + "milestones_url": "https://api.github.com/repos/indocom/pinus-ui-library/milestones{/number}", + "notifications_url": "https://api.github.com/repos/indocom/pinus-ui-library/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/indocom/pinus-ui-library/labels{/name}", + "releases_url": "https://api.github.com/repos/indocom/pinus-ui-library/releases{/id}", + "deployments_url": "https://api.github.com/repos/indocom/pinus-ui-library/deployments", + "created_at": "2021-09-11T02:16:55Z", + "updated_at": "2021-09-13T03:02:11Z", + "pushed_at": "2021-09-13T03:02:09Z", + "git_url": "git://github.com/indocom/pinus-ui-library.git", + "ssh_url": "git@github.com:indocom/pinus-ui-library.git", + "clone_url": "https://github.com/indocom/pinus-ui-library.git", + "svn_url": "https://github.com/indocom/pinus-ui-library", + "homepage": null, + "size": 198, + "stargazers_count": 0, + "watchers_count": 0, + "language": "TypeScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 7, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "forks": 0, + "open_issues": 7, + "watchers": 0, + "default_branch": "main" + }, + { + "id": 212374003, + "node_id": "MDEwOlJlcG9zaXRvcnkyMTIzNzQwMDM=", + "name": "pinus-web", + "full_name": "indocom/pinus-web", + "private": false, + "owner": { + "login": "indocom", + "id": 31363162, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjMxMzYzMTYy", + "avatar_url": "https://avatars.githubusercontent.com/u/31363162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/indocom", + "html_url": "https://github.com/indocom", + "followers_url": "https://api.github.com/users/indocom/followers", + "following_url": "https://api.github.com/users/indocom/following{/other_user}", + "gists_url": "https://api.github.com/users/indocom/gists{/gist_id}", + "starred_url": "https://api.github.com/users/indocom/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/indocom/subscriptions", + "organizations_url": "https://api.github.com/users/indocom/orgs", + "repos_url": "https://api.github.com/users/indocom/repos", + "events_url": "https://api.github.com/users/indocom/events{/privacy}", + "received_events_url": "https://api.github.com/users/indocom/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/indocom/pinus-web", + "description": "Indonesian Community in NUS homepage", + "fork": false, + "url": "https://api.github.com/repos/indocom/pinus-web", + "forks_url": "https://api.github.com/repos/indocom/pinus-web/forks", + "keys_url": "https://api.github.com/repos/indocom/pinus-web/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/indocom/pinus-web/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/indocom/pinus-web/teams", + "hooks_url": "https://api.github.com/repos/indocom/pinus-web/hooks", + "issue_events_url": "https://api.github.com/repos/indocom/pinus-web/issues/events{/number}", + "events_url": "https://api.github.com/repos/indocom/pinus-web/events", + "assignees_url": "https://api.github.com/repos/indocom/pinus-web/assignees{/user}", + "branches_url": "https://api.github.com/repos/indocom/pinus-web/branches{/branch}", + "tags_url": "https://api.github.com/repos/indocom/pinus-web/tags", + "blobs_url": "https://api.github.com/repos/indocom/pinus-web/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/indocom/pinus-web/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/indocom/pinus-web/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/indocom/pinus-web/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/indocom/pinus-web/statuses/{sha}", + "languages_url": "https://api.github.com/repos/indocom/pinus-web/languages", + "stargazers_url": "https://api.github.com/repos/indocom/pinus-web/stargazers", + "contributors_url": "https://api.github.com/repos/indocom/pinus-web/contributors", + "subscribers_url": "https://api.github.com/repos/indocom/pinus-web/subscribers", + "subscription_url": "https://api.github.com/repos/indocom/pinus-web/subscription", + "commits_url": "https://api.github.com/repos/indocom/pinus-web/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/indocom/pinus-web/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/indocom/pinus-web/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/indocom/pinus-web/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/indocom/pinus-web/contents/{+path}", + "compare_url": "https://api.github.com/repos/indocom/pinus-web/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/indocom/pinus-web/merges", + "archive_url": "https://api.github.com/repos/indocom/pinus-web/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/indocom/pinus-web/downloads", + "issues_url": "https://api.github.com/repos/indocom/pinus-web/issues{/number}", + "pulls_url": "https://api.github.com/repos/indocom/pinus-web/pulls{/number}", + "milestones_url": "https://api.github.com/repos/indocom/pinus-web/milestones{/number}", + "notifications_url": "https://api.github.com/repos/indocom/pinus-web/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/indocom/pinus-web/labels{/name}", + "releases_url": "https://api.github.com/repos/indocom/pinus-web/releases{/id}", + "deployments_url": "https://api.github.com/repos/indocom/pinus-web/deployments", + "created_at": "2019-10-02T15:17:40Z", + "updated_at": "2021-04-06T00:06:29Z", + "pushed_at": "2020-03-22T18:13:14Z", + "git_url": "git://github.com/indocom/pinus-web.git", + "ssh_url": "git@github.com:indocom/pinus-web.git", + "clone_url": "https://github.com/indocom/pinus-web.git", + "svn_url": "https://github.com/indocom/pinus-web", + "homepage": "https://www.pi-nus.org", + "size": 126617, + "stargazers_count": 2, + "watchers_count": 2, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": true, + "disabled": false, + "open_issues_count": 0, + "license": { + "key": "gpl-3.0", + "name": "GNU General Public License v3.0", + "spdx_id": "GPL-3.0", + "url": "https://api.github.com/licenses/gpl-3.0", + "node_id": "MDc6TGljZW5zZTk=" + }, + "allow_forking": true, + "forks": 0, + "open_issues": 0, + "watchers": 2, + "default_branch": "master" + }, + { + "id": 249113766, + "node_id": "MDEwOlJlcG9zaXRvcnkyNDkxMTM3NjY=", + "name": "visintus", + "full_name": "indocom/visintus", + "private": false, + "owner": { + "login": "indocom", + "id": 31363162, + "node_id": "MDEyOk9yZ2FuaXphdGlvbjMxMzYzMTYy", + "avatar_url": "https://avatars.githubusercontent.com/u/31363162?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/indocom", + "html_url": "https://github.com/indocom", + "followers_url": "https://api.github.com/users/indocom/followers", + "following_url": "https://api.github.com/users/indocom/following{/other_user}", + "gists_url": "https://api.github.com/users/indocom/gists{/gist_id}", + "starred_url": "https://api.github.com/users/indocom/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/indocom/subscriptions", + "organizations_url": "https://api.github.com/users/indocom/orgs", + "repos_url": "https://api.github.com/users/indocom/repos", + "events_url": "https://api.github.com/users/indocom/events{/privacy}", + "received_events_url": "https://api.github.com/users/indocom/received_events", + "type": "Organization", + "site_admin": false + }, + "html_url": "https://github.com/indocom/visintus", + "description": "Booking management app for Indonesian Community in NUS-facilitated visits", + "fork": false, + "url": "https://api.github.com/repos/indocom/visintus", + "forks_url": "https://api.github.com/repos/indocom/visintus/forks", + "keys_url": "https://api.github.com/repos/indocom/visintus/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/indocom/visintus/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/indocom/visintus/teams", + "hooks_url": "https://api.github.com/repos/indocom/visintus/hooks", + "issue_events_url": "https://api.github.com/repos/indocom/visintus/issues/events{/number}", + "events_url": "https://api.github.com/repos/indocom/visintus/events", + "assignees_url": "https://api.github.com/repos/indocom/visintus/assignees{/user}", + "branches_url": "https://api.github.com/repos/indocom/visintus/branches{/branch}", + "tags_url": "https://api.github.com/repos/indocom/visintus/tags", + "blobs_url": "https://api.github.com/repos/indocom/visintus/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/indocom/visintus/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/indocom/visintus/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/indocom/visintus/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/indocom/visintus/statuses/{sha}", + "languages_url": "https://api.github.com/repos/indocom/visintus/languages", + "stargazers_url": "https://api.github.com/repos/indocom/visintus/stargazers", + "contributors_url": "https://api.github.com/repos/indocom/visintus/contributors", + "subscribers_url": "https://api.github.com/repos/indocom/visintus/subscribers", + "subscription_url": "https://api.github.com/repos/indocom/visintus/subscription", + "commits_url": "https://api.github.com/repos/indocom/visintus/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/indocom/visintus/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/indocom/visintus/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/indocom/visintus/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/indocom/visintus/contents/{+path}", + "compare_url": "https://api.github.com/repos/indocom/visintus/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/indocom/visintus/merges", + "archive_url": "https://api.github.com/repos/indocom/visintus/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/indocom/visintus/downloads", + "issues_url": "https://api.github.com/repos/indocom/visintus/issues{/number}", + "pulls_url": "https://api.github.com/repos/indocom/visintus/pulls{/number}", + "milestones_url": "https://api.github.com/repos/indocom/visintus/milestones{/number}", + "notifications_url": "https://api.github.com/repos/indocom/visintus/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/indocom/visintus/labels{/name}", + "releases_url": "https://api.github.com/repos/indocom/visintus/releases{/id}", + "deployments_url": "https://api.github.com/repos/indocom/visintus/deployments", + "created_at": "2020-03-22T04:36:15Z", + "updated_at": "2021-05-29T04:19:10Z", + "pushed_at": "2020-08-31T02:59:32Z", + "git_url": "git://github.com/indocom/visintus.git", + "ssh_url": "git@github.com:indocom/visintus.git", + "clone_url": "https://github.com/indocom/visintus.git", + "svn_url": "https://github.com/indocom/visintus", + "homepage": "", + "size": 8006, + "stargazers_count": 1, + "watchers_count": 1, + "language": "JavaScript", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": true, + "disabled": false, + "open_issues_count": 2, + "license": { + "key": "gpl-3.0", + "name": "GNU General Public License v3.0", + "spdx_id": "GPL-3.0", + "url": "https://api.github.com/licenses/gpl-3.0", + "node_id": "MDc6TGljZW5zZTk=" + }, + "allow_forking": true, + "forks": 0, + "open_issues": 2, + "watchers": 1, + "default_branch": "master" + } +] diff --git a/telebot_main.py b/telebot_main.py index ac9f55c..910970d 100644 --- a/telebot_main.py +++ b/telebot_main.py @@ -1,44 +1,311 @@ -from telegram.ext import Updater, CommandHandler, MessageHandler, Filters -import logging - -#logging information -logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', - level=logging.INFO) - - -#Starting our bot -#Initialize updator and dispatcher -updater = Updater(token='TOKEN', use_context=True) -dispatcher = updater.dispatcher - - -#List of all of our functions -def start(update, context): - context.bot.send_message(chat_id=update.effective_chat.id, text="I'm a bot, please talk to me!") - -def echo(update, context): - context.bot.send_message(chat_id=update.effective_chat.id, text=update.message.text) - -def caps(update, context): - text_caps = ' '.join(context.args).upper() - context.bot.send_message(chat_id=update.effective_chat.id, text=text_caps) - -def unknown(update, context): - context.bot.send_message(chat_id=update.effective_chat.id, text="Sorry, I didn't understand that command.") - - -#List of handlers -start_handler = CommandHandler('start', start) -echo_handler = MessageHandler(Filters.text & (~Filters.command), echo) -caps_handler = CommandHandler('caps', caps) -unknown_handler = MessageHandler(Filters.command, unknown) - - -#Adding handlers to dispatcher -#Order matters -dispatcher.add_handler(start_handler) -dispatcher.add_handler(echo_handler) -dispatcher.add_handler(caps_handler) -dispatcher.add_handler(unknown_handler) - -updater.start_polling() +from __future__ import print_function +from telegram.ext import Updater, CommandHandler, MessageHandler, Filters +from telegram.ext.callbackqueryhandler import CallbackQueryHandler +from telegram.callbackquery import CallbackQuery +from telegram import ReplyKeyboardMarkup +import logging +import requests +import datetime +import os +import os.path +from googleapiclient.discovery import build +from google_auth_oauthlib.flow import InstalledAppFlow +from google.auth.transport.requests import Request +from google.oauth2.credentials import Credentials +from csv_handler import * + +BOT_API_TOKEN = "" +PORT = int(os.environ.get('PORT', 8443)) + +# chat_ids = [] + +#logging information +logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + level=logging.INFO) + + +#Starting our bot +#Initialize updator and dispatcher +updater = Updater(token= BOT_API_TOKEN, use_context=True) +dispatcher = updater.dispatcher + + +#List of all of our functions +def start(update, context): + + context.bot.send_message(chat_id=update.effective_chat.id, text="I'm KawaiiBot, use /list to show list of available commands and /help to know informations about the bot") + +def list(update, context): + keyboard = keyboard = [['/help'], ['/status', '/repo'], ['/new_pull_request']] + + reply_markup = ReplyKeyboardMarkup(keyboard, + one_time_keyboard=True, + resize_keyboard=True) + + update.message.reply_text('Please choose:', reply_markup=reply_markup) + +def help_func(update, context): + text = ("Hi, here is a list of commands\n\n") + text += ("/repo: Get the list of all repositories inside github.com/indocom\n\n") + text += ("/status: Get the list of all repositories that you have subscribed\n\n") + text += ("/add_repo : Subscribe to a particular repo\n\n") + context.bot.send_message(chat_id=update.effective_chat.id, text = text) + +def unknown(update, context): + context.bot.send_message(chat_id=update.effective_chat.id, text="Sorry, I didn't understand that command.") + +def repo_list(update, context): + url = "https://api.github.com/users/indocom/repos" + response = requests.get(url) + json = response.json() + + reply_text = ("Hi, here is the list of PINUS Repositories: \n") + for i in json: + reply_text += ("- " + i["name"] + " : " + i["svn_url"] + "\n") + + context.bot.send_message(chat_id=update.effective_chat.id, text=reply_text) + +def new_pull_request(update, context): + repo_data = readCSVfromFile("repo_list.txt") + length = len(repo_data) + id = str(update.message.chat_id) + + text = "" + for key, value in repo_data.items(): + if(value[0] != id): + continue + + url = "https://api.github.com/repos/" + value[2][19:] + "/pulls" + print(url) + response = requests.get(url) + json = response.json() + + print(json) + top_5 = json[0:5] + new_pulls = [] + + for i in top_5: + create_time = datetime.datetime.strptime(i["created_at"], "%Y-%m-%dT%H:%M:%SZ") + time_difference = (datetime.datetime.now() - create_time).total_seconds() + #28800 -> conversion from utc to gmt+8 + # + 5 mins is 29100 + print(time_difference) + if time_difference < 29100 : + new_pulls.append(i) + + if(len(new_pulls) == 0): + continue + text += ("\nREPO NAME: " + value[2][19:] + '\n\n') + for i in new_pulls: + text += ("- " + i["title"] + " : " + i["html_url"] + "\n\n") + + if (len(text) > 0): + final_text = "Hi, here is the new Pull Requests:\n" + text + + else: + final_text = "There is no new Pull Requests" + context.bot.send_message(chat_id=id, text=final_text) + + +def broadcast_pull_request(context): + repo_data = readCSVfromFile("repo_list.txt") + length = len(repo_data) + + chat_ids = [] + + for key, value in repo_data.items(): + if(len(value) == 0): + continue + if(value[0] not in chat_ids): + chat_ids.append(value[0]) + + for id in chat_ids: + text = "" + for key, value in repo_data.items(): + if(value[0] != id): + continue + + url = "https://api.github.com/repos/" + value[2][19:] + "/pulls" + print(url) + response = requests.get(url) + json = response.json() + + top_5 = json[0:5] + new_pulls = [] + + for i in top_5: + create_time = datetime.datetime.strptime(i["created_at"], "%Y-%m-%dT%H:%M:%SZ") + time_difference = (datetime.datetime.now() - create_time).total_seconds() + #28800 -> conversion from utc to gmt+8 + # + 5 mins is 29100 + print(time_difference) + if time_difference < 29100 : + new_pulls.append(i) + + if(len(new_pulls) == 0): + continue + text += ("\nREPO NAME: " + value[2][19:] + '\n\n') + for i in new_pulls: + text += ("- " + i["title"] + " : " + i["html_url"] + "\n\n") + + if (len(text) > 0): + final_text = "Hi, here is the new Pull Requests:\n" + text + context.bot.send_message(chat_id=id, text=final_text) + +# If modifying these scopes, delete the file token.json. +SCOPES = ['https://www.googleapis.com/auth/calendar'] + +def main(): + """Shows basic usage of the Google Calendar API. + Prints the start and name of the next 10 events on the user's calendar. + """ + creds = None + # The file token.json stores the user's access and refresh tokens, and is + # created automatically when the authorization flow completes for the first + # time. + if os.path.exists('token.json'): + creds = Credentials.from_authorized_user_file('token.json', SCOPES) + # If there are no (valid) credentials available, let the user log in. + if not creds or not creds.valid: + if creds and creds.expired and creds.refresh_token: + creds.refresh(Request()) + else: + flow = InstalledAppFlow.from_client_secrets_file( + 'credentials.json', SCOPES) + creds = flow.run_local_server(port=0) + # Save the credentials for the next run + with open('token.json', 'w') as token: + token.write(creds.to_json()) + + service = build('calendar', 'v3', credentials=creds) + + # Call the Calendar API + now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time + print('Getting the upcoming 10 events:') + f = open("events.txt", "w") + events_result = service.events().list(calendarId='tech.pinusonline@gmail.com', timeMin=now, + maxResults=10, singleEvents=True, + orderBy='startTime').execute() + events = events_result.get('items', []) + + if not events: + print('No upcoming events found.') + f.write("No upcoming events found."+"\n") + for event in events: + timestart = event['start'].get('dateTime', event['start'].get('date')) + print(timestart, event['summary']) + f.write(timestart + event['summary'] +"\n") + print() + print('Telebot Events:') + for event in events: + timestart = event['start'].get('dateTime', event['start'].get('date')) + if '[Telebot]' in event['summary']: + print(timestart, event['summary']) + f.close() + +def getevents(update, context): + if __name__ == '__main__': + main() + f = open("events.txt", "r") + reply_text = ("Getting the upcoming 10 events: \n") + for i in f: + reply_text += (i) + context.bot.send_message(chat_id=update.effective_chat.id, text=reply_text) +getevents_handler = CommandHandler('getevents', getevents) +dispatcher.add_handler(getevents_handler) + +def reminder(context): + if __name__ == '__main__': + main() + f = open("events.txt", "r") + text = '' + for i in f: + startime = datetime.datetime.strptime(i[0:19], "%Y-%m-%dT%H:%M:%S") + minute = (startime - datetime.datetime.now()).total_seconds()/60 + if 59 <= minute < 61: + a = i + text = "Reminder: You have an event in 1 hour. \n" + text += a + break + if len(text) > 2: + context.bot.send_message(chat_id=context.job.context, text=text) + +def remindme(update, context): + reply = 'Reminder is on.' + context.bot.send_message(chat_id=update.message.chat_id, text=reply) + context.job_queue.run_repeating(reminder, interval = 120, first = 1, context=update.message.chat_id) +remindme_handler = CommandHandler('remindme', remindme) +dispatcher.add_handler(remindme_handler) + +def status(update, context): + repo_data = readCSVfromFile("repo_list.txt") + length = len(repo_data) + + subscribed_repo = [] + text = "Hi, here is the list of your subscribed repositories:\n" + + for key, value in repo_data.items(): + if(len(value) > 0 and value[0] == str(update.message.chat_id)): + subscribed_repo.append(value[2]) + + if(len(subscribed_repo) > 0): + for i in subscribed_repo: + text += "- " + i + "\n" + update.message.reply_text(text) + else: + update.message.reply_text("You have not subscribed to any repositories. Use /help for more information") + +def add_repo(update, context): + repo_data = readCSVfromFile("repo_list.txt") + length = len(repo_data) + try: + # args[0] should contain the time for the timer in seconds + new_github_url = context.args[0] + new_chat_id = str(update.message.chat_id) + new_owner_name = update.message.from_user.username + repo_data[length] = [new_chat_id, new_owner_name, new_github_url] + + text = 'Successfully added new repo' + writeToCSV("repo_list.txt", repo_data) + update.message.reply_text(text + str(repo_data)) + + except (IndexError, ValueError): + update.message.reply_text('Usage: /add_repo ') + +#job queues +job = updater.job_queue.run_repeating(broadcast_pull_request, interval=300, first=1) + +#List of Command Handlers +start_handler = CommandHandler('start', start) +list_handler = CommandHandler('list', list) +help_handler = CommandHandler('help', help_func) +repo_list_handler = CommandHandler('repo', repo_list) +new_pull_request_handler = CommandHandler('new_pull_request', new_pull_request) +add_repo_handler = CommandHandler('add_repo', add_repo) + +status_handler = CommandHandler('status', status) + +#List of Message Handlers +unknown_handler = MessageHandler(Filters.command, unknown) + +#Adding handlers to dispatcher +#Order matters +dispatcher.add_handler(start_handler) +dispatcher.add_handler(list_handler) +dispatcher.add_handler(help_handler) +dispatcher.add_handler(repo_list_handler) +dispatcher.add_handler(new_pull_request_handler) +dispatcher.add_handler(add_repo_handler) +dispatcher.add_handler(status_handler) + +dispatcher.add_handler(unknown_handler) + +# updater.start_webhook(listen="0.0.0.0", +# port=int(PORT), +# url_path=BOT_API_TOKEN +# ) +# updater.bot.set_webhook('https://enigmatic-sands-16778.herokuapp.com/' + BOT_API_TOKEN) +updater.start_polling() +print("Server Bot is up and running !") +updater.idle() +print("Listening .... ")