【问题标题】:Why does the command fire twice?为什么命令会触发两次?
【发布时间】:2021-07-08 01:54:09
【问题描述】:

我有一个机器人可以将你排入派对查找器。当队列数达到 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!')

【问题讨论】:

    标签: python discord discord.py


    【解决方案1】:

    您正在更改 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 语句没有被执行时才会被执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 2011-01-27
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多