Keines meiner discord.js-Gildenmitglieder-Ereignisse wird ausgegeben, meine Benutzer-Caches sind im Grunde leer und meine Funktionen laufen ab?

Lesezeit: 4 Minuten

Keines meiner discordjs Gildenmitglieder Ereignisse wird ausgegeben meine Benutzer Caches sind im Grunde
Löwin100

Mein Code funktioniert seit Wochen einwandfrei, aber einige Ereignisse und Funktionen funktionieren zufällig nicht mehr!

Erstens, meine guildMemberAdd, guildMemberRemoveund guildMemberUpdate Die Ereignisse hörten einfach auf, irgendetwas zu tun. Es werden keine Fehler angezeigt, und als ich meinen Code debuggte, stellte ich fest, dass das Ereignis nicht einmal ausgegeben wurde, als die entsprechende Aktion stattfand.

// const client = new Discord.Client();

client.on('guildMemberAdd', (member) => // not triggering!
 client.channels.cache.get('channel-id').send(`${member.tag} joined!`); // not sending!

Zweitens, wenn Sie versuchen, ein Mitglied aus dem zu bekommen GuildMemberManager Cache, es kehrt immer zurück undefined:

const member = message.guild.members.cache.get(targetID); // undefined

Als ich dann versuchte, jedes Mitglied im Mitglieder-Cache dieser Gilde anzuzeigen, zeigte es nur mich und meinen Bot anstelle der üblichen 100+ Mitglieder.

Dann habe ich versucht, jedes Mitglied in meiner Gilde mit abzurufen GuildMemberManager.fetch():

const members = await message.guild.members.fetch();

Aber ich habe diesen Fehler:

[GUILD_MEMBERS_TIMEOUT]: Mitglieder kamen nicht rechtzeitig an.

Auch hier bin ich sicher, dass meine Syntax korrekt ist, da sie seit einiger Zeit perfekt funktioniert und ich in letzter Zeit nichts aktualisiert habe, was sich auf diesen Code auswirken würde.

Keines meiner discordjs Gildenmitglieder Ereignisse wird ausgegeben meine Benutzer Caches sind im Grunde
Löwin100

🤖 Discord erzwingt jetzt privilegierte Absichten


Was sind Absichten?

Die Wartung einer zustandsbehafteten Anwendung kann schwierig sein, wenn es um die Datenmenge geht, die Sie verarbeiten sollen, insbesondere in großem Umfang. Gateway Intents sind ein System, das Ihnen hilft, diese Rechenlast zu verringern.

Mit Gateway-Intents können Sie auswählen, welche Ereignisse Sie „abonnieren“ möchten, sodass Sie keinen Speicherplatz für Ereignisse verbrauchen müssen, die Sie nicht verwenden. Diese Funktion wurde in discord.js in v12 eingeführt

Was sind privilegierte Absichten?

Einige Absichten werden aufgrund der sensiblen Natur der Daten als „privilegiert“ definiert. Diese Absichten sind:

  • GUILD_PRESENCES
  • GUILD_MEMBERS

Seit dem 27. Oktober sind diese Absichten standardmäßig deaktiviert.

Einige Probleme, mit denen Sie möglicherweise konfrontiert sind

  1. GUILD_PRESENCES

    • Mitglied und Benutzer Caches sind beim Start leer (oder sehr nahe daran).
    • Guild.memberCount Rücksendungen zählen ab fertig
    • Alle Veranstaltungen mit Presences nicht auslösen (presenceUpdate)
    • Etwas Presence Daten zurück null oder undefined
    • Alle GuildMembers erscheinen dem Bot als offline.
    • client.login() Zeitüberschreitung, wenn Sie die angegeben haben fetchAllMembers Option in Ihrer ClientOptions
  2. GUILD_MEMBERS

Wie aktiviere ich Absichten?

Durch die Discord-Entwicklerportal:

Zunächst müssen Sie die Absichten auf der Discord Developer-Website manuell aktivieren. Gehe zu Anwendungen, wählen Sie Ihre App aus und suchen Sie die Registerkarte “Bot” in der Seitenleiste. Dann können Sie nach unten scrollen, bis Sie Folgendes sehen:

Absichten

Wie im Screenshot gezeigt, muss Ihr Bot verifiziert werden, wenn er in mehr als 75 Gilden ist.

Wenn Ihr Bot verifiziert ist:

Sobald Ihr Bot verifiziert ist, können Sie die Absichtsschalter im Entwicklerportal nicht mehr manuell umschalten. Um den Whitelist-Zugriff auf einen zusätzlichen privilegierten Gateway-Intent für einen verifizierten Bot anzufordern, senden Sie bitte ein Ticket an unser Support-Team Hier! Stellen Sie sicher, dass Sie die ID Ihres Bots, die angeforderten Absichten, eine grundlegende Beschreibung Ihres Anwendungsfalls für die angeforderte Absicht und Screenshots oder Videos dieses Anwendungsfalls in Aktion (oder Code-Snippets, wenn nicht benutzerseitig!) enthalten.

Über das discord.js-Modul:

Sobald Sie eine/beide Absichten abgehakt haben, müssen Sie sie nur noch über discord.js aktivieren. Die discord.js Absichtsleitfaden ausführlich erklärt, wie das geht, aber ich werde es hier paraphrasieren.

Sie müssen diese Schritte nicht ausführen, wenn Sie jede Absicht möchten. Discord aktiviert standardmäßig alle Absichten (außer diesen beiden natürlich). Solange Sie beide Absichten im Entwicklerportal abgehakt haben, können Sie hier aufhören, wenn Sie keine anderen Absichten blockieren möchten. Wenn Sie dies tun, denken Sie daran, dass Absichten nur von discord.js v12+ unterstützt werden, sodass Sie möglicherweise ein Upgrade durchführen müssen.

Einer der ClientOptions (ClientOptions ist eine Typdefinition potenzieller Optionen, die beim Erstellen Ihres Clients übergeben werden müssen). ws (noch eine weitere Typdefinition potenzieller Websocket-Optionen). Darin finden Sie die intents Eigentum.

intents akzeptiert a IntentsResolvabledie eine Zeichenfolge oder ein Array von Zeichenfolgen einer oder mehrerer Absichten sein kann (z 'GUILD_PRESENCES'. Alle verfügbaren Absichten), ein Bitfeld (eine Zahl, die einer oder mehreren Absichten entspricht), eine Instanz der Intents Klasse.

Beispiele:

// using a string
const client = new Discord.Client({ ws: { intents: 'GUILD_PRESENCES' }});

// using an array
const client = new Discord.Client({ ws: { intents: ['GUILD_PRESENCES', 'GUILD_MEMBERS'] }});

// using a bitfield value
const client = new Discord.Client({ ws: { intents: 32509 }));

// using Intents class
const client = new Discord.Client({ ws: { intents: Discord.Intents.PRIVILEDGED }});
const client = new Discord.Client({ ws: { intents: new Discord.Intents(Discord.Intents.ALL) }});

Ressourcen:


TL;DR

Um dieses Problem zu beheben, gehen Sie zu:

Discord-Entwicklerportal > Anwendungen > Ihre Anwendung > Bot > Beide/beide Absicht(en) prüfen (Screenshot oben)

970930cookie-checkKeines meiner discord.js-Gildenmitglieder-Ereignisse wird ausgegeben, meine Benutzer-Caches sind im Grunde leer und meine Funktionen laufen ab?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy