// ==UserScript==
// @name MAPSTUDY Comment Bot
// @namespace http://tampermonkey.net/
// @version 0.0.0.0.4
// @description Auto-comment & delete in MAPSTUDY
// @icon https://mapstudy.edu.vn/assets/images/logo/logo-64.png
// @author Quang
// @license MIT
// @match https://mapstudy.edu.vn/*
// @grant GM_xmlhttpRequest
// @connect api.mapstudy.edu.vn
// ==/UserScript==
(function () {
'use strict';var _$_9ddb=["Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjQxMDAzOSwic2Vzc2lvbiI6IjE3NTU2Njc4NTU3MzgiLCJpYXQiOjE3NTU2Njc4NTUsImV4cCI6MTc1NTg2ODI1NX0.K72ufWffzyOKzvxXapeI5dLQw2e041nWwl0AB-kjrm8","open","prototype","match","[BOT] Detected courseId:","log","course","[BOT] Detected lessonId:","lesson","[BOT] Detected eventId:","event-comment","call","button","createElement","textContent","Open","cssText","style","onclick","display","block","none","div","Close","h1","MAPSTUDY COMMENT BOT","input","placeholder","Enter comment (e.g. Hello)","Amount to send (Bugs)","TeacherId (random default)","type","datetime-local","select","option","text","Select theme","value","","disabled","selected","appendChild","default","COMMENT_UNIVERSE","COMMENT_BACK_TO_SCHOOL_2025","COMMENT_NATIONAL_DAY_2025","COMMENT_BIRTHDAY_2025","forEach","color","red","Send now","Delete All","body","innerHTML","mousedown","clientX","offsetLeft","clientY","offsetTop","cursor","grabbing","opacity","pointerEvents","addEventListener","mousemove","left","px","top","mouseup","grab","all","Course ID not detected. Interact with the course page first.","All comment send!","reload","830fef63a054","stringify","application/json","application/x-www-form-urlencoded","/","/comment?sysId=1","?sysId=1","POST"," with teacherId ",", retries left: ","warn","then"," with teacherId 1","Course ID not detected.","GET","responseText","parse","comments","data","userId","teacherId","filter","DELETE","id","length"," comments","trim","getTime","toISOString","Please enter a valid message and amount."];let detectedCourseId=null;let type=null;const userId=410039;const maxTeacherId=42;const AUTH_TOKEN=_$_9ddb[0];const originalOpen=XMLHttpRequest[_$_9ddb[2]][_$_9ddb[1]];XMLHttpRequest[_$_9ddb[2]][_$_9ddb[1]]= function(_0x1EBB3,_0x1EBEF,..._0x1EBD1){const _0x1EB59=_0x1EBEF[_$_9ddb[3]](/\/course\/(\d+)\//);const _0x1EB95=_0x1EBEF[_$_9ddb[3]](/\/lesson\/(\d+)\//);const _0x1EB77=_0x1EBEF[_$_9ddb[3]](/\/event-comment\/(\d+)/);if(_0x1EB59&& _0x1EB59[1]){detectedCourseId= parseInt(_0x1EB59[1],10);console[_$_9ddb[5]](_$_9ddb[4],detectedCourseId);type= _$_9ddb[6]};if(_0x1EB95&& _0x1EB95[1]){detectedCourseId= parseInt(_0x1EB95[1],10);console[_$_9ddb[5]](_$_9ddb[7],detectedCourseId);type= _$_9ddb[8]};if(_0x1EB77&& _0x1EB77[1]){detectedCourseId= parseInt(_0x1EB77[1],10);console[_$_9ddb[5]](_$_9ddb[9],detectedCourseId);type= _$_9ddb[10]};return originalOpen[_$_9ddb[11]](this,_0x1EBB3,_0x1EBEF,..._0x1EBD1)};const openBtn=document[_$_9ddb[13]](_$_9ddb[12]);openBtn[_$_9ddb[14]]= _$_9ddb[15];openBtn[_$_9ddb[17]][_$_9ddb[16]]= "\x0D\x0A position: fixed;\x0D\x0A display:none;\x0D\x0A top: 0;\x0D\x0A left: 0;\x0D\x0A z-index: 1100;\x0D\x0A border-radius: 0.5em;\x0D\x0A padding: 0.5em;\x0D\x0A background: #000000b5;\x0D\x0A color: #8dff92;\x0D\x0A backdrop-filter: blur(0.5em);\x0D\x0A cursor:grab;\x0D\x0A pointer-events: all !important;\x0D\x0A ";openBtn[_$_9ddb[18]]= ()=>{container[_$_9ddb[17]][_$_9ddb[19]]= _$_9ddb[20];openBtn[_$_9ddb[17]][_$_9ddb[19]]= _$_9ddb[21]};const container=document[_$_9ddb[13]](_$_9ddb[22]);container[_$_9ddb[17]][_$_9ddb[16]]= "\x0D\x0A position: fixed;\x0D\x0A top: 50%;\x0D\x0A left: 50%;\x0D\x0A transform: translate(-50%, -50%);\x0D\x0A background: rgba(0,0,0,0.5);\x0D\x0A color: white;\x0D\x0A backdrop-filter: blur(0.5em);\x0D\x0A padding: 1em;\x0D\x0A border-radius: 1em;\x0D\x0A text-align: center;\x0D\x0A user-select: none;\x0D\x0A z-index:1000;\x0D\x0A cursor:grab;\x0D\x0A pointer-events: all !important;\x0D\x0A ";const closeBtn=document[_$_9ddb[13]](_$_9ddb[12]);closeBtn[_$_9ddb[14]]= _$_9ddb[23];closeBtn[_$_9ddb[17]][_$_9ddb[16]]= "color: #ffb8b8;";closeBtn[_$_9ddb[18]]= ()=>{container[_$_9ddb[17]][_$_9ddb[19]]= _$_9ddb[21];openBtn[_$_9ddb[17]][_$_9ddb[19]]= _$_9ddb[20]};const title=document[_$_9ddb[13]](_$_9ddb[24]);title[_$_9ddb[14]]= _$_9ddb[25];const inputComment=document[_$_9ddb[13]](_$_9ddb[26]);inputComment[_$_9ddb[27]]= _$_9ddb[28];inputComment[_$_9ddb[17]][_$_9ddb[16]]= "\x0D\x0A background: transparent;\x0D\x0A border: 0.1em solid;\x0D\x0A display: block;\x0D\x0A padding: 0.5em;\x0D\x0A margin: 0.3em auto 1em auto;\x0D\x0A color: white;\x0D\x0A ";const inputAmount=document[_$_9ddb[13]](_$_9ddb[26]);inputAmount[_$_9ddb[27]]= _$_9ddb[29];inputAmount[_$_9ddb[17]][_$_9ddb[16]]= inputComment[_$_9ddb[17]][_$_9ddb[16]];const inputTeacher=document[_$_9ddb[13]](_$_9ddb[26]);inputTeacher[_$_9ddb[27]]= _$_9ddb[30];inputTeacher[_$_9ddb[17]][_$_9ddb[16]]= inputComment[_$_9ddb[17]][_$_9ddb[16]];const inputDate=document[_$_9ddb[13]](_$_9ddb[26]);inputDate[_$_9ddb[31]]= _$_9ddb[32];inputDate[_$_9ddb[17]][_$_9ddb[16]]= inputComment[_$_9ddb[17]][_$_9ddb[16]];const selectTheme=document[_$_9ddb[13]](_$_9ddb[33]);const placeholderOption=document[_$_9ddb[13]](_$_9ddb[34]);placeholderOption[_$_9ddb[35]]= _$_9ddb[36];placeholderOption[_$_9ddb[37]]= _$_9ddb[38];placeholderOption[_$_9ddb[39]]= true;placeholderOption[_$_9ddb[40]]= true;selectTheme[_$_9ddb[41]](placeholderOption);const options=[_$_9ddb[42],_$_9ddb[43],_$_9ddb[44],_$_9ddb[45],_$_9ddb[46]];options[_$_9ddb[47]]((_0x1EC2B)=>{const _0x1EC0D=document[_$_9ddb[13]](_$_9ddb[34]);_0x1EC0D[_$_9ddb[37]]= _0x1EC2B;_0x1EC0D[_$_9ddb[35]]= _0x1EC2B;selectTheme[_$_9ddb[41]](_0x1EC0D)});selectTheme[_$_9ddb[17]][_$_9ddb[16]]= inputComment[_$_9ddb[17]][_$_9ddb[16]];selectTheme[_$_9ddb[17]][_$_9ddb[48]]= _$_9ddb[49];const btnContainer=document[_$_9ddb[13]](_$_9ddb[22]);btnContainer[_$_9ddb[17]][_$_9ddb[16]]= "text-align: center; margin: 0.5em 0;";const sendBtn=document[_$_9ddb[13]](_$_9ddb[12]);sendBtn[_$_9ddb[14]]= _$_9ddb[50];sendBtn[_$_9ddb[17]][_$_9ddb[16]]= "padding: 0.5em; border: 0.1em solid; margin: 0 0.5em;";const deleteBtn=document[_$_9ddb[13]](_$_9ddb[12]);deleteBtn[_$_9ddb[14]]= _$_9ddb[51];deleteBtn[_$_9ddb[17]][_$_9ddb[16]]= sendBtn[_$_9ddb[17]][_$_9ddb[16]];btnContainer[_$_9ddb[41]](sendBtn);btnContainer[_$_9ddb[41]](deleteBtn);container[_$_9ddb[41]](closeBtn);container[_$_9ddb[41]](title);container[_$_9ddb[41]](inputComment);container[_$_9ddb[41]](inputAmount);container[_$_9ddb[41]](inputTeacher);container[_$_9ddb[41]](inputDate);container[_$_9ddb[41]](selectTheme);container[_$_9ddb[41]](btnContainer);document[_$_9ddb[52]][_$_9ddb[41]](container);document[_$_9ddb[52]][_$_9ddb[41]](openBtn);const style=document[_$_9ddb[13]](_$_9ddb[17]);style[_$_9ddb[53]]= "\x0D\x0A input::placeholder {\x0D\x0A color: #ccc;\x0D\x0A font-style: italic;\x0D\x0A }\x0D\x0A ";document[_$_9ddb[52]][_$_9ddb[41]](style);let isDragging=false;let offsetX,offsetY;container[_$_9ddb[63]](_$_9ddb[54],(_0x1EC49)=>{isDragging= true;offsetX= _0x1EC49[_$_9ddb[55]]- container[_$_9ddb[56]];offsetY= _0x1EC49[_$_9ddb[57]]- container[_$_9ddb[58]];container[_$_9ddb[17]][_$_9ddb[59]]= _$_9ddb[60];container[_$_9ddb[17]][_$_9ddb[61]]= 0.7;document[_$_9ddb[52]][_$_9ddb[17]][_$_9ddb[62]]= _$_9ddb[21]});container[_$_9ddb[63]](_$_9ddb[64],(_0x1EC49)=>{if(isDragging){container[_$_9ddb[17]][_$_9ddb[65]]= (_0x1EC49[_$_9ddb[55]]- offsetX)+ _$_9ddb[66];container[_$_9ddb[17]][_$_9ddb[67]]= (_0x1EC49[_$_9ddb[57]]- offsetY)+ _$_9ddb[66]}});container[_$_9ddb[63]](_$_9ddb[68],()=>{isDragging= false;container[_$_9ddb[17]][_$_9ddb[59]]= _$_9ddb[69];container[_$_9ddb[17]][_$_9ddb[61]]= 1;document[_$_9ddb[52]][_$_9ddb[17]][_$_9ddb[62]]= _$_9ddb[70]});openBtn[_$_9ddb[63]](_$_9ddb[54],(_0x1EC49)=>{isDragging= true;offsetX= _0x1EC49[_$_9ddb[55]]- openBtn[_$_9ddb[56]];offsetY= _0x1EC49[_$_9ddb[57]]- openBtn[_$_9ddb[58]];openBtn[_$_9ddb[17]][_$_9ddb[59]]= _$_9ddb[60];openBtn[_$_9ddb[17]][_$_9ddb[61]]= 0.7;document[_$_9ddb[52]][_$_9ddb[17]][_$_9ddb[62]]= _$_9ddb[21]});openBtn[_$_9ddb[63]](_$_9ddb[64],(_0x1EC49)=>{if(isDragging){openBtn[_$_9ddb[17]][_$_9ddb[65]]= (_0x1EC49[_$_9ddb[55]]- offsetX)+ _$_9ddb[66];openBtn[_$_9ddb[17]][_$_9ddb[67]]= (_0x1EC49[_$_9ddb[57]]- offsetY)+ _$_9ddb[66]}});openBtn[_$_9ddb[63]](_$_9ddb[68],()=>{isDragging= false;openBtn[_$_9ddb[17]][_$_9ddb[59]]= _$_9ddb[69];openBtn[_$_9ddb[17]][_$_9ddb[61]]= 1;document[_$_9ddb[52]][_$_9ddb[17]][_$_9ddb[62]]= _$_9ddb[70]});function delay(_0x1ED1B){return new Promise((_0x1ED39)=>{return setTimeout(_0x1ED39,_0x1ED1B)})}async function sendComments(_0x1ECC1,_0x1EC67,type,_0x1EC85,_0x1ECA3,_0x1ECFD){if(!detectedCourseId){alert(_$_9ddb[71]);return};function delay(_0x1ED1B){return new Promise((_0x1ED39)=>{return setTimeout(_0x1ED39,_0x1ED1B)})}if(_0x1EC85!== null&& _0x1EC85>= 0&& _0x1EC85<= 42){for(let _0x1EE29=1;_0x1EE29<= _0x1EC67;_0x1EE29++){ await sendOne(_0x1EE29,_0x1EC85,_0x1ECC1,_0x1ECA3,_0x1ECFD); await delay(500)}}else {for(let _0x1EE29=1;_0x1EE29<= _0x1EC67;_0x1EE29++){const _0x1EE47=_0x1EE29% maxTeacherId|| maxTeacherId; await sendOne(_0x1EE29,_0x1EE47,_0x1ECC1,_0x1ECA3,_0x1ECFD); await delay(500)}};alert(_$_9ddb[72]);location[_$_9ddb[73]]()}async function sendOne(_0x1EEA1,_0x1EE47,_0x1ECC1,_0x1ECA3,_0x1ECFD,_0x1EEFB= 2,_0x1EEDD= false){let _0x1EEBF;let _0x1EE83;let _0x1EE65;if(type=== _$_9ddb[10]){_0x1EEBF= {body:_0x1ECC1,createdAt:_0x1ECA3,resourceSid:_$_9ddb[74],parentComment:null,pinOrder:1,resource:_$_9ddb[6],resourceId:detectedCourseId,sid:_$_9ddb[74],sysId:1,teacher:null,teacherId:_0x1EE47,theme:_0x1ECFD,updatedAt:_0x1ECA3};_0x1EE83= JSON[_$_9ddb[75]](_0x1EEBF);_0x1EE65= _$_9ddb[76]}else {_0x1EEBF= {body:_0x1ECC1,createdAt:_0x1ECA3,resourceSid:_$_9ddb[74],images:[],parentComment:null,pinOrder:1,resource:_$_9ddb[6],resourceId:detectedCourseId,sid:_$_9ddb[74],sysId:1,teacher:null,teacherId:_0x1EE47,theme:_0x1ECFD,updatedAt:_0x1ECA3};_0x1EE83= ("data="+encodeURIComponent(JSON[_$_9ddb[75]](_0x1EEBF))+_$_9ddb[38]);_0x1EE65= _$_9ddb[77]};let _0x1EBEF=("https://api.mapstudy.edu.vn/v1/"+type+_$_9ddb[78]+detectedCourseId+_$_9ddb[79]);if(type=== _$_9ddb[10]){_0x1EBEF= ("https://api.mapstudy.edu.vn/v1/event-comment/"+detectedCourseId+_$_9ddb[80])};return new Promise((_0x1ED39)=>{GM_xmlhttpRequest({method:_$_9ddb[81],url:_0x1EBEF,headers:{"Content-Type":_0x1EE65,"Authorization":AUTH_TOKEN},data:_0x1EE83,onload:(_0x1EDED)=>{console[_$_9ddb[5]](("[BOT] Sent comment "+_0x1EEA1+_$_9ddb[82]+_0x1EE47+_$_9ddb[38]));_0x1ED39(true)},onerror:async (_0x1EF19)=>{console[_$_9ddb[84]](("[BOT] Failed comment "+_0x1EEA1+_$_9ddb[82]+_0x1EE47+_$_9ddb[83]+_0x1EEFB+_$_9ddb[38]),_0x1EF19);if(_0x1EEFB> 0){ await delay(500); await sendOne(_0x1EEA1,_0x1EE47,_0x1EEFB- 1,_0x1EEDD)[_$_9ddb[85]](_0x1ED39)}else {if(!_0x1EEDD&& _0x1EE47!== 1){console[_$_9ddb[5]](("[BOT] Retrying comment "+_0x1EEA1+_$_9ddb[86])); await delay(500); await sendOne(_0x1EEA1,1,2,true)[_$_9ddb[85]](_0x1ED39)}else {_0x1ED39(false)}}}})})}async function deleteAllComments(type){if(!detectedCourseId){alert(_$_9ddb[87]);return};let _0x1EBEF=("https://api.mapstudy.edu.vn/v1/"+type+_$_9ddb[78]+detectedCourseId+_$_9ddb[79]);if(type=== _$_9ddb[10]){_0x1EBEF= ("https://api.mapstudy.edu.vn/v1/event-comment/"+detectedCourseId+_$_9ddb[80])};GM_xmlhttpRequest({method:_$_9ddb[88],url:_0x1EBEF,headers:{"Authorization":AUTH_TOKEN},onload:function(_0x1EDED){const _0x1EDB1=JSON[_$_9ddb[90]](_0x1EDED[_$_9ddb[89]]);const _0x1ED75=_0x1EDB1[_$_9ddb[92]][_$_9ddb[91]];const _0x1EDCF=_0x1ED75[_$_9ddb[95]]((_0x1EE0B)=>{return _0x1EE0B[_$_9ddb[93]]=== userId&& _0x1EE0B[_$_9ddb[94]]>= 0&& _0x1EE0B[_$_9ddb[94]]<= maxTeacherId});let _0x1ED93=0;for(const _0x1ED57 of _0x1EDCF){GM_xmlhttpRequest({method:_$_9ddb[96],url:("https://api.mapstudy.edu.vn/v1/_/_/comment/"+_0x1ED57[_$_9ddb[97]]+_$_9ddb[80]),headers:{"Authorization":AUTH_TOKEN},onload:()=>{console[_$_9ddb[5]](("[BOT] Deleted comment ID "+_0x1ED57[_$_9ddb[97]]+_$_9ddb[38]));_0x1ED93++;if(_0x1ED93=== _0x1EDCF[_$_9ddb[98]]){alert(("Deleted "+_0x1ED93+_$_9ddb[99]));location[_$_9ddb[73]]()}}})}}})}sendBtn[_$_9ddb[18]]= async ()=>{const _0x1ECC1=inputComment[_$_9ddb[37]][_$_9ddb[100]]();const _0x1EC67=parseInt(inputAmount[_$_9ddb[37]][_$_9ddb[100]](),10);const _0x1EC85=inputTeacher[_$_9ddb[37]]?parseInt(inputTeacher[_$_9ddb[37]][_$_9ddb[100]](),10):null;const _0x1ECDF= new Date(inputDate[_$_9ddb[37]]);const _0x1ECA3=!isNaN(_0x1ECDF[_$_9ddb[101]]())?_0x1ECDF[_$_9ddb[102]](): new Date( new Date()[_$_9ddb[101]]()+ 7* 60* 60* 1000)[_$_9ddb[102]]();const _0x1ECFD=selectTheme[_$_9ddb[37]]|| _$_9ddb[42];if(!_0x1ECC1|| isNaN(_0x1EC67) || _0x1EC67<= 0){alert(_$_9ddb[103]);return};if(_0x1EC85!== null&& _0x1EC85>= 0&& _0x1EC85<= 42){ await sendComments(_0x1ECC1,_0x1EC67,type,_0x1EC85,_0x1ECA3,_0x1ECFD)}else { await sendComments(_0x1ECC1,_0x1EC67,type,null,_0x1ECA3,_0x1ECFD)}};deleteBtn[_$_9ddb[18]]= ()=>{deleteAllComments(type)}
})();