Giter Club home page Giter Club logo

dropbot's Issues

Bot doesn't recognize Claimed Drop

Bug: Sometimes the Drop is already claimed but the Bot doesn't recognize it.
Also see here #21
The following happens:

  • Bot compares the names from https://twitch.facepunch.com/ to the claimed Drop names. Sometimes the names don't match so the Bot wont recognize it as claimed and will take a bit longer to skip the claimed channel.

Will be fixed in a future release.

Can't login in time

Using the new 1.3.3 version and I am getting this error after sucefully login into my account.
image
Any fix?

Crashing on trying to find new channel

There seems to be an issue when you already have the drop. I have 1.3.2.2 Hot Fix 2

It doesn't seem to scan for drops you already have and only channel up currently is ArikaSaki. When it watches it seems to finally decide I must already have the drop. however then just completely fails to find another channel and crashes as below.

Watching https://www.twitch.tv/AriaSaki...

Current Progress: - % | Try: 1
Current Progress: - % | Try: 2

Failed to get a valid Drop to progress on this Channel or it is already claimed... Looking for a new one...

Checking for Live Channels

Going to Starting Channel...
(node:20552) UnhandledPromiseRejectionWarning: Error: Protocol error (Page.navigate): Invalid parameters Failed to deserialize params.url - BINDINGS: mandatory field missing at position 49
at S:\Downloads\TTVDropBot\node_modules\puppeteer\lib\cjs\puppeteer\common\Connection.js:208:63
at new Promise ()
at CDPSession.send (S:\Downloads\TTVDropBot\node_modules\puppeteer\lib\cjs\puppeteer\common\Connection.js:207:16)
at next (S:\Downloads\TTVDropBot\node_modules\puppeteer-extra-plugin-stealth\evasions\sourceurl\index.js:30:43)
at CDPSession.send (S:\Downloads\TTVDropBot\node_modules\puppeteer-extra-plugin-stealth\evasions\sourceurl\index.js:46:18)
at navigate (S:\Downloads\TTVDropBot\node_modules\puppeteer\lib\cjs\puppeteer\common\FrameManager.js:108:47)
at FrameManager.navigateFrame (S:\Downloads\TTVDropBot\node_modules\puppeteer\lib\cjs\puppeteer\common\FrameManager.js:91:13)
at Frame.goto (S:\Downloads\TTVDropBot\node_modules\puppeteer\lib\cjs\puppeteer\common\FrameManager.js:416:41)
at Page.goto (S:\Downloads\TTVDropBot\node_modules\puppeteer\lib\cjs\puppeteer\common\Page.js:789:53)
at StreamPage (S:\Downloads\TTVDropBot\src\Pages\StreamPage.js:26:24)
(Use TTVDropBot --trace-warnings ... to show where the warning was created)
(node:20552) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:20552) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Compiled Files Placed in Master - Cloning Slow

Currently the compiled files are placed under the package directory, and each took up >50MB of size. The whole repo was 476.65 MiB making cloning the repo under low bandwidth environment slow.

root@instance-prod:~# git clone https://github.com/Zaarrg/TTVDropBot
Cloning into 'TTVDropBot'...
remote: Enumerating objects: 906, done.
remote: Counting objects: 100% (51/51), done.
remote: Compressing objects: 100% (31/31), done.
remote: Total 906 (delta 16), reused 51 (delta 16), pack-reused 855
Receiving objects: 100% (906/906), 476.65 MiB | 12.04 MiB/s, done.
Resolving deltas: 100% (535/535), done.
Updating files: 100% (44/44), done.

Consider moving the compiled files to a separate branch or use Release. You can always do pre-releases and alpha versions.

Stuck on stream when it goes offline

If the stream you are "watching" goes offline you are stuck in the watching loop.
Makes the whole script useless when you want to idle while sleeping.

A suugestion about prioritylist.

TTVDropBot is a nice work. I deployed it on server and it saved me a lot of trouble. Appreciate it!

Some games like warframe, the drop is only active from every Thursday to Sunday. The bot removes games without active drop campaigns from prioritylist at startup, so I'll have to manually restart the bot sometimes to let it watch warframe.

Will it be better if the bot can monitor the drop status from prioritylist and start watching when it's active instead of just removing the games?

Docker

I run a bunch of stuff like this with docker-compose
So I would love official support/instructions for docker/docker-compose

Failed to launch the browser process!

(node:7904) UnhandledPromiseRejectionWarning: Error: Failed to launch the browser process! spawn C:\Program Files (x86)\Google\Chrome\Application ENOENT

TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md

at onClose (C:\Users\yujis\Downloads\Compressed\TTVDropBot_2\node_modules\puppeteer\lib\cjs\puppeteer\node\BrowserRunner.js:193:20)
at ChildProcess.<anonymous> (C:\Users\yujis\Downloads\Compressed\TTVDropBot_2\node_modules\puppeteer\lib\cjs\puppeteer\node\BrowserRunner.js:185:85)
at ChildProcess.emit (events.js:315:20)
at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
at onErrorNT (internal/child_process.js:465:16)
at processTicksAndRejections (internal/process/task_queues.js:80:21)

(Use TTVDropBot --trace-warnings ... to show where the warning was created)
(node:7904) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:7904) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Program closes when adding a profile path

Tested on mine and friends PC now, and when adding the profile path after adding the chrome.exe path, the program just closes.

However editing the settings file and manually adding the path to that works fine.

Not sure what causes it to auto close during setup.

[QUESTIONS] About offline-streams

if I start the program while the streams is offline, when he go online, the program automatically start watching? or, I need do something for he do that?

  1. That's program works on heroku? if yes, you can add a button to easy deploy here on github :D

Linux ready

Hey,
would be a cool feature if you make an linux version for it,
easy to make (I guess?!) since many people got a little linux server to run a few things its cool to run the script there so you dont need your pc to be online.

with kind regards

Stuck at getting current progress.

I tried reinstalling and running as admin but it’s stuck at current progress. I opened chrome to
Watch the streamer and made sure progress was being counted but on the app its stuck.

Error: Protocol error (Page.navigate): Invalid parameters Failed to deserialize params.url - BINDINGS: mandatory field missing at position 49

Watching (twitch link here)

Reached 100 %... Looking for new Channel...

Checking for Live Channels

Going to Starting Channel...
(node:5276) UnhandledPromiseRejectionWarning: Error: Protocol error (Page.navigate): Invalid parameters Failed to deserialize params.url - BINDINGS: mandatory field missing at position 49
at C:\Users\OneDrive\Desktop\node_modules\puppeteer\lib\cjs\puppeteer\common\Connection.js:208:63
at new Promise ()
at CDPSession.send (C:\Users\OneDrive\Desktop\node_modules\puppeteer\lib\cjs\puppeteer\common\Connection.js:207:16)
at next (C:\Users\OneDrive\Desktop\node_modules\puppeteer-extra-plugin-stealth\evasions\sourceurl\index.js:30:43)
at CDPSession.send (C:\Users\OneDrive\Desktop\node_modules\puppeteer-extra-plugin-stealth\evasions\sourceurl\index.js:46:18)
at navigate (C:\Users\OneDrive\Desktop\node_modules\puppeteer\lib\cjs\puppeteer\common\FrameManager.js:108:47)
at FrameManager.navigateFrame (C:\Users\OneDrive\Desktop\node_modules\puppeteer\lib\cjs\puppeteer\common\FrameManager.js:91:13)
at Frame.goto (C:\Users\OneDrive\Desktop\node_modules\puppeteer\lib\cjs\puppeteer\common\FrameManager.js:416:41)
at Page.goto (C:\Users\OneDrive\Desktop\node_modules\puppeteer\lib\cjs\puppeteer\common\Page.js:789:53)
at StreamPage (C:\Users\OneDrive\Desktop\src\Pages\StreamPage.js:31:24)
(Use TTVDropBot --trace-warnings ... to show where the warning was created)
(node:5276) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:5276) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Twitch URL Interpreted as Invalid

