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. 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
    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. 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. 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
      2. 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
      3. 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
      4. 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
      5. 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
      6. 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
      7. 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
      8. 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
      9. 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
      10. 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
      11. Contributeur
        bonjour,
        difficile sans voir l'ensemble du code.
        0