es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

discord auto rol cuando el estado coincide

He tratado diferentes cosas para hacer que esto funcione, pero no quiere funcionar.

Básicamente estoy intentando verificar el estado personalizado de alguien para una cosa específica, por ejemplo, si hay “.gg/test” en él y darles un rol.

Mi código:

client.on('presenceUpdate', async (oldPresence, newPresence) => {
  const role = newPresence.guild.roles.cache.get("927284722059595828");
  const member = newPresence.member;
  const activities = member.user.presence.activities[0];

  if (activities && (activities.state.includes(".gg/test") || activities.state.includes("discord.gg/test"))) {
    return newPresence.member.roles.add(role);
  } else {
    if (member.roles.cache.get(role.id)) {
      newPresence.member.roles.remove(role);
    }
  }
});

¿Alguien puede corregir el código al formato correcto y, si es posible, hacerlo usable en múltiples servidores con un comando? Gracias.

El error que obtengo:

TypeError: Cannot read properties of undefined (reading 'id')
    at Client.<anonymous> (/root/raegay2/boy.js:19:36)
    at Client.emit (node:events:390:28)
    at PresenceUpdateAction.handle (/root/raegay2/node_modules/discord.js/src/client/actions/PresenceUpdate.js:39:19)
    at Object.module.exports [as PRESENCE_UPDATE] (/root/raegay2/node_modules/discord.js/src/client/websocket/handlers/PRESENCE_UPDATE.js:4:33)
    at WebSocketManager.handlePacket (/root/raegay2/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (/root/raegay2/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (/root/raegay2/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
    at WebSocket.onMessage (/root/raegay2/node_modules/ws/lib/event-target.js:132:16)
    at WebSocket.emit (node:events:390:28)
    at Receiver.receiverOnMessage (/root/raegay2/node_modules/ws/lib/websocket.js:825:20)

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el error es causado al intentar acceder a una propiedad no definida. Específicamente, el mensaje de error indica que estás intentando leer la propiedad ‘id’ de algo que no está definido.

    Basándonos en el código, el problema parece estar en esta línea:

    const role = newPresence.guild.roles.cache.get("927284722059595828");
    

    Es probable que el gremio al que pertenece newPresence no tenga el rol con el ID especificado. Asegúrate de que el ID sea correcto y de que el rol exista en el gremio.

    Para hacer que este código sea utilizable en múltiples servidores con un comando, necesitarías agregar algún tipo de gestor de comandos que pueda recibir entradas de diferentes servidores y ejecutar el código adecuado. Puedes considerar utilizar una biblioteca como Discord.js Commando para ayudarte con esto.

Comments are closed.