如何解决为什么我可以通过bot.get_user函数获得一些用户,但不能获得其他用户呢? [Discord.py]
我正忙着做一天学业,然后去了不和谐的服务器,检查了声誉和排行榜进度在一整天内是如何变化的,当我使用该命令时,出现错误“ Nonetype对象没有属性“ display_name””,因此自然而然地我进入了运行脚本的控制台,并以为可能只是网络错误而重新启动了脚本。但是,重新启动后,它仍然无法工作。直到出现错误后,我才更改甚至重启脚本。我知道该命令昨天(2020年10月26日)有效,但由于某种原因它今天停止工作。摆弄代码并使用断点和打印语句后,我发现它可以挑选用户。经过四处移动后,我得出的结论是,由于我的一位朋友的名字独特,无法理解,但后来我转到另一台服务器并且所有前三名用户都被驳斥排行榜上的用户名使用标准的UTF-8用户名,这次我仍然收到错误消息。它是“ Nonetype对象没有属性'avatar_url'。此后,我决定放弃并引起堆栈溢出。此命令是python 3.8.5异步信誉命令,旨在读取文件下.log文件中存储的字典。扩展名“ Logs / reputation.log”。我们将不胜感激任何帮助/建议。
命令:
@bot.command()
async def leaderboard(ctx):
with open('Logs/reputation.log','r') as file:
dict = ast.literal_eval(file.read())
dict = dict[str(ctx.guild.id)]
sort = sorted(dict,key=lambda x: dict[x],reverse=True) #lambda x: (dict[str(ctx.guild.id)][x])
st = bot.get_user(int(sort[0]))
print(sort[0])
nd = bot.get_user(int(sort[1]))
print(sort[1])
rd = bot.get_user(int(sort[2]))
print(sort[2])
try:
first_mention = st.mention
except AttributeError:
first_mention = st
try:
second_mention = nd.mention
except AttributeError:
second_mention = nd
try:
third_mention = rd.mention
except AttributeError:
third_mention = rd
print(st)
print(nd)
print(rd)
if st != 'Error':
embed1 = discord.Embed(
title="1st Place is",description="{}\nWith a reputation of **{}**".format(first_mention,dict[sort[0]]),color=0xDAA520
)
else:
embed1 = discord.Embed(
title="1st Place is",color=0xDAA520
)
if nd != 'Error':
embed2 = discord.Embed(
title="2nd Place is",description="{}\nWith a reputation of **{}**".format(second_mention,dict[sort[1]]),color=0xC0C0C0
)
else:
embed2 = discord.Embed(
title="2nd Place is",color=0xC0C0C0
)
if rd != 'Error':
embed3 = discord.Embed(
title="3rd Place is",description="{}\nWith a reputation of **{}**".format(third_mention,dict[sort[2]]),color=0xCD7F32
)
else:
embed3 = discord.Embed(
title="3rd Place is",color=0xCD7F32
)
# embed1.add_field(name="1st Place : ",value=st.mention,inline=False)
embed1.set_thumbnail(url=st.avatar_url)
# embed2.add_field(name="2nd Place : ",value=nd.mention,inline=False)
embed2.set_thumbnail(url=nd.avatar_url)
# embed3.add_field(name="3rd Place : ",value=rd.mention,inline=False)
embed3.set_thumbnail(url=rd.avatar_url)
# await ctx.send(embed=embed)
await ctx.send(embed=embed1)
await ctx.send(embed=embed2)
await ctx.send(embed=embed3)
编辑: 使用新的Discord意图并在Discord Developer Portal上启用意图对我很有效。谢谢!
解决方法
我猜你的问题是由于新版本的discord.py(1.5.x)引起的。关于j <= Math.sqrt(i)
的一些更新。意图类似于权限,您必须定义意图以获取频道,成员和某些事件等。必须在定义Intents
之前对其进行定义。
bot = discord.Bot(prefix='')
如果要获取有关Intent的更多信息,可以查看API References。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。