{"id":17059127,"url":"https://github.com/toxicfrog/seirc","last_synced_at":"2025-08-20T12:05:57.686Z","repository":{"id":54693429,"uuid":"89024346","full_name":"ToxicFrog/seirc","owner":"ToxicFrog","description":null,"archived":false,"fork":false,"pushed_at":"2021-02-03T14:24:18.000Z","size":39,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-28T14:16:07.204Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/ToxicFrog.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-04-21T21:17:34.000Z","updated_at":"2021-02-03T12:22:05.000Z","dependencies_parsed_at":"2022-08-14T00:10:46.301Z","dependency_job_id":null,"html_url":"https://github.com/ToxicFrog/seirc","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/ToxicFrog%2Fseirc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ToxicFrog%2Fseirc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ToxicFrog%2Fseirc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ToxicFrog%2Fseirc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ToxicFrog","download_url":"https://codeload.github.com/ToxicFrog/seirc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245068672,"owners_count":20555801,"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-14T10:32:44.200Z","updated_at":"2025-03-23T07:25:20.241Z","avatar_url":"https://github.com/ToxicFrog.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SEIRC -- a Stack Exchange Chat \u003c-\u003e IRC proxy\n\nSEIRC is a simple proxy, written in python, that translates between IRC traffic\nto an IRC client, and HTTP traffic to the Stack Exchange Chat servers. This means\nyou can connect to, and chat on, any Stack Exchange chatroom using your IRC client.\nIt does not act as a bot, passing messages back and forth between IRC and Stack;\nthere's no need for a separate IRC server. Rather, it logs into Stack *as you*\nand then pretends to be an IRC server for the convenience of your client.\n\n## Limitations\n\nThis is something I hacked together in an afternoon. There are probably lots of\nthings it doesn't support, or supports badly. But the basics of chatting and\nreceiving chat messages work.\n\nIt doesn't display backscroll from previous chatting in the channel.\n\nIt also doesn't have any sort of configuration knobs or command line flags, yet.\n\nAlso, it currently echoes all traffic it receives to stdout, *including your password*.\nDon't use this anywhere someone malicious could read its output.\n\n## Prerequisites\n\n- Python 2.7\n- ChatExchange 0.0.3 (installable via pip)\n- A StackExchange account *with a password*\n\n### Adding a password to your SE account\n\nIf you habitually log in to SE using another authentication provider, like Google\nor Steam, your SE account may not have a password. In that case, here's how to add\na password:\n\n- Log out of SE\n- Go to the SE login screen\n- Click 'forgot password'\n- Enter the email you registered with\n- Wait for the email telling you that your SE account doesn't have a password\n  set to arrive\n- Click the link in the email and set a password\n\n## Running the proxy\n\nJust `python seirc.py`. It should start up and tell you what port it's listening\non.\n\nIf you want to change the settings (connect to a different chat backend, listen\non a different port or interface), right now you have to do that by editing those\nsettings in `seirc.py`; they're right under all the `import`s.\n\n## Connecting to it\n\nConfigure your IRC client as follows:\n\n- server: `localhost:7825` (unless you changed those settings)\n- nick: whatever you want\n- username: your Stack Exchange account email\n- password: your Stack Exchange account\n\nAnd then connect. The proxy will use your IRC username and password to log in to\nStack, and your nick for the name it displays for you in IRC. (Users in Stack will\nsee whatever your configured display name is there.)\n\n### Joining channels\n\nAt the moment, you can't join channels by name; the Stack client library doesn't\nhave any way to look up a channel by name, only by ID. (This may not be possible\nin general; Stack channels aren't guaranteed to have unique names, nor to keep one\nname for their lifetime).\n\nTo figure out what the ID of a channel is, visit it in your browser; the URL\nwill be something like `http://chat.stackexchange.com/rooms/\u003cnumber\u003e/\u003cname\u003e`.\nThe `\u003cnumber\u003e` is the room ID. `/join` that from IRC and away you go. The proxy\nwill look up the channel and create a corresponding IRC channel with an appropriate\nname.\n\nFor example, to join Sandbox, you'd see that the URL is\n`http://chat.stackexchange.com/rooms/1/sandbox`, type `/join 1` in IRC, and\nfind yourself in `#sandbox` on IRC a moment later.\n\nYou can join multiple channels at once in the usual manner, e.g. `/join 1,35`.\n\nFor some reason autojoin, at least on weechat, doesn't work properly with SEIRC;\nweechat never sends the JOIN command. Possibly it's waiting for a numeric that\nSEIRC doesn't send yet. Setting `/join` as the on-connect command, however, does\nwork.\n\n### Chatting\n\n- *Stack names* are translated into IRC-style nicks without whitespace.\n- *Edits* display the changed part of the message, surrounded with some context\n  from the original message; if the original isn't available it just displays the\n  entire edited message. In either case the message is prefixed with '*'.\n- *@ hilights* work properly. Starting a line with `Name: ` (as is common with\n  tab completion in most IRC clients) will automatically be translated to\n  `@Name `.\n- *Links and inline images* are displayed wrapped in `[brackets]`.\n- *Multi-line messages* show up as multiple IRC messages.\n- *Replies* show up as normal @ highlights of the person being replied to, but\n  with the message proper prefixed with `[re: …]` where the `…` is the first few\n  words of the message being replied to.\n\n## TODO\n\n- `*` and `_` render as italic in SE, but not in IRC\n- IRC formatting characters sometimes don't get passed to SE properly\n- Channel topic\n- Support replies from inside IRC\n- Support configuration settings\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoxicfrog%2Fseirc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftoxicfrog%2Fseirc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoxicfrog%2Fseirc/lists"}