{"id":34028256,"url":"https://github.com/mat-1/repl-talk-api","last_synced_at":"2026-04-01T19:14:32.794Z","repository":{"id":36183923,"uuid":"220107252","full_name":"mat-1/repl-talk-api","owner":"mat-1","description":"Allows you to do various things with the slightly unofficial Repl.it Repl Talk API","archived":false,"fork":false,"pushed_at":"2023-07-20T15:30:26.000Z","size":216,"stargazers_count":14,"open_issues_count":5,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-12-15T07:26:12.038Z","etag":null,"topics":["repl-talk","replit"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/repltalk/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mat-1.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-11-06T23:07:05.000Z","updated_at":"2023-04-24T12:12:46.000Z","dependencies_parsed_at":"2022-08-19T02:10:21.134Z","dependency_job_id":null,"html_url":"https://github.com/mat-1/repl-talk-api","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/mat-1/repl-talk-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mat-1%2Frepl-talk-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mat-1%2Frepl-talk-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mat-1%2Frepl-talk-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mat-1%2Frepl-talk-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mat-1","download_url":"https://codeload.github.com/mat-1/repl-talk-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mat-1%2Frepl-talk-api/sbom","scorecard":{"id":623303,"data":{"date":"2025-08-11","repo":{"name":"github.com/mat-1/repl-talk-api","commit":"3667a1197815fbc17748d846a0fc7d8224a9615a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.8,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":3,"reason":"Found 5/14 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-publish.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/mat-1/repl-talk-api/python-publish.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python-publish.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/mat-1/repl-talk-api/python-publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-test.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/mat-1/repl-talk-api/python-test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python-test.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/mat-1/repl-talk-api/python-test.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/python-test.yml:26","Warn: pipCommand not pinned by hash: .github/workflows/python-test.yml:27","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/python-publish.yml:1","Warn: no topLevel permission defined: .github/workflows/python-test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"12 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2023-120 / GHSA-45c4-8wx5-qw6w","Warn: Project is vulnerable to: PYSEC-2024-24 / GHSA-5h86-8mv2-jq9f","Warn: Project is vulnerable to: GHSA-5m98-qgg9-wh84","Warn: Project is vulnerable to: GHSA-7gpw-8wmc-pm8g","Warn: Project is vulnerable to: GHSA-8495-4g3g-x7pr","Warn: Project is vulnerable to: PYSEC-2024-26 / GHSA-8qpw-xqxj-h4r2","Warn: Project is vulnerable to: GHSA-9548-qrrj-x5pj","Warn: Project is vulnerable to: PYSEC-2023-246 / GHSA-gfw2-4jvh-wgfg","Warn: Project is vulnerable to: GHSA-pjjw-qhg8-p2p9","Warn: Project is vulnerable to: PYSEC-2023-250 / GHSA-q3qx-c6g2-7pw2","Warn: Project is vulnerable to: PYSEC-2023-251 / GHSA-qvrw-v9rv-5rjx","Warn: Project is vulnerable to: PYSEC-2024-60 / GHSA-jjg7-2v4v-x38h"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T05:42:02.850Z","repository_id":36183923,"created_at":"2025-08-21T05:42:02.850Z","updated_at":"2025-08-21T05:42:02.850Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31019994,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-27T03:51:26.850Z","status":"ssl_error","status_checked_at":"2026-03-27T03:51:09.693Z","response_time":164,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["repl-talk","replit"],"created_at":"2025-12-13T17:04:24.874Z","updated_at":"2026-03-27T04:34:47.372Z","avatar_url":"https://github.com/mat-1.png","language":"Python","readme":"# Examples\n```py\n# Getting the newest posts on Repl Talk and printing their titles\nasync for post in client.boards.all.get_posts():\n\tprint(post.title)\n```\n\n# API Reference\nHow to use the `repltalk` lib for Python. The functions are pretty self explanatory but I've added a short description for each of them.\n***\n\u003e *The following functions are all coroutines unless specifically specified because asyncio is cool*\n\n## Client\n`class repltalk.Client()`\n+ `await login(username, password)`\nLogs in to Repl.it with your username and password. Your bot must be verified in order to use this function.\n+ `await get_post(post_id)`\nGets the post with that id. \n*returns Post*\n+ `await get_comment(comment_id)`\nGets the comment with that id. \n*returns Comment*\n+ `await post_exists(post_id)`\nReturns whether or not the post exists.\n+ `await get_leaderboard(limit=30)`\nGets the top users from the Repl Talk leaderboard. \n*returns list of `User`s*\n+ `await get_all_comments()`\nGets all the recent comments from Repl Talk. \n*returns list of `Comment`s\n+ `await get_user(username)`\nGets the user with that username. \n*returns User*\n+ `await get_reports(resolved=False)`\nGets a list of reports. Only works for moderators or admins. See *Report List*\n+ `boards`\nSee *Board*.\n\n***\n## Board\n`class client.boards`\n***\n+ `all`\nThe *All* board on Repl Talk.\n+ `share`\nThe *Share* board on Repl Talk.\n+ `ask`\nThe *Ask* board on Repl Talk.\n+ `announcements`\nThe *Announcements* board on Repl Talk.\n+ `challenge`\nThe *Challenge* board on Repl Talk.\n+ `learn`\nThe *Learn* board on Repl Talk.\n***\n+ `async for post in get_posts(sort='top', search='')`\nGets the most recent posts from that board.\nSort is the sorting order (top|hot|new) and search is the search query.\n*returns AsyncPostList*\n### RichBoard\nA board that contains all the information from *Board*, and more.\nYou can get this by doing `await client.boards.get(board_name)` (NOT YET ADDED)\n+ `name`\nThe name of the board.\n+ `title_cta`\nTitle call to action\n+ `body_cta`\nBody call to action\n+ `button_cta`\nButton call to action\n+ `repl_required`\nWhether a Repl is required to be submitted.\n+\n\n***\n## Post\n+ `id`\nThe post ID.\n+ `title`\nThe post title.\n+ `content`\nThe post content.\n+ `board`\nThe board the post was made on.\n+ `votes`\nThe amount of upvotes the post has.\n+ `author`\nThe post author. Will be a User object.\n+ `timestamp`\nThe time the post was created at. (datetime.datetime object)\n+ `url`\nThe post url in Repl Talk.\n+ `repl`\nThe repl attached to the post.\n+ `language`\nThe *Language* that the Repl attached to the post uses.\n+ `show_hosted`\nIndicates whether the post has a hosted repl linked to it.\n+ `is_announcement`\nWhether the post is marked as an announcement.\n+ `pinned`\nWhether the post has been pinned to the top of the board.\n+ `can_edit`\nIndicates if the user can edit the post. This will be *False* unless you created the post.\n+ `can_comment`\nIf the user can comment on the post.\n+ `can_vote`\nIndicates if the user can upvote the post.\n+ `has_voted`\nIndicates if the user has already voted on the post.\n+ `is_locked`\nIndicates if the post is locked.\n+ `can_answer`\nWhether or not the user can answer the post.\n+ `answered`\nIf the post has been answered (will always be False if it's not a question).\n+ `comment_count`\nThe amount of comments the post has\n+ `await get_comments()`\nGets the comments on the post.\n+ `await post_comment(content)`\nPosts a comment on the post.\n+ `await report(reason)`\nReport the post\n+ `await delete()`\nDelete the Post\n\n\n***\n## Comment\n+ `id`\nThe comment ID.\n+ `content`\nThe comment body.\n+ `timestamp`\nThe time the comment was created at. (datetime.datetime object)\n+ `can_edit`\nIndicates if the user can edit the comment.\n+ `can_comment`\nWhether or not the user can post a comment.\n+ `url`\nThe comment's url.\n+ `votes`\nGets the amount of upvotes the comment has.\n+ `can_vote`\nIndicates if the user can vote on the comment.\n+ `has_voted`\nIndicates if the user has already upvoted the post.\n+ `author`\nThe *User* for the author of the post.\n+ `post`\nThe post that the comment was made on.\n+ `replies`\nA list of replies that the comment received.\n+ `parent`\nThe parent comment, if any.\n+ `await reply(content)`\nReplies to the comment with the content.\n+ `await report(reason)`\nReport the comment\n+ `await delete()`\nDelete the comment\n\n***\n## User\n+ `id`\nThe user ID. Pretty useless since you can't get the user from their id.\n+ `name`\nThe user's username.\n+ `avatar`\nThe user's avatar url.\n+ `url`\nThe user's profile link.\n+ `cycles`\nThe amount of cycles/karma that user has.\n+ `roles`\nThe roles the user has set on their profile.\n+ `bio` \nThe short description written by a user on their profile.\n+ `first_name`\nWhat the user set as their first name in their profile\n+ `last_name`\nWhat the user set as their last name in their profile\n+ `languages`\nThe *Language*s that the user uses most often.\n+ `timestamp`\nThe time when the user account was created. (datetime.datetime object)\n+ `is_hacker`\nWhether the user has the hacker plan\n+ `await get_comments(limit=30, order='new')`\nGet a list of up to 1100 of the users comments. See *Comment*\n+ `await get_posts(limit=30, order='new')`\nGet a list of up to 100 of the user's posts. See *Post*\n+ `await ban(reason)`\nBan the user\n\n\n***\n## PostList/AsyncPostList\nActs like a normal list, except you can iterate over it\n+ `await next()`\nGets the next page of posts. Not present in *AsyncPostList* because it's done automatically.\n+ `board`\nGets the board of the repls it's getting from\n\n***\n## Repl\n+ `id`\nThe Repl ID.\n+ `embed_url`\nThe url for embedding the Repl on a web page.\n+ `url`\nThe url of the Repl.\n+ `title`\nThe title of the Repl.\n+ `language`\nThe *Language* of the Repl.\n\n***\n## Language\nRepresents a programming language on Repl.it.\n+ `id`\nGets the ID of the language (ie python3).\n+ `display_name`\nGets the display name of the language (ie Python).\n+ `icon`\nGets the url for the language icon.\n+ `category`\nGets the category that the language is listed as.\n+ `is_new`\nWhether the language was recently added to Repl.it.\n+ `tagline`\nA short description of the language.\n\n***\n## Report List\nList of reports. *see Report* If linked post/comment is deleted is lazy report, *See lazyReport*\n+ `for report in get_reports`\nCycles through the reports, with lazy posts/comments.\n+ `async for report in get_reports`\nCycles through the reports with full posts, if there is a post.\n\n***\n## Report\nA report on a comment or post\n+ `id`\nThe report id\n+ `type`\nThe type of the report. (`'post'` or `'comment'`)\n+ `reason`\nWhy the report was made\n+ `timestamp`\nWhen the report was created\n+ `creator`\nWho created the report\n+ `await get_attached()`\nGet the attached post/comment\n\n***\n## Lazy Report\nA less complete report\n+ `id`\nThe report id\n+ `reason`\nWhy the report was made\n+ `creator`\nWho created the report\n\n***\n## Lazy Post\nA less complete post\n+ `url`\nThe url to the post\n+ `id`\nThe post's id\n+ `author`\nThe post's author\n+ `content`\nThe post's content\n+ `title`\nThe post's title\n+ `await delete()`\nDelete the post\n+ `await get_full_post()`\nReturns the full post\n\n***\n## Lazy Comment\nA less complete comment\n+ `url`\nThe url to the comment\n+ `id`\nThe comment's id\n+ `author`\nThe comment's author\n+ `content`\nThe comment's content\n+ `await delete()`\nDelete the comment\n+ `await get_full_comment()`\nReturns the full comment\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmat-1%2Frepl-talk-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmat-1%2Frepl-talk-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmat-1%2Frepl-talk-api/lists"}