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
使用事件循环的异步非阻塞库
您的选择是:
使用像 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
我正在尝试为一个带瓶子的机器人做一个 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
使用事件循环的异步非阻塞库
您的选择是:
使用像
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