Steps to reproduce

git clone https://github.com/Zaarrg/TTVDropBot
cd TTVDropBot
yarn install
yarn start:production

Select custom channel - Warframe
Enter url: https://twitch.tv/warframe

>> Please provide a Valid URL...

Similarly, yesterday while Warframe was live, the current dev channel cannot be auto-watched correctly (Select Warframe Campaign - Prime Time xxx) - it returns an error similar to #50, I recall it was something to do with the GAMEID, but I've lost my log due to a restart. Other channels/campaigns seemed to be fine.

image

No Custom Channels Found...
? Do you wanna add a Custom Channel? Yes
? Please provide a Name for this Custom Channel: r6
? Please provide the Twitch Url: https://twitch.tv/rainbow6
>> Please provide a Valid URL...

Missing 2 streamers - Cyr and Sonii

Usually there is only 9 drops. But this time there is 11. https://twitch.facepunch.com/

It seems your program stops checking at 9, so is missing Cyr and Sonii off the streamer list. Possibly needs to be amended to check for larger streamer lists for these instances.

Getting all Drops and other Details

https://www.twitch.tv/Myth | Myth Assault Rifle | Live

https://www.twitch.tv/Voyboy | Voyboy Hammer | Offline

https://www.twitch.tv/xQcOW | xQc SAR | Offline

https://www.twitch.tv/AriaSaki | Ariasaki Hammer | Live

https://www.twitch.tv/Sykkuno | Sykkuno Assault Rifle | Offline

https://www.twitch.tv/ludwig | Ludwig Sleeping Bag | Offline

https://www.twitch.tv/pokimane | Pokimane Painted Garage Door | Offline

https://www.twitch.tv/Trainwreckstv | Trainwreckstv Combat Knife | Offline

https://www.twitch.tv/Account%20Not%20Found | WillNeff Burlap Headwrap | Offline

Checking for Live Channels

Things to do.....

at the end of each session it would be necessary to check all the channels to see who is live because the bot does not do it at the moment, and it would be necessary to put the user at the first session to mark the completed drops so the bot does not watch the channel with the completed drop

[Docker] Disable watching random games when all drops collected for one game?

Hello, I couldn't find if there was a Docker env variable for this, so I figured I'd ask. I'm currently using TTVDropBot to watch one specific game for drops. However, when I've collected all drops for that game, it will randomly pick another game to watch. This is really cluttering up my drops inventory within Twitch, and I'd like to stop that.

Can I make it so that TTVDropBot is always afking one specific game, even after all drops have been collected for that week?

Login takes too long error even when I auto login!

Currently having a problem with the latest build. Can't login properly ever since the last twitch drop using the program... Can you please check this issue out? I use 2FA so i hope that doesn't cause issues.

MacOS issue

So I tried to use this software on MacOS the chrome login stuff is all doing well but after i start watching an error occurred

`Watching` https://www.twitch.tv/rainbow6latam...
 
/Users/songboyao/Downloads/TTVDropBot-main/src/Pages/StreamCustomPage.js:267
    const Pointscontent = await Points.getProperty('textContent')
                                       ^

TypeError: Cannot read property 'getProperty' of undefined
    at farmpoint (/Users/songboyao/Downloads/TTVDropBot-main/src/Pages/StreamCustomPage.js:267:40)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async /Users/songboyao/Downloads/TTVDropBot-main/src/Pages/StreamCustomPage.js:111:13
    at async /Users/songboyao/Downloads/TTVDropBot-main/src/Pages/StreamCustomPage.js:80:9
    at async CurrentProgressEvent (/Users/songboyao/Downloads/TTVDropBot-main/src/Pages/StreamCustomPage.js:78:5)
    at async StreamCustomPage (/Users/songboyao/Downloads/TTVDropBot-main/src/Pages/StreamCustomPage.js:67:5)
    at async /Users/songboyao/Downloads/TTVDropBot-main/src/Pages/WatchingPage.js:44:17
    at async /Users/songboyao/Downloads/TTVDropBot-main/src/Pages/WatchingPage.js:37:9
    at async Watch (/Users/songboyao/Downloads/TTVDropBot-main/src/Pages/WatchingPage.js:23:5)

Auto change the resolution/sound and so on (Suggestion)

Hello. Love using the bot!

Would be nice if you made it so that it sets all the streams to 160p or the lowest available resolution an also made it mute all channels automatically.

I've also encountered an issue with channels who have made their stream inappropriate to younger viewers. it will just stay stuck there not watching the stream until i click the button.

Couldn't Auto Restart Once Encounters An Issue

While leaving the script in a remote machine to run, it returned the below lengthy error message after around 6-7 hours of watching

It said it returned a 400 code (Bad Request)

The remote machine has 500Mbps of bandwidth, not excellent, but due to the nature of ISP/DC network, it's meant to be more reliable than home network. And the ping looked more than fine.

root@instance-prod:~# speedtest-cli
Retrieving speedtest.net configuration...
Testing from Oracle Cloud (xxx)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Jump Networks Ltd (London) [39.19 km]: 4.22 ms
Testing download speed................................................................................
Download: 494.91 Mbit/s
Testing upload speed......................................................................................................
Upload: 289.71 Mbit/s
root@instance-prod:~# ping twitch.tv
PING twitch.tv (151.101.194.167) 56(84) bytes of data.
64 bytes from 151.101.194.167 (151.101.194.167): icmp_seq=1 ttl=58 time=1.20 ms
64 bytes from 151.101.194.167 (151.101.194.167): icmp_seq=2 ttl=58 time=1.22 ms
64 bytes from 151.101.194.167 (151.101.194.167): icmp_seq=3 ttl=58 time=1.22 ms
64 bytes from 151.101.194.167 (151.101.194.167): icmp_seq=4 ttl=58 time=1.22 ms
64 bytes from 151.101.194.167 (151.101.194.167): icmp_seq=5 ttl=58 time=1.25 ms
^C
--- twitch.tv ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 1.200/1.222/1.247/0.014 ms

Due to the nature of this error is potentially unknown, is it possible to add two features:

  • Retry the connection if the previous one failed
  • Restart the script with the same config if it encounters some error

Currently it's impossible to run and forget, as eventually it will run into some issue that needs mannual operations. Thanks.

Below are the error messages:

Watching rainbow6 | Points: 55615
Current Progress: 0 % | Watched 0/240 Minutes | Drop 1/2 | Status Active | isClaimed true
Current Progress: 74.58 % | Watched 179/240 Minutes | Drop 2/2 | Status Active | isClaimed false

