1
votes

Comment renvoyer le nom du propriétaire d'une guilde

Voici la partie de mon code où j'ai le problème:

user:
 User {
  id: '317669302549XXXXXX',
  username: 'Flicker',
  discriminator: 'XXXX',
  avatar: 'a_161cc6f5d0466f7afd9a73dc2eba159d',
  bot: false,
  lastMessageID: null,
  lastMessage: null },
 joinedTimestamp: 1539320429681,

Je m'attendais à ce qu'il retourne le nom du propriétaire, à la place il dit dans la console que c'est un message vide. J'ai lancé guild.owner avec console.log et apparemment, il affiche toutes les données de la guilde, les emojis, les identifiants des membres et à la fin, les détails de l'utilisateur du propriétaire, comment est-ce que je les affiche séparément?

Pour mémoire, c'est la dernière partie dont je pense avoir besoin:

const guild = client.guilds.get('500170876243935247');
message.channel.send(guild.owner);


0 commentaires

3 Réponses :


1
votes

Lorsque vous convertissez un utilisateur en chaîne, le La méthode User.toString () est automatiquement appelée: cela convertit l'objet User en une mention, comme @username . Mais si vous faites message.channel.send (User) , il n'appellera pas User.toString () et ainsi discord.js se retrouvera avec un objet qu'il ne pourra pas envoyer (exemple d'objet valide: message.channel.send ( RichEmbed ) ), et ainsi le message sera vide.

Pour éviter cela, vous pouvez essayer de remplacer la mention par quelque chose comme User.tag : avec cela vous évitez également d'être averti chaque fois que quelqu'un utilise cette commande.
Si cela ne vous dérange pas d'être averti, vous pouvez utiliser le premier si possible, sinon le second. Voici un exemple:

const guild = client.guilds.get('500170876243935247');
message.channel.send(message.guild.member(guild.owner) ? guild.owner.toString() : guild.owner.user.tag);
// if the user is in that guild it will mention him, otherwise it will use .tag


6 commentaires

User.toString () ne sera pratiquement jamais vide, il essaiera toujours de mentionner l'utilisateur, il suffit de faire message.channel.send (User) n'appellera pas < code> .toString () dessus et donc discord.js est confus et essaiera de convertir l'objet mais cela échoue et donc les erreurs de message avec empty_message


Faire comme ça n'appellera pas .toString () sur guild.owner


Ce sera, en effet: l'argument de message.channel.send () sera soit guild.owner (et donc .toString () être appelée automatiquement) ou guild.owner.tag (qui est déjà une chaîne).


Étant donné que message.channel.send () peut également prendre un tableau, il ne sera pas automatiquement .toString () l'entrée, exécutant le code, me donne un erreur de message vide l'appel de toString () est nécessaire, par exemple: message.channel.send (guild.owner.toString ()); même si vous n'êtes pas dans la guilde, elle enverra toujours un message au format <@ID> (voir i. imgur.com/GBlROmb.png )


Je l'ai essayé avec mon bot et j'ai obtenu les mêmes résultats, ça DEVRAIT être maintenant


J'ai déplacé la discussion vers ce chat



0
votes
client.on('message', msg => {
const thisguild  = msg.guild;   
const owner      = thisguild.owner.user.username;
}

0 commentaires

0
votes

Discordjs v11.5.1

Dans ces exemples, Guild est un espace réservé où vous obtenez la guilde. Cela peut être message.guild ou member.guild ou simplement guild selon l'événement. Ou, vous pouvez obtenir la guilde par ID (voir la section suivante) et l'utiliser aussi!

let guild = msg.guild.members.get('372452704297025537');
let admin = msg.guild.member(guild);
message.channel.send(admin.user)
.catch(err => console.error(err))

ou

// Get a Member by ID
message.guild.members.get("user ID here");
// Returns <Member>

source: Github

Ma façon de le faire en utilisant la documentation ci-dessus était:

// Get a User by ID
client.users.get("user id here");
// Returns <User>


0 commentaires