首页 > 解决方案 > 哪种方法最适合在 discord.py 中启动机器人?login() 和 connect() vs start() vs run()

问题描述

因此,要将机器人连接到discord.py,有几种方法:


它们之间有什么区别,哪一个最适合运行机器人?

标签: pythonpython-3.xdiscorddiscord.py

解决方案


相信官方文档说的很清楚了:

  • start()login()+的简写协程connect()
  • run()是一个阻塞调用,这意味着

    这个函数必须是最后一个调用的函数,因为它是阻塞的。这意味着事件的注册或在此函数调用之后调用的任何内容在它返回之前不会执行。

没有“最好”的方法。如果您想要同步执行,请选择run(). start()(或login()+ connect())更适合异步执行。

示例run()

run()不必管理任何事件循环:

try:
    loop.run_until_complete(start(*args, **kwargs))
except KeyboardInterrupt:
    loop.run_until_complete(logout())
    # cancel all tasks lingering
finally:
    loop.close()

示例start()

根据文档,start()

一个阻塞调用,它从你那里抽象出事件循环初始化。

这意味着您需要放置start()在一个事件循环中。

from discord.ext import commands
import asyncio

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

@client.event
async def on_ready():
    print("Ready")

loop = asyncio.get_event_loop()
loop.run_until_complete(client.start('TOKEN'))

推荐阅读