ERROR: Could not load https://www.twitch.tv... Check your connection...
Unhandled Rejection at: Promise {
  <rejected> Error: Request failed with status code 400
      at createError (/root/TTVDropBot/node_modules/axios/lib/core/createError.js:16:15)
      at settle (/root/TTVDropBot/node_modules/axios/lib/core/settle.js:17:12)
      at IncomingMessage.handleStreamEnd (/root/TTVDropBot/node_modules/axios/lib/adapters/http.js:322:11)
      at IncomingMessage.emit (node:events:538:35)
      at endReadableNT (node:internal/streams/readable:1345:12)
      at processTicksAndRejections (node:internal/process/task_queues:83:21) {
    [stack]: 'Error: Request failed with status code 400\n' +
      '    at createError (/root/TTVDropBot/node_modules/axios/lib/core/createError.js:16:15)\n' +
      '    at settle (/root/TTVDropBot/node_modules/axios/lib/core/settle.js:17:12)\n' +
      '    at IncomingMessage.handleStreamEnd (/root/TTVDropBot/node_modules/axios/lib/adapters/http.js:322:11)\n' +
      '    at IncomingMessage.emit (node:events:538:35)\n' +
      '    at endReadableNT (node:internal/streams/readable:1345:12)\n' +
      '    at processTicksAndRejections (node:internal/process/task_queues:83:21)',
    [message]: 'Request failed with status code 400',
    config: {
      transitional: {
        silentJSONParsing: true,
        forcedJSONParsing: true,
        clarifyTimeoutError: false
      },
      adapter: <ref *1> [Function: httpAdapter] {
        [length]: 1,
        [name]: 'httpAdapter',
        [prototype]: { [constructor]: [Circular *1] }
      },
      transformRequest: [
        [Function: transformRequest] {
          [length]: 2,
          [name]: 'transformRequest',
          [prototype]: [Object]
        },
        [length]: 1
      ],
      transformResponse: [
        [Function: transformResponse] {
          [length]: 1,
          [name]: 'transformResponse',
          [prototype]: [Object]
        },
        [length]: 1
      ],
      timeout: 0,
      xsrfCookieName: 'XSRF-TOKEN',
      xsrfHeaderName: 'X-XSRF-TOKEN',
      maxContentLength: -1,
      maxBodyLength: -1,
      validateStatus: <ref *2> [Function: validateStatus] {
        [length]: 1,
        [name]: 'validateStatus',
        [prototype]: { [constructor]: [Circular *2] }
      },
      headers: {
        Accept: 'application/json, text/plain, */*',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0',
        encoding: 'utf8',
        'Client-Id': 'kimne78kx3ncx6brgo4mv6wki5h1ko',
        Authorization: ''
      },
      raxConfig: {
        retry: 3,
        noResponseRetries: 3,
        retryDelay: 60000,
        statusCodesToRetry: [ [Array], [Array], [Array], [length]: 3 ],
        httpMethodsToRetry: [
          'GET',
          'HEAD',
          'OPTIONS',
          'DELETE',
          'PUT',
          'POST',
          [length]: 6
        ],
        onRetryAttempt: [Function: onRetryAttempt] {
          [length]: 1,
          [name]: 'onRetryAttempt'
        },
        backoffType: 'static',
        currentRetryAttempt: 0,
        instance: <ref *3> [Function: wrap] {
          [length]: 0,
          [name]: 'wrap',
          [prototype]: [Object],
          request: [Function],
          getUri: [Function],
          delete: [Function],
          get: [Function],
          head: [Function],
          options: [Function],
          post: [Function],
          put: [Function],
          patch: [Function],
          defaults: [Object],
          interceptors: [Object],
          create: [Function],
          Axios: [Function],
          Cancel: [Function],
          CancelToken: [Function],
          isCancel: [Function],
          VERSION: '0.26.1',
          all: [Function],
          spread: [Function],
          isAxiosError: [Function],
          default: [Circular *3]
        },
        checkRetryAfter: true,
        maxRetryAfter: 300000
      },
      method: 'get',
      url: 'https://www.twitch.tv/rainbow6',
      data: undefined
    },
    request: <ref *5> ClientRequest {
      _events: [Object: null prototype] {
        abort: [Function (anonymous)] {
          [length]: 3,
          [name]: '',
          [arguments]: null,
          [caller]: null,
          [prototype]: [Object]
        },
        aborted: [Function (anonymous)] {
          [length]: 3,
          [name]: '',
          [arguments]: null,
          [caller]: null,
          [prototype]: [Object]
        },
        connect: [Function (anonymous)] {
          [length]: 3,
          [name]: '',
          [arguments]: null,
          [caller]: null,
          [prototype]: [Object]
        },
        error: [Function (anonymous)] {
          [length]: 3,
          [name]: '',
          [arguments]: null,
          [caller]: null,
          [prototype]: [Object]
        },
        socket: [Function (anonymous)] {
          [length]: 3,
          [name]: '',
          [arguments]: null,
          [caller]: null,
          [prototype]: [Object]
        },
        timeout: [Function (anonymous)] {
          [length]: 3,
          [name]: '',
          [arguments]: null,
          [caller]: null,
          [prototype]: [Object]
        },
        prefinish: [Function: requestOnPrefinish] {
          [length]: 0,
          [name]: 'requestOnPrefinish',
          [prototype]: [Object]
        }
      },
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [ [length]: 0 ],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: false,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      _contentLength: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      socket: <ref *4> TLSSocket {
        _tlsOptions: {
          allowHalfOpen: undefined,
          pipe: false,
          secureContext: [SecureContext],
          isServer: false,
          requestCert: true,
          rejectUnauthorized: true,
          session: <Buffer 30 82 07 a3 02 01 01 02 02 03 04 04 02 13 02 04 20 f3 54 06 fa 86 9a 1a f1 0c bd 9b ff 0a 35 d1 92 9c 10 e7 97 2a 9a ff 32 63 72 c1 81 02 af 9b c5 04 ... 1909 more bytes>,
          ALPNProtocols: undefined,
          requestOCSP: undefined,
          enableTrace: undefined,
          pskCallback: undefined,
          highWaterMark: undefined,
          onread: undefined,
          signal: undefined
        },
        _secureEstablished: true,
        _securePending: false,
        _newSessionPending: false,
        _controlReleased: true,
        secureConnecting: false,
        _SNICallback: null,
        servername: 'www.twitch.tv',
        alpnProtocol: false,
        authorized: true,
        authorizationError: null,
        encrypted: true,
        _events: [Object: null prototype] {
          close: [Array],
          end: [Function],
          newListener: [Function],
          secure: [Function],
          session: [Function],
          free: [Function],
          timeout: [Function],
          agentRemove: [Function],
          error: [Function],
          finish: [Function]
        },
        _eventsCount: 10,
        connecting: false,
        _hadError: false,
        _parent: null,
        _host: 'www.twitch.tv',
        _readableState: ReadableState {
          objectMode: false,
          highWaterMark: 16384,
          buffer: BufferList { head: null, tail: null, length: 0 },
          length: 0,
          pipes: [Array],
          flowing: true,
          ended: false,
          endEmitted: false,
          reading: true,
          constructed: true,
          sync: false,
          needReadable: true,
          emittedReadable: false,
          readableListening: false,
          resumeScheduled: false,
          errorEmitted: false,
          emitClose: false,
          autoDestroy: true,
          destroyed: false,
          errored: null,
          closed: false,
          closeEmitted: false,
          defaultEncoding: 'utf8',
          awaitDrainWriters: null,
          multiAwaitDrain: false,
          readingMore: false,
          dataEmitted: true,
          decoder: null,
          encoding: null,
          [Symbol(kPaused)]: false,
          [pipesCount]: [Getter],
          [paused]: [Getter/Setter]
        },
        _maxListeners: undefined,
        _writableState: WritableState {
          objectMode: false,
          highWaterMark: 16384,
          finalCalled: true,
          needDrain: false,
          ending: true,
          ended: true,
          finished: false,
          destroyed: false,
          decodeStrings: false,
          defaultEncoding: 'utf8',
          length: 0,
          writing: false,
          corked: 0,
          sync: false,
          bufferProcessing: false,
          onwrite: [Function],
          writecb: null,
          writelen: 0,
          afterWriteTickInfo: null,
          buffered: [Array],
          bufferedIndex: 0,
          allBuffers: true,
          allNoop: true,
          pendingcb: 1,
          constructed: true,
          prefinished: false,
          errorEmitted: false,
          emitClose: false,
          autoDestroy: true,
          errored: null,
          closed: false,
          closeEmitted: false,
          [Symbol(kOnFinished)]: [Array],
          [bufferedRequestCount]: [Getter]
        },
        allowHalfOpen: false,
        _sockname: null,
        _pendingData: null,
        _pendingEncoding: '',
        server: undefined,
        _server: null,
        ssl: TLSWrap {
          _parent: [TCP],
          _parentWrap: undefined,
          _secureContext: [SecureContext],
          reading: true,
          onkeylog: [Function],
          onhandshakestart: [Object],
          onhandshakedone: [Function],
          onocspresponse: [Function],
          onnewsession: [Function],
          onerror: [Function],
          [Symbol(owner_symbol)]: [Circular *4],
          writeQueueSize: [Getter],
          [fd]: [Getter],
          [_externalStream]: [Getter],
          [bytesRead]: [Getter],
          [bytesWritten]: [Getter],
          isStreamBase: true
        },
        _requestCert: true,
        _rejectUnauthorized: true,
        parser: null,
        _httpMessage: [Circular *5],
        [Symbol(res)]: TLSWrap {
          _parent: [TCP],
          _parentWrap: undefined,
          _secureContext: [SecureContext],
          reading: true,
          onkeylog: [Function],
          onhandshakestart: [Object],
          onhandshakedone: [Function],
          onocspresponse: [Function],
          onnewsession: [Function],
          onerror: [Function],
          [Symbol(owner_symbol)]: [Circular *4],
          writeQueueSize: [Getter],
          [fd]: [Getter],
          [_externalStream]: [Getter],
          [bytesRead]: [Getter],
          [bytesWritten]: [Getter],
          isStreamBase: true
        },
        [Symbol(verified)]: true,
        [Symbol(pendingSession)]: null,
        [Symbol(async_id_symbol)]: 277678,
        [Symbol(kHandle)]: TLSWrap {
          _parent: [TCP],
          _parentWrap: undefined,
          _secureContext: [SecureContext],
          reading: true,
          onkeylog: [Function],
          onhandshakestart: [Object],
          onhandshakedone: [Function],
          onocspresponse: [Function],
          onnewsession: [Function],
          onerror: [Function],
          [Symbol(owner_symbol)]: [Circular *4],
          writeQueueSize: [Getter],
          [fd]: [Getter],
          [_externalStream]: [Getter],
          [bytesRead]: [Getter],
          [bytesWritten]: [Getter],
          isStreamBase: true
        },
        [Symbol(kSetNoDelay)]: false,
        [Symbol(lastWriteQueueSize)]: 0,
        [Symbol(timeout)]: null,
        [Symbol(kBuffer)]: null,
        [Symbol(kBufferCb)]: null,
        [Symbol(kBufferGen)]: null,
        [Symbol(kCapture)]: false,
        [Symbol(kBytesRead)]: 0,
        [Symbol(kBytesWritten)]: 0,
        [Symbol(connect-options)]: {
          rejectUnauthorized: true,
          ciphers: 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA',
          checkServerIdentity: [Function],
          minDHSize: 1024,
          session: <Buffer 30 82 07 a3 02 01 01 02 02 03 04 04 02 13 02 04 20 f3 54 06 fa 86 9a 1a f1 0c bd 9b ff 0a 35 d1 92 9c 10 e7 97 2a 9a ff 32 63 72 c1 81 02 af 9b c5 04 ... 1909 more bytes>,
          maxRedirects: 21,
          maxBodyLength: 10485760,
          protocol: 'https:',
          path: null,
          method: 'GET',
          headers: [Object],
          agent: undefined,
          agents: [Object],
          auth: undefined,
          hostname: 'www.twitch.tv',
          port: 443,
          nativeProtocols: [Object],
          pathname: '/rainbow6',
          _defaultAgent: [Agent],
          host: 'www.twitch.tv',
          servername: 'www.twitch.tv',
          _agentKey: 'www.twitch.tv:443:::::::::::::::::::::',
          encoding: null,
          singleUse: true
        },
        [Symbol(RequestTimeout)]: undefined,
        [_connecting]: [Getter],
        [pending]: [Getter],
        [readyState]: [Getter],
        [bufferSize]: [Getter],
        bytesRead: [Getter],
        remoteAddress: [Getter],
        remoteFamily: [Getter],
        remotePort: [Getter],
        localAddress: [Getter],
        localPort: [Getter],
        _bytesDispatched: [Getter],
        bytesWritten: [Getter],
        [_handle]: [Getter/Setter],
        [Symbol(kUpdateTimer)]: [Getter],
        [writable]: [Getter/Setter],
        [writableHighWaterMark]: [Getter],
        [writableObjectMode]: [Getter],
        [writableBuffer]: [Getter],
        [writableLength]: [Getter],
        [writableFinished]: [Getter],
        [writableCorked]: [Getter],
        [writableEnded]: [Getter],
        [writableNeedDrain]: [Getter],
        [destroyed]: [Getter/Setter]
      },
      _header: 'GET /rainbow6 HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0\r\n' +
        'encoding: utf8\r\n' +
        'Client-Id: kimne78kx3ncx6brgo4mv6wki5h1ko\r\n' +
        'Authorization: ' +
        'Host: www.twitch.tv\r\n' +
        'Connection: close\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop] { [length]: 0, [name]: 'nop' },
      agent: Agent {
        _events: [Object: null prototype] {
          free: [Function],
          newListener: [Function]
        },
        _eventsCount: 2,
        _maxListeners: undefined,
        defaultPort: 443,
        protocol: 'https:',
        options: [Object: null prototype] { path: null },
        requests: [Object: null prototype] {},
        sockets: [Object: null prototype] {
          'www.twitch.tv:443:::::::::::::::::::::': [Array]
        },
        freeSockets: [Object: null prototype] {},
        keepAliveMsecs: 1000,
        keepAlive: false,
        maxSockets: Infinity,
        maxFreeSockets: 256,
        scheduling: 'lifo',
        maxTotalSockets: Infinity,
        totalSocketCount: 1,
        maxCachedSessions: 100,
        _sessionCache: { map: [Object], list: [Array] },
        [Symbol(kCapture)]: false
      },
      socketPath: undefined,
      method: 'GET',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      path: '/rainbow6',
      _ended: true,
      res: IncomingMessage {
        _readableState: ReadableState {
          objectMode: false,
          highWaterMark: 16384,
          buffer: BufferList { head: null, tail: null, length: 0 },
          length: 0,
          pipes: [Array],
          flowing: true,
          ended: true,
          endEmitted: true,
          reading: false,
          constructed: true,
          sync: false,
          needReadable: false,
          emittedReadable: false,
          readableListening: false,
          resumeScheduled: false,
          errorEmitted: false,
          emitClose: true,
          autoDestroy: true,
          destroyed: true,
          errored: null,
          closed: true,
          closeEmitted: true,
          defaultEncoding: 'utf8',
          awaitDrainWriters: null,
          multiAwaitDrain: false,
          readingMore: false,
          dataEmitted: true,
          decoder: null,
          encoding: null,
          [Symbol(kPaused)]: false,
          [pipesCount]: [Getter],
          [paused]: [Getter/Setter]
        },
        _events: [Object: null prototype] {
          end: [Array],
          data: [Function],
          aborted: [Function],
          error: [Function]
        },
        _eventsCount: 4,
        _maxListeners: undefined,
        socket: <ref *4> TLSSocket {
          _tlsOptions: [Object],
          _secureEstablished: true,
          _securePending: false,
          _newSessionPending: false,
          _controlReleased: true,
          secureConnecting: false,
          _SNICallback: null,
          servername: 'www.twitch.tv',
          alpnProtocol: false,
          authorized: true,
          authorizationError: null,
          encrypted: true,
          _events: [Object: null prototype],
          _eventsCount: 10,
          connecting: false,
          _hadError: false,
          _parent: null,
          _host: 'www.twitch.tv',
          _readableState: [ReadableState],
          _maxListeners: undefined,
          _writableState: [WritableState],
          allowHalfOpen: false,
          _sockname: null,
          _pendingData: null,
          _pendingEncoding: '',
          server: undefined,
          _server: null,
          ssl: [TLSWrap],
          _requestCert: true,
          _rejectUnauthorized: true,
          parser: null,
          _httpMessage: [Circular *5],
          [Symbol(res)]: [TLSWrap],
          [Symbol(verified)]: true,
          [Symbol(pendingSession)]: null,
          [Symbol(async_id_symbol)]: 277678,
          [Symbol(kHandle)]: [TLSWrap],
          [Symbol(kSetNoDelay)]: false,
          [Symbol(lastWriteQueueSize)]: 0,
          [Symbol(timeout)]: null,
          [Symbol(kBuffer)]: null,
          [Symbol(kBufferCb)]: null,
          [Symbol(kBufferGen)]: null,
          [Symbol(kCapture)]: false,
          [Symbol(kBytesRead)]: 0,
          [Symbol(kBytesWritten)]: 0,
          [Symbol(connect-options)]: [Object],
          [Symbol(RequestTimeout)]: undefined,
          [_connecting]: [Getter],
          [pending]: [Getter],
          [readyState]: [Getter],
          [bufferSize]: [Getter],
          bytesRead: [Getter],
          remoteAddress: [Getter],
          remoteFamily: [Getter],
          remotePort: [Getter],
          localAddress: [Getter],
          localPort: [Getter],
          _bytesDispatched: [Getter],
          bytesWritten: [Getter],
          [_handle]: [Getter/Setter],
          [Symbol(kUpdateTimer)]: [Getter],
          [writable]: [Getter/Setter],
          [writableHighWaterMark]: [Getter],
          [writableObjectMode]: [Getter],
          [writableBuffer]: [Getter],
          [writableLength]: [Getter],
          [writableFinished]: [Getter],
          [writableCorked]: [Getter],
          [writableEnded]: [Getter],
          [writableNeedDrain]: [Getter],
          [destroyed]: [Getter/Setter]
        },
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        rawHeaders: [
          'Connection',
          'close',
          'Content-Type',
          'application/xml',
          'Date',
          'Mon, 25 Apr 2022 22:09:52 GMT',
          'Set-Cookie',
          'twitch.lohp.countryCode=GB; domain=.twitch.tv; expires=Sat, 20 May 2023 22:09:52 GMT;',
          'transfer-encoding',
          'chunked',
          [length]: 10
        ],
        rawTrailers: [ [length]: 0 ],
        aborted: false,
        upgrade: false,
        url: '',
        method: null,
        statusCode: 400,
        statusMessage: 'Bad Request',
        client: <ref *4> TLSSocket {
          _tlsOptions: [Object],
          _secureEstablished: true,
          _securePending: false,
          _newSessionPending: false,
          _controlReleased: true,
          secureConnecting: false,
          _SNICallback: null,
          servername: 'www.twitch.tv',
          alpnProtocol: false,
          authorized: true,
          authorizationError: null,
          encrypted: true,
          _events: [Object: null prototype],
          _eventsCount: 10,
          connecting: false,
          _hadError: false,
          _parent: null,
          _host: 'www.twitch.tv',
          _readableState: [ReadableState],
          _maxListeners: undefined,
          _writableState: [WritableState],
          allowHalfOpen: false,
          _sockname: null,
          _pendingData: null,
          _pendingEncoding: '',
          server: undefined,
          _server: null,
          ssl: [TLSWrap],
          _requestCert: true,
          _rejectUnauthorized: true,
          parser: null,
          _httpMessage: [Circular *5],
          [Symbol(res)]: [TLSWrap],
          [Symbol(verified)]: true,
          [Symbol(pendingSession)]: null,
          [Symbol(async_id_symbol)]: 277678,
          [Symbol(kHandle)]: [TLSWrap],
          [Symbol(kSetNoDelay)]: false,
          [Symbol(lastWriteQueueSize)]: 0,
          [Symbol(timeout)]: null,
          [Symbol(kBuffer)]: null,
          [Symbol(kBufferCb)]: null,
          [Symbol(kBufferGen)]: null,
          [Symbol(kCapture)]: false,
          [Symbol(kBytesRead)]: 0,
          [Symbol(kBytesWritten)]: 0,
          [Symbol(connect-options)]: [Object],
          [Symbol(RequestTimeout)]: undefined,
          [_connecting]: [Getter],
          [pending]: [Getter],
          [readyState]: [Getter],
          [bufferSize]: [Getter],
          bytesRead: [Getter],
          remoteAddress: [Getter],
          remoteFamily: [Getter],
          remotePort: [Getter],
          localAddress: [Getter],
          localPort: [Getter],
          _bytesDispatched: [Getter],
          bytesWritten: [Getter],
          [_handle]: [Getter/Setter],
          [Symbol(kUpdateTimer)]: [Getter],
          [writable]: [Getter/Setter],
          [writableHighWaterMark]: [Getter],
          [writableObjectMode]: [Getter],
          [writableBuffer]: [Getter],
          [writableLength]: [Getter],
          [writableFinished]: [Getter],
          [writableCorked]: [Getter],
          [writableEnded]: [Getter],
          [writableNeedDrain]: [Getter],
          [destroyed]: [Getter/Setter]
        },
        _consuming: true,
        _dumped: false,
        req: [Circular *5],
        responseUrl: 'https://www.twitch.tv/rainbow6',
        redirects: [ [length]: 0 ],
        [Symbol(kCapture)]: false,
        [Symbol(kHeaders)]: {
          connection: 'close',
          'content-type': 'application/xml',
          date: 'Mon, 25 Apr 2022 22:09:52 GMT',
          'set-cookie': [Array],
          'transfer-encoding': 'chunked'
        },
        [Symbol(kHeadersCount)]: 10,
        [Symbol(kTrailers)]: null,
        [Symbol(kTrailersCount)]: 0,
        [Symbol(RequestTimeout)]: undefined,
        [connection]: [Getter/Setter],
        [headers]: [Getter/Setter],
        [trailers]: [Getter/Setter],
        [readable]: [Getter/Setter],
        [readableDidRead]: [Getter],
        [readableAborted]: [Getter],
        [readableHighWaterMark]: [Getter],
        [readableBuffer]: [Getter],
        [readableFlowing]: [Getter/Setter],
        [readableLength]: [Getter],
        [readableObjectMode]: [Getter],
        [readableEncoding]: [Getter],
        [destroyed]: [Getter/Setter],
        [readableEnded]: [Getter]
      },
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'www.twitch.tv',
      protocol: 'https:',
      _redirectable: Writable {
        _writableState: WritableState {
          objectMode: false,
          highWaterMark: 16384,
          finalCalled: false,
          needDrain: false,
          ending: false,
          ended: false,
          finished: false,
          destroyed: false,
          decodeStrings: true,
          defaultEncoding: 'utf8',
          length: 0,
          writing: false,
          corked: 0,
          sync: true,
          bufferProcessing: false,
          onwrite: [Function],
          writecb: null,
          writelen: 0,
          afterWriteTickInfo: null,
          buffered: [Array],
          bufferedIndex: 0,
          allBuffers: true,
          allNoop: true,
          pendingcb: 0,
          constructed: true,
          prefinished: false,
          errorEmitted: false,
          emitClose: true,
          autoDestroy: true,
          errored: null,
          closed: false,
          closeEmitted: false,
          [Symbol(kOnFinished)]: [Array],
          [bufferedRequestCount]: [Getter]
        },
        _events: [Object: null prototype] {
          response: [Function],
          error: [Function],
          socket: [Function]
        },
        _eventsCount: 3,
        _maxListeners: undefined,
        _options: {
          maxRedirects: 21,
          maxBodyLength: 10485760,
          protocol: 'https:',
          path: '/rainbow6',
          method: 'GET',
          headers: [Object],
          agent: undefined,
          agents: [Object],
          auth: undefined,
          hostname: 'www.twitch.tv',
          port: null,
          nativeProtocols: [Object],
          pathname: '/rainbow6'
        },
        _ended: true,
        _ending: true,
        _redirectCount: 0,
        _redirects: [ [length]: 0 ],
        _requestBodyLength: 0,
        _requestBodyBuffers: [ [length]: 0 ],
        _onNativeResponse: [Function (anonymous)] {
          [length]: 1,
          [name]: '',
          [arguments]: null,
          [caller]: null,
          [prototype]: [Object]
        },
        _currentRequest: [Circular *5],
        _currentUrl: 'https://www.twitch.tv/rainbow6',
        [Symbol(kCapture)]: false,
        [aborted]: [Getter],
        [connection]: [Getter],
        [socket]: [Getter],
        _writev: null,
        [destroyed]: [Getter/Setter],
        [writable]: [Getter/Setter],
        [writableFinished]: [Getter],
        [writableObjectMode]: [Getter],
        [writableBuffer]: [Getter],
        [writableEnded]: [Getter],
        [writableNeedDrain]: [Getter],
        [writableHighWaterMark]: [Getter],
        [writableCorked]: [Getter],
        [writableLength]: [Getter]
      },
      [Symbol(kCapture)]: false,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype] {
        accept: [ 'Accept', 'application/json, text/plain, */*', [length]: 2 ],
        'user-agent': [
          'User-Agent',
          'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0',
          [length]: 2
        ],
        encoding: [ 'encoding', 'utf8', [length]: 2 ],
        'client-id': [ 'Client-Id', 'kimne78kx3ncx6brgo4mv6wki5h1ko', [length]: 2 ],
        authorization: [
          'Authorization',
          '',
          [length]: 2
        ],
        host: [ 'Host', 'www.twitch.tv', [length]: 2 ]
      },
      [writableFinished]: [Getter],
      [writableObjectMode]: [Getter],
      [writableLength]: [Getter],
      [writableHighWaterMark]: [Getter],
      [writableCorked]: [Getter],
      [_headers]: [Getter/Setter],
      [connection]: [Getter/Setter],
      [_headerNames]: [Getter/Setter],
      headersSent: [Getter],
      [writableEnded]: [Getter],
      [writableNeedDrain]: [Getter]
    },
    response: {
      status: 400,
      statusText: 'Bad Request',
      headers: {
        connection: 'close',
        'content-type': 'application/xml',
        date: 'Mon, 25 Apr 2022 22:09:52 GMT',
        'set-cookie': [
          'twitch.lohp.countryCode=GB; domain=.twitch.tv; expires=Sat, 20 May 2023 22:09:52 GMT;',
          [length]: 1
        ],
        'transfer-encoding': 'chunked'
      },
      config: {
        transitional: {
          silentJSONParsing: true,
          forcedJSONParsing: true,
          clarifyTimeoutError: false
        },
        adapter: <ref *1> [Function: httpAdapter] {
          [length]: 1,
          [name]: 'httpAdapter',
          [prototype]: [Object]
        },
        transformRequest: [ [Function], [length]: 1 ],
        transformResponse: [ [Function], [length]: 1 ],
        timeout: 0,
        xsrfCookieName: 'XSRF-TOKEN',
        xsrfHeaderName: 'X-XSRF-TOKEN',
        maxContentLength: -1,
        maxBodyLength: -1,
        validateStatus: <ref *2> [Function: validateStatus] {
          [length]: 1,
          [name]: 'validateStatus',
          [prototype]: [Object]
        },
        headers: {
          Accept: 'application/json, text/plain, */*',
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0',
          encoding: 'utf8',
          'Client-Id': 'kimne78kx3ncx6brgo4mv6wki5h1ko',
          Authorization: ''
        },
        raxConfig: {
          retry: 3,
          noResponseRetries: 3,
          retryDelay: 60000,
          statusCodesToRetry: [Array],
          httpMethodsToRetry: [Array],
          onRetryAttempt: [Function],
          backoffType: 'static',
          currentRetryAttempt: 0,
          instance: [Function],
          checkRetryAfter: true,
          maxRetryAfter: 300000
        },
        method: 'get',
        url: 'https://www.twitch.tv/rainbow6',
        data: undefined
      },
      request: <ref *5> ClientRequest {
        _events: [Object: null prototype] {
          abort: [Function],
          aborted: [Function],
          connect: [Function],
          error: [Function],
          socket: [Function],
          timeout: [Function],
          prefinish: [Function]
        },
        _eventsCount: 7,
        _maxListeners: undefined,
        outputData: [ [length]: 0 ],
        outputSize: 0,
        writable: true,
        destroyed: false,
        _last: true,
        chunkedEncoding: false,
        shouldKeepAlive: false,
        maxRequestsOnConnectionReached: false,
        _defaultKeepAlive: true,
        useChunkedEncodingByDefault: false,
        sendDate: false,
        _removedConnection: false,
        _removedContLen: false,
        _removedTE: false,
        _contentLength: 0,
        _hasBody: true,
        _trailer: '',
        finished: true,
        _headerSent: true,
        _closed: false,
        socket: <ref *4> TLSSocket {
          _tlsOptions: [Object],
          _secureEstablished: true,
          _securePending: false,
          _newSessionPending: false,
          _controlReleased: true,
          secureConnecting: false,
          _SNICallback: null,
          servername: 'www.twitch.tv',
          alpnProtocol: false,
          authorized: true,
          authorizationError: null,
          encrypted: true,
          _events: [Object: null prototype],
          _eventsCount: 10,
          connecting: false,
          _hadError: false,
          _parent: null,
          _host: 'www.twitch.tv',
          _readableState: [ReadableState],
          _maxListeners: undefined,
          _writableState: [WritableState],
          allowHalfOpen: false,
          _sockname: null,
          _pendingData: null,
          _pendingEncoding: '',
          server: undefined,
          _server: null,
          ssl: [TLSWrap],
          _requestCert: true,
          _rejectUnauthorized: true,
          parser: null,
          _httpMessage: [Circular *5],
          [Symbol(res)]: [TLSWrap],
          [Symbol(verified)]: true,
          [Symbol(pendingSession)]: null,
          [Symbol(async_id_symbol)]: 277678,
          [Symbol(kHandle)]: [TLSWrap],
          [Symbol(kSetNoDelay)]: false,
          [Symbol(lastWriteQueueSize)]: 0,
          [Symbol(timeout)]: null,
          [Symbol(kBuffer)]: null,
          [Symbol(kBufferCb)]: null,
          [Symbol(kBufferGen)]: null,
          [Symbol(kCapture)]: false,
          [Symbol(kBytesRead)]: 0,
          [Symbol(kBytesWritten)]: 0,
          [Symbol(connect-options)]: [Object],
          [Symbol(RequestTimeout)]: undefined,
          [_connecting]: [Getter],
          [pending]: [Getter],
          [readyState]: [Getter],
          [bufferSize]: [Getter],
          bytesRead: [Getter],
          remoteAddress: [Getter],
          remoteFamily: [Getter],
          remotePort: [Getter],
          localAddress: [Getter],
          localPort: [Getter],
          _bytesDispatched: [Getter],
          bytesWritten: [Getter],
          [_handle]: [Getter/Setter],
          [Symbol(kUpdateTimer)]: [Getter],
          [writable]: [Getter/Setter],
          [writableHighWaterMark]: [Getter],
          [writableObjectMode]: [Getter],
          [writableBuffer]: [Getter],
          [writableLength]: [Getter],
          [writableFinished]: [Getter],
          [writableCorked]: [Getter],
          [writableEnded]: [Getter],
          [writableNeedDrain]: [Getter],
          [destroyed]: [Getter/Setter]
        },
        _header: 'GET /rainbow6 HTTP/1.1\r\n' +
          'Accept: application/json, text/plain, */*\r\n' +
          'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0\r\n' +
          'encoding: utf8\r\n' +
          'Client-Id: kimne78kx3ncx6brgo4mv6wki5h1ko\r\n' +
          'Authorization: ' +
          'Host: www.twitch.tv\r\n' +
          'Connection: close\r\n' +
          '\r\n',
        _keepAliveTimeout: 0,
        _onPendingData: [Function: nop] { [length]: 0, [name]: 'nop' },
        agent: Agent {
          _events: [Object: null prototype],
          _eventsCount: 2,
          _maxListeners: undefined,
          defaultPort: 443,
          protocol: 'https:',
          options: [Object: null prototype],
          requests: [Object: null prototype] {},
          sockets: [Object: null prototype],
          freeSockets: [Object: null prototype] {},
          keepAliveMsecs: 1000,
          keepAlive: false,
          maxSockets: Infinity,
          maxFreeSockets: 256,
          scheduling: 'lifo',
          maxTotalSockets: Infinity,
          totalSocketCount: 1,
          maxCachedSessions: 100,
          _sessionCache: [Object],
          [Symbol(kCapture)]: false
        },
        socketPath: undefined,
        method: 'GET',
        maxHeaderSize: undefined,
        insecureHTTPParser: undefined,
        path: '/rainbow6',
        _ended: true,
        res: IncomingMessage {
          _readableState: [ReadableState],
          _events: [Object: null prototype],
          _eventsCount: 4,
          _maxListeners: undefined,
          socket: [TLSSocket],
          httpVersionMajor: 1,
          httpVersionMinor: 1,
          httpVersion: '1.1',
          complete: true,
          rawHeaders: [Array],
          rawTrailers: [Array],
          aborted: false,
          upgrade: false,
          url: '',
          method: null,
          statusCode: 400,
          statusMessage: 'Bad Request',
          client: [TLSSocket],
          _consuming: true,
          _dumped: false,
          req: [Circular *5],
          responseUrl: 'https://www.twitch.tv/rainbow6',
          redirects: [Array],
          [Symbol(kCapture)]: false,
          [Symbol(kHeaders)]: [Object],
          [Symbol(kHeadersCount)]: 10,
          [Symbol(kTrailers)]: null,
          [Symbol(kTrailersCount)]: 0,
          [Symbol(RequestTimeout)]: undefined,
          [connection]: [Getter/Setter],
          [headers]: [Getter/Setter],
          [trailers]: [Getter/Setter],
          [readable]: [Getter/Setter],
          [readableDidRead]: [Getter],
          [readableAborted]: [Getter],
          [readableHighWaterMark]: [Getter],
          [readableBuffer]: [Getter],
          [readableFlowing]: [Getter/Setter],
          [readableLength]: [Getter],
          [readableObjectMode]: [Getter],
          [readableEncoding]: [Getter],
          [destroyed]: [Getter/Setter],
          [readableEnded]: [Getter]
        },
        aborted: false,
        timeoutCb: null,
        upgradeOrConnect: false,
        parser: null,
        maxHeadersCount: null,
        reusedSocket: false,
        host: 'www.twitch.tv',
        protocol: 'https:',
        _redirectable: Writable {
          _writableState: [WritableState],
          _events: [Object: null prototype],
          _eventsCount: 3,
          _maxListeners: undefined,
          _options: [Object],
          _ended: true,
          _ending: true,
          _redirectCount: 0,
          _redirects: [Array],
          _requestBodyLength: 0,
          _requestBodyBuffers: [Array],
          _onNativeResponse: [Function],
          _currentRequest: [Circular *5],
          _currentUrl: 'https://www.twitch.tv/rainbow6',
          [Symbol(kCapture)]: false,
          [aborted]: [Getter],
          [connection]: [Getter],
          [socket]: [Getter],
          _writev: null,
          [destroyed]: [Getter/Setter],
          [writable]: [Getter/Setter],
          [writableFinished]: [Getter],
          [writableObjectMode]: [Getter],
          [writableBuffer]: [Getter],
          [writableEnded]: [Getter],
          [writableNeedDrain]: [Getter],
          [writableHighWaterMark]: [Getter],
          [writableCorked]: [Getter],
          [writableLength]: [Getter]
        },
        [Symbol(kCapture)]: false,
        [Symbol(kNeedDrain)]: false,
        [Symbol(corked)]: 0,
        [Symbol(kOutHeaders)]: [Object: null prototype] {
          accept: [Array],
          'user-agent': [Array],
          encoding: [Array],
          'client-id': [Array],
          authorization: [Array],
          host: [Array]
        },
        [writableFinished]: [Getter],
        [writableObjectMode]: [Getter],
        [writableLength]: [Getter],
        [writableHighWaterMark]: [Getter],
        [writableCorked]: [Getter],
        [_headers]: [Getter/Setter],
        [connection]: [Getter/Setter],
        [_headerNames]: [Getter/Setter],
        headersSent: [Getter],
        [writableEnded]: [Getter],
        [writableNeedDrain]: [Getter]
      },
      data: '<?xml version="1.0" encoding="UTF-8"?>\n' +
        '<Error></Error>'
    },
    isAxiosError: true,
    toJSON: <ref *6> [Function: toJSON] {
      [length]: 0,
      [name]: 'toJSON',
      [prototype]: { [constructor]: [Circular *6] }
    }
  }
}
Unhandled Rejection Reason: Error: Request failed with status code 400
root@instance-prod:~/TTVDropBot# client_loop: send disconnect: Connection reset

