Python 为什么client.get\u all\u成员返回None?

Python 为什么client.get\u all\u成员返回None?,python,discord.py,Python,Discord.py,我试过: @client.command() 异步定义id(消息、名称): discriminlist=str(name).split(“#”) p=客户端。获取所有成员() 已找到的_成员=筛选器(lambda m:m.discriminator==discriminalist[0],p) member=discord.utils.get(已找到成员,名称=discriminlist[1]) id=member.id 等待消息。通道。发送(id) 得到: Ignoring exception

我试过:

@client.command()
异步定义id(消息、名称):
discriminlist=str(name).split(“#”)
p=客户端。获取所有成员()
已找到的_成员=筛选器(lambda m:m.discriminator==discriminalist[0],p)
member=discord.utils.get(已找到成员,名称=discriminlist[1])
id=member.id
等待消息。通道。发送(id)
得到:

Ignoring exception in command id:
Traceback (most recent call last):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "main.py", line 49, in id
    id = member.id
AttributeError: 'NoneType' object has no attribute 'id'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/bot.py", line 902, in invoke
    await ctx.command.invoke(ctx)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 864, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'NoneType' object has no attribute 'id

我想做的是制作一个discord机器人命令,允许你获取用户的ID,这样你就可以在命令中使用ID,而不是提及它们。例如,我的朋友GlowNinja因为时区而睡觉,他晚上睡觉,而我白天睡觉,我想在discord机器人中给他钱,但我不想提及他并叫醒他(出于某种原因,他打开了notifs)因此我想发送id而不是提及,但当我这样做时,我会出现错误,并且首先没有id,您可能不想将函数定义为
id()
,因为这已经是一个内置Python函数。(您仍然可以通过传递
name=“id”来生成名为id的命令)
发送给装饰者,即
@client.command(name=“id”)

其次,它是
discord.utils.get()
,返回的是
None
,而不是
client.get_all_members()
。您试图通过名称搜索一个成员,但向函数传递了一个鉴别器。用户名的格式为
Username\1234
;在
处拆分“#”
并获取索引1处的字符将返回鉴别器
1234

事实上,你函数中的大部分代码都是不必要的。你可以使用
ctx.guild.members
访问公会的所有成员,因此你可以直接将其和要搜索的成员的名称传递到
discord.utils.get()
,既不使用
客户端.get_all_members()
函数,也不使用
过滤器()
功能

@client.command(name=“id”)
异步def get_id(ctx,名称):
用户名,鉴别器=name.split(“#”)
member=discord.utils.get(ctx.guild.members,name=username)
等待ctx.channel.send(member.id)
另一方面,虽然功能不受影响,但您可能希望函数的第一个参数是
ctx
,而不是
message
,因为传递的参数是
Context
对象,而不是
message
对象