title: Discord.py Handeling multiple sessions with multiple users
body: <p>so I made several very simple discord bots with the on_message approach.My question would be how can I make the bot hold several conversations at the same time. For example: Lets say I have a bot that can handle reports on my discord server. You initiate the conversation with &quot;-somecommand&quot; and than the bot DM's you with several questions about the issue you want to report. It goes question -- waits for answer -- question2 --and so on and so on. Problem is that while this conversation goes on nobody can initiate another &quot;report session&quot; with the bot. I have tried using threads,asyncio both were headaches and kinda just gave up with it.So overall my question would be the following : How can I make the bot multitask ?
  My idea of the solution is that I put the &quot;report&quot; function on another process/thread(whatever we call it) and I just keep on creating these threads/processes(whatever) for as many people that I need. I dont know wether this is the most optimal or best approach and if there is a better approach please do tell.</p>
  <p>EDIT1:</p>
  <p>So, when I encountered this problem I was developing a bot that would gather 10 players valorant rank and make teams based on their respective elo.The 10 people would be in the same voice channel. Kinda like a matchmaking bot. I had to make this works for last friday so I worked around the problem and settled for &quot;not multitasking&quot; solution.</p>
  <pre><code>@client.event
  async def on_message(message):
     if message.content == &quot;--matchmake&quot;:
          channel_id = message.author.voice.channel.id
          voice = message.guild.get_channel(channel_id)
          members = voice.members
  </code></pre>
  <p>This part here just gathers all the members who are in the voice channel of the message creator.</p>
  <pre><code>        for member in members:
               await member.send(&quot;Hey please respond with your valorant rank&quot;)
  </code></pre>
  <p>So, here I private message everyone who is in the room.</p>
  <pre><code>        while len(players_list) &lt; 10:
               response = await client.wait_for(&quot;message&quot;)
               if correct_input(response.content):
               #if the player is already in the players list
               #and if the response is correct, I add the player to the list 
               #and tell him he is added
               await member.send(&quot;You have successfully joined!&quot;)
  </code></pre>
  <p>And this here is what causes me the problem because if 2 player respond at the exact same time, only 1 of their responses will be checked and responded to, the other person will be ignored while the message format checking is going on</p>
  <pre><code>    def correct_input(self,mssg):
  
      try:
          mssg = mssg.split()
          # print(mssg)
          div = [mssg[0][:-1], int(mssg[0][-1])]
          if len(div[0]) &lt; 2:
              return False
          # print(div)
          ranks = [&quot;iron&quot;, &quot;bronze&quot;, &quot;silver&quot;, &quot;gold&quot;, &quot;platinum&quot;, &quot;diamond&quot;, &quot;immortal&quot;]
  
          for elo in ranks:
              if div[0].lower() in elo:
                  #print(div)
                  return True
  
          return False
      except(ValueError, TypeError):
          return False
  </code></pre>
  <p>Here is the correct_input function which basiclly just checks if the input split up is correct and can be translated to elo numbers if not it returns false and the bot await player.send(&quot;Wrong Input&quot;)</p>