{"id":16308798,"url":"https://github.com/dgl/redisircd","last_synced_at":"2025-03-22T20:33:40.845Z","repository":{"id":57614982,"uuid":"380620690","full_name":"dgl/redisircd","owner":"dgl","description":"redis backed IRCd toy","archived":false,"fork":false,"pushed_at":"2024-05-18T06:42:48.000Z","size":41,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-10-11T21:18:46.645Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/dgl.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-27T00:29:37.000Z","updated_at":"2024-05-18T06:42:52.000Z","dependencies_parsed_at":"2024-05-18T07:24:14.556Z","dependency_job_id":"ddc7356e-b414-4c25-8a72-e7bf95c804c6","html_url":"https://github.com/dgl/redisircd","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgl%2Fredisircd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgl%2Fredisircd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgl%2Fredisircd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dgl%2Fredisircd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dgl","download_url":"https://codeload.github.com/dgl/redisircd/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221839218,"owners_count":16889591,"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":[],"created_at":"2024-10-10T21:18:46.004Z","updated_at":"2024-10-28T14:17:58.958Z","avatar_url":"https://github.com/dgl.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Redis IRCd\n\nA redis backed IRC server.\n\n## Whaaaaat?\n\nThis is a very simple IRC server, that is backed by Redis. This is mostly a toy\nto provide something similar to [irccat](https://github.com/irccloud/irccat),\nbut running as a server and using Redis, because why not?\n\nA particular use is sending the kind of thing you'd send to Slack via webhooks,\nexcept there are no rate limits, so ideal for lots of data, or just where Slack\ndoesn't fit well.\n\nThis does not scale like a real IRC server would, in particular even if you\nwere to use a clustered Redis behind this, you'll find out that doesn't\n[scale for pubsub](https://github.com/redis/redis/issues/2672).\n\n## Building\n\nFor now just build directly from Git, e.g. using Go tooling like so:\n\n```\ngo install github.com/dgl/redisircd/cmd/redisircd@latest\n```\n\nThis will give you a `$(go env GOPATH)/bin/redisircd`\n\n(Needs go 1.16, for earlier use `go get` rather than install.)\n\n## Usage\n\nWatch this!\n\n[![asciicast](https://asciinema.org/a/422798.svg)](https://asciinema.org/a/422798)\n\nor, run redisircd:\n\n```\n./redisircd --listen localhost:6667 --redis localhost:6379\n```\n\nConnect an IRC client to it.\n\nThen:\n\n```\n/join #test\n/mode #test +R test\n```\n\nThen run: `redis-cli publish test foo`\n\nYou should see:\n\n```\n\u003ctest\u003e foo\n```\n\nJSON can be turned on:\n\n```\n/mode #test +JTN $.text $.nick\nredis-cli publish test '{\"text\":\"hi\",\"nick\":\"yo\"}'\n```\n\nThen you should see:\n\n```\n\u003cyo\u003e hi\n```\n\n## Modes\n\nThe custom modes this supports start with capital letters.\n\n* `+R channel` Enable redis pubsub, listening on the given channel\n* `+J` Redis pubsub payload is formatted as JSON\n* `+N` Use JSONPath expression to extract nickname from JSON payload\n* `+T` Use JSONPath expression to extract text from JSON payload\n* `+P` Enable publishing things said on the channel. Will be sent to the\n  channel configured with `+R` followed by `:out` to avoid loops (e.g.\n  `channel:out`).\n\nThere's not yet any concept of ops or such. There may never be; this isn't\ndesigned to be available on the public internet.\n\n## Examples\n\nThese are designed to show how simple it is to write a bot or other tool for\nthis. More contributions welcome.\n\n* [hn.sh](examples/hn.sh) is a script to watch for [Hacker\n  News](https://news.ycombinator.com) updates and publish them.\n* [units.sh](examples/units.sh) is a simple script that acts as a frontend to\n  GNU Units and lets a user interact with it like a calculator.\n* [bot.sh](examples/bot.sh) is a wrapper script that can run other carefully\n  controlled commands.\n* You may also be interested in\n  [redis-irc-bot](https://github.com/dgl/redis-irc-bot) which is mostly\n  compatible with the `:out` scheme used by `+P` but runs as a bot rather than\n  a server.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdgl%2Fredisircd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdgl%2Fredisircd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdgl%2Fredisircd/lists"}