{"id":18742190,"url":"https://github.com/donuts-are-good/libneosay","last_synced_at":"2025-11-20T22:30:17.650Z","repository":{"id":207869576,"uuid":"720297635","full_name":"donuts-are-good/libneosay","owner":"donuts-are-good","description":"pipe stuff to matrix channels","archived":false,"fork":false,"pushed_at":"2023-12-02T07:54:22.000Z","size":3,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-14T20:56:36.364Z","etag":null,"topics":["bot","go","golang","logging","matrix"],"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/donuts-are-good.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-11-18T03:42:32.000Z","updated_at":"2023-11-18T06:38:49.000Z","dependencies_parsed_at":"2023-12-02T08:40:01.138Z","dependency_job_id":null,"html_url":"https://github.com/donuts-are-good/libneosay","commit_stats":null,"previous_names":["donuts-are-good/libneosay"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/donuts-are-good%2Flibneosay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/donuts-are-good%2Flibneosay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/donuts-are-good%2Flibneosay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/donuts-are-good%2Flibneosay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/donuts-are-good","download_url":"https://codeload.github.com/donuts-are-good/libneosay/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239621005,"owners_count":19669807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["bot","go","golang","logging","matrix"],"created_at":"2024-11-07T16:06:52.244Z","updated_at":"2025-11-20T22:30:17.353Z","avatar_url":"https://github.com/donuts-are-good.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![libneosay](https://github.com/donuts-are-good/libneosay/assets/96031819/5bce5427-6f92-4cc3-a32f-949c0510b43b)\n![donuts-are-good's followers](https://img.shields.io/github/followers/donuts-are-good?\u0026color=555\u0026style=for-the-badge\u0026label=followers) ![donuts-are-good's stars](https://img.shields.io/github/stars/donuts-are-good?affiliations=OWNER%2CCOLLABORATOR\u0026color=555\u0026style=for-the-badge) ![donuts-are-good's visitors](https://komarev.com/ghpvc/?username=donuts-are-good\u0026color=555555\u0026style=for-the-badge\u0026label=visitors)\n\n# libneosay\n\na library for neosay, a program that shouts into the matrix\n\n## usage\n\nyou probably don't need this, but i need this, so that is why it got made.\n\ngenerally you can use neosay by piping program output into it and configuring it to speak to a matrix channel, so that you can have notifications and things in your bash scripts that easily go to your devices of choice. \n\ni needed libneosay because i like using matrix channels to monitor web apps, and the one im working on has distinct subsections so libneosay has support for multiple chat channels in the config and you can message each channel easily like the example below.\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com/donuts-are-good/libneosay\"\n)\n\nfunc main() {\n\tneosay, err := libneosay.NewNeosay(\"path/to/config.json\")\n\tif err != nil {\n\t\tfmt.Println(\"Error initializing Neosay:\", err)\n\t\treturn\n\t}\n\n\trooms := []string{\"rooma\", \"roomb\", \"roomc\", \"roomd\"}\n\n\tfor _, room := range rooms {\n\t\tmessage := fmt.Sprintf(\"Hello, %s!\", room)\n\t\terr = neosay.SendMessage(room, message)\n\t\tif err != nil {\n\t\t\tfmt.Printf(\"Error sending message to %s: %v\\n\", room, err)\n\t\t} else {\n\t\t\tfmt.Printf(\"Message sent to %s\\n\", room)\n\t\t}\n\t}\n}\n\n```\n\nthis demo program will say hello in every room it has a config for. \n\nthis is what a config looks like:\n\n```json\n{\n  \"HomeserverURL\": \"your_homeserver_url\",\n  \"UserID\": \"your_user_id\",\n  \"AccessToken\": \"your_access_token\",\n  \"Rooms\": {\n      \"rooma\": \"room_id_a\",\n      \"roomb\": \"room_id_b\",\n      \"roomc\": \"room_id_c\",\n      \"roomd\": \"room_id_d\"\n  }\n}\n```\n\n## license\n\nMIT License 2023 donuts-are-good, for more info see license.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdonuts-are-good%2Flibneosay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdonuts-are-good%2Flibneosay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdonuts-are-good%2Flibneosay/lists"}