Ich habe einen Discord-Bot geschrieben und bei Bedarf auf Tutorials verwiesen, da ich neu darin bin, aber ich bin auf ein Problem gestoßen, das ich, obwohl es einfach klingt, scheinbar nicht lösen kann. Ich versuche, eine Bestenliste zu zeichnen, und für jede Position in der Bestenliste möchte ich, dass der Avatar des Benutzers in die Bestenliste eingezeichnet wird. Dazu möchte ich den Benutzer nur anhand seiner Benutzer-ID ermitteln können. Allerdings erledige ich das alles in einem einzigen Slash-Befehl. Hier ist ein sehr vereinfachtes Beispiel, um einen Kontext und/oder eine bessere Erklärung bereitzustellen:
const { SlashCommandBuilder, AttachmentBuilder } = require('discord.js'); // ... some functions and what not go here module.exports = { //... lines for setting up the command go here async execute(interaction){ const data = fetchData(); //A function that gets the whole list of data; did not put it in the codeblock to save on space since it's not necessary // ... a bunch of stuff, ordering my data, etc. data.forEach(async (userData, index) => { // And here begins my issue. The line below is just what I have attempted to do const target = interaction.guild.members.cache.get(userData.UserId); }); }; }
Ich habe ziemlich viel recherchiert und die einzige funktionierende Lösung, die ich gefunden habe (die Sie im Beispielcode oben sehen können), ist die Verwendung von const target = interaction.guild.members.cache.get("User_ID") ; Obwohl ich den Rückgabewert in der Konsole protokollieren kann, heißt es, dass das Ziel undefiniert ist, wenn ich versuche, etwas wie „target.user“ zu tun. Wenn es hilft, ja, ich beziehe Gildenmitglieder in meine Absicht mit ein.
如果你只想获取运行斜杠命令的用户的ID,你可以使用 interaction.user.id。
要通过ID获取用户,你可以运行以下代码:
//Inside the execute function of the slash command interaction.guild.members.cache.get("user_id").then(function(user){ //Do something with user }
你需要使用 members.fetch,因为它是异步的,所以你需要将你的 forEach 改为 for...of,因为 forEach 是同步的。
const { SlashCommandBuilder, AttachmentBuilder } = require('discord.js'); // ... some functions and what not go here module.exports = { //... lines for setting up the command go here async execute(interaction) { const data = fetchData(); //A function that gets the whole list of data; did not put it in the codeblock to save on space since it's not necessary // ... a bunch of stuff, ordering my data, etc. for (const userData of data) { const target = await interaction.guild.members.fetch(userData.UserId) } }; }