我最近一直关注this tutorial,以开始使用Discord的API。不幸的是,当我得到有关打印行会中所有用户的内容时,我碰壁了。
当我尝试打印所有用户的姓名时,它只会打印机器人的名称,而不会打印其他内容。供参考,行会共有六个用户。该机器人具有管理员权限。
import os
import discord
TOKEN = os.environ.get('TOKEN')
client = discord.Client()
@client.event
async def on_ready():
for guild in client.guilds:
print(guild, [member.name for member in guild.members])
client.run(TOKEN)
答案 0 :(得分:2)
从discord.py v1.5.0开始,您需要将Intents
用于您的机器人,您可以通过clicking here了解有关它们的更多信息
换句话说,您需要在代码中进行以下更改-
import discord
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')
intents = discord.Intents.all()
client = discord.Client(intents=intents)
@client.event
async def on_ready():
for guild in client.guilds:
if guild.name == GUILD:
break
print(
f'{client.user} is connected to the following guild: \n'
f'{guild.name} (id: {guild.id})'
)
# just trying to debug here
for guild in client.guilds:
for member in guild.members:
print(member.name, ' ')
members = '\n - '.join([member.name for member in guild.members])
print(f'Guild Members:\n - {members}')
client.run(TOKEN)
答案 1 :(得分:1)
启用服务器成员意图:
将行client = discord.Client()
更改为此:
intents = discord.Intents.default()
intents.members = True
client = discord.Client(intents=intents)
什么是网关意图?意图使您可以订阅某些事件。例如,如果您设置了intents.typing = False
,则不会向您的机器人发送键入事件,从而节省了资源。
什么是特权意图? 特权意图(例如成员和状态)被认为是敏感的,并且需要Discord对100台以上服务器中的机器人进行验证。对于少于100台服务器的漫游器,您只需要在上面显示的页面上选择加入即可。