2017-07-23 7 views
1

donc je crée un bot en utilisant Node.JS/Discord.JS et j'ai une question.Discord <@!userid> vs <@userid>

Sur certains serveurs, lorsque vous mentionnez un utilisateur, il retourne dans la console <@!userid> et dans les autres, il renvoie <@userid>. Mon bot a un système de points/niveau simple, et il enregistre dans un fichier JSON comme <@!userid>, ainsi sur certains serveurs en essayant de regarder des points d'utilisateurs en les mentionnant fonctionnera, et sur d'autres pas.

Quelqu'un a-t-il une idée pour résoudre ce problème? J'ai essayé de trouver une réponse plusieurs fois, et je ne veux pas l'enregistrer deux fois, une fois comme <@!userid> puis <@userid>. Si c'est la seule façon de le réparer, alors je comprends.

Merci pour votre aide!

+0

Veuillez ajouter un exemple de code minimal qui reproduit l'erreur que vous tentez de résoudre. – MedAli

Répondre

2

Le point d'exclamation dans le <@!userID> signifie qu'ils ont un surnom défini dans ce serveur. L'utiliser sans le point d'exclamation est plus fiable car cela fonctionne n'importe où. En outre, vous devez enregistrer les utilisateurs avec leur identifiant, pas toute la mention (le "< @userid"). Parse les symboles supplémentaires en utilisant regex.

var user = "<@!123456789>" //Just assuming that's their user id. 
var userID = user.replace(/[<@!>]/g, ''); 

Qui nous donnerait 123456789. Leur identifiant d'utilisateur Bien sûr, vous pouvez facilement obtenir l'objet utilisateur (vous très probablement d'obtenir leur nom d'utilisateur) de deux façons, si elles sont dans le serveur où vous utilisez la commande, vous pouvez juste

var member = message.guild.member(userID); 

OU s'ils ne sont pas dans le serveur et que vous voulez toujours accéder à leur objet utilisateur, alors;

client.fetchUser(userID) 
    .then(user => { 
     //Do some stuff with the user object. 
    }, rejection => { 
     //Handle the error in case one happens (that is, it could not find the user.) 
    }); 

Vous pouvez AUSSI accéder simplement l'objet membre forment directement la balise (s'ils les tagués dans le message).

var member = message.mentions.members.first(); 

Et juste comme ça, sans regex vous pouvez obtenir l'objet membre complet. et enregistrer leur identifiant.

var memberID = member.id;