let adminMap = new Map() async function orionCheck(interaction, adminMap) { const guild = await client.guilds.fetch(General.SERVER.ID) const members = await guild.members.fetch() var memberList = []; members.forEach(member => memberList.push(member.user.id)); for (let i = 0; i < memberList.length; i++) { if (members.get(memberList[i]).roles.highest.permissions.has("ADMINISTRATOR")) adminMap.set(members.get(memberList[i]).user.id, {BPM: 0, KPM: 0}) //console.log(members.get(memberList[i]).user.id) } var orionObjects = { banObject: ["API/Orion Objects/OrionData.json", "Ban", "BPM", adminMap.get(interaction.user.id).BPM], kickObject: ["API/Orion Objects/Kickbject.syrex", "Kick", "KPM", adminMap.get(interaction.user.id).KPM] } var objectPick = orionObjects.unknown; if (interaction.commandName == 'ping' && General.SERVER.CHANNELS.LOGS !== "") { objectPick = orionObjects.banObject; if (client.orion == undefined) { client.orion = adminMap; console.log(client.orion.get(interaction.user.id), "client.orion made") } else { client.orion.set(client.orion.get(interaction.user.id).BPM, client.orion.get(interaction.user.id).BPM++) console.log(client.orion.get(interaction.user.id)) //console.log(client.orion) } } else return; //ping and topic cmds are used as placeholder for ban and kick if (interaction.commandName == 'topic' && General.SERVER.CHANNELS.LOGS !== "") { } else return; } client.on('interactionCreate', async interaction => { if (!interaction.isCommand()) return; orionCheck(interaction, adminMap); });
este es un código para cada vez que se ejecuta un comando, agrega 1 a su usuario específico en un mapa, que es para lo que está el mapa. el cliente.orion se establece en el mapa para que lo recuerde cada vez que se ejecuta el comando y hace que el mapa sea ejecutable globalmente. la declaración if está comprobando si el cliente.orion ya se hizo y si no está definido, lo hace. bastante simple. pero el problema es que, por alguna razón, al iniciar, ejecuta el comando. hace el cliente.orion, luego lo ejecuta nuevamente y hace la declaración else ya que ahora el cliente.orion ya existe y agrega uno a la matriz. pero cuando lo ejecuta por tercera vez, se queda en uno como se muestra
Esta no es una solución a su problema particular (pero tal vez pueda proporcionar algunas pistas sobre a qué me refería en los comentarios).
En un objeto Map, set toma dos parámetros, la clave y el valor.
Tienes esta línea en tu bloque else:
client.orion.set((interaction.user.id).BPM, client.orion.get(interaction.user.id).BPM++)
Tenga en cuenta que la "clave" no está definida porque (interaction.user.id).BPM
no existe.
Deberías tener esta línea en su lugar:
client.orion.set(interaction.user.id, client.orion.get(interaction.user.id).BPM++)
Pensé que era extraño cuando probé su código en ambos sentidos (como indefinido y como definido) y obtuve los mismos resultados. Pero lo que realmente sucede es que set()
no funciona cuando la clave que se le pasó no está definida. En cambio, el código en el parámetro de valor está funcionando (aunque set() no lo esté):
client.orion.get(interaction.user.id).BPM++
ADEMÁS:
Su parámetro de valor para set()
tiene un error lógico en el sentido de que se supone que es un objeto. Le estás pasando un número entero. No encontró los resultados inesperados que esto creará porque hasta ahora su set()
no funciona debido a la clave indefinida.