{"id":13409392,"url":"https://github.com/ezeoleaf/larry","last_synced_at":"2026-01-27T10:12:46.724Z","repository":{"id":37014834,"uuid":"313452790","full_name":"ezeoleaf/larry","owner":"ezeoleaf","description":"Larry 🐦 is a bot generator that post content from different providers to one or multiple publishers","archived":false,"fork":false,"pushed_at":"2024-02-26T16:12:45.000Z","size":327,"stargazers_count":163,"open_issues_count":17,"forks_count":28,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-22T14:58:24.597Z","etag":null,"topics":["automation","bot","bot-api","bot-builder","bots","github","github-api","go","golang","hacktoberfest","s3","twitter","twitter-api","twitter-bot"],"latest_commit_sha":null,"homepage":"","language":"Go","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/ezeoleaf.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"github":"ezeoleaf","ko_fi":"ezeoleaf"}},"created_at":"2020-11-16T23:25:12.000Z","updated_at":"2025-09-29T06:26:48.000Z","dependencies_parsed_at":"2023-11-28T17:30:24.847Z","dependency_job_id":"80e39f21-b9b2-4436-874b-4b3617cad5a0","html_url":"https://github.com/ezeoleaf/larry","commit_stats":null,"previous_names":["ezeoleaf/gobottweet","ezeoleaf/tweet-random-repo"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/ezeoleaf/larry","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ezeoleaf%2Flarry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ezeoleaf%2Flarry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ezeoleaf%2Flarry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ezeoleaf%2Flarry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ezeoleaf","download_url":"https://codeload.github.com/ezeoleaf/larry/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ezeoleaf%2Flarry/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28811553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T07:41:26.337Z","status":"ssl_error","status_checked_at":"2026-01-27T07:41:08.776Z","response_time":168,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["automation","bot","bot-api","bot-builder","bots","github","github-api","go","golang","hacktoberfest","s3","twitter","twitter-api","twitter-bot"],"created_at":"2024-07-30T20:01:00.407Z","updated_at":"2026-01-27T10:12:46.706Z","avatar_url":"https://github.com/ezeoleaf.png","language":"Go","readme":"# Larry 🐦\n[![Go](https://github.com/ezeoleaf/larry/actions/workflows/go.yml/badge.svg?branch=main)](https://github.com/ezeoleaf/larry/actions/workflows/go.yml)\n[![Coverage Status](https://coveralls.io/repos/github/ezeoleaf/larry/badge.svg?branch=main)](https://coveralls.io/github/ezeoleaf/larry?branch=main)\n[![Go Report Card](https://goreportcard.com/badge/github.com/ezeoleaf/larry)](https://goreportcard.com/report/github.com/ezeoleaf/larry)\n[![MIT License](https://img.shields.io/github/license/ezeoleaf/larry?style=flat-square)](https://github.com/ezeoleaf/larry/blob/main/LICENSE)\n[![Contribute with Gitpod](https://img.shields.io/badge/Contribute%20with-Gitpod-908a85?logo=gitpod)](https://gitpod.io/#https://github.com/ezeoleaf/larry)\n\nLarry is a Golang cli bot that tweets random Github repositories.\n\n## Disclaimer\n\nI hold no liability for what you do with this bot or what happens to you by using this bot. Abusing this bot *can* get you banned from Twitter, so make sure to read up on [proper usage](https://support.twitter.com/articles/76915-automation-rules-and-best-practices) of the Twitter API.\n\n## Running bots\n\n- [GolangRepos](https://twitter.com/GolangRepos): Tweets repositories from Github that contain the \"golang\" topic\n- [RustRepos](https://twitter.com/RustRepos): Tweets repositories from Github that contain the \"rust\" topic\n- [MLRepositories](https://twitter.com/MLRepositories): Tweets repositories from Github that contain the \"machine-learning\" topic\n- [CryptoRepos](https://twitter.com/CryptoRepos): Tweets repositories from Github that contain the \"crypto\" topic\n\n## Installation\n\nYou can install Larry by cloning the repo and using `go install`\n\n```bash\ngit clone https://github.com/ezeoleaf/larry.git\ncd larry/cmd/larry\ngo install\n```\n\nYou can also use make for building the project and generating an executable:\n```bash\ngit clone https://github.com/ezeoleaf/larry.git\ncd larry\nmake build\n```\n\nOr you can just run it on the go\n```bash\ngit clone https://github.com/ezeoleaf/larry.git\ncd larry\ngo run . [options]\n```\n\n## Usage\n\n### Configuring the bot\n\nBefore running the bot, you must first set it up so it can connect to Github and the publisher's API.\n\nTo do this, you will need to setup the following environment variables:\n\n- GITHUB_ACCESS_TOKEN\n\nFor generating Github access token you can follow this [guide](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token)\n\n### Providers and Publishers\n\nFor information on publishers and providers click [here](PublishersAndProviders.md)\n\n### Running the bot\n\nTo run the bot, you have two ways.\n\nIf you have installed the bot, you can run it using\n  `larry [options]`\n\nIf you want to run it without installing it globally you can use\n  `go run . [options]`\n\nExample:\n\n`larry -h`\n\nAs a response you will see the entire options available\n\n```\nNAME:\n   Larry - Bot that publishes information from providers to different publishers\n\nUSAGE:\n   larry [global options] command [command options] [arguments...]\n\nAUTHORS:\n   @ezeoleaf \u003cezeoleaf@gmail.com\u003e\n   @beesaferoot \u003chikenike6@gmail.com\u003e\n   @shubhcoder\n   @kannav02\n   @siddhant-k-code \u003csiddhantkhare2694@gmail.com\u003e\n   @savagedev\n\nCOMMANDS:\n   help, h  Shows a list of commands or help for one command\n\nGLOBAL OPTIONS:\n   --topic value, -t value          topic for searching repos\n   --lang value, -l value           language for searching repos\n   --time value, -x value           periodicity of tweet in minutes (default: 15)\n   --cache value, -r value          size of cache for no repeating repositories (default: 50)\n   --hashtag value, --ht value      list of comma separated hashtags\n   --tweet-language, --tl           bool for allowing twetting the language of the repo (default: false)\n   --safe-mode, --sf                bool for safe mode. If safe mode is enabled, no repository is published (default: false)\n   --provider value, --pr value     provider where publishable content comes from (default: \"github\")\n   --publisher value, --pub value   list of comma separated publishers (default: \"twitter\")\n   --content-file value, --cf value file containing content to publish\n   --skip-csv-header, --sh          bool to skip CSV file header. If true, then first record of CSV file is skipped (default: false)\n   --blacklist value, --bl value    optional file containing blacklisted repository Ids\n   --help, -h                       show help (default: false)\n```\n\nFor running the bot, the command will depend on whatever you want to tweet, but, for tweeting about React repositories every 30 minutes, you could use\n\n\u0026nbsp;\u0026nbsp;`larry --topic react --time 30 --safe-mode`\n\nFor running the bot for Rust tweets every 15 minutes\n\n\u0026nbsp;\u0026nbsp;`larry --lang rust --time 15`\n\nFor running the bot for Golang every 15 minutes and specifying a blacklist file named blacklist.txt\n\n\u0026nbsp;\u0026nbsp;`larry --topic golang --time 15 --blacklist ./blacklist.txt`\n\nFor running the bot every 60 minutes using the \"contentfile\" provider and JSON file for content\n\n\u0026nbsp;\u0026nbsp;`larry --time 60 --provider contentfile --content-file ./content.json`\n\nFor running the bot every 60 minutes using the \"contentfile\" provider to read CSV file for content and skipping the header record\n\n\u0026nbsp;\u0026nbsp;`larry --time 60 --provider contentfile --content-file ./content.csv --skip-csv-header`\n\n\n## Content Files\n\nThe `contentfile` provider serves content from CSV and JSON files.\n\n### JSON Content File\n\nWhen the `contentfile` provider receives a `content-file` filename with a `.json` extension, the provider serves random content from the JSON file. This file consists of an array of objects in the following format. ExtraData is an array of strings.\n\n```json\n[{\n   \"Title\": \"larry\",\n   \"Subtitle\": \"Larry 🐦 is a bot generator that publishes random content from different providers built in Go\",\n   \"URL\": \"github.com/ezeoleaf/larry\",\n   \"ExtraData\": [\"68\", \"ezeoleaf\", \"golang\"]\n}]\n```\n\n### CSV Content File\n\nWhen the `contentfile` provider receives a `content-file` filename with a `.csv` extension, the provider serves random content from the CSV file. Each field may or may not be enclosed in double quotes. The ExtraData strings start at field 4 of the record and a record can contain any number of elements. \n\nThe following file has one record with three ExtraData strings.\n\n```csv\nThe title,The subtitle,URL,ExtraString1,\"ExtraString2,has comma\",ExtraString3\n```\n\nAn example CSV file with a header record followed by one record:\n\n```csv\nTitle,Subtitle,URL,Stars,Author,Language,ExtraData1,ExtraData2,ExtraData3\nlarry,Larry 🐦 is a bot generator that publishes random content from different providers built in Go,github.com/ezeoleaf/larry,68,ezeoleaf,golang\n```\n\nNote: Every record in the CSV file, including the header record, must have the same number of fields otherwise an error will occur. This means if the records will have a variable number of ExtraData fields, each record having fewer than the maximum ExtraData fields must include empty ExtraData fields to match the maximum.\n\n## Blacklist File\n\n### Github Provider\n\nFor the `github` provider, the optional blacklist file consists of numeric GitHub repository IDs to exclude from the publishing process. These IDs can be found on the GitHub repository page source in the meta tag `octolytics-dimension-repository_id`.\n\nAn example blacklist file containing GitHub repository IDs. The file can contain comments using the # character, everything on the line after this character is ignored.\n\n```csv\n# Blacklisted repositories\n123 # description of the respository\n456\n```\n\n### Contentfile Provider\n\nFor the `contentfile` provider, the optional blacklist file consists of content titles to exclude from the publishing process.\n\n## Have questions? Need help with the bot?\n\nIf you're having issues with or have questions about the bot, [file an issue](https://github.com/ezeoleaf/larry/issues) in this repository so anyone can get back to you.\n\nOr feel free to contact me \u003cezeoleaf@gmail.com\u003e :)\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=ezeoleaf/larry\u0026type=Date)](https://star-history.com/#ezeoleaf/larry)\n\n[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/H2H47X7QW)\n","funding_links":["https://github.com/sponsors/ezeoleaf","https://ko-fi.com/ezeoleaf","https://ko-fi.com/H2H47X7QW"],"categories":["Bot建设","Bot Building","HarmonyOS","Uncategorized","Go"],"sub_categories":["Windows Manager","Free e-books"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fezeoleaf%2Flarry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fezeoleaf%2Flarry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fezeoleaf%2Flarry/lists"}