AttributeError: 'NoneType' object has no attribute 'send' discord.py

Résolu
Bonjour,

Je suis en train de coder un bot discord.
Quand j'ai commencé, pour envoyer des messages depuis la fonction
async def on_raw_reaction_add(self, payload):
ou depuis une task créer par moi même, j'utilisais
await self.get_user(id).send("Message")
. Certains jours, cette fonction en marchais pas, mais depuis une semaine, ça ne marche plus du tout et me renvoie l'erreur:
AttributeError: 'NoneType' object has no attribute 'send'


Je comprend que cette erreur viens du fait que self.get_user(id) renvoie un objet de type NoneType mais je comprend pas pourquoi il le fait. Je suis sûr que l'id est bon car ça marchait il y a quelques temps. J'ai rechercher partout et certaines personnes avait en effet eu la même erreur que moi (https://stackoverflow.com/questions/56914557/nonetype-object-has-no-attribute-send-when-work-with-discord-for-python et https://stackoverflow.com/questions/51867193/attributeerror-nonetype-object-has-no-attribute-send mais les réponses étaient d'une part très flou, et d'autre part en anglais.

Pourriez vous m'éclaircir?
Merci d'avance

Configuration: Linux / Firefox 89.0

16 réponses

Résumé de la discussion

Un développeur de bot Discord rencontre une erreur AttributeError: 'NoneType' object has no attribute 'send' lorsqu'il utilise on_raw_reaction_add et self.get_user(payload.user_id) pour envoyer un message, et self.get_user renvoie None. Plusieurs explications évoquées incluent une éventuelle modification de la version de discord.py, le fait que get_user retourne None si l'objet n'est pas en cache, et la nécessité de configurer les intents. D'autres corrections suggèrent de récupérer l'utilisateur via payload.user_id avec fetch_user ou d'utiliser des intents adéquats et d'activer l'intention 'guilds' et 'members' côté bot et serveur. Enfin, certains cas exigent de recourir à fetch_user pour obtenir l'objet utilisateur à partir de payload.user_id, plutôt que de s'appuyer sur le cache, et d'ajuster les intents en conséquence.

Bobot (l’IA à votre service)
  1. Contributeur
    bonjour,
    difficile sans voir l'ensemble du code.
    0
    1. Bonjour,

      Si je n'ai pas mis le code, c'est qu'il est beaucoup trop long (+ de 5 000 lignes). Prenons un exemple de ce qui ne marche pas pour moi:
      import discord
      import random
      import time
      import sqlite3
      
      class Bot(discord.Client):
          def __init__(self):
              super().__init__()
      
          async def on_ready(self):
              print("--------------")
              print("-Logged in as-")
              print(self.user.name)
              print(self.user.id)
              print("--------------")
      
      
          async def on_message(self, message):
              if self.user == message.author:
                  return
      
              await message.add_reaction("\u2705")#On rajoute une réaction a chaque message posté
      
          async def on_raw_reaction_add(self, payload):
              if self.user.id == payload.user_id:
                  return
      
              await self.get_user(payload.user_id).send("Test")#Envoie d'un message à chaque réactions postés
      
      if __name__ == "__main__":
          bot = Bot()
          bot.run("token")
      


      Sur discord, si je fait un message la réaction se met bien:


      Mais quand je clic sur la réaction:
      Ignoring exception in on_raw_reaction_add
      Traceback (most recent call last):
      File "/home/lancelot/.local/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
      await coro(*args, **kwargs)
      File "exFormum.py", line 28, in on_raw_reaction_add
      await self.get_user(payload.user_id).send("Test")#Envoie d'un message à chaque réactions postés
      AttributeError: 'NoneType' object has no attribute 'send'


      Voila. Je sais que cela viens du faite que
      self.get_user(payload.user_id)
      ne marche pas et renvoie None mais je ne comprend pas pourquoi il fait cela.

      Merci d'avoir lu mon post,
      Ymmj
      0
      1. Contributeur
        quelle version de discord.py utilises-tu? est-il possible qu'elle ait changé récemment?
        0
    2. Bonjour,

      En faisant
      pip list
      , j’obtiens, à la ligne de discord.py et discord:
      discord                   1.0.1               
      discord.py 1.7.2


      Merci d'avoir lu mon post,
      Ymmj
      0
      1. Contributeur
        est-il possible que la version de discord.py ait changé récemment?
        0
    3. J'avais déjà eu ce problème au part avant, mais quand j'attendais plusieurs jours et sa remarchait, comme par magie. Je ne sais pas si la version de discord.py à changé, mais au vu de ce que je viens de dire, je ne penses pas que ce soit ça le problème.
      0
      1. Contributeur
        oups, magie et problème intermittent!

        peut-être adapter le programme pour tester la condition et continuer sans envoyer dans le cas où get_user() etourne None?
        0
    4. Bonjour,

      Le problème, c'est que depuis une semaine et demi, tout le temps, et à chaque fois que j'appelle
      self.get_user()
      , il me renvoie
      None
      . Cela fait que je ne peux plus envoyer de messages si je n'ai que l'id et pas l'objet de type discord.Member.

      Merci d'avoir lu mon post,
      Ymmj
      0
      1. Contributeur
        je vois que certains recommandent d'utiliser intents pour donner au programme les privilèges nécessaires. il semble que les programmes n'obtiennent plus automatiquement tous les privilèges configurés.
        deux exemples:
        intents = discord.Intents.default()
        intents.members=True
        client = discord.Client(intents=intents)

        intents = discord.Intents().all()
        client = commands.Bot(command_prefix=',', intents=intents)

        je ne vois pas en quoi cela s'applique pour un problème intermittent.
        0
    5. Bonjour,
      Si j'esseye d'exécuter ce code:
      import discord
      import random
      import time
      import sqlite3
      
      intents = discord.Intents.default()
      intents.members=True
      client = discord.Client(intents=intents)
      
      class Bot(discord.Client):
          def __init__(self):
              super().__init__()
      
          async def on_ready(self):
              print("--------------")
              print("-Logged in as-")
              print(self.user.name)
              print(self.user.id)
              print("--------------")
      
      
          async def on_message(self, message):
              if self.user == message.author:
                  return
      
              await message.add_reaction("\u2705")#On rajoute une réaction a chaque message posté
      
          async def on_raw_reaction_add(self, payload):
              if self.user.id == payload.user_id:
                  return
      
              await self.get_user(payload.user_id).send("Test")#Envoie d'un message à chaque réactions postés
      
      if __name__ == "__main__":
          bot = Bot()
          bot.run("token")
      

      J'obtient toujours la même erreur quand je clique sur une réaction:
      Ignoring exception in on_raw_reaction_add
      Traceback (most recent call last):
      File "/home/lancelot/.local/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
      await coro(*args, **kwargs)
      File "exFormum.py", line 32, in on_raw_reaction_add
      await self.get_user(payload.user_id).send("Test")#Envoie d'un message à chaque réactions postés
      AttributeError: 'NoneType' object has no attribute 'send'

      Si j'exécute ce code:
      import discord
      import random
      import time
      import sqlite3
      
      intents = discord.Intents().all()
      client = commands.Bot(command_prefix=',', intents=intents)
      
      class Bot(discord.Client):
          def __init__(self):
              super().__init__()
      
          async def on_ready(self):
              print("--------------")
              print("-Logged in as-")
              print(self.user.name)
              print(self.user.id)
              print("--------------")
      
      
          async def on_message(self, message):
              if self.user == message.author:
                  return
      
              await message.add_reaction("\u2705")#On rajoute une réaction a chaque message posté
      
          async def on_raw_reaction_add(self, payload):
              if self.user.id == payload.user_id:
                  return
      
              await self.get_user(payload.user_id).send("Test")#Envoie d'un message à chaque réactions postés
      
      if __name__ == "__main__":
          bot = Bot()
          bot.run("token")
      

      J'obtiens dés le début l'erreur:
      Traceback (most recent call last):
      File "exFormum.py", line 7, in <module>
      client = commands.Bot(command_prefix=',', intents=intents)
      NameError: name 'commands' is not defined
      0
      1. Contributeur
        et en remplaçant default par all dans le premier essai?
        0
      2. @yg_beToujours la même erreur quand je fait:
        import discord
        import random
        import time
        import sqlite3
        
        intents = discord.Intents.all()
        intents.members=True
        client = discord.Client(intents=intents)
        
        class Bot(discord.Client):
            def __init__(self):
                super().__init__()
        
            async def on_ready(self):
                print("--------------")
                print("-Logged in as-")
                print(self.user.name)
                print(self.user.id)
                print("--------------")
        
        
            async def on_message(self, message):
                if self.user == message.author:
                    return
        
                await message.add_reaction("\u2705")#On rajoute une réaction a chaque message posté
        
            async def on_raw_reaction_add(self, payload):
                if self.user.id == payload.user_id:
                    return
        
                await self.get_user(payload.user_id).send("Test")#Envoie d'un message à chaque réactions postés
        
        if __name__ == "__main__":
            bot = Bot()
            bot.run("token")
        
        
        0
    6. Bonjour.

      Le problème avec cette erreur :

      Ignoring exception in on_raw_reaction_add
      Traceback (most recent call last):
        File "/home/lancelot/.local/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
          await coro(*args, **kwargs)
        File "exFormum.py", line 32, in on_raw_reaction_add
          await self.get_user(payload.user_id).send("Test")#Envoie d'un message à chaque réactions postés
      AttributeError: 'NoneType' object has no attribute 'send'


      Vient d'ici non ?

      async def on_raw_reaction_add(self, payload):
              if self.user.id == payload.user_id:
                  return


      Tu retournes None si c'est toi-même qui « clique sur une réaction », je ne sais même pas ce que c'est, et la flemme d'aller chercher l'info sur leur site.
      Et de toute façon elle retourne aussi None si ce n'est pas le cas... Donc en l'état elle retourne toujours None !

      Maintenant, cette fonction doit renvoyer quelque chose de spécifique non ? Faut potasser leur doc ou tuto pour avoir des exemples à mon avis.
      0
      1. Non,
        if self.user.id == payload.user_id:
           return
        

        permet juste de stopper l'exécution de la fonction si c'est le bot qui as mis une réaction pour pas créer de boucles gênantes. J'ai vérifié, même en enlevant ces lignes, sa ne marche pas. De plus, ces lignes ne sont as dans la fonction
        self.get_user
        . Elle ne devrai donc pas interférer dans ce que
        self.get_user
        renvoie.
        0
    7. Ah oui, je n'avais pas bien fait attention qu'il y avait quelque chose à la suite dans cette fonction...

      Si
      self.get_user(payload.user_id)
      retourne None, faut déjà regarder ce que vaut payload.user_id, et si ok, pourquoi n'est-il pas référencé dans Client ? Déjà de ce point de vue, y a un truc qui me chiffonne, mais n'y connaissant rien en tout ce truc discord, c'est peut-être logique.

      Les questions qui sont à poser c'est :
      - Qu'est-ce que le Client ?
      - Que représente cet objet payload ?
      - Y a-t-il une quelconque relation entre les 2 ?
      0
      1. Voila un exemple de code qui ne marche pas:
        import random
        import time
        import discord
        import sqlite3
        
        intents = discord.Intents.all()
        intents.members=True
        client = discord.Client(intents=intents)
        
        class Bot(discord.Client):
            def __init__(self):
                super().__init__()
        
            async def on_ready(self):
                print("--------------")
                print("-Logged in as-")
                print(self.user.name)
                print(self.user.id)
                print("--------------")
        
        
            async def on_message(self, message):
                if self.user == message.author:
                    return
        
                await message.add_reaction("\u2705")#On rajoute une réaction a chaque message posté
        
        
            async def on_raw_reaction_add(self, payload):
                await self.get_user(payload.user_id).send("Test")#Envoie d'un message à chaque réactions postés
        
        if __name__ == "__main__":
            bot = Bot()
            bot.run("TOKEN")
        

        - Qu'est-ce que le Client : Comme tu peux le voir, je n'utilise nul part Client à part pour faire hériter ma class Bot d'elle.

        Que représente cet objet payload : Je ne sais moi même pas totalement comment ça marche, mais ce qui faut savoir, c'est que la fonction
        async def on_raw_reaction_add(self, payload):
        est appelé à chaque fois qu'une réaction est ajouté sur discord.
        Dans cette fonction, on a le droit d'utiliser payload dont certains de ses attributs sont très utiles. Par exemple,
        payload.user_id
        est l'id de l'utilisateur qui a rajouté la réaction. La fonction
        self.get_user(payload.user_id)
        devrai donc renvoyer un objet de type
        discord.Member
        qui serai l'utilisateur qui a envoyé la réaction. Ensuite, la métode send des objets
        discord.Member
        devrai lui envoyer un message.
        Mais
        self.get_user(payload.user_id)
        renvoie None.
        0
      2. @YmmjOk, si on regarde la doc de Client : https://discordpy.readthedocs.io/en/stable/api.html#discord.Client.get_user, il est bien stipulé que la fonction retourne None si non référencé.
        Tu peux même t'en assurer en regardant ce que contient users https://discordpy.readthedocs.io/en/stable/api.html#discord.Client.users

        on_raw_reaction_add est donc une fonction de callback, et payload est un objet on_raw_reaction_add https://discordpy.readthedocs.io/en/stable/api.html#discord.RawReactionActionEvent , maintenant pourquoi payload.user_id est inconnu au bataillon dans ta classe Client, c'est là qu'il faut chercher.

        En testant les exemples du github, celui-ci :
        https://github.com/Rapptz/discord.py/blob/v1.7.2/examples/reaction_roles.py , cela fonctionne ?

        Je ne peux plus t'aider, car pour tester, faudrait créer un compte et tout le tintouin, et pas vraiment envie.
        Il faudrait trouver un script simple et fonctionnel sur internet, et de greffer ton code dessus.
        0
      3. @Grimouare
        # This example requires the 'members' privileged intents
        
        import discord
        
        class MyClient(discord.Client):
            def __init__(self, *args, **kwargs):
                super().__init__(*args, **kwargs)
        
                self.role_message_id = 0 # ID of the message that can be reacted to to add/remove a role.
                self.emoji_to_role = {
                    discord.PartialEmoji(name='????'): 0, # ID of the role associated with unicode emoji '????'.
                    discord.PartialEmoji(name='????'): 0, # ID of the role associated with unicode emoji '????'.
                    discord.PartialEmoji(name='green', id=0): 0, # ID of the role associated with a partial emoji's ID.
                }
        
            async def on_raw_reaction_add(self, payload: discord.RawReactionActionEvent):
                """Gives a role based on a reaction emoji."""
                # Make sure that the message the user is reacting to is the one we care about.
                if payload.message_id != self.role_message_id:
                    return
        
                guild = self.get_guild(payload.guild_id)
                if guild is None:
                    # Check if we're still in the guild and it's cached.
                    return
        
                try:
                    role_id = self.emoji_to_role[payload.emoji]
                except KeyError:
                    # If the emoji isn't the one we care about then exit as well.
                    return
        
                role = guild.get_role(role_id)
                if role is None:
                    # Make sure the role still exists and is valid.
                    return
        
                try:
                    # Finally, add the role.
                    await payload.member.add_roles(role)
                except discord.HTTPException:
                    # If we want to do something in case of errors we'd do it here.
                    pass
        
            async def on_raw_reaction_remove(self, payload: discord.RawReactionActionEvent):
                """Removes a role based on a reaction emoji."""
                # Make sure that the message the user is reacting to is the one we care about.
                if payload.message_id != self.role_message_id:
                    return
        
                guild = self.get_guild(payload.guild_id)
                if guild is None:
                    # Check if we're still in the guild and it's cached.
                    return
        
                try:
                    role_id = self.emoji_to_role[payload.emoji]
                except KeyError:
                    # If the emoji isn't the one we care about then exit as well.
                    return
        
                role = guild.get_role(role_id)
                if role is None:
                    # Make sure the role still exists and is valid.
                    return
        
                # The payload for `on_raw_reaction_remove` does not provide `.member`
                # so we must get the member ourselves from the payload's `.user_id`.
                member = guild.get_member(payload.user_id)
                if member is None:
                    # Make sure the member still exists and is valid.
                    return
        
                try:
                    # Finally, remove the role.
                    await member.remove_roles(role)
                except discord.HTTPException:
                    # If we want to do something in case of errors we'd do it here.
                    pass
        
        intents = discord.Intents.default()
        intents.members = True
        
        client = MyClient(intents=intents)
        client.run('token')
        

        Cette exemple ne marche pas et renvoie l'erreur:
        Traceback (most recent call last):
        File "/home/lancelot/Documents/Ceci, est le projet de ma vie/botAventurePrin.py", line 5015, in <module>
        bot.run(os.getenv("TOKEN"))
        File "/home/lancelot/.local/lib/python3.8/site-packages/discord/client.py", line 723, in run
        return future.result()
        File "/home/lancelot/.local/lib/python3.8/site-packages/discord/client.py", line 702, in runner
        await self.start(*args, **kwargs)
        File "/home/lancelot/.local/lib/python3.8/site-packages/discord/client.py", line 665, in start
        await self.login(*args, bot=bot)
        File "/home/lancelot/.local/lib/python3.8/site-packages/discord/client.py", line 511, in login
        await self.http.static_login(token.strip(), bot=bot)
        AttributeError: 'NoneType' object has no attribute 'strip'
        0
    8. Bonjour,

      Je viens de me rendre compte que si je print
      self.users
      , cela renvoie seulement
      [<ClientUser id=821725411062317067 name="Ceci, est l'aventure de ta vie!" discriminator='4457' bot=True verified=True mfa_enabled=False>]
      . Tout les autres utilisateurs ne sont pas détectés. Cela pourrait-t-il venir de la configuration or code du bot(sur le discord develloper portal)?
      0
      1. Contributeur
        tu as bien donné les privilèges nécessaires au bot?
        0
      2. @yg_beLe bot à en effet toutes les permissions grâce à son rôle.
        0
    9. Bonjour,

      Quand j'exécute ce code que grimourae m'a donné:
      # This example requires the 'members' privileged intents
      import dotenv
      import os
      from dotenv import load_dotenv
      import discord
      
      class MyClient(discord.Client):
          def __init__(self, *args, **kwargs):
              super().__init__(*args, **kwargs)
      
              self.role_message_id = 0 # ID of the message that can be reacted to to add/remove a role.
              self.emoji_to_role = {
                  discord.PartialEmoji(name='????'): 0, # ID of the role associated with unicode emoji '????'.
                  discord.PartialEmoji(name='????'): 0, # ID of the role associated with unicode emoji '????'.
                  discord.PartialEmoji(name='green', id=0): 0, # ID of the role associated with a partial emoji's ID.
              }
      
          async def on_raw_reaction_add(self, payload: discord.RawReactionActionEvent):
              """Gives a role based on a reaction emoji."""
              # Make sure that the message the user is reacting to is the one we care about.
              if payload.message_id != self.role_message_id:
                  return
      
              guild = self.get_guild(payload.guild_id)
              if guild is None:
                  # Check if we're still in the guild and it's cached.
                  return
      
              try:
                  role_id = self.emoji_to_role[payload.emoji]
              except KeyError:
                  # If the emoji isn't the one we care about then exit as well.
                  return
      
              role = guild.get_role(role_id)
              if role is None:
                  # Make sure the role still exists and is valid.
                  return
      
              try:
                  # Finally, add the role.
                  await payload.member.add_roles(role)
              except discord.HTTPException:
                  # If we want to do something in case of errors we'd do it here.
                  pass
      
          async def on_raw_reaction_remove(self, payload: discord.RawReactionActionEvent):
              """Removes a role based on a reaction emoji."""
              # Make sure that the message the user is reacting to is the one we care about.
              if payload.message_id != self.role_message_id:
                  return
      
              guild = self.get_guild(payload.guild_id)
              if guild is None:
                  # Check if we're still in the guild and it's cached.
                  return
      
              try:
                  role_id = self.emoji_to_role[payload.emoji]
              except KeyError:
                  # If the emoji isn't the one we care about then exit as well.
                  return
      
              role = guild.get_role(role_id)
              if role is None:
                  # Make sure the role still exists and is valid.
                  return
      
              # The payload for `on_raw_reaction_remove` does not provide `.member`
              # so we must get the member ourselves from the payload's `.user_id`.
              member = guild.get_member(payload.user_id)
              if member is None:
                  # Make sure the member still exists and is valid.
                  return
      
              try:
                  # Finally, remove the role.
                  await member.remove_roles(role)
              except discord.HTTPException:
                  # If we want to do something in case of errors we'd do it here.
                  pass
      
      intents = discord.Intents.default()
      intents.members = True
      
      client = MyClient(intents=intents)
      load_dotenv(dotenv_path = "config")
      client.run(os.getenv("TOKEN"))
      


      Il n'y a plus d'erreurs comme au début mais il tourne dans le vide sans rien afficher même si je met une réaction sur discord. Avant, il faisait systématiquement un erreur. Pourtant, à part le système pour que le token ne soit pas visible, je n'ai quasiment rien changé. Je ne comprends rien à ce qui se passe!
      Pouriez vous m'aider?
      0
      1. Bonsoir.

        Le problème de ce code est qu'il y a beaucoup de return sans rien indiquer d'autres, donc impossible de savoir ce qui ne va pas.

        Il faudrait ajouter des print juste avant chacun de ces return et pass afin d'avoir des indices.
        0
      2. erreur...
        0
    10. Je penses que le problème viens non pas du code, mais des configurations de mon bot, car, on n'as vu avant (en printant
      self.users
      ) qu'il ne détectait que lui. Le problème doit donc venir du discord develloper portal ou de discord directement. De plus, il y a quelque temps, le code marchait (le
      await self.get_user(payload.user_id).send("message")
      ). Je penses donc que c'est discord qui a changé quelque chose aux bot eux même et que le problème ne vient pas de discord.py.
      0
      1. Contributeur
        Reste que le code est excessivement opaque.
        0
      2. Bonjour.

        Il fallait le dire depuis le départ que ton code fonctionnait avant et plus depuis quoi en réalité ? Une mise à jour ?

        Avec un petit passage par github et les problèmes liés à cette bibliothèque, on tombe rapidement sur
        https://github.com/Rapptz/discord.py/discussions/6981
        et bingo, pareil que toi, le mainteneur a en plus répondu et clos le sujet.
        0
      3. @yg_bePour moi tout est opaque dans cette bibliothèque :-D
        0
      4. Contributeur
        @Grimouareton code ne donne aucune possibilité d'observer ce qui se passe.
        0
    11. Voila le code le plus simple qui ne marche pas (bien que je ne pense pas que l'erreur vienne de là):
      import dotenv
      import os
      from dotenv import load_dotenv
      import discord
      
      class Bot(discord.Client):
          def __init__(self):
              super().__init__()
          async def on_raw_reaction_add(self, payload):
              await self.get_user(payload.user_id).send("test")
      
      bot = Bot()
      load_dotenv(dotenv_path = "config")
      bot.run(os.getenv("TOKEN"))
      

      Quand j'ajoute une réaction sur discord:
      Ignoring exception in on_raw_reaction_add
      Traceback (most recent call last):
      File "/home/lancelot/.local/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
      await coro(*args, **kwargs)
      File "exFormum.py", line 10, in on_raw_reaction_add
      await self.get_user(payload.user_id).send("test")
      AttributeError: 'NoneType' object has no attribute 'send'
      0
      1. Bonsoir.

        Je n'avais pas donné le bon lien en effet, mais c'est bien dans intent qu'il faut chercher comme cela a déjà été dit par yb.

        https://github.com/Rapptz/discord.py/issues/5867
        et de là, il faut bien lire ce que raconte intent et tester pour trouver la bonne configuration, et là, seul toi peut le faire.
        https://discordpy.readthedocs.io/en/latest/intents.html

        D'après cette page, il y aurait peut-être un truc aussi à régler côté server discord, tu l'as déjà fait ?

        Le code que tu exposes n'a aucune config de faite avec intent, et c'est vraiment là qu'il faut chercher, car la solution y est, pour ma part je ne peux tester, car comme déjà dit, ces trucs discord, c'est pas mon truc justement, je ne comprends même pas à quoi ça sert ^^

        Edit: encore ça sur github
        https://github.com/rosalogia/rucs24-bot/pull/86
        0
        1. Merci grimouare,
          Je vais tester tout ça.
          0
      2. J'ai réussi!
        Merci a vous grimouare et yg_be!
        Voila le code qui marche:
        import dotenv
        import os
        from dotenv import load_dotenv
        import discord
        
        intents = discord.Intents.all()
        
        class Bot(discord.Client):
            def __init__(self, intents):
                super().__init__(intents=intents)
            async def on_raw_reaction_add(self, payload):
                await self.get_user(payload.user_id).send("test")
        
        bot = Bot(intents=intents)
        load_dotenv(dotenv_path = "config")
        bot.run(os.getenv("TOKEN"))

        Le problème était que je définissait bien les intents mais que je ne les prenais pas en argument dans le constructeur de discord.Client!
        Je vous remercie encore une fois,
        Ymmj
        0