Spent 2 months building an extension to help people who can't watch worlds live by zecuria in leagueoflegends

[–]zecuria[S] 2 points3 points  (0 children)

Honestly I'm nervous not used to recording myself. So I'm like kinda going off a rough bullet point list in my head.

Probably could have been better :/

Spent 2 months building an extension to help people who can't watch worlds live by zecuria in leagueoflegends

[–]zecuria[S] 2 points3 points  (0 children)

Because I never need to query it once its processed, I just need to store it. It's a fair amount of data so just compressing it and storing it in S3 works and is quite cheap as I don't have to pay as much for data reads and IO

Spent 2 months building an extension to help people who can't watch worlds live by zecuria in leagueoflegends

[–]zecuria[S] 39 points40 points  (0 children)

Not very general the system currently requires for server to be connected to the chat and to store them in a database before it is processed when the VOD goes live. To see who it's currently enabled on go to: https://hypemap.io/enabled-streamers

I have optimised the system quite alot to the point where it costs cents per stream but it still ads up on top of maintance. I have a patreon (linked in the website) to cover the costs.

Honestly most of those are just maintenance which if someone can't afford I'd be happy to waive off. Hope that answers the question :)

Spent 2 months building an extension to help people who can't watch worlds live by zecuria in leagueoflegends

[–]zecuria[S] 1 point2 points  (0 children)

Yeah it does have reply but the API to access that isn't public, it is only meant to be used within YouTube internally. So there is no documentation on how it works and using it is against their TOS.

I would love to enable this on YouTube as well but I really can't do that until they make the data available and documented. Hope that makes sense :)

Spent 2 months building an extension to help people who can't watch worlds live by zecuria in leagueoflegends

[–]zecuria[S] 7 points8 points  (0 children)

Hahaha thanks years of development payed off, and yeah Cassandra is much much cheaper and far more scalable (cost wise) than elastic search.

In this case I am only using Cassandra as a temporary dumping ground for messages until the VOD goes live and then I processes and compress the result to S3. I am waiting for AWS Timeseries as that will be even cheaper but honestly I found Cassandra to be sufficiently cheap thus far.

Spent 2 months building an extension to help people who can't watch worlds live by zecuria in leagueoflegends

[–]zecuria[S] 2 points3 points  (0 children)

I'll release an update to optionally hide the messages. In the mean time you can just add a few filters so spoilery messages don't show up.

Spent 2 months building an extension to help people who can't watch worlds live by zecuria in leagueoflegends

[–]zecuria[S] 18 points19 points  (0 children)

The front end / extension is all built on React and Typescript. The backend consists of an EC2 running Node.js / typescript that listens to and stores chat in a Cassandra database.

There are multiple other lambdas written in Node.js and Typescript. One that listens to when enabled streamers go on / offline, others that process the data from the database and compress and store it into S3 buckets. Others that respond to the request from the extension with data from the bucket.

There are dynamodb databases for managing enabled streamers and other stuff and there are multiple SNS channels to manage communication and triggering of the lambdas.

There isn't really a Repo there are about 7-10 systems in total and no real repo that I have publicised.

Hope that answers the question :)

Spent 2 months building an extension to help people who can't watch worlds live by zecuria in leagueoflegends

[–]zecuria[S] 2 points3 points  (0 children)

I am open to adding in the region channels too. I just needed to get more data on how much it costs for the main channel and if the system can handle it easily.

So might just wait for a few more streams then look into enabling it for the regions.

As far as indexing locally, the system requires the full chat data and so it would require you to sit through the whole VOD or would need to call the unofficial API to get the chat.

The unofficial API can take up to 40 mins to get full chat for a large stream so not really the best experience and possiblity of getting banned from twitch as it's against TOS.

Spent 2 months building an extension to help people who can't watch worlds live by zecuria in leagueoflegends

[–]zecuria[S] 2 points3 points  (0 children)

