使 Flask 和 Discord.py 库进行通信

问题描述 投票:0回答:1

我脑子里有一个小项目,但我无法解决一个问题。我的项目有两个部分,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 数据库,如果这可能有用的话。

python flask discord.py
1个回答
0
投票

App.py 使用同步编程和 bot.py 异步。

我真的非常建议你从 Flask 迁移到 Quart。 Quart 与 Flask 完全相同,但以异步方式重写。这会让你在未来免去很多麻烦。

此外,请确保每次使用

None
函数时都处理
get_dm_attachments()
。您可能会忘记,只期望返回
reslist

© www.soinside.com 2019 - 2024. All rights reserved.