我脑子里有一个小项目,但我无法解决一个问题。我的项目有两个部分,Flask App 和 Discord Bot,以下简称 app.py 和 bot.py。 App.py 使用同步编程和 bot.py 异步。问题是我在 bot.py 中有这个特定的函数:
async def get_dm_attachments(user_id):
user = await bot.fetch_user(user_id)
if not user:
return None
dm = user.dm_channel
if dm == None:
dm = await user.create_dm()
reslist = []
async for message in dm.history(limit=10000):
if message.attachments:
for attachment in message.attachments:
reslist.append(attachment)
return reslist
此函数旨在检索来自具有由用户 ID 指定的特定用户的 DM 的所有附件。我希望能够从 app.py 调用此函数并从中检索数据。
我尝试使用
asyncio.run()
运行异步函数,但这不起作用,我认为这是因为该函数本身在机器人运行之前是无用的,因此,如果仅与脚本的其余部分分开执行该函数,我会得到一个错误。所以我需要有 bot.py 的运行实例,我可以在其中随时运行该函数。
我也尝试过 websocket,但我无法让它在 bot.py 上监听,同时让脚本的其余部分正常运行。
线程也是我在网上找到的选项之一,是的,它可能会解决一些问题,但我无法使其工作。我相信这与我无法使用
asyncio.run()
运行它的原因相同
我有一个通过 mysql wamp 服务器运行的 SQL 数据库,如果这可能有用的话。
App.py 使用同步编程和 bot.py 异步。
我真的非常建议你从 Flask 迁移到 Quart。 Quart 与 Flask 完全相同,但以异步方式重写。这会让你在未来免去很多麻烦。
此外,请确保每次使用
None
函数时都处理 get_dm_attachments()
。您可能会忘记,只期望返回 reslist
。