HatScripts / youtube-auto-liker

A userscript that automatically likes 👍 each video you watch on YouTube ▶️
68 stars 15 forks source link

not working now #24

Closed bOBERmASTER closed 1 year ago

bOBERmASTER commented 1 year ago

hi! script now not working. please fix

BleakBluets commented 1 year ago

Hmmmm. Opening a video in a new private window reveals that the HTML #subscribe-button > ytd-subscribe-button-renderer seems to have changed to #subscribe-button > ytd-button-renderer. So there seems to be some kind of update that is currently being rolled out, but I'm unable to test for other changes (such as subscribed/liked status) because as soon as I sign in I am reverted to the pre-update version of the site.

BleakBluets commented 1 year ago

If you want to try to modify the .js yourself, you could try to replace the line:

SUBSCRIBE_BUTTON: '#subscribe-button > ytd-subscribe-button-renderer',

with:

SUBSCRIBE_BUTTON: '#subscribe-button > ytd-button-renderer',
bOBERmASTER commented 1 year ago

not working :(

BleakBluets commented 1 year ago

The like/dislike button HTML all looks the same, just the subscribe button appears to have changed. On the pre-update version page, '#subscribe-button > ytd-subscribe-button-renderer yt-button-shape.ytd-subscribe-button-renderer' gains the hidden="" attribute when the user is subscribed. This can be used as an indirect way of checking the subscribed state.

Assuming the tags and attributes are used similarly on the updated site, the equivalent updated HTML is '#subscribe-button > ytd-button-renderer > yt-button-shape', so using this selector and testing for the hidden attribute rather than the subscribe-button-hidden attribute might work.

Again, I'm unable to test this, as I can't view the updated site while signed in (and can't subscribe, like, or dislike while signed out), so try this at your own risk. Here is an attempted fix from my fork with the above stated changes made. If it works, I can submit a pull request, but I don't want to submit one for untested code.

bOBERmASTER commented 1 year ago

this fix not working too

bOBERmASTER commented 1 year ago

may it help you. if not what block you need

<span id="line70"></span></span><span>&lt;/<span class="end-tag">script</span>&gt;</span><span></span><span>&lt;<span class="start-tag">script</span> <span class="attribute-name">nonce</span>="<a class="attribute-value">6DFqr0SYGGQe7XTDeLN4zA</a>"&gt;</span><span>(function() {var element = document.querySelector('#player-placeholder'); if (yt &amp;&amp; yt.flexy &amp;&amp; yt.flexy.setPlayerlikeElementSize &amp;&amp; typeof yt.flexy.setPlayerlikeElementSize === 'function') {yt.flexy.setPlayerlikeElementSize(element);}})();</span><span>&lt;/<span class="end-tag">script</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">watch-page-skeleton</a>" <span class="attribute-name">class</span>="<a class="attribute-value">watch-skeleton </a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">container</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">related</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">autoplay skeleton-light-border-bottom</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">upnext</a>" <span class="attribute-name">class</span>="<a class="attribute-value">skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-skeleton</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-details</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">thumbnail skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">details flex-1</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-title text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-meta text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-skeleton</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-details</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">thumbnail skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">details flex-1</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-title text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-meta text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-skeleton</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-details</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">thumbnail skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">details flex-1</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-title text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-meta text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-skeleton</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-details</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">thumbnail skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">details flex-1</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-title text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-meta text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-skeleton</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-details</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">thumbnail skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">details flex-1</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-title text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-meta text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-skeleton</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-details</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">thumbnail skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">details flex-1</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-title text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-meta text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-skeleton</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-details</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">thumbnail skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">details flex-1</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-title text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-meta text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-skeleton</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-details</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">thumbnail skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">details flex-1</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-title text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-meta text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-skeleton</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-details</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">thumbnail skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">details flex-1</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-title text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-meta text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-skeleton</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-details</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">thumbnail skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">details flex-1</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-title text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">video-meta text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">info-container</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">primary-info</a>" <span class="attribute-name">class</span>="<a class="attribute-value">skeleton-light-border-bottom</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">title</a>" <span class="attribute-name">class</span>="<a class="attribute-value">text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">info</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">count</a>" <span class="attribute-name">class</span>="<a class="attribute-value">text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">flex-1</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">menu</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">menu-button skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">menu-button skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">menu-button skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">menu-button skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">class</span>="<a class="attribute-value">menu-button skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">secondary-info</a>" <span class="attribute-name">class</span>="<a class="attribute-value">skeleton-light-border-bottom</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">top-row</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">video-owner</a>" <span class="attribute-name">class</span>="<a class="attribute-value">flex-1</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">channel-icon</a>" <span class="attribute-name">class</span>="<a class="attribute-value">skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">upload-info</a>" <span class="attribute-name">class</span>="<a class="attribute-value">flex-1</a>"&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">owner-name</a>" <span class="attribute-name">class</span>="<a class="attribute-value">text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">published-date</a>" <span class="attribute-name">class</span>="<a class="attribute-value">text-shell skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">div</span> <span class="attribute-name">id</span>="<a class="attribute-value">subscribe-button</a>" <span class="attribute-name">class</span>="<a class="attribute-value">skeleton-bg-color</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;/<span class="end-tag">div</span>&gt;</span><span></span><span>&lt;<span class="start-tag">script</span> <span class="attribute-name">nonce</span>="<a class="attribute-value">6DFqr0SYGGQe7XTDeLN4zA</a>"&gt;</span><span>if (window.ytcsi) {window.ytcsi.tick('gcc', null, '');}</span><span>&lt;/<span class="end-tag">script</span>&gt;</span><span></span><span>&lt;<span class="start-tag">script</span> <span class="attribute-name">src</span>="<a class="attribute-value" href="view-source:https://www.youtube.com/s/player/bbe1b497/player_ias.vflset/ru_RU/base.js">/s/player/bbe1b497/player_ias.vflset/ru_RU/base.js</a>" <span class="attribute-name">nonce</span>="<a class="attribute-value">6DFqr0SYGGQe7XTDeLN4zA</a>"&gt;</span><span></span><span>&lt;/<span class="end-tag">script</span>&gt;</span><span></span><span>&lt;<span class="start-tag">script</span> <span class="attribute-name">nonce</span>="<a class="attribute-value">6DFqr0SYGGQe7XTDeLN4zA</a>"&gt;</span><span>(function() {var element = document.querySelector('#player-placeholder'); if (element &amp;&amp; element.remove &amp;&amp; typeof element.remove === 'function') {element.remove();}})();</span><span>&lt;/<span class="end-tag">script</span>&gt;</span><span></span><span>&lt;<span class="start-tag">script</span> <span class="attribute-name">nonce</span>="<a class="attribute-value">6DFqr0SYGGQe7XTDeLN4zA</a>"&gt;</span><span>window.ytplayer = window.ytplayer || {}; window.ytplayer.bootstrapPlayerContainer = document.getElementById('player-api'); window.ytplayer.bootstrapWebPlayerContextConfig = window.yt &amp;&amp; window.yt.config_ &amp;&amp; window.yt.config_.WEB_PLAYER_CONTEXT_CONFIGS &amp;&amp; window.yt.config_.WEB_PLAYER_CONTEXT_CONFIGS['WEB_PLAYER_CONTEXT_CONFIG_ID_KEVLAR_WATCH']; window.ytplayer.bootstrapPlayerResponse = window['ytInitialPlayerResponse'];(function playerBootstrap(){if(window.ytplayer.bootstrapPlayerContainer&amp;&amp;window.ytplayer.bootstrapWebPlayerContextConfig){var createPlayer=window.yt&amp;&amp;window.yt.player&amp;&amp;window.yt.player.Application&amp;&amp;(window.yt.player.Application.createAlternate||window.yt.player.Application.create);if(createPlayer){if(window.ytplayer.bootstrapPlayerResponse){window.ytplayer.config={args:{raw_player_response:window.ytplayer.bootstrapPlayerResponse}};if(window.ytcsi)window.ytcsi.tick("cfg",null,"")}createPlayer(window.ytplayer.bootstrapPlayerContainer,
BleakBluets commented 1 year ago

Unfortunately, because of the way that YouTube generates each page, using "view page source" only shows the script tags used to load the rest of the page. So the code that you posted doesn't help me.

In order to get the section I need you would need to go to a YouTube video on a channel that you are subscribed to, right click on the subscribe button, and click the option that says something like "Inspect" or "Inspect Element". A popup window or sidebar should appear that shows that page's HTML and it should bring you to about 8 lines below the section for the subscribe button. It will look the same on all web browsers. I need the code for the element that says:

<div id="subscribe-button" class="style-scope ytd-watch-metadata">

I would also need all of the code 'inside' that element. This can be done by right-clicking on the element mentioned above and clicking "Copy Outer HTML" or something similar to that. The full code would look something like this:

<div id="subscribe-button" class="style-scope ytd-watch-metadata">
  <ytd-button-renderer class="style-scope ytd-watch-metadata" button-renderer="" button-next="">
    <yt-button-shape>
      <button class="yt-spec-button-shape-next yt-spec-button-shape-next--filled yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m " style="" aria-label="Subscribe">
        <div class="cbox yt-spec-button-shape-next--button-text-content">
          <span class="yt-core-attributed-string yt-core-attributed-string--white-space-no-wrap" role="text">Subscribe</span>
        </div>
        <yt-touch-feedback-shape style="border-radius: inherit;">
          <div class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response-inverse" aria-hidden="true">
            <div class="yt-spec-touch-feedback-shape__stroke" style=""></div>
            <div class="yt-spec-touch-feedback-shape__fill" style=""></div>
          </div>
        </yt-touch-feedback-shape>
      </button>
    </yt-button-shape>
    <tp-yt-paper-tooltip fit-to-visible-bounds="" offset="8" disable-upgrade=""></tp-yt-paper-tooltip>
  </ytd-button-renderer>
</div>

This code that I just inserted is for a video page that I am not subscribed to. The code you find will look very similar, but please ensure that it is from a video belonging to a channel that you are subscribed to. When you post the code, it will probably all be on one line, that's okay.

If you don't know web development, it can be difficult to find what I'm looking for. If you can't find the correct code, or don't want to look for it, that's okay, I'm sure the new layout changes will roll out to other accounts in a few days.

bOBERmASTER commented 1 year ago

this?

</tp-yt-paper-tooltip></div><dom-repeat id="repeat" as="badge" class="style-scope ytd-badge-supported-renderer"><template is="dom-repeat"></template></dom-repeat></ytd-badge-supported-renderer>
</ytd-channel-name><yt-formatted-string id="owner-sub-count" class="style-scope ytd-video-owner-renderer" aria-label="240 тысяч подписчиков">240&nbsp;тыс. подписчиков</yt-formatted-string></div><div id="purchase-button" class="style-scope ytd-video-owner-renderer" hidden=""></div><div id="sponsor-button" class="style-scope ytd-video-owner-renderer"></div><div id="analytics-button" class="style-scope ytd-video-owner-renderer"></div></ytd-video-owner-renderer>
      <div id="subscribe-button" class="style-scope ytd-watch-metadata"><ytd-subscribe-button-renderer class="style-scope ytd-watch-metadata" use-keyboard-focused="" subscribe-button-hidden=""><!--css-build:shady--><yt-smartimation class="style-scope ytd-subscribe-button-renderer">
  <yt-button-shape version="modern" class="style-scope ytd-subscribe-button-renderer" hidden=""><button class="yt-spec-button-shape-next yt-spec-button-shape-next--tonal yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m " aria-label="Отменить подписку на канал &quot;StopGame Инфакт&quot;" style=""><div class="cbox yt-spec-button-shape-next--button-text-content"><span class="yt-core-attributed-string yt-core-attributed-string--white-space-no-wrap" role="text">Вы подписаны</span></div><yt-touch-feedback-shape style="border-radius: inherit;"><div class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response" aria-hidden="true"><div class="yt-spec-touch-feedback-shape__stroke" style=""></div><div class="yt-spec-touch-feedback-shape__fill" style=""></div></div></yt-touch-feedback-shape></button></yt-button-shape>
  <div id="notification-preference-toggle-button" class="style-scope ytd-subscribe-button-renderer"></div>
  <div id="notification-preference-button" class="style-scope ytd-subscribe-button-renderer"><ytd-subscription-notification-toggle-button-renderer-next class="style-scope ytd-subscribe-button-renderer" button-renderer="true"><yt-button-shape><button class="yt-spec-button-shape-next yt-spec-button-shape-next--tonal yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--icon-leading-trailing " aria-label="Уведомления о канале &quot;StopGame Инфакт&quot; отключены. Нажмите, чтобы изменить настройки." style=""><div class="yt-spec-button-shape-next__icon" aria-hidden="true"><yt-icon style="width: 24px; height: 24px;"><svg viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" focusable="false" class="style-scope yt-icon" style="pointer-events: none; display: block; width: 100%; height: 100%;"><g class="style-scope yt-icon"><path d="M3.85,3.15L3.15,3.85l3.48,3.48C6.22,8.21,6,9.22,6,10.32v5.15l-2,1.88V19h14.29l1.85,1.85l0.71-0.71L3.85,3.15z M5,18 v-0.23l2-1.88v-5.47c0-0.85,0.15-1.62,0.41-2.3L17.29,18H5z M10,20h4c0,1.1-0.9,2-2,2S10,21.1,10,20z M9.28,5.75l-0.7-0.7 c0.43-0.29,0.9-0.54,1.42-0.7V3.96c0-1.42,1.49-2.5,2.99-1.76C13.64,2.52,14,3.23,14,3.96v0.39c2.44,0.75,4,3.06,4,5.98v4.14l-1-1 v-3.05c0-2.47-1.19-4.36-3.13-5.1c-1.26-0.53-2.64-0.5-3.84,0.03C9.76,5.46,9.52,5.59,9.28,5.75z" class="style-scope yt-icon"></path></g></svg><!--css-build:shady--><!--css-build:shady--></yt-icon></div><div class="cbox yt-spec-button-shape-next--button-text-content"><span class="yt-core-attributed-string yt-core-attributed-string--white-space-no-wrap" role="text">Вы подписаны</span></div><div class="yt-spec-button-shape-next__secondary-icon"><yt-icon style="width: 24px; height: 24px;"><svg viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" focusable="false" class="style-scope yt-icon" style="pointer-events: none; display: block; width: 100%; height: 100%;"><g class="style-scope yt-icon"><path d="M12,15.7L5.6,9.4l0.7-0.7l5.6,5.6l5.6-5.6l0.7,0.7L12,15.7z" class="style-scope yt-icon"></path></g></svg><!--css-build:shady--><!--css-build:shady--></yt-icon></div><yt-touch-feedback-shape style="border-radius: inherit;"><div class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response" aria-hidden="true"><div class="yt-spec-touch-feedback-shape__stroke" style=""></div><div class="yt-spec-touch-feedback-shape__fill" style=""></div></div></yt-touch-feedback-shape></button></yt-button-shape>
</ytd-subscription-notification-toggle-button-renderer-next></div>
</yt-smartimation>
</ytd-subscribe-button-renderer></div>
    </div>

  <div id="actions" class="item style-scope ytd-watch-metadata" style="flex-direction: row-reverse;">
      <div id="actions-inner" class="style-scope ytd-watch-metadata" style="width: revert;">
        <div id="menu" class="style-scope ytd-watch-metadata"><ytd-menu-renderer class="style-scope ytd-watch-metadata" safe-area="" tonal-override="" has-items="2" has-flexible-items=""><!--css-build:shady--><div id="top-level-buttons-computed" class="top-level-buttons style-scope ytd-menu-renderer"><ytd-segmented-like-dislike-button-renderer class="style-scope ytd-menu-renderer" button-renderer="true"><!--css-build:shady--><!--css-build:shady--><yt-smartimation class="style-scope ytd-segmented-like-dislike-button-renderer"><div id="segmented-buttons-wrapper" class="style-scope ytd-segmented-like-dislike-button-renderer"><div id="segmented-like-button" class="style-scope ytd-segmented-like-dislike-button-renderer"><ytd-toggle-button-renderer class="style-scope ytd-segmented-like-dislike-button-renderer" button-renderer="true"><yt-button-shape><button class="yt-spec-button-shape-next yt-spec-button-shape-next--tonal yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--icon-leading yt-spec-button-shape-next--segmented-start " aria-pressed="false" aria-label="Видео понравилось вам и ещё 7&nbsp;902&nbsp;пользователям" style=""><div class="yt-spec-button-shape-next__icon" aria-hidden="true"><yt-icon style="width: 24px; height: 24px;"><yt-animated-icon class="style-scope yt-icon" animated-icon-type="LIKE"><!--css-build:shady--><!--css-build:shady--><ytd-lottie-player class="style-scope yt-animated-icon"><lottie-component class="lottie-component"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 270 270" width="270" height="270" preserveAspectRatio="xMidYMid meet" style="width: 100%; height: 100%; transform: translate3d(0px, 0px, 0px);"><defs><clipPath id="__lottie_element_41"><rect width="270" height="270" x="0" y="0"></rect></clipPath><clipPath id="__lottie_element_43"><path d="M0,0 L120,0 L120,120 L0,120z"></path></clipPath><clipPath id="__lottie_element_57"><path d="M0,0 L128,0 L128,128 L0,128z"></path></clipPath></defs><g clip-path="url(#__lottie_element_41)"><g clip-path="url(#__lottie_element_57)" style="display: none;"><g style="display: none;"><g><path stroke-linecap="round" stroke-linejoin="miter" fill-opacity="0" stroke-miterlimit="4"></path></g></g><g style="display: none;"><g><path stroke-linecap="round" stroke-linejoin="miter" fill-opacity="0" stroke-miterlimit="4"></path></g></g><g style="display: none;"><g><path></path></g><g><path></path></g><g><path></path></g><g><path></path></g><g><path></path></g><g><path></path></g></g><g style="display: none;"><g><path stroke-linecap="round" stroke-linejoin="miter" fill-opacity="0" stroke-miterlimit="4"></path></g></g><g style="display: none;"><g><path stroke-linecap="round" stroke-linejoin="miter" fill-opacity="0" stroke-miterlimit="4"></path></g></g><g style="display: none;"><g><path></path></g><g><path></path></g><g><path></path></g><g><path></path></g><g><path></path></g><g><path></path></g></g><g style="display: none;"><g><path stroke-linecap="round" stroke-linejoin="miter" fill-opacity="0" stroke-miterlimit="4"></path></g></g><g style="display: none;"><g><path stroke-linecap="round" stroke-linejoin="miter" fill-opacity="0" stroke-miterlimit="4"></path></g></g><g style="display: none;"><g><path></path></g><g><path></path></g><g><path></path></g><g><path></path></g><g><path></path></g><g><path></path></g><g><path></path></g><g><path></path></g><g><path></path></g></g><g style="display: none;"><g><path stroke-linecap="round" stroke-linejoin="miter" fill-opacity="0" stroke-miterlimit="4"></path></g></g></g><g clip-path="url(#__lottie_element_43)" transform="matrix(1.0880000591278076,0,0,1.0880000591278076,69.95299530029297,67.9433822631836)" opacity="1" style="display: block;"><g style="display: none;"><path></path><path stroke-linecap="butt" stroke-linejoin="miter" fill-opacity="0" stroke-miterlimit="4"></path></g><g transform="matrix(1,0,0,1,60,60)" opacity="1" style="display: block;"><path stroke-linecap="butt" stroke-linejoin="miter" fill-opacity="0" stroke-miterlimit="4" stroke="rgb(255,255,255)" stroke-opacity="1" stroke-width="4" d=" M25.025999069213867,-4.00600004196167 C25.025999069213867,-4.00600004196167 5.992000102996826,-3.996999979019165 5.992000102996826,-3.996999979019165 C5.992000102996826,-3.996999979019165 11.012999534606934,-22.983999252319336 11.012999534606934,-22.983999252319336 C12.230999946594238,-26.90399932861328 13,-31.94300079345703 8.994000434875488,-31.981000900268555 C7,-32 5,-32 4.021999835968018,-31.007999420166016 C4.021999835968018,-31.007999420166016 -19.993000030517578,-5.03000020980835 -19.993000030517578,-5.03000020980835 C-19.993000030517578,-5.03000020980835 -20.027999877929688,32.025001525878906 -20.027999877929688,32.025001525878906 C-20.027999877929688,32.025001525878906 20.97599983215332,31.986000061035156 20.97599983215332,31.986000061035156 C25.010000228881836,31.986000061035156 26.198999404907227,29.562000274658203 26.99799919128418,25.985000610351562 C26.99799919128418,25.985000610351562 31.972000122070312,4.026000022888184 31.972000122070312,4.026000022888184 C33,-0.6930000185966492 30.392000198364258,-4.00600004196167 25.025999069213867,-4.00600004196167z"></path></g><g style="display: none;"><path></path><path stroke-linecap="butt" stroke-linejoin="miter" fill-opacity="0" stroke-miterlimit="4"></path></g><g transform="matrix(1,0,0,1,60,60)" opacity="1" style="display: block;"><path stroke-linecap="butt" stroke-linejoin="miter" fill-opacity="0" stroke-miterlimit="4" stroke="rgb(255,255,255)" stroke-opacity="1" stroke-width="4" d=" M-19.986000061035156,-4.03000020980835 C-19.986000061035156,-4.03000020980835 -36.020999908447266,-3.996999979019165 -36.020999908447266,-3.996999979019165 C-36.020999908447266,-3.996999979019165 -36.00199890136719,31.993000030517578 -36.00199890136719,31.993000030517578 C-36.00199890136719,31.993000030517578 -20.030000686645508,32.02299880981445 -20.030000686645508,32.02299880981445 C-20.030000686645508,32.02299880981445 -19.986000061035156,-4.03000020980835 -19.986000061035156,-4.03000020980835z"></path></g></g></g></svg></lottie-component></ytd-lottie-player></yt-animated-icon><!--css-build:shady--><!--css-build:shady--></yt-icon></div><div class="cbox yt-spec-button-shape-next--button-text-content"><span class="yt-core-attributed-string yt-core-attributed-string--white-space-no-wrap" role="text">7,9&nbsp;тыс.</span></div><yt-touch-feedback-shape style="border-radius: inherit;"><div class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response" aria-hidden="true"><div class="yt-spec-touch-feedback-shape__stroke" style=""></div><div class="yt-spec-touch-feedback-shape__fill" style=""></div></div></yt-touch-feedback-shape></button></yt-button-shape>
<tp-yt-paper-tooltip fit-to-visible-bounds="" offset="8" role="tooltip" tabindex="-1" style="inset: 44px auto auto 9.07031px;"><!--css-build:shady--><div id="tooltip" class="style-scope tp-yt-paper-tooltip hidden" style-target="tooltip">
  Нравится
</div>
</tp-yt-paper-tooltip>
</ytd-toggle-button-renderer></div><div id="segmented-dislike-button" class="style-scope ytd-segmented-like-dislike-button-renderer"><ytd-toggle-button-renderer class="style-scope ytd-segmented-like-dislike-button-renderer" button-renderer="true"><yt-button-shape><button class="yt-spec-button-shape-next yt-spec-button-shape-next--tonal yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--segmented-end yt-spec-button-shape-next--icon-leading" aria-pressed="false" aria-label="Поставить отметку &quot;Не нравится&quot;" style=""><div class="yt-spec-button-shape-next__icon" aria-hidden="true"><yt-icon style="width: 24px; height: 24px;"><svg viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" focusable="false" class="style-scope yt-icon" style="pointer-events: none; display: block; width: 100%; height: 100%;"><g class="style-scope yt-icon"><path d="M17,4h-1H6.57C5.5,4,4.59,4.67,4.38,5.61l-1.34,6C2.77,12.85,3.82,14,5.23,14h4.23l-1.52,4.94C7.62,19.97,8.46,21,9.62,21 c0.58,0,1.14-0.24,1.52-0.65L17,14h4V4H17z M10.4,19.67C10.21,19.88,9.92,20,9.62,20c-0.26,0-0.5-0.11-0.63-0.3 c-0.07-0.1-0.15-0.26-0.09-0.47l1.52-4.94l0.4-1.29H9.46H5.23c-0.41,0-0.8-0.17-1.03-0.46c-0.12-0.15-0.25-0.4-0.18-0.72l1.34-6 C5.46,5.35,5.97,5,6.57,5H16v8.61L10.4,19.67z M20,13h-3V5h3V13z" class="style-scope yt-icon"></path></g></svg><!--css-build:shady--><!--css-build:shady--></yt-icon></div><div class="cbox yt-spec-button-shape-next--button-text-content"><span class="yt-core-attributed-string yt-core-attributed-string--white-space-no-wrap" role="text">370</span></div><yt-touch-feedback-shape style="border-radius: inherit;"><div class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response" aria-hidden="true"><div class="yt-spec-touch-feedback-shape__stroke" style=""></div><div class="yt-spec-touch-feedback-shape__fill" style=""></div></div></yt-touch-feedback-shape></button></yt-button-shape>
<tp-yt-paper-tooltip fit-to-visible-bounds="" offset="8" role="tooltip" tabindex="-1" style="inset: 44px auto auto 94.0859px;"><!--css-build:shady--><div id="tooltip" class="style-scope tp-yt-paper-tooltip hidden" style-target="tooltip">
  Не нравится
</div>
</tp-yt-paper-tooltip>
</ytd-toggle-button-renderer></div></div></yt-smartimation></ytd-segmented-like-dislike-button-renderer><ytd-button-renderer class="style-scope ytd-menu-renderer" button-renderer="" button-next=""><yt-button-shape><button class="yt-spec-button-shape-next yt-spec-button-shape-next--tonal yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--icon-leading " aria-label="Поделиться" style=""><div class="yt-spec-button-shape-next__icon" aria-hidden="true"><yt-icon style="width: 24px; height: 24px;"><svg viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" focusable="false" class="style-scope yt-icon" style="pointer-events: none; display: block; width: 100%; height: 100%;"><g mirror-in-rtl="" class="style-scope yt-icon"><path d="M15,5.63L20.66,12L15,18.37V15v-1h-1c-3.96,0-7.14,1-9.75,3.09c1.84-4.07,5.11-6.4,9.89-7.1L15,9.86V9V5.63 M14,3v6 C6.22,10.13,3.11,15.33,2,21c2.78-3.97,6.44-6,12-6v6l8-9L14,3L14,3z" class="style-scope yt-icon"></path></g></svg><!--css-build:shady--><!--css-build:shady--></yt-icon></div><div class="cbox yt-spec-button-shape-next--button-text-content"><span class="yt-core-attributed-string yt-core-attributed-string--white-space-no-wrap" role="text">Поделиться</span></div><yt-touch-feedback-shape style="border-radius: inherit;"><div class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response" aria-hidden="true"><div class="yt-spec-touch-feedback-shape__stroke" style=""></div><div class="yt-spec-touch-feedback-shape__fill" style=""></div></div></yt-touch-feedback-shape></button></yt-button-shape><tp-yt-paper-tooltip fit-to-visible-bounds="" offset="8" role="tooltip" tabindex="-1" style="inset: 44px auto auto 213.719px;"><!--css-build:shady--><div id="tooltip" class="style-scope tp-yt-paper-tooltip hidden" style-target="tooltip">
  Поделиться
</div>
BleakBluets commented 1 year ago

Yep, that has what I was looking for. It seems like everything is normal though. I don't think your script is failing because of a site update invalidating the selectors used to find the subscribe button like I originally thought. This seems to be an issue just on your end.

What you can try next is going into your userscript manager (i.e. Tampermonkey, Violentmonkey, etc.) and changing the auto-like script's settings back to default. "Check Frequency" is 5000 ms by default, "Watch Threshold" is 50%, and "Like if not subscribed" is off by default. Then make sure when you test with these settings that you fast forward the video to a point beyond your "Watch Threshold" and wait at least 5 seconds for the script to auto-like the video.

If it's still not working after resetting your settings, and if you've already tried uninstalling and reinstalling the most up-to-date version of the auto-like script, you can enable "Debug Mode" in the script's settings and watch your browser's developer console for any errors when the auto-like script should be running.

bOBERmASTER commented 1 year ago

debug mode not working image

BleakBluets commented 1 year ago

Okay, I was able to replicate the issue on Chrome using ViolentMonkey. In the console, loading any YouTube page consistently gives this error:

YouTube Auto-Liker.user.js:433
Uncaught TypeError: Cannot read properties of undefined (reading 'value')
    at construct.get (YouTube Auto-Liker.user.js:433:50)
    at YouTube Auto-Liker.user.js:1012:61
    at YouTube Auto-Liker.user.js:1108:3
    at YouTube Auto-Liker.user.js:1109:3
    at Proxy.VMq9y2n489yre (YouTube Auto-Liker.user.js:1109:7)
    at Ut (injected-web.js:1:14233)
    at YouTube Auto-Liker.user.js:1:21
    at async $t (injected.js:1:8131)
    at async injected.js:1:13171

Interestingly, there are no messages at all when using TamperMonkey on Chrome, which is why I'm assume you weren't seeing anything on your console. I use ViolentMonkey on Firefox, which is why I didn't encounter this issue. I'm also getting TypeErrors for another Chrome extension I had installed, so something must have changed with a recent Chrome update. I'll keep looking into it now that I'm able to replicate the issue, but it doesn't look like it will be a quick and simple fix.

BleakBluets commented 1 year ago

I created a pull request with a solution that will work for now.