[PYTHON] Sogar ein Affe kann verstehen! Über Absichten in discord.py!

Was sind Absichten?

Intents ist eine neue Funktion in discord.py 1.5. Hiermit können Sie "Einige Ereignisse empfangen, nicht einige Ereignisse" auswählen. Sie können den Kommunikations- und Speicherbedarf reduzieren.

How To Use Es wird angewendet, indem es als Argument übergeben wird, wenn ein Objekt von "Client" oder "Bot" erstellt wird. ** Einige Absichten (Privieged Intents) sind jedoch begrenzt ** Um dies zu aktivieren, rufen Sie zusätzlich zum Schreiben des Codes das Entwicklerportal (https://discord.com/developers/applications/) auf, wählen Sie die Anwendung und dann die Registerkarte Bot aus (Token abrufen / zurücksetzen). Sie müssen es manuell aktivieren (wo Sie möchten). Klicken Sie auf die beiden Schaltflächen im Bild, um es zu aktivieren. (Im Bild bereits aktiviert) image.png

Die Erklärung zu Privieged Intents wird vom offiziellen Discord-Server #news von discord.py zitiert.

  • Anwesenheitsabsicht (oben): Erforderlich, um "Member.status", "Member.activity", "on_member_update" zu erhalten (nur für Status und Aktivität). Wenn gesetzt, ist "Präsenz = Wahr"

Hinweis: Bei Bots mit mehr als 100 Servern können privilegierte Absichten nur mit Discord-Authentifizierung verwendet werden. Wenn Ihr Bot bereits authentifiziert ist, wenden Sie sich bitte an Discord.

Nachdem wir die obigen Einstellungen vorgenommen haben, verwenden wir sie tatsächlich! Da "on_typing" selten verwendet wird, ist hier ein Beispiel dafür, wie "on_typing" nicht empfangen wird.

main.py


import discord
intents = discord.Intents.default()  #Erstellen Sie ein Standard-Intents-Objekt
intents.typing = False  #Erhalte keine Eingabe
client = discord.Client(intents=intents)
# discord.Bei Verwendung von ext
# from discord.ext import commands
# bot = commands.Bot(command_prefix="/", intents=intents)
# or
# super().__init__(command_prefix="/", intents=intents)

Die zweite Zeile, discord.Intents.default (), erstellt ein Standard-Intents-Objekt. Standardmäßig sind "Mitglieder" und "Präsenz" auf "Falsch" und die anderen auf "Wahr" eingestellt.

Anders als "default ()" gibt es eine Methode zum Erstellen eines Intents-Objekts mit "all ()" für alles "True" und "none ()" für alles "False". Informationen zu den Attributen von Intents beim manuellen Festlegen von "True" und "False" finden Sie unter [Referenz] von "discord.Intents" (https://discordpy.readthedocs.io/en/latest/api.html#discord.Intents ". )Bitte beziehen Sie sich auf.

Ja Ja Frage! Welche Absichten soll ich verwenden?

Setzen Sie je nach Person für kleine Bots (die weiterhin herkömmlichen Code verwenden und weniger als 100 Server haben) alle Absichten mit "intents = discord.Intents.all ()" auf "True" Kein Problem!

Die meisten Benutzer haben kein Problem mit der oben genannten Methode, aber ich denke, dass Benutzer, die große Bots betreiben, eine individuelle Beratung benötigen.

on_ready () entzündet sich nicht leicht! Warum?

Aufgrund von Änderungen in der Discord-API gibt es auch Änderungen beim Laden von Mitgliedern. Früher konnten 75 Server gleichzeitig angefordert werden, und nur der Server, dessen "Guild.large" "True" war (= 250 oder mehr Mitglieder), war ausreichend, jetzt ist er für alle Server erforderlich und 1 pro Anforderung. Sie können jetzt nur den Server anfordern. Dies führt zu einer etwa 75-fachen Verlangsamung.

Das Folgende ist ein Zitat aus der offiziellen Dokumentation zur Geschwindigkeitsüberprüfung.

Beispiel: Ein Bot, der zu 840 Servern gehört (von denen 95 Server mehr als 250 Personen gehören (Guild.large == True)).

Derzeit: ca. 60 Sekunden (75 Server, 20 Server) Intents.members == True und Intents.presences == False: Ungefähr 7 Minuten (840 Anfragen, Geschwindigkeitsbegrenzung 120 Server / Minute) Intents.members == True und Intents.presences == True: Ungefähr 100 Sekunden (95 Anfragen)

Offizielle Dokumentation vorstellen.

Geben Sie den Anforderungsmechanismus zurück

Erstens gibt es eine Möglichkeit, privilegierte Absichten sowohl für Präsenzen als auch für Servermitglieder zu aktivieren. Jetzt ist der Anforderungsmechanismus teilweise derselbe wie zuvor, sodass auch die Startgeschwindigkeit dieselbe ist wie zuvor.

Laden des Schichtelements

Wenn Sie als Nächstes das Argument "chunk_guilds_at_startup" von "Client" oder "Bot" auf "False" setzen, werden die Mitglieder beim Start nicht geladen, sodass der Start schneller ist. Verwenden Sie danach "Guild.cunk" usw. (falls erforderlich), um die Mitglieder des Servers abzurufen. Andere Erfassungsmethoden sind in Referenz beschrieben.

Diese Spezifikation gefällt mir nicht! Was soll ich machen?

Zu diesem Zeitpunkt ist die alte API noch verfügbar, sodass discord.py 1.4 verwendet werden kann, bis das v6-Gateway nicht mehr unterstützt wird. Es ist jedoch eine gute Idee, Ihren Code auf eine neue Methode für die Zukunft des Bots zu aktualisieren. Zum Downgrade

# Windows
py -3 -m pip install -U discord.py>=1.4, 1.5
# Linux Mac
python3 -m pip install -U "discord.py>=1.4,<1.5"

Ist möglich durch Ausführen im Terminal. Wir wissen jedoch nicht, wann das v6-Gateway die Unterstützung beenden wird. Wir empfehlen daher, dass Sie Ihren Code aktualisieren.

Wichtig: ** Nach dem 7. Oktober müssen Sie es im Entwicklerportal konfigurieren (wenn Sie es verwenden möchten), unabhängig von der Version von discord.py. ** ** **

Wenn Ihnen die Änderungen und Anweisungen der Discord-API wirklich nicht gefallen, können Sie sich auch an den Support wenden (https://support.discord.com/hc/ja/requests/new).

einpacken

Sie können die empfangenen Ereignisse einschränken, indem Sie Absichten festlegen. Die meisten Benutzer können "intent = discord.Intents.all ()" festlegen und beide Absichten im Entwicklerportal überprüfen.

Recommended Posts

Sogar ein Affe kann verstehen! Über Absichten in discord.py!
Einführung in Python, die auch Affen verstehen können (Teil 3)
Einführung in Python, die auch Affen verstehen können (Teil 1)
Einführung in Python, die auch Affen verstehen können (Teil 2)
Einführung in Word2Vec, die auch Katzen verstehen können
[Django] Über Benutzer, die für Vorlagen verwendet werden können