TypeError: Cannot read property 'name' of null

Hi !

Just wanted to report an issue.

What:
`TypeError: Cannot read property 'name' of null

More Details can be found in the error Log...

Closing Bot...`

That's what i have in my discord webhook error message.
it closes CMD window too.

When:
It seems to happen in long session like 2hrs+.
And when there are no drop available for too long.

Thank you.

Random Drop Selection #Suggestion

Can you add a feature to random selection that selects only linked games accounts?
I think this be better for everyone.

EDIT: I saw it on the to-do list. Sorry..

Bot not Functionall

Rust changed the Site Layout, neans the current xpaths dont match with the new ones.

1.3.3 gives me all live channels claimed, but they are not

I just updated to 1.3.3 and opened it to continue watching Sykkuno (had 12%) and after selecting him the bot gives me All live channels claimed... Almost... All but sykkuno's drop are claimed. Maybe it can't differentiate from sykkuno's old drop (that i have indeed claimed) and his new drop (that is at 12%). Check the photo

Priority list only watches the games on the list

I know this is how it is intended to work but I think changing it so it watches something random as long as noone can be watched from the prioritylist or allowing an option that does that would be a great feature.

Send webhooks on events (enhancement)

Hi!
I'm running TTVDropBot on server and I'd like it to send webhooks on checks (fe. every so often or on claimed drop...)

