kentcdodds / kcd-discord-bot-v1

The bot for the KCD discord community
https://kcd.im/discord
MIT License
122 stars 41 forks source link

Streamers #45

Closed kentcdodds closed 3 years ago

kentcdodds commented 3 years ago

From the moderators room:

@smeijer said:

For that last aspect, it might help to move towards a "community-live" (cowork space / shared office hours /...) channel. A single channel, where various streamers can reserve timeslots. The current 2 streamers ain't the problem. But when we'll end up having 10+ streamers (double the channels due to announcement channels), this will happen. A shared community feeling might prevent that, and will make it easier to hop on from one stream into another.

And I replied:

I agree. I can put a general live stream thing together (like what I made for Bala and Jacob) pretty easily. The nicest challenge is notifications. Someone may want to be notified when Steamer A goes live, but not B and C. But I think that's not a big deal maybe?

Perhaps I should make a Steamer Role so people have to apply to be able to comment in the steamer notification channel and share their screen in the live stream channel(s). Hmmmm....

I'm curious what folks think. Here's what I'm thinking:

  1. Text channel: live-stream-notify which only Streamers can comment in and everyone else sets their notification preferences so they know when a streamer comments that they're streaming
  2. Text channel: live-stream which is where general live stream chat happens
  3. Voice/Video channel: Live Stream which is where the actual live stream can take place

If we're worried about time collisions, we can make two or three of the live-stream and Live Stream channel pairs. I don't think that would be a big deal.

So the Streamer Role would be something you'd apply for somehow. We could have a channel for that. We'd just put together some rules and recommendations for people to follow.

What do folks think about this approach?

smeijer commented 3 years ago

I would try postponing the second channel for as long as possible. For the community feeling, it's better to have a nice and busy stream channel, than to have multiple quiet rooms.

Does the bot need to be aware of the time slots to manage stream permissions in those moments? Or is that the responsibility for the streamers themselves? (don't stream when it's not your time)

kentcdodds commented 3 years ago

I think the vibe I want is: "If the stream is open, then go ahead and stream whenever." Kinda like a room in the real-world. This is why having a few available rooms that could go concurrently could be useful. But maybe we can wait until that need arrises before we make multiple rooms.

smeijer commented 3 years ago

That makes sense.

I've seen two needs within the community.

  1. The more structured ones, like Bala and Jacob are planning to do ("office hours", fixed time and day).
  2. Unstructured, ad-hoc screen sharing for longer time spans.

I think it's important to have a place for both. But without the ad-hoc screen sharing messing up the schedules of "community office hours".

marcosvega91 commented 3 years ago

I like the idea of having streaming rooms I saw other members stream in the past. It could be awesome to see the schedules somewhere so I can subscribe to what I like. Maybe is what Kent is saying but what I mean is to have a channel where streamers could write their schedules and I can subscribe with emoji to what I'm interested and be notified.

kentcdodds commented 3 years ago

That would be cool indeed. Unfortunately, that would either require a bunch of new roles to manage or an external app, neither of which I personally have time to do 😬

kentcdodds commented 3 years ago

I'm hoping we can start this out as simple as possible.

smeijer commented 3 years ago

@marcosvega91 , maybe a command like ?announce-stream {iso date string} or ?reserve-slot {iso date string}, with max 2 weeks in advance? And the bot can update a sticky post in a #stream-schedule channel that shows the schedule between {now} and {now + 2 weeks}? Would that fit the "as simple as possible" requirement? :innocent:

Mods can then keep an eye on the streamers, and see if they respect their timeslots and don't try to steal someone elses time.

kentcdodds commented 3 years ago

Ah, and then when the time arrives, the bot can @-mention all the people who reacted to that stream announcement to let them know that the stream is starting.

smeijer commented 3 years ago

Yes! So the members don't subscribe to a specific streamer, but to the "community streamers". That way the bigger streamers help the smaller ones grow as well.

Edit, or at least, if the bot keeps updating the one announcement message.

Alternative is to post a message per stream-announcement. And that way members can indeed subscribe to specific streams.

marcosvega91 commented 3 years ago

@marcosvega91 , maybe a command like ?announce-stream {iso date string} or ?reserve-slot {iso date string}, with max 2 weeks in advance? And the bot can update a sticky post in a #stream-schedule channel that shows the schedule between {now} and {now + 2 weeks}? Would that fit the "as simple as possible" requirement? :innocent:

Mods can then keep an eye on the streamers, and see if they respect their timeslots and don't try to steal someone elses time.

