为什么命令会触发两次?

时间:2021-04-13 01:36:03

标签: python discord discord.py

我有一个机器人,可以让你排队进入派对查找器。当队列数达到 2 时,它重置为 0。我有 2 个命令,一个用于第一人,另一个用于记录他们的姓名。但是,当我将其设置为 2 时,它会转到 queue = 0 并在 queue = 0 时触发命令,使其触发两次。

我该如何解决这个问题?

import discord
import os
from discord.utils import get
from discord.ext import commands

@client.event
async def on_message(message): #Defines Message
  
  #If You Queue, And Role Requirement to Do So
  if message.content.startswith('-queue duos'): 
    global queue
    if queue == 1:
      role = discord.utils.get(message.guild.roles, id=830557149863608367)

      if role in message.author.roles:

        print('you have queued')
      
        global author2
        author2 = message.author
        print(author2)

        #Adds Role Duos
        role = discord.utils.get(message.guild.roles, id=830219965549510656) 
        await message.author.add_roles(role) 

        #Removes Role NoQueue
        role4 = discord.utils.get(message.guild.roles, id=830557149863608367)
        await message.author.remove_roles(role4)
      
        #Gives Message
        await message.channel.send('you have joined the duos queue sit tight!')

        
        queue += 1
        await message.channel.send(queue)

        if queue == 2:
          queue = 0
          print('SUCCESS')

    if queue == 0:
      role = discord.utils.get(message.guild.roles, id=830557149863608367)

      if role in message.author.roles:

        print('you have queued')
      
        global author
        author = message.author
        print(author)

        #Adds Role Duos
        role = discord.utils.get(message.guild.roles, id=830219965549510656) 
        await message.author.add_roles(role) 

        #Removes Role NoQueue
        role4 = discord.utils.get(message.guild.roles, id=830557149863608367)
        await message.author.remove_roles(role4)
      
        #Gives Message
        await message.channel.send('you have joined the duos queue sit tight!')
          
        queue += 1
        
        await message.channel.send(queue)

    #Is They Already Queued and Have Duos Role  
    else:
      await message.channel.send('You Already Queued!')

1 个答案:

答案 0 :(得分:2)

您正在更改 queue 变量然后检查它,这将导致它执行两次,解决此问题的简单方法是仅在队列的第一次检查中使用 if,并且在其他人上使用 elif,IE:

queue = 1
if queue == 1:
    #Do Something
    queue = 0
elif queue == 0:
    #Do Something else
    queue = 2
elif queue == 2:
    #Do Something else
    queue = 1

上面的示例代码只执行第一个 if 语句,因为 elif 只有在它链接到的 if 语句没有执行时才会执行。

相关问题