for example Discord Webhook
image

I don't know typescript but I've worked with webhooks before so I can help at least with that!

crash after getting 5 drops, crash on no streamer online

Version 1.3.2.1

Crash during the night

(node:1856) UnhandledPromiseRejectionWarning: Error: Protocol error (Page.reload): Session closed. Most likely the page has been closed.
    at CDPSession.send (C:\Users\virtual\Desktop\TTVDropBot\node_modules\puppeteer\lib\cjs\puppeteer\common\Connection.js:195:35)
    at next (C:\Users\virtual\Desktop\TTVDropBot\node_modules\puppeteer-extra-plugin-stealth\evasions\sourceurl\index.js:30:43)
    at CDPSession.send (C:\Users\virtual\Desktop\TTVDropBot\node_modules\puppeteer-extra-plugin-stealth\evasions\sourceurl\index.js:33:18)
    at Page.reload (C:\Users\virtual\Desktop\TTVDropBot\node_modules\puppeteer\lib\cjs\puppeteer\common\Page.js:794:26)
    at MapDrops (C:\Users\virtual\Desktop\TTVDropBot\src\functions\MapDrops.js:5:21)
    at CheckProgressCurrentPage (C:\Users\virtual\Desktop\TTVDropBot\src\Checks\CheckProgressCurrentPage.js:13:11)
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async C:\Users\virtual\Desktop\TTVDropBot\src\Pages\StreamPage.js:64:9
    at async CurrentProgressEvent (C:\Users\virtual\Desktop\TTVDropBot\src\Pages\StreamPage.js:62:5)
