gpt4 book ai didi

python - on_message 不会检测到任何消息

转载 作者:行者123 更新时间:2023-12-01 01:55:59 26 4
gpt4 key购买 nike

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

代码与以前相同,但现在当我启动机器人时,机器人检测到任何服务器中都没有发送消息,除非消息来自机器人本身。

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

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(...),我用它作为基本方法来让我知道机器人是否正在检测消息。每当机器人在 on_ready 中发送消息但 Discord 上其他用户没有消息触发该函数时,就会打印打印语句。

最佳答案

不要使用:

time.sleep(...)

相反,使用:

await asyncio.sleep(...)

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

关于python - on_message 不会检测到任何消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50183994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com