{"_id":"twitch2ma","_rev":"66-4e34ef50f16581c58c9fd62f6ce7e5f7","name":"twitch2ma","dist-tags":{"latest":"1.15.0","rc":"1.15.0-rc.3"},"versions":{"1.0.0":{"name":"twitch2ma","version":"1.0.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","humanize-duration":"^3.23.0","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"typescript":"^3.9.3","@types/humanize-duration":"^3.18.0","@types/source-map-support":"^0.5.1"},"bin":{"twitch2ma":"cli.js"},"gitHead":"5a1e6b327cfe164ef29d43b20b343c3e387c975d","_id":"twitch2ma@1.0.0","_nodeVersion":"14.3.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-NsWWif5r4HkSBJLgHd5Ur3K1GDaJTyWSXcA/xueWtMHTEyUzyv/4NKVIL5ZfNVJqcIHNZ4q5efFH8gwwESWWSQ==","shasum":"bf26164651c68ae04041b82999c6012c062fe40c","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.0.0.tgz","fileCount":22,"unpackedSize":28946,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeyDgqCRA9TVsSAnZWagAA0OgQAKUSCWNgLHf+VFVQ4rjR\nWdLh0MwK0bcOSnhMK9lCFd+Pbrrw97jG6zUSqFs08PXrnUp6nv7zs86P4tcU\nSyIvvXKb+BM8kzuDmJEFaR2+SbWxCB66RN0EPfSsuHt6TPhd7qYjSLT6vf5u\nwrdiFOFeHz2oZRcpJNErtt3e/cVm1273Bg5hm3rP3H+K2gM1HH+6L2P3Y7Wz\nNs55g9iJwnfymbg6/tWVOZz6u98CaLxOMLf6u67x5sSEhgVSEnUbIsSsj2/1\nQIud5Q31HoR8aqK/CnLTF96r22RXVnykF3S2kMJ6InxSBEPp61BRBn3h4fxa\n5SJVb+7E5U81klTmDqzT9fVTewtZmx4pHKl83jHGaqEly2CCTvkXIYDhqyHd\nTQ398uzoC0sEnY/pb0XLPwOpT8uktXb4OPGrqTshZb6v8SzEJMBzlBX19mJ2\nHC+R34zHaBotgyLbmOrO2Vgx/PFNrY5ZttZ1mDEKGQfoVBeevEL1cYgiZmZr\nBxCGK7kRAbrT0s9NK9rk+wnXHjRxuyt0d6UVJ3AEDq0h5f3SWAQOGSPA4NgT\n8nBjEzlavazKEMTyEMeXJX8ElKILLuFBDoHP7GeLEoYlMWJf2lpMsbuVnmy2\nhrpCckOzSEG8rLK2O2n4AEmb6fecRNFKcMP6eOlP6shy8vtf4Yb82kVtaplS\n5xjg\r\n=OAb4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBqBRBoKKssKtlnf6xpzaSP16wUYJwrwcslmoSASojtmAiEAk4lWTHyp/4RjO7K3C8F49ZItS9sdRxKEefEYEtKml1E="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.0.0_1590179881760_0.2899275249798927"},"_hasShrinkwrap":false},"1.1.0":{"name":"twitch2ma","version":"1.1.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","humanize-duration":"^3.23.0","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"typescript":"^3.9.3","@types/humanize-duration":"^3.18.0","@types/source-map-support":"^0.5.1"},"bin":{"twitch2ma":"cli.js"},"gitHead":"abd12e2754f8aa59b3c3937a283f811b82c683ea","_id":"twitch2ma@1.1.0","_nodeVersion":"14.3.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-jmMUndfTjghk/MYjEekgpSaDEchsupXd+In+wz/Qu8zAzSxmgchZudIFheeV5DXNjxT/2G9pNnKlhBw+suWvRQ==","shasum":"02cadf307bfcc9fa87feba01607fb1b7a782f963","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.1.0.tgz","fileCount":22,"unpackedSize":33387,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeyQdWCRA9TVsSAnZWagAA+tcQAKEYtP1/CmFschleHv6p\nQuze5p+/C9yV0EZ2gPwSYmiscfH265dkW+UEY2dUgb1CpFlQeT2r4Vms1QkW\nzMry5XmT0rjyXCbiRelFnczirRNZsd8vppJ+IrZv0Jn5eHDEeTSl98H6Dtf5\nZYVhwwYIwdqFSw2gpyAxH9W7ePZLV/eIcslfL6rkhAepLxHpLMoqLT497gvZ\np8aqUI5HA2vWBC9gXZ5i5Puvo1VKrv76m+rkhjwdMdBd8S32iJnOCLZlHY1q\nJKELptL79f73EXJ2J244BQ8tJxuPplCeAqroACsYML6UgMibbsIAVhwNLpJB\np4DeOkEHDa2wSZzVebhmjEI3ap1qVoEck61lulXuyXGk/MRmG303XxSgL6ve\nR0kz78oQAtColbA00z8yZ2fUJl88I5xYoW5qXnsuRRvAyOVyYL1Hzx69/CN5\nFph4zrzY7Ec4b7QAplzFi42BvcqmjH+YtPGuq7KVLZbfQAtbbbVpNNEmrBLM\nedTQ0/u6+e4pOStTen0pbIHc32hhtkLDLLhl3JnYT36SmAOVr6nP3NcQXgTS\nrS4nK3Pt7BUcERLv5/kwAasbwy8V9JMQZihiMr5VEFiOuRLO0Y57iyWzHqCR\nqlFZ5HA37BBHliIFGJab+KwzP96c9HYwIOlzCanHNdOY+OUbVwNrc1CrCilu\nNP7F\r\n=CSof\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHoGZqjruef507JbykEkYWpNC2ytvjh6T2YIZIvGe+pFAiAWhMFywcYy28HAeCjqw/GeOH4v+fw+zxXk3w9ybmTsKA=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.1.0_1590232917531_0.8525555518922421"},"_hasShrinkwrap":false},"1.2.0":{"name":"twitch2ma","version":"1.2.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","humanize-duration":"^3.23.0","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"typescript":"^3.9.3","@types/humanize-duration":"^3.18.0","@types/source-map-support":"^0.5.1"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"1f3584eedb9fb469806dc017ac3680f63f575646","_id":"twitch2ma@1.2.0","_nodeVersion":"14.3.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-2HdRllZYdDt7pNwMKzHZ7RPynzuLs3+ly58asUpUn/xD9LqWu5GiwF9IpbxvihjWZxK6GUCEjnAfsGh5dQHHzQ==","shasum":"5217f86efc92e848b378c0be077bd7f795d806ed","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.2.0.tgz","fileCount":22,"unpackedSize":39828,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeyUg2CRA9TVsSAnZWagAA1jwQAJgRs+ragnLFJnXTlrty\nRMRQvFTafsKBCUtKUfgQRbOgZ+otpJmTj2YWvoguWduFt1QAr6zd+89X2vmB\nbPI72nB4YphF702p+S3+dPHSwjwogX1qOUdyJUmxK8IHaTJvbVoiq3Ya3kGi\nWqVYbFaJf84RRXGzOQmVr15rMUgLvtEiS8oaQdULzPckQeMHb0JwTinOOxbQ\nSCIZG6XK9FIKgl9FLfOfDG6HnFsOGQov4Pb8x5KZs6GUPfzmJ+DE4C+0M6MZ\n+/zyuIgDZh2k7YImo0cZkMaKCVbtpL6fit1voYFtkGUthf99f7y59dnk1hM1\nn2ZyS98yk14O0PNL2l3sjsZthI0CI/hEiG3rNnSyMkcXzDygKpeBUZIWSs9s\n4Al639nBWUH/J0ds9T2Bn3oEL6udGFBKMlbBuj7mVLU06eg+OUIIKVFl98AD\nnFC3DcWP/+eUeNgx114KzJwKrhDrcsxg6Hfce08xGDWPcvqvB5gZoHRwypwQ\nM33JjqJp8TiVYRn5Z2SCEHu/youxE5EIn1rl+TnZLvfc4iAokMmp/1YMkONN\ntHVak3hRs3M33p2bzYILQuQM07b8vAF5MDJ9LMwuZHfEWAtceLYxjP5+y9kH\ncNXrVqxdJvKSHl2jfKERPZ9aAjc/IOF9jozJIj1X9HQdDkXLulqe1CZaVc3Z\nopZd\r\n=8xem\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGk9ZfDJzEYeEpgszbePgVhkYkYGUv1cpzhMhAIc1l8AAiEAq0+Buoi9EaU7hwCE9hPFferN2VBEa0kYoc2wbkdazlc="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.2.0_1590249525944_0.23254391294886934"},"_hasShrinkwrap":false},"1.2.2":{"name":"twitch2ma","version":"1.2.2","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"ajv compile -s resources/**.schema.json","build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","humanize-duration":"^3.23.0","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@types/humanize-duration":"^3.18.0","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"9bbfba5a2de968acd8ccf94f1a3f6bab48881820","_id":"twitch2ma@1.2.2","_nodeVersion":"14.3.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-50Hv8OlqgxLz9v0WBWmZ8H8EUco2Erzr/a3EZxw8I/AAigSsUmgJH86bFyJ5kydE0O4Y2UC3YXgSVeVcevXdeg==","shasum":"85927bb82951eebf71cdfddf6374a2feb4b0fde3","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.2.2.tgz","fileCount":24,"unpackedSize":48431,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeyXUQCRA9TVsSAnZWagAAHIoQAJ3gZXDFZISNtEI/fMXC\nu0po74ViGARGdhV8CY8P+y9WNOfhW0UL/V6aKdEwWiYb+ynqtf66zNVD2OJP\n2Ncnux5lQsB9rzqlYFHCiwD/Zn9V9o5aUv5jpEKrKz2V+Yoy1IR/bZjHkPrY\nEVLnV0x3MOusDtwlSoX2BQ9qxzRM/VTkCpdCtFj7CJtR0WMa5xVAEU9ZRi4q\nv7FdBQ4W6F/Jzu4xhAt2tdZDgCpfr5dA6oiznSqs5IweuCJsdwkYDnGF0Uft\nPJ/LVRStBpuZs3eGMutzQ6wZby1qJNqDDFRkM0Kd+dktLRekthnXib5u9mFq\nCq4V1NwPgS6J7ej8mhMif2xJhEHHORle67+4XN4eVzJNbfUV3il6r6hkPD+c\ngpwVJu9CtViyPzY0OqZR5PzewbbhC90yLoOhjSklEADqVgdtJO/00nAab9DQ\nzAjF1QwuBWiDeaQkz1vPx6i0njle4QtLMC56LbohSQu8YjINN66YxHt++RJJ\nZX9ftZoPBN66wbNjK8itPcr3mOuKUWzyz2U4w98WmgaCWk6mHd8vMbuJuruZ\nZYYcRFNzrJFwQbswLYteIGlztGJWQNN6yURkpCh9ev6uf1eBkSCJZsq3RuSR\n4lYpsiKCnndsHI7ybc5heaHRsXI1+uNPKfVPH47zNRtGBd6A0RmvKmoWyoMq\nZnYD\r\n=LmhJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCHyx4pSGyUKmLem89ljbR1B8STC9wCBUyq6vUctZu8NQCIQC2unQnJAlqorjLUNcowtBY+S+ozCBvAZSj8YWur46zVg=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.2.2_1590261007934_0.3715342323509576"},"_hasShrinkwrap":false},"1.2.3":{"name":"twitch2ma","version":"1.2.3","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"ajv compile -s src/**.schema.json","build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","humanize-duration":"^3.23.0","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@types/humanize-duration":"^3.18.0","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"6da84f43f580418262642af6f10691e59d3e162b","_id":"twitch2ma@1.2.3","_nodeVersion":"14.3.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-yb9wG7+tKH1sfCSoJucIrXY2T+39WsRkZPz/V0t/1MOfku6Kqn8oD97oYyXhARU/8XwAPYWaCR0j4PZabz9f/g==","shasum":"da77efae4b4d31a2af538610d057c3cdd71bf3aa","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.2.3.tgz","fileCount":24,"unpackedSize":48413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeyX7RCRA9TVsSAnZWagAAwYYP/0BnyBPIm/O7YUz8TONc\nWvQTWBMylyFoIpjzjBGPeokOohSuGuE2LuKfJ4kHEXbTjHX04/pxPNIZ/BxD\nuFEnE7kavgS6djle9HNEF2xQyRcH62bS3a9FDlJdaX9Aa34mzyqmJIsun18m\nd92yrprxXNMVvG9XSh+hP+O2ptAR+iwi85usNoYw+LcBA3xGMSln5/965cIC\nv7OMhrQkGBS+cxejgtA0zVHeAPA6/XSLcLaByGWuEmnmisKPQ8JVqjXXqTTf\nRmC7HauM9OhyxxALaNvNn+AHSMWcpACCuIFB3+8Ch4RQqJmXSRotXP2ZHRyM\n/nv7pslUty/sGIsyX2R6s64oH4m/IW9GjMgDv6qAng85+yNYFrriVCGTkh2N\nF08uwHY3Y6bQKBYiPiNLmv+MHk4hy772/2mlnpJawF6ZVk4zMkrHA51wrioj\nXz8B/Xf/c+ytUq5Zwyv1tFS5nC9wiMtCROr4nYxTsv0VKYvlqhU4ndFMod/j\neTjHPG5Yi/G0hjIJMhYO5RrVGdN6EYyXH6lI62PvOOv/H1jccnywkgHoi5+O\nk4OWPEqcvqL/zAV+PpqUmmzTPjtTAjwXfzctR5rK3JQUmmEIiWEMpJZa7NEh\nyBk2ztsPd0Tp8jS8n6EpXlTiL7hgUwKgYhKbfN9KR8Q+a7lV8hFMlkY3lZuR\nuCMM\r\n=PxCA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDrMDqztQ9QyR7OmNFHDlGuQd1P9f0FalNq/AK/3jpXmgIhAIQ2V9d7xZZUYtuZ0ESis4xZcpHn0F0G2PxJ8tDriYu4"}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.2.3_1590263504503_0.9196684623831968"},"_hasShrinkwrap":false},"1.3.0":{"name":"twitch2ma","version":"1.3.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"ajv compile -s src/**.schema.json","build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","humanize-duration":"^3.23.0","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@types/humanize-duration":"^3.18.0","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"7ba1d14df0da2e481642206ebdfd28639859824e","_id":"twitch2ma@1.3.0","_nodeVersion":"14.3.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-3OD7Q44v6om84bUv4kL1R+qK+mcnTc7JdkOfTOD8SugImdTmDZM/9DOuPNNqF+XhhborvHdM8c/IYKHCH8lt6g==","shasum":"fa388d86256f1965a6d06a47876bace23a33e0db","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.3.0.tgz","fileCount":24,"unpackedSize":48539,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeyY2BCRA9TVsSAnZWagAARPAQAIa1TO0WQjpa6dHFKpzl\n/sPndEIGdcEjJjq0qc8TbrSEpZTOqkLqQCxKA8LU0BphTUDNHlNh6UJiTqvM\nzInDFwzVTLBeGBnAQlXuTIprDX7CIjPor9uzWL3AEzH3iGqCnmMXoYVFjszr\nyeemvfNioN64xmHb/H+TGZMusrGSUNY//IMDxTmdVK4nZT5cwk9JYbNmdDKT\nO+m+ozmrantZGddySNjDvCEOnTuvwWNK6irctlma+w/1FQ+MOJ5PgP+3cQRf\ndQvLUcE9bqYJ16fjc3/95GFgnVmpeJbisjsaSz+BX3uVeG3bZF4C1PGbOa5e\npV0x4wHJBysJU29Zs6gAL7p21p6o0djNH2MhNRF/1PZYV087Q2CkbDfZArXg\ntwaoNh8WRuXYygfSxmkENGBAEOUZeTkorPyvri1k8Npbp22T6lcHvVzjyQoS\nIinfbQFuYzMOJo9CEhUt9O24fOZ9745ku6RdZxLoJ9tOAThuSW20c7IRpxpm\nIczH7ERBZxTEHz50fYC9UfpWbSASWqkD9Td9ova3nuQ9CYEbaQVCkZUchgf4\nHSMEjVLGdR06f6n90ynUfFKN8D1Ov8sKJwjKQk/0jngyd2pybT+iAFQkOfqG\nPDkNd5AZpKCB1IWwPZFrKzjJO1Gc6aXgv5zdPAbp6fof8NhlR07a75KW8MTJ\n4fte\r\n=wtvj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXy7w6TGxJDX6vveBilbp8ZSRSN6MUd+pR0ipHCyc2zgIgXs2hI1csd3e8ZL6gQDokcsNY200b6VQNOu9N/Z39DDI="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.3.0_1590267264454_0.27417607567162294"},"_hasShrinkwrap":false},"1.3.1":{"name":"twitch2ma","version":"1.3.1","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"ajv compile -s src/**.schema.json","build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","humanize-duration":"^3.23.0","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@types/humanize-duration":"^3.18.0","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"c0623ffba6e91456537915e4256b7780551c800e","_id":"twitch2ma@1.3.1","_nodeVersion":"14.3.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-++SVidyCq7706DvDNnby21zAJLexzYsL6Sln04JqROeqsd0A/KHNFNyGYFUK3IOaK9wqsTXobxBgO3de0YthUQ==","shasum":"f8e71625172ce2351718999de904d8d6657827f7","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.3.1.tgz","fileCount":24,"unpackedSize":48568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeyZAdCRA9TVsSAnZWagAAsxUP/2KGXZsdpgb9TBiQpJIl\nwVkTjff2z6EeyM0lYc2n5clTj4I+d0GGCeD0Uye35iT+0A3pSzqnKVwrFFFv\nH6uMq4Ml+/DzlaV+vlsehueZroNnp69vDNokEd6W3utMaxyeKnX8ESJa83i7\nTuLud8SoE+5bGd6B4H9lAiOsXLoGrXNoJRHX+EDNh6U4OfOkSZqg+oqUc/DA\n3+U4dC9d98gZ+EU8VZ4DaFvemirgxSI90RJsgUo7mLaQB7dW2TUIXWQ8eapw\nljzXiDL7NoKZETsNLnCv1y0jhwQvYqKtqhKH/I+RfHPb7bstoYwVJoqJPV30\nMkZn6AX1qZ+dvs1Bbda7hUoumkyybfd8Jinv+E5PehYTJzUnqFwGEf0wvAL/\n0fbSBFOpnSqOMmyI5hX+pqI7h92ljeMtDopGy9+qcUE1VYxHW/OBGC6Yo2ZS\nu9HRBhXdsPDLLmwLJd/A635zQDH5IABibAztgmODv98X2mdGxnPHIeAqw4JU\n3GbW/6d4+OVxgffYosV5giDKvqa6W168JgqGZUx+x4PByveErNW658S6URHi\njCP6d4uAVAgRIsLtAjVEuDZrdDqTkXpWht7xC5WvJ0jt0j4hn3amQx91eOv8\nK/4qjycbDXztJH9shJcgT1BHjVC9N5gNqmDQmVAj+HesesIDMu7OgIIHT+8p\n3An2\r\n=a+9A\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/tywMj61JUIzC9sN8TylWHbB2G2pkglfjGDSUic6+dAIgbHqgwzX8nvffw571D4bXj4F02lIla8Wk4Gi9maBcK74="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.3.1_1590267932735_0.21607088818677922"},"_hasShrinkwrap":false},"1.3.2":{"name":"twitch2ma","version":"1.3.2","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"ajv compile -s src/**.schema.json","build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","humanize-duration":"^3.23.0","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@types/humanize-duration":"^3.18.0","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"b7a26b317e6c4057ec8977c56bfaabf65a51c6b9","_id":"twitch2ma@1.3.2","_nodeVersion":"14.3.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-4rnOa042NnSNo3jn4S29+ZmfcAagN0PaO1OyD8jkdUiYdhx+IdocG0KdhTxnyjtsXs0NRAom2EkA9mMttrwhtg==","shasum":"acbf7c0bf157a2f7612cdec7bb9ba763656b9668","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.3.2.tgz","fileCount":24,"unpackedSize":48606,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeyZEhCRA9TVsSAnZWagAAuFwQAJKqB3+B2KEkfKtg9A0E\n1bFDq7QjP0yTg1LOsoPQnmvNWLDI2MdmDZs3vnLFE1WFXrVTAogFrz8yMVes\nTwKBhrWtm8wumIgV7LT4K56xKMIOwo9y2XefZ/UbnFlrdJqvyiYvYX5t6BXO\nCdBUtlEM3D9qmDBbfEtR4QKV5JKjMRpu8mluz5xSAoko+ESAko5Ih3BHDRnb\nSCUoMLZKqGkUwoalY01ljAL0efnfFJCRJC7doTwI/die5vRSqYDX/FMAPzXD\nep+xEzFs+m+jqjLn0BW7HDWWqVRYNO7P8qbNAbyF+ZCxdkpJu7YJ8+UUgVhZ\n8NbtucMll3e3/vp3D2040QJ0nszl81ZcpUyAMnNC671iBL66sT2QMXOzSI7b\noVWW0fTLv9tbyOCXU33VLxwSs6tVLHKEbwlEl5D2SI3wylATkP8ZOd+vQWrA\nI0HFkJsQIjV5i0vo8oFYmYxBPv1rGz/TDGI9l23Y/mPC7VrKQutRN+Y6kNbz\n4HsU763cusflxqLX3gJa9NUx2ksZ8botqSTHZqJpbA6ZtU7u0Td1HD1QLUR+\n3m8Fb0WoGdv6IxbNcFNS37B9z/LDyLbPql4EO+nD1Dx+fkQp9wWRzNTB5qIq\nf73DAYiSJ39Z48IOapk4X+30tRvpZBxy6bxPeUReDBd4Y72e9OByUEOFLEFK\n2sMp\r\n=8JXw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGw1iP7Zh9TIi0I4J516VjNhgZk/O85si81NVVxwvRaLAiEAlRbY3eykAxWpYH++wYQwsxD4Wa4uaheen07ysjUK46c="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.3.2_1590268193408_0.29946957128884466"},"_hasShrinkwrap":false},"1.4.0":{"name":"twitch2ma","version":"1.4.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"ajv compile -s src/**.schema.json","build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","humanize-duration":"^3.23.0","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@types/humanize-duration":"^3.18.0","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"92daa84904a27216bc290c9a9af40d0a047aac69","_id":"twitch2ma@1.4.0","_nodeVersion":"14.3.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-LmFXMXMFf02EQKAslhz+6qDYAzHzXit6aG5baxmgqx11tEvJz4SPGJPINeoxxKPhCgjL++GFUXQnS9LIe0q2/g==","shasum":"a89a6ae1b6f94d47e968d76ce36adb8e7253327a","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.4.0.tgz","fileCount":24,"unpackedSize":48515,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1gbRCRA9TVsSAnZWagAA72kP/iUpsxuW+ItqKFFssrCi\njIZt1/ZZoJoRas2c0P97YnVJqizVj0ZeKPnk3mRzi7RCxV8MkGXiQjIsH/dj\nk7X50Xd0GrLdj2NToQNheU3UdnqtN/PYoy9iKqh11MxVqopcV2rSqHyO/B0L\nImD4h3/npn2z3tdXYMm2ShTSooPw7Em4NQMU/vzaPdbwsuBRSeoxlSrAtmZy\ngFVBHxxI9xbPdLLxJeFsJKN9mZYso3bw6qmTRThwy2cKr0vkcy9ewoXRXBYG\nU95o3EJhWKVcRBYdQD0IuFqZCFBxuVvZKWC6RHet3aL0fzJA0+liK+XvjG49\nhfCUfeLf9eOIWb4TObYLt1pdaMDCFPyRyrMkvGKgUTRT5o2FiWrvXggmGJRY\n1WWcI5arNIeq+EsPvZQqyn+WT/cisDkrCb8jXhMWyR5jo+1AzCPacCAxBH2I\nYY+gVtTbZnskRswM9o0UkBJr/voo4gwHpPnLRRJkFtrb7+mgvmNXW+Z3DFaS\nYzSDC86eG3PaHLfnDpzqKCjF/7brQGCs4VX5VJUzdkkAfg5Il2RjK7OmAYd5\nu64g2KQkyeNTZyCuS9IJmM6rhdO5n4W20ztVsbTvtuA7b+yk8M5g3cszy0vD\nrOfn0lOUnxmoSnaRYCX7X0wxkWKfscErPo4DQepTzUpC2DlI1wIIEHcRgNRZ\nI6b7\r\n=X4Nf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAvc+KdaMwb7fBywCk+MmSix/3YNOR++Hwqup9sxHdanAiAkoDriQI3xGxE9Hu/VpEU9LCkyjuf4B5QUDXObQ/1W8w=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.4.0_1591084753169_0.2711784979584857"},"_hasShrinkwrap":false},"1.4.1":{"name":"twitch2ma","version":"1.4.1","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"ajv compile -s src/**.schema.json","build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","humanize-duration":"^3.23.0","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@types/humanize-duration":"^3.18.0","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"454a49b54d3aa763b395b8d43b6e4a517d3b2db7","_id":"twitch2ma@1.4.1","_nodeVersion":"14.3.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-4PoqE6DlCHl1YwVe3eHQ0aftHcCDcFZPmjOH7SmZtFfX0Usqkjtk46QaFy8n6yPEgfvg+Yatrs4Ga9c8pkUdSA==","shasum":"9fec4a0d9ba67e355ff4d212f9b82f7e0a46b7c3","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.4.1.tgz","fileCount":24,"unpackedSize":48645,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1joFCRA9TVsSAnZWagAAGQoP/R+5GFOd7zcVqcPGk+m7\nWAUHdkHKlK3+7+aVYVBB/C9GXmvvoEBTYylNFYm6FVOK2NP99/qTWFw3hK3s\nN9ZGNUy07LsW9ShzboK6x0FtxbOsto8UWdqGbk7g2HJpmzt0K0RhBYeFbx8D\nGBFwF3efPFYALQvZFCaedEVPKl0eMug2EowCdZ1FpR8KSVGL+yexWNqgcTLt\n1LeB6pFahZCOqYaByDjAoJ9jJDENaEf0ph1S2oXsuWdnRT4Fh9bj2YiQYoqD\nhB/rguPbsA9C12QIftXDoXscBR6TrXoju2f6Xzh8h8IJ8aPITC2ON35BLYsK\no/LVApqTRtrrhJGGio1NWmpSY+Zy2U3wPoTSTsp2Fm9JWHpWGrZ6AJGumQtc\n0S9/b4l0EeZT88nFofvuhzEi7VYIrmSFiwxdxzCBP0gc4iAQs7jZdVDK7/Ti\nnhKukKnxjDuFDPztuSiSPth3gKPxhiCPT6IJY+WEWOJchi43z4+nrIDBUY8S\nBiF1RHpMMCV0uqF8cvam3LWYE1APy8/nFHWOZPqntIcKKcKpHojyqlNjUXWv\nQ4uHuz25lAkO+9SbQbIfEw5POhrNUZoF9bZODhPp3CbtHYWOV4D2RIlKqgnJ\n1cw6UZ3eKQNT8ZCc9s0yk//YG/2rItevjEAsIg1jOIOqqDdwNArw7f0CpvrZ\nUfjK\r\n=Kbib\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8gaCUx/TehlhKCgLIqN/5yYMWN1Jg2PP9ZcpMkIxKGgIgWzYalCC6NlGJY1OLYd/LmoFliPMV1rXrtX5HWZlHl5o="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.4.1_1591097861275_0.7984129392302703"},"_hasShrinkwrap":false},"1.4.2":{"name":"twitch2ma","version":"1.4.2","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"test":"ajv compile -s src/**.schema.json","build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","humanize-duration":"^3.23.0","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@types/humanize-duration":"^3.18.0","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"b5c0fc8492a822df6faf1509585e83f7e65dc676","_id":"twitch2ma@1.4.2","_nodeVersion":"14.3.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-vgEd7BeVUM+lPJCJNXSG2TfL5tJiDK1JX/8KMNB2S+A7rpzhrgvz0NWx9uBB6a+R/cU9EN5Iz2iZMFw8Sjs4YQ==","shasum":"97dc14effd5852f252bb8f448bc8bac7a1c56d20","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.4.2.tgz","fileCount":24,"unpackedSize":48669,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1oyyCRA9TVsSAnZWagAAiBkP/2TH6w9fbF0FlI8w/IJd\n9/lGxEAKo/0c7FRQFgvxzb88lvdhVFU2k2LJBWs4OwBe7123PZsLghZh++Su\nB5AHsrsQs27l9E1KGxJEc5pTYk+7f/QCSDJP+NonycSlXynnYhPYflGoFZ/R\nsrHfTHrQmOi5rqiwo21fiBP1QFBCTg/NbzA+3nXTm919OofwFJ+Q4KrgOJRX\nImFE7UHluFw5fN9jckcxHZcBy4UPktcxwL3VeRlR/02VOnJ0/D2tt7qJ3mEt\njW1Z/Mb0Z4yBUXJQiY9dksdgk16UDzstGl5kAneyVIVWT2Wblfz3adaeImzc\neU6EGOnEqgCjHEZs0sGEQwPNxBnecfJv7APbsvA5uBA6pC//Kh91VBuuJEtH\nxU3fS1D+RdTn6aD4LL3HA7Ep1U6vcZSEmLa4ZNpY+4KhHhK4itcAQfryuiJ+\nWJxJx0gbu7btSQLNFpqg3ixmYF53heWQ61VkQweZDqjCmK3bLIbY7WNBidB0\nzlw6iTNrnPH9GD+JiZrk2jx0tHvn5w5nJYzO1MiNRlWb3kdEV8Vn4jvMpgSm\nWFQYB68ixqV1ctwXT8uGNEvQ95W7KSwQ94lViNaLJGfvB2VeZYS+A067q2M0\nXppspDYfUaJ5XRhydhXYMWlszOjGZ8fcYoQj4prUXYKOslwwT9RqaZfN6eU6\nufSI\r\n=zSsG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFxjZc6rzTdoezECEkkzHlOytFCDE0WsY3jyRPV/xhnQAiBFFGJLZ2tIJg+iADoBYN1mbkXS2yV1qardeGmWoZpuCA=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.4.2_1591119026079_0.6774163600011096"},"_hasShrinkwrap":false},"1.5.0":{"name":"twitch2ma","version":"1.5.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"ajv compile -s resources/**.schema.json && ajv validate -s resources/config.schema.json -d config.json.sample && jest","build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","humanize-duration":"^3.23.0","lodash":"^4.17.15","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","jest":"^26.0.1","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"c80129103558ad73e082f1c1cfd79b039905301e","_id":"twitch2ma@1.5.0","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-KXQtYpqA5BptUMihJACKZDCGzg6kou9rlB7du49afaiDwFXtRr8ErlOBDGS4HRYPcRsAJVa6U7LEh0o293U76g==","shasum":"21c7912b1a05186c0062cc21b7cd8347bd859adc","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.5.0.tgz","fileCount":29,"unpackedSize":70663,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2B5cCRA9TVsSAnZWagAAUP0P/0wTIWqw3/fHoubBToBn\n1siuStcznAYV7FhQXL8i3r4YteoJZOQ0g8z6QWcarDeQxeBP6SB24hDmqute\ncZuuNWlLYrnRvoDck1l/irl+OXLpwzE+dixrDBF6juF1aWJvIUfjK+q/PqwC\ncD0L9PsJJVa1Sfr9C7PBaEgLoCPeuIJxcu8KK7/BlppfjeY8Lx4sHgJzT8WQ\nZq2kMdG96h2Zlbj6hWmH/usXSgXK8rfFV2gvofqrLvM6ZTrsS4rjk6eOBIec\nJLcPhII6DM4KmmMUeUqNEx8oLapHPIjkD5h+fXsEc/mgzlSzvb0VPVGyvCRe\n4bGQvfwcaFp0Qe4KuvrkosHSkJLjSUR5ub+ISo3y6dUnx8VJpaNUxMMttyS5\nU0+42QeCnAiETj7uBuuFNeX43XFSYO+8vMIZuKyWUJfg5qWSQY1/uhU2lYfW\n3yKPiQGvg7im0Tyqc98w0eGsH9zDvRZL9c3ZRZ94w9lLIL78ovHxe+5DPeLD\n7DXprRTz+MV20jPpfiwGr4NC5FaQ4F0SKHniB7Z5mGrXKwtPIPr+dFUbTMzQ\n9dgaIS6jnnkYDoovmd7C60xGnqcpFCKUJZLtiRqN8DutOdBrYWEUt80An1Y/\nCoHKc+Y7xv9bxlYB6TXKbOL5qnK70GE07XpeZ8jX6jLW4ZPuOzsoi7cDPEH+\nXIfM\r\n=v3vK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCOhuyS9KQdeS3Cudy6erHvmepABATh9bBSX01a7vtFQQIgL/KMwGYL74NBQ2cCrpuxNyQXppMhO2Cg3IpZ5zttK04="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.5.0_1591221851662_0.6394922146881079"},"_hasShrinkwrap":false},"1.5.1":{"name":"twitch2ma","version":"1.5.1","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"ajv compile -s resources/**.schema.json && ajv validate -s resources/config.schema.json -d config.json.sample && jest","build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","jest":"^26.0.1","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"06da1d0a6b23dae34a7e1daabcb2a0da61bfa1c8","_id":"twitch2ma@1.5.1","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Kv60vQiAr3MjXhS+RRMTGkdglCu2csoViuxNI7TPJ+1ZACL734PcIzbTkpTsU4cEa4wSkvTrER6qRAoFuGA09w==","shasum":"d2dac836c8b5699c73887e084da316912e501e83","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.5.1.tgz","fileCount":29,"unpackedSize":72038,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2CmMCRA9TVsSAnZWagAAKT0QAImuQKnRyhZaqZhxWqEY\ni2WrIH8efM6PsipMT4MrocOyk2mJZQ6vmVGXf8853wDZy0GvIh0UeyWZRBIv\ncJ7kO5qDykv1Vwk4hSFBy07qxm8K+heOoBZIZ4UaeLbISQmZcOQqcfHYp72c\ndjd6hrzth9ggNmNSZd6Nb81Emj7Ok/YQ8fak1tiHdU7yVtjIdgvpz21Xj1aA\np48wOsxeAC6mzgWszU6ZIaQmcH4TqV0QwRKqljSfbIZe4/mYwJXLW1eHYqUM\n4aKYRQAsi7WpyhB/d6DsbG0DWgM6KtpinHfwmyxb7rPpWIVbVqYmbMiuEl56\nWIJRfypvA1DPWpHGeXkbbPJmJVyFzU/ff/GcHkvf6kTwc7oEJO8opgco0EqG\nCbstZfmo41S6ZnemYL7xdKP4SKIECSu8A6q/Dm82fTh8DkTbDZ2TsfNyc1y3\njdmqgdtHV/IiB2cXzaMI7i0b69i+gWw3txxJnoLyL+JOYRG98PstTno1N/b8\nV+6e5UhZWnKErpuRw0M73g2SPJime4MY+hPIBrYeDpJ26QyqYHKlPo/fEvZT\ndX1V9JdPWWJumRD9DtD3BLSSXLlrRlMy0SvBCd7h6gWXcmh2HJM692pz7/Wh\nXkieXpnG7Xgabi2FrdekfI7mL99oBpRhPWUFaOuZr/i3tXz+DRq6AjsHs6FF\nz1cY\r\n=QGJ/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBJLSDjfyc9gzVwlhKpKLfgzFw83eS+TQnMAy9aRyWLjAiEAh7Ie+kbrOQHu43Nk2Sz1PElNhsLcMH+OYYDFdEnE8T0="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.5.1_1591224715183_0.5907086683751281"},"_hasShrinkwrap":false},"1.5.2":{"name":"twitch2ma","version":"1.5.2","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"ajv compile -s resources/**.schema.json && ajv validate -s resources/config.schema.json -d config.json.sample && jest","build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","jest":"^26.0.1","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"0ea5985aae208349c73e507ddd30c42f28fab59a","_id":"twitch2ma@1.5.2","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-EVtZecXJ+090dgCVvi29G6q5Kz7Lp5rqSBF9RXpe/ddYPuXyZLZSQySYlJ4LtBgRyrTqoeMEDw1w+yEdXKCUog==","shasum":"12c10b53f58ecaa97fe720e164af8918e379fc43","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.5.2.tgz","fileCount":29,"unpackedSize":73346,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2C09CRA9TVsSAnZWagAAoQsP/i5bztUmB40IKXIPSK+T\ng6lBlU2XNe+aA68YsMnhlCq9L/uf3ei/d5lYUlR9F3Ouwui94NlyrCeqvaVq\nlUaUMmEORjqM6eczNEmbIfo/FQqZ8LGB21oeI3D5MMd49rnFUrCgrt8UBdCe\nUe0mwXWdBw7ISznxaclkHbLklj+6JX48cN1kHjhdnCSC8TORYncN0uVRdvS/\nfwmwG67SZyLlTDA+JmuUYqBkvDLUWczH8+QaS4uQ+9t7yZzyLc+45lIjvCec\nRxHBd7BFxC8Skdv5//sdzB2nx6V8U+1+WUOtpmZie8u50+/wTAlsZP7eVDo6\nn/3EZhQdM7ADz3yM5YhRKFFIrGB09+0mRuHwb91CUl8y7PXr1gCofvMFBYln\n9lpSCecpHaMKCmyMx89zJs96Td2n6n1DHGpxZroAOcHYW0Ea+pz4cgSVBLNJ\nFvDbX22amGR796+euZE6aZ/tlb6X4wOgoYJVIxP9c6PbverlRjGP8x5T8DoW\nY5GnVUXOKnl5tlb7qAFsTAJRIvuXtQ7uQmpdtubGURe2BoDDjVGvL8XqE9Yj\nejIuJAmR3F+L7Q3CQeybEt57VV6O2X+WxjE+D69/4luJYV/Dqds/cn6J3ryA\nkzPs7Q0YIL32cOhUeR2pAjh5JBoy5pUrqMbX4xOuSenwWGdoKyxH/3IXyx3y\n2h1q\r\n=SRMo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDicJquz9r4sj0umav2EKsVcYcS2c8Og2Sr6AWLFkQNngIgbpRPliwh9AlAPRdJV0+j1KoDOhP36/oyRq7Fizk8lpY="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.5.2_1591225660564_0.325607723647545"},"_hasShrinkwrap":false},"1.7.0-rc.0":{"name":"twitch2ma","version":"1.7.0-rc.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","postversion":"git push && git push --tags","validateConfig":"npm run validateConfigSchema && ajv validate -s resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s resources/**.schema.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","jest":"^26.0.1","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"a650bf9d60823ec033f1ba862a8d8a31e990b90c","_id":"twitch2ma@1.7.0-rc.0","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-ihj91TDDxS57PMfndKB70nwgQ1pinho/z79TkD50qQoyCynXQmz005sp5OJiQD+kTAj6BI0XonZ6oP3ka6MJiQ==","shasum":"f409151852fecb86e9c93f69989f01b52d9244b1","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.7.0-rc.0.tgz","fileCount":32,"unpackedSize":96833,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2kygCRA9TVsSAnZWagAA6OIP/0VbYDt3jQ448FnA/UMW\nNC2lTRv0sonGOWkPXFa/2PEe5qWHgUC6K1AZhH+sdlfa4r2iGZB9uwDqeqDa\nQBwz9BLniNWXd7I0NyJX/Q8yvPCFZGjKjPDCzSENwRRuSuYlJ18DOLlYes97\nIvQSqZDdAT6Lf9am69sk53vadau1JrP6HM2VV8U2YNcmUKkgYJ34FnoLN2LW\njUicWUAoIKHfU/dU002vop1XzfYmrV8BPM/SrWJbCUQoCsMNkkPIfV8xMuU2\n/Xx7bZ1xKESbU3XEZn6Cqz6DhIxf4PjTf/PkxY3Mz5iE4zYexJY5sfVydrZZ\npO+e6YwnxCQNj/D5prPlaWAtQDLCMc0mepK5JuGZgljgcosT83TMuLSEjlIe\ne6XspOBYYCIEQtg66MmcDG1uixIdS1a0pCSsyq2dFMc/Xsy40fPUD70oJ7JK\nAjMtusfdP3cPJbE4hkjkShGvMmlQQ9HLok3RdZz/SOmlbORlX7cUi18y0y8J\nh7OjzSnXhIiL0LkseCFLnoB1gWLsBzwvPSDATKduGFXuHkmtQ/jStiJYpL2+\n++gnJ77R45W06zqqlwbaZcShefsSEnSxmq7JZY56ba7nD81SEMB4I/cwOAYb\nj0zRkgv3Yk6JRxRdIC4cStDsoHIrNyQ53SU5nANJViYHSHETdIT6GAkondU6\nvJ8q\r\n=zIj/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCSO6ZrUquZpDARkFFTFcx9MiU8tLlmCLwFfmc6nSQ6GAIgTvJ2B1xjMObLzj02ISvW1S4aNA5DxbKNnKYoDOk5nao="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.7.0-rc.0_1591364768236_0.5564739242390822"},"_hasShrinkwrap":false},"1.7.0":{"name":"twitch2ma","version":"1.7.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","validateConfig":"npm run validateConfigSchema && ajv validate -s resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s resources/**.schema.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","jest":"^26.0.1","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"9ed0368b0f25a719174439bf5e43ded4beb7738c","_id":"twitch2ma@1.7.0","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-nK0C+HzB9MvPT/MpvdPIoZNCAmi6htfZq2TELeOQAZtsC6IzHmsI1sUxiwKcGCARbmW/VvgUhL3uIKS4teY//Q==","shasum":"94d9329e967bfb3c6a47f34a8ae698c622ff2274","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.7.0.tgz","fileCount":32,"unpackedSize":96778,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2m1SCRA9TVsSAnZWagAAIzcP/A1LWyY/HRrnU2VAojYd\njQFcCdkLs1InOgOjkBhBPZ0l4740IhnmA7imINIu6/1F8/0SlRm/y/KCXPNn\nTef5oPbHSsghdZAnU3orX1LfEHre+SmCD73+iucZAzyKTu4CvNAHcv7qXiVh\nlm8lQO1Fdb6ZquwK/M4Eg8eFGAz8TRhyPw76kfSZIPpnVR6xMQwODiJh9oIF\n78HcETXHaYXH/Q88yyNPG0ZWUPrhHYgYE0lC+O5PZPdXMlv0vOkW1cSDrLd8\nG3fAlzKhNkt477/v7oc6JBLP56EIGQ+ctpHLOPud6RDiWBvhm2phOkvnbBIn\naiEO8+wCchfSZFHZVGn/IPjYhlIP/vZjTE6MzKZS6X/j5g4YuayTHJ/yd+HJ\nWKJqwwrlFcqPuc+Z7hdT9bzP53dT4jsJqtsBmMcZwoUZyoULof28r2R0scDg\n8kcU/UOUEfvmDhYO2IKLdBcAtZn6TmMkTM7MIglkme6UTOxRfwQVyU7YsTyU\nhdTpSU23D860hdY06hEF5eqYJ0HO4yQAUxGjdDTwKGfjju4UyUAX4iGFYV9h\nWouEtovkii+clI7K8/8lLXtoZpXsXf3j8zYu+/+7rh59eM2a3+sYbRSKCuh6\nuUM2/L0yFKc0KNxxTF+WGm7AAanidreCcSxzGC9Ye5dvZ5SoVaRhZv8P3jeg\nmBXa\r\n=E4q7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICPTlerAEf4E5dD5anuTXbaJr6THB0uPxzeM1Y245GWyAiBVMT33tgkb8whmO5YlDtlnglbS5T8i9cJvDfWb6qkplg=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.7.0_1591373138057_0.4400237190998513"},"_hasShrinkwrap":false},"1.8.1-rc.2":{"name":"twitch2ma","version":"1.8.1-rc.2","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","validateConfig":"npm run validateConfigSchema && ajv validate -s resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s resources/**.schema.json","semantic-release":"semantic-release"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","jest":"^26.0.1","semantic-release":"^17.0.8","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"c5cd877dabb3bc6499de768c3e830eea85c8ec73","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON format. A sample file is \n[located in the root directory](https://github.com/schw4rzlicht/twitch2ma/blob/master/config.json.sample) of the \nrepository and ships with the npm package.\n\nFind a detailed description of every option [here](docs/config.json.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contribution\n\nIf you have any issues, bugs, questions or want to contribute in any way, feel free to open an issue or a pull request. \n","readmeFilename":"README.md","_id":"twitch2ma@1.8.1-rc.2","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-6u06l7bwobT5BSQJhJ1ypRoEFbOkK0vYuneniVFb1l0J4ZFlNIxW+WSzDTAyZJJl1nKy5tTgSHQdCroujjGC6w==","shasum":"e7b8ebf3429da58343eebf90e1889f3efcf7e3b9","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.8.1-rc.2.tgz","fileCount":34,"unpackedSize":98259,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2qGvCRA9TVsSAnZWagAAfNkP/21WJUF0sT9CfXYkFQLc\nj29dSbCMePcdAINlvF8LZnGlntQpTNWV+v6foaR/hOyxl9mtruZm08PLL1Qm\nJ9H/rI9Odp1qeczDhTpnyp3JxIfIEVoIu9w25xn0pZJjvuI19RWW4xCQZItw\nUe3j6LzSezC8VHYmOgfhidLDjZGx6rO4xbBoiVHmXBkb25j4xHwPbVVzi87n\nDNgV9yyERSBUF7t3aHropX6Gt6FJlMkbPJYooT5wpnIk5UM6+gsEeglVI5UO\nBq3WSqL57DF/0JExEva+02uw4FMoPkxWRm6gFrNHbe9PhvciBXs71N6xBPhk\njf5dG6RoWNcYt/AJK4obM7WqZ/HkTPHu8Wd0A9Ql8dc38+qGG/+P66i8QexR\nTofj5OLtodyM8sGUJiKM4zhh/REXrpUzuP1rvyoo83ke84zBTKGgoeTwm1DD\nb3lNX/sXYIaEFJ7qt9LU1j7ns9WP5eREPfbHv+QPOMginSC8t5CEBArxEShC\nCRd+OiJQiK2isBYCN7oIw9x3FfWEGx5wT0eyqjXxnNE/o5mi8otVPM8Cc4Dz\nb0yrplSFRMTZ9MVbjIeXVrEuIHRrmmVT5Vyw54lBkrY/QZGnFmbqQ3X7ASSg\n9k1IDmlUWkUoh2mvFsZd+wxpIvxobJljVsIBGt2uxDk/0T3yalPbkNjYSzFb\nvZge\r\n=DAJe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBdnMyWWsa5QMm9Wud8Zi6XaswCYHzmlU1w4wb9mv31gIhAKQvhnZ7H9aC/zPgDhYxdRryzhfwTnfIkGbljKElXoId"}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.8.1-rc.2_1591386542645_0.09313469242075034"},"_hasShrinkwrap":false},"1.8.1-rc.3":{"name":"twitch2ma","version":"1.8.1-rc.3","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","validateConfig":"npm run validateConfigSchema && ajv validate -s resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s resources/**.schema.json","semantic-release":"semantic-release"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","jest":"^26.0.1","semantic-release":"^17.0.8","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"87b6a080b0835bb609fe36c2064f21a8fface39a","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON format. A sample file is \n[located in the root directory](https://github.com/schw4rzlicht/twitch2ma/blob/master/config.json.sample) of the \nrepository and ships with the npm package.\n\nFind a detailed description of every option [here](docs/config.json.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contribution\n\nIf you have any issues, bugs, questions or want to contribute in any way, feel free to open an issue or a pull request. \n","readmeFilename":"README.md","_id":"twitch2ma@1.8.1-rc.3","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-q7D/C3Up61CrWnhuG5JdyK+vW8xtSVtYLIwUXgcPC5p97PH83Y3kuKFb1hdnuLyEZBOobhomCTSAo/iIAkMsPg==","shasum":"24445032c9390356cef0b58068ffd537a5a26bbf","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.8.1-rc.3.tgz","fileCount":34,"unpackedSize":98539,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2qm8CRA9TVsSAnZWagAAl7AQAJAT3IM084cP7ckPe60Z\nkG7xUewQDMXlgmFv1PA2fhpvmMXyNkPnhTwBJ0LIAgN1QMgHf14AoJRW+LgD\nMoOaOKNcQSm5ZEu5XAXiamE7RycsnbKBsBlww7BIPYPFx/fcjGpRn/c2uNzl\n8qhl22VjLPOf65aEEJb6c5uGGmTkmZHNR17zTo3iOlalbz9mXuXPQiaZvXpo\nb7/qcSzP2upiqLNbQbRBFbzbu2l5riAJ0B9ByzwZysOPFgvorD+K8MDNmMi9\n+7ca8hOFZQpXYn7hEGOgY4bsM8Vn49XqBbWSDnrmrW2fNO90FPsaCbO8QV+n\nG9N4orUbsqC+dB391ID1OEadTdeOhWGAxD2d1+KRFMR7kyhWY3654jEwIfqz\nwZ2lgAVVxdsi2177PauZ1lx7pTjcx9bwkWax4SsBGz1EBe80wvnPeBdXEsbg\nL3BrmItb+P1lbr0HLbkEAEHlQ/U0o4nRMGSfnHYCEZPogp2hRPUeH+vkIXNT\nJw3B32iwMkbTvX46QLR5Kms0OMhsKHI4OLDFPFxw/BtWmQ8nFvhXG2cRJaN+\nzHPv0fmFVw/ksqk/sN0VtKZt2YxlWTxT6RHoZPcHTqUMD7Ds59SuKlDqu/yG\n6f1RayngLOJkJMmoVSf6HKTkMHLGbrcm2ZZYXK4FjpNlsVifMB4XPc0PlcmI\nTVlM\r\n=ougA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC5BpP1zMtZEmIdqKjLKxVtpoWvlakJVigkXP69vJAWPAiAc4cxxMYyXYeVabYS2ldGHYx6pZ3QS5FOfANRqJCMYEw=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.8.1-rc.3_1591388603613_0.7862685499607864"},"_hasShrinkwrap":false},"1.8.1-rc.4":{"name":"twitch2ma","version":"1.8.1-rc.4","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","validateConfig":"npm run validateConfigSchema && ajv validate -s resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s resources/**.schema.json","semantic-release":"semantic-release"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/source-map-support":"^0.5.1","ajv-cli":"^3.1.0","jest":"^26.0.1","semantic-release":"^17.0.8","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"4bb7098774f7e0de67a66e9f3c3e751bd9b1bbf9","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON format. A sample file is \n[located in the root directory](https://github.com/schw4rzlicht/twitch2ma/blob/master/config.json.sample) of the \nrepository and ships with the npm package.\n\nFind a detailed description of every option [here](docs/config.json.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contribution\n\nIf you have any issues, bugs, questions or want to contribute in any way, feel free to open an issue or a pull request. \n","readmeFilename":"README.md","_id":"twitch2ma@1.8.1-rc.4","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-7CXZKPnqatGjLMiGCfmv66ISHsG72j9MpTf8RsZfKAGUWPeqvvmnl9M2OSR0ojxQ/5G9QD3K8eYzUeYJ8rvUzg==","shasum":"21be1ad234789b3da5f0e2b9aec3eacab3036ab5","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.8.1-rc.4.tgz","fileCount":34,"unpackedSize":98843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2qsFCRA9TVsSAnZWagAAe8sP/jWDQPMJUBILQZduf/4K\n/8J8yjoMK6TL0TcAUw4bRkk2i1pCqDxxImNDtqNvP6DzM3C20jrvTJV0iutC\n3hqOWdy5lgo04cDqqZrh81FajbP5GYUXHQyAv5Bkf4nLTCA5+LYHxnAaFKAU\nuXa7l9hAUoyo48r0OiQ/JJXZOycjp7f1J498ypTX5KtFkF0W9VEOqHopaRl5\n6c+SY3juVsKRrLZNGbMadZ3UIgNP+rEciCngyugNKnR+8PPnBBh59LkOyOYq\n/UvcyuAK7QBhk2qTkSalw458h6LakyFn+CQ2uK/djZjcviB8EUu1qKnvDXMn\npGut8lkJVWfhbzjUvaXPYakqfePW5uItuRwWWE9caA+i4XrsTewXdbb45v6p\nAWS5fLXoNVqgHqFcfpUiFN6d9o5ERZHnFNuxYMQlineBS5pcK7eTzOn3n7y0\n0m5SpbbY/G+iUq8uKwlslF4Ro4f49zYZbOuvvnOQcevl/HAYPE2I8zAPrdpX\nJU1Q7JYKTF0HV+AVA90C+O3rAIu4yqdj8vjhHvSXVc4VISKKIJxz5W4UcIia\nhV9HPgTFoFn9MkWLMOaRC42kNohxQN4aUD9MEO33KGwEw6EQreE7AhgQindg\nKxN/6H8z7d4RBe0tqGJQMjK+NT7Bu8yNmxvZPeXK840gLf1KttzDe7X+U1rv\nU9m7\r\n=NUQI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEAtP1psHjMjqBcSpx/CPgHW7pKKQsG16JVspyJeeGv/AiBLmHVdTZBAtpRdGy7rsJQ2GzKOhDLjl8G5CT/3yRkPqg=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.8.1-rc.4_1591388933238_0.2166064694576284"},"_hasShrinkwrap":false},"1.8.1-rc.5":{"name":"twitch2ma","version":"1.8.1-rc.5","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","validateConfig":"npm run validateConfigSchema && ajv validate -s resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s resources/**.schema.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"9d858a80d69930f0ea6d2d4d84da3d0ff875335d","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON format. A sample file is \n[located in the root directory](https://github.com/schw4rzlicht/twitch2ma/blob/master/config.json.sample) of the \nrepository and ships with the npm package.\n\nFind a detailed description of every option [here](docs/config.json.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contribution\n\nIf you have any issues, bugs, questions or want to contribute in any way, feel free to open an issue or a pull request. \n","readmeFilename":"README.md","_id":"twitch2ma@1.8.1-rc.5","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-KXyB8lM8r6WMcWxo8JcGfCpaB+vTFU/AKfN+ll83ItgPdo2XAW3i07SP/BiblQ1xHrdf85NTlstVuVWrxEdBmw==","shasum":"a03da8755f85dc5549ab620161afe0f1ea016457","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.8.1-rc.5.tgz","fileCount":34,"unpackedSize":99011,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2rMgCRA9TVsSAnZWagAA+CMP/Aiv3C6nbsyzu7terDs/\n8upISgkmAIKJyjpEdqK4d69r2GrkgcFPfLCmW+WpZ6phZxdUcuArGS6vT7+J\nO3ph7gAykuIoAUNo6e4CboffZ/RI9U8WSCSAHDvXiev6Cp866QWtfCoiejr6\n+c6HjoMukOtl7CPHrqYv+5RcCEQV4iegw019iYKsFrTJLS6UXMQ5zMQRDiDN\n/MhAo7NN0WEXhX/ixMNQdgA1LYVE/0Gz3+sjwZe9bzDV3VMOuapPUaPx/DJ8\nRYYzgCpUJL8cANRAYl+4Kusn+awJacNH+ddhC83aAnj4BoqsvvHlSJHrIkgx\nEruHZ4v5F06J/VzHsGhCCIelsJvZ4Sn9ygSBPlzQqRzg7KoB01/O9thxPGXi\nTWpGPJKHBiHTQ68x5VWboPvBTxMvWvhmFEwgmfAvIWPeUCcx2dXp96qmph6n\nDI00DrorsBKW51N2H6mcxBcmxZJegv2pX2OOx/8E+TKGIMgDUJd+6O7S4waT\nq5sWwCPUf3Q3cznpqESbLQ3G/mlq9/CTtVntibGalYsZkQymTlahnobdbelG\nJAHfx0U6RSd6RDpIV3tgt1A50HQCNPMSaAn4T3Y/HuzUwol88Dui1y9ZFlW8\nJkIR4CqrhwUKuKZTeckED0uEEHGhWriazLUuZ3/yPYGkGJr81GvMJzUPi/C4\nyUZy\r\n=zNO2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGKPaCiK8/MUtgl8mZPyB1QK0eWV5L1S9WWnST6HxZcnAiEAn8TveaSm/ll1bCg79Pz4pbxNfQ1Y22N7wQFzgugByHk="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.8.1-rc.5_1591391008388_0.8553982137481697"},"_hasShrinkwrap":false},"1.8.1":{"name":"twitch2ma","version":"1.8.1","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","validateConfig":"npm run validateConfigSchema && ajv validate -s resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s resources/**.schema.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"37919ae0053e100915033874fa42b8c36c75aa81","_id":"twitch2ma@1.8.1","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-o8T7/D6Lm+V3uUE0WzurFPjQkQFLTVArF7Mww+bKxGx0UEaYFgIPdjTkyqy0nh//wiaSHJaDQ62pqOet+le/qw==","shasum":"625af29f43de1c865062a4542af3dd69586d5221","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.8.1.tgz","fileCount":34,"unpackedSize":99115,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2rXFCRA9TVsSAnZWagAA6Y4P/0Kxiiu8Vo48R/Rj8Cwb\nNjSjnv0lfKtdoKI0IxZt1m/uGQNqJXb9RiFIsen4RN0gWC36VvOMMTUDhpyB\nCUF+cC6PvsZBUay3Uo7lnO+sMzZqYkl+DATQHUe4Mxuq93/KiwqknQQjl4L0\n+OEgrEV8z5IEU2/CoMR8EOy8rIV2bktZLXpENt/w72SLyIuNSbxiez6vbSiT\nSJVWY7ozK4cBoGS5BP+MiCNZIjnQuaT/MlGgVeR143bBQSXvTg0ulF5LHwYZ\nJVJepXrcF5HUbw+PbdpVZUdbk9mnO5QfeZ/SUQ2Zj50ouWJ8+6mR9ZxIaulb\nFFC0nYU+GG9WMtST6ud1xQJYRQbDRvJVNoOj/mUoXXlt70o2Lt54DgbGMmUo\nesI72/GqDjWmIhRqua4zmaJMP/71zCvkqExM13w/9IFUdnwzsch3zPoFIy86\nvttdXBT8U6rFPrR8KctBBHFYuk5wx1MgPH1i2hpm2wf2XCCqsL6v7tV1W7lJ\nTysH2wD6hLjPaMUije0gJHUDtIyPFjsoCCL4AfmtzUgHWvvJ7Vpq/E6qCCS9\ncUm3hGJMO9J4zjtSYFTIcsnNxTSEveVJZEMucbE5C6UvmhWe1aqSAmJXYGMM\neyeH2Gz1ecoSVDAgmvocL6rUUz/m3mCmWkKLcSC3HDEIzvE1H/MPtbKB98ZJ\nVwYy\r\n=MSBA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAvtSA0MMLvgIVjZHI70KcuUV82RwQ3TI6T7YIOMJDzrAiAo/hZYzm+TLoc2+T6F/WvhrDzLwT5BnKpZn8zh799WOg=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.8.1_1591391685433_0.14243215202839732"},"_hasShrinkwrap":false},"1.9.0":{"name":"twitch2ma","version":"1.9.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","validateConfig":"npm run validateConfigSchema && ajv validate -s resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s resources/**.schema.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"dc3ecace077965b17eb792db2ec9a5d50c27d380","_id":"twitch2ma@1.9.0","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-ITNU4OrpE8ovj7f3v0Qx/7xMvmJZUtngifF7rlEvzU2so8eCL0Wxvw83eBbC+/D++35SxkM9Pw7sDgokvc8ebg==","shasum":"9157ba8e53cef94c61e9ede79bb3d3eef7abc905","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.9.0.tgz","fileCount":34,"unpackedSize":99453,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2sMqCRA9TVsSAnZWagAALSMP/R8k2arQarcZAoZHViB+\n75E4v6VQh2e+kAreRDtmYJAEc2L+ICyrWoyky2+pzE6AWlmLlDXf2ja4GZ9A\nisUZh0Ot8kzsNC99jtvrnrX6Yjk5FdvxYnjX5iywFmZzWKPbIhRp2zC5Zbzg\nB7lNQxMKoC+6qCrGlpE4tzkXPQiJKQr71TI+Uty+UlybeuJadPZ28CowabHi\nbolWR6VgmFZmcWWnHihvuf19DooUZ/JQOZ4rptKsEHKFPixaJFOI2ZdFGPpq\n2MeXC0Nd3R4k/n4wRddOhp+WUCcRnJlO+5kaRpxHPH9ExiT3tqfcGk+pWOND\nAM1POgnIPNN/p0Vs6/NiZycEE6yaeAyvNGxpWSydS4dgr1wkSF1orv6sbavv\noMfk0NbzKaP/TvIYUY++9MJaGpWmkB8xDdHF0JULsbU3woqb/1sUWL5Kd/0f\nbhZVINoXU1dXXjcsid/k/o+EF1hpcb48VGqDK2BU5k9p9VP4SpHzqlfIYofO\n0gKL7IjrWx8azEisQurjTO5erQKngdA61n+1Vw7HGZAkoqgtVvYzp1jvegvj\n/D/g2TTptpQHKcpb8g/p1ci3zPOnYRgx0fuIqZIx81F2a5BuQSdwE1HJ5ZEe\nakoeDQbWZmpFGLEe+Wx5ZORTVJXQ5JTworNTKnIxNMzguwG3fRP4FSAawLrh\nXUU0\r\n=5lTA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBhgo2HU2MHvzLaO14YRYowvKVcLi4SoxQQPCX3CXLByAiEA/i8ScwHnv0I7o8lt6/ME3Hze2fFv8x+dstaXVZnYS3I="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.9.0_1591395113758_0.28707824952894345"},"_hasShrinkwrap":false},"1.10.0":{"name":"twitch2ma","version":"1.10.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"0b8dd40cbca841f0cd941642ecc5019dd6398a54","_id":"twitch2ma@1.10.0","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-xmfdQjLXyT0M4S1mE6gPS2GzMcIUuTnoqp5LuNzOqyIaGMZURE811hLtRHv26U/GuZhzb6k3elYBkHHqczVVxQ==","shasum":"167d5eeff7101e3d044af74f46fdf522eeea6a38","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.10.0.tgz","fileCount":37,"unpackedSize":118748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3CuJCRA9TVsSAnZWagAAZiAP/ithOxRRKueQqXD3zhR4\nNkyVxSmczU4h4Ag72Zrr8a3rnshprPxVxiXx4KvxNZgwe1JaifbJ5HzYE8Gx\naZv9LW+OI93QivSd/GYglVFPqK43GAyUQYxe7mApFspCDUE3Qe3AFBR0y53U\nQl5cR/QnSD6QxXj1+Dumgv5cdh8dkWS2QUdIacB3R6T5ext/1JYxrW9olN8W\nH4q4mdYtQK/43mWMJDAiGddUaAq3vUC1DZXocESGJuK6cAUiL5nxul+5azez\nB4drHdu2Yxj7tozT34oGdHIeOXAxvQNU3BBni6QIovIPV2CcPzkLf/FTtmn7\nengnTt5SBSy9OVgjgnjy8gZ2jxnGgrKNYb+WZSRA+te/Ofr4CLBDa5jYkghw\nV75GNgVR+3JP02rCPiSK79gB0FgzVtCCJxIKPeA596FtkdikYaJf/DQHioam\nUwKvEgjUMV0RNtQij4O51joATO8SU3CfWSSMAqMXkcsKuyDr42LL6NZXf3oe\nOr3EQYMphypVEn/4TwowFrKhWNPl0i7C7z9bJIyFOscZtjtqWlm6MYXo9ZDB\nHMU7AEE3bSt0Le7snQ7PuyRie6fb5mHTYXHdGkcHJOxU6N0N9WqeHwZlPwBp\n/FSYxhpGXQvva/M5uwvfJOU0pDswdgvH32lAGAvpo8CENLx3wYHy3k8cyALl\ngU2/\r\n=tAfx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFgFmHmo9mZ9JWgxTRaUnnIrUYfDH6m4If1a0w4CnJO5AiAME5VjrdUtPI+rod4ZfTw0zEz0U0WFsydWHNGm+A2haw=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.10.0_1591487368855_0.9182084886926003"},"_hasShrinkwrap":false},"1.11.0-rc.1":{"name":"twitch2ma","version":"1.11.0-rc.1","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"2b38598c34053b53a81bfbab5169b412bc102626","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.11.0-rc.1","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-OaRyiRJV9LGDeuV6Hrnd6Pf+Iz73oMYxnEMHmMwG5ZU16ee0fBRTF0QvlGS2bL6Oi10j4/DrksJfE5IZamxyDA==","shasum":"d26114f6594a3a78d2607ea3a4918399bc72032e","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.11.0-rc.1.tgz","fileCount":63,"unpackedSize":155051,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3UVyCRA9TVsSAnZWagAAysYP/2ZGUPqfvVMEjFVutm2E\nr9IvxW6sGHzQ/QjEfxPlBKlFgezMnyDSg+4TiCiDDpsq9pRBAGkKKmA1dhSr\nc9HiSeQ7Q4VG0oY7adNOXaKalBzNPhj39PajISVYPsP4ma+N3iciDv6ruD49\nK1Ibj8WuaOloqdsDQhs82+jm0rfc2xwdu+bhO27BES/zrV8n4pOnzqZKb+LE\n8Ac/X7/GjUIovW1Ku341kASh1Kejj6UKi0RQ1gF1/4RnTC3FBLUqgj0Ovfwu\nRbDwzMsQBZBvYitGv62z4JMPIKvK4FMx3JVVQd3tXFEeRTzmkMW7x8HAeB4v\nl1bSQumw71/6yImn7fJd0uVqasLsHs4m4DTiHxK8b2774MzUHInVcMktCF06\nQ/dt+91DLH7XUtfFUI8IDWwnxHv1sjt5mT8CIUid8cM7vHpX9V65InYo7S3p\nh8zAmm/Q5KawsnNLHL8ji5iqACiSsqJULNWh+M9Tjf9LxUkvW/X5kT8t4MKs\nUu0ku7bsuVPWYvph8oVmriYxeeS4uTHkFbZB1SfW4StN4L1poNUarmjj3BfX\nkI5dIek8ly/Azc355SLYxRMvaMz/BxjpV/oxY/CMK8FufmLTi3rUiX0drMgS\n+Dd73v5Nx+Z0cCSfjLqCxtGy7TpHKGsv3Y5U1xdXmSBk6ur9zyqkTBuDZ5Iw\n+qf7\r\n=WDhG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjy30zS7bEQ4yHsNw6HTFdfJiGOcXnJGNSQYWoG/LvqQIhAP4whA45CN4dKqBAVrBwhqrg07jUAC4KRl3XE9EJWilQ"}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.11.0-rc.1_1591559538050_0.17591544362059675"},"_hasShrinkwrap":false},"1.11.0":{"name":"twitch2ma","version":"1.11.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"7c2dd452f7f607c5e417ee31778484a506c6aa04","_id":"twitch2ma@1.11.0","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-XkTnngAvdNZK0IvIuPDtWtK0PSSHt3JNcYICO228gQrELPydDpi7Ou7Yl9n/cMoWk7qRNl41Hih/ErGNO9u1lg==","shasum":"0d1d6a5f8d1004e98b81c046090beb1e078a6728","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.11.0.tgz","fileCount":63,"unpackedSize":155056,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe3Um/CRA9TVsSAnZWagAAYmIQAJFl4H3KaWTVuUNL0Gdo\ndNBgvIB1n8C5KgEFlQ/sThi8KwjK1wniLxMYMcDzGpL/QaHVYzsBiGyAApAl\nUEiOYtoVm0x8JhbxPARg7QcsEPrx3ryQbBLUELbSWQ7yp2jMrDVdpkR8Ha/9\nztX0AXe4ncLFikoJIFhLKvDsAIqWeieHM27bz6Dwk+gVkhxDLMyX4ghcKECe\nSNH6g1catdJv3YmgJo4WHoSBuRraGQ9yFLIyfomqloOrtT9Pbh6xoeXe5bL5\nS4btZxORH3g+asp3svYIafLK4jVKl7NTi+woYnYumAqdkV06cLV6JKETs/o3\nG79FrYhbo2C8in1Qc3+elzoqbAu7BAWJtkvJ/hUGZgTpf5SbYebOP99RNDSS\ngIFwSH65WG9jfEjPlgP7KJmyd/L56k2lHhgSeqIbz0AXGIibx0PV7pgtsN37\nAMXtn7KBq8VUHCmXf6c7Uhg8sGVhae7qdAqxT4Z0TqwXxqXJPKCpA+uN6IVW\n6Zr9LYBU1XAXfnyLQaCoeUB/bL6sjsTWwAR6vYUOjNbfb4vaZj5iXTBawOXq\nBLuW7tD9EpEk3ez0CCntXvVVeHK5E4kKTA9KwArEgGLlZLSOupTgAXg/TV7z\nbBdlzlIWmFWqtaRhNm9MtxOEeCms3Oidj69z+uxK7FOTCX8JhsnUg6QSzqIl\nwjlA\r\n=2fiu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF7Dx8+TONufmXFec4Jn0kepaYv4FOtm1/T5pT2X3hUOAiEA22xnwWQp4o0P48LusiSM8QKMd9lq1mZqDgYqs5sokMI="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.11.0_1591560639216_0.9799627037193721"},"_hasShrinkwrap":false},"1.12.0":{"name":"twitch2ma","version":"1.12.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"2ee8af36e31626264784365f62af30a130f65654","_id":"twitch2ma@1.12.0","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-rXeTSt740ryhAEA+asuwk+CmSWwySzy5EDgdPob/nXuwtzr5Ha0s1lW2uTp91lkrZeRTqnuHlNxzDvTDJ2nYTg==","shasum":"ec0291b3d558a47531d13cafb9998d58119b7532","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.12.0.tgz","fileCount":63,"unpackedSize":156003,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe32YGCRA9TVsSAnZWagAALZsP/AqagObG1SWVp23tZi/+\nl4v29NFTO0ldC9amA3Cj1OFlUGEJ7pzuH23LOeYzQeTr8h/Rdy6/iU4e3cS4\nSwKRDhE3KvslIZrSm4r5BgJKZvWdnfouC8u6+y/fylEPViRMpNbkn9h7OLg3\nKvOoq4KD7v14tgkTh4Ql2NpG6JeXTV+f93xueWxM+S7PlIg6fNGeYGerefTl\nGMaPTJImvQUc1qOKf/eN8Z4ObU5XJsxIoajbjaf5xOwIx+dOLQdFwRMTWURN\nXikcuBm6Dp2KtYXVaWgeFJpsolvwk6ohzN1h+mEpbEEKWNjKRlZ7eXh+Ko6b\n4gcKdcr1vwWcOmrStQ8sFH5u8L6d7jh//1AAZo4lIJ0qerRUXZZpjzR2VqNP\n3oTHBxCOIxdY9o58lVJmz5llpEWNHyC6Wt2L3p5cICl0qOKIDHZg/CTkni2Q\nyekZkJ9nQQgQdgaZ+0fta0cVMXNWxHOVTLk5IJM/bfF+p2r89b80LslKR79n\nCITnjEI9Z7Nlqi4rgqgoVdc0Te3A2QLH7O91fmtTD0QxCMZuJr6n8zR8Y3SC\no5G/9a6am0AeuXMhGOxWtAl4ty55ENNnjy+j9xYlz3Wkn/UnR4Oble/bYm28\nY/RJcay32inlUXEkR6Rl/sRp2SXwrB+TQdeV9f6nzLwdsSeeEuqTC3p+0gIU\niEN9\r\n=9PPx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFU5o7BDmSL8xfYjXI8Glu+o1haDvfS9uSzMCyrZ709bAiEAoVb2Z/pHEq32H2eyH7BYZZ9lKIbMHOHXYJQIuMlPKJY="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.12.0_1591698949864_0.9696608205330006"},"_hasShrinkwrap":false},"1.13.0-rc.1":{"name":"twitch2ma","version":"1.13.0-rc.1","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^0.7.3","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"4615c01263dceca93e12f2c22f736449eeeeb298","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.13.0-rc.1","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-jApnu7CZvotIwS1nmZdzaochzivwr+cD7ypbZm63n/NKolkG+pvT2Bd5KmeIqE7Yq897R3XG9tCDrfMGClm8Eg==","shasum":"9cf65ef8f8f79983a83102092ba8412fd96994ab","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0-rc.1.tgz","fileCount":68,"unpackedSize":177617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4TYLCRA9TVsSAnZWagAAiRIP/1KOFQcgNALDM1LT3hK9\nP1ECf+DJo6ZPGKp5RY1bvOv7NN3IjsJH418WeSmPvfoV2QpAPtazHsh3AFTO\nRvtXMyjJ4QWODJH6i5BvMAVMIMV4PPX+ZsvsViqp/jL02/YaJHHN64sFW0PT\njuTbhpenimbjqgfqYp1FqgFHks3T+ppv11adiF8XLorPhc8tsdQLEr2oFiNc\nJ2yznIJqdCq5zs+ljx1RhgpGMfq8uBfiAWBZupteyWMEVUCsOP/iYgJLsHIl\nX1b+uD+1XzsmT7Q6aywnyjKiAYlXZ4xwQxpivXvea5doPOgwaPK1sLjnAJ7d\n0reRLqriiYOT1KvfD5vhMUMIAX81CZdoRbMAGLbHOOTTgshMxKgF/ZkXCRxo\ny2+/hoIO1XCFRhw5KjFccANdApReRMD/c2RkkGS7re7POa6IazXyWK335oKP\ny2bNoT20/yT/l8E7knq/pvQdCDi1F089vJNvRKASh0btVFug/PtGU0eFzVyK\nIVSSmbTuXATBQSR1tV6zIIfCGe9tzf2zh+ze3mIfRLayf9Iq3U0e3U9nLDZ7\ni0Bpo0HrRb/34MIqCsjuqi0FDc4uuwJp8RJRyebEv58IPwv8qzf3HKOz6jpS\nGadP/e3FSya2YwoKYC1cINM1QhxRWgG5oDgNa65of9vfDKbI5K45EOSz4eU5\nJL+O\r\n=wopf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBEFKh06S70LqRB54NGDMmSIH29OaDB3sSxbmO9UER3rAiEA3A+PJbVkdVvbErxgccABDnqO/yv84Iqa2sB08Bk9GRk="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0-rc.1_1591817738888_0.2336790334026222"},"_hasShrinkwrap":false},"1.13.0-rc.2":{"name":"twitch2ma","version":"1.13.0-rc.2","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^0.7.3","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"237ebb85c740b06b3abb7bd70d0f655eb600a312","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.13.0-rc.2","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-8BMkmdnlGhGVVknlWgGrHH70FMZzZ4KWABYP8XoAyhxBLISE4p/pLTOTqDxqh31M4X4KCPYS2SsUW3VRua1pGw==","shasum":"f97786993718acda6de6ffd1747dc9c5fb5c107e","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0-rc.2.tgz","fileCount":69,"unpackedSize":178441,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe4qlnCRA9TVsSAnZWagAAFKgQAJ8p6TSPbZiE5LNMSRnf\nEn1N/SwqbVJ/xs8xxcZEoGeu8kfyHOfC3mvDNS01JJ6MIEXRwrIY45XNP93p\nTylEFZ+vUxZ4TMNtnlqYFEbrzTIl6NNiRN9IOMIr5buJLC8Gsar3tu7Qfe49\nQWoRnM9sDwaUB6xWqToD8NJ03QNuNzAld5Nv3OCPkNuCCfNmrghL3m0jWfiy\nwAhN7NvWUmjbmHmrzqTjsy0ndeMyDA3+5z2Hub/bjlV5xCmxax9RDSQiy5cZ\nYI4UQfXvRUlI/B/s0G25b0joNJeUStO6nmDJhpFSvPgOBoHCP75sjzer36nU\ntvIl223oZcsvc8z05awtwRcq1CoqLp6pCbezwdgxX8S40ecCBDONv4i1z+yQ\nEzlNwhor3YPZ2Y+BoIbbm/7jrN/xVstoCIjJPKFm+FR2xvDkMbMAmJkyT6uF\nEu2JvAynu4Al1Y5tIXkosoHerNO6byFkVPPoc0Hd8r9EjTdOvceTiBDu1B0l\nayBCXZ8zcWm+sGt74UVjgqGEJoVw0PSLf2tl2yGj8KUfK9OnI+qeXxuyu46h\nnClwLEhoSEuskLOHtxSe3pmZb+qCXLFY4lTsRQ/tENHFTSH7XD9b0hrKK1Gq\nlNccJ2+7VBFJ8xmcRk8orjkBhFKAjhHb5dQt+YX9Ynbgm/0ymZ1OQ7EZ+FZK\nn19+\r\n=F0ob\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHeGzHBgrFL5SMaNB/7MQM/yH2EQV745GwHJea9IET0gAiAxyhlN5+9w46YzvTdiQ8/uid3leu095Koc/BUCFTPJTA=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0-rc.2_1591912806603_0.8322074503829677"},"_hasShrinkwrap":false},"1.13.0-rc.3":{"name":"twitch2ma","version":"1.13.0-rc.3","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^0.7.3","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"f248eb9d8eb0684d8d3747735be359c09ce30f94","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.13.0-rc.3","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Qcd+f54Gag1+Q3jxnJMtSNPPKovOKw7PJYIsESmBiw4S3EP1AFxk4HnJ9wv851Cx9xmTRniuC52s+NbY0PJ5Sg==","shasum":"2a9c31ff91c183015ea1f4a20f457947fd12b332","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0-rc.3.tgz","fileCount":69,"unpackedSize":184604,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe44roCRA9TVsSAnZWagAAmsEQAJh59FhL3E0MbrjCFzTl\nOT4VDqUYxhOXles2Rv5VR95LJMTk4TMJtoATWFMPUmq633GDfA53RHwy9h7H\nS80g+4IQA2F5P3dWyn0QnmrmayAqcp9OXd/YK0EOoFkXS7EZ9I93S5JCiJsB\nHklSj5IH+2N/RDsKaElbL6IT4sF9s+HkuXJlt92g9Ce3jjv38sjYJdXMt6ul\nqVrxAS0bIJdpGDxov3Jws+jnn9kO5wFJes09p6L2KNuDXECFqFIhhgnv+dw+\nUR9UQmOZg7lGfR7QMV1+rLdqa07AajJK/fEKuSDJFrG5VmGAp0GTvJVcOsT9\nZA0kM9eGD8Qo8g4l1ZTlRu3PXAWjUXA6GdmZ7ukyPjhJIkEkmchHhAIkuOpx\nBfrarheBAkI0DYw/9wxKJ5uSQIxGuT1nMq+mTkDvUk95ryZBnblZdzZZyLhC\n5WyLQVUv18aOKRupB6m1SQxC4WciHY0Lwh9OTQHMY1SukVXlBp/P7ZLr/03p\n5PITp1obXw4L04kLpvzcu4P0TdczpNk+B8gs4vw8+QTShGLnLLjjvyoWwcem\nrZtZHFp+g/mef3JfTBxeC2mxZpJU5BHnOvwXEFZYQDFSEdq+bZCiRdz4yJJI\n3/Zj4Fa8Uca8QyJUTnr+SkWdw4svzuec2As9YE6sFl0jpDzgJmDATlr/Pvfd\n/JZG\r\n=FT8C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9/0jToI0qY7hAwLAE8p+Wk9vz4DXqrhRW8bNgLlV2GQIgIQArJ8AFhfeLe5o7Z4SxTH8MV1y1HomKyqy+HTpxJPM="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0-rc.3_1591970536269_0.3587378382260433"},"_hasShrinkwrap":false},"1.13.0-rc.4":{"name":"twitch2ma","version":"1.13.0-rc.4","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^0.7.3","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"808b5afedee64a0825074eeddf3271694015557c","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.13.0-rc.4","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-LMia3f2MryLeABmQAdl0O7RoEXEjRSaOnk+pk5FYbkGvUecF3ORVLJR4pURjOPKeDRL163enKMeThhKtv7xYHA==","shasum":"7631c7bf165bbf0967a3c03fa21a1db22e1bc499","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0-rc.4.tgz","fileCount":69,"unpackedSize":185901,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe445HCRA9TVsSAnZWagAA1JsP/jUSvaXqJT6ybG381IFt\nlugxJi+OM4iwKlxrS6z9kx0NkusuGUMZeB58TsDL905aK+pHxBmd0k0Bpi74\nAmhx+rCGcq5dhteQSu2PDUtz85hd+122q6bGj4jeuM6fb7zFbs0t9PSpdPHk\nlAxe3ieIdG55hF79VDroIKnHETzb2YYARVxfDGosuNWZYaA4DEdML3YJctQI\n94qLsZw1bHqW4Z9b/AUy/MMOn2kVsOf5YYNYy0kcZwT96vg6dXXNf9Cq07yg\n7j6WOW/nHLn+tCojXZYIwu71E04qAQSy7a/7zcQDLF7gi7469RLgdCYCxTXD\nvPLKxTu+mEZJJ9ko387VQbnnEBNARG7g6FkKAxIOZFgxT5DcneaM1GZ+Gvdv\nNhjWjOMBoLU10YeYtKTezzuBKrR4tdxJErkR9mc8F98rXHWGyzfXuZcslVxX\nDoLZX9r74Odk6rUrpb1Ad63vETeSYf32k/BFi1LaphZyC1zzjyuoaZKGCHd8\ngn9ijiWAhM3OPHmTtCb0/Onu2nLtsBqVrngxUE8CqgGy1mEWavR1mVM7Agb0\nwFMukbbIdMv9QPZQ5YwBTjzeFcdIc60ue/tdd2MXXNeEa6QcCELkaS2Hx4M1\nhThDPRVa08FUh/2eREBG/G30Z88ERXrkTl/bn0mNArcwk83MpEM95t595FQN\nXKA8\r\n=niCZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNDOaVAqelQ6//Cqbf3T/z86Hz7lz7i3Qvg/VaLBbsvgIhAJNLVKuBL/MitTN2aweDzcKmy6ZdMKKY1UEhRAQ0SG/G"}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0-rc.4_1591971399386_0.9388453512959749"},"_hasShrinkwrap":false},"1.13.0-rc.6":{"name":"twitch2ma","version":"1.13.0-rc.6","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json && echo \"NODE_ENV=production\" > .env"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^0.7.3","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"2592bea08b9a422724a19a1817cab9579fb9200e","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.13.0-rc.6","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-/tUEE7H3jtzCLwm/qdymeS6xGWWOR59pkMktm7GmHe/xpphfw3ySSAhwPh4jbRDI5c9G2JDY8yj928+6xRp+yg==","shasum":"3b3495b718f50122fba55fdd8bbda2c5573ecc27","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0-rc.6.tgz","fileCount":75,"unpackedSize":193677,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe5PFQCRA9TVsSAnZWagAAt4YP/i5lFf1GubYdoQYUHeX9\nvKtzoKUaTwl/TEM3RtEXKSfNnTL+8TwuOaVl+QuDBghkUdAXeIFufUx4dPTD\nW3g5btKh+7Uc2g1Mga6yDTfAhg33EYpWINMqWl08Ghk6JMXarR0J1/P6+oXt\nKt7IXf8qWByQCNwRIdWjSEl1nSyD9bJVbHakI6LCBZzvbLixsqK4ZcOU8yHU\n7/QcDvBnXYLBkk9RzgqA9pQLWkBT9Opfy1CoO3Xe6Oom5JWB5oDPH56oQr/K\n22ZPyhQ7D9iYgdbHlPThrzgDXl0eFonjeJ5dA7Tyu5J6C0q1CSb0ed/qW17t\nug03cEb6R+RyLjS27ZDdVw+h9qAeAzg3gPWKY3D8+q27iNJaLsSo/hXWIiW7\nsXmRmAyxatLOebGXAsduMo1SiULCWBrXtxDs59I1hOP1VnVmEX77aX+hrNCO\nzbmX7c5Wfsy6GCXmFzQ4MjPiC7ssVvuDiWnSjbvwiEkAtNiDqEf+rVofp0cB\nzNteGkgyEkOFXbk/YZ9qoqPuKKBqfqNFSdH73w153vh0xNjghNynX5MF/7WL\nH22/K9AHqj8tSFP2IIYharVIGX44mjWtLFpg34j1wkG8KYFY+Dbh+MCASODI\nNgl0si8hlwlEefoNa5pOIc7PS/T7BKMUzOlty3FdN1BNa0IUPSylXVv8BfHa\nHqae\r\n=KLUg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDDGDbCAFHBXjnZW3u2LiPWTjb7uGHKOXpPOwpIFnnxMAiBEEYZ3WMJyuzQ9YIzU2XseLa6XQVnLuUygi4Dmu33c0Q=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0-rc.6_1592062288173_0.6944912668247352"},"_hasShrinkwrap":false},"1.13.0-rc.7":{"name":"twitch2ma","version":"1.13.0-rc.7","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json && echo \"NODE_ENV=production\" > .env"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^0.7.3","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","@types/bluebird-global":"^3.5.12","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"be2d3f432a1f005365740a3a7aa32f462a5862d4","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\nIf your network is not able to handle multicast, please use unicast.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Known issues\n\n### `Error: addMembership EADDRNOTAVAIL`\n\nThe console output looks something like this:\n\n```\nError: addMembership EADDRNOTAVAIL\n    at Socket.addMembership (dgram.js:817:11)\n    at Socket.<anonymous> (/usr/local/lib/node_modules/twitch2ma/node_modules/sacn/dist/index.js:41:29)\n    at Socket.onListening (dgram.js:224:10)\n    at Socket.emit (events.js:315:20)\n    at startListening (dgram.js:149:10)\n    at dgram.js:344:7\n    at processTicksAndRejections (internal/process/task_queues.js:85:21)\n```\n\nThis happens when you set up an interface using the `sacn.interface` config option that does not exist on your machine.\nSimply use an existing one or omit the option altogether.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.13.0-rc.7","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-wuMMU4eO+xasTLTQEjhPK9G2ZmRK8dOXL2Pv155pKUM9mqAge/qmcPVLMiobw90b6YOh7TORybDPc8kPCk8yqw==","shasum":"2f2b43d81403ad4ea474b1036eb384d80c75b839","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0-rc.7.tgz","fileCount":75,"unpackedSize":197006,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe5X3iCRA9TVsSAnZWagAAc6IQAIhtgU9vGlt9TjylMxER\nKbkvXH5HIuuN62S4F1m8FEY/QF5tByV8yoAv5n9FSuJzfGI0ZHJgW4bGwdR0\nAanhqBUg4zjw2eqRK+XS4x9mXtv+9C8gsxp4aJ3ddeU6NsUk6JPwFV/tiS1o\nChDjecTyLUYUxAK00pb1e7HwoXjCnBJazquQ2WFipEi5WIlZCffuBZXSSwty\n+OMtTKqi+Z0YLyrGecWC2+TGtU25J+Vufg8pWy4Q70GjnsTaR4ZSC1M0RyzW\nQkYXnUO3gEjPxB2ZNQutf45Lz+9B5iokeTSWNqELIJrK2EF53Vm9+U86Lnzj\nt+vzsCBJCzWB6D4yl9ovwZaoTgkcztADpwWu7u6ROLkyJA3FHUtil9Y+clwf\nNhU8O8zmR5d01gGtzriVfpBbnensxaKKSKObFiCsvQ8Qvx6txC3gB1ud2j2n\nWz9IMVWpSWoZatOYFSnw+KCmATaKLbIvTMy4CmRPGePebQIvXqF4XbgrKASz\nreD8KxV3Zi9XJS7+fI4C3jZq8DkoACA+a5gdl3aEMg3JR/7XMhbx0JbrzXlR\nQhueaV4N6obYJrc31IVTd0v7RsHVBHqfMGvyJY/Hn/gvgehtetJxWKADWOO+\nbILI+m6QPCDDk2mwYrk+ywpZA3Gak5LOJJ557JRzchHPafDtLEsToczCrh13\n7t7z\r\n=EcRd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICN6IbMTTTSuwRe2wR4wLOe6kdZoS1pb0voY+M/P6lBdAiBICNUPEuxMnG9ozUZE6MYhIo10te6ouMrrfxXDFpZs8A=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0-rc.7_1592098273971_0.7450933167651392"},"_hasShrinkwrap":false},"1.13.0-rc.8":{"name":"twitch2ma","version":"1.13.0-rc.8","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json && echo \"NODE_ENV=production\" > .env"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^2.3.1","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","@types/bluebird-global":"^3.5.12","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"3ec78e9df2b54c74398af5b2449e708a7ad5fbb6","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Known issues\n\n### `Error: addMembership EADDRNOTAVAIL`\n\nThe console output looks something like this:\n\n```\nError: addMembership EADDRNOTAVAIL\n    at Socket.addMembership (dgram.js:817:11)\n    at Socket.<anonymous> (/usr/local/lib/node_modules/twitch2ma/node_modules/sacn/dist/index.js:41:29)\n    at Socket.onListening (dgram.js:224:10)\n    at Socket.emit (events.js:315:20)\n    at startListening (dgram.js:149:10)\n    at dgram.js:344:7\n    at processTicksAndRejections (internal/process/task_queues.js:85:21)\n```\n\nThis happens when you set up an interface using the `sacn.interface` config option that does not exist on your machine.\nSimply use an existing one or omit the option altogether.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.13.0-rc.8","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-WHlj+lyF2kA/bJZxS0FTgGm8aFgwPeb+Bbd7QVJQh5D7CcrgsVOvhvbDD9Nmqa+Ul1n1GYACrvIiJb50TwbxPw==","shasum":"e6f4e720c1640ad0f54388129067a20e27e7e692","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0-rc.8.tgz","fileCount":80,"unpackedSize":223758,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe5lYoCRA9TVsSAnZWagAArIUP/i9LblWD2VYWI1AyWBfc\n5qObMd7salkxZoSsitJzb8nY0+xDhx3hVscrvwyCacP4wdSr8clJH18NYoJJ\n+cIi3FsiIHKeuSFD5Rn8TNe349qqD8ydd5C/l0imOe5AOXPkPqLpCm9+7Bgh\nXYRIS6+XTjHt95m6CeEcccXpJORo6w8VIGV+F5IxxWaakRHt7sFsGmjhvrFg\nASDBjxJva2Wh2OeJc7j5swoQp/ruz8tOQP/gbqNzMdp8H43EIIW9oTvYBCG/\nDNN5xGK7DKk8KyEHShbtmL4wdnIQKFKfMjW9pcqKtzdFTnqmuHrHsLoiiWF0\no5YrVAZB3yDrfqU725nHlTd4v6kGZigxiRb3k+0bGMhqu/EOetFn8LjPEThh\nfzmgS2oQEDTETVkk8f2Q6JBB3qmEDcF3u4ioM59brN1e7tPnRYBqu8tuVrbp\n9ksGO61NxeiGISzpEL6/3g39P1u+I11SW2oMIrIyCS4M8TkO4VwCbNdi9hcC\n6CEEfT3Box5ax9HIxZTdDlOtZPS8cLJx8W+PNtvk9sB/rVT1A7Byk47oywYg\n/P6cSNK0E5sp1FcQ0HyUBukogxJ3HgZCxTEUS4tjLL6palhbis1+juoNDfAh\noypwED6WRVCVtNKnCtLEfxs4Q0IsuFOn3SMmScAbWt767jDSi9DoHd7qDsda\nsico\r\n=yIlz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDydu1CxACTRMfGTUXt7qr5inupLj+UwbyQyVbQL3thygIgOc44bWxrgJBEcHD+91QcJ7Ce6xYZ9VDA+Jrz4H6MUc0="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0-rc.8_1592153640016_0.946727983216481"},"_hasShrinkwrap":false},"1.13.0-rc.9":{"name":"twitch2ma","version":"1.13.0-rc.9","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json && echo \"NODE_ENV=production\" > .env"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^2.3.1","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","@types/bluebird-global":"^3.5.12","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"31bc55ae3afbe98e795623ec589cc4c7be1ba358","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Known issues\n\n### `Error: addMembership EADDRNOTAVAIL`\n\nThe console output looks something like this:\n\n```\nError: addMembership EADDRNOTAVAIL\n    at Socket.addMembership (dgram.js:817:11)\n    at Socket.<anonymous> (/usr/local/lib/node_modules/twitch2ma/node_modules/sacn/dist/index.js:41:29)\n    at Socket.onListening (dgram.js:224:10)\n    at Socket.emit (events.js:315:20)\n    at startListening (dgram.js:149:10)\n    at dgram.js:344:7\n    at processTicksAndRejections (internal/process/task_queues.js:85:21)\n```\n\nThis happens when you set up an interface using the `sacn.interface` config option that does not exist on your machine.\nSimply use an existing one or omit the option altogether.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.13.0-rc.9","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-MPTabJnnI/AN6+X9gVXcPLN6m+FkTKrqMalriihfGOzN8lsgX2je2ty5/7QQfder1PtW/WdhBhdIYJC/+uhKIQ==","shasum":"2a60d2c8b4d1cf65477d42f8c900c99a0b18aedc","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0-rc.9.tgz","fileCount":80,"unpackedSize":223527,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe5mhPCRA9TVsSAnZWagAAZIQP/A2OGz4spt8FFicbyQUC\n3+2o1JbBrypHz6xS05W4CIn7iozHiY4OSa6pMWTHPaG43wFlI4KZM7C/4xKu\nqxOauok4fLM7yfSApzdH7W1xbudkVIfiEDhMR4lSyJO1IkLy0nqA7hUpbxEU\njSS27hVqyrQ8aNL+FX2gEh8JmYzp386A4nxlNAN8oX+5wtNt+IyqiUWGJuve\nZCMxs9dwOISLxlb6nzDIDdfdpGhKGZzsbkUXm6G//Z2gZ+ARVi//0frJ/lJt\n3QrNwHssT2Phc97OS0tdjDbyHUAWNN7Bsw9xWCIZpLuG6E0mqT76F3ahmBBl\nHGxcBPirHYbEQBA6MytIO7n+FoLYg/gl3ojQL+vJvgxXn+Mf7aRACZ36xxFY\ncqyLWcml0cLXuXJpdRypkmwnQXvhPoWIn5p/b99+EpsUuKCOOu8+BlVXT3Jy\nWFjDbYfd7rI2eOnUZDAfMlegeBuKcDQmUneT8IusRJ3y/nXwroGJCoohpFQM\nTjVAo5LnVsIxHoBMdtjAqQBu6npH9ki7E5rv2un0IR4103omNsIIk3+dYpbg\nJRGCim78mUIBcx+/GLZ7vJpPT4O/Pzq+jGBT6/MfBb49UAvAF6g/u9hmPeio\nUeVARs+g1zIHWchm12t6JrrEoqmlN63FlY4quqP1ahLhYKLxbYJtIdGhjQaA\njM2s\r\n=sXoG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF81d5N0sUsM8CxwnlqZ16NLRltpQN/EDgsKvsSSVuokAiEA3ahCA5KMJ8Su8/y7+geRzP+msGZg0RkTjsrTIA5mit0="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0-rc.9_1592158286743_0.32000208145176146"},"_hasShrinkwrap":false},"1.13.0-rc.10":{"name":"twitch2ma","version":"1.13.0-rc.10","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json && echo \"NODE_ENV=production\" > .env"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^2.3.1","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","@types/bluebird-global":"^3.5.12","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"d350d055fe672791633bb423a1c09889ad9de28d","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Known issues\n\n### `Error: addMembership EADDRNOTAVAIL`\n\nThe console output looks something like this:\n\n```\nError: addMembership EADDRNOTAVAIL\n    at Socket.addMembership (dgram.js:817:11)\n    at Socket.<anonymous> (/usr/local/lib/node_modules/twitch2ma/node_modules/sacn/dist/index.js:41:29)\n    at Socket.onListening (dgram.js:224:10)\n    at Socket.emit (events.js:315:20)\n    at startListening (dgram.js:149:10)\n    at dgram.js:344:7\n    at processTicksAndRejections (internal/process/task_queues.js:85:21)\n```\n\nThis happens when you set up an interface using the `sacn.interface` config option that does not exist on your machine.\nSimply use an existing one or omit the option altogether.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.13.0-rc.10","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-ZMvHF8/rCvy5/mudxtcZou5575XcdoJZvbJjOeGHvegsikIRnuBFTRjTjmUg+F76ptEDwM2N4tAQ8S4C56qf1w==","shasum":"1e680c3c7ffdea8d4a915f47424c3770932d53ac","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0-rc.10.tgz","fileCount":80,"unpackedSize":225851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe5p5ACRA9TVsSAnZWagAAZhMQAJNYLFLkX9HHnXdi4bBh\nPK6lbbQrpUyntwkwgI2D+7/p6EWl5zEGjq2NZiCqdWXFgxMU33VQyADExChF\nxUARysW8WwqIOZV2HKohQ9OJ2cjP/yyTqPs32+fQRly5zxX8cwafVrYcMyev\n2xLKLdbB1j5ijV4tRBI6WKHIF8ADPfjeGm4oovvn4V4SoVQdptWgNJ24uFAZ\naxl+S/8EG3WQAZ4bVoWOcLCq+cRLynuXvd70fPCFuvR+xlQEnREA5o1KurF2\nqDMjOMZkxy7b1bYx08/wM3aSF/DhHe6uAMffoKzRt0mpufSPvE/Sisx3+C4w\nn4vQEpQfDXk/ysXKPXXZRaDykq7LFjcsHMVyh7fHvLEqh0v1bC5G58970Wwt\n7oeXNnUrxzxgGr7JcBCGl0Bttq2sjkFzyBQiehr0a3q0JR2aqq4EUwAx3x2c\nMGY9S1zgFgqOmQB8WDRZibLyHp2BYDjSWDYwZA1F6b8/rGIfbGIaljG8oWIO\njtp8RIuQ3+i1nT+JsdJNQjV/v5o8koEsQJqRKc37qtK9+Ev8wCN52cOG5mD+\njQvLNmdOluAPIgJus9W8DgZ+1vIc2ij+N7Yh8fp+z9/g6RvXV0qPcGegzeqU\nLIsdYzIOefjFhPP9KcaveDVCb2lmrOHTgweWStx++9+sVAZIwKtBOCC+5f8S\nhMSy\r\n=F/id\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCd2FJySXSP8rZJUMaJlAqWxQuAdB0r+ovU2BnXWvD3TwIgZIEeCzGygvRo3sv2QHgFJmY8wFS2MpfXomHMFHk4iw4="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0-rc.10_1592172095923_0.1438957091623605"},"_hasShrinkwrap":false},"1.13.0-rc.11":{"name":"twitch2ma","version":"1.13.0-rc.11","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json && echo \"NODE_ENV=production\" > .env"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^2.3.1","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","@types/bluebird-global":"^3.5.12","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"b0c1306813fe1e5d56e31c7e5f837de031f91a63","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Known issues\n\n### `Error: addMembership EADDRNOTAVAIL`\n\nThe console output looks something like this:\n\n```\nError: addMembership EADDRNOTAVAIL\n    at Socket.addMembership (dgram.js:817:11)\n    at Socket.<anonymous> (/usr/local/lib/node_modules/twitch2ma/node_modules/sacn/dist/index.js:41:29)\n    at Socket.onListening (dgram.js:224:10)\n    at Socket.emit (events.js:315:20)\n    at startListening (dgram.js:149:10)\n    at dgram.js:344:7\n    at processTicksAndRejections (internal/process/task_queues.js:85:21)\n```\n\nThis happens when you set up an interface using the `sacn.interface` config option that does not exist on your machine.\nSimply use an existing one or omit the option altogether.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.13.0-rc.11","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-NPZadvj5uwwhhQJFR2oTh2giiRrAY7X9fabJOBBsGesltklEzIjBW6jK0qVwDPL7r3Bh+hyTGeO3/HxyUUl0Rw==","shasum":"7f3298dacce0aafb5ac298120e37fb96d4a1a7db","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0-rc.11.tgz","fileCount":80,"unpackedSize":226783,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe5qumCRA9TVsSAnZWagAAJw4P/0Wd60mj3J3o3v1RInDH\nnCEiEUjqV32Hz2ynRYfC9El22+uM539zuIUDoAZRvkTZPlvr8wDrvgMiUnCU\nJW1Gt7b8UQOfyYvVlyA2qVNOxOcMaWMTCHLr+X3SlMGNq2gUYti0OMt+DgHR\nFJAVUYDVFG5oPTnh8RWxWU2G3HBt/CcXHyu1RFbhj+TYI3t/78LieHqn3tyi\nT+wYsd6gqgJlKBsjne63/rzz675Ecce/ZbFI8g1+VDxUs0wqjsjhtQwQwbmN\nRbZ+tNcb3WsqESajPpZ1wgxI0MRjfKy+By3ysq45dvMrfTMQlrMeYBXP80RE\nZhmDy/PFk7noGg5GNFM3CmNFiTTKOmfflCdqf/fYf7Iy5VPbdOqz8kRGX3di\nMb+7T04fwcrcg5fX0l8IVMCWJwO9Ip8qgJJ/RRqBXVCguCsCTEwEhSzMK09Q\nX7/aHTtGTzZWOFjxsdUVslzHdsl1GkhqcDiWRQYwCMQ58VKaL8X1PllttTUe\n09Vwg600hL+fIC/cOa3mMdiAYLlLBBp9uWGTRNYoxa6M7SD3rrx+3u4OwNmI\nROwGSl3802IKBXQgShY4Ks9KeqAYTZpJqL6VNcYkgWSgJBIe8q+9F/cbvJh/\ncJ3gjT5bJMwexl7LckYQp9AkgsH3JfHNtXoNS5xc+qWK+K4aDiwq6gqrnGsP\nbEu1\r\n=xV/n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID+UBzm5CoAj9WR34DTdTIQXA39xbPqFGViZoKoLg8MqAiEAos29A790pHByJp6ovZLZcBf2eH3izvjAPBLnXbIqRV4="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0-rc.11_1592175525444_0.4540920155683599"},"_hasShrinkwrap":false},"1.13.0-rc.12":{"name":"twitch2ma","version":"1.13.0-rc.12","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json && echo \"NODE_ENV=production\" > .env"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","@types/bluebird-global":"^3.5.12","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"ae5697f3769b491c89bc905aa1db342bff872cb1","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.13.0-rc.12","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-2B3ZmdwGS30/gzb3MPxXxyq0kzSeHHkuFC5Y8jWGMSIDHL0D6ug1XMMu5qd3o+mygGH6Ng5Oz7twx56nMAMFZg==","shasum":"db527dd53b5089f19d119f33ef7c2a1f8c470655","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0-rc.12.tgz","fileCount":80,"unpackedSize":232735,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe56RWCRA9TVsSAnZWagAAD88QAJ4uhOniIN6eE/63SgLG\nMdIRThwl5rTUOEIPId3heAPXG2MHMD2FOcRM96DlmLOdmiib63Po3MzGITEy\n7f3LkdH76vYz31hZF+a8Fv3BSJjtRgm4VUVtwit9KG6YsW2hfzExMm1gk7y4\n4yqlxTbn4bH5S+WlOZ/Cb+K4LqKLXDARTPGrMNpQEozYKuCeUFYOu/bzIHgu\nkZTLxf8hgULfp/9G5I6gqI24U43+dhimD3F4czehYxIGixgP54oZu/SVZeO2\njL02MA/ztUhm7ODsxEFsRmYgXWC7oxUpo0rMiuARai9EbfW0gmCtUKSw6I3o\nrbD6gdJ4JTO4bt/6puJikAcq6V9Str5dKmMCjftJr4xsJgBne9QbNOXkmRFH\n9RajJqhbpsUgjJC1JTjFxZ58tgJHECeL+2k5IkSnp5kdY5+c5T0pnAy9pRtH\nt7A8baSnTfGTdvdQq0q5cAcyQHu/b0Cd+Owf9ZCyDCI7u1qVJl0g6mzMK0tW\nSrS7VDorw3gpwz2bn8TpqmeIeT0R1qHpWyOmfIedKMgiWhk+jzuVVbTUqmKZ\nEbQgpkSGNR6EUGg8O1VKLdsDNmAJyXZ7ZRGk6qiN6rRoZSTZ7Qj5BbAUnsJE\n+zssLp/01Jx+XW3eITtLqXKcOUEBxxINnQ3yqKdHNcewL1GZ3d2WFTw0QG1b\niCJ+\r\n=k6mt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBLhi3xlfGqJchOzwjVTfCT0pfTET1KEeCRWb9IlAQwrAiBYr/Gri6ty50IAyM0FkzZS4XbdsRVC4xDVJkqz+UT0jQ=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0-rc.12_1592239190425_0.8373873608808908"},"_hasShrinkwrap":false},"1.13.0-rc.13":{"name":"twitch2ma","version":"1.13.0-rc.13","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json && echo \"NODE_ENV=production\" > .env"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","@types/bluebird-global":"^3.5.12","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"f6d40a6b032c780f0082b91d8ad5f92a970b3242","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.13.0-rc.13","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-O4LPsaYDvQ1cLTc1Ido/2moSGi4OfC1COB91FWWfuorcZ2SKcCcF1GmJKHYicTs/zCh0ZSmsawE9Ct0ntdFetA==","shasum":"7b9340bfec3fa244a14aa03599c2915a2a8b78ac","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0-rc.13.tgz","fileCount":80,"unpackedSize":234629,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe59A7CRA9TVsSAnZWagAAdW0P/1SL3YtgawV3otusgE2o\nQJDQfmpisRuB1GfkX4+k31zjx5KtoaknIndSQ2dYcr+Gs789rIHEz2JLk/cT\nkhbPUy7B0hZPbYd4C0/pQvoe6nCQ4YzdaIqIsLhPML5mPEHCcn8lq9ae/lv/\nFDHAP3rXiK6z/h0yNGuKEEvwPG1/cdpz7/XrCG2UoIMNEsK7kEAAdZx4nP6K\nWvVziEm7ZMXJGd9oKNYTMNYK2q7lN4yxNjccJgL/vwBLdohIGeQ70KZo86hc\napk63McmLoHdKX6kedjK0M9kgWYdl4eUajst3vW2wbh13p7QJcJXTx++e83V\n52+9LV6jUPOxYJBkMBDfSTGKubZZM+yxr0Q8jDWyrMJRJPCem9GkmLkAxSeq\nKhhxcT0o/AGuwX2VfHTlc9IOaJ3+51fsAMOc8VHnxlJsjLwrleTZ22RpcZt6\n4mi7kBZZhZCQxD7MjPl2+fht/YKF8Lmy1FsTB3J/OIgxPE2RcQBQdxlIcQ5y\nP7Dvpr2P4xY1Adht3O6ZqJMUyCIufCJEv4ytDFqJwZQ+WJrWJY8GHSYB6A2e\nOyK3Y7k3yy9CdWUNjB43QU3qPdF3JAQyk/v+DeRSfZXukOR64f3fpe9Z2F/J\nKNo8FvQ0Y1iFH2QNcGxnPTI235fyHZm41r7nRAHbdyxkiq60lNBr5HoGpDiO\nMJyf\r\n=YJGw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfeoy7lBCw76ZU5CsVp2H1wfF3peMG6u07zgwMyDOYdgIhAMzCCA14CNPMtcwWwvO532Nv6RE+4DqZqcV9uJ2wYmb6"}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0-rc.13_1592250426517_0.660785657371292"},"_hasShrinkwrap":false},"1.13.0-rc.14":{"name":"twitch2ma","version":"1.13.0-rc.14","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json && echo \"NODE_ENV=production\" > .env"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","@types/bluebird-global":"^3.5.12","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"31086193e24618938193b8a083d8f023b82a53af","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.13.0-rc.14","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-7Q9u7nAT9cnTMVT7hZqCxYUDx/RVpG6auZWf28CET54E8tbB+9gNxkIH+vktjHZwEJGd4jVQs0jdJxGcGRCX9g==","shasum":"4bf890a68c12f7b23c6561269ae30a51288573bf","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0-rc.14.tgz","fileCount":80,"unpackedSize":235491,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe59XlCRA9TVsSAnZWagAAgsMP/A+eqdYWMMB0q4SzQnvX\nOFqvJS+Onyvm03/FQM/yEOrR6q+hB+aziyn90Ggjht+KjkJ5DrsxOE7bOMxD\nbnlhhLPpr/txyI3uITCm8QllRa0ZJbdEVQQ5FrD7mGg3ueRjXcKas9wF0HJs\ne3iQShJIJ2Uni/EIUXUEHHwMeNWXFVpQcqLssvGANeMsbhCu5w87rJL0hUZB\nknahTA4d4Zt6WcgWSrsvWW5LLYKju0ysnhNAAI/Khhxfguvf+17Mx5ky78/+\nCZGav7WaY+PmosT1RGV77Odp5buNxSMemmN2DFr7LWSUqxVHQhLC3E7xdSp/\nak7YA+EQcT4sMV51dlXJDw1BeNMShz9cKPL2TGdsAzX9p3Ix1+/sIP8Y+gqp\ndIFrtiboztifIDc/kKtqDr4HNpC2WjD9wTcVRA2cKW/fk31n4+jf1dsp0Xo/\nbMoMD5h//wa1o3n27y5kKTpFNdgA9cxw2uNfo2tHqEZTaJcA07vuzkgiFtB6\n9MAifJm3nQuSCcC/YXj4Dol/mF0ddbmw8sSIm78QiYIQmqQogkjCak+Hh+UX\n3Di64CUvk0guElJdxfjPtukWlomhBrLC+mUeeLmbotLKFlzeIrK8aHGv+WDi\nt/lBXuu313KEnPBJqgCOOIred5vvirzqWOgmLpzQtct6SnnlF5FOm7zoDlvT\nACQj\r\n=/Bzt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJNonpeXxjuqXrtSKA1bHyuEI+wcwM2lB+wxOt8Kgh1wIhALS6qSOqqU3OHL0Mo1N4iu7M5zeDB0JqNzeIuBjkTNt9"}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0-rc.14_1592251876652_0.7649458919614731"},"_hasShrinkwrap":false},"1.13.0":{"name":"twitch2ma","version":"1.13.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json && echo \"NODE_ENV=production\" > .env"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","@types/bluebird-global":"^3.5.12","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"8d1875faaddeab81b1c11f629f6970d208bef51a","_id":"twitch2ma@1.13.0","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-81oJyEyydc66YfcBxFYMEnWFDxmdV1w9hR3XzGbroBLI4UtF42cojLJm5YadV8TkKC4nTQCj4HdtPxuPAPxnFw==","shasum":"757f96943a476223dc8601af949335480fc6d9e9","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.13.0.tgz","fileCount":80,"unpackedSize":239286,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe5+DpCRA9TVsSAnZWagAAdj0P/j2ZxdcmNC1D/gi56DqX\n/KGSy6tHkURJZL5/AI+JbNQub8DNt+RKAgNVCqq1osWXey8qTe2CNSSNQLbe\nqU0HpQwQ1DqN1zKH8um6q+Zii8K9Js3BymJQr7gyyU18Kj86GluDEpSabIFR\nDgAyyDOG20uSYEMUW/d3en9BGLE774/lSGbX3sfoG8gS1J9PkpGf5e0PIhid\njcBtq4A7PUmh17GtyGWtWNS3+Uc9IRfdoRG0J9RFjpyYaZBtWtZQ2h5gwq7V\nRhwiA6AeeS4pXrbPlgotJpnrald/P0jAVMy2QIQtYyCUMHyFc6e1jpzItsqR\nbDWw7Nqc/sD/Z+JzGsnO8BprOhPS6xNC3F94PNUj0YT88WL/4eveuQtxAK3z\n/HB4AKiSpoZElqB6vqZmFgr3UR8fsdV6QWrMe91/s56Yr5sTY18EATJgkwWG\nHU2g27H5EcdyjYYWnzPDJEmvQjyL5iGOY/hI/3Nf7QXRAciDpEvdr/oJPjMR\nZHZFh9wFKQqe//4La7okhnyY3/vHq3tG+JSxI1u54luBgYFLlC6n9yz8pSlH\nduEvqfTTPGaD31XlpSEgf35TSh+mN4MQOtlFtPYEInpJD+16DALbwk1XSeCC\n7CB+E2n8ZnUnAjJMUvnyf7wJpY1Vk5hmhZ9NHQqPBaCX0aSM+0dzcBBSMjVL\nbDFK\r\n=nzwb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGwmVMpi67UNYl1f6qSdt6stMPYIzzfryxs1EOzxyO2IAiEAuQoy3plCcNJKgcn5Fr19hmn1cbp6spgSYsY7LOaNgTQ="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.13.0_1592254697110_0.9700862379782553"},"_hasShrinkwrap":false},"1.14.0-rc.1":{"name":"twitch2ma","version":"1.14.0-rc.1","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json && echo \"NODE_ENV=production\" > .env"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi-stream":"^1.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","@types/bluebird-global":"^3.5.12","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"b02a90905b9b32ad88ae266f337b2344f386f6d1","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n### Advanced usage\n\nThere are more commands and options available when running `twitch2ma`. Please run `twitch2ma -h` for more help.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.14.0-rc.1","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-5Lkadp3eOFpwcjdCsmzPACLYtfjSNA8Q1lNbk/Iv0lZAqiNLqYVB/+JneUuuu2k56L4S21YP/DQWRZNi6jTIrQ==","shasum":"123d44304a78d981460fae41711beb1ece39abd5","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.14.0-rc.1.tgz","fileCount":90,"unpackedSize":258608,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe5+lhCRA9TVsSAnZWagAASPkQAKMcCfEyl7i8ayqxiWF7\nGY70H5FdzmPiNuy2dbxWg2WgcjZxg9z9n76Pem/0VFyx8y6If1zGp3fOCpzP\n1iGrU4Db2owYuBTAoFY71nHTVbddmpt1LTgR7LcEfXHzFvR1+1WPITeUVOv2\nAxumN1Z8ldHoUghY/wXs45kSb07VCm+K5d3i8Mq+grOSXLwblMB5cAdG9WPz\nYI7zd54XUiqPfOmalhJFItRxZ+cEBeLeHtZhqWfzrKyv4FcM3olesvlxOmTK\nzIG0vNsdMkA9aZnAKmE69w1KEz3QkR5JJN3kf0him+DL6dXSjDhaiffijOfo\nnenXzYy1q3dM4uodcyb/vtkI73kn0eClWkXaVvLbctJsT87+r6lSDzfIAyZn\nhn71djMPQ1rfiwmn+F0yeiRYo8pbzBsTbvrOjzvryr4Jwxp5rxb6svggtC5p\nvffxxw7YpZodd9ZFnJ7EaQYKBWfqF10kE7defBonYuLGo7Wv/FPq3c6o7KLt\neT8mhCmSbPlhAv94gVmc9QDN0/L/S/+tqbHJkkVQx05M4gaQczToV5iOKWoa\nqGt1zYF9rSqaZPVna/Z9WwoADWLLF43wyy8+td1VOKCPRlYQl6Sb3b7jQhm9\n81ZMLSbOjXkSMV8RGBxTa7N/cT2ftu6I5+qae+7g5LsuiVKlV2Aa4oECIs2K\nzZtE\r\n=avEd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGy7tVrAEDpda/9vFyPO4o43Gut6VMVimIudXw5M82szAiEA+t9LphakypljhCHF2R7w9BKU20KHMHKKNDyqMAZkFck="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.14.0-rc.1_1592256864742_0.16279091805129342"},"_hasShrinkwrap":false},"1.14.0-rc.2":{"name":"twitch2ma","version":"1.14.0-rc.2","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json && echo \"NODE_ENV=production\" > .env"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi-stream":"^1.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/git":"^9.0.0","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","@types/bluebird-global":"^3.5.12","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"2eec92c8b72111fe2fbf07dbfaa27ddaa756a818","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n### Advanced usage\n\nThere are more commands and options available when running `twitch2ma`. Please run `twitch2ma -h` for more help.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.14.0-rc.2","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-opoLPD9Lk/rGN0+ZLC8ChVcounZGf9j9qoKcGc7Tefr6m9SrBB75jJ+xliONo8vX4RK9VtGD0+tgUU4LnykkTw==","shasum":"851edb30744573d57668dccd75632eb05ddf5d70","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.14.0-rc.2.tgz","fileCount":90,"unpackedSize":261140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6OfECRA9TVsSAnZWagAAKfkP/0kzOncd3Z0mwjaLihX+\nh0nXPto4+oFRnfXsdFcErvYKf9CMyj0LAfytNukrfbyAJet4qAZ/xfQ56rIV\nBajoe1F6ZrRhu+judC9q7e1pPnko+MvvcXlWJkUpuZGroVB8xRImfyaRBPb+\n1I40mQokVN8TL2h6tnVICgN2Bfwj7kAGy0VOkagXUarV5dMJ/BpqkdEvRpSR\nQYiOVtyUEU9S6uOlvTUMoW/iUVWdN39Kr32e8mHaRVHXlL4UsrhzlUWawEoE\nVfCPGDvKLMdCa3Fxm3skfftsnBL2+O+oN4Yzg2JjQrsR0+rDkuSdpGwVWqiZ\ngqZCYmkq8K76KfaNlXzM5BEcAXI9fOX1yA8Y6jTmd+JvCMf49N0nkshj0613\naWbVibyQnx0pZj8BqTF1mR+k+z3QOyZFVYkOXuvFImSGdQoCqjCbiN4nDesb\n78HfY2AEybWUmpsKpqtlBjYPPpuQEOVltalMxAxe2wQEy/wzWc+7UCF/hami\nm3Zl9K843i6HmwceGMz03H9djE6Ed7l8Vx2QuNeo6SoQLbRkRyrasCy0hRsu\nPe9/QyXhm5VH+krLbCceIE+k1pwoJvQVIXEW9x3RrOLNkaY7+OhOLShN0Ejx\nSZL+iUdL5bURO5ZZ/xpvWqg9Sl0r/INcHu0aEYsEX+JqmcwhcheqYww2dmka\n7InU\r\n=u6Ak\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGKKdAmbsEHvaND3y3ibBgvnw0Y3mB4eLi8I2MKvz8nTAiAPzwK+h5CDwt7G/31e/BGPCEjBvYLsXSOfspAICY8VaQ=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.14.0-rc.2_1592321987422_0.9378678292651605"},"_hasShrinkwrap":false},"1.14.0-rc.3":{"name":"twitch2ma","version":"1.14.0-rc.3","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi-stream":"^1.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/exec":"^5.0.0","@semantic-release/git":"^9.0.0","@types/bluebird-global":"^3.5.12","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"04ea7a72410f35e64ebe7ea6ad026e3ddcc15d1b","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n### Advanced usage\n\nThere are more commands and options available when running `twitch2ma`. Please run `twitch2ma -h` for more help.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.14.0-rc.3","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-u3mh1TUXoKJC9WlXLWjhPGVdneaqkfSpuGYOkIIstgxFUr+sCOUxsvsXKg31QvpI/HFzR3VEDsRCm3nhMLhdag==","shasum":"676fe62a6413dc2a5e1b21f1222a3ec5d288b74f","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.14.0-rc.3.tgz","fileCount":92,"unpackedSize":261659,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6PTgCRA9TVsSAnZWagAAFJUQAJLoTyB7+OB7iREWjCVx\njCbqVMdVlkCRh/2cBeMRx9hM0Cv5JGupZ9oZ/XAFqewtCiVz+DZQPbqpPvoM\nZaO2PVkzg20X4aUdZLjo4GnNGyvrJwWPn+lu386aThUFI3IX9iwyEWxjpEk4\nFz3hWj2G/RQ916pq3r7pPVPT+G+cGcn57jgsctuQCgpUpI7tOfRdeqM5woUr\nX3IUe2dDpqw7TENIcsUv3f97FhlN9URKkssUuapj7B9i/DtDviTEef6N4Iqe\nYS9nUMwniMYBVVJ959ylNiiVldlIYs9iiWNpa4N+ipHyn2CtgjoX5X12WYFz\nptkyBFgwyFm5R8jAMBmiHwGs++eUY7vbCylpA9LoUGjlfA06YifriGbxeXJE\nKVzWaFaRcHRpkZMWQGvECTPB38HJdH9qySdxbNqsr/1VcqzqPTYjl9W8hZub\nM1Yl1AWGCSxZtT9S0hcSo+J74P624VxmdjkL4gE+UBZRlNt8IY1WL9YHJul0\nUECv6uKhY1sHWVyZ07wl1mgvyE+/9lhdzEf2WyNf0mrC5L/S79FZey1X+yB6\nUvaP6loVuiqscTan7zHG0Xk4u4ROpP9Xoby55bAM/H0vZddZbqUBYkDSQG0V\nlUQNxtapIkInrwFSO8h39VTUEucfi/I4JyALYoEHHm5LUMmzD4roHcZSWv5F\nuzMi\r\n=+Dgd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICEPUfsffbBo4XhLDWMYKMlWezW3b05NtYBopBDhks3xAiAR2sislP5SJ3f6vpf8B6YvPPJ+y40Pmu9LUREmy8aqnA=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.14.0-rc.3_1592325343204_0.7152889681672809"},"_hasShrinkwrap":false},"1.14.0-rc.4":{"name":"twitch2ma","version":"1.14.0-rc.4","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi-stream":"^1.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/exec":"^5.0.0","@semantic-release/git":"^9.0.0","@types/bluebird-global":"^3.5.12","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"d770e822b7613d7aeaeea8c49c8c5bac1276c357","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n### Advanced usage\n\nThere are more commands and options available when running `twitch2ma`. Please run `twitch2ma -h` for more help.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.14.0-rc.4","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-OMDwT2GK1uo/Y1GcZkU6TuDBVTrtbQ9l3gE6A2Ez1HUFvSW9+F5Nh4Ua5e3HXUbq9gl8CRMSXB6u5o2MLh1wLQ==","shasum":"eaffa2107aaca7475ae227bd7b83c548b738c2d7","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.14.0-rc.4.tgz","fileCount":91,"unpackedSize":261650,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6PuhCRA9TVsSAnZWagAAUZ4P/jFxD8a0uW7qFP5TSAym\nyZfuo7ZlHlFpTjcv6ZyW8saFsUPpllJ9hAW1Dx/qZxY2YuNxBmdhsVtCbvmW\nHZK3/jvI3WCjaGbRi7DR5cwB/KEXqeb6cpIcqZrzei6staqs8OKWvhgCiV9r\nbhx4Qpss4YWP0uRGyEAY4T2EmXYUT0Cs5SDQEIEEDKTyEW5ao8xU+XrEsYGC\nLu5VupHgGMJGsQS2mLTpsvcTl8Wjeh/t18WUkrkryW1EL82t4jY9v4vYRLL7\nph7r++tColBwtAk7uw0Ph7AwZ4YWpPGSePMTV3GGdeclwhigRj91yfJD0RKY\n2HC2CWyJ9s0Xecdj6ALhNLeSlpWwUNMz84m8RSOhvMY105q0vbK8gbZ29Ab8\nyPv+ub7b31CZDeGoM707/A7oYk70c8KIpfSam7udmw4weslQLfT4jW8Y8I98\n389/JISeBvtl+OeVH7ZXSSbe37t1LkAL3O2U8lSISrOpI+t7/ZMfgFxO31/u\nHqhtPmBgQmpBZ4iSuCCsypdUHRzJPregACHGqa342iYXpjoJNdakg8vne5hb\nOT6CSbulwMejR+xgF0Q0GG5e0SoLChkZ5GuCyxlswBYhdH6EdKEZDE73ulr+\nPpKu0kDb4w/k989Elssvz/453r4WiuU3D6P0eq3H2F7cJjzaC4/8AHT6uFFi\nHFdt\r\n=OhrC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD7Qw60Rd5UlWgEKrGin4xxDoEoklmAZVU2FgTOJg/XIgIhAOIuvv/Qhwf8HgNWpsYFyUR93BuYBvbSolLRpvQlWNPs"}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.14.0-rc.4_1592327073240_0.538402279623009"},"_hasShrinkwrap":false},"1.14.0-rc.5":{"name":"twitch2ma","version":"1.14.0-rc.5","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi-stream":"^1.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/exec":"^5.0.0","@semantic-release/git":"^9.0.0","@types/bluebird-global":"^3.5.12","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"a94055413c27527f240b2e6f551691aa195da941","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n### Advanced usage\n\nThere are more commands and options available when running `twitch2ma`. Please run `twitch2ma -h` for more help.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.14.0-rc.5","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-xN+Q/ZFJpGbQteGqS/oo42IPH5NNaUnD7c2iu9E7PLjE2MkGNCSQ/2h7EEUku9WXVhsJPWzORYSzumH0Dl9t0Q==","shasum":"8a35dc3f9103a8df804bb40ae407bf5b312f608f","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.14.0-rc.5.tgz","fileCount":92,"unpackedSize":261877,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6P+GCRA9TVsSAnZWagAASJ4QAIv1XV80ZoBCn/f0eJhv\nrttbYiudO3f6v/h2PdAU1qnn52rdPQnn39jcHqAuDZVQHAaHkbtcjX1mStTl\nHdV3Cw4rn72WuAV+EgD8ucCZGfYkoPtMPqG+abFUxGKBreL2REWAvL3II6tv\nJHPRw7xqMFpsmsWuHglxEYw3xgZqlZybmbDWyXimfEGPmLoDix6oJGa2pSZS\n5K0K0Wn7uaimlX2EuolIUtiaqz/fwgBR5y+whDAB5QACUEuKRw6sgUbDZfiJ\nViMfC1x9udxx67VyE/LMvyhj50sGR1CrHKJa679BMyFzo06BZFrzpLFkIyr8\nzUrt2K/UAOELVrThpyduCYfrAA7+kWtgl6aYO3upL6TKLCTGgBLxREeptKzq\nkq4J80eK2gsHOQYBmEAsrVx3q1jytCKdaCBrVuJhZqkJJ9nFp7C7bIrqUF3c\ns+T9t7gYYLlq+BAaSY03Txh3f1M+MrDdoJJ+IHbG9WVzmRPxkIQjOIQ/5jYY\n0cgaZjlQMb3OSRNmpy7xwNoTXWSAMBRnpQLOSfepW/gLYtD+ROMkjBw4joWd\n5l3Xxb/IWu4PY2Pch5mdte6jxd/BEXzqrNrCVbkeEbo6x+YO5A82l9Y3ZZwJ\njrjA71OUu3+hfdfl5Ohsh2tVLwDxiahkP2Yn/9bSvbmlDfSxx8iTkdB+pc6G\njT3L\r\n=GJLd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFqwYw5dd+59xF/hIK3Tzot4dyd7g83R59bJZYQuO3SVAiAhjh59zNdhWluwHhb0A7a6pW3+ij4Ot0LnBNi4JapBKA=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.14.0-rc.5_1592328070508_0.07095551302127401"},"_hasShrinkwrap":false},"1.14.0-rc.6":{"name":"twitch2ma","version":"1.14.0-rc.6","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi-stream":"^1.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/exec":"^5.0.0","@semantic-release/git":"^9.0.0","@types/bluebird-global":"^3.5.12","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"e7b4b3df70555ecbb90f1d5dbb0e7b7d11a66bc2","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n### Advanced usage\n\nThere are more commands and options available when running `twitch2ma`. Please run `twitch2ma -h` for more help.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.14.0-rc.6","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-8Ev0m/TkVnQ1xXUE5Ie/rsRksdi72a+38nHsOUHPlYa38tC2kvoMRzOXoNEo2ZeuDBNXBz577WboFGxaSoN2sw==","shasum":"73dede089a7e189c7f3ab1903cbb93983b8a5362","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.14.0-rc.6.tgz","fileCount":92,"unpackedSize":262152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6QMxCRA9TVsSAnZWagAApa0P/RR/VDXol0CTvwf2ZewE\nLT6OAd6YNs3kXweMiqmhqeK5C0fBTkfbkqOITS0RG0PW9U1UE/LnES9ED1jI\nExZo5jyokfSTUO2T7PTn0HLxuxh91KDVe4fhOdC60Qqdg/6MPc1hBN/bXXCT\ng3I4EWTJTL2E6UDFUdBF8LppC93yi7Dw3mLF7Iqltl9L5Wl/TvoJEo9CRtyV\nLvXqb1MbpqR1zHec1npSBTeSWojPRJtKkSnkF2ie5CH/WgtC/ik6SwKbb/37\neA/3/cZkvU33/siS3BpnmaHKSfWfq5JXyDIZeA60LK8Zo/HQ8rIMyu0mRQym\nC6GmNUMLUx17V/6h/or4MsGNl8sb48z/Gd9+Gq4bTNKkjQgCt7KBTbcmeQSQ\ndousmp3Z2wuTYIZ/z8BPAMz5od8dseU+a5QMXwjWqlXPSIf6sU80j0bX+Dlr\nkzPIPE0+GBeUR4zH8oiw4xT45O0+LsQZfST1MCaYjq933lvVSFrXbH7Chd8n\n20+l81z6BbZ35nv+dAQPeQQm3OOH6cKeMfMETz185zwRY5yPfvSG6Rgdc3oJ\n/iLBcsIIlwnhAFYSccrLpXoIT4VZbHKnosn4HXWgrfHNL19iE3aArJdllT8J\nvJ7938UvAFVHtUxgtEKzUGc3S3DcC94cnldC9D8idbq8dxiXpBflLago0AXW\nLexW\r\n=uxBh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHrau4waByvQPfDcSE5+lrUYtheGwitRB8u1av0uIQnJAiBZJVIZPKGFkdJei2NAwtkrTPx7/ejpfQPDNCqE3Ju0bw=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.14.0-rc.6_1592329009138_0.9046255333659525"},"_hasShrinkwrap":false},"1.14.0":{"name":"twitch2ma","version":"1.14.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi-stream":"^1.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/exec":"^5.0.0","@semantic-release/git":"^9.0.0","@types/bluebird-global":"^3.5.12","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"0664a55ae42d247730bc1ca54eb9e77b20e66ce3","_id":"twitch2ma@1.14.0","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-7rMDHAOAE9rxT1/7beFLZSP77ONcBEYnDCy1+BsKtAFR3bAhHmDhpVqHJbe91yF59fLhmfMDHd+rUAg5mNV/zQ==","shasum":"f67117d47d0107601d3cd0b4dc47293271c22c93","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.14.0.tgz","fileCount":92,"unpackedSize":263668,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6SVgCRA9TVsSAnZWagAA1Z4QAJf7f+yHEYQFCYoJGSrf\n/+uilS/1+p4Paq/BodRCZo0oyBqL15hOF/SqrKxNVV6uBa9BU9Qdl7BVXpsZ\nnvE0Gb9y6T3SLYjqPmiqBj9f1mKc1ejIoy9KpY9koJjodM9GIBvb+VsXbauT\niXmd2GXGKEdqpgxsOp2ZsE9lu1tQUQ6TeFqTV2RM8QofyycTCkfiTqLiESsQ\nzvAJEFzCqLOOlEmwO+Jj0jgRWjEOb9XVZFm2bW0bQXCps4MFY8OKIVC/LO0i\nhs993n0y3FA4LFwPLmD7efblfbG6RWmyUCcIm/9V8MINAbRxw+thLrRHUqUg\nKx2I2+Bx+O0Qj/kO63Scvh7oVp9XgqNavrWYesxmZKgTRS2Q0zWXDnZwCmR5\nYGQRK0B4ZXBNV+t8gVxNxfR5kc119c1I6JVTIABNr9VD1LYpdIpeQMigC8e9\nhflSHy8H0X3BvaX407uEwAXKPedMYJ4pEV3HWkki6I8eIqeP1vXAfhvtfOiE\nK02evNXVbVvCq1MBFFA5DRlAyvCkCzUEsIJ2PC/gF9vE47fQAiHINmFT2xMv\np5EANkMyvz/DQo7dSq1bfU+NWZ9KYab7ZL7onyXGs3ocKqusjHgknuxBGcoe\ndZceUoWlhx06R0OUCuLsNAkw20zbpw3LDEzgUDHjTkI1EzTbQjjtwTJGhFyk\n1wzp\r\n=ONZG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE6gXdl9V6yEvjbtJezZ24oidx73zTLDnvXCQ4ox/nuPAiAH6Y8i4DDwsdkR3Z9aeaUfMJQh6suVpOsgKeZw7gFzCg=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.14.0_1592337760191_0.0252453349120485"},"_hasShrinkwrap":false},"1.14.1":{"name":"twitch2ma","version":"1.14.1","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi-stream":"^1.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/exec":"^5.0.0","@semantic-release/git":"^9.0.0","@types/bluebird-global":"^3.5.12","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"6f2256e2f1587e483c67543d409cb5b9b0c96bc7","_id":"twitch2ma@1.14.1","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-KXIawD+uZHTJFUmS3xwBNFigjxPmpRGCzrJ/gn1dHiNCvwIlBYZ1YZVu4A6CRvhLmerWW3Ylml7454ESfHbQfQ==","shasum":"eddc6fec34fb56c761519b011029b5c4dd0eae55","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.14.1.tgz","fileCount":92,"unpackedSize":263919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6SbHCRA9TVsSAnZWagAA07IP/joPfhHvZ21/hhFJ0Dxr\nzDeTblyU4ZuYg2IWFbT8C3saHSKnLCXdt3SWTvcCsYtVpP7cwGVhNgt+P/rW\nGZdnWgykAWs6WU+MOPbrPWM5nLiv1V9OdG7n0sVOIdzlWvVNDvgRQFccRRoc\nbNvdSVSpy5k9LphMWth4euzbmqiHie1StHgfDcd2HCvVog4HQwhLTKqHOBfp\n3Na1lLEfTQ/Ftavv6Q+THcusUnZuBJN5UblWPt6oLl0+rB+4O4F3sLQkGp3p\nO2RGnfOvN+sCT4ZhvZNFzUt8BcgQSX86mLRGaPck14CbU7HP6ltiRnpcMakn\nLLqAP70PKmKnVmis04ippp7NbyxKHAbq4UietkSLQXS/hXRNDA4RUtu9QQJL\nTmO1vLtNyb14NbEgsDT8dbLHwz44hPJACGwFQTUg8d5gcH07ntV5uiSdeQKb\nLSZQy/zYulfBEJaStTjoMVjmPFr4ouYpHUhrELv6b9PoSmLOdT6Rqf5jMtSx\nVgXphCa/qrdmu4jBvVP5ff/oYb2RXD12ks1AmA8SCeeiAys/tPPDRqZQcJ2f\nxEwWplK0iJ2k6AkOIF3IJEbU1vpuJ/1gfyymDagnLKJDcK8smShdzUF9wLUj\nUlXWuV0tNUoA2lcvfes8sos0SGlDnCjjVm1yA9KZ7FM1aH4mdWr7J7ZUqwyV\nimNu\r\n=arBM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBR3rqt4sYFDS/GV3nLjQlr15mIUCJgEg8UMGOImfZUHAiEAoRkFssGfJFuZ2/F2+TJy9RZxYC2jKQl/ei3QYueNPtc="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.14.1_1592338118757_0.7900930792019911"},"_hasShrinkwrap":false},"1.14.2":{"name":"twitch2ma","version":"1.14.2","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","libnpm":"^3.0.1","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi-stream":"^1.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/exec":"^5.0.0","@semantic-release/git":"^9.0.0","@types/bluebird-global":"^3.5.12","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"09ecab215d1f5cfbffac60e36c9890a815a1c59b","_id":"twitch2ma@1.14.2","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-QXez5Dmbh8Pb+UVOJmX85igScUmnoB4ydIOliuzgo61tWwRvcEe6zQfCpOLtkG0mtNqu5+PBYMieVnDaLBtVqQ==","shasum":"4906b7182cbe834de9fabf9abd0d2e374829fab3","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.14.2.tgz","fileCount":92,"unpackedSize":264132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6SeNCRA9TVsSAnZWagAAHRgP/08X/mw3n6Dbp2R/2JZo\nWW4UVuFWmw/kXwhQylcm3VF7CgJznTfCiNQu3akmiM6JQFYtBKHD20pKH7nj\nloO8FYwd9dflRlUWTLtDxmOZKsNOgS5fPbGkpvdBm7WN2Qn3C20VXfrGe1kf\nd0sPDccDwY7MXXAClW0cVfGI9Oz7wU43eVS2wjElxyruuYJKZlLw69JmTnD4\nhqL5ZB4e8u2yPkKMfe5zeyaW5car3o3vWEflN8V06xl30VU6uG+4PA+NnUVV\nSwvgyX+sqaX3Jpr8E8Hme0s2ZY7Ahn61+s+F0iIJ+KcyggKp94vh9/TM13YJ\nCgQXzSMJWrGzvpPSTAto7I/SZq5bOPEC50XxyGPwMgRtd0+c6usPfapsdvZ8\nT/AN+lyJsY1XAF9TtsRz8/6R7yeNTLFRLyHyBM3i1+GNDw4qKJ6adJjqVmJO\nN2fvh1VC4O/6GuEl9JL0/a/k6cf8Uge11V7Hov4hgzuVm6eAafSKKjvVqNTR\nq0oD+wiGqOdYIwWHFrltDAZn+e4RZ2HPeBd9pEPodr1fpNe1go3ACcF/nny3\nMIy8xV7DP5AGm6JGx2n7+D/61ZFo5ROtPByY7Wu3pFeTsK8Ei4C139F0KijD\ngf/oHlGRsck6crVZs6g5Kvz582Yc4ZfkE6xHl4RGngK3IQ21gMAay/rNFZiG\nJVLU\r\n=IDnH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA8d8DqFV8mfuF84Q5+mOThDFh/dPyeGe8go1ih579uNAiB8eoLQrS37QWuVro+QDw2c71FNDlRUjVLHmJqzqItKYQ=="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.14.2_1592338316560_0.436563722305747"},"_hasShrinkwrap":false},"1.15.0-rc.1":{"name":"twitch2ma","version":"1.15.0-rc.1","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","axios":"^0.19.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"github:schw4rzlicht/sACN#build","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi-stream":"^1.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/exec":"^5.0.0","@semantic-release/git":"^9.0.0","@types/bluebird-global":"^3.5.12","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"41630706cf7e8524a4040e456c33d1a93f6d02c8","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n### Advanced usage\n\nThere are more commands and options available when running `twitch2ma`. Please run `twitch2ma -h` or `twitch2ma help` for more help.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.15.0-rc.1","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-Snxbey74YWCI5Hmnc6S+laG10jb459i7EVvJLxo8eQ+y5LhWW+nvCp+QMLi9YXZjrCwDJkFH9r6602YaIuZ5Og==","shasum":"86eb43f1e954eb478411b00de712a652f9da9b0b","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.15.0-rc.1.tgz","fileCount":93,"unpackedSize":284200,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6kbeCRA9TVsSAnZWagAAV1UP/2dBGrZZaiHsObIze6Bb\nKJl0Y6Cq+Bu0t8XPrk2T+AqOw+ZuUQIzk2kD7LQRTJexeUSEqtJIG5UOFMrb\nPr+HB/lzUqfZtGOTJ6uoRSJ/g1uFhUQklfEde/NKbfu8+y41EoygYX6Hpn6X\nVvTHc4tKZvTPwV8LhEw305RhR0NpVqbEc/l0N42dUmRVPN8bPpJayTvAphZ0\n2/cpq/mhoC0NfHRHLWEKv29FskaPzDKzFzu7mqhhykaJQEOrOm0H1w+ZP7hK\ns52LhbuaxyveAy9D7z11POlym8DV647+IHQ4QcnfNG6uIxKTiYJtsTAqu8EG\nZdE1BxWZVV9QI4vNuQnugpu5LnGkwHG8VYrtjiiusK3vheeJdR7UAlHNpAUg\nhvOAAMZdH6C3i9sM9Z2QHLDl8bpX9enbUZOxFtYjnXr65fpvtqtVU9udA7Hv\naMSQDVkoWgfRgjqeyM/8+8ZX4RNZGnesmACBV6ad7/+IE+lsRc7SpF6u7k81\nvWh7wyniLApQt/QV/NvQzq83WgM8zNMLXILlyWrU+eVJgaeknSiMQH7ZjNd6\nLFSlvq/a6z1zt2jnQsSZUzltuyhJuoDlx8JY7OmeLTMfR7QyHqIgiGrIam2R\niwTvR0XGFJMAFSBd/b4hEQPs8/25uMmTIqKy04gBdyCdt+AU2XQX0JqVmuuP\n/y01\r\n=a5uy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIArMBwfT2trm3I+jBdSs3KVOyJ+ic+0Dwf3fIEgS2ALOAiEAwvr9dDjPZbAwQ8S3C7R2b1zk/hsHoPNXDgQJL2j4+nE="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.15.0-rc.1_1592411869996_0.32336573847812167"},"_hasShrinkwrap":false},"1.14.4":{"name":"twitch2ma","version":"1.14.4","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","axios":"^0.19.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"^2.3.2","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi":"^6.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/exec":"^5.0.0","@semantic-release/git":"^9.0.0","@types/bluebird-global":"^3.5.12","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"cc24ade7103d83dc4f3496a6501511f9df738127","_id":"twitch2ma@1.14.4","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-0qvAosP5ulaiHJQ1ZLO5A6VJjXWfn8s+88yn62HcYhXYnhdQVkwX6o9+ZTRcFAr61A5tAhoj5ByOOEMpPzSu4g==","shasum":"05406b04fed472ea20dd86111f8a2bfb42ea7a34","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.14.4.tgz","fileCount":92,"unpackedSize":264836,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe6pINCRA9TVsSAnZWagAAveQP/j8ohIM+z9P9MezAEVWq\nwE7IO3pyoUE3ZCNwcOMSYpczILMZRF69GtzZQNGz0rSJe6oLCARkkxN+FImB\nYjrEl9z9AR856ImnRoqzOhjDFEKbRBHdNBHMrCVhpr0HSbTAvZt+k2Cm6Pxl\nBk9+XXG0Fuodc9F0Ic7A6hws1NwnXCel40KbHDbbCWe7PmRkOjwH8nyYHf1B\nJYzh4mQlJ9dp4YLVLD5a6vYvuhUaIyP1NWMGX5ZKrf5jh6ujxqOqJWvVFmMi\nCk2bOmz0oDc70g27W+7cW9ugQ/GoWn2XW4RyAAdjG9DOJ16hm0RSbLEhp1Iv\n08Br1mzO0/lZXqQLq2Jng4dZ9Q7/L7/I8rXTfr46dwkkvm9xLNhFqdDB6QIF\nkSZPIYijekYhajY6gjE7y3DZq4yQixKYeB0NisreGeJI/xPjYaIsWz8ZxCJu\nNFGHUFGiomhZr6oeDCU/H3upd+l5SosW4ZefLwQlBky+ReldHAuqeU5ZgXrh\ntErVnbGjT+vYdcuqx8O5a5DUUdQxv51rXvzO32lAV/wD313sIcT4hhmfUstb\nWznU2byclc2xY+O01EbRRGKVhUqt+cD8c1NeiCRleZEBUH71rX9ekMWpy1MT\n9fdUg4Bnj+Ik9KEkSbFpV6x7yzTIexBg/AFtEq60yBE6OLGStJRwkkpLyCRI\n/KLf\r\n=xM0b\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDBMokEVUDlyL3Nzkn/WKCFhCyASag1BqQmwF70YhH5QwIhAINKoy11pOvlaKyyOH/1Tg6bfZqRkvUP5uVC0i5sqXWX"}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.14.4_1592431117185_0.3741175456246275"},"_hasShrinkwrap":false},"1.15.0-rc.2":{"name":"twitch2ma","version":"1.15.0-rc.2","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","axios":"^0.19.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"^3.2.0","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi-stream":"^1.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/exec":"^5.0.0","@semantic-release/git":"^9.0.0","@types/bluebird-global":"^3.5.12","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"8fb39525637786dcbf737372c946cb44b9746338","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n### Advanced usage\n\nThere are more commands and options available when running `twitch2ma`. Please run `twitch2ma -h` or `twitch2ma help` for more help.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.15.0-rc.2","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-ryvxF+3lhNhw6JNUtCLIEkoBKE9gU0p+Y8EztYQVSOk2OQEF8qns0/AaiPz+ODz04m8ibYVs8T0pd8iOrrYpPQ==","shasum":"666ac2a3db6fe77c6c81847ccf899d33cb8f4e3b","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.15.0-rc.2.tgz","fileCount":93,"unpackedSize":258199,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7EvjCRA9TVsSAnZWagAAuG4P/iMlr6QN9yyEDtpuzFNm\n+beDRCJUlKSPwjWUEVe9uKZ+MgpGcOiXKr1scbA4JNmBHAUSFtLpKhvSAU4D\nPk+Z2q7qZT/eA2a5XKAyLWAFQcuV39NRQSLJ1GYx1kJ544eTwemcgyqBIzxK\niV+vNHu/PLdcF91rawvPkWacHnmu950sg/CdJb3gi6crHjdvUUe1VLpSFCA/\nw4p3vWg9mwIQ1Q1tlOHTDVuMV1Y2RTD7uzFcPZQNL6anCBcBXiNGCccOJ+jj\n43zkXOn8OLa1rOXJam+gHKnE+d4NTgLnfVzdYgB6MhjvMUSBEn7m3PVbMuox\nkSJuSj+x4NKr5xFhYSE/HQ8PJkuAUxwepptvR8KisIj3uNKRzTjMP7N5rzxy\nUAoWH0r5BHZjbJS88Mu3up57FoNxfVUAzoJKG+B+0aUoV51iq6Q3cxNf7tNG\nypbWWlvJ5A9Aqho5zmIK54fadIZouWO0/aP7prwOgWs4qht9cv633zRnBebm\n+etCDrdAjFM94PDx9UcDZIB+nRSGkeBboH2wcP6lperqb18H49STFsNKd2GI\nj0pzm9O3ThNesDC5Jr8KcsGuY01QXyI9D+82BYetePoXP1YVyAe4hcAHilTz\nT8UyFZ3e7jebfCw7d0421ZOM4QHkHNJ9VlEwCxnv3alWSV4TAi4a3KEP7otR\n00Z4\r\n=wWG7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD0z+YnCSqBR1H341Vzk/Ut0zDniJsV0hOhx6kqQH4IwgIhAICBAExZ637flUCmp06NErQdL+HUyxgirBq1ZprocbM+"}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.15.0-rc.2_1592544226513_0.13472150703698937"},"_hasShrinkwrap":false},"1.15.0-rc.3":{"name":"twitch2ma","version":"1.15.0-rc.3","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","axios":"^0.19.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"^3.2.0","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi":"^6.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/exec":"^5.0.0","@semantic-release/git":"^9.0.0","@types/bluebird-global":"^3.5.12","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"313c1f04f3f7ec7282b5b4a4fc995088be0d0831","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n### Advanced usage\n\nThere are more commands and options available when running `twitch2ma`. Please run `twitch2ma -h` or `twitch2ma help` for more help.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","_id":"twitch2ma@1.15.0-rc.3","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-iNmsMnin/AoQ1zKrbZnBU8foPfZErD9VIPPlhRI8YvLFOy59DxHUFYsi44nmqgFVsrPhMBaQV6hZGDkNtkC56Q==","shasum":"fb5eab831f6d83f86b6a39669f8176f9f855fe0b","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.15.0-rc.3.tgz","fileCount":93,"unpackedSize":258730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe7E5PCRA9TVsSAnZWagAAWqAP/RUCiYv02YGWac+MNujH\ndlRjEL1k7D+G1dJBNZh5ah0B/Q9aEIBwHrkiWob9DSG7PIlELO5z2Hhko6zP\n7rt/Vhl8TP7Iw+AfCf7SjrFAkyzISZqdMVWuvf6r61CDkibWkk5C4OVgdyFd\n5cE/5LGkdZZ/c1uqBpP84FcrxeynV+dcFPOCudNaCQt54exnSu1PRYr41RHu\n3MGfTQ/nt788hFQWvZWiTdjdylhkGSqRlISN9WyQEKcZMU9VZBkgdwfVMxIm\nzurdOvggq6vXSWkAzfZbc9lNVh4zbwHYSCa8btpfuptPT2TcH39B5pLRjq4P\nR+ngBPGc3p52GmkigCUtxYNuXxaUR7SWKNUlZgYNeO1b6G0xfCGWr5SoFbQL\nviiT34T5owIvs7oilXxwHgxtnyzJuQ/jEpAFsJKw1d5sbVpWGom1RkJ8f9/K\ngkp50QOgZsudvHOtuX93UK5GlE6RJ2frFTCVw0YZtsjKFKaji5VWXBwMlfcO\niIHaFpE03RONuXZcCbupGbmG1pIESNRfoT3Niwz7eUwa0yT8TpTmco20EoF/\nbNF1yoyIRUWwieKDMFwclslaEDpS1DPmGAlcgSFd3BKgk5pS9ysju9NlacmQ\n1/Mdx+QTXY+LgSeKo/EYNC4QpZccVMnwal+hgAzoN3mGSXUfVecR6okN/57z\n23ej\r\n=3dBf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCzoGwMlZ0r09mqDdEIno5B8LoQI0qwUJ1vD1WAvqCDZwIgadbzwfAz3xMPaxmcMk7ZEnI1bxnmq1l+e40p+1UOXEU="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.15.0-rc.3_1592544846544_0.917034113622319"},"_hasShrinkwrap":false},"1.15.0":{"name":"twitch2ma","version":"1.15.0","description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","main":"dist/lib/index.js","types":"dist/lib/index.d.ts","scripts":{"test":"npm run validateConfig && jest","build":"tsc","prepare":"npm run build","buildYamlConfigSample":"json2yaml ./config.json.sample > ./config.yml.sample","validateConfig":"npm run validateConfigSchema && ajv validate -s src/resources/config.schema.json -d config.json.sample","validateConfigSchema":"ajv compile -s src/resources/**.schema.json","prepublishOnly":"echo \"{ \\\"dsn\\\": \\\"$SENTRY_DSN\\\" }\" > sentry.json"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","license":"MIT","dependencies":{"@d-fischer/typed-event-emitter":"^3.0.0","@sentry/node":"^5.17.0","ajv":"^6.12.2","axios":"^0.19.2","bluebird":"^3.7.2","chalk":"^4.0.0","commander":"^5.1.0","dotenv":"^8.2.0","humanize-duration":"^3.23.0","lodash":"^4.17.15","node-ipc":"^9.1.1","sacn":"^3.2.0","semver":"^7.3.2","source-map-support":"^0.5.19","strip-ansi":"^6.0.0","telnet-client":"^1.4.2","twitch":"^4.0.10","twitch-chat-client":"^4.0.10","yaml":"^1.10.0"},"devDependencies":{"@semantic-release/changelog":"^5.0.1","@semantic-release/exec":"^5.0.0","@semantic-release/git":"^9.0.0","@types/bluebird-global":"^3.5.12","@types/humanize-duration":"^3.18.0","@types/jest":"^25.2.3","@types/lodash":"^4.14.152","@types/node-ipc":"^9.1.3","@types/semver":"^7.2.0","@types/source-map-support":"^0.5.1","ajv-cli":"~3.1.0","jest":"^26.0.1","json2yaml":"^1.1.0","ts-jest":"^26.0.0","typescript":"^3.9.3"},"bin":{"twitch2ma":"cli.js"},"keywords":["grandma","lighting","twitch","telnet"],"gitHead":"627ebc9e37523d0478b2763252fd35b1dff5074d","_id":"twitch2ma@1.15.0","_nodeVersion":"14.5.0","_npmVersion":"6.14.5","dist":{"integrity":"sha512-CIdG5WkIev7FK9OpaZ++PD3IOkRzTH91Crl9/+eYISsxx/PVJHZjOSph0L3RFx5zzi5M8UPb+br8vS+F6CuSdA==","shasum":"b661680aa1d6daff421ddcef24f140f8e9c7cf3d","tarball":"https://registry.npmjs.org/twitch2ma/-/twitch2ma-1.15.0.tgz","fileCount":93,"unpackedSize":259260,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfDXS+CRA9TVsSAnZWagAA2v0P/3UMh/QmHu75hTBtcrCu\neoJOtjXamG16qHu+8Q1rbEtM+0dKv5RaB78O6O+tD/ZO2Hl/SCJNuvn00kYz\n/Ysvz4pQF/W9TFWq28tHdT5ZcqKx2YMq3JjVpotOpUcoOsegRhh0pOJMjlJw\nn73xq3Snxq/Z51Hk50wvQeJEHDHJvykpMDccFIaOhvkmTJMy8V2QB/H7zf4V\nx/Bdaz5snSs8YXXQjgRd8KpeSQ0DIvHF3lzA+HT+nwr7GU92H9Dt9XZgVA5H\nmiAa/qnE41t/5uhUEGY9FDLJmmJmLxxJNTBfb2iIK76YYnC9jddmrX88bWx9\noiXX1C/F5D+M9F+3uCgcRYtIe/mJXmhflNqTwFNbbM3zdEQVe4X56QswLBFg\ne83SF5lfj+VjjuXQ7ntlw/0/AfwnqEBI+ricYzom8CWVtTyBPNh8Shu+uOlV\n1S5aGJ0DIoNe+euQV+qJP53NKDzGMciL/sEl4xuClOTIZufGwf1zcz6tbaDT\noz1LiNSJx/Nlv9QjuDu8Zvho+YbdsquLhSpVFZMq20KWVWHw8A0MiaHwVn+O\n78asca8cdiYWWIed1qbWQ1GbzkrgHyKbkD9hvyzqaNwfO9xs0TkJln/l2xZ3\nZrPQERxKmc17Izlg9oBucOvtTUJCpQEu49m4djE2DnbGSBjkhDw7llJ35++P\nEckV\r\n=wQnj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDO1/BQc0i6ee+Xb7BCWD5ozfGhvUMI/ezR+1j7RVumcQIgRskZ8Uw/i+IaFspay9RUojO4eTgYvu30zfzyyFDbY8I="}]},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"_npmUser":{"name":"schw4rzlicht","email":"mail@julianrabe.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/twitch2ma_1.15.0_1594717374307_0.6563819897478431"},"_hasShrinkwrap":false}},"time":{"created":"2020-05-22T20:38:01.760Z","1.0.0":"2020-05-22T20:38:01.964Z","modified":"2022-05-22T11:22:35.411Z","1.1.0":"2020-05-23T11:21:57.755Z","1.2.0":"2020-05-23T15:58:46.092Z","1.2.1":"2020-05-23T18:43:31.899Z","1.2.2":"2020-05-23T19:10:08.069Z","1.2.3":"2020-05-23T19:51:44.619Z","1.3.0":"2020-05-23T20:54:24.555Z","1.3.1":"2020-05-23T21:05:32.883Z","1.3.2":"2020-05-23T21:09:53.507Z","1.4.0":"2020-06-02T07:59:13.488Z","1.4.1":"2020-06-02T11:37:41.524Z","1.4.2":"2020-06-02T17:30:26.195Z","1.5.0":"2020-06-03T22:04:11.929Z","1.5.1":"2020-06-03T22:51:55.445Z","1.5.2":"2020-06-03T23:07:40.695Z","1.6.0-0":"2020-06-04T19:18:32.763Z","1.6.0-rc1":"2020-06-04T19:25:27.394Z","1.7.0-rc.0":"2020-06-05T13:46:08.353Z","1.7.0":"2020-06-05T16:05:38.186Z","1.8.1-rc.2":"2020-06-05T19:49:02.787Z","1.8.1-rc.3":"2020-06-05T20:23:23.750Z","1.8.1-rc.4":"2020-06-05T20:28:53.377Z","1.8.1-rc.5":"2020-06-05T21:03:28.504Z","1.8.1":"2020-06-05T21:14:45.530Z","1.9.0":"2020-06-05T22:11:53.939Z","1.10.0":"2020-06-06T23:49:29.012Z","1.11.0-rc.1":"2020-06-07T19:52:18.176Z","1.11.0":"2020-06-07T20:10:39.349Z","1.12.0":"2020-06-09T10:35:50.006Z","1.13.0-rc.1":"2020-06-10T19:35:39.008Z","1.13.0-rc.2":"2020-06-11T22:00:06.769Z","1.13.0-rc.3":"2020-06-12T14:02:16.478Z","1.13.0-rc.4":"2020-06-12T14:16:39.589Z","1.13.0-rc.5":"2020-06-13T15:13:32.504Z","1.13.0-rc.6":"2020-06-13T15:31:28.293Z","1.13.0-rc.7":"2020-06-14T01:31:14.099Z","1.13.0-rc.8":"2020-06-14T16:54:00.258Z","1.13.0-rc.9":"2020-06-14T18:11:26.919Z","1.13.0-rc.10":"2020-06-14T22:01:36.116Z","1.13.0-rc.11":"2020-06-14T22:58:45.565Z","1.13.0-rc.12":"2020-06-15T16:39:50.539Z","1.13.0-rc.13":"2020-06-15T19:47:06.680Z","1.13.0-rc.14":"2020-06-15T20:11:16.830Z","1.13.0":"2020-06-15T20:58:17.359Z","1.14.0-rc.1":"2020-06-15T21:34:24.892Z","1.14.0-rc.2":"2020-06-16T15:39:47.570Z","1.14.0-rc.3":"2020-06-16T16:35:43.603Z","1.14.0-rc.4":"2020-06-16T17:04:33.383Z","1.14.0-rc.5":"2020-06-16T17:21:10.637Z","1.14.0-rc.6":"2020-06-16T17:36:49.273Z","1.14.0":"2020-06-16T20:02:40.335Z","1.14.1":"2020-06-16T20:08:38.927Z","1.14.2":"2020-06-16T20:11:56.747Z","1.14.3":"2020-06-17T00:30:27.299Z","1.15.0-rc.1":"2020-06-17T16:37:50.135Z","1.14.4":"2020-06-17T21:58:37.314Z","1.15.0-rc.2":"2020-06-19T05:23:46.713Z","1.15.0-rc.3":"2020-06-19T05:34:06.732Z","1.15.0":"2020-07-14T09:02:54.451Z"},"maintainers":[{"name":"schw4rzlicht","email":"mail@julianrabe.com"}],"description":"Twitch chat bot that runs commands on the MA GrandMA2 using Telnet.","homepage":"https://github.com/schw4rzlicht/twitch2ma#readme","repository":{"type":"git","url":"git+https://github.com/schw4rzlicht/twitch2ma.git"},"author":{"name":"Julian Rabe","email":"mail@julianrabe.com"},"bugs":{"url":"https://github.com/schw4rzlicht/twitch2ma/issues"},"license":"MIT","readme":"# twitch2ma [![Build Status](https://travis-ci.com/schw4rzlicht/twitch2ma.svg?branch=master)](https://travis-ci.com/schw4rzlicht/twitch2ma) [![npm](https://img.shields.io/npm/v/twitch2ma)](https://www.npmjs.com/package/twitch2ma) [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n`twitch2ma` is a [Twitch](https://twitch.tv) chat bot that hooks into your channel and executes commands on a \n[GrandMA 2](https://www.malighting.com/grandma2/) console using telnet.\n\nViewers can run user-defined commands like `!red` in chat to trigger whatever action on the desk. Additionally, viewers\ncan always run `!lights` in chat to list all available commands.\n\n## Installation\n\nTo install `twitch2ma` you need to have at least [node.js](https://nodejs.org/en/) 14 installed. Run\n\n```bash\nnpm install -g twitch2ma\n```\n\n## Configuration\n\nBefore you can run `twitch2ma` you need a config file in JSON or YAML format. Sample files are\nlocated in the root directory ([JSON](config.json.sample) / [YAML](config.yml.sample))\nof the repository and ship with the npm package.\n\nFind a detailed description of every option [here](docs/config.md).\n\n### Twitch authentication\n\nAs mentioned above, you need a `clientId` and an `accessToken` when connecting the bot to a channel. To obtain these, \nyou will need to register an app on [dev.twitch.tv](https://dev.twitch.tv/console/apps). Just use any name you like for \nthe app. `OAuth Redirect URLSs` don't matter either, just fill in anything. Category is `Chat Bot` of course. You can\nget your `clientId` from the manage page now.\n\nAfter you have done that, you will need an access token. Unfortunately, this is not done by `twitch2ma` yet, so you have\nto get it manually with [this neat tool](https://twitchapps.com/tmi/). You will get an OAuth token like \n`oauth:9ouvuuiv3mwvdd3rx5obks823jdp20dj`. Remove the `oauth:` and that is your access token for the configuration file.\n\n### Locking commands and parameters\n\n`twitch2ma` can receive sACN to temporarily lock commands. This is done by the `sacn` configuration options. If configured,\n`twitch2ma` listens to the respective universe/channel combination and locks configured commands and parameters when the\nchannel value drops below 100%. This allows for a more flexible way of allowing or denying viewers' input.\n\nWhen sACN is configured for a channel or parameter, it overrides `timeout` settings for that channel or parameter.\n\nAdditionally a `lockMessage` can be configured which is sent to Twitch chat when viewers try to execute a locked command/parameters.\n\n## Usage\n \nTo run `twitch2ma`, just run the following command. Please be aware that you need to have a desk or onPC in your \nnetwork, reachable under the IP adress you configured. You also have to have telnet turned on.\n\n```bash\ntwitch2ma [configFile]\n```\n\n`configFile` is optional and defaults to `config.json`.\n\n### Advanced usage\n\nThere are more commands and options available when running `twitch2ma`. Please run `twitch2ma -h` or `twitch2ma help` for more help.\n\n## Changelog\n\nFind the changelog [here](docs/CHANGELOG.md) .\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://deltaeight.de\"><img src=\"https://avatars1.githubusercontent.com/u/19175262?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Julian Rabe</b></sub></a><br /><a href=\"#question-schw4rzlicht\" title=\"Answering Questions\">💬</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Code\">💻</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Documentation\">📖</a> <a href=\"#example-schw4rzlicht\" title=\"Examples\">💡</a> <a href=\"#ideas-schw4rzlicht\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#infra-schw4rzlicht\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a> <a href=\"#maintenance-schw4rzlicht\" title=\"Maintenance\">🚧</a> <a href=\"#platform-schw4rzlicht\" title=\"Packaging/porting to new platform\">📦</a> <a href=\"https://github.com/schw4rzlicht/twitch2ma/commits?author=schw4rzlicht\" title=\"Tests\">⚠️</a></td>\n    <td align=\"center\"><a href=\"https://github.com/kevinmaslona-rgb\"><img src=\"https://avatars2.githubusercontent.com/u/65712477?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>Kevin Maslona</b></sub></a><br /><a href=\"#ideas-kevinmaslona-rgb\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-kevinmaslona-rgb\" title=\"User Testing\">📓</a></td>\n    <td align=\"center\"><a href=\"https://github.com/AlexWHughes\"><img src=\"https://avatars0.githubusercontent.com/u/32295023?v=4\" width=\"100px;\" alt=\"\"/><br /><sub><b>AlexWHughes</b></sub></a><br /><a href=\"https://github.com/schw4rzlicht/twitch2ma/issues?q=author%3AAlexWHughes\" title=\"Bug reports\">🐛</a> <a href=\"#ideas-AlexWHughes\" title=\"Ideas, Planning, & Feedback\">🤔</a> <a href=\"#userTesting-AlexWHughes\" title=\"User Testing\">📓</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","keywords":["grandma","lighting","twitch","telnet"]}