meo*_*ich 7 python pycharm python-3.x discord discord.py
我最近一直在关注本教程以开始使用 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)
Run Code Online (Sandbox Code Playgroud)
从 discord.py v1.5.0 开始,您需要Intents为您的机器人使用,您可以通过单击此处阅读有关它们的更多信息
换句话说,您需要在代码中进行以下更改 -
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)
Run Code Online (Sandbox Code Playgroud)
在Discord Developer Portal的Bot选项卡底部附近启用服务器成员意图:
将行更改为client = discord.Client():
intents = discord.Intents.default()
intents.members = True
client = discord.Client(intents=intents)
Run Code Online (Sandbox Code Playgroud)
这使您的机器人请求“成员”网关意图。
什么是网关意图?意图允许您订阅某些事件。例如,如果你设置intents.typing = False你的机器人不会被发送可以节省资源的输入事件。
什么是特权意图? 特权意图(如成员和出席)被认为是敏感的,需要 Discord 对 100 多台服务器中的机器人进行验证。对于少于 100 个服务器的机器人,您只需要在上面显示的页面上选择加入。
| 归档时间: |
|
| 查看次数: |
4937 次 |
| 最近记录: |