Greasy Fork is available in English.

TW ivvi

Twitch Emotes for TW

// ==UserScript==
// @name            TW ivvi
// @description     Twitch Emotes for TW
// @author          Ivvi + leb
// @version         1.6.5
// @match           https://*.the-west.net/game.php*
// @match           https://*.the-west.de/game.php*
// @match           https://*.the-west.pl/game.php*
// @match           https://*.the-west.nl/game.php*
// @match           https://*.the-west.se/game.php*
// @match           https://*.the-west.ro/game.php*
// @match           https://*.the-west.com.pt/game.php*
// @match           https://*.the-west.cz/game.php*
// @match           https://*.the-west.es/game.php*
// @match           https://*.the-west.ru/game.php*
// @match           https://*.the-west.com.br/game.php*
// @match           https://*.the-west.org/game.php*
// @match           https://*.the-west.hu/game.php*
// @match           https://*.the-west.gr/game.php*
// @match           https://*.the-west.dk/game.php*
// @match           https://*.the-west.sk/game.php*
// @match           https://*.the-west.fr/game.php*
// @match           https://*.the-west.it/game.php*
// @grant           none
// @run-at          document-end
// @namespace https://greasyfork.org/users/684666
// ==/UserScript==
/*
Adds a bunch of new Twitch Emotes (BetterTTV and FrankerFaceZ).
*/
const script = document.createElement('script');
script.type = 'text/javascript';
script.textContent = '(' + (function () {
  const TWKappa = {
    Settings: {
      image_size: 200,
      video_width: 300,
      video_height: 190
    },
    VersionControl: {
      version: 0.16,
      isOutdated: function () {
        return TWKappa.Emotes.Extra.storage.latestVersion > TWKappa.VersionControl.version;
      },
      // Gotta find a better way to do this now
      notifyOutdated: function () {
        if (TWKappa.VersionControl.isOutdated()) {
          new west.gui.Dialog(
            "TWKappa is outdated",
            "There's a new version of TW ivvi currently available! Do you want to install it?",
            west.gui.Dialog.SYS_WARNING
          )
            .addButton("Install!", function () {
              window.open(
                " https://greasyfork.org/en/scripts/410668-tw-ivvi-gh/code",
                "_blank"
              );
            })
            .addButton("Close", function () {
            })
            .show();
        }
      }
    },
    LocalStorage: {
      key: "twkappa_settings",
      init: function () {
        if (localStorage.getItem(TWKappa.LocalStorage.key) === null) {
          TWKappa.LocalStorage.save();
        } else {
          const fromLocal = JSON.parse(localStorage.getItem(TWKappa.LocalStorage.key));
          for (let key in TWKappa.Settings) {
            if (fromLocal[key] === undefined) {
              TWKappa.LocalStorage.save();
              break;
            }
          }
          TWKappa.LocalStorage.load();
        }
      },
      save: function () {
        localStorage.setItem(
          TWKappa.LocalStorage.key,
          JSON.stringify(TWKappa.Settings)
        );
      },
      load: function () {
        TWKappa.Settings = JSON.parse(
          localStorage.getItem(TWKappa.LocalStorage.key)
        );
      }
    },
    Window: {
      RegisterWestApi: function () {
        const content = $("<div>").text(
          "TWKappa, originally built by xShteff, no longer maintained. If you wish to contribute please contact me on GitHub and I will grant you access."
        );
        TheWestApi.register(
          "TWKappa",
          "TW Twitch Chat Emotes",
          "2.1",
          Game.version.toString(),
          "xShteff",
          "https://greasyfork.org/en/scripts/410668-tw-ivvi-gh/code"
        ).setGui(content);
      },
      Table: {
        buildRow: function (array) {
          const row = $("<tr>");
          for (let i = 0; i < array.length; i++) row.append(array[i]);
          return row;
        },
        buildCell: function (content) {
          return $("<td>").html(content);
        },
        buildRowCell: function (content) {
          return $("<td>")
            .attr("colspan", "2")
            .html(content);
        },
        buildLabel: function (text) {
          return $("<td>")
            .text(text)
            .css({
              "line-height": "30px",
              "font-weight": "bold"
            });
        },
        buildInputTable: function () {
          const table = $("<table>").attr("id", "twkappa_input_table");
          const r1Content = [
            TWKappa.Window.Table.buildLabel("Img max size: "),
            TWKappa.Window.Table.buildCell(
              new west.gui.Textfield("kappa_image_size")
                .setValue(TWKappa.Settings.image_size)
                .setSize(2)
                .onlyNumeric()
                .getMainDiv()
            )
          ];
          const r1 = TWKappa.Window.Table.buildRow(r1Content);

          const rYTWidthContent = [
            TWKappa.Window.Table.buildLabel("YT Height: "),
            TWKappa.Window.Table.buildCell(
              new west.gui.Textfield("kappa_yt_height")
                .setValue(TWKappa.Settings.video_height)
                .setSize(2)
                .onlyNumeric()
                .getMainDiv()
            )
          ];
          const rYTWidth = TWKappa.Window.Table.buildRow(rYTWidthContent);
          const rYTHeightContent = [
            TWKappa.Window.Table.buildLabel("YT Width: "),
            TWKappa.Window.Table.buildCell(
              new west.gui.Textfield("kappa_yt_width")
                .setValue(TWKappa.Settings.video_width)
                .setSize(2)
                .onlyNumeric()
                .getMainDiv()
            )
          ];
          const rYTHeight = TWKappa.Window.Table.buildRow(rYTHeightContent);
          const buttonSave = new west.gui.Button("Save", function () {
            TWKappa.Settings.image_size = $("#kappa_image_size").val();
            TWKappa.Settings.video_height = $("#kappa_yt_height").val();
            TWKappa.Settings.video_width = $("#kappa_yt_width").val();

            new UserMessage("Settings saved!").show();
            TWKappa.LocalStorage.save();
          });

          const buttonEmotes = new west.gui.Button("Emotelist", function () {
            $("#tw_kappa_emote_list").toggle();
          });

          const buttonFetchEmotes = new west.gui.Button(
            "Refresh",
            function () {
              TWKappa.Emotes.Twitch.init();
              TWKappa.Emotes.Extra.init();
            }
          );
          const r2 = TWKappa.Window.Table.buildRow([
            TWKappa.Window.Table.buildCell(buttonFetchEmotes.getMainDiv()),
            TWKappa.Window.Table.buildCell(buttonEmotes.getMainDiv())
          ]);
          table
            .append(r1)
            .append(rYTHeight)
            .append(rYTWidth)
            .append(
              TWKappa.Window.Table.buildRow(
                TWKappa.Window.Table.buildRowCell(
                  "Emotesuggestions are always welcome xo"
                )
              )
            )
            .append(
              TWKappa.Window.Table.buildRow(
                TWKappa.Window.Table.buildCell(buttonSave.getMainDiv())
              )
            )
            .append(r2);
          return table;
        },
        buildEmoteTable: function () {
          const table = $("<table>")
            .attr({
              id: "tw_kappa_emote_list",
              border: 1
            })
            .css({
              display: "none",
              "text-align": "center",
              width: "100%"
            });
          const header = $("<tr>");
          header.append(
            TWKappa.Window.Table.buildCell("<b>Image</b>"),
            TWKappa.Window.Table.buildCell("<b>Keyword</b>")
          );
          table.append(header);
          $.each(TWKappa.Emotes.Extra.storage.emoteArray, function (index, value) {
            const row = $("<tr>");
            const image = $("<img>")
              .attr({
                src: value.url,
                alt: value.name,
                title: value.name,
                class: "twkappa_preview"
              })
              .click(function () {
                const val = $("input.message").val();
                $("input.message").val(val + key + " ");
              });
            row.append(
              TWKappa.Window.Table.buildCell(image),
              TWKappa.Window.Table.buildCell(value.name)
            );
            table.append(row);
          });
          if (TWKappa.Emotes.Twitch.storage.emotes !== null)
            $.each(TWKappa.Emotes.Twitch.storage, function (key, value) {
              const row = $("<tr>");
              const image = $("<img>")
                .attr({
                  src: `https://static-cdn.jtvnw.net/emoticons/v1/${value.id}/1.0`,
                  alt: key,
                  title: key,
                  class: "twkappa_preview"
                })
                .click(function () {
                  const inputMsg = $("input.message");
                  const val = inputMsg.val();
                  inputMsg.val(val + key + " ");
                });
              row.append(TWKappa.Window.Table.buildCell(image), TWKappa.Window.Table.buildCell(key));
              table.append(row);
            });
          return table;
        }
      },
      open: function () {
        const content = $("<div>");
        content.append(TWKappa.Window.Table.buildInputTable());
        content.append(TWKappa.Window.Table.buildEmoteTable());
        const contentScroll = new west.gui.Scrollpane().appendContent(content);
        wman
          .open("twkappa", "TWivvi")
          .setMiniTitle("TWivvi")
          .setSize(320, 480)
          .appendToContentPane(contentScroll.getMainDiv());
        $("#twkappa_input_table tr:nth-child(4) td").css("padding-bottom", "20px");
      }
    },
    Icon: {
      init: function () {
        const icon = $("<div></div>")
          .attr({title: "TWivvi", class: "menulink"})
          .css({
            background: 'url("https://i.imgur.com/t2JBXb5.jpg")',
            "background-position": "0px 0px"
          })
          .mouseleave(function () {
            $(this).css("background-position", "0px 0px");
          })
          .mouseenter(function (e) {
            $(this).css("background-position", "25px 0px");
          })
          .click(function () {
            TWKappa.Window.open();
          });

        const cap = $("<div></div>").attr({class: "menucontainer_bottom"});

        if ($("#twkappa_init_button").length === 0) {
          $("#ui_menubar").append(
            $("<div></div>")
              .attr({
                class: "ui_menucontainer",
                id: "twkappa_init_button"
              })
              .append(icon)
              .append(cap)
          );
        }
      }
    },
    Emotes: {
      Extra: {
        storage: {},
        init: function () {
          emoteData.sort(function (x, y) {
            if (x.name.length < y.name.length) {
              return 1;
            }
            if (x.name.length > y.name.length) {
              return -1;
            }
            return 0;
          });
          emoteData.forEach(function(item) {
            item.name = $('<textarea/>').text(item.name).html();
          });
          TWKappa.Emotes.Extra.storage.emoteArray = emoteData;
        }
      },
      Twitch: {
        storage: null,
        init: function () {
          TWKappa.Emotes.Twitch.storage = twitchData;
        }
      },
      isInit: function () {
        return TWKappa.Emotes.Twitch.storage !== null || TWKappa.Emotes.Extra.storage !== null;
      },
      Fix: {
        KappaPride: "55338",
        KappaClaus: "74510",
        KappaWealth: "81997",
        KappaRoss: "70433",
        PeteZarollTie: "81244",
        AMPEnergyCherry: "99265"
      }
    },
    GameInject: {
      parser: function () {
        const oldfunc = Game.TextHandler.parse;
        Game.TextHandler.parse = function (m) {
          //YouTube
          if (TWKappa.Settings.video_width > 0 && TWKappa.Settings.video_height > 0) {
            const ytRegex = /^(?:https?:\/\/)?(?:www\.)?youtu(?:be\.com\/watch\?(?:.*?&(?:amp;)?)?v=|\.be\/)([\w\-]+)(?:&(?:amp;)?[\w?=]*)?$/g;
            const ytUrl = ytRegex.exec(m);
            if (ytUrl) {
              const ytFrame = $("<iframe>").attr({
                width: TWKappa.Settings.video_width,
                height: TWKappa.Settings.video_height,
                src: `https://www.youtube.com/embed/${ytUrl[1]}`,
                frameborder: 0,
                allowfullscreeen: ""
              });
              return ytFrame[0].outerHTML;
            }
          }

          //Images
          if (TWKappa.Settings.image_size > 0) {
            const imgRegex = /^http(|s):\/\/([^\s]*)\.(png|jpg|gif)$/g;
            if (imgRegex.test(m)) {
              const image = $("<img>")
                .attr({
                  src: m,
                  alt: "Click to enlarge"
                })
                .css({
                  "max-width": TWKappa.Settings.image_size + "px",
                  "max-height": TWKappa.Settings.image_size + "px"
                });
              return oldfunc(`<a href='${m}' target='_blank'>${image[0].outerHTML}</a>`);
            }
          }

          //Extra Emotes
          try {
            for (const k of TWKappa.Emotes.Extra.storage.emoteArray) {
              const emojiRegex = new RegExp("(^|\\s)" + k.name.replace(/([).^(])/g, "\\$1"), "g");
              const imgHtml = ` <img alt='${k.name}' title='${k.name}' src='${k.url}' />`;
              m = m.replace(emojiRegex, imgHtml);
            }
          } catch (error) {
            console.error(`Error with extra emotes: ${error}`);
          }
          //Fix for Kappas
          try {
            for (const k in TWKappa.Emotes.Fix) {
              const emojiRegex = new RegExp("(^|\\s)" + k.replace(/([).^(])/g, "\\$1"), "g");
              const imgHtml = ` <img alt='${k}' title='${k}' src='https://static-cdn.jtvnw.net/emoticons/v1/${TWKappa.Emotes.Fix[k]}/1.0' />`;
              m = m.replace(emojiRegex, imgHtml);
            }
          } catch (error) {
            console.error(`Error with kappa emotes: ${error}`);
          }

          try {
            if (TWKappa.Emotes.Twitch.storage !== null)
              for (const k in TWKappa.Emotes.Twitch.storage) {
                const emojiRegex = new RegExp("(^|\\s)" + k.replace(/([).^(])/g, "\\$1"), "g");
                const imgHtml = ` <img alt='${k}' title='${k}' src='https://static-cdn.jtvnw.net/emoticons/v1/${TWKappa.Emotes.Twitch.storage[k].id}/1.0' />`;
                m = m.replace(emojiRegex, imgHtml);
              }
          } catch (error) {
            console.error(`Error with twatch emotes: ${error}`);
          }

          try {
            if (new Date().getMonth() === 11)
              for (const k in TWKappa.Emotes.Extra.storage.winter)
                m = m.replace(
                  new RegExp(`(^|\\s)${k.replace(/([).^(])/g, "\\$1")}`, "g"),
                  ` <img alt='${k}' title='${k}'src='${TWKappa.Emotes.Extra.storage.winter[k].src}' style='${TWKappa.Emotes.Extra.storage.winter[k].style}' />`
                );
          } catch (error) {
            console.error(`Error with Winter stuff: ${error}`);
          }

          return oldfunc(m);
        };
      }
    },
    init: function () {
      TWKappa.Emotes.Twitch.init();
      TWKappa.Emotes.Extra.init();
      TWKappa.Icon.init();
      TWKappa.LocalStorage.init();
      TWKappa.GameInject.parser();
      TWKappa.Window.RegisterWestApi();
      if (new Date().getMonth() === 11)
        $("head").append(
          "<style>div.tw2gui_window.chat .chat_text { overflow:visible; }</style>"
        );
    }
  };
  const twitchData = {
    MrDestructoid: {
      id: 28,
      code: "MrDestructoid",
      emoticon_set: 0,
      description: null
    }
  };
  const emoteData = [
    {name: "3Head", url: "https://cdn.betterttv.net/frankerfacez_emote/274406/1"},
    {name: "<3", url: "https://static-cdn.jtvnw.net/emoticons/v1/555555584/1.0"},
    {name: "5Head", url: "https://cdn.betterttv.net/frankerfacez_emote/239504/1"},
    {name: "AYAYA", url: "https://cdn.betterttv.net/emote/58493695987aab42df852e0f/1x"},
    {name: "berdboBongo", url: "https://static-cdn.jtvnw.net/emoticons/v1/302316421/1.0"},
    {name: "berdboCop", url: "https://static-cdn.jtvnw.net/emoticons/v1/300399102/1.0"},
    {name: "berdboDed", url: "https://static-cdn.jtvnw.net/emoticons/v1/300399135/1.0"},
    {name: "berdboMuah", url: "https://static-cdn.jtvnw.net/emoticons/v1/300614723/1.0"},
    {name: "berdboOwO", url: "https://static-cdn.jtvnw.net/emoticons/v1/300399138/1.0"},
    {name: "berdboPog", url: "https://static-cdn.jtvnw.net/emoticons/v1/303476714/1.0"},
    {name: "berdboSkunk", url: "https://static-cdn.jtvnw.net/emoticons/v1/303206929/1.0"},
    {name: "BibleThump", url: "https://cdn.frankerfacez.com/emoticon/269642/1"},
    {name: "BibleTrump", url: "https://cdn.betterttv.net/emote/5668b60dafcaf5da4a5805a1/1x"},
    {name: "catJAM", url: "https://cdn.betterttv.net/emote/5f1b0186cf6d2144653d2970/1x"},
    {name: "Clap", url: "https://cdn.betterttv.net/emote/55b6f480e66682f576dd94f5/1x"},
    {name: "cmonBruh", url: "https://cdn.frankerfacez.com/emoticon/461598/1"},
    {name: "DonaldPls", url: "https://cdn.betterttv.net/emote/5823a0167df8f1a41d082cf2/1x"},
    {name: "DonoWall", url: "https://cdn.betterttv.net/emote/5efcd82551e3910deed68751/1x"},
    {name: "EZ", url: "https://cdn.betterttv.net/emote/5590b223b344e2c42a9e28e3/1x"},
    {name: "FeelsAmazingMan", url: "https://cdn.betterttv.net/emote/5733ff12e72c3c0814233e20/1x"},
    {name: "FeelsBadMan", url: "https://cdn.betterttv.net/emote/566c9fc265dbbdab32ec053b/1x"},
    {name: "FeelsBirthdayMan", url: "https://cdn.betterttv.net/emote/55b6524154eefd53777b2580/1x"},
    {name: "FeelsBlueMan", url: "https://cdn.betterttv.net/emote/57b4f47651067c5243fe1c60/1x"},
    {name: "FeelsGoodMan", url: "https://cdn.betterttv.net/emote/566c9fde65dbbdab32ec053e/1x"},
    {name: "FeelsOkayMan", url: "https://cdn.frankerfacez.com/emoticon/145947/1"},
    {name: "FeelsTrumpMan", url: "https://cdn.betterttv.net/emote/57c4270b34df7eab4ca2690c/1x"},
    {name: "FeelsSpecialMan", url: "https://cdn.frankerfacez.com/emoticon/191854/1"},
    {name: "forsenCD", url: "https://cdn.betterttv.net/frankerfacez_emote/249060/1"},
    {name: "gachiHYPER", url: "https://cdn.betterttv.net/emote/59143b496996b360ff9b807c/1x"},
    {name: "haHAA", url: "https://cdn.betterttv.net/emote/555981336ba1901877765555/1x"},
    {name: "HandsUp", url: "https://cdn.frankerfacez.com/emoticon/229760/1"},
    {name: "HYPERS", url: "https://cdn.frankerfacez.com/emoticon/236895/1"},
    {name: "Jebaited", url: "https://cdn.frankerfacez.com/emoticon/380518/1"},
    {name: "Kappa", url: "https://cdn.frankerfacez.com/emoticon/398790/1"},
    {name: "KEKW", url: "https://cdn.betterttv.net/frankerfacez_emote/381875/1"},
    {name: "KKomrade", url: "https://cdn.frankerfacez.com/emoticon/145916/1"},
    {name: "Kkona", url: "https://cdn.betterttv.net/emote/566ca04265dbbdab32ec054a/1x"},
    {name: "KKonaW", url: "https://cdn.frankerfacez.com/emoticon/229486/1"},
    {name: "Kreygasm", url: "https://static-cdn.jtvnw.net/emoticons/v1/41/1.0"},
    {name: "LUL", url: "https://cdn.betterttv.net/emote/567b00c61ddbe1786688a633/1x"},
    {name: "LULW", url: "https://cdn.betterttv.net/frankerfacez_emote/139407/1"},
    {name: "Madge", url: "https://cdn.frankerfacez.com/emoticon/510861/1"},
    {name: "monkaChrist", url: "https://cdn.frankerfacez.com/emoticon/243681/1"},
    {name: "monkaEyes", url: "https://cdn.frankerfacez.com/emoticon/268204/1"},
    {name: "monkaGun", url: "https://cdn.frankerfacez.com/emoticon/185572/1"},
    {name: "monkaH", url: "https://cdn.frankerfacez.com/emoticon/201362/1"},
    {name: "MonkaHmmm", url: "https://cdn.frankerfacez.com/emoticon/240746/1"},
    {name: "monkaKnife", url: "https://cdn.frankerfacez.com/emoticon/275877/1"},
    {name: "monkaS", url: "https://cdn.betterttv.net/emote/56e9f494fff3cc5c35e5287e/1x"},
    {name: "monkaW", url: "https://cdn.betterttv.net/frankerfacez_emote/214681/1"},
    {name: "monkaX", url: "https://cdn.betterttv.net/emote/58e5abdaf3ef4c75c9c6f0f9/1x"},
    {name: "OMEGALUL", url: "https://cdn.betterttv.net/emote/583089f4737a8e61abb0186b/1x"},
    {name: "PedoBear", url: "https://cdn.betterttv.net/emote/54fa928f01e468494b85b54f/1x"},
    {name: "peepoArrive", url: "https://cdn.betterttv.net/emote/5d922afbc0652668c9e52ead/1x"},
    {name: "peepoClap", url: "https://cdn.betterttv.net/emote/5d38aaa592fc550c2d5996b8/1x"},
    {name: "peepoClown", url: "https://cdn.frankerfacez.com/emoticon/318914/1"},
    {name: "peepoBlanket", url: "https://cdn.frankerfacez.com/emoticon/262458/1"},
    {name: "peepoFat", url: "https://cdn.betterttv.net/frankerfacez_emote/288800/1"},
    {name: "peepoHappy", url: "https://cdn.frankerfacez.com/emoticon/228449/1"},
    {name: "peepoHug", url: "https://cdn.frankerfacez.com/emoticon/237403/1"},
    {name: "peepoLeave", url: "https://cdn.betterttv.net/emote/5d324913ff6ed36801311fd2/1x"},
    {name: "peepoLove", url: "https://cdn.frankerfacez.com/emoticon/250614/1"},
    {name: "pepeD", url: "https://cdn.betterttv.net/emote/5b1740221c5a6065a7bad4b5/1x"},
    {name: "PepeDS", url: "https://cdn.betterttv.net/emote/5be9f494a550811484ed2dd4/1x"},
    {name: "Pepega", url: "https://cdn.betterttv.net/emote/5aca62163e290877a25481ad/1x"},
    {name: "PepeHands", url: "https://cdn.frankerfacez.com/emoticon/231552/1"},
    {name: "pepeJAM", url: "https://cdn.betterttv.net/emote/5b77ac3af7bddc567b1d5fb2/1x"},
    {name: "PepeLaugh", url: "https://cdn.betterttv.net/emote/59b73909b27c823d5b1f6052/1x"},
    {name: "PepoG", url: "https://cdn.frankerfacez.com/emoticon/218530/1"},
    {name: "PepoThink", url: "https://cdn.frankerfacez.com/emoticon/174942/1"},
    {name: "POGGERS", url: "https://cdn.betterttv.net/emote/5e0b4077debc686b3a1646f4/1x"},
    {name: "POGGERS", url: "https://cdn.frankerfacez.com/emoticon/216820/1"},
    {name: "Pog", url: "https://cdn.betterttv.net/frankerfacez_emote/210748/1"},
    {name: "PogO", url: "https://cdn.betterttv.net/frankerfacez_emote/401202/1"},
    {name: "PogU", url: "https://cdn.betterttv.net/frankerfacez_emote/256055/1"},
    {name: "(puke)", url: "https://cdn.betterttv.net/emote/550288fe135896936880fdd4/1x"},
    {name: "Sadge", url: "https://cdn.betterttv.net/frankerfacez_emote/425196/1"},
    {name: "sadKEK", url: "https://cdn.frankerfacez.com/emoticon/387103/1"},
    {name: "(tf)", url: "https://cdn.betterttv.net/emote/54fa8f1401e468494b85b537/1x"},
    {name: "VapeNation", url: "https://cdn.betterttv.net/emote/56f5be00d48006ba34f530a4/1x"},
    {name: "WaitWhat", url: "https://cdn.betterttv.net/emote/55cbeb8f8b9c49ef325bf738/1x"},
    {name: "WeirdChamp", url: "https://cdn.frankerfacez.com/emoticon/421124/1"},
    {name: "WeSmart", url: "https://cdn.betterttv.net/emote/5a311dd16405a95e4b0d4967/1x"},
    {name: "widepeepoHappy", url: "https://cdn.frankerfacez.com/emoticon/270930/1"},
    {name: "widepeepoSad", url: "https://cdn.betterttv.net/frankerfacez_emote/303899/1"},
    {name: "Sussy", url: "https://cdn.betterttv.net/emote/612960c0af28e956864a7b63/1x"},
    {name: "ricardoFlick", url: "https://cdn.betterttv.net/emote/5bc2143ea5351f40921080ee/2x"},
    {name: "pressF", url: "https://cdn.betterttv.net/emote/5c857788f779543bcdf37124/1x"},
    {name: "bongoTap", url: "https://cdn.betterttv.net/emote/5ba6d5ba6ee0c23989d52b10/1x"},
    {name: "peepoShy", url: "https://cdn.betterttv.net/emote/5eaa12a074046462f768344b/1x"},
    {name: "NODDERS", url: "https://cdn.betterttv.net/emote/5eadf40074046462f7687d0f/1x"},
    {name: "PETTHEPEEPO", url: "https://cdn.betterttv.net/emote/5ec059009af1ea16863b2dec/1x"},
    {name: "FeelsRainMan", url: "https://cdn.betterttv.net/emote/57850b9df1bf2c1003a88644/1x"},
    {name: "MLADY", url: "https://cdn.betterttv.net/emote/5b34ef0dbe275b629fc726a2/1x"},
    {name: "BOOBA", url: "https://cdn.betterttv.net/emote/61344c73af28e956864bfab8/1x"},
    {name: "WTFF", url: "https://cdn.betterttv.net/emote/5fbe52df68e2d56f0f3a0979/1x"},
    {name: "PauseChamp", url: "https://cdn.betterttv.net/emote/5cd6b08cf1dac14a18c4b61f/1x"},
    {name: "DICKS", url: "https://cdn.frankerfacez.com/emoticon/19972/1"},
    {name: "PagMan", url: "https://cdn.frankerfacez.com/emoticon/517647/1"},
    {name: "whatBlink", url: "https://cdn.betterttv.net/emote/591ad4992f456546af54fdcd/1x"},
    {name: "peepoRun", url: "https://cdn.betterttv.net/emote/5bc7ff14664a3b079648dd66/1x"},
    {name: "AbdulPls", url: "https://cdn.betterttv.net/emote/59a4ea2865231102cde26e9c/1x"},
    {name: "WOWERS", url: "https://cdn.betterttv.net/emote/58c5c65357baeb710f657195/1x"},
    {name: "BOGU", url: "https://cdn.betterttv.net/emote/5ef5f33d51e3910deed605aa/1x"},
    {name: "nutTasty", url: "https://cdn.betterttv.net/emote/5b3c1eae05e329206af7138e/1x"},
    {name: "modCheck", url: "https://cdn.betterttv.net/emote/5d7eefb7c0652668c9e4d394/1x"},
    {name: "xdd", url: "https://cdn.betterttv.net/emote/634f2fdb9bb828a9f0d3edea/1x"},
    {name: "Clueless", url: "https://cdn.betterttv.net/emote/63a391da91ab7f35abe02670/1x"},
    {name: "GIGACHAD", url: "https://cdn.betterttv.net/emote/609431bc39b5010444d0cbdc/1x"},
    {name: "HUH", url: "https://cdn.betterttv.net/emote/61cf4c6ec8cc7f36d52b27a9/1x"},
    {name: "WAYTOODANK", url: "https://cdn.betterttv.net/emote/5ad22a7096065b6c6bddf7f3/1x"},
    {name: "Copium", url: "https://cdn.betterttv.net/emote/5f64475bd7160803d895a112/1x"},
    {name: "peepoPooPoo", url: "https://cdn.betterttv.net/emote/5c3427a55752683d16e409d1/1x"},
    {name: "Hackermans", url: "https://cdn.betterttv.net/emote/5b490e73cf46791f8491f6f4/1x"},
    {name: "PeepoDance", url: "https://cdn.betterttv.net/emote/5a6edb51f730010d194bdd46/1x"},
    {name: "PeepoShy", url: "https://cdn.betterttv.net/emote/5eaa12a074046462f768344b/1x"},
    {name: "ConfusedCat", url: "https://cdn.betterttv.net/emote/5d5d9fe322f52e1d9b41ac91/1x"},
    {name: "Sussy2", url: "https://cdn.betterttv.net/emote/6197ab6f54f3344f8806589d/1x"},
    {name: "HUHH", url: "https://cdn.betterttv.net/emote/6220c51b06fd6a9f5be613b4/1x"},
    {name: "Nerdge", url: "https://cdn.betterttv.net/emote/5ff94c895362e1049403662a/1x"},
    {name: "Chatting", url: "https://cdn.betterttv.net/emote/618c77311f8ff7628e6d5b8f/1x"},
    {name: "Aware", url: "https://cdn.betterttv.net/emote/6151c623b63cc97ee6d39040/1x"},
    {name: "DIESOFCRINGE", url: "https://cdn.betterttv.net/emote/62f0acb3ecbd41815423a0f5/1x"},
    {name: "Smoge", url: "https://cdn.betterttv.net/emote/5e8c3a008fb1ca5cde58723f/1x"},
    {name: "Bedge", url: "https://cdn.betterttv.net/emote/634c9335b62997baec52ab1e/1x"},
    {name: "Wokege", url: "https://cdn.betterttv.net/emote/632f4fe0ee60425d31b65e83/1x"},
    {name: "Susge", url: "https://cdn.betterttv.net/emote/6357957aed98a03da0cdb5ab/1x"},
    {name: "KEKL", url: "https://cdn.betterttv.net/emote/6211428206fd6a9f5be50250/1x"},
    {name: "MODS", url: "https://cdn.betterttv.net/emote/603451b77c74605395f3295d/1x"},
    {name: "Hmmm", url: "https://cdn.betterttv.net/emote/5ed355b1fdee545e3065c80e/1x"},
    {name: "ICANT", url: "https://cdn.betterttv.net/emote/6201d23206fd6a9f5be3c4cd/1x"},
    {name: "SNIFFA", url: "https://cdn.betterttv.net/emote/60be7fa7f8b3f62601c3a4b2/1x"},
    {name: "lebronJAM", url: "https://cdn.betterttv.net/emote/5fa939a9f32aa26441c83a70/1x"},
    {name: "YEP", url: "https://cdn.betterttv.net/frankerfacez_emote/418189/1"}
  ];
  TWKappa.init();
}).toString() + ')()';
document.head.appendChild(script);