Yes I like this idea :)

kentcdodds commented 3 years ago

Yeah, I was thinking that every time a streamer uses the command ?schedule-stream the bot creates a comment in the stream-schedule channel (similar to the clubs command) and people can react to the ones they want to be notified about. Then, when the time comes, the bot can delete the message and notify everyone who's reacted to it with a .

Should be relatively simple I think.

?schedule-stream January 20th 3:00 PM - 8:00 PM MDT

Thoughts on that?

marcosvega91 commented 3 years ago

Could be useful to add also the subject, what do you think ?

smeijer commented 3 years ago

@marcosvega91 definitely a subject! People want to know to what they subscribe.

Also, dumping this here, might become handy.

https://github.com/wanasit/chrono

kentcdodds commented 3 years ago

Ah yeah, indeed.

?schedule-stream "Migrating to Tailwind" on January 20th from 3:00 PM - 8:00 PM MDT

This would create the following comment:

📣 On January 20th from 3:00 PM - 8:00 PM MDT (<link to timezone conversion maybe>) @so-and-so will be live streaming "Migrating to Tailwind." React with ✋ to be notified when the time arrives.

And it could also auto-add a ✋ reaction from the bot to make it easier to add your own reaction.

Then as part of the bot's cleanup phase (which happens every 5 seconds), it could check all the scheduled streams to see whether their time has passed and delete the message/notify the react-ors + the streamer.

balavishnuvj commented 3 years ago

For structured "streams" should we book the time-slot every week?

juhanakristian commented 3 years ago

What about streaming to YouTube/Twitch at the same time? Is it allowed? If so, there could be a emoji on the comment showing which platforms the stream will be visible in.

Some people may be surprised if they join a stream in Discord and end up in a YouTube video.

smeijer commented 3 years ago

@juhanakristian, that requires some setup from the streamer right?

Perhaps simply cover that by adding a notice to the "schedule channel"?

Please understand that streamers might record their video for republishing purposes. By joining their stream, you might become part of their cast.

Or something of that idea, but written by a native English speaker.

juhanakristian commented 3 years ago

@smeijer Your're right, it would require some setup or the bot should support defining platforms in ?schedule-stream. But I think a notice would probably be fine 👍

marcosvega91 commented 3 years ago

Yes to stream on different platforms the stream should configure its environment

marcosvega91 commented 3 years ago

Is someone want to work on this? Otherwise, I could give a look today :)

Aprillion commented 3 years ago
?schedule-stream January 20th 3:00 PM - 8:00 PM MDT

Does the bot have a recyclable datetime parser for this format already? I suspect the clubs bot only treats it as a string, not parsing the datetime object from the string... Since the notifications need to know the actual datetime, I vote for ISO format for timezone offset and duration - https://en.wikipedia.org/wiki/ISO_8601

=> 2020-01-20T15:30−07:00/2020-01-20T20:00−07:00

Aprillion commented 3 years ago

Is someone want to work on this? Otherwise, I could give a look today :)

Feel free to make a first version, and then use it to announce a live coding session for bugfixing / improving it 😂 I wouldn't know where to start on my own and not enough time to figure it out,, but if I won't be busy for the live bugfixing, I would like to join and see how it's done / help to brainstorm.

kentcdodds commented 3 years ago

Does the bot have a recyclable datetime parser for this format already?

No, but that's why @smeijer suggested https://github.com/wanasit/chrono which I think could allow us to have this.

For structured "streams" should we book the time-slot every week?

I think we really should address this. I do want to keep this as simple as possible, but I think there are probably some folks who would like to have a regular schedule.

My thought is, let's start with the simple version that may require a little manual effort at first, then we'll know more about the needs and limitations and can go forward and iterate to a better solution.

Aprillion commented 3 years ago

Hm, do Discord bots have a persistence layer out of the box? E.g. to remember to notify people on scheduled time after we restart the bot for some updates..

kentcdodds commented 3 years ago

They do not. All "persistence" we have so far with the bot is in the form of messages (in the onboarding channels, the active clubs channel, and private channels) or a gist (for the ?thanks command). In this case, the plan is to have the bot check the scheduled streams channel for all messages for the scheduled streams on a regular interval (like it does currently for various purposes during what's called the "cleanup phase") and for any streams that are at (or past) their start time, it'll delete the message and notify all people who reacted to the message with ✋ (most likely via a message sent in the chat-with-bots channel).

I don't think we'll need persistence here at the start. We may need it if we do a recurring schedule thing. Perhaps a github gist will be sufficient for that as well?