zaytri / slime2

Local Chat Overlay System for Twitch
https://slime2.stream/
34 stars 7 forks source link

Update Twitch Chat Client to handle multiple and non-broadcaster channels #19

Closed navarr closed 10 months ago

navarr commented 10 months ago

I submit this PR not expecting it to be accepted, but to start a dialogue on some features I would love to utilize in widgets. Please bear in mind that unfortunately I barely understand what I'm doing in this particular case.

These are the goals I'd like to accomplish:

  1. Expand slime2 to be usable for collabs in such a way that multiple streamers can be specified and all of their chats can appear in the widget (great for collabs and use outside of OBS)
  2. Expand slime2 to be usable in such a way that a mute streamer can chat in their channel, and an appropriately designed widget can display their messages on collaborator's screens

Right now my proposed code does have a BC break in that the broadcaster's channel is not automatically joined. If you're willing to entertain these ideas, I would be very excited to hear your thoughts!

(As of right now, code is currently untested - but I am confident that with your advice I could build, test, and contribute working code)

TODO

zaytri commented 10 months ago

Connecting to multiple channels on the same platform isn't something I was planning on supporting, as it could become a privacy issue with users connecting to channels just to get their chat data. Sure, someone could just do that themselves with an anonymous Twurple connection, but I wouldn't want to make it easier for them to do via slime2, using my developer client ID. In the current state of slime2, you only have access to your own data.

Additionally, complete parity between the main streamer channel and the other listened channels wouldn't be possible. Certain API calls require explicit authentication from the streamer, such as getting channel point data (to handle chat messages from channel point redemptions that require text) and follow age (which chat widgets use to filter chat messages from users below a certain follow age). This will increase as slime2 expands to add more features, such as getting event data from follows, subscriptions, raids, etc.

I'm also working on YouTube support, and having parity for this feature on YouTube would be a lot of work itself. It would also multiply the amount of YouTube API calls, which is not ideal because Google limits API calls with a quota limit, so I'd like to minimize the amount of API calls made.

slime2 can already be made to show the chat from a single person. The base chat widget, slime chat, and others, has this user filters option in it. If everything in the "Show messages from these types of users" field is unselected, and a certain person's username is added to the "Always show messages from these users" field, then only that person's messages will be shown.

image

If they want to chat in their own channel instead of the broadcaster's channel, they could give the broadcaster their authentication key to render their channel's chat messages, along with all the security issues that could arise from sharing a key.

zaytri commented 10 months ago

Additionally, in the case of mute streamers in collaborations, it might instead be easier to have an overlay from a different service that displays messages from a specific Discord channel

navarr commented 10 months ago

I appreciate your feedback, thank you zaytri! I'll go ahead and close this out.