python Discord.py 无法加载Cog

aamkag61  于 2022-12-17  发布在  Python
关注(0)|答案(1)|浏览(184)

我试图写一个基本的机器人,但似乎机器人不想加载我的轮齿,其中只包含一个简单的命令test
当我尝试在机器人的DM和机器人加入的服务器中调用该命令时,没有任何React。

(discord) ~/source/bot » python main.py                                                                                              
2022-12-16 14:46:47 INFO     discord.client logging in using static token
2022-12-16 14:46:49 INFO     discord.gateway Shard ID None has connected to Gateway (Session ID: XXX).
2022-12-16 14:46:51 INFO     root Bot is ready
2022-12-16 14:46:51 INFO     root Setup function called    <-- cog seems to be loaded, but it's not
2022-12-16 14:46:56 INFO     root Message received: %test  <-- when i sent the command via bot's DM

main.py

intents = discord.Intents.all()
TOKEN = "XXX"

bot = commands.Bot(command_prefix="%", intents=intents)
logger = logging.StreamHandler(stream=sys.stdout)

@bot.event
async def on_ready():
  logging.info("Bot is ready")
  await bot.load_extension("mycog")

@bot.event
async def on_message(ctx):
  logging.info("Message received: %s", ctx.content)

async def main():
  utils.setup_logging(handler=logger)
  await bot.start(token=TOKEN)

asyncio.run(main())

mycog.py

class MyCog(commands.Cog):
  def __init__(self, bot: commands.Bot):
    self.bot = bot
    self.count = 0
  
  @commands.command(name="test")
  async def test(self, ctx):
    # It should log when called, but this isn't the case at the moment
    logging.info("Test function called")
    await ctx.send("Pong!")

async def setup(bot: commands.Bot):
  await bot.add_cog(MyCog(bot))
  logging.info("Setup function called")

我还尝试将bot.load_extension调用放在bot.start之前的main中,但也没有成功。

enyaitl3

enyaitl31#

cog已经加载,但是它没有响应的原因是因为您覆盖了默认的on_message事件,所以bot不会处理这些命令。
你可以简单地用bot.listen代替bot.event来解决这个问题,这样它就不会覆盖默认值。

@bot.listen()
async def on_message(message):
    ...

或者使用bot.process_commands让机器人处理这些命令。

@bot.event
async def on_message(message):
    ...
    await bot.process_commands(message)

您可以从www.example.com查看此常见问题解答discord.py以了解更多信息。

相关问题