const {Client,GatewayIntentBits,EmbedBuilder,ActivityType,SlashCommandBuilder,REST,Routes,ButtonBuilder,ButtonStyle,ActionRowBuilder}=require('discord.js'),axios=require('axios'),express=require('express'),fs=require('fs'),TOKEN='MTQzMDU1NDkwODkwMTI0NTAyOQ.G8JEjN.LH6VbCSN7QUdnK8vFb72vjyiLlhkDYvLryfDcA',CID='1430554908901245029',API='https://api.emergency-hamburg.com/public/servers',app=express(),s={start:Date.now(),total:0,usage:{},users:new Map(),servers:new Map(),blacklist:new Set(),enabled:{},events:[],savedIds:new Map()};app.use(express.json());function ld(){try{if(!fs.existsSync('b.json'))return;const d=JSON.parse(fs.readFileSync('b.json','utf8'));s.total=d.total||0;s.usage=d.usage||{};s.blacklist=new Set(d.blacklist||[]);s.enabled=d.enabled||{};s.events=d.events||[];s.savedIds=new Map(d.savedIds||[]);if(d.users)d.users.forEach(u=>s.users.set(u.id,u));if(d.servers)d.servers.forEach(v=>s.servers.set(v.id,v));['get-id','send-embed','help'].forEach(c=>{if(!s.enabled[c])s.enabled[c]=!0;if(!s.usage[c])s.usage[c]=0});console.log('āœ… Load')}catch(e){console.error(e)}}function sv(){try{const u=[],v=[];s.users.forEach((d,k)=>u.push({id:k,...d}));s.servers.forEach((d,k)=>v.push({id:k,...d}));fs.writeFileSync('b.json',JSON.stringify({total:s.total,usage:s.usage,blacklist:[...s.blacklist],enabled:s.enabled,events:s.events.slice(-100),savedIds:[...s.savedIds],users:u,servers:v}))}catch(e){console.error(e)}}function lg(m){s.events.unshift({time:new Date().toISOString(),msg:m});if(s.events.length>100)s.events.pop();sv()}const c=new Client({intents:[GatewayIntentBits.Guilds,GatewayIntentBits.GuildMessages,GatewayIntentBits.MessageContent]}),t=new Map(),cmd=[new SlashCommandBuilder().setName('get-id').setDescription('Server suchen').addStringOption(o=>o.setName('username').setDescription('Roblox Username').setRequired(!0)),new SlashCommandBuilder().setName('send-embed').setDescription('Embed senden'),new SlashCommandBuilder().setName('help').setDescription('Hilfe')].map(x=>x.toJSON()),r=new REST({version:'10'}).setToken(TOKEN);(async()=>{try{await r.put(Routes.applicationCommands(CID),{body:cmd});console.log('āœ… Cmds')}catch(e){console.error(e)}})();async function getS(){try{return(await axios.get(API)).data}catch(e){console.error(e);return null}}async function getC(id){const x=await getS();return x?x.find(v=>v.privateServerId===id):null}function nU(l){const d=120000-(Date.now()-l);if(d<=0)return'2';return Math.ceil(d/60000).toString()}function emb(d,l){if(!l)l=Date.now();const on=d.currentPlayers>=0,ti=nU(l),tx=ti==='1'?'1 Minute':ti+' Minuten',e=new EmbedBuilder().setColor(on?'#00FF00':'#FF0000').setTitle('šŸ™ļø '+d.serverName).setThumbnail(d.ownerProfileUrl).addFields({name:'🟢 Status',value:on?'Online':'Offline',inline:!1},{name:'šŸ‘‘ Owner',value:'['+d.ownerName+']('+d.ownerProfileUrl+')',inline:!1},{name:'šŸ‘„ Players',value:d.currentPlayers+'/'+d.maxPlayers,inline:!1});if(d.socialLinks&&typeof d.socialLinks==='object'){let lk='';if(d.socialLinks.YouTube&&d.socialLinks.YouTube.trim())lk+='šŸ“ŗ [YouTube](https://youtube.com/@'+d.socialLinks.YouTube+') ';if(d.socialLinks.Discord&&d.socialLinks.Discord.trim())lk+='šŸ’¬ [Discord](https://discord.gg/'+d.socialLinks.Discord+') ';if(d.socialLinks.X&&d.socialLinks.X.trim())lk+='āœ–ļø [X](https://x.com/'+d.socialLinks.X+') ';if(lk)e.addFields({name:'šŸ”— Social Links',value:lk.trim(),inline:!1})}e.addFields({name:'šŸ”„ Update',value:tx,inline:!1});return e.setFooter({text:'Product by EH - Ingamestats'})}async function upd(){for(let[ch,d]of t){try{const df=Date.now()-d.last,sv=await getC(d.id);if(!sv)continue;const cn=await c.channels.fetch(ch),m=await cn.messages.fetch(d.msg);if(df>=120000){await m.edit({embeds:[emb(sv,Date.now())]});t.set(ch,{msg:d.msg,id:d.id,last:Date.now()});console.log('āœ… '+sv.serverName)}else{await m.edit({embeds:[emb(sv,d.last)]})}}catch(e){console.error(e)}}}function tr(cm,ui,un,gi,gn){s.total++;s.usage[cm]=(s.usage[cm]||0)+1;if(!s.users.has(ui))s.users.set(ui,{username:un,server:gn,cmds:0,last:cm,seen:new Date().toISOString()});const u=s.users.get(ui);u.cmds++;u.last=cm;u.seen=new Date().toISOString();if(!s.servers.has(gi))s.servers.set(gi,{name:gn,cmds:0});s.servers.get(gi).cmds++;sv()}c.once('ready',()=>{console.log('āœ… '+c.user.tag);c.user.setActivity('Emergency Hamburg',{type:ActivityType.Watching});ld();setInterval(upd,10000)});c.on('interactionCreate',async i=>{if(i.isButton()&&i.customId.startsWith('set_id_')){await i.deferUpdate();const id=i.customId.replace('set_id_','');s.savedIds.set(i.user.id,id);sv();lg('šŸ’¾ '+i.user.tag+' saved '+id);await i.followUp({content:'āœ… ID: `'+id+'`\n`/send-embed`',ephemeral:!0});return}if(!i.isChatInputCommand())return;const cm=i.commandName,ui=i.user.id,un=i.user.tag,gi=i.guild?i.guild.id:'DM',gn=i.guild?i.guild.name:'DM';if(s.blacklist.has(ui)){lg('🚫 '+un);return i.reply({content:'🚫 Blacklist',ephemeral:!0})}if(s.blacklist.has(gi)){lg('🚫 '+gn);return i.reply({content:'🚫 Blacklist',ephemeral:!0})}if(!s.enabled[cm])return i.reply({content:'āš ļø Deaktiviert',ephemeral:!0});tr(cm,ui,un,gi,gn);if(cm==='get-id'){await i.deferReply({ephemeral:!0});let u=i.options.getString('username');if(u.startsWith('@'))u=u.slice(1);const sv=await getS();if(!sv)return i.editReply('āŒ API Error');const lc=u.toLowerCase(),m=sv.filter(x=>{const o=x.ownerName.toLowerCase(),co=o.replace(/[_\-\s]/g,''),cs=lc.replace(/[_\-\s]/g,'');if(o===lc||co===cs)return!0;if(o.includes(lc)||co.includes(cs))return!0;const ml=Math.max(co.length,cs.length);let mc=0;for(let j=0;j=90});if(!m.length)return i.editReply('āŒ Keine: '+u);const e=new EmbedBuilder().setColor('#0099ff').setTitle('šŸ” Gefunden').setDescription('**@'+u+'**'),co=[];for(let x=0;xp.send('EH Bot

šŸ¤– EH

0
User
0
Server
0
Cmds
0
Blocked

šŸ”„ Top 10

#UserCmdsLast

šŸ“Š Chart

šŸ“‹ Events

šŸ‘„ Users

NameServerCmds

šŸ–„ļø Server

NameMemberCmds

⚔ Ranking

#UserServerCmds

āš™ļø Cmds

CmdUsesStatus

🚫 BL

IDTypName

šŸ“‹ Logs

'));app.get('/api/stats',(q,p)=>{const u=Date.now()-s.start,h=Math.floor(u/3600000),m=Math.floor((u%3600000)/60000);p.json({totalUsers:s.users.size,totalServers:s.servers.size,totalCommands:s.total,usage:s.usage,uptime:h+'h '+m+'m',enabled:s.enabled,blacklistCount:s.blacklist.size})});app.get('/api/users',(q,p)=>{const a=[];s.users.forEach((d,k)=>a.push({id:k,...d}));p.json(a)});app.get('/api/servers',(q,p)=>{const a=[];c.guilds.cache.forEach(g=>{const ch=g.channels.cache.find(x=>x.type===0&&x.permissionsFor(g.members.me).has('CreateInstantInvite')),st=s.servers.get(g.id);a.push({id:g.id,name:g.name,members:g.memberCount,icon:g.iconURL(),cmds:st?st.cmds:0,invite:ch?g.id:null})});p.json(a)});app.get('/api/blacklist',(q,p)=>p.json([...s.blacklist]));app.get('/api/events',(q,p)=>p.json(s.events));app.get('/api/bot-invite',(q,p)=>p.json({invite:'https://discord.com/api/oauth2/authorize?client_id='+CID+'&permissions=8&scope=bot%20applications.commands'}));app.post('/api/blacklist',(q,p)=>{s.blacklist.add(q.body.id);lg('āž• BL: '+q.body.id);sv();p.json({success:!0})});app.delete('/api/blacklist/:id',(q,p)=>{s.blacklist.delete(q.params.id);lg('āž– '+q.params.id);sv();p.json({success:!0})});app.post('/api/command/:name/toggle',(q,p)=>{const n=q.params.name;if(s.enabled[n]!==undefined){s.enabled[n]=!s.enabled[n];lg('šŸ”„ /'+n+': '+(s.enabled[n]?'ON':'OFF'));sv();p.json({success:!0,enabled:s.enabled[n]})}else p.status(404).json({error:'Not found'})});app.listen(3000,()=>console.log('🌐 http://localhost:3000'));c.login(TOKEN);