(Use `TTVDropBot --trace-warnings ...` to show where the warning was created)
(node:1856) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:1856) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Starting it again it doesn't find any drops (Checking for Live Channels is empty because all are offline except for iiTzTimmy where I got the drop already). If pressing enter at "Select Twitch Channel to start Watching?" it crashes to another error (I expected it will wait for someone to come online)

(node:11172) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'value' of undefined
    at ListPrompt.getCurrentValue (C:\Users\virtual\Desktop\TTVDropBot\node_modules\inquirer\lib\prompts\list.js:148:53)
    at MapSubscriber._next (C:\Users\virtual\Desktop\TTVDropBot\node_modules\rxjs\internal\operators\map.js:49:35)
    at MapSubscriber.Subscriber.next (C:\Users\virtual\Desktop\TTVDropBot\node_modules\rxjs\internal\Subscriber.js:66:18)
    at TakeSubscriber._next (C:\Users\virtual\Desktop\TTVDropBot\node_modules\rxjs\internal\operators\take.js:54:30)
    at TakeSubscriber.Subscriber.next (C:\Users\virtual\Desktop\TTVDropBot\node_modules\rxjs\internal\Subscriber.js:66:18)
    at Interface.handler (C:\Users\virtual\Desktop\TTVDropBot\node_modules\rxjs\internal\observable\fromEvent.js:22:28)
    at Interface.emit (events.js:327:22)
    at Interface._onLine (readline.js:337:10)
    at Interface._line (readline.js:666:8)
    at Interface._ttyWrite (readline.js:1010:14)
