使用后台任务获取成员名称列表
Getting list of member names with background task
我有几个循环,我 运行 和我的机器人一起使用循环重置某些统计数据,但最近似乎发生了一些变化,它们不再工作了。我可以通过 on_message 使用命令获取它们,但不能使用后台任务。我试过很多东西,但我不确定我做错了什么。
async def getmem():
await client.wait_until_ready()
while not client.is_closed():
guild = client.get_guild(id=1234567890)
if guild:
for member in guild.members:
if not member.bot:
print(member.name)
await asyncio.sleep(60)
client.loop.create_task(getmem())
上周 Discord 更改了其网关政策,因此现在您需要从机器人的控制面板启用 GUILD_MEMBERS 特权意图。如果该开关被禁用,您需要向 Discord 支持发送消息,并要求他们将您的机器人列入白名单以实现该特权意图。 (同样的事情适用于 GUILD_PRESENCES,尽管您的特定代码示例不需要该意图。)还要确保您已将 discord.py 升级到 1.5 或更高版本,因为您需要在以下情况下指定意图您使用新网关。
intents = discord.Intents.default()
intents.members = True
client = MyClient(intents=intents)
这是他们关于更改的公告:
https://support-dev.discord.com/hc/en-us/articles/360056426994-Gateway-Update-FAQ
我有几个循环,我 运行 和我的机器人一起使用循环重置某些统计数据,但最近似乎发生了一些变化,它们不再工作了。我可以通过 on_message 使用命令获取它们,但不能使用后台任务。我试过很多东西,但我不确定我做错了什么。
async def getmem():
await client.wait_until_ready()
while not client.is_closed():
guild = client.get_guild(id=1234567890)
if guild:
for member in guild.members:
if not member.bot:
print(member.name)
await asyncio.sleep(60)
client.loop.create_task(getmem())
上周 Discord 更改了其网关政策,因此现在您需要从机器人的控制面板启用 GUILD_MEMBERS 特权意图。如果该开关被禁用,您需要向 Discord 支持发送消息,并要求他们将您的机器人列入白名单以实现该特权意图。 (同样的事情适用于 GUILD_PRESENCES,尽管您的特定代码示例不需要该意图。)还要确保您已将 discord.py 升级到 1.5 或更高版本,因为您需要在以下情况下指定意图您使用新网关。
intents = discord.Intents.default()
intents.members = True
client = MyClient(intents=intents)
这是他们关于更改的公告: https://support-dev.discord.com/hc/en-us/articles/360056426994-Gateway-Update-FAQ