Discord.py重写get_member()函数,对除bot之外的所有用户返回None



几个月前,我做了一个愚蠢的discord bot,每分钟都更改我朋友的名字,但我今天更新了它,现在get_member函数没有返回任何值。

@client.event
async def on_ready():
print('bot is ready!')
status = discord.Activity(name="Sam be a loser", type=discord.ActivityType.watching)
await client.change_presence(activity=status)
name_change.start()
@tasks.loop(minutes=1)
async def name_change():
server = client.get_guild(id=584112137132048387)
user = server.get_member(376388277302984714)
global english_words
global wordNumber
wordNumber = wordNumber + 1
#changes nickname to current word
await user.edit(nick=f"{english_words[wordNumber]} lookin' ass")
print(f'Word number {wordNumber}: {english_words[wordNumber]}')
#updates number in file
file = open("currentWord.txt", "w")
file.write(str(wordNumber))
file.close

我对服务器中的每个用户都尝试了同样的功能,但除了我输入机器人的id外,它对所有用户都没有返回任何结果。我不知道为什么会发生这种情况,因为我甚至没有编辑这部分代码。

这很可能是由于最近的不和谐.py 1.5更新。当你声明你的Bot.时,你需要配置你的意图

意图是什么?1.5版本引入了intents。这是机器人编写方式的根本改变。意向基本上允许机器人订阅特定的事件桶。与每个意图相对应的事件记录在意图文档的单个属性中。这里有一个例子:

import discord
from discord.ext import commands
intents = discord.Intents.default()
intents.members = True  # Subscribe to the privileged members intent.
bot = commands.Bot(command_prefix='!', intents=intents)

你还必须为公会相关活动启用特权意图:这里是

你可以阅读更多关于意图:这里

您可以不使用Intents、Privileged或其他,方法是不使用get_member((,而是使用

guild.fetch_member()

最新更新