YouTube Like/Dislike Shortcut

Enables keyboard shortcuts to like/dislike a video on YouTube.

Ajankohdalta 20.11.2024. Katso uusin versio.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name               YouTube Like/Dislike Shortcut
// @name:pt-BR         Atalhos Gostei/Não Gostei no YouTube
// @namespace          will64gamer
// @author             will64gamer
// @description        Enables keyboard shortcuts to like/dislike a video on YouTube.
// @description:pt-BR  Cria atalhos para os botões gostei/não gostei em um vídeo no YouTube.
// @match              *://*.youtube.com/*
// @license            MIT
// @version            4.6
// ==/UserScript==

// You can change the codes to whichever keys you want to use for liking, disliking, and opening or writing comments on Shorts.
const codeLike = "NumpadAdd";
const codeDislike = "NumpadSubtract";
const codeComments = "NumpadMultiply";
// Don't use a key that only types its character once you type another because otherwise it will be typed first when you type your comment.
const codeWrite = "NumpadDivide";

/* Filling in these quotation marks with the code of a key creates an additional shortcut dedicated to removing your like/dislike,
   that makes it so that pressing the regular shortcuts for liking/disliking multiple times has no effect on the state of that button.
   If you want to use the regular shortcuts for removing likes/dislikes as well, leave this blank.                                     */
let codeRemove = " ";

// If you want the shortcut to be triggered only when holding ctrl, alt, or shift, change this value from 0 to 1, 2, or 3, respectively.
const combination = 0;

// Change this to 0 if you don't want the sound alert. 1 only triggers the alert on regular videos, 2 triggers it on Shorts as well.
const alertPlays = 2;

// Change these values if you want to change the volume percentage of the alerts from their default (value must be between in the 0-100 range).
const likeVolumePercentage = 50;
const dislikeVolumePercentage = 30;

// You can change the sounds for the alerts by using your own audio file URLs or base64 encoded data.
const likeSound = new Audio(`
  data:audio/mp3; base64,
  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
`);

