运行 Discord Bot (Python) 时未调用 on_ready

Posted

技术标签:

【中文标题】运行 Discord Bot (Python) 时未调用 on_ready【英文标题】:on_ready not called when running Discord Bot (Python) 【发布时间】:2018-07-21 08:18:02 【问题描述】:

我一直在用 Python 编写我的第一个 Discord 机器人,它运行良好。我决定将我的代码重构为两个模块,而不仅仅是一个。它看起来像这样:

Proj
- src
-- __init_.py
-- eve.py
-- event.py

我的 eve.py 看起来像这样:

import discord
from discord.ext import commands
from discord.ext.commands import Bot
import asyncio
from src.event import eventCall

bot = commands.Bot(command_prefix="!")

@bot.event
async def on_ready():
    print ("Booting up your system")
    print ("I am running on " + bot.user.name)
    print ("With the ID: " + bot.user.id)

@bot.command(pass_context=True)
async def event(ctx):
    await eventCall(ctx)

bot.run(<client ID>)

我的 event.py 看起来里面有这个标签:

async def eventCall(ctx):

    member = ctx.message.author
    message = await bot.send_message(member, "Hi " + member.display_name + "!")
    channel = message.channel
    (continues)

我一直在努力让 eve.py 导入 event.py,所以我将所有内容都移到了 src 文件夹,然后我不再出现编译器错误。

但是现在当我运行 eve.py 时,on_ready 不再触发(我在控制台中看不到任何文本),并且 !event 命令在 Discord 中不起作用。

我认为我的文件夹结构和我使用 import 的语法都可能是错误的,但我不确定如何最好地解决这个问题。

【问题讨论】:

注释掉from src.event import eventCall 行(可能还有所有引用eventCall 的行)。如果未找到该模块,您应该会看到异常。 src.event 中执行的代码是否不在函数中?它会在文件导入时运行,所以可能有一个循环需要很长时间? 成功了! event.py 中有很多定义,但是当它全部在一个模块中时,没有什么不存在。我更新了上面的帖子以显示其中的所有内容。 如果eve.pyevent.py 在同一个目录中,那么你不应该用from event import eventCall 导入它吗? 每当我这样做时,Eclipse 似乎都不喜欢它。我也试过 .event 并没有给我一个 Eclipse 错误,但我最终得到一个: ModuleNotFoundError: No module named 'main.event'; 'main' 不是包 【参考方案1】:

你必须在eve.py的on_ready函数中输入“await print”。

【讨论】:

其实不是这样的。如果您正在调用 async 协程,则只需使用 await。否则,您可以正常使用所有功能。【参考方案2】:

考虑阅读这个:https://discordpy.readthedocs.io/en/latest/intents.html#why-does-on-ready-take-so-long-to-fire

TL;DR 作为有关意图的 API 更改的一部分,Discord 还更改了成员在开始时的加载方式。最初,图书馆可以一次请求 75 个公会,并且只请求 Guild.large 属性设置为 True 的公会的成员。随着新的意图更改,Discord 要求我们每个请求只能发送 1 个公会。这会导致 75 倍的减速,而且所有公会都被请求,而不仅仅是大型公会。

有关解决方案,请访问上面的链接

【讨论】:

他们建议关闭分块,但我似乎无法让它工作,即使我从文档中复制过去的代码,任何建议

以上是关于运行 Discord Bot (Python) 时未调用 on_ready的主要内容,如果未能解决你的问题,请参考以下文章

运行 Discord Bot (Python) 时未调用 on_ready

基于 Python 的 Discord Bot 在本地工作,但从未在 heroku 上托管

Discord Bot 使用 python 向一个命令发送多个响应

Python36 Discord Bot:任务已被破坏,但处于待处理状态

Discord Bot Client.User 在 Python 中转换为 Discord.Utils 时出错

Python Discord bot 在异常时发送文本