{"action":"opened","issue":{"url":"https://api.github.com/repos/barrucadu/yukibot/issues/33","repository_url":"https://api.github.com/repos/barrucadu/yukibot","labels_url":"https://api.github.com/repos/barrucadu/yukibot/issues/33/labels{/name}","comments_url":"https://api.github.com/repos/barrucadu/yukibot/issues/33/comments","events_url":"https://api.github.com/repos/barrucadu/yukibot/issues/33/events","html_url":"https://github.com/barrucadu/yukibot/issues/33","id":161737927,"number":33,"title":"Backend abstraction","user":{"login":"barrucadu","id":75235,"avatar_url":"https://avatars.githubusercontent.com/u/75235?v=3","gravatar_id":"","url":"https://api.github.com/users/barrucadu","html_url":"https://github.com/barrucadu","followers_url":"https://api.github.com/users/barrucadu/followers","following_url":"https://api.github.com/users/barrucadu/following{/other_user}","gists_url":"https://api.github.com/users/barrucadu/gists{/gist_id}","starred_url":"https://api.github.com/users/barrucadu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/barrucadu/subscriptions","organizations_url":"https://api.github.com/users/barrucadu/orgs","repos_url":"https://api.github.com/users/barrucadu/repos","events_url":"https://api.github.com/users/barrucadu/events{/privacy}","received_events_url":"https://api.github.com/users/barrucadu/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/barrucadu/yukibot/milestones/1","html_url":"https://github.com/barrucadu/yukibot/milestones/yukibot%202.0","labels_url":"https://api.github.com/repos/barrucadu/yukibot/milestones/1/labels","id":1843728,"number":1,"title":"yukibot 2.0","description":"A complete rewrite!","creator":{"login":"barrucadu","id":75235,"avatar_url":"https://avatars.githubusercontent.com/u/75235?v=3","gravatar_id":"","url":"https://api.github.com/users/barrucadu","html_url":"https://github.com/barrucadu","followers_url":"https://api.github.com/users/barrucadu/followers","following_url":"https://api.github.com/users/barrucadu/following{/other_user}","gists_url":"https://api.github.com/users/barrucadu/gists{/gist_id}","starred_url":"https://api.github.com/users/barrucadu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/barrucadu/subscriptions","organizations_url":"https://api.github.com/users/barrucadu/orgs","repos_url":"https://api.github.com/users/barrucadu/repos","events_url":"https://api.github.com/users/barrucadu/events{/privacy}","received_events_url":"https://api.github.com/users/barrucadu/received_events","type":"User","site_admin":false},"open_issues":1,"closed_issues":0,"state":"open","created_at":"2016-06-22T17:04:06Z","updated_at":"2016-06-22T17:14:35Z","due_on":null,"closed_at":null},"comments":0,"created_at":"2016-06-22T17:14:35Z","updated_at":"2016-06-22T17:14:35Z","closed_at":null,"body":"Really, there's very little that's actually IRC-specific in an IRC bot. There's the backend, and that's it. The rest of the bot (can be) almost totally oblivious to what the backend *actually* is, as long as it's kind of IRC-like.\r\n\r\nCome up with an abstraction for backends which:\r\n- Are message-oriented\r\n- Have a notion of channels\r\n- Are read/write\r\n\r\nThe job of a concrete backend implementation would be:\r\n- To transform incoming messages into a form the bot can deal with, and pass them along.\r\n- To transform outgoing messages into a form the backend can deal with, and pass them along.\r\n- To automatically handle control messages (pings, etc).\r\n- To detect and resolve failures (disconnects).\r\n- To facilitate joining and leaving channels.\r\n\r\nTo most easily support different types of backend, the only configuration should be some sort of connection dictionary.\r\n\r\nFurthermore, it should be possible for multiple backends to be executing simultaneously."}}
{"actor":{"display_login":"barrucadu"}}