const dislikeSound = new Audio(`
  data:audio/mp3; base64,
  T2dnUwACAAAAAAAAAADhG2xgAAAAANxG0LMBHgF2b3JiaXMAAAAAAkSsAAAAAAAAgDgBAAAAAAC4AU9nZ1MAAAAAAAAAAAAA4RtsYAEAAADuC6UFDzr/////////////////qQN2b3JiaXMqAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAxMDAzMjUgKEV2ZXJ5d2hlcmUpAAAAAAEFdm9yYmlzIUJDVgEAAAEAGGNUKUaZUtJKiRlzlDFGmWKSSomlhBZCSJ1zFFOpOdeca6y5tSCEEBpTUCkFmVKOUmkZY5ApBZlSEEtJJXQSOiedYxBbScHWmGuLQbYchA2aUkwpxJRSikIIGVOMKcWUUkpCByV0DjrmHFOOSihBuJxzq7WWlmOLqXSSSuckZExCSCmFkkoHpVNOQkg1ltZSKR1zUlJqQegghBBCtiCEDYLQkFUAAAEAwEAQGrIKAFAAABCKoRiKAoSGrAIAMgAABKAojuIojiM5kmNJFhAasgoAAAIAEAAAwHAUSZEUybEkS9IsS9NEUVV91TZVVfZ1Xdd1Xdd1IDRkFQAAAQBASKeZpRogwgxkGAgNWQUAIAAAAEYowhADQkNWAQAAAQAAYig5iCa05nxzjoNmOWgqxeZ0cCLV5kluKubmnHPOOSebc8Y455xzinJmMWgmtOaccxKDZiloJrTmnHOexOZBa6q05pxzxjmng3FGGOecc5q05kFqNtbmnHMWtKY5ai7F5pxzIuXmSW0u1eacc84555xzzjnnnHOqF6dzcE4455xzovbmWm5CF+eccz4Zp3tzQjjnnHPOOeecc84555xzgtCQVQAAEAAAQRg2hnGnIEifo4EYRYhpyKQH3aPDJGgMcgqpR6OjkVLqIJRUxkkpnSA0ZBUAAAgAACGEFFJIIYUUUkghhRRSiCGGGGLIKaecggoqqaSiijLKLLPMMssss8wy67CzzjrsMMQQQwyttBJLTbXVWGOtueecaw7SWmmttdZKKaWUUkopCA1ZBQCAAAAQCBlkkEFGIYUUUoghppxyyimooAJCQ1YBAIAAAAIAAAA8yXNER3RER3RER3RER3REx3M8R5RESZRESbRMy9RMTxVV1ZVdW9Zl3fZtYRd23fd13/d149eFYVmWZVmWZVmWZVmWZVmWZVmC0JBVAAAIAACAEEIIIYUUUkghpRhjzDHnoJNQQiA0ZBUAAAgAIAAAAMBRHMVxJEdyJMmSLEmTNEuzPM3TPE30RFEUTdNURVd0Rd20RdmUTdd0Tdl0VVm1XVm2bdnWbV+Wbd/3fd/3fd/3fd/3fd/3dR0IDVkFAEgAAOhIjqRIiqRIjuM4kiQBoSGrAAAZAAABACiKoziO40iSJEmWpEme5VmiZmqmZ3qqqAKhIasAAEAAAAEAAAAAACia4imm4imi4jmiI0qiZVqipmquKJuy67qu67qu67qu67qu67qu67qu67qu67qu67qu67qu67qu67ouEBqyCgCQAADQkRzJkRxJkRRJkRzJAUJDVgEAMgAAAgBwDMeQFMmxLEvTPM3TPE30RE/0TE8VXdEFQkNWAQCAAAACAAAAAAAwJMNSLEdzNEmUVEu1VE21VEsVVU9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU1TdM0TSA0ZCUAEAUAQDlssebeG2GYchRzaYxTjmpQkULKWQ0qQgoxib1VzDEnMcfOMeak5ZwxhBi0mjunFHOSAqEhKwSA0AwAh+MAkmYBkqUBAAAAAAAAgKRpgOZ5gOZ5AAAAAAAAACBpGqB5HqB5HgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjqYBmucBmucBAAAAAAAAgOZ5gCeagCeKAAAAAAAAAGB5HuCJHuCJIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjqYBmucBmicCAAAAAAAAgOV5gGeKgOeJAAAAAAAAAKB5HuCJIuCJIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAHAIAAC6HQkBUBQJwAgENxLAkAABzHsSwAAHAcybIAAMCyLM8DAADLsjwPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAMCAAwBAgAlloNCQlQBAFACAQTE0DciyZQGXZQE0DaBpAE8EeB5ANQGAAACAAgcAgAAbNCUWByg0ZCUAEAUAYFAUS7Isz4OmaZooQtM0TRShaZ5nmtA0zzNNiKLnmSY8z/NME6YpiqoKRFFVBQAAFDgAAATYoCmxOEChISsBgJAAAIOjWJameZ7niaJpqio0zfNEURRN0zRVFZrmeaIoiqZpmqoKTfM8URRF01RVVYWmeZ4oiqJpqqqrwvNEUTRN0zRV1XXheaJoiqZpmqrquhBFUTRN01RV13VdIIqmaZqq6rquC0TRNE1VVV1XloEomqZpqqrryjIwTdNUVdd1XVkGmKaquq7ryjJAVV3XdWVZlgGqqqquK8uyDHBd13VdWbZtAK7rurJs2wIAAA4cAAACjKCTjCqLsNGECw9AoSErAoAoAADAGKYUU8owJiGkEBrGJIQUQiUlpZRKqSCkUlIpFYRUUiolo5JSaillEFIpKZUKQimllVQAANiBAwDYgYVQaMhKACAPAIAgRCnGGHNOSqkUY845J6VUijHnnJNSMsaYc85JKRljzDnnpJSMOeecc1JKxpxzzjkppXPOOeeclFJK55xzTkopJYTOOSellNI555wTAABU4AAAEGCjyOYEI0GFhqwEAFIBAAyOY1mapmmeZ4qaZGma53meKJqmJkma5nmeJ4qmyfM8TxRF0TRVk+d5niiKommqKtcVRdE0TVVVVbIsiqJomqqqqjBN01RVV3VdmKYpqqqryi5k2TRV1XVlGbZtmqrqurIMVFdVXdeWgauqqmzasgAA8AQHAKACG1ZHOCkaCyw0ZCUAkAEAQBCCkFIKIaUUQkophJRSCAkAABhwAAAIMKEMFBqyEgBIBQAADJFSSimllNI4JaWUUkoppXFMSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkopBQAuVTgA6D7YsDrCSdFYYKEhKwGAVAAAwBiFGINQSmsVQow5J6Wl1iqEGHNOSkqt5Yw5ByGl1mLLnXMMQimtxdhT6ZyUlFqLsacUOioptRZb772kklprLcbeewop1NZajL33VlNrLcYae+85thJLrDH23nuPtcXYYuy99x5bS7XlWAAAZoMDAESCDasjnBSNBRYashIACAkAIIxRSinGnHPOOeeklIwx5hyEEEIIoZSSMcecgxBCCCGUUjLmnIMQQgglhFJKxpyDDkIIJYRSUuqccxBCCKGEUEopnXMOQgghhFBKSqlzEEIIIYQQSiklpdQ5CCGUEEIIKaWUQgghhBBCCCGVklIIIYQQQiillFRSCiGEEEIIpYRSUkophRBKCCGEUFJKKaVSSgkhhBBKSimlFEoIIZQQQkoppZRKCSGEEEpIqaSUUkkhhBBCCAUAABw4AAAEGEEnGVUWYaMJFx6AQkNWAgBRAAAQghJCSS0CSCkmrYZIOSet1hI5pBzFGiKmlJOWQgaZUkxKCS10jElLKbYSOkip5hxTCCkAAACCAIAAE0BggKDgCyEgxgAABCEyQyQUVsECgzJocJgHAA8QERIBQGKCIu3iAroMcEEXdx0IIQhBCGJxAAUk4OCEG554wxNucIJOUakDAQAAAABgAIAHAACEAoiIaOYqLC4wMjQ2ODo8PkAEAAAAAIALAD4AAJAQICKimauwuMDI0Njg6PD4AAkAAAQQAAAAAAABBCAgIAAAAAAAEAAAACAgT2dnUwAEfjEAAAAAAADhG2xgAgAAAO96lyZYMCsoJCQlJCUnJCEiKCMmIiElJCQjIh8iJSYfIigkJCMjICQkJSAiJiQkICIlJCMjISMkJSQhIyQiJiMiJSYjJSEiJiMoIyEoJSchISIpKiQpJi4pKaWkoWzfU3/f9j319x2aKDIFJpMxEBRijA/P7vHr19cm+kOPaVzJnMzZLqszaaPn4cb7FVzph9+eV/rht+cP0JI6AJQAEdw9DNM0qUG7VCXJOEUbT9ukWTI0sWSQHwCM6Sdgf8f0E7C/h7KaEeCkAUCMig4xlvNX9miZyGbGmWYZyxyaZbABbO1vLgZb+5uLwQlADTECQMMAPDxdVRwmHzGiSZqXzeqsz4MDZO0nhDdrPyE8TwB6DQAAaBiA4fQ0VdTcbfusZpxpLtHZzmUCVOlHh39U6UeHf5wAzAYAQMNIEObppWoYPMql6WDJSBfMxsxIMVTphxP/rNIPF/95AhABAEDDABzhXcUyA4KTQxPz3DCS44w3AFTl85T/XYXPQ/4XOAHIASBQAeJlm7Zt6vP/H/UvSY/Kh0u3K2h86+t+/P3W1/34ewLAEwCAEsDb6eZ0cXUE2oiyx6qFCuZoXMZlaABs7ZfNP1v7ZfPPD9AZAIAGCUT18DJMBEv2tNHRHIRGz1ddzwpM7dPkv1P7NPnvSQAUAIBGM4CPPnoagNHc/BG7nCLV/wFc6+fIf1zr58h/nAAYAAA0SMAHDy/DFsOoNf/LsOYYvw0AVOlzk39W6XOTf/wAvAAAoIEALt4ZDEPEyqgZhmb99lka0ohs838HAHzpU9///NKnvv95aFotpGAHAMAkEGK83+vI1MXiK+1onh0AZO3HDn+y9kXb7wOAJgAADSOBp3daWwxTNAUpJq+sFB0xRjNmCQBc7YcLf6/2w4W/PwAFAACNBuAb5m0iKoahS+P1qbel1OkBVOvTun9U69O6f5wAmAAA0GgA6uotYqnxkzOlLGbPMZIATOnT2n9O6dPaf/4ArQMA0GgAIVdPp4pYmQwZxqUl6RUqauzzAXznU9//At/51Pe/wCFqRSA5AAAIQQqO4YgHZ7pdy8Xh6nguAHTt0/5/uvZp/z8nANEBACglIB5emJYtb6tqtuWu+TKlKzPbAmTtx5x/s/Zjzr8nANwAAGiQAXz08DbUFEkL5x2sOJWVjKkHXOsLvr/V+tzX3x+AEACAxs4AB1sV9aOqXZiSV3t1ls/PB1zrl+Y/rvVL8x8nACQAAA0EwGlbpqm83ERWnXDmmw9s6dOO/9zSpx3/eWioRgB3AAAMMeB4hEvv4f4qJ9I5lyMBfONzhf8CX/lc4b8P9ciMhBMAgRAkh0A18208WtwcT0+PS1rgAGzpi9x/bOmL3H/8ADYAAGok8PR2w6GmjMPQZslw/OJT7cpchgUAVOuL+N9qfRH/ewKgAAA0CsDD0xQ19PZ8dRrLve87AEzpl9w/pvRL7h8nAMwAADRmJLCdLipimj5SKoeZyDz7UQBM6TP+P6b0Gf8fP0BPAABoNBJEtiOZBmpOq23bJTO0YQ/dnf5sZWwBhOnT4n+G6dPifx4qNZkCTwAAiEGpov5zvTul8YUhrXGYS4cAXO1HHr+r/cjjzw8QCQAAjZFAeL+XiCKrg0iWiPSTh+WHGcYGVO2H+/5W7Yf7/v4ABgAAjZEBwrk5DUSki9k2PvsN9WdeBwBU63Mvf6v1uZe/JwAMAQDQGBnAw8vVUEUeBvIKN6f7Q6MUAFTrhxj/Ua0fYvzHCYAMAEAjCeBqIIZpUm6TC5Si9FQEVOXrIP5dla+D+PerNU3AHQAACUUCo3GI5HKdKzIqSYZhHFwDhOszwj/C9RnhH4fGQmQQDQCASnSIMTw2zV13ha+KDsYOc8gAXOtz039c63PTf5wA8AQAoGECIRfTKaZhtt1/Tlr3SVsdOi4FAFTrhwt/q/XDhb8nAAoAQKORIKqrm4FghPNPfPYqn5gNTOnrNv8xpa/b/McJgAwAQGNGAl+nFypiyuHSvOJt8w+jAFTpc+//qNLn3v/xA0QCAEBDgEsUb1sFu0k7jHaeN57uqDvOZQgAhOnT0n+G6dPSfx4aooxIeAIIOJQYRfid5ju7amy/0WTJWIAGZO1Hn3+z9qPPvycA0QAAaJAAbh6GKYY+Pfinhh7V7ZTOORgNXOvHtL/Z+rG/vycACgDATIBwDaS11JSYfdgbsU0m3gpU60eGf1TrR4Z/nAAwAwDQSAZwdfN2KIah03jVqa34NywAXOlzf/95pc/9/ecPQAEAQAng4ullmaaYQzJ2XFqK4+O1P283AXTlc4X/At35XOG/wCHrZQJNAACIiBDCPFt+1btjkUSXVRlGAGTr065/s/Vp178/gB0AgHIAEd091TJFloHMsN+nS5p27DwBTOmHL/4xpR+++McPIAEA0JiRIILpJqDMMc0Mqz/qR+Y/NgBM6bPYP6b0WewfJwAJAgDQaABBb28Ry6SJd2xe2oFhMQA85+sm/gWe83UT/wInBcgAADRGAJEcrgYG1skZnpG/Sq4vAEzhh0D/BabyQ6T/PgGIAACgDHC4iburqfLg9r+TV/a/k1d+BXzp067//NKnXf95aChDRooRAIAQUIgK9q1Tjzbf1tnQJM1LbQBU67PM32p9lvm7C9AZAIBGAIa3C+I0zKh1lnFYMr0Pnub7HBtM6Yu1P1P6Yu3PDxCgAQDQiACmp6eBaWjUiI1+hMPsPAlM57eNP9P5bePPDxACANBIBnB3czVQkRiXmbJ5fq8+/bP2A0znm90/p/PN7p8/ADcAABpkAHHxNFRF0mXpSJu7X58MNTZZqmzl0+x/b+XT7H8f6vUIKTgAAMAOFvG9t3G8039t4qu2kQFU6bd7/6jSb/f+8QNQHQCAhpHAw91LDRGsmJjjM68my9BmpfmJBkzn3zT+Babzbxr/3AXgAACgYSRws71sAzVHRblALcs8j3MAPOPTLv9+xqdd/n0CwAEAQENAyMvbFMPUE83oZQnuO2YNACTf68z+nYSvK/vvL8AOgACNUQAZu2OKoEOWSRLFVrYdktU6gARk3eua/2Xd61z/rU0QCSCQkBBNiEUikYec/vz83Cu43EuHZQIUB3TpC8c/uvSF4x+viYwE6gAAKEKQbFiGOc7Yb1+7Q7MMcywPTOmLrn9M6Yuuf5wARB0AgEYAnp4eBq4GXcen+VQcRJOOjbysAkznt7N/TOe3s3/8AAoAQIMEbC8vQ+OIsW1ME8by37ayADzlC/u/wFO+sP8L/AAyAACNZAA3hyeKKTUtMoSabE4LKwtE44u2f0Thi7bnB+AEAKAEcPP2stRUKeRiUVNwL/EfzbTMrMSQAlzfc4X/vr7nCv99aJqRJA4AASvEEII+VW/LNhdXr/N4tNAAROOLPX+i8cXePycAfQkg0DASRHH3UsMyjdduGWcxCHNFmyb5mSUiKDThl+a/+IRfm//iCQAzAAAzAxqaPpVp2WKc9drLqINs3igAJN1Ht2fSfXR7ngBkBhBozADyVG1FZY5e1Ap7va7aNw4FJNuz6J9kexb98wPMDgg0jAB+V28D1LFiasnYksGQidFgtllxxkguAFzbM8Z/V/eM8b9DpRKZSUxAIAQCQcF5DvevHMvxhnRO41gAwQFE5V8a/47KvzT+fQaIDgBAA4C6e7mYYpFPKo3EDrfHltNmsHRwGgBM4+st3ml8vcV7AiAjAJQygLeHt6GGcM/9bli+8+saHawU3wvyP0X4wvQfJwFgRgQSYLu4KGJZp7RP43nqea9DwSE04bPYv0ATPov9iycAxAACDRKwxXCKCu47Yw+8zCx+LOAAPNvrPv/FZ3vd5/8OTZRlEKIDApEQFWJ4cGf78/F8vBUZhmEYh+gSigJE19PSfxllT7v8/zVWykjEBASyGKViZxlm5jC/pe7HqqYys7qyDA2cqwA02zfmP5rtG/MfP0AwIFAOwNdhYynWLsHMba099NDxPTvvJBL8zlOv//udp6n/4lorAWcQ8aEwIxrJ1Nisz18XiparKhcPC+R8GVlwAOTQU4f/wtx5GvB/JwAGCGPNBDe6uBiIgZo9AhqbKyMdOEx2FG2h7NBzhf8CO/Rc4b/ACQAsqBYgAg0BlhCw5AjeKqZyHdvrO976i0uhMssTN1rMADTT08x/waZ6WvkveALAExAoAojW6Wk6sKWt73zPLv+rxuxoyQgs/rgAHNsb+b94ZC/4/wV+gB4AAg0SiCa6VyKiRsbzYXYom3NVvDxzum7TQQJ6ifV185AZSL8ONTi4xPq6ecgUpF+HGhz4Nq1XMstCZiFF0g6wVWTCyBhCDDGGAAAQBDGYQAjB0fEwlhhJDMLEWCw00cTIk5sMkuQ2kx0oIzuMla4aLMZMoymdGdoMbSbekxzqB259O7F+S5szm/sxq1Qltfqx2vjhttrAlFPj34zY6NMmFfIyRZmNN6Z6lsdqwa8vul/5PxgFKAC0AAcADSRAFAC+Sa31V8gdpI83Tdik1voVsgDp8aZBdexcws4OIcQQAwAyg+ZI8/JzsiKbk5tJJfl5+TltzsAB+RnZTG5eNiKbyWbSiDSTJm2WcQ4Mc5jR9zn7vbTw5lUxn6JqtuVuzMmC31vYei/pe6mKHU6zbRVl8zbZb3UL503P+5T/NpP/Hmc/3mTeZnjkbhaoWou6SpFeROBZTkqSnyUCQIIA4MAACg0YAJ5HvV4ujxgYjHxs3ORRt9fbIxKDWQ8hi2MziYoiF2MAAAAAAACkmWwyHLhMtpnczLyZ3Jy0kwbmpc3k5+XKGZiXpjm5EQ2RJm3O6iHLOGUONczBbauw0dwzs9W0UReWulrqaqmrVcWoq0WhrlhwoY2buVluloOzt7n9mYDLj0PjznFVR11Y9vLfSnbc3CP573PG7tnMk6rsSXe9zQFgewAc
`);

