Fritz.StreamTools
Fritz.StreamTools copied to clipboard
[WIP] Added pub sub message converter
adding message converter to move all json parsing in to one location
@csharpfritz I would like to add unit tests for the converter. Can you please provide examples of real messages for each type?
Twitch's docs are originally at: https://dev.twitch.tv/docs/pubsub
The notifications arrive as messages in the following format, where the notification is stringified JSON:
{
"type": "MESSAGE",
"data": {
"topic": "channel-bits-events-v2.46024993",
"message": "{\"data\":{\"user_name\":\"jwp\",\"channel_name\":\"bontakun\",\"user_id\":\"95546976\",\"channel_id\":\"46024993\",\"time\":\"2017-02-09T13:23:58.168Z\",\"chat_message\":\"cheer10000 New badge hype!\",\"bits_used\":10000,\"total_bits_used\":25000,\"context\":\"cheer\",\"badge_entitlement\":{\"new_version\":25000,\"previous_version\":10000}},\"version\":\"1.0\",\"message_type\":\"bits_event\",\"message_id\":\"8145728a4-35f0-4cf7-9dc0-f2ef24de1eb6\",\"is_anonymous\":true}"
}
}
The ChannelPointsRedemption message is defined as:
{
"type": "reward-redeemed",
"data": {
"timestamp": "2019-11-12T01:29:34.98329743Z",
"redemption": {
"id": "9203c6f0-51b6-4d1d-a9ae-8eafdb0d6d47",
"user": {
"id": "30515034",
"login": "davethecust",
"display_name": "davethecust"
},
"channel_id": "30515034",
"redeemed_at": "2019-12-11T18:52:53.128421623Z",
"reward": {
"id": "6ef17bb2-e5ae-432e-8b3f-5ac4dd774668",
"channel_id": "30515034",
"title": "hit a gleesh walk on stream",
"prompt": "cleanside's finest \n",
"cost": 10,
"is_user_input_required": true,
"is_sub_only": false,
"image": {
"url_1x": "https://static-cdn.jtvnw.net/custom-reward-images/30515034/6ef17bb2-e5ae-432e-8b3f-5ac4dd774668/7bcd9ca8-da17-42c9-800a-2f08832e5d4b/custom-1.png",
"url_2x": "https://static-cdn.jtvnw.net/custom-reward-images/30515034/6ef17bb2-e5ae-432e-8b3f-5ac4dd774668/7bcd9ca8-da17-42c9-800a-2f08832e5d4b/custom-2.png",
"url_4x": "https://static-cdn.jtvnw.net/custom-reward-images/30515034/6ef17bb2-e5ae-432e-8b3f-5ac4dd774668/7bcd9ca8-da17-42c9-800a-2f08832e5d4b/custom-4.png"
},
"default_image": {
"url_1x": "https://static-cdn.jtvnw.net/custom-reward-images/default-1.png",
"url_2x": "https://static-cdn.jtvnw.net/custom-reward-images/default-2.png",
"url_4x": "https://static-cdn.jtvnw.net/custom-reward-images/default-4.png"
},
"background_color": "#00C7AC",
"is_enabled": true,
"is_paused": false,
"is_in_stock": true,
"max_per_stream": { "is_enabled": false, "max_per_stream": 0 },
"should_redemptions_skip_request_queue": true
},
"user_input": "yeooo",
"status": "FULFILLED"
}
}
}
I have looked at the Docs but your original code does not match the examples. I was hoping to get some samples based on your channel.