(Use `TTVDropBot --trace-warnings ...` to show where the warning was created)
(node:11172) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:11172) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Switches streams after 3 fails, even if not 3 in a row

The program seems to switch streams after 3 failures. It seems to get a failure to check every 3-5 attempts. This eventually causes it to switch streams even when the stream is still up.

In my opinion it should only switch if it is " 3 failures in a row" not "3 failures total"

I assume resetting the try count on a successful check, would be a quick way to fix this.

image

To add a suggestion to this. it would be useful to be able to add a list of streamers I already have drops for so it does not check them anymore. As it takes a long time to get 3 trys on a stream I already have the drop for.

Possibly automatically log streams the tool has got 100% for or detected 100% for too.

Discord Server - Report Bugs there

Report Bugs on the Discord Server, im way more active on discord.

So i created a Discord Server, if you have any questions, suggestions or bug reports please join the discord and report it there. Im way more active on Discord and can answer mostly instanly, if im online...

Discord Server
Invite Link:
https://discord.gg/rV26FZ2upF

Also if you want information about "Can this can get someone banned" take a look at this question #47

Unable to set user data directory

When i paste the path for the chrome profile, the program exits instantly.
I even tried to put it in settings manually, but i got like 10 rows of errors.
Is this a known issue, or am I messing up something?

