[PYTHON] Même un singe peut comprendre! À propos des intentions dans discord.py!

Que sont les intentions?

Intents est une nouvelle fonctionnalité de discord.py 1.5. Avec cela, vous pouvez sélectionner "Recevoir certains événements, pas certains événements". Vous pouvez réduire la quantité de communication et l'utilisation de la mémoire.

How To Use Il est appliqué en le passant comme argument lors de la création d'un objet de "Client" ou "Bot". Cependant, ** Certaines intentions (intentions privilégiées) sont limitées ** Pour activer cela, en plus d'écrire dans le code, accédez au portail des développeurs (https://discord.com/developers/applications/), sélectionnez l'application puis l'onglet Bot (get / reset tokens) Vous devez l'activer manuellement (là où vous le souhaitez). Cliquez sur les deux boutons de l'image pour l'activer. (Déjà activé dans l'image) image.png

L'explication sur Privieged Intents est citée sur le serveur Discord officiel de discord.py #news.

--Presence Intent (ci-dessus): Requis pour recevoir Member.status, Member.activity, ʻon_member_update(uniquement pour le statut et l'activité). Lorsqu'il est défini,presences = True --Server Members Intent (ci-dessous): Requis pour recevoir des événements commençant par ʻon_member et ʻon_user_update. Il est également requis pour Guild.get_memberetc. Lorsqu'il est défini,members = True`

Remarque: pour les robots avec plus de 100 serveurs, les intentions privilégiées ne peuvent être utilisées qu'avec l'authentification Discord. Si votre bot est déjà authentifié, veuillez contacter Discord.

Après avoir défini les paramètres ci-dessus, utilisons-le réellement! Puisque ʻon_typing est rarement utilisé, voici un exemple de non réception de ʻon_typing.

main.py


import discord
intents = discord.Intents.default()  #Créer un objet Intents par défaut
intents.typing = False  #Ne recevez pas de saisie
client = discord.Client(intents=intents)
# discord.Lors de l'utilisation d'ext
# from discord.ext import commands
# bot = commands.Bot(command_prefix="/", intents=intents)
# or
# super().__init__(command_prefix="/", intents=intents)

La deuxième ligne, discord.Intents.default (), crée un objet Intents par défaut. Par défaut, «membres» et «présences» sont définis sur «False» et les autres sur «True».

Autre que default (), il existe une méthode pour créer un objet Intents avec ʻall () qui est tout True et none () qui est tout False. Pour les attributs des intentions lors de la définition manuelle de True`` False, consultez la [Référence] de discord.Intents` (https://discordpy.readthedocs.io/ja/latest/api.html#discord.Intents ". )Prière de se référer à.

Oui Oui question! Quelles intentions dois-je utiliser?

Selon la personne, pour les petits bots (continuant à utiliser le code traditionnel et ayant moins de 100 serveurs), définissez toutes les intentions sur True ʻintents = discord.Intents.all ()` Aucun problème!

La plupart des utilisateurs n'ont aucun problème avec la méthode ci-dessus, mais je pense que les utilisateurs qui exploitent des robots à grande échelle ont besoin d'une consultation individuelle.

on_ready () ne s'enflamme pas facilement! Pourquoi?

En raison des modifications apportées à l'API Discord, il y a également des changements dans le chargement des membres. Auparavant, 75 serveurs pouvaient être demandés en même temps, et seul le serveur dont Guild.large était True (= 250 membres ou plus) était requis, mais maintenant il est requis pour tous les serveurs, et 1 par demande. Vous ne pouvez désormais demander que le serveur. Cela provoque un ralentissement d'environ 75 fois.

Ce qui suit est une citation de la documentation officielle pour la vérification de la vitesse.

Exemple: un bot appartenant à 840 serveurs (dont 95 serveurs appartiennent à plus de 250 personnes (Guild.large == True)).

Actuellement: environ 60 secondes (75 serveurs, 20 serveurs) ʻIntents.members == True et Intents.presences == False: environ 7 minutes (840 requêtes, limite de vitesse 120 serveurs / minute) ʻIntents.members == True et Intents.presences == True: environ 100 secondes (95 requêtes)

Document officiel Présenter.

Renvoyer le mécanisme de demande

Tout d'abord, il existe un moyen d'activer les intentions privilégiées pour les présences et les membres du serveur. Maintenant, le mécanisme de demande est en partie le même qu'avant, donc la vitesse de démarrage est également la même qu'avant.

Chargement des membres de décalage

Ensuite, si vous définissez l'argument chunk_guilds_at_startup de Client ou Bot sur False, les membres ne seront pas chargés au début, donc le démarrage sera plus rapide. Après cela, utilisez Guild.cunk etc. (si nécessaire) pour obtenir les membres du serveur. D'autres méthodes d'acquisition sont décrites dans Référence.

Je n'aime pas cette spécification! Que devrais-je faire?

À ce stade, l'ancienne API est toujours disponible, donc discord.py 1.4 peut être utilisé jusqu'à la fin du support de la passerelle v6, mais c'est une bonne idée de mettre à jour votre code avec une nouvelle méthode pour l'avenir du bot. Pour rétrograder

# 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"

Est possible en exécutant dans le terminal. Cependant, nous ne savons pas quand la passerelle v6 mettra fin au support, nous vous recommandons donc de mettre à jour votre code.

Important: ** Après le 7 octobre, vous devrez le configurer dans le portail des développeurs (si vous souhaitez l'utiliser) quelle que soit la version de discord.py. ** **

Si vous n'aimez vraiment pas les changements et les instructions de l'API Discord, vous pouvez également contacter le support (https://support.discord.com/hc/ja/requests/new).

emballer

Vous pouvez limiter les événements que vous recevez en définissant des intentions. La plupart des utilisateurs peuvent définir ʻintent = discord.Intents.all () `et vérifier les deux intentions dans le portail des développeurs.

Recommended Posts

Même un singe peut comprendre! À propos des intentions dans discord.py!
Introduction à Python que même les singes peuvent comprendre (partie 3)
Introduction à Python que même les singes peuvent comprendre (partie 1)
Introduction à Python que même les singes peuvent comprendre (partie 2)
Introduction à Word2Vec que même les chats peuvent comprendre
[Django] À propos des utilisateurs pouvant être utilisés sur un modèle