//    /\/\/\   Settings   /\/\/\
//  ------------------------------
//    \/\/\/     Code     \/\/\/

let tag, timeout;
let isShort = false, rendererId = 0, shortsArray = [];
let like, dislike, buttons, sLike, sDislike, comments, closeComments, textbox, commentBox, description;

if (codeRemove == null) {codeRemove = "";}
else {codeRemove = codeRemove.trim();}

likeSound.volume = likeVolumePercentage/100;
dislikeSound.volume = dislikeVolumePercentage/100;

const observer = new MutationObserver(findButtons);

addEventListener('yt-page-data-updated', reset);
addEventListener('popstate', reset);

function reset() {
  isVideo = /^\/watch/.test(location.pathname);
  isShort = /^\/shorts/.test(location.pathname);
  if (isVideo||isShort) {
    removeEventListener("keydown", press);
    like = null; dislike = null; sLike = null; sDislike = null;
    comments = null; closeComments = null; textbox = null;
    observer.observe(document.documentElement, {childList: true, subtree: true});
    findButtons();
  }
}

function findButtons() {
  if ((like && dislike) || (sLike && sDislike && comments)) {
    addEventListener("keydown", press);
    observer.disconnect();
    let currentURL = location.href, first = true;
    if (isShort) {
      let shortInterval = setInterval(() => {
        if (first) {
          checkId(location.href);
          first = false;
        }
        if (location.href !== currentURL) {
          clearInterval(shortInterval);
          currentURL = location.href;
          if(!checkId(location.href)){rendererId++;}
          reset();
        }
      }, 400);
    }
  }

  if (isShort) {
    adButtons = document?.getElementsByTagName("ytd-reel-video-renderer")[rendererId]
      ?.getElementsByClassName("overlay style-scope ytd-reel-video-renderer")[1]
      ?.getElementsByTagName("ytd-ad-slot-renderer")[0]?.firstElementChild?.firstElementChild?.firstElementChild
      ?.firstElementChild?.getElementsByClassName("YtwReelsPlayerOverlayLayoutViewModelHostActionBar")[0]
      ?.firstElementChild?.getElementsByTagName("button-view-model");
    if(!adButtons){
      buttons = document?.getElementsByTagName("ytd-reel-video-renderer")[rendererId]
        ?.getElementsByClassName("overlay style-scope ytd-reel-video-renderer")[1]?.firstElementChild
        ?.getElementsByClassName("action-container")[0]?.firstElementChild?.querySelectorAll("button");
      if (buttons) {
        sLike = buttons[0];
        sDislike = buttons[1];
        comments = buttons[2];
        closeComments = null;
      }
    } else {
      sLike = adButtons[0]?.firstElementChild?.firstElementChild?.firstElementChild?.firstElementChild;
      sDislike = adButtons[1]?.firstElementChild?.firstElementChild?.firstElementChild?.firstElementChild;
      comments = adButtons[2]?.firstElementChild?.firstElementChild?.firstElementChild;
      closeComments = "ad";
    }
  } else {
    like = document?.getElementsByTagName("like-button-view-model")[0]?.firstElementChild?.firstElementChild?.firstElementChild;
    dislike = document?.getElementsByTagName("dislike-button-view-model")[0]?.firstElementChild?.firstElementChild?.firstElementChild;
  }
}

