{"action":"created","issue":{"url":"https://api.github.com/repos/CactusDev/CactusBot/issues/47","repository_url":"https://api.github.com/repos/CactusDev/CactusBot","labels_url":"https://api.github.com/repos/CactusDev/CactusBot/issues/47/labels{/name}","comments_url":"https://api.github.com/repos/CactusDev/CactusBot/issues/47/comments","events_url":"https://api.github.com/repos/CactusDev/CactusBot/issues/47/events","html_url":"https://github.com/CactusDev/CactusBot/issues/47","id":178790399,"number":47,"title":"Spam handler","user":{"login":"2Cubed","id":12002323,"avatar_url":"https://avatars.githubusercontent.com/u/12002323?v=3","gravatar_id":"","url":"https://api.github.com/users/2Cubed","html_url":"https://github.com/2Cubed","followers_url":"https://api.github.com/users/2Cubed/followers","following_url":"https://api.github.com/users/2Cubed/following{/other_user}","gists_url":"https://api.github.com/users/2Cubed/gists{/gist_id}","starred_url":"https://api.github.com/users/2Cubed/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/2Cubed/subscriptions","organizations_url":"https://api.github.com/users/2Cubed/orgs","repos_url":"https://api.github.com/users/2Cubed/repos","events_url":"https://api.github.com/users/2Cubed/events{/privacy}","received_events_url":"https://api.github.com/users/2Cubed/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/CactusDev/CactusBot/labels/feature","name":"feature","color":"1d76db"}],"state":"open","locked":false,"assignee":{"login":"Innectic","id":8763781,"avatar_url":"https://avatars.githubusercontent.com/u/8763781?v=3","gravatar_id":"","url":"https://api.github.com/users/Innectic","html_url":"https://github.com/Innectic","followers_url":"https://api.github.com/users/Innectic/followers","following_url":"https://api.github.com/users/Innectic/following{/other_user}","gists_url":"https://api.github.com/users/Innectic/gists{/gist_id}","starred_url":"https://api.github.com/users/Innectic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Innectic/subscriptions","organizations_url":"https://api.github.com/users/Innectic/orgs","repos_url":"https://api.github.com/users/Innectic/repos","events_url":"https://api.github.com/users/Innectic/events{/privacy}","received_events_url":"https://api.github.com/users/Innectic/received_events","type":"User","site_admin":false},"assignees":[{"login":"Innectic","id":8763781,"avatar_url":"https://avatars.githubusercontent.com/u/8763781?v=3","gravatar_id":"","url":"https://api.github.com/users/Innectic","html_url":"https://github.com/Innectic","followers_url":"https://api.github.com/users/Innectic/followers","following_url":"https://api.github.com/users/Innectic/following{/other_user}","gists_url":"https://api.github.com/users/Innectic/gists{/gist_id}","starred_url":"https://api.github.com/users/Innectic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Innectic/subscriptions","organizations_url":"https://api.github.com/users/Innectic/orgs","repos_url":"https://api.github.com/users/Innectic/repos","events_url":"https://api.github.com/users/Innectic/events{/privacy}","received_events_url":"https://api.github.com/users/Innectic/received_events","type":"User","site_admin":false},{"login":"RPiAwesomeness","id":11481499,"avatar_url":"https://avatars.githubusercontent.com/u/11481499?v=3","gravatar_id":"","url":"https://api.github.com/users/RPiAwesomeness","html_url":"https://github.com/RPiAwesomeness","followers_url":"https://api.github.com/users/RPiAwesomeness/followers","following_url":"https://api.github.com/users/RPiAwesomeness/following{/other_user}","gists_url":"https://api.github.com/users/RPiAwesomeness/gists{/gist_id}","starred_url":"https://api.github.com/users/RPiAwesomeness/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RPiAwesomeness/subscriptions","organizations_url":"https://api.github.com/users/RPiAwesomeness/orgs","repos_url":"https://api.github.com/users/RPiAwesomeness/repos","events_url":"https://api.github.com/users/RPiAwesomeness/events{/privacy}","received_events_url":"https://api.github.com/users/RPiAwesomeness/received_events","type":"User","site_admin":false},{"login":"2Cubed","id":12002323,"avatar_url":"https://avatars.githubusercontent.com/u/12002323?v=3","gravatar_id":"","url":"https://api.github.com/users/2Cubed","html_url":"https://github.com/2Cubed","followers_url":"https://api.github.com/users/2Cubed/followers","following_url":"https://api.github.com/users/2Cubed/following{/other_user}","gists_url":"https://api.github.com/users/2Cubed/gists{/gist_id}","starred_url":"https://api.github.com/users/2Cubed/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/2Cubed/subscriptions","organizations_url":"https://api.github.com/users/2Cubed/orgs","repos_url":"https://api.github.com/users/2Cubed/repos","events_url":"https://api.github.com/users/2Cubed/events{/privacy}","received_events_url":"https://api.github.com/users/2Cubed/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/CactusDev/CactusBot/milestones/3","html_url":"https://github.com/CactusDev/CactusBot/milestones/v0.4","labels_url":"https://api.github.com/repos/CactusDev/CactusBot/milestones/3/labels","id":1887796,"number":3,"title":"v0.4","description":"","creator":{"login":"2Cubed","id":12002323,"avatar_url":"https://avatars.githubusercontent.com/u/12002323?v=3","gravatar_id":"","url":"https://api.github.com/users/2Cubed","html_url":"https://github.com/2Cubed","followers_url":"https://api.github.com/users/2Cubed/followers","following_url":"https://api.github.com/users/2Cubed/following{/other_user}","gists_url":"https://api.github.com/users/2Cubed/gists{/gist_id}","starred_url":"https://api.github.com/users/2Cubed/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/2Cubed/subscriptions","organizations_url":"https://api.github.com/users/2Cubed/orgs","repos_url":"https://api.github.com/users/2Cubed/repos","events_url":"https://api.github.com/users/2Cubed/events{/privacy}","received_events_url":"https://api.github.com/users/2Cubed/received_events","type":"User","site_admin":false},"open_issues":11,"closed_issues":1,"state":"open","created_at":"2016-07-17T02:24:06Z","updated_at":"2016-10-08T04:38:56Z","due_on":"2016-09-30T00:00:00Z","closed_at":null},"comments":21,"created_at":"2016-09-23T05:47:26Z","updated_at":"2016-10-09T16:34:46Z","closed_at":null,"body":"Rewrite of v0.3's spam handling, put into a `Handler`.\r\n\r\n- [x] URL Detection\r\n- [x] Capitalization Detection\r\n- [x] Emote Detection\r\n- [x] Length Detection\r\n\r\n# Features:\r\n\r\n## URL Detection\r\nWe can use Beam's `url` `type`. It's generated using an advanced NodeJS library, with the sole purpose of recognizing links. Should catch everything.\r\n\r\nIt might also be cool to add toggling of specific domains - for example, allow all `youtube.com` links. We could do this fairly easily using Python's `urllib` parsers.\r\n\r\n## Capitalization Detection\r\nWe should use a better formula than \"total caps greater than x\" this time. Maybe check if the ratio of capitals to total (or better yet, capitals to lowercase?) is above a specific threshold? We should keep some total length threshold, though, so `HI!` isn't considered spam (\"100% caps\").\r\n\r\n## Emote Detection\r\nWe should do something similar to the method described in Capitalization Detection, where it compares the emotes to ratios, as well. We should also consider forcing it to be more lenient with sub emotes, so that a raid which uses a bunch of the raider's emotes doesn't get removed. (It's happened.)\r\n\r\n## Length Detection\r\nWe should remove this. It's confusing to have a different length limit than Beam's 360 character one."},"comment":{"url":"https://api.github.com/repos/CactusDev/CactusBot/issues/comments/252496795","html_url":"https://github.com/CactusDev/CactusBot/issues/47#issuecomment-252496795","issue_url":"https://api.github.com/repos/CactusDev/CactusBot/issues/47","id":252496795,"user":{"login":"2Cubed","id":12002323,"avatar_url":"https://avatars.githubusercontent.com/u/12002323?v=3","gravatar_id":"","url":"https://api.github.com/users/2Cubed","html_url":"https://github.com/2Cubed","followers_url":"https://api.github.com/users/2Cubed/followers","following_url":"https://api.github.com/users/2Cubed/following{/other_user}","gists_url":"https://api.github.com/users/2Cubed/gists{/gist_id}","starred_url":"https://api.github.com/users/2Cubed/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/2Cubed/subscriptions","organizations_url":"https://api.github.com/users/2Cubed/orgs","repos_url":"https://api.github.com/users/2Cubed/repos","events_url":"https://api.github.com/users/2Cubed/events{/privacy}","received_events_url":"https://api.github.com/users/2Cubed/received_events","type":"User","site_admin":false},"created_at":"2016-10-09T16:34:46Z","updated_at":"2016-10-09T16:34:46Z","body":"Almost done!\r\n- `BanPacket` implemented in a28ab0e43b2597a0ce3920d46d5331d6b8c03cec\r\n- Targeted `MessagePackets` (\"whispers\") implemented in 8a0a25372ab465b5f026b0b34d933d4d9fe1f20b\r\n- Multiple return `Packet` support implemented in 8ef5b15c62960fb9abc43c9b30550faa0c0d7227\r\n\r\nNeed to:\r\n- [ ] Make maximums configurable, using the API (cc: @Innectic, @RPiAwesomeness)\r\n- [ ] Decide on a standard role level map ( #54 )"}}
{"actor":{"display_login":"2Cubed"}}