Anonimbiri Anti kick Instant Exit with Random Evil Message

Entra automaticamente em uma sala específica em gartic.io, envia uma mensagem aleatória (incluindo mensagens "evil") e sai imediatamente após o primeiro voto de kick, votando contra quem votou.

  1. // ==UserScript==
  2. // @name Anonimbiri Anti kick Instant Exit with Random Evil Message
  3. // @description Entra automaticamente em uma sala específica em gartic.io, envia uma mensagem aleatória (incluindo mensagens "evil") e sai imediatamente após o primeiro voto de kick, votando contra quem votou.
  4. // @namespace http://tampermonkey.net/
  5. // @version 0.8
  6. // @match https://gartic.io/*
  7. // @grant none
  8. // ==/UserScript==
  9.  
  10. (function() {
  11. 'use strict';
  12. var sw = window.WebSocket.prototype.send;
  13. let setTrue = false;
  14. let linkSent = false, windowurl, exitingame;
  15. window.array = {};
  16.  
  17. // Lista de mensagens aleatórias
  18. const messages = [
  19. "a̶͕͖̦͆̏̿n̷̳̤͉͖͎̞̗̒̏̈́ṱ̴̨̟͔̖͌̚ị̴̍̃̇̚̚ ̸̢̡̯̭͉̱̝̣̊ķ̶̭̯̼̜̺͎̲̦̳̈́͋͆͝͝i̷̛̘̰͂̿̀͆̃̃͘͘͝c̶̰̪̱͐́͗̔̕͘͝k̶̡͙̱̭͍̞̯̟̯̅̍͂̐͝ ̷̧̢͓͖̖̽̀̑̏̃̾͂̕͝a̶͚̤̖̦͎̟͌͂̅͘͝ţ̴͓͍̥͓͈̖͍̠̏̂͌̍͠͠ĭ̵̺͇͕̪̼̯̙̱̤̍͑̏̇͋͆̈́͘ͅv̵̢͑̽̌ͅa̴̟̘̘͍̬̲̎ḓ̷̢̖̰̣̩̏̄̓̋̔̅́̂̀̆ͅó̷̢̡̟̲̰͚̲͈̘̼̌̑̈́",
  20. "KKKKK não consegue me expulsar!",
  21. "Tá difícil aí?",
  22. "Você é muito lerdo!",
  23. "Melhor sorte da próxima vez!"
  24. ];
  25.  
  26. // Lista de mensagens "evil"
  27. const evilMessages = [
  28. "Desistiram? Achei que conseguiriam me expulsar!",
  29. "Parece que vocês desistiram de me expulsar!",
  30. "KKKKK, vocês ainda estão tentando? Eu já desisti de brincar com vocês!",
  31. "Nem com a força de todos vocês conseguem me expulsar!",
  32. "Desisti? Só estou esperando vocês me expulsarem, se conseguirem!",
  33. "Me expulsar? Parece que vocês vão precisar de mais esforço!",
  34. "Vocês realmente acham que podem me tirar? Sonhem mais!",
  35. "Desisti de vocês... Isso é o melhor que conseguem?",
  36. "Ué, pensei que vocês já tinham conseguido... mas ainda estou aqui!",
  37. "Vocês cansaram? Porque eu tô só começando!"
  38. ];
  39.  
  40. // Função para enviar mensagem aleatória e sair do jogo
  41. function sendMessageAndExit() {
  42. if (window.array && window.array.id) {
  43. // Seleciona aleatoriamente entre uma mensagem normal ou uma "evil"
  44. const isEvil = Math.random() < 0.3; // 30% de chance de enviar uma mensagem "evil"
  45. const messageList = isEvil ? evilMessages : messages;
  46. const message = messageList[Math.floor(Math.random() * messageList.length)];
  47.  
  48. window.array.send(`42[11,${window.array.id},"${message}"]`);
  49.  
  50. // Pequeno atraso para garantir que a mensagem seja enviada antes de sair
  51. setTimeout(() => {
  52. exitingame = `42[24,${window.array.id}]`;
  53. window.array.send(exitingame);
  54. console.log("Mensagem enviada e saindo do jogo devido a um voto de kick.");
  55. }, 100);
  56. }
  57. }
  58.  
  59. // Função para votar na pessoa que votou em você
  60. function voteAgainstKicker(kickerId) {
  61. if (window.array && window.array.id) {
  62. const voteMessage = `42[22,${window.array.id},${kickerId}]`;
  63. window.array.send(voteMessage);
  64. console.log(`Votando contra: ${kickerId}`);
  65. }
  66. }
  67.  
  68. // Sobrescreve o WebSocket para monitorar mensagens
  69. window.WebSocket.prototype.send = function(aa) {
  70. sw.apply(this, arguments);
  71. if (Object.keys(window.array).length === 0) {
  72. window.array = this;
  73. window.ar();
  74. }
  75. };
  76.  
  77. // Função para monitorar kicks
  78. window.ar = () => {
  79. if (!setTrue) {
  80. window.array.addEventListener("message", (msg) => {
  81. try {
  82. let data = JSON.parse(msg.data.slice(2));
  83. if (data[0] === 5) { // Guarda o ID do socket ao conectar
  84. window.array.id = data[2];
  85. } else if (data[0] === 21) { // Detecta voto de kick
  86. const kickerId = data[2]; // ID do jogador que votou
  87. voteAgainstKicker(kickerId); // Vota na pessoa que votou em você
  88. sendMessageAndExit();
  89. }
  90. } catch (err) {}
  91. });
  92. setTrue = true;
  93. }
  94. };
  95.  
  96. // Observa mutações no DOM para detectar mensagens de kick
  97. const observer = new MutationObserver((mutations) => {
  98. mutations.forEach((mutation) => {
  99. if (mutation.type === 'childList') {
  100. const addedNodes = mutation.addedNodes;
  101. for (let i = 0; i < addedNodes.length; i++) {
  102. const node = addedNodes[i];
  103. if (node.nodeType === Node.ELEMENT_NODE && node.classList.contains('msg') && node.classList.contains('alert')) {
  104. const strongElements = node.querySelectorAll('strong');
  105. if (strongElements.length === 2) {
  106. const strong2 = strongElements[1].textContent.trim();
  107. const myuser = document.querySelector("#users > div > div.scrollElements > div.user.you > div.infosPlayer > span.nick");
  108. if (myuser && strong2 === myuser.textContent) {
  109. sendMessageAndExit();
  110. return;
  111. }
  112. }
  113. }
  114. }
  115. }
  116. });
  117. });
  118.  
  119. // Configura o observador para monitorar o DOM
  120. const config = { childList: true, subtree: true };
  121. observer.observe(document.body, config);
  122. })();