Closed 204065248 closed 2 months ago
it doesn't work properly
Isn't helpful. And for me it works really good (only problem is the vm itself, but that isn't caused by this tool)
There is a working fork: https://github.com/Windows200000/TwitchDropsMiner-updated
Migration instructions below: https://github.com/DevilXD/TwitchDropsMiner/issues/462#issuecomment-2145800594
For me there was no progress counted for Party Animals (ended now), and there is none for Halo Infinite.
GUI shows progress as if it was working:
Whereas https://www.twitch.tv/drops/inventory shows nada.
Same. Miner is showing progress while my inventory is not.
Progress was made due to watching for real.
Having the same problem. Something must have changed on Twitch's side?
Same issue here, there's been no progress at all today through the miner but progress does happen when watching normally. Had assumed it was related to #301 but I guess this is a more widespread issue.
It is twitch problem, not software problem. Simulated watching is not accepted by twitch now.
Is there no way to solve it?
+1 to this issue, been happening for a few days now actually. Not only did the app not count towards any drops, it also somehow messed with the drops inventory and now real viewing doesn't seem to register accurately. Works fine with a different account on the same device, so I'm guessing Twitch have added some server-side checks that prohibit drops on flagged accounts.
This is a real issue and not related to accounts. The miner does currently not contribute to drop progress (watching normally on the same account still does).
2024-05-10 12:41:57: Progress: 55/240 - Campaign(Rise Online, ROW - Twitch Drop 31, 0/1)
2024-05-10 12:41:57: CALL: Drop progress from active search: ROW - Twitch Drop 31 (Rise Online, 55/240)
2024-05-10 12:42:57: CALL: No drop update from the websocket received
2024-05-10 12:42:57: Progress: 56/240 - Campaign(Rise Online, ROW - Twitch Drop 31, 0/1)
2024-05-10 12:42:57: CALL: Drop progress from active search: ROW - Twitch Drop 31 (Rise Online, 56/240)
2024-05-10 12:43:02: CALL: militantmeat33 stays OFFLINE
2024-05-10 12:43:35: CALL: kettletoro stays OFFLINE
2024-05-10 12:43:43: CALL: Channel update from websocket: MrPokke
2024-05-10 12:43:56: CALL: No drop update from the websocket received
2024-05-10 12:43:56: Progress: 57/240 - Campaign(Rise Online, ROW - Twitch Drop 31, 0/1)
2024-05-10 12:43:56: CALL: Drop progress from active search: ROW - Twitch Drop 31 (Rise Online, 57/240)
2024-05-10 12:44:56: CALL: No drop update from the websocket received
2024-05-10 12:44:56: Progress: 58/240 - Campaign(Rise Online, ROW - Twitch Drop 31, 0/1)
2024-05-10 12:44:56: CALL: Drop progress from active search: ROW - Twitch Drop 31 (Rise Online, 58/240)
2024-05-10 12:45:43: INFO: MrPokke status has been updated (🎁: ❌ -> ❌)
2024-05-10 12:45:56: CALL: No drop update from the websocket received
2024-05-10 12:45:56: Progress: 59/240 - Campaign(Rise Online, ROW - Twitch Drop 31, 0/1)
2024-05-10 12:45:56: CALL: Drop progress from active search: ROW - Twitch Drop 31 (Rise Online, 59/240)
2024-05-10 12:46:48: Earned points for watching: 10, total: 180
2024-05-10 12:46:56: CALL: No drop update from the websocket received
2024-05-10 12:46:56: Progress: 60/240 - Campaign(Rise Online, ROW - Twitch Drop 31, 0/1)
2024-05-10 12:46:56: CALL: Drop progress from active search: ROW - Twitch Drop 31 (Rise Online, 60/240)
2024-05-10 12:47:55: CALL: No drop update from the websocket received
2024-05-10 12:47:55: Progress: 61/240 - Campaign(Rise Online, ROW - Twitch Drop 31, 0/1)
2024-05-10 12:47:55: CALL: Drop progress from active search: ROW - Twitch Drop 31 (Rise Online, 61/240)
2024-05-10 12:47:59: CALL: Maintenance task requests a reload
2024-05-10 12:48:02: INFO: Ryvandal goes OFFLINE
2024-05-10 12:48:03: CALL: Channel update from websocket: Ryvandal
2024-05-10 12:48:05: CALL: Maintenance task waiting until: 13:18:05 (Points)
2024-05-10 12:48:05: INFO: Websocket[5] stopped.
2024-05-10 12:48:05: INFO: Websocket[4] stopped.
2024-05-10 12:48:05: INFO: Websocket[3] stopped.
2024-05-10 12:48:05: INFO: Websocket[2] stopped.
2024-05-10 12:48:05: INFO: Websocket[1] stopped.
2024-05-10 12:48:07: INFO: Websocket[1] connecting...
2024-05-10 12:48:07: INFO: Websocket[2] connecting...
2024-05-10 12:48:07: INFO: Websocket[3] connecting...
2024-05-10 12:48:07: INFO: Websocket[4] connecting...
2024-05-10 12:48:07: INFO: Websocket[5] connecting...
2024-05-10 12:48:08: INFO: Websocket[5] connected.
2024-05-10 12:48:08: INFO: Websocket[2] connected.
2024-05-10 12:48:08: INFO: Websocket[3] connected.
2024-05-10 12:48:08: INFO: Websocket[1] connected.
2024-05-10 12:48:08: INFO: Websocket[4] connected.
2024-05-10 12:48:16: CALL: No drop update from the websocket received
2024-05-10 12:48:16: Progress: 1/240 - Campaign(Rise Online, ROW - Twitch Drop 31, 0/1)
2024-05-10 12:48:16: CALL: Drop progress from active search: ROW - Twitch Drop 31 (Rise Online, 1/240)
2024-05-10 12:49:16: CALL: No drop update from the websocket received
2024-05-10 12:49:16: Progress: 2/240 - Campaign(Rise Online, ROW - Twitch Drop 31, 0/1)
2024-05-10 12:49:16: CALL: Drop progress from active search: ROW - Twitch Drop 31 (Rise Online, 2/240)
2024-05-10 12:50:15: CALL: No drop update from the websocket received
2024-05-10 12:50:15: Progress: 3/240 - Campaign(Rise Online, ROW - Twitch Drop 31, 0/1)
2024-05-10 12:50:15: CALL: Drop progress from active search: ROW - Twitch Drop 31 (Rise Online, 3/240)
2024-05-10 12:50:38: CALL: Channel update from websocket: bhobbsie, game changed: Marbles on Stream -> Magic: The Gathering
2024-05-10 12:51:15: CALL: No drop update from the websocket received
2024-05-10 12:51:15: Progress: 4/240 - Campaign(Rise Online, ROW - Twitch Drop 31, 0/1)
2024-05-10 12:51:15: CALL: Drop progress from active search: ROW - Twitch Drop 31 (Rise Online, 4/240)
2024-05-10 12:52:09: Earned points for watching: 10, total: 190
2024-05-10 12:52:15: CALL: No drop update from the websocket received
2024-05-10 12:52:15: Progress: 5/240 - Campaign(Rise Online, ROW - Twitch Drop 31, 0/1)
2024-05-10 12:52:15: CALL: Drop progress from active search: ROW - Twitch Drop 31 (Rise Online, 5/240)
2024-05-10 12:52:38: INFO: bhobbsie status has been updated (🎁: ✔ -> ❌)
2024-05-10 12:53:15: CALL: No drop update from the websocket received
2024-05-10 12:53:15: Progress: 6/240 - Campaign(Rise Online, ROW - Twitch Drop 31, 0/1)
2024-05-10 12:53:15: CALL: Drop progress from active search: ROW - Twitch Drop 31 (Rise Online, 6/240)
2024-05-10 12:53:17: INFO: qcrixus_ goes OFFLINE
+1. The server may count by requesting frequency of ts files?
Same issue.
It is twitch problem, not software problem. Simulated watching is not accepted by twitch now.
Source?
As commented before, it seems Twitch might have flagged accounts. I'm getting 1-2% progress for 1 hour of real watching, which makes drops basically impossible - that is, having a channel open, with sound. Emoting just in case, too. I've been having this issue since months ago, though. TDW fixed that.
I have also not been getting progress towards any drops in the past days
for reference, I just started real watching for drops on another account (and browser) and it started progressing normally. Dang, now I need to move all the twitch connections I made to another account -_-
for reference, I just started real watching for drops on another account (and browser) and it started progressing normally. Dang, now I need to move all the twitch connections I made to another account -_-
My manual progress seems to be fine, tho, are you sure you closed TDM before trying to manually watch?
Same. Miner is showing progress while my inventory is not.
Progress was made due to watching for real.
+1 same problem for me
I think I'm also having this issue, and like NotNSANE said, I'm not even able to earn them by regularly watching...
I think I'm also having this issue, and like NotNSANE said, I'm not even able to earn them by regularly watching...
You need to watch LIVE streams. I know, it can be surprising if you have not followed the news about Twitch Drops! 😄
I have tried this stream for Hellcard:
And it works for me:
Of course we are watching live streams... I am using twitch drops since they were released.
On Sun, 12 May 2024, 04:59 Wok, @.***> wrote:
I think I'm also having this issue, and like NotNSANE said, I'm not even able to earn them by regularly watching...
You need to watch LIVE streams. I know, it can be surprising if you have not followed the news about Twitch Drops! 😄
— Reply to this email directly, view it on GitHub https://github.com/DevilXD/TwitchDropsMiner/issues/462#issuecomment-2106156859, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABWUUB2PVUMELCUADOZEDUDZB4ONLAVCNFSM6AAAAABHOYZU2KVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMBWGE2TMOBVHE . You are receiving this because you are subscribed to this thread.Message ID: @.***>
Yeah, I don't understand what you mean about "have to watch live streams"...the hell do you think we're watching? Netflix streams? Also I'm wrong about not being able to earn drops regularly, I can still do it...but yeah as it stands, I think the program isn't currently working as of maybe 3 days ago. I hope that helps. I'm doing everything the same way as always, and updated to the newest build as well.
Yeah, I don't understand what you mean about "have to watch live streams"...the hell do you think we're watching? Netflix streams?
When you go to an offline channel, twitch starts automatically playing a past stream, if fully recorded. I assume that. Tho I don't know, having TDM open while trying to manually watch might also cause issues.
Can we please keep the conversation civil without insulting each other? This is GitHub, not a TikTok comment section.
I am using twitch drops since they were released.
That is what I imagined. As far as I can tell, there has been changes this year. See this tweet in January: https://twitter.com/TwitchSupport/status/1748075440562954551
So if you have been using Twitch Drops since they were released, and then switched at some point to the Miner script without visiting Twitch ever again, then you might not know about these recent changes.
Anyway, as mentioned by @Windows200000, the issue is likely to come from the fact that you had the Miner script running in the background while you were watching the streams.
Yeah, I don't understand what you mean about "have to watch live streams"...the hell do you think we're watching? Netflix streams? Also I'm wrong about not being able to earn drops regularly, I can still do it.
I am glad that you could solve your previous issue with getting drops by watching streams without using the script.
I think the program isn't currently working as of maybe 3 days ago. I hope that helps. I'm doing everything the same way as always, and updated to the newest build as well.
This is a known issue, as reported 3 days ago indeed, and the Miner script has not been updated in the past 2 weeks, so this bug is due to a change on Twitch's side, and possibly related to the aforementioned changes in Twitch's policy against "abusing Drops campaigns". As you can see here, it affects at least another similar script as well: https://github.com/rdavydov/Twitch-Channel-Points-Miner-v2/issues/522
In the meantime, until the Miner script is updated (or worse, that we get more info from Twitch that they would be less lenient with accounts using such scripts), I would stick to watching streams for drops.
have you ever read the tweet? those changes are for STREAMERS, not viewers, since they were streaming static images or rebroadcasts. And that has NOTHING to do with Twitch Drops Miner.
Regardless, TDM always picks up the streamer with most views, which is a partner streamer in most cases and never streams rebroadcasts.
On Sun, 12 May 2024, 06:17 Wok, @.***> wrote:
I am using twitch drops since they were released.
That is exactly what I imagined. As far as I can tell, there has been changes this year. See: https://twitter.com/TwitchSupport/status/1748075440562954551
So if you have been using Twitch Drops since they were released, and then switched at some point to the Miner script without visiting Twitch ever again, then you might not know about these recent changes.
Yeah, I don't understand what you mean about "have to watch live streams"...the hell do you think we're watching? Netflix streams? Also I'm wrong about not being able to earn drops regularly, I can still do it.
I am glad that you could solve your previous issue with getting drops by watching streams without using the script. I imagine this is totally coincidental. 😆
— Reply to this email directly, view it on GitHub https://github.com/DevilXD/TwitchDropsMiner/issues/462#issuecomment-2106180052, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABWUUB3P77T54SQJV3JNDXDZB4XQ7AVCNFSM6AAAAABHOYZU2KVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMBWGE4DAMBVGI . You are receiving this because you are subscribed to this thread.Message ID: @.***>
have you ever read the tweet? those changes are for STREAMERS, not viewers, since they were streaming static images or rebroadcasts.
Well, that has to do with viewers, because rebroadcasts do not work anymore.
And that has NOTHING to do with Twitch Drops Miner.
Exactly. That was a reply to the user who could not get drops the regular way.
I'm not even able to earn them by regularly watching...
Fortunately, the same user then managed to fix their issue with regular streams, though they don't mention how.
Also I'm wrong about not being able to earn drops regularly, I can still do it.
Anyway, now that the topic about accounts being unable to get Twitch Drops the regular way has been debunked, we can close this off-topic talk. The solution to this issue will remain a mystery. 🤣 It could be closing the Miner script, or... watching live streams.
Have you tried to contact the authors of this project or a neighboring one? Were there any comments from them? or with those who understand programming?
if everything is that bad. Then let's think about what to replace it with. and how to use it...
For my support, I was offered to fix a bug in the drop progression. But I use this purely for myself and can’t check it, sorry (I don’t have any extra money at the moment) Well, since they offered to fix it, it means there is a solution... Or they want to deceive me, I don’t know. (sorry, a translator was used)
if everything is that bad. Then let's think about what to replace it with. and how to use it...
I fallback to my previous solution: automatic twitch drops addon and keeping tab open on background, muted@160p
Have you tried to contact the authors of this project or a neighboring one? Were there any comments from them? or with those who understand programming?
if everything is that bad. Then let's think about what to replace it with. and how to use it...
For my support, I was offered to fix a bug in the drop progression. But I use this purely for myself and can’t check it, sorry (I don’t have any extra money at the moment) Well, since they offered to fix it, it means there is a solution... Or they want to deceive me, I don’t know. (sorry, a translator was used)
Is there anything suggesting "it's bad"? Apart for some unfounded speculation, all we know is twitch changed something which broke this bot. That is not anything uncommon for 3rd party access to APIs in general, nor TDM specifically. I could try and look into it, but by the time I'd learn the twitch API etc. someone already familiar will probably look at it and find a solution.
Well, i couldn't leave it alone. The request now looks like this:
event: 'minute-watched',
properties: {
app_session_id: '<REDACTED>',
app_version: '<REDACTED>',
batch_time: 1715542327,
client_time: 1715542326.626,
device_id: '<REDACTED>',
domain: 'www.twitch.tv',
host: 'www.twitch.tv',
platform: 'web',
preferred_language: 'en-US',
referrer_host: 'www.google.com',
referrer_url: 'https://www.google.com/',
received_language: 'en',
tab_session_id: '<REDACTED>',
url: 'https://www.twitch.tv/firewall154?referrer=raid',
benchmark_server_id: '<REDACTED>',
bornuser: false,
browser: '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
browser_family: 'chrome',
browser_version: '124.0',
collapse_right: false,
collapse_left: true,
localstorage_device_id: '<REDACTED>',
location: 'channel',
page_session_id: '<REDACTED>',
referrer: 'https://www.google.com/',
referrer_domain: 'www.google.com',
session_device_id: '<REDACTED>',
theme: 'dark',
viewport_height: 1064,
viewport_width: 1831,
channel: 'firewall154',
channel_id: '183249570',
is_following: false,
is_live: true,
language: 'en',
game: 'Rocket League',
category_id: '30921',
audio_codec: 'mp4a.40.2',
average_bitrate: 6426550,
backend: 'mediaplayer',
broadcast_id: '<REDACTED>',
buffer_empty_count: 2,
buffered_position: 8482.042678,
build_dist_id: 'npm',
catch_up_mode: 'speedup',
cluster: 'ams02',
core_version: '1.28.0-rc.2',
current_bitrate: 6907235,
current_fps: 57,
decoded_frames: 3607,
dropped_frames: 2,
estimated_bandwidth: 961132590,
gap_skip_count: 0,
gap_skip_duration: 0,
hidden: false,
hls_latency_broadcaster: 5324,
hls_latency_ingest: 5398,
initial_buffer_duration: 1000,
live: true,
low_latency: true,
manifest_cluster: 'fra05',
manifest_node: 'video-weaver.fra05',
manifest_node_type: 'weaver_cluster',
mcaps_powerefficient: true,
mcaps_smooth: true,
mcaps_supported: true,
minutes_logged: 142,
mobile_connection_type: 'unknown',
muted: false,
node: 'video-edge-d55360.ams02',
origin_dc: 'iad06',
os_name: 'Windows',
os_version: 'NT 10.0',
play_session_id: '<REDACTED>',
playback_rate: 1,
player: 'site',
player_position: 8477.335095,
player_state: 'Playing',
protocol: 'HLS',
quality: '900p60 (source)',
rendered_frames: 3605,
seconds_offset: 19.921824,
serving_id: '<REDACTED>',
sink_buffer_size: 4.6649041175842285,
sink_type: 'mse-worker',
stream_format: 'chunked',
time: 1715542326.625,
transcode_mode: 'cbr_v1',
transcoder_type: '2023-Transcode-QS-V1',
transport_download_bytes: 48190604,
transport_download_duration: 57075,
transport_first_byte_latency: 1793,
transport_segment_duration: 59982,
transport_segments: 30,
user_agent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
vid_display_height: 191,
vid_display_width: 340,
vid_height: 900,
vid_width: 1600,
video_buffer_size: 4.707583,
video_codec: 'avc1.64002A',
video_decoder_name: 'MediaSource',
video_session_id: '<REDACTED>',
volume: 0.67,
battery_percent: 1,
gpu_supported: false,
gpu_unsupported_reason: 'WebGPU adapter unavailable',
gpu_architecture: '',
gpu_description: '',
gpu_device: '',
gpu_vendor: '',
is_pbyp: false,
guest_star_session_id: null,
guests_pushed_to_obs: null,
squad_stream_id: null,
squad_stream_session_id: null,
squad_stream_presentation_id: null,
is_mod: false,
time_spent_hidden: 2040949,
consent_comscore_ok: false,
content_classification_label_set: '[]',
app_fullscreen: false,
autoplayed: true,
backend_version: '1.28.0-rc.2',
broadcaster_software: 'unknown_rtmp',
chat_visible: true,
chat_visibility_status: 'visible',
content_mode: 'live',
game_id: '30921',
host_channel: null,
host_channel_id: null,
is_ad_playing: false,
logged_in: true,
login: '<REDACTED>',
mse_support: true,
partner: true,
playback_gated: false,
player_size_mode: 'default',
staff: false,
subscriber: false,
turbo: false,
user_id: <REDACTED>,
viewer_exemption_reason: null,
benchmark_session_id: '<REDACTED>',
client_build_id: '<REDACTED>',
distinct_id: '<REDACTED>',
client_app: 'twilight'
}
}
That is a lot more, than TDM sends:
"event": "minute-watched",
"properties": {
"broadcast_id": str(self._stream.broadcast_id),
"channel_id": str(self.id),
"channel": self._login,
"hidden": False,
"live": True,
"location": "channel",
"logged_in": True,
"muted": False,
"player": "site",
"user_id": self._twitch._auth_state.user_id,
}
The TDM version still returns 204, but it does so even with wrong parameters, which is probably why TDM doesn't detect it when stuff breaks, which also makes the response kinda useless. All the parameters still have the same name.
In chrome debug, the two look like this.
TDM: "Request Payload"
{"data":"Random_letters_redacted"}
Native: "Form data"
data=Random_letters_redacted
Perhaps the most obvious difference is, that TDM sends a JSON, while the site now sends the data as an HTML form. (At least that's what I recognize it as, how it's called doesn't really matter.) Now this still could be a thing that might work, depending on how TDM does the whole thing and what twitch supports etc. Would be nice to get a quick reply from @DevilXD or some other contributors. I now have to go to sleep and will try if changing the format works tomorrow, if I find the time.
Hello. Kinda late to this, but I'll try to fix this as soon as I'm able to. Which may take a few days, given I have limited access to a PC now.
That is a lot more, than TDM sends:
TDM has always sent only as much as it was needed to progress drops. If this is not enough now, then the payload should be expanded to include what's needed. Still, most of this information was never needed to keep progressing everything.
Regarding different payload formats, it's kinda been a while ever since I had to touch anything there, so my memory is hazy. I'll need to look into the code to determine if HTML form vs JSON makes any difference. You did the most tedious part though - figuring out the current payload contents. This should speed up designing a new payload that works (assuming it's still possible).
I'll leave it then. Thanks
Hello. Kinda late to this, but I'll try to fix this as soon as I'm able to. Which may take a few days, given I have limited access to a PC now.
I'll leave you to it then. Payload encoding itself is the same. I'll leave the difference between the chrome "copy as fetch" functions here as well, if that becomes useful. Take your time, and thanks for working on this. <3 Site:
"body": "data=Random_letters_redacted",
"method": "POST"
Current TDM:
"body": "{\"data\":\"Random_letters_redacted\"}",
"method": "POST"
The data
parameter to aiohttp's request
method automatically converts the passed in dictionary, into an HTML form, per the documentation: https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession.request
JSON is only used to pack up the payload.
Well, i couldn't leave it alone. The request now looks like this:
event: 'minute-watched', properties: { app_session_id: '<REDACTED>', app_version: '<REDACTED>', batch_time: 1715542327, client_time: 1715542326.626, device_id: '<REDACTED>', domain: 'www.twitch.tv', host: 'www.twitch.tv', platform: 'web', preferred_language: 'en-US', referrer_host: 'www.google.com', referrer_url: 'https://www.google.com/', received_language: 'en', tab_session_id: '<REDACTED>', url: 'https://www.twitch.tv/firewall154?referrer=raid', benchmark_server_id: '<REDACTED>', bornuser: false, browser: '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36', browser_family: 'chrome', browser_version: '124.0', collapse_right: false, collapse_left: true, localstorage_device_id: '<REDACTED>', location: 'channel', page_session_id: '<REDACTED>', referrer: 'https://www.google.com/', referrer_domain: 'www.google.com', session_device_id: '<REDACTED>', theme: 'dark', viewport_height: 1064, viewport_width: 1831, channel: 'firewall154', channel_id: '183249570', is_following: false, is_live: true, language: 'en', game: 'Rocket League', category_id: '30921', audio_codec: 'mp4a.40.2', average_bitrate: 6426550, backend: 'mediaplayer', broadcast_id: '<REDACTED>', buffer_empty_count: 2, buffered_position: 8482.042678, build_dist_id: 'npm', catch_up_mode: 'speedup', cluster: 'ams02', core_version: '1.28.0-rc.2', current_bitrate: 6907235, current_fps: 57, decoded_frames: 3607, dropped_frames: 2, estimated_bandwidth: 961132590, gap_skip_count: 0, gap_skip_duration: 0, hidden: false, hls_latency_broadcaster: 5324, hls_latency_ingest: 5398, initial_buffer_duration: 1000, live: true, low_latency: true, manifest_cluster: 'fra05', manifest_node: 'video-weaver.fra05', manifest_node_type: 'weaver_cluster', mcaps_powerefficient: true, mcaps_smooth: true, mcaps_supported: true, minutes_logged: 142, mobile_connection_type: 'unknown', muted: false, node: 'video-edge-d55360.ams02', origin_dc: 'iad06', os_name: 'Windows', os_version: 'NT 10.0', play_session_id: '<REDACTED>', playback_rate: 1, player: 'site', player_position: 8477.335095, player_state: 'Playing', protocol: 'HLS', quality: '900p60 (source)', rendered_frames: 3605, seconds_offset: 19.921824, serving_id: '<REDACTED>', sink_buffer_size: 4.6649041175842285, sink_type: 'mse-worker', stream_format: 'chunked', time: 1715542326.625, transcode_mode: 'cbr_v1', transcoder_type: '2023-Transcode-QS-V1', transport_download_bytes: 48190604, transport_download_duration: 57075, transport_first_byte_latency: 1793, transport_segment_duration: 59982, transport_segments: 30, user_agent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36', vid_display_height: 191, vid_display_width: 340, vid_height: 900, vid_width: 1600, video_buffer_size: 4.707583, video_codec: 'avc1.64002A', video_decoder_name: 'MediaSource', video_session_id: '<REDACTED>', volume: 0.67, battery_percent: 1, gpu_supported: false, gpu_unsupported_reason: 'WebGPU adapter unavailable', gpu_architecture: '', gpu_description: '', gpu_device: '', gpu_vendor: '', is_pbyp: false, guest_star_session_id: null, guests_pushed_to_obs: null, squad_stream_id: null, squad_stream_session_id: null, squad_stream_presentation_id: null, is_mod: false, time_spent_hidden: 2040949, consent_comscore_ok: false, content_classification_label_set: '[]', app_fullscreen: false, autoplayed: true, backend_version: '1.28.0-rc.2', broadcaster_software: 'unknown_rtmp', chat_visible: true, chat_visibility_status: 'visible', content_mode: 'live', game_id: '30921', host_channel: null, host_channel_id: null, is_ad_playing: false, logged_in: true, login: '<REDACTED>', mse_support: true, partner: true, playback_gated: false, player_size_mode: 'default', staff: false, subscriber: false, turbo: false, user_id: <REDACTED>, viewer_exemption_reason: null, benchmark_session_id: '<REDACTED>', client_build_id: '<REDACTED>', distinct_id: '<REDACTED>', client_app: 'twilight' } }
That is a lot more, than TDM sends:
"event": "minute-watched", "properties": { "broadcast_id": str(self._stream.broadcast_id), "channel_id": str(self.id), "channel": self._login, "hidden": False, "live": True, "location": "channel", "logged_in": True, "muted": False, "player": "site", "user_id": self._twitch._auth_state.user_id, }
The TDM version still returns 204, but it does so even with wrong parameters, which is probably why TDM doesn't detect it when stuff breaks, which also makes the response kinda useless. All the parameters still have the same name.
In chrome debug, the two look like this. TDM: "Request Payload"
{"data":"Random_letters_redacted"}
Native: "Form data"
data=Random_letters_redacted
Perhaps the most obvious difference is, that TDM sends a JSON, while the site now sends the data as an HTML form. (At least that's what I recognize it as, how it's called doesn't really matter.) Now this still could be a thing that might work, depending on how TDM does the whole thing and what twitch supports etc. Would be nice to get a quick reply from @DevilXD or some other contributors. I now have to go to sleep and will try if changing the format works tomorrow, if I find the time.
It was always almost same payload, checked it a few days ago even tried pasting full payload from browser, think it was giving 1-3% progress and stop. https://github.com/robiXxu/base64-json-viewer/tree/96de495017cfe8465e81237159d7680f8393d949
hi there, i think i solved it. to progress twitch drops now have new way. "event": "minute-watched" that we send now depend only on channel points, to increase drop progress we need to WATCH THE STREAM(technically just download the media file).
here is the way how i make it work(it not the optimal way, but it work and require i littlie time to play around to optimize it).
first of all going gql PlaybackAccessToken_Template request(with oauth header), just replace variable "login"
here we recive "value" and "signature"
here we'll get links to different broadcast quality
url: https://usher.ttvnw.net/api/channel/hls/ here channel login.m3u8?sig=signature from previous step&token=value from previous step
response looks like something like that
here i just picking the last link, with lowest video quality
this link will give us some kind a video pagination(idk how to right way name it, so)
and i just make request by one of this links, and thats it
making this requests every 30 seconds(probably can be upon to 60) work good for me
sometimes i have missing 1 or 2 minutes, but drops progress increasing
p.s im afraid of leaking my token or something like that, so i cut some part of every request
p.s im afraid of leaking my token or something like that, so i cut some part of every request
Yeah, the "data" field should not be shared, because it contains the entire request in full, just encoded plain text, including literally everything.
edit: to clarify, it is basically just base64 encoded Hello, world! => SGVsbG8sIHdvcmxkIQ==
, meaning that even if you just share a part SGVsbG8s
, you will be able to just decode it back and get that part of the original string. Hello,
Could you provide the exact code/request, just replacing sensitive data? I could try to implement it for TDM to at least work, tho less efficiently, until DevilXD can take a closer look.
@CrazyEden
Yeah, the "data" field should not be shared, because it contains the entire request in full, just encoded plain text, including literally everything.
here im not using "data" at all, i do not send "old" event "minute-watched", its new requests that no exist in this project
Could you provide the exact code/request, just replacing sensitive data? I could try to implement it for TDM to at least work, tho less efficiently, until DevilXD can take a closer look.
about which one request you need more information? there are only 4 of them
about which one request you need more information? there are only 4 of them
I don't know how you did the requests, but I'm assuming a js script in the console? Just the plain requests you made. (with censored data, similar to what I did)
I'm assuming a js script in the console?
its just chrome devtools, its debugging network request
i have private project where im done this requests, but its kotlin all requests i copied from chrome devtools
hi there, i think i solved it. to progress twitch drops now have new way. "event": "minute-watched" that we send now depend only on channel points, to increase drop progress we need to WATCH THE STREAM(technically just download the media file).
here is the way how i make it work(it not the optimal way, but it work and require i littlie time to play around to optimize it).
first of all going gql PlaybackAccessToken_Template request(with oauth header), just replace variable "login"
here we recive "value" and "signature"
here we'll get links to different broadcast quality url: https://usher.ttvnw.net/api/channel/hls/ here channel login.m3u8?sig=signature from previous step&token=value from previous step response looks like something like that
here i just picking the last link, with lowest video quality this link will give us some kind a video pagination(idk how to right way name it, so)
and i just make request by one of this links, and thats it
making this requests every 30 seconds(probably can be upon to 60) work good for me
sometimes i have missing 1 or 2 minutes, but drops progress increasing
p.s im afraid of leaking my token or something like that, so i cut some part of every request
Hi, how to get value if it says authorization false
I'm assuming a js script in the console?
its just chrome devtools, its debugging network request
i have private project where im done this requests, but its kotlin all requests i copied from chrome devtools
Could you just send me that, with sensitive data removed? It would be really helpful to just rewrite it, instead of trying to build all the requests from scratch.
Hi, how to get value if it says authorization false
you already got it) streamPlaybackAccessToken contain value and signature
Hi, how to get value if it says authorization false
you already got it) streamPlaybackAccessToken contain value and signature
its value?) Shouldn't it be some kind of set of numbers and letters?)
Could you just send me that, with sensitive data removed? It would be really helpful to just rewrite it, instead of trying to build all the requests from scratch.
sry, no, there kind of messy so many classes, files and it will take a long time for me to cut my data
Hi, how to get value if it says authorization false
you already got it) streamPlaybackAccessToken contain value and signature
its value?) Shouldn't it be some kind of set of numbers and letters?)
yeah, its value, json
what to do?
probably you truing use old sig with new token or old token with new sig. they are irreplaceable if you send new request to fetch new token and sig, they can only be used with each other(from the same response)
@CrazyEden i suggest you temporarily remove the new way mentioned above. Because I have been warned by twitch
they asked me to delete all my comments and code. i think they're watching us
Does anyone know how the hashes in constants.py are made?
what to do?
probably you truing use old sig with new token or old token with new sig. they are irreplaceable if you send new request to fetch new token and sig, they can only be used with each other(from the same response)
i get this, but progress not working
@giask11 thanks I'll know
Does anyone know how the hashes in constants.py are made?
its some kind of combination of type request and version, its static for the same type requests
i get this, but progress not working
now send request by one of this(or couple) link and it should work(checked a moment ago)
its some kind of combination of type request and version, its static for the same type requests
Well yeah, but It looks like it needs it. I've been stuck on this for ages, can't find any info on it anywhere.
19:38:53: DEBUG: GQL Response: {'errors': [{'message': 'PersistedQueryNotFound'}], 'extensions': {'durationMilliseconds': 4, 'operationName': 'PlaybackAccessToken_Template', 'requestID': '<censored>'}}
I want to drop treasure in Arena Breakout game, but it doesn't work properly