【问题标题】:Discord.py access all members in all servers of bot without a command?Discord.py 无需命令即可访问 bot 所有服务器中的所有成员?
【发布时间】:2021-07-27 08:49:41
【问题描述】:

是否可以在没有命令或事件调用的情况下检索机器人所有服务器中的所有成员?目前,它使用命令工作,但我想让它成为我在机器人启动时调用的异步函数。我尝试将“客户端”传递给函数,但也没有用。

intents = discord.Intents.default()
intents.members = True
client = commands.Bot(command_prefix="%", intents = intents)

@client.event
async def on_ready():
  print("Bot is up and running")
  await check()
  await currency_update()

@client.command()
async def currency_update(ctx):
  for guild in client.guilds:
     for member in guild.members:
        print(member)
  await asyncio.sleep(3600)
  await currency_update(ctx)

【问题讨论】:

    标签: python-3.x discord discord.py


    【解决方案1】:

    您无需将currency_update 设为命令,将其设为简单的异步函数,无需任何参数

    async def currency_update():
      for guild in client.guilds:
         for member in guild.members:
            print(member)
      await asyncio.sleep(3600)
      await currency_update(ctx)
    

    我建议使用 while 循环而不是递归。


    如果您想“在后台”启动异步函数,请使用 asyncio.create_task

    import asyncio
    
    @client.event
    async def on_ready():
      print("Bot is up and running")
      asyncio.create_task(check())
      asyncio.create_task(currency_update())
    

    【讨论】:

    • 我已经尝试过这个(没有 ctx),但没有成功。它仅在它是命令时才有效,我真的不明白为什么。
    • 你能试着放一些调试打印语句吗?
    • 其实我可能已经找到了问题,但不知道如何解决。显然在 on_ready 函数中只有前 2 行运行然后它停止。我编辑了帖子以显示我正在谈论的内容。是因为我不能连续拥有 2 个异步函数吗?
    • 你可以拥有,但是当awaiting 一个异步函数时,你正在等待它完成,如果你希望它们“在后台”运行,请使用asyncio.create_task。让我编辑我的答案
    • while 循环优于递归还有什么好处?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2021-09-03
    相关资源
    最近更新 更多