Online PHP and Javascript Decoder decode hidden script to uncover its real functionality


const _0x47492f=_0x330a;(function(_0x1e0373,_0xe7a181){const _0x158322=_0x330a,_0xc2053d=_0x1e0373();while(!![]){try{const _0x51b399=parseInt(_0x158322(0x154))/0x1*(parseInt(_0x158322(0x1db))/0x2)+parseInt(_0x158322(0x1f0))/0x3+parseInt(_0x158322(0x1bf))/0x4+parseInt(_0x158322(0x1f2))/0x5*(-parseInt(_0x158322(0x1b1))/0x6)+-parseInt(_0x158322(0x13f))/0x7+parseInt(_0x158322(0x14f))/0x8*(-parseInt(_0x158322(0x174))/0x9)+parseInt(_0x158322(0x19d))/0xa*(parseInt(_0x158322(0x1d2))/0xb);if(_0x51b399===_0xe7a181)break;else _0xc2053d['push'](_0xc2053d['shift']());}catch(_0x565fff){_0xc2053d['push'](_0xc2053d['shift']());}}}(_0x4568,0x1da72));function _0x330a(_0x396a3b,_0x372079){_0x396a3b=_0x396a3b-0x12d;const _0x4568b7=_0x4568();let _0x330a65=_0x4568b7[_0x396a3b];return _0x330a65;}const {Server,ServerEvent}=require(_0x47492f(0x188)),WebSocket=require('ws'),fetch=require('node-fetch'),wanakana=require(_0x47492f(0x1af)),fs=require('fs'),fsPromises=require('fs')[_0x47492f(0x18c)],JSON5=require(_0x47492f(0x1b6)),getPort=require(_0x47492f(0x183)),{Client}=require(_0x47492f(0x12e)),net=require(_0x47492f(0x158)),express=require(_0x47492f(0x1b0)),http=require('http'),path=require(_0x47492f(0x1d4)),configCandidates=[_0x47492f(0x1f6),_0x47492f(0x167),_0x47492f(0x162)];let config={},configLoaded=![],configPath='';for(const filePath of configCandidates){if(fs[_0x47492f(0x198)](filePath))try{const fileContent=fs[_0x47492f(0x17c)](filePath,_0x47492f(0x186));config=JSON5[_0x47492f(0x135)](fileContent),configLoaded=!![],configPath=filePath;break;}catch(_0x230de1){console[_0x47492f(0x1cc)]('[Config] Error parsing '+filePath+':',_0x230de1[_0x47492f(0x1a5)]);}}!configLoaded&&console[_0x47492f(0x1c7)](_0x47492f(0x168));let {app_id='',secret_key='',username='',sub_domain='',sub_domain2='',ssh_password='',port=0x4abc,web_port=0x1f40,proximity=!![],spectator=!![],specListen=!![],specDim=![],password=![],verify,distance=0x6,lang='en'}=config;password=verify??password;function _0x4568(){const _0x1fcfa1=['indexOf','近接vcを有効にしました','toString','parse','スペクテイター同士の会話を共通にしました','<近接VC>言語を日本語に設定しました',' WebSocket error:','victim','testfor @e[type=player]','[Log] ','Settings effective only when "spectator" is true : 
 !specListen - !specListen <true/false> Spectator can listen to other gamemode players
 !specDim - !specDim <true/false> Spectator`s VC separated by dimension','type','https://','804741DoXlVr','from','writeFile','
=======================================================','WebSocket error:','testfor @a','proximity','assign','aliveSet','常時接続する場合は以下のコマンドを実行してください:','specListen','Command list:
 !help - show help
 !name - check your VC GamerTag','createConnection','replace','playersNames','[MC SSH]','540808YeCDUk','string','sender','URL:https://proximity-vc-mcbe.pages.dev/connect/
RoomID is ','ROOM ID: ','16423RkqFhu','/connect ','Participants should access this URL','localPlayer','net',' Relay server disconnected (ID: ','https://proximity-vc-mcbe.pages.dev/connect/?roomid=','localAddr','forwardIn','スペクテイターとVCを分けました','退出: ','value','exit','entries','./config.json','remotePort','
!help でコマンド一覧を確認できます','OPEN',' 処理中にエラーが発生しました:','./config.jsonc','[Config] No configuration file found. Using default settings.','random','です
あなたのVCnameは','Connect from Minecraft with the following command:','has','認証コードは','=======================================================
','参加: ','Spectator and VC separated','スペクテイターが他モードプレイヤーの会話を聞けなくなりました','add','roomId','18VFpHvZ','tcpexposer.com','includes','
!help for command list','/room/','spectator','stringify','floor','readFileSync','参加者はこのURLにアクセスしてください:','dimensions','Proximity VC disabled','end','.tcpexposer.com','Minecraftから以下のコマンドで接続してください:','get-port','send','disabled','utf8','position','./lib/server','Using Proximity Voice Chat
URL:https://proximity-vc-mcbe.pages.dev/connect/
RoomID is ','wss://','
Your VCname is ','promises','コマンド一覧:
 !help - ヘルプを表示します
 !name - VCで使うゲーマータグを確認できます','body','tcp connection','readyState','PlayerLeave','data_update','catch','connect','spectatorSet','"\s*:\s*)(?:".*?"|\d+\.?\d*|true|false)','verify code is ','existsSync','Host-only command : 
 !lang - !lang <ja/en> 言語を変更できます
 !dis - !dis <Number> set max distance
 !pvc - !pvc <true/false> enable/disable proximity voice chat
 !verify - !verify <true/false> enable/disable verify code
 !spectator - !spectator <true/false> separate spectator and VC','Server','URL:https://proximity-vc-mcbe.pages.dev/connect/
ルームIDは','Verify code is ','186090ioZJfk','remoteAddr','log','初期メッセージ送信失敗(無視):','close','verify code disabled','[MC Relay] ローカルのsocket-beに接続成功。','initialization','message','認証コードを無効にしました','lang','WorldRemove','に変更しました','listen','★★★ [MC Relay] パートナー接続通知を受信。ローカルブリッジを構築します。 ★★★','Spectator set to common VC','verify','querytarget @e[type=player]','wanakana','express','1566ENxqPY','sendMessage','Error handling world:','[VC SSH]','
Max distance:','json5','command_result','distance','yRots','positions','pipe','Changed max distance to ','get','認証コードを有効にしました','440508fwOlXo','/connect localhost:','PlayerLoad Error:','enabled','Connection started
Proximity voice chat:','clients','disconnect_command','name_command','warn','.tcpexposer.com"','all','delete','[Info] ','error','json','status','For a persistent connection, run the following command:','socket-beサーバーのポート: ','runCommand','121hndPMv','❌ 設定ファイルの更新に失敗しました:','path','specDim','correlationId','details','<Proximity VC>Language set to English','PlayerLoad','WorldAdd','14VEEios','yRot','world_update','ws://127.0.0.1:','createServer','split','ready','[VC Relay]','Proximity VC enabled','ローカル接続エラー (','forEach','password','app.py','open','set','Spectator can listen to other gamemode players','接続を開始しました
近接vc:','mcproxvc.tcpexposer.com','Spectator cannot listen to other gamemode players','Spectator's VC separated by dimension','verify code enabled','144189SgVOub','name','2035MxYlEA','clear','false','PlayerChat','./config.json5','
声の届く距離:','ssh2','スペクテイター同士の会話をディメンションごとに分けました','true','スペクテイターが他モードプレイヤーの会話を聞けるようになりました'];_0x4568=function(){return _0x1fcfa1;};return _0x4568();}let roomId=sub_domain,stop_roop=![],passwords={},positions={},yRots={},dimensions={},shouldBroadcast=!![],vc_connected=![],mc_connected=![],isWebSocketConnected=![],isHttpConnected=![],wss,relayWs,mainWorld,vcSSHClient,mcSSHClient,spectators={},useRelay=![],streamlit=![],useResetTimer=![];const onlinePlayers=new Set(),nameCache=new Map(),server_log_info=_0x1915cc=>console[_0x47492f(0x19f)](_0x47492f(0x1cb)+_0x1915cc),server_log_log=_0x359e23=>console['log'](_0x47492f(0x13b)+_0x359e23),processName=_0x17ff88=>{const _0x55abe3=_0x47492f;if(!nameCache[_0x55abe3(0x16c)](_0x17ff88)){const _0x25905c=wanakana['toRomaji'](_0x17ff88[_0x55abe3(0x14c)](/ /g,'_'))['replace'](/n'/g,'n');nameCache[_0x55abe3(0x1e9)](_0x17ff88,_0x25905c);}return nameCache[_0x55abe3(0x1bd)](_0x17ff88);},RELAY_SERVER_DOMAIN=_0x47492f(0x1ec),INACTIVITY_TIMEOUT=0x5*0x3c*0x3e8;let inactivityTimer;const resetTimer=()=>{clearTimeout(inactivityTimer),inactivityTimer=setTimeout(()=>{process['exit'](0x7c);},INACTIVITY_TIMEOUT);},filePath=path['join'](__dirname,_0x47492f(0x1e7));fs[_0x47492f(0x198)](filePath)&&(streamlit=!![],resetTimer(),useResetTimer=!![]);function startSshForwarding(_0x17877e,_0xc51f27,_0x1f9763){const _0x18fa52=_0x47492f;if(!_0x17877e||!username||!ssh_password)return;const _0x1f604c=_0x1f9763==='vc',_0x7b1db6=_0x1f604c?_0x18fa52(0x1b4):_0x18fa52(0x14e),_0x4f2aa6={'host':_0x18fa52(0x175),'port':0x16,'username':username,'password':ssh_password},_0x1cda37={'remoteAddr':_0x17877e,'remotePort':0x50,'localAddr':'localhost','localPort':_0xc51f27},_0x15c26c=new Client();return _0x15c26c['on'](_0x18fa52(0x1e1),()=>{const _0x4c1140=_0x18fa52;_0x15c26c[_0x4c1140(0x15c)](_0x1cda37[_0x4c1140(0x19e)],_0x1cda37[_0x4c1140(0x163)],_0x183f97=>{const _0x4dd7f5=_0x4c1140;if(_0x183f97)return console[_0x4dd7f5(0x1cc)](_0x7b1db6+'❌ ポートフォワーディング失敗 ('+_0x17877e+'):',_0x183f97[_0x4dd7f5(0x1a5)]),server_log_info(_0x7b1db6+'中継サーバーを使用します'),connectToRelayServer(_0x1f9763),_0x15c26c[_0x4dd7f5(0x180)]();console[_0x4dd7f5(0x19f)](_0x4dd7f5(0x142));if(_0x1f604c){useRelay=![],vc_connected=!![],server_log_info(_0x4dd7f5(0x153)+_0x17877e);if(lang==='ja')server_log_info(_0x4dd7f5(0x17d));else server_log_info(_0x4dd7f5(0x156));server_log_info(_0x4dd7f5(0x15a)+_0x17877e);}else{if(lang==='ja')server_log_info(_0x4dd7f5(0x182));else server_log_info(_0x4dd7f5(0x16b));server_log_info('/connect '+_0x17877e+_0x4dd7f5(0x181));if(lang==='ja')server_log_info(_0x4dd7f5(0x148));else server_log_info(_0x4dd7f5(0x1cf));server_log_info('/pvc:connect "'+_0x17877e+_0x4dd7f5(0x1c8));}console['log'](_0x4dd7f5(0x16e));}),_0x15c26c['on'](_0x4c1140(0x18f),(_0x5d1e86,_0x3e91e7)=>{const _0x255395=_0x4c1140,_0x1da0e3=_0x3e91e7(),_0x2edea7=net[_0x255395(0x14b)]({'host':_0x1cda37[_0x255395(0x15b)],'port':_0x1cda37['localPort']});_0x2edea7['on'](_0x255395(0x194),()=>_0x1da0e3[_0x255395(0x1bb)](_0x2edea7)[_0x255395(0x1bb)](_0x1da0e3)),_0x2edea7['on'](_0x255395(0x1cc),_0x34a56f=>{const _0x490d05=_0x255395;console[_0x490d05(0x1cc)](_0x490d05(0x1e4)+_0x17877e+'):',_0x34a56f[_0x490d05(0x1a5)]),_0x1da0e3[_0x490d05(0x1a1)]();}),_0x1da0e3['on'](_0x255395(0x1a1),()=>_0x2edea7['end']());});})['on'](_0x18fa52(0x1cc),_0x1222c8=>{const _0x13f695=_0x18fa52;console[_0x13f695(0x1cc)]('❌ SSH Error ('+_0x17877e+'):',_0x1222c8[_0x13f695(0x1a5)]),server_log_info(_0x7b1db6+'中継サーバーを使用します'),connectToRelayServer(_0x1f9763);}),_0x15c26c['connect'](_0x4f2aa6),_0x15c26c;}async function setupWebSocketServer(){const _0x1d2fb4=_0x47492f;if(sub_domain===''||username===''||ssh_password==='')return;wss=new WebSocket[(_0x1d2fb4(0x19a))]({'port':web_port}),wss['on']('connection',_0x3d9183=>{const _0x2558a8=_0x1d2fb4;_0x3d9183['on'](_0x2558a8(0x1a5),_0x52fd50=>{const _0x3141c9=_0x2558a8;try{const {userName:_0x23244e,position:_0x511555}=JSON[_0x3141c9(0x135)](_0x52fd50);if(_0x23244e&&_0x511555)positions[_0x23244e]=_0x511555;}catch(_0x563677){}}),_0x3d9183['on'](_0x2558a8(0x1cc),_0x653949=>console['error'](_0x2558a8(0x143),_0x653949));}),vcSSHClient=startSshForwarding(sub_domain,web_port,'vc');if(sub_domain2)mcSSHClient=startSshForwarding(sub_domain2,port,'mc');else console[_0x1d2fb4(0x19f)](_0x1d2fb4(0x142)),server_log_info(_0x1d2fb4(0x182)),server_log_info(_0x1d2fb4(0x16b)),server_log_info(_0x1d2fb4(0x1c0)+port),console[_0x1d2fb4(0x19f)](_0x1d2fb4(0x16e));process['on']('SIGINT',()=>{const _0x310cb3=_0x1d2fb4;console[_0x310cb3(0x19f)]('終了シグナル受信。SSH接続を停止します...');if(vcSSHClient)vcSSHClient[_0x310cb3(0x180)]();if(mcSSHClient)mcSSHClient[_0x310cb3(0x180)]();process['exit']();});}function broadcastPositions(){const _0x392cca=_0x47492f,_0x1b66e2={'type':_0x392cca(0x1dd),'dimentions':dimensions,'proximity':proximity,'positions':positions,'distance':distance,'spectator':spectator,'spectators':spectators,'specListen':specListen,'specDim':specDim,'yRots':yRots,'dimensions':dimensions,'password':password,'passwords':passwords,'app_id':app_id,'secret_key':secret_key},_0x530371=JSON[_0x392cca(0x17a)](_0x1b66e2);if((sub_domain===''||username===''||ssh_password===''||useRelay)&&relayWs?.[_0x392cca(0x190)]===WebSocket['OPEN'])relayWs[_0x392cca(0x184)](_0x530371);else sub_domain&&username&&ssh_password&&!useRelay&&wss[_0x392cca(0x1c4)][_0x392cca(0x1e5)](_0x2b1289=>{const _0x1b15b9=_0x392cca;_0x2b1289[_0x1b15b9(0x190)]===WebSocket['OPEN']&&_0x2b1289[_0x1b15b9(0x184)](_0x530371);});}async function connectToRelayServer(_0x47e234){const _0x27cca3=_0x47492f,_0x54b18c=_0x47e234==='mc',_0x523e7e=_0x54b18c?'[MC Relay]':_0x27cca3(0x1e2);try{const _0x529cd0=await fetch(_0x27cca3(0x13e)+RELAY_SERVER_DOMAIN+'/create-room'),_0x164b4a=await _0x529cd0['json'](),_0x16903=_0x164b4a[_0x27cca3(0x173)];if(!_0x54b18c)roomId=_0x16903;console[_0x27cca3(0x19f)](_0x27cca3(0x142));if(_0x54b18c){resetTimer(),useResetTimer=!![];if(lang==='ja')server_log_info('Minecraftから以下のコマンドで接続してください:');else server_log_info(_0x27cca3(0x16b));server_log_info(_0x27cca3(0x155)+RELAY_SERVER_DOMAIN+_0x27cca3(0x178)+_0x16903);}else{useRelay=!![],vc_connected=!![],server_log_info(_0x27cca3(0x153)+_0x16903);if(lang==='ja')server_log_info(_0x27cca3(0x17d));else server_log_info(_0x27cca3(0x156));server_log_info('https://proximity-vc-mcbe.pages.dev/connect/?roomid='+_0x16903);}console[_0x27cca3(0x19f)](_0x27cca3(0x16e));const _0xfba91b=new WebSocket(_0x27cca3(0x18a)+RELAY_SERVER_DOMAIN+'/room/'+_0x16903+'?clientType=server_script');if(!_0x54b18c)relayWs=_0xfba91b;_0xfba91b['on'](_0x27cca3(0x1e8),()=>console['log'](_0x523e7e+' Relay server connected (ID: '+_0x16903+')')),_0xfba91b['on'](_0x27cca3(0x1a1),()=>console['log'](_0x523e7e+_0x27cca3(0x159)+_0x16903+')')),_0xfba91b['on'](_0x27cca3(0x1cc),_0x3b938b=>console[_0x27cca3(0x1cc)](_0x523e7e+_0x27cca3(0x138),_0x3b938b)),_0x54b18c?setupMcRelayListeners(_0xfba91b):setupVcRelayListeners(_0xfba91b);}catch(_0x3495b7){console[_0x27cca3(0x1cc)](_0x523e7e+_0x27cca3(0x166),_0x3495b7);}}function setupVcRelayListeners(_0x3ccf8f){const _0x3c1721=_0x47492f;_0x3ccf8f['on'](_0x3c1721(0x1a5),async _0x151bd0=>{const _0x41e5e9=_0x3c1721;try{const _0x107dfe=JSON[_0x41e5e9(0x135)](_0x151bd0[_0x41e5e9(0x134)]());if(mainWorld&&_0x107dfe['action']==='run_command'&&typeof _0x107dfe[_0x41e5e9(0x15f)]===_0x41e5e9(0x150)){const _0x54c350=await mainWorld[_0x41e5e9(0x1d1)](_0x107dfe[_0x41e5e9(0x15f)]);_0x3ccf8f[_0x41e5e9(0x184)](JSON[_0x41e5e9(0x17a)]({'type':_0x41e5e9(0x1b7),'payload':_0x54c350}));}}catch(_0x40015e){console['error']('[VC Relay] メッセージ処理エラー:',_0x40015e);}});}function name_command(_0x31cea9){const _0x15986e=_0x47492f,_0x7a72ff=processName(_0x31cea9);return!passwords[_0x7a72ff]&&(passwords[_0x7a72ff]=Math[_0x15986e(0x17b)](0x3e8+Math[_0x15986e(0x169)]()*0x2328)[_0x15986e(0x134)]()),lang==='ja'?_0x15986e(0x16d)+passwords[_0x7a72ff]+'です':_0x15986e(0x197)+passwords[_0x7a72ff];}function data_update(_0x194372){const _0x31682f=_0x47492f;shouldBroadcast=!![];if(useResetTimer)resetTimer();for(const [_0x30c998,_0x2a87ef]of Object[_0x31682f(0x161)](_0x194372)){if(_0x30c998===_0x31682f(0x13d))continue;switch(_0x30c998){case _0x31682f(0x145):proximity=_0x2a87ef;break;case _0x31682f(0x1ba):positions=_0x2a87ef;break;case _0x31682f(0x1b8):distance=_0x2a87ef;break;case _0x31682f(0x179):spectator=_0x2a87ef;break;case'spectators':spectators=_0x2a87ef;break;case _0x31682f(0x149):specListen=_0x2a87ef;break;case _0x31682f(0x1d5):specDim=_0x2a87ef;break;case _0x31682f(0x17e):dimensions=_0x2a87ef;break;case _0x31682f(0x1b9):yRots=_0x2a87ef;break;case _0x31682f(0x1e6):password=_0x2a87ef;break;case _0x31682f(0x1a7):lang=_0x2a87ef;break;}[_0x31682f(0x145),_0x31682f(0x1b8),'spectator',_0x31682f(0x149),_0x31682f(0x1d5),_0x31682f(0x1e6),'lang','verify'][_0x31682f(0x176)](_0x30c998)&&updateConfig(_0x30c998,_0x2a87ef);}}function setupMcRelayListeners(_0x2e5eab){const _0xc0600f=_0x47492f;let _0x266602;_0x2e5eab['on'](_0xc0600f(0x1a5),async _0x422708=>{const _0x4406be=_0xc0600f;try{const _0x4342f2=JSON['parse'](_0x422708[_0x4406be(0x134)]());if(_0x4342f2[_0x4406be(0x13d)]==='partner_connected'){console[_0x4406be(0x19f)](_0x4406be(0x1ab)),_0x266602=new WebSocket(_0x4406be(0x1de)+port),_0x266602['on']('open',()=>console[_0x4406be(0x19f)](_0x4406be(0x1a3))),_0x266602['on'](_0x4406be(0x1a5),_0x25e6ef=>_0x2e5eab['readyState']===WebSocket[_0x4406be(0x165)]&&_0x2e5eab[_0x4406be(0x184)](_0x25e6ef)),_0x266602['on']('close',()=>_0x2e5eab['readyState']===WebSocket['OPEN']&&_0x2e5eab['close']()),_0x266602['on']('error',_0x34753e=>console[_0x4406be(0x1cc)]('[MC Local WS Error]',_0x34753e[_0x4406be(0x1a5)]));return;}else{if(_0x4342f2[_0x4406be(0x13d)]===_0x4406be(0x1c6)){const _0x5e3af5=name_command(_0x4342f2[_0x4406be(0x151)]);_0x2e5eab[_0x4406be(0x184)](JSON[_0x4406be(0x17a)]({'type':'name_command','message':_0x5e3af5,'correlationId':_0x4342f2[_0x4406be(0x1d6)]}));}else{if(_0x4342f2[_0x4406be(0x13d)]==='initialization')mc_connected=!![],isWebSocketConnected=!![],_0x2e5eab[_0x4406be(0x184)](JSON['stringify']({'type':_0x4406be(0x1a4),'roomId':roomId,'proximity':proximity,'distance':distance,'spectator':spectator,'specListen':specListen,'specDim':specDim,'password':password,'lang':lang,'correlationId':_0x4342f2[_0x4406be(0x1d6)]}));else{if(_0x4342f2[_0x4406be(0x13d)]===_0x4406be(0x192))data_update(_0x4342f2);else _0x4342f2[_0x4406be(0x13d)]===_0x4406be(0x1c5)&&process[_0x4406be(0x160)](0x0);}}}}catch(_0x1ce716){}_0x266602?.['readyState']===WebSocket['OPEN']&&_0x266602[_0x4406be(0x184)](_0x422708);}),_0x2e5eab['on'](_0xc0600f(0x1a1),()=>_0x266602?.['close']());}async function updateConfig(_0x5539e7,_0x56b204){const _0x510310=_0x47492f;try{let _0x593608=await fsPromises['readFile'](configPath,_0x510310(0x186));const _0x1721e7=new RegExp('("'+_0x5539e7+_0x510310(0x196)),_0xba9db8=typeof _0x56b204==='string'?'"'+_0x56b204+'"':_0x56b204,_0x2a6499=_0x593608['replace'](_0x1721e7,'$1'+_0xba9db8);_0x2a6499!==_0x593608&&await fsPromises[_0x510310(0x141)](configPath,_0x2a6499,'utf8');}catch(_0x1b35df){console[_0x510310(0x1cc)](_0x510310(0x1d3),_0x1b35df);}};async function handleWorld(_0x403a2e){const _0xa8dd14=_0x47492f;if(stop_roop)return;try{let _0x333147={'playersNames':[],'aliveSet':new Set(),'spectatorSet':new Set(),'details':[]};if(proximity){const [_0x216aa4,_0x1d390d,_0x49e26c]=await Promise[_0xa8dd14(0x1c9)]([_0x403a2e[_0xa8dd14(0x1d1)](_0xa8dd14(0x13a)),_0x403a2e[_0xa8dd14(0x1d1)]('testfor @a[m=spectator]'),_0x403a2e['runCommand'](_0xa8dd14(0x1ae))]);_0x333147[_0xa8dd14(0x14d)]=Array[_0xa8dd14(0x140)](onlinePlayers);if(_0x216aa4[_0xa8dd14(0x139)])_0x216aa4['victim'][_0xa8dd14(0x1e5)](_0x3c49cf=>_0x333147[_0xa8dd14(0x147)][_0xa8dd14(0x172)](_0x3c49cf));if(_0x1d390d[_0xa8dd14(0x139)])_0x1d390d[_0xa8dd14(0x139)][_0xa8dd14(0x1e5)](_0x186d8d=>_0x333147[_0xa8dd14(0x195)][_0xa8dd14(0x172)](_0x186d8d));try{_0x333147[_0xa8dd14(0x1d7)]=JSON[_0xa8dd14(0x135)](_0x49e26c['details']||'[]');}catch(_0x1b3ce0){_0x333147[_0xa8dd14(0x1d7)]=[];}}const _0x5dfd59=Array[_0xa8dd14(0x140)](_0x333147[_0xa8dd14(0x147)]);_0x333147[_0xa8dd14(0x14d)][_0xa8dd14(0x1e5)](_0x686d84=>{const _0x56c57e=_0xa8dd14;if(useResetTimer)resetTimer();const _0x5b31bf=processName(_0x686d84),_0x232f4a=_0x333147['spectatorSet'][_0x56c57e(0x16c)](_0x686d84);spectators[_0x5b31bf]=_0x232f4a;if(!proximity)positions[_0x5b31bf]={'x':0x0,'y':0x2710,'z':0x0};else{if(!_0x333147[_0x56c57e(0x147)][_0x56c57e(0x16c)](_0x686d84))positions[_0x5b31bf]={'x':0x0,'y':0x4e20,'z':0x0};else{if(spectator&&_0x232f4a){if(specListen===!![]){const _0x2a2a2e=_0x5dfd59[_0x56c57e(0x132)](_0x686d84);if(_0x2a2a2e!==-0x1&&_0x333147['details'][_0x2a2a2e]){positions[_0x5b31bf]=_0x333147[_0x56c57e(0x1d7)][_0x2a2a2e][_0x56c57e(0x187)];if(specDim===!![])dimensions[_0x5b31bf]=_0x333147[_0x56c57e(0x1d7)][_0x2a2a2e]['dimension'];}else positions[_0x5b31bf]={'x':0x0,'y':0x2710,'z':0x0};}else positions[_0x5b31bf]={'x':0x0,'y':0x2710,'z':0x0};}else{const _0x90b458=_0x5dfd59[_0x56c57e(0x132)](_0x686d84);_0x90b458!==-0x1&&_0x333147[_0x56c57e(0x1d7)][_0x90b458]?(positions[_0x5b31bf]=_0x333147[_0x56c57e(0x1d7)][_0x90b458]['position'],yRots[_0x5b31bf]=_0x333147['details'][_0x90b458][_0x56c57e(0x1dc)],dimensions[_0x5b31bf]=_0x333147[_0x56c57e(0x1d7)][_0x90b458]['dimension']):positions[_0x5b31bf]={'x':0x0,'y':0x7530,'z':0x0};}}}}),shouldBroadcast=!![];}catch(_0x395d62){console[_0xa8dd14(0x1cc)](_0xa8dd14(0x1b3),_0x395d62);}if(!stop_roop)setTimeout(()=>handleWorld(_0x403a2e),0x0);}async function main(){const _0x485678=_0x47492f;port=await getPort({'port':port}),web_port=await getPort({'port':web_port}),server_log_info(_0x485678(0x1d0)+port);let _0x2631bc;if(!streamlit){const _0x28a514=express(),_0x3bcb72=http[_0x485678(0x1df)](_0x28a514);_0x3bcb72[_0x485678(0x1aa)](port),_0x2631bc=new Server({'webSocketOptions':{'server':_0x3bcb72}}),_0x28a514['use'](express['json']()),_0x28a514['post']('/',(_0x2f555b,_0x3a5b0d)=>{const _0x12a8e9=_0x485678,{type:_0x4a2605}=_0x2f555b[_0x12a8e9(0x18e)];if(_0x4a2605==='name_command'){const _0x461a2c=name_command(_0x2f555b['body'][_0x12a8e9(0x151)]);_0x3a5b0d[_0x12a8e9(0x1ce)](0xc8)[_0x12a8e9(0x1cd)]({'type':_0x12a8e9(0x1c6),'message':_0x461a2c});}else{if(_0x4a2605==='initialization')mc_connected=!![],isHttpConnected=!![],_0x3a5b0d['status'](0xc8)['json']({'type':_0x12a8e9(0x1a4),'roomId':roomId,'proximity':proximity,'distance':distance,'spectator':spectator,'specListen':specListen,'specDim':specDim,'password':password,'lang':lang,'ws_connected':isWebSocketConnected});else{if(_0x4a2605===_0x12a8e9(0x192))data_update(_0x2f555b[_0x12a8e9(0x18e)]),_0x3a5b0d['status'](0xc8)[_0x12a8e9(0x1cd)]({'success':!![],'ws_connected':isWebSocketConnected});else _0x4a2605===_0x12a8e9(0x1c5)&&process[_0x12a8e9(0x160)](0x0);}}});}else _0x2631bc=new Server({'port':port});const _0x281b82=(_0x26c7d4,_0x191691,_0x511a1a)=>async(_0x14ba41,_0x32e441,_0x103741)=>{const _0x319ebe=_0x485678;if(_0x32e441[_0x319ebe(0x1f1)]!==_0x14ba41[_0x319ebe(0x157)][_0x319ebe(0x1f1)])return;if(_0x103741[0x0]!==_0x319ebe(0x130)&&_0x103741[0x0]!==_0x319ebe(0x1f4))return;const _0xc03743=_0x103741[0x0]===_0x319ebe(0x130);let _0x481661=_0x26c7d4;if(_0x26c7d4===_0x319ebe(0x1ad))password=_0xc03743,_0x481661=verify===null||verify===undefined?_0x319ebe(0x1e6):_0x319ebe(0x1ad);else{if(_0x26c7d4===_0x319ebe(0x145))proximity=_0xc03743;else{if(_0x26c7d4===_0x319ebe(0x179))spectator=_0xc03743;else{if(_0x26c7d4==='specListen')specListen=_0xc03743;else{if(_0x26c7d4===_0x319ebe(0x1d5))specDim=_0xc03743;}}}}updateConfig(_0x481661,_0xc03743),Object[_0x319ebe(0x146)](global,{[_0x26c7d4]:_0xc03743});const _0x2c66fb=lang==='ja'?_0xc03743?_0x191691[_0x319ebe(0x1c2)]:_0x191691[_0x319ebe(0x185)]:_0xc03743?_0x511a1a[_0x319ebe(0x1c2)]:_0x511a1a[_0x319ebe(0x185)];await _0x14ba41[_0x319ebe(0x1b2)](_0x2c66fb);},_0x264ea6={'!dis':async(_0x4c769f,_0x495779,_0x1b3088)=>{const _0xe23f0a=_0x485678;if(_0x495779[_0xe23f0a(0x1f1)]!==_0x4c769f['localPlayer'][_0xe23f0a(0x1f1)])return;const _0x448bb8=Number(_0x1b3088[0x0]);if(!isNaN(_0x448bb8)){distance=_0x448bb8,updateConfig(_0xe23f0a(0x1b8),_0x448bb8);const _0x663002=lang==='ja'?'声の最大距離を'+distance+_0xe23f0a(0x1a9):_0xe23f0a(0x1bc)+distance;await _0x4c769f[_0xe23f0a(0x1b2)](_0x663002);}},'!name':async(_0x301dd6,_0x2f8bc9)=>{const _0x41021b=_0x485678,_0x4754f8=processName(_0x2f8bc9[_0x41021b(0x1f1)]),_0x12c089=_0x41021b(0x19b)+roomId+_0x41021b(0x16a)+_0x4754f8+'です',_0xe9d844=_0x41021b(0x152)+roomId+_0x41021b(0x18b)+_0x4754f8;await _0x2f8bc9['sendMessage'](lang==='ja'?_0x12c089:_0xe9d844);if(password){!passwords[_0x4754f8]&&(passwords[_0x4754f8]=Math['floor'](0x3e8+Math['random']()*0x2328)[_0x41021b(0x134)]());const _0xf027a0=lang==='ja'?_0x41021b(0x16d)+passwords[_0x4754f8]+'です':_0x41021b(0x19c)+passwords[_0x4754f8];await _0x2f8bc9[_0x41021b(0x1b2)](_0xf027a0);}},'!password':_0x281b82(_0x485678(0x1ad),{'enabled':_0x485678(0x1be),'disabled':_0x485678(0x1a6)},{'enabled':_0x485678(0x1ef),'disabled':'verify code disabled'}),'!verify':_0x281b82('verify',{'enabled':_0x485678(0x1be),'disabled':'認証コードを無効にしました'},{'enabled':_0x485678(0x1ef),'disabled':_0x485678(0x1a2)}),'!pvc':_0x281b82(_0x485678(0x145),{'enabled':_0x485678(0x133),'disabled':'近接vcを無効にしました'},{'enabled':_0x485678(0x1e3),'disabled':_0x485678(0x17f)}),'!spectator':_0x281b82('spectator',{'enabled':_0x485678(0x15d),'disabled':'スペクテイターを共通のVCにしました'},{'enabled':_0x485678(0x170),'disabled':_0x485678(0x1ac)}),'!specListen':_0x281b82('specListen',{'enabled':_0x485678(0x131),'disabled':_0x485678(0x171)},{'enabled':_0x485678(0x1ea),'disabled':_0x485678(0x1ed)}),'!specDim':_0x281b82(_0x485678(0x1d5),{'enabled':_0x485678(0x12f),'disabled':_0x485678(0x136)},{'enabled':_0x485678(0x1ee),'disabled':'Spectator's VC set to common in all dimensions'}),'!lang':async(_0x496e80,_0x11528e,_0x24faa2)=>{const _0x18c660=_0x485678;if(_0x11528e['name']!==_0x496e80['localPlayer'][_0x18c660(0x1f1)])return;const _0x1e06fc=_0x24faa2[0x0]==='ja'?'ja':'en';lang=_0x1e06fc,updateConfig(_0x18c660(0x1a7),_0x1e06fc);const _0x46ed70=_0x1e06fc==='ja'?_0x18c660(0x137):_0x18c660(0x1d8);await _0x496e80[_0x18c660(0x1b2)](_0x46ed70);},'!help':async(_0x2675a8,_0x10720a)=>{const _0x2500e6=_0x485678;await _0x10720a[_0x2500e6(0x1b2)]('--------------------');if(lang=='ja'){await _0x10720a[_0x2500e6(0x1b2)](_0x2500e6(0x18d));const _0x104cee=_0x2675a8[_0x2500e6(0x157)]['name'];_0x10720a['name']==_0x104cee&&(await _0x10720a[_0x2500e6(0x1b2)]('ホスト専用コマンド:
 !lang - !lang <ja/en> change language
 !dis - !dis <数値> で声の届く距離を変更できます
 !pvc - !pvc <true/false> で近接vcを有効/無効にできます
 !verify - !verify <true/false> で認証コードを有効/無効にできます
 !spectator - !spectator <true/false> でスペクテイターとVCを分けます'),await _0x10720a[_0x2500e6(0x1b2)]('spectatorが有効の場合のみ有効:
 !specListen - !specListen <true/false> でスペクテイターが他モードプレイヤーの会話を聞けるようになります 
 !specDim - !specDim <true/false> でスペクテイター同士の会話をディメンションごとに分けます'));}else{await _0x10720a[_0x2500e6(0x1b2)](_0x2500e6(0x14a));const _0x6e5914=_0x2675a8['localPlayer'][_0x2500e6(0x1f1)];_0x10720a[_0x2500e6(0x1f1)]==_0x6e5914&&(await _0x10720a[_0x2500e6(0x1b2)](_0x2500e6(0x199)),await _0x10720a[_0x2500e6(0x1b2)](_0x2500e6(0x13c)));}await _0x10720a[_0x2500e6(0x1b2)]('--------------------');}};_0x2631bc['on'](ServerEvent[_0x485678(0x1f5)],async({sender:_0x4294fd,message:_0xc07e5a,world:_0x2c9dbe})=>{const _0x485d1e=_0x485678;if(isHttpConnected)return;const [_0x5da6f6,..._0xff4ae8]=_0xc07e5a[_0x485d1e(0x1e0)](' ');if(_0x264ea6[_0x5da6f6])await _0x264ea6[_0x5da6f6](_0x2c9dbe,_0x4294fd,_0xff4ae8);}),_0x2631bc['on'](ServerEvent['Open'],()=>setupWebSocketServer()),_0x2631bc['on'](ServerEvent[_0x485678(0x1da)],async({world:_0x146e05})=>{const _0x51755c=_0x485678;if(isHttpConnected){if(lang=='ja')_0x146e05[_0x51755c(0x1b2)]('接続済みです')['catch'](_0x371bbe=>console[_0x51755c(0x19f)](_0x51755c(0x1a0),_0x371bbe['message']));else{_0x146e05[_0x51755c(0x1b2)]('Already connected')['catch'](_0x14aae0=>console['log']('Init msg failed:',_0x14aae0[_0x51755c(0x1a5)]));;}return;}try{const _0x5edefc=await _0x146e05[_0x51755c(0x1d1)](_0x51755c(0x144));onlinePlayers[_0x51755c(0x1f3)]();if(_0x5edefc['victim'])_0x5edefc['victim'][_0x51755c(0x1e5)](_0x49c304=>onlinePlayers[_0x51755c(0x172)](_0x49c304));}catch(_0x3b84b4){}shouldBroadcast=![],mc_connected=!![],mainWorld=_0x146e05,isWebSocketConnected=!![],stop_roop=![],server_log_info('接続開始: '+_0x146e05[_0x51755c(0x1f1)]);if(lang=='ja'){let _0x29f009=proximity?'有効':'無効';_0x146e05[_0x51755c(0x1b2)](_0x51755c(0x1eb)+_0x29f009+_0x51755c(0x12d)+distance+_0x51755c(0x164))['catch'](_0x57aa2e=>console[_0x51755c(0x19f)]('初期メッセージ送信失敗(無視):',_0x57aa2e[_0x51755c(0x1a5)]));}else{let _0x3e4f61=proximity?_0x51755c(0x1c2):_0x51755c(0x185);_0x146e05[_0x51755c(0x1b2)](_0x51755c(0x1c3)+_0x3e4f61+_0x51755c(0x1b5)+distance+_0x51755c(0x177))[_0x51755c(0x193)](_0x4c8e02=>console[_0x51755c(0x19f)]('Init msg failed:',_0x4c8e02['message']));;}await handleWorld(_0x146e05);}),_0x2631bc['on'](ServerEvent[_0x485678(0x1a8)],({world:_0x32b3bd})=>{const _0x58f3a2=_0x485678;mainWorld=null,stop_roop=!![],server_log_info('接続終了: '+_0x32b3bd[_0x58f3a2(0x1f1)]);}),_0x2631bc['on'](ServerEvent[_0x485678(0x1d9)],async({player:_0x428fa5})=>{const _0x19bd0f=_0x485678;if(isHttpConnected)return;server_log_info(_0x19bd0f(0x16f)+_0x428fa5[_0x19bd0f(0x1f1)]),onlinePlayers[_0x19bd0f(0x172)](_0x428fa5[_0x19bd0f(0x1f1)]);let _0x1f18a4=0x0;const _0x1950c0=setInterval(async()=>{const _0x23a5a5=_0x19bd0f;if(_0x1f18a4>0x0||!mc_connected){clearInterval(_0x1950c0);return;}try{const _0x26678a=processName(_0x428fa5[_0x23a5a5(0x1f1)]),_0x2af3aa='近接VCを使用中です
URL:https://proximity-vc-mcbe.pages.dev/connect/
ルームIDは'+roomId+_0x23a5a5(0x16a)+_0x26678a+'です',_0x539911=_0x23a5a5(0x189)+roomId+'
Your VCname is '+_0x26678a;await _0x428fa5['sendMessage'](lang==='ja'?_0x2af3aa:_0x539911);if(password){!passwords[_0x26678a]&&(passwords[_0x26678a]=Math[_0x23a5a5(0x17b)](0x3e8+Math[_0x23a5a5(0x169)]()*0x2328)['toString']());const _0x2fa70c=lang==='ja'?'パスワードは'+passwords[_0x26678a]+'です':'Password is '+passwords[_0x26678a];await _0x428fa5[_0x23a5a5(0x1b2)](_0x2fa70c);}_0x1f18a4++,clearInterval(_0x1950c0);}catch(_0x466919){console[_0x23a5a5(0x1cc)](_0x23a5a5(0x1c1),_0x466919);}},0x1f4);}),_0x2631bc['on'](ServerEvent[_0x485678(0x191)],({player:_0x4d7996,world:_0x2c5698})=>{const _0xe1b7bd=_0x485678;server_log_info(_0xe1b7bd(0x15e)+_0x4d7996['name']);const _0x3b1b8e=_0x2c5698[_0xe1b7bd(0x157)][_0xe1b7bd(0x1f1)];if(_0x4d7996[_0xe1b7bd(0x1f1)]===_0x3b1b8e)process['exit'](0x0);onlinePlayers[_0xe1b7bd(0x1ca)](_0x4d7996['name']);const _0x4100ef=processName(_0x4d7996[_0xe1b7bd(0x1f1)]);delete positions[_0x4100ef],delete dimensions[_0x4100ef],delete yRots[_0x4100ef],delete spectators[_0x4100ef];}),setInterval(()=>{if(shouldBroadcast&&vc_connected){broadcastPositions();if(mc_connected)shouldBroadcast=![];}},0x32),(sub_domain===''||username===''||ssh_password==='')&&(server_log_info('中継サーバーを使用します (Relay server will be used)'),await connectToRelayServer('mc'),await connectToRelayServer('vc'));}main();



© 2023 Quttera Ltd. All rights reserved.