function press(e) {
  if (e.target.getAttribute("contenteditable") === "true") {return;}

  tag = e.target.tagName.toLowerCase();
  if (tag === "input" || tag === "textarea") {return;}

  switch (combination) {
    case 1:
      if (!e.ctrlKey) {return;}
      break;
    case 2:
      if (!e.altKey) {return;}
      break;
    case 3:
      if (!e.shiftKey) {return;}
      break;
  }

  switch (e.code) {
    case codeComments:
      if (comments) {
        if (closeComments && closeComments != "ad") {
          closeComments.click();
          closeComments = null;
        } else {
          openComments();
        }
      }
      break;
    case codeWrite:
      e.preventDefault();
      e.stopPropagation();
      if (textbox) {
        openComments();
        setTimeout(() => {
          textbox.click();
        }, 100);
      } else if (comments) {
        openComments();
        let textboxInterval = setInterval(() => {
          if (!textbox) {
            textbox = document.getElementById("simplebox-placeholder");
          } else {
            textbox.focus();
            clearInterval(textboxInterval);
          }
        }, 300);
      } else {
        if (commentBox) {
          commentBox.click();
        } else {
          commentBox = document?.getElementsByClassName("style-scope ytd-comment-simplebox-renderer")[1]?.firstElementChild;
          if (!commentBox) {
            if (!description){
              description = document.getElementById("bottom-row");
              description.scrollIntoView();
            }
            let commentBoxInterval = setInterval(() => {
              if (!commentBox) {
                commentBox = document?.getElementsByClassName("style-scope ytd-comment-simplebox-renderer")[1]?.firstElementChild;
              } else {
                commentBox.focus();
                clearInterval(commentBoxInterval);
              }
            }, 300);
          } else {commentBox.click();}
        }
      }
      break;
    case codeLike:
      if (like) {
        if (codeRemove != "") {if (checkPressed(like)) {break;}}
        if (alertPlays !== 0) {alert(like);}
        like.click();
      }
      else if (sLike) {
        if (codeRemove != "") {if (checkPressed(sLike)) {break;}}
        if (alertPlays === 2) {alert(sLike);}
        sLike.click();
      }
      break;
    case codeDislike:
      if (dislike) {
        if (codeRemove != "") {if (checkPressed(dislike)) {break;}}
        if (alertPlays !== 0) {alert(dislike);}
        dislike.click();
      }
      else if (sDislike) {
        if (codeRemove != "") {if (checkPressed(sDislike)) {break;}}
        if (alertPlays === 2) {alert(sDislike);}
        sDislike.click();
      }
      break;
    case codeRemove:
      if (like) {
        if (checkPressed(like)) {like.click();} else if (checkPressed(dislike)) {dislike.click();}
      } else if (sLike) {
        if (checkPressed(sLike)) {sLike.click();} else if (checkPressed(sDislike)) {sDislike.click();}
      }
      break;
  }
}

function checkId(href) {
  for(let i = 0; i < shortsArray.length; i++) {
    if (href === shortsArray[i]) {
      rendererId = i;
      return true;
    }
  }
  shortsArray.push(href);
  return false;
}

function checkPressed(element) {
  return (element.getAttribute("aria-pressed") === "true");
}

function openComments() {
  comments.click();
  let closeCommentsInterval = setInterval(() => {
    if (!closeComments) {
      closeComments = document?.getElementById("visibility-button")?.getElementsByTagName('button')[0];
    } else {
      clearInterval(closeCommentsInterval);
    }
  }, 300);
}

function alert(element) {
  if (checkPressed(element)) {return;}
  if (element === dislike || element === sDislike) {dislikeSound.play();}
  else {likeSound.play();}
}