Python on#u消息赢得';无法检测到任何消息

Python on#u消息赢得';无法检测到任何消息,python,discord,discord.py,Python,Discord,Discord.py,我正在用discord.py编写一个discord机器人。 我写了一个初始版本,但我认为它需要重新组织,所以我将代码移到了不同的文件中 代码与以前完全相同,但现在当我启动bot时,bot不会检测到任何服务器中发送的消息,除非消息来自bot本身 处理客户端的主要代码是: import discord import time from command_list import * from resource_functions import grab_setting_from_category pr

我正在用discord.py编写一个discord机器人。 我写了一个初始版本,但我认为它需要重新组织,所以我将代码移到了不同的文件中

代码与以前完全相同,但现在当我启动bot时,bot不会检测到任何服务器中发送的消息,除非消息来自bot本身

处理
客户端的主要代码是:

import discord
import time
from command_list import *
from resource_functions import grab_setting_from_category

print("Main initialized")

client = discord.Client()
token = "BOT TOKEN"

prefix = "!"


@client.event
async def on_ready():
    print("*** BOT IS READY ***")

    async def server_count_loop():
        while True:
            servers = client.servers
            await client.change_presence(
                game=discord.Game(name=" in {0} Servers".format(str(len(servers)))))
            time.sleep(10)

        for server in client.servers:
            for channel in server.channels:
                if channel.name == "general":
                    await client.send_message(channel, content="Bot Online")

    await server_count_loop()


@client.event
async def on_message(message):
    print("Message detected from {0} as '{1}'".format(message.author, message.content))
    if not message.author.bot:
        global prefix
        prefix = grab_setting_from_category(message.server.id, "server", "prefix")
        if message.content.startswith(prefix):
            for i in range(0,len(commands)):
                key = list(commands.keys())[i]
                table = list(commands.values())[i]
                if message.content.startswith(prefix+key):
                    table["function"](message, commands)


client.run(token)
在代码中,在
on_message
函数的开头有
print(…)
,我正在使用该函数作为基本方式,以告知bot是否正在检测消息。每当bot在_ready
上的
中发送消息时,打印语句就会打印出来,但在Discord上没有来自其他用户的消息触发该功能。

不要使用:

time.sleep(...)
相反,请使用:

await asyncio.sleep(...)

time.sleep
是一个阻塞调用,它阻塞asyncio循环以继续运行。这就是为什么需要一个异步
.sleep(…)
方法

现在换你的代币。永远不要将令牌上载到StackOverflow或GitHub,因为它无法删除。我怀疑问题代码中的缩进与实际代码中的缩进不同。无论如何,你不应该有一个while循环+
时间。sleep
,它会阻止主不和谐循环。我生成了一个新的令牌并对其进行了编辑。感谢您的关注,在我发布之前,我重新发布并忘记了令牌仍然值得重置令牌。你永远不知道谁会下载任何东西。无论如何,我认为@abccd有解决办法。
time.sleep
阻塞了主循环,因此需要改用
wait asyncio.sleep
。旁注,除非缩进粘贴不正确,否则
结尾后的代码将永远不会运行,而True
则不会运行。粘贴不正确,这似乎确实是问题所在。谢谢你们