当前位置: 首页 > 知识库问答 >
问题:

为什么命令要开火两次?

游高杰
2023-03-14

我有一个机器人可以把你排到一个寻欢作乐的人那里。当队列数达到2时,它将重置为0。我有两个命令,一个用于第一个人,另一个用于第二个人记录他们的名字。但是,当我将其设置为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个答案

林俊晖
2023-03-14

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

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语句未执行时才执行。

 类似资料:
  • 这是一个取自现有代码库的cucumber场景大纲,但我被要求使用TestNG尝试它。一些东西(场景(),场景(),TestNGCucumberRunner,数据提供商)已经从stackoverflow上的另一个帖子中删除,因为我不知道如何使用TestNG使场景大纲发挥良好。 在执行时,唯一的错误是NullPointerException,因为WebDriver获取其值时@BeforeClass未触

  • 为什么命令以开头?这是我看到它的网站。

  • python似乎支持许多不同的命令来停止脚本执行。 我找到的选择有:、、、 我错过了什么吗?它们之间有什么区别?你什么时候用?

  • 什么命令打开Ruby的REPL? 在Python中,只需打开而不带任何参数。

  • 问题内容: 似乎python支持许多不同的命令来停止脚本执行。 我发现的选择是: ,,, 我错过了吗?它们之间有什么区别?你何时会使用它们? 问题答案: 让我给他们一些信息: 在幕后提出异常。 此外,如果你打印它,它将给出一条消息: 包含此功能是为了帮助不了解Python的人。毕竟,新手尝试退出Python的最有可能的事情之一就是输入quit。 然而,quit应该不是在生产代码中使用。这是因为它仅

  • ChatGPT为什么这么火?