guild.name, member.roles ou message.channel répondent immédiatement, sans demander à Discord. Vous n’avez rien à configurer et rien à nettoyer. Il ne se souvient que de ce qu’utilisent vos fichiers, ce que recommande Discord : comme les intents, c’est déduit de votre projet.
Tout vit dans la mémoire du processus qui fait tourner votre bot. Rien n’est écrit sur le disque, et il n’y a aucune base de données à installer.
Ce qui est gardé
« Vu » veut dire que Discord vient d’envoyer ce membre : il a écrit un message, utilisé une commande, est arrivé ou a changé. Un membre vu à nouveau devient le plus récent ; quand la limite est atteinte, celui vu il y a le plus longtemps laisse sa place.
Les nombres de ce tableau ne sont pas un réglage : ils suivent vos fichiers. Rien n’est gardé pour ce qu’aucun fichier n’utilise. Enregistrer un fichier dans
chapterjs dev applique le changement immédiatement.Ce que cela veut dire pour votre code
Rien ne dépend du fait qu’un membre soit en mémoire. Ce qui vient avec un événement est toujours là : l’auteur d’un message, qui a utilisé une commande, le membre qui est arrivé, le salon où cela s’est passé. Votre fonction les reçoit quoi que le bot garde en mémoire, et les garde pendant qu’elle tourne.src/events/hello.ts
guild.members est ce que sait le bot, pas tout le monde. Pour obtenir un membre précis, demandez-le : fetchMember() répond depuis la mémoire du bot quand il le peut, et demande à Discord sinon.
src/commands/joined.ts
message.before dans messageDelete est null puisque le bot ne garde aucun message.
Comment la mémoire est libérée
Ce dont le bot se souvient est borné par serveur, mais pas au total : un bot dans beaucoup de serveurs peut quand même remplir la mémoire de son processus. Avant que cela n’arrive, le bot se souvient de moins de choses de lui-même. Il regarde sa mémoire toutes les 30 secondes :1
La mémoire reste au-dessus de 80 % : le bot se souvient de moitié moins
Une seule mesure élevée ne suffit pas : Node libère de la mémoire tout seul quand elle se remplit, donc seul un niveau qui reste élevé, sur deux mesures de suite, veut dire que quelque chose doit partir. Le bot divise alors ses limites par deux : 50 membres par serveur au lieu de 100, et la moitié des utilisateurs qu’il connaît. Ceux qu’il n’avait pas vus depuis le plus longtemps partent. Il vous le dit :Si la mémoire est toujours élevée 30 secondes plus tard, il divise à nouveau par deux : 25, 12, 6… jusqu’à 0. Les serveurs, salons et rôles ne sont jamais touchés : c’est ce qui garde tout le reste exact.
2
Entre 50 % et 80 % : rien ne bouge
Les limites ne montent ni ne descendent à chaque mesure.
3
La mémoire reste sous 50 % : le bot se souvient de plus à nouveau
Après deux mesures de suite sous 50 %, les membres par serveur remontent pas à pas (deux fois plus à chaque mesure, jusqu’à ce dont vos fichiers ont besoin) et les utilisateurs d’un coup. On vous prévient quand tout est revenu :
4
Plus rien à céder : le bot vous demande
C’est seulement quand ses limites sont déjà à zéro et que la mémoire est toujours au-dessus de 80 % que le bot demande quelque chose. Il le dit une fois, jusqu’à ce que la mémoire ne soit plus pleine :
- Peu (comme les 35 MB ci-dessus) : la mémoire n’est pas utilisée par ce dont le bot se souvient. Cherchez dans votre propre code quelque chose qui ne fait que grandir, comme une liste ou une
Mapà laquelle vous ajoutez sans jamais la vider. - Beaucoup, et la mémoire est toujours pleine : votre bot est gros.
NODE_OPTIONS=--max-old-space-size=4096lui laisse utiliser 4 Go, si votre machine les a.
Quoi que le bot garde en mémoire, votre code fonctionne de la même façon : ce qui vient avec un événement est toujours là. Se souvenir de moins veut seulement dire que
guild.members contient moins de membres.Gros bots
Un gros bot tourne sur plusieurs processus. Chacun a sa propre mémoire : il se souvient des serveurs qu’il fait tourner, et s’occupe de sa mémoire comme décrit ici.Événements
Ce que reçoit votre fonction, et ce qui ne manque jamais.
chapterjs start
Faire tourner votre bot pour tout le monde, sur un ou plusieurs processus.