Can't login via command line

? What is your Password? [hidden]

Something went wrong...
Login failed for an unknown reason...
The Reason is probably:
Unhandled Rejection at: Promise {
  <rejected> TypeError: Cannot read property 'error_code' of undefined
      at /snapshot/TTVDropBot-v2/build/functions/login/defaultlogin.js:221:95
      at Generator.next (<anonymous>)
      at /snapshot/TTVDropBot-v2/build/functions/login/defaultlogin.js:8:71
      at new Promise (<anonymous>)
      at /snapshot/TTVDropBot-v2/build/functions/login/defaultlogin.js:4:12
      at /snapshot/TTVDropBot-v2/build/functions/login/defaultlogin.js:160:20
      at processTicksAndRejections (internal/process/task_queues.js:95:5) {
    [stack]: "TypeError: Cannot read property 'error_code' of undefined\n" +
      '    at /snapshot/TTVDropBot-v2/build/functions/login/defaultlogin.js:221:95\n' +
      '    at Generator.next (<anonymous>)\n' +
      '    at /snapshot/TTVDropBot-v2/build/functions/login/defaultlogin.js:8:71\n' +
      '    at new Promise (<anonymous>)\n' +
      '    at /snapshot/TTVDropBot-v2/build/functions/login/defaultlogin.js:4:12\n' +
      '    at /snapshot/TTVDropBot-v2/build/functions/login/defaultlogin.js:160:20\n' +
      '    at processTicksAndRejections (internal/process/task_queues.js:95:5)',
    [message]: "Cannot read property 'error_code' of undefined"
  }
}
Unhandled Rejection Reason: TypeError: Cannot read property 'error_code' of undefined

I entering current information, buy getting this

New error on 1.3.3 when watching stream

Firstly thanks and great work getting the issues fixed so quickly.

However currently 1.3.3 seems to be broken for me at least. Once you choose the channel to watch it gets below error, I have tried the npm and .exe compiled versions and they both do the same thing :

Setting Video Settings like Quality and Volume...

Watching https://www.twitch.tv/Sykkuno...

(node:35920) UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read property 'startsWith' of undefined
at :57:33
at Array.filter ()
at :56:39
at ExecutionContext._evaluateInternal (S:\RustDropBot\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:218:19)
at runMicrotasks ()
at processTicksAndRejections (internal/process/task_queues.js:95:5)
at async ExecutionContext.evaluate (S:\RustDropBot\node_modules\puppeteer\lib\cjs\puppeteer\common\ExecutionContext.js:107:16)
at async MapDrops (S:\RustDropBot\src\functions\MapDrops.js:89:5)
at async CheckProgressCurrentPage (S:\RustDropBot\src\Checks\CheckProgressCurrentPage.js:14:5)
at async S:\RustDropBot\src\Pages\StreamPage.js:68:9
at async CurrentProgressEvent (S:\RustDropBot\src\Pages\StreamPage.js:66:5)
at async StreamPage (S:\RustDropBot\src\Pages\StreamPage.js:54:5)
at async intrust (S:\RustDropBot\src\Pages\WatchingPage.js:79:13)
(Use TTVDropBot --trace-warnings ... to show where the warning was created)
(node:35920) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:35920) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Error: EPERM: operation not permitted

Have a friend that was trying to use this but doesn't have a github account.

We get the following issue.

error

Anyone able to offer some insight? I'm confused why it is looking for the settings.json in the system32 folder?

dont know why, dont know why

it doesnt work. i tested latese pre patch and relase before it.

image

Starting...

Executable Path provided...
? Do you wanna use a custom UserDataDirectory? No

Successfully Saved Settings...

Starting Login Page...

Please Login with you Account...

Success Login...

Saving Cookies...

Closing Browser and Moving on...

Successfully Saved Cookies...

? Do you wanna watch a Custom Channel? No

Getting all Drops and other Details
(node:3528) UnhandledPromiseRejectionWarning: TimeoutError: Navigation timeout of 30000 ms exceeded
at C:\Users\cagda\OneDrive\Masaüstü\titit\node_modules\puppeteer\lib\cjs\puppeteer\common\LifecycleWatcher.js:106:111
(Use TTVDropBot --trace-warnings ... to show where the warning was created)
(node:3528) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:3528) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

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.