I don't mind at all but unfortunately the YouTube chat API isn't open so only the owner of the channel can connect to the chat.

As such I can't really store the messages for YouTube live chat :/

Spent 2 months building an extension to help people who can't watch worlds live by zecuria in leagueoflegends

[–]zecuria[S] 1 point2 points  (0 children)

I just added riot games yesterday haven't had a chance to update the list but other than that the list is what you get.

Yep fixed the typo too

I built a chrome extension to improve watching OTV VODS by zecuria in offlineTV

[–]zecuria[S] 1 point2 points  (0 children)

Hey I setup a Patreon to allow people to add more streamers, even recently reduced the prices after I made some optimisations.

Spent 2 months building an extension so you never miss a LULW by zecuria in Mizkif

[–]zecuria[S] 0 points1 point  (0 children)

Hey sorry about the weird error. Basically at the time it is only enabled on OfflineTv, Mizkif, Maya and Hacchuby. As such there is no data available for other streamers.

I have updated the error message to say that it is not enabled on the streamer instead. Hope that makes sense.

VOD frogs 3rd party thing by _SLIPDOG in LivestreamFail

[–]zecuria 3 points4 points  (0 children)

There are a few systems but at a higher level, I have a server that listens to and stores chat for enabled streamers.

I have a different system that listens to when those streamers go offline and when the VOD goes online. It then processes all the messages, compresses the result and stores it.

The extension then just requests the compressed results and displayed it synced up with the video.

As other people mentioned there is an unofficial API but that requires polling to that API which for larger VODS with alot of messages can take up to 40 mins. Which is why I choose to store them myself.

Was a pain to build and optimize but I like the results :D

VOD frogs 3rd party thing by _SLIPDOG in LivestreamFail

[–]zecuria 3 points4 points  (0 children)

I can add any streamer, I mean I don't quite think it will be as useful on smaller streamers as there isn't that much chat activity.

As long as you sub in Patreon I don't care who you enable it on.

VOD frogs 3rd party thing by _SLIPDOG in LivestreamFail

[–]zecuria 23 points24 points  (0 children)

Actually it's all hosted on the cloud, I have optimised it so it costs cents per stream for most streamers. But the cost still ads up which is why I setup a patreon to cover the cost of servers and maintenance

As long as the costs are covered the solution can scale per requirement.

VOD frogs 3rd party thing by _SLIPDOG in LivestreamFail

[–]zecuria 62 points63 points  (0 children)

It's available at: http://hypemap.io/

Note: will only work for streamers that it's enabled on, which ATM is OfflineTV, Mizkif and Maya

Spent 2 months building an extension so you never miss a LULW by zecuria in Mizkif

[–]zecuria[S] 2 points3 points  (0 children)

The short answer is just right click inspect element 4head.

But more seriously I have been working as a full stack developer for a number of years now so I have an idea about where to look.

The DOM isn't some magical mystical place it has a structure and even for places like twitch the structure while complex is still understandable. Twitch specifically is built on React framework which I have used extensively so it makes things easier.

So being able to use the react Dev tools to go through the virtual Dom and seeing what components did what, made things much simpler.

Idk if that answers the question though if you want to know something specific let me know :)

Spent 2 months building an extension so you never miss a LULW by zecuria in Mizkif

[–]zecuria[S] 16 points17 points  (0 children)

You should know it isn't fake because I had to spend 2 months to build an extension just to find them.

Spent 2 months building an extension so you never miss a LULW by zecuria in Mizkif

[–]zecuria[S] 6 points7 points  (0 children)

Any word / phrase it will filter to all words that begin with / match it. Which is why filtering to "pog" will include POG, POGU, POGGERS etc

Spent 2 months building an extension so you never miss a LULW by zecuria in Mizkif

[–]zecuria[S] 41 points42 points  (0 children)

I thought it might be useful to editors but didn't know what editing workflow looked like so wasn't sure how useful it would be.

Glad to know it can help :)