{"action":"created","issue":{"url":"https://api.github.com/repos/quassel/quassel/issues/238","repository_url":"https://api.github.com/repos/quassel/quassel","labels_url":"https://api.github.com/repos/quassel/quassel/issues/238/labels{/name}","comments_url":"https://api.github.com/repos/quassel/quassel/issues/238/comments","events_url":"https://api.github.com/repos/quassel/quassel/issues/238/events","html_url":"https://github.com/quassel/quassel/pull/238","id":167762734,"number":238,"title":"Show IRC server error messages when not expected","user":{"login":"digitalcircuit","id":1449717,"avatar_url":"https://avatars.githubusercontent.com/u/1449717?v=3","gravatar_id":"","url":"https://api.github.com/users/digitalcircuit","html_url":"https://github.com/digitalcircuit","followers_url":"https://api.github.com/users/digitalcircuit/followers","following_url":"https://api.github.com/users/digitalcircuit/following{/other_user}","gists_url":"https://api.github.com/users/digitalcircuit/gists{/gist_id}","starred_url":"https://api.github.com/users/digitalcircuit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/digitalcircuit/subscriptions","organizations_url":"https://api.github.com/users/digitalcircuit/orgs","repos_url":"https://api.github.com/users/digitalcircuit/repos","events_url":"https://api.github.com/users/digitalcircuit/events{/privacy}","received_events_url":"https://api.github.com/users/digitalcircuit/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":2,"created_at":"2016-07-27T03:31:41Z","updated_at":"2016-07-27T04:22:55Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/quassel/quassel/pulls/238","html_url":"https://github.com/quassel/quassel/pull/238","diff_url":"https://github.com/quassel/quassel/pull/238.diff","patch_url":"https://github.com/quassel/quassel/pull/238.patch"},"body":"## In short\r\n* Handle client-facing [```ERROR``` replies from IRC servers](https://tools.ietf.org/html/rfc2812#section-3.7.4 )\r\n * Display error messages in status buffer\r\n * Add ```quitRequested()``` to ```CoreNetwork``` to hide expected error message when issuing ```QUIT```\r\n * Fixes users getting disconnected by the server without any way to find out why\r\n\r\nCriteria | Rank | Reason\r\n---------|---------|-------------\r\nImpact | ★★☆ *2/3* | User-facing, explains server disconnects (kill, maintenance, etc)\r\nRisk | ★☆☆ *1/3* | Error messages may be logged when not needed\r\nIntrusiveness | ★☆☆ *1/3* | Small set of changes, shouldn't interfere with other pull requests\r\n\r\n## Rationale\r\nQuassel should display server ```ERROR``` responses to avoid confusing users (*why was I disconnected?*) and to ease the burden on IRC network operators with explaining unexpected downtime and other issues.\r\n\r\n## Example\r\n### Before: connection killed, no explanation\r\n```\r\n[6:29:53 pm] [bough.example.com] *** You are connected to bough.example.com with [...]\r\n[6:29:53 pm] * Received CTCP-VERSION request by StatServ!stats@irc.example.com\r\n[Disconnect by server]\r\n[6:30:13 pm] * Connection failure: The TLS/SSL connection has been closed\r\n[6:30:13 pm] * Connection failure: The remote host closed the connection\r\n[6:30:13 pm] * Connection failed. Cycling to next Server\r\n[6:30:13 pm] * Connecting to irc.example.com:6697...\r\n[6:30:13 pm] * Requesting capability list...\r\n[...]\r\n```\r\n\r\n### After: connection killed, reason shown\r\n```\r\n[6:46:49 pm] * Received CTCP-VERSION request by StatServ!stats@irc.example.com\r\n[6:46:49 pm] [bough.example.com] *** You are connected to bough.example.com with [...]\r\n[Disconnect by server]\r\n[6:47:02 pm] * Error from server: Closing Link: digitalcircuit[xxx.xxx.xxx.xxx] (Large base64 image paste. Check your paste buffer and reconnect.)\r\n[6:47:02 pm] * Connection failure: The TLS/SSL connection has been closed\r\n[6:47:02 pm] * Connection failure: The remote host closed the connection\r\n[6:47:02 pm] * Connection failed. Cycling to next Server\r\n[6:47:02 pm] * Connecting to irc.example.com:6697...\r\n[6:47:03 pm] * Requesting capability list...\r\n[...]\r\n```\r\n\r\n### Regular ```/quit```\r\n*Handled same as before*\r\n```\r\n[6:49:03 pm] * Received CTCP-VERSION request by StatServ!stats@irc.example.com\r\n[6:49:03 pm] [bough.example.com] *** You are connected to bough.example.com with [...]\r\n[QUIT issued by client]\r\n[6:49:47 pm] * Disconnecting. (My custom quit reason)\r\n```"},"comment":{"url":"https://api.github.com/repos/quassel/quassel/issues/comments/235480516","html_url":"https://github.com/quassel/quassel/pull/238#issuecomment-235480516","issue_url":"https://api.github.com/repos/quassel/quassel/issues/238","id":235480516,"user":{"login":"digitalcircuit","id":1449717,"avatar_url":"https://avatars.githubusercontent.com/u/1449717?v=3","gravatar_id":"","url":"https://api.github.com/users/digitalcircuit","html_url":"https://github.com/digitalcircuit","followers_url":"https://api.github.com/users/digitalcircuit/followers","following_url":"https://api.github.com/users/digitalcircuit/following{/other_user}","gists_url":"https://api.github.com/users/digitalcircuit/gists{/gist_id}","starred_url":"https://api.github.com/users/digitalcircuit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/digitalcircuit/subscriptions","organizations_url":"https://api.github.com/users/digitalcircuit/orgs","repos_url":"https://api.github.com/users/digitalcircuit/repos","events_url":"https://api.github.com/users/digitalcircuit/events{/privacy}","received_events_url":"https://api.github.com/users/digitalcircuit/received_events","type":"User","site_admin":false},"created_at":"2016-07-27T04:22:55Z","updated_at":"2016-07-27T04:22:55Z","body":"@dequis It's on a server running [UnrealIRCd 3.2](https://www.unrealircd.org/files/docs/unreal32docs.html ) (*can't yet convince the operators to upgrade*) using [the spamfilter system](https://www.unrealircd.org/files/docs/unreal32docs.html#feature_spamfilter ) with action of ```kill```, matching channel and private messages.  The regular expression seems to be [```.*data:image\\/(png|gif|jpeg);base64,.*```](https://regex101.com/r/rH8bZ5/2 ), e.g. matching ```data:image/png;base64,``` anywhere in a message."}}
{"actor":{"display_login":"digitalcircuit"}}