Python 同时出现 Discord 机器人和瓶子

Discord bot and bottle in the same time in Python


我正在尝试为一个带瓶子的机器人做一个 API 来使用像 http://localhost:8080/say/serverId/channelId/Message
这样的命令 我尝试使用 url 和 bottle 成功地打印了一条消息,并且我有一个 Discord 机器人,现在我必须融合两者。 所以我想 运行 同时在同一个脚本中装瓶和不和谐。 我搜索了线程、ipc 等...但是这些解决方案看起来很难我是初学者。
那么您有简单的解决方案吗? 我试过了

bot.run(token)
bottle.run(host="localhost", port=8080)

但是机器人启动了,我必须用 CTRL + C 停止它才能启动瓶子。 另外,如果你有一个更简单的解决方案,但有 2 个脚本,为什么不呢,但我需要瓶子脚本中的 bot 变量来发送消息
谢谢!

这里的问题是bottle.py是一个基于阻塞代码的WSGI框架,而discord.py是一个asyncio使用事件循环的异步非阻塞库

您的选择是:

  • 删除 bottle 以支持其他一些实际上异步的 Web 框架(例如,grole or sanic)。

  • 使用像 aiobottle 这样的包装器以某种方式使 bottle 与 asyncio 兼容(或自己制作)。

我会选择第一个选项。

使用一些兼容的框架或包装器后,您应该只启动事件循环一次,因为它将为两个应用程序服务。这意味着您不能同时调用两个 run 方法。

例如,对于 sanic:

# `bot.run` starts the event loop, avoid it and use `bot.start` instead
bot_app = bot.start(token)
bot_task = asyncio.ensure_future(bot_app)

# create the sanic app server, but without starting it:
webserver = app.create_server(host="0.0.0.0", port=8080)
webserver_task = asyncio.ensure_future(webserver)

#finally, start the event loop:
loop = asyncio.get_event_loop()
loop.run_forever() # runs both tasks at the same time