Giter Club home page Giter Club logo

rtchat's People

Contributors

chungwwei avatar cswills avatar dependabot[bot] avatar duncanodhis avatar emzsins avatar jessielw avatar joelemanoel avatar juaoose avatar ken095 avatar kevmo314 avatar nkshah2 avatar ryansng avatar sputnikplop avatar tim885885 avatar vaishalidesai avatar wolfof420street avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

rtchat's Issues

[testing] write some tests

We should probably start writing some tests...

The models are probably the easiest thing to test first. Getting some of the TTS logic tested would be nice.

[chat_history] online/offline status

While message delivery is pretty robust right now, it's hard to tell if messages are being delayed due to lack of connection. A message that shows up when you're offline would be nice.

[chat_history] add timestamps

It would be nice to get an option to add timestamps to the chat history.

I like Twitch's approach where the timestamps are actually shown as a message. Maybe one idea is we can add a clock or something that shows the timestamp of the bottom-most message?

In other words, the key idea is that we don't need the timestamp for every message. For a specific message, we can probably show the timestamp in the long press UI and the timestamp in the chat history is just a rough guideline for when that message was sent.

This is technically quite easy to do, but doing it in a way that's elegant and doesn't impose on the UI will be tricky.

[layout] webview resizing slow

Resizing the layout is sort of slow because the webview makes everything slow. We can optimize this by clipping the webview (like what happens when chat history is scrolled) and then when the drag is released, actually do the resize.

[tts] make tts work in background

Right now, tts gets killed if the app is switched out of because it doesn't run in the foreground.

We can resolve this by using something like https://pub.dev/packages/audio_service to keep a foreground notification and have it play. There's an example of it interacting with flutter_tts in the instructions, however keeping the Firestore connection alive could be a little trickier since the background task runs in an isolate.

It seems that the new v0.18 removes the need to run in an isolate which seems a bit nicer: https://github.com/ryanheise/audio_service/wiki/Migration-Guide#0180-preview

[channels] unauthenticated access

It would be nice to be able to use the app without signing in. The agent supports it, so once we have channel switching this should be possible.

Crash Report

I did a 3 hour stream playing with rtchat and noticed it crashing 5-7 times randomly. Not sure if its because I am running a youtube preview tab or/and with TTS enabled. I am on android Samsung Galaxy S20 Ultra on android 11, on latest OS patch and latest version of rtchat.

[tts] message coalescing

If two messages occur from the same sender, there's no point in repeating the author. eg:

muxfd: wat
muxfd: lol

currently produces:

muxfd said: wat. muxfd said: lol

but it would be better to announce

muxfd said: wat. lol.

There are perhaps more clever solutions as well such as selectively reordering messages:

muxfd1: moo
muxfd2: asdf
muxfd1: cows
muxfd2: oink

can probably be announced as

muxfd1 said: moo. cows. muxfd2 said: asdf. oink.

Likely, this coalescing should only occur if the messages are enqueued. That is, if the first message is already spoken by the time the second one comes in, messages should not coalesce.

[agent] one client per channel

We can get around some rate limits by using the user's oauth token to listen to their own channel. The big caveat here is that we might not necessarily have the user's oauth token, for example if I join someone else's channel and they haven't signed up for RealtimeChat yet.

So we have to be a little clever about choosing the identity for a channel. Likely we should use the user's oauth if available and if not, fall back to either anonymous or using the RealtimeChat bot.

[chat_history] link preview

It would be nice to get link previews. That way I don't need to guess what clip people are posting in chat :)

[layout] input doesn't defocus

The "Send a message..." input doesn't defocus for some reason after the keyboard is closed. This causes the keyboard to pop up whenever the main page is navigated to, which is mildly annoying.

[agent] improve reliability

Right now the agent randomly crashes with no information in the logs. I suspect it's a bug with tmi.js. We might be better off rolling a direct IRC connection and managing it ourselves, but it requires some investigation.

If you're interested in this issue, let me know and I can give you access to the GKE container.

[channels] merged channel support

Support joining many channels and merging them. We should guard this behind a setting because it's rather complex, but it can be powerful for those who multiplatform stream.

[layout] improve long press menu

image

The twitch menu when clicking on a username is a lot useful than the four-button long press menu that shows up right now, not to mention the buttons don't actually work. It would be nice to have a similarly useful popup come up when long pressing a message.

We can probably start off with a subset of functionality but making it look nicer with some more superficial information would be a great first step.

[chat_history] add sub notification messages

The default twitch chat has sub messages. These are also sent in the IRC API. We should support these as well.

If you're interested in this one, please let me (muxfd) know on Discord. There's some code you can model after pretty easily.

add internationalization

It would be ideal to use a platform that allows the community to provide and evaluate multiple translations for the app.

A candidate is: localazy

[tts] add a close button to disable tts from the notification

An easier way to disable TTS would be nice. The difficulty with this feature is that there seems to be a bug in audio_service where the notification doesn't get dismissed when playing is set to false.

This issue is therefore probably quite difficult but would be a great way to learn about how flutter plugins are written.

[chat_history] message batching

When chat moves too fast it can be difficult to read. We can improve this by rendering the messages in batches, eg every 1s render the newest messages instead of instantaneously.

[ai] message aggregation

It's kind of annoying to get a million catJAM messages. Would be nice to aggregate emote-only or similar messages together into a more compact ui. ie, instead of

muxfd1: catJAM
muxfd2: catJAM
muxfd3: catJAM

We could do something like

muxfd1, muxfd2, +2 others: catJAM

This would need to be a little more intelligent around handling multiple emotes, but it would be really cool.

[ai] message prioritization

It would be cool to have long time followers highlighted or otherwise emphasized so they stand out among the messages.

We can reduce contrast of likely spam or new messages, although the exact behavior we'll need to play around with.

[tts] message filtering

TTS is a bit aggressive right now. It would be great to filter out emotes, restrict usernames, etc.

[layout] emote picker

Right now there's no way to pick emotes. Would be good to have an emote picker sort of similar to the twitch one.

[channels] youtube support

Most of the code is written to one day support a non-twitch provider. YouTube would be a good next step. A single rtchat account can be linked to at most one twitch and at most one YouTube account.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.