如何在多个服务器上运行命令而不在一个服务器上停止运行,并且如何在discord.py的每个服务器上停止整个命令

时间:2020-11-05 07:04:08

标签: python discord.py

所以问题是,代码可以正常工作,但是如果我在多台服务器上运行spam命令,但在一台服务器上将其停止,则会停止对所有服务器进行垃圾邮件发送。我不想要那个。有什么办法可以解决

import discord, pyautogui, time
from discord.ext import commands


client = commands.Bot(command_prefix = '.')

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))



@client.command()
@commands.has_role('discordpy')
async def spam(ctx, *, my_id):
    print("it worked")
    time.sleep(5)
    x = 1
    global y
    y = 0

    while y != 1:
        @client.event
        async def on_message(message):
            if message.content == ".stop":
                y = 1
            await client.process_commands(message)
        myid = str(my_id)
        await ctx.channel.send(myid + " x " +str(x))
        print(x)
        x += 1
        print(y)
        time.sleep(0.5)






client.run('<Token>')

就这样,您知道我已经尝试过执行一个新命令来停止第一个命令,但无济于事

1 个答案:

答案 0 :(得分:0)

我建议您将服务器ID和垃圾邮件命令的状态(无论是否打开)存储在SQL数据库中,以便您可以将数据库中的ID与该命令仅用于服务器的ID进行比较调用并检查该服务器的垃圾邮件命令的状态是否为开。

如果这太困难了,至少要使用相同的原理来创建字典。

带有字典的示例(不建议使用,尤其是在有很多服务器的情况下):

# Changing the statuses
global statuses
statuses[message.guild.id] = value # "on"/ "off", True/False or whatever
# Checking the statuses
value = statuses[message.guild.id]
if value == "on":
    # Do stuff
else:
    # Don't do stuff

确保您将其声明为全局开头

global statuses
statuses