它可以工作,但由于某种原因不是在所有服务器上,而是在某些服务器上。我知道它无法获取服务器成员,因为它正在尝试为自己创建 DM。
@bot.event
async def on_ready():
for guild in bot.guilds:
print(guild.members)
for member in guild.members:
guild.fetch_members()
print(member)
try:
await member.create_dm()
await member.send(text)
except:
print('direct messages are closed')
await asyncio.sleep(25)
continue
我试过谷歌搜索,我只是发现我需要意图,我试过没有任何改变。如果有的话,它们在这里:
intents = discord.Intents.default()
intents = discord.Intents(messages=True, guilds=True, members=True, typing = True)
bot = commands.Bot(command_prefix='!', intents=intents)
答案 0 :(得分:2)
我刚刚花了一些时间浏览了 discord.py 文档,我想我可能已经发现了这个问题。当您在该 guild.fetch_members()
内运行 for
时,您似乎试图启用对 guild.members
中成员的访问权限。尽管这有时可能会奏效,但文档推荐了一种可能更可靠且可能更新的不同用法。
来自fetch_members() docs(有点解释):
async for member in guild.fetch_members(limit=150):
print(member.name)
# if a discord.ClientException is raised, the members intent is not enabled.
让我知道这是否有帮助/有效?