AttributeError: 'str' object has no attribute 'get' -- Discord.py

AttributeError: 'str' object has no attribute 'get' -- Discord.py

我正在尝试将自定义表情符号设置为我的机器人状态。但是,我收到此错误。

AttributeError: 'str' object has no attribute 'get'

我该如何解决这个问题?

import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.members = True
Bot = commands.Bot(command_prefix="&", intents=intents)

@Bot.event
async def on_ready():
    await Bot.change_presence(activity=discord.Activity(type=4, emoji="", name="hello")) # The error is related to this line
    print("ready!")

Bot.run(TOKEN)
Ignoring exception in on_ready
Traceback (most recent call last):
  File "E:\projects\Virtual Environment\discord-bot\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "E:\projects\discord-bot\base.py", line 114, in on_ready
    await Bot.change_presence(activity=discord.Activity(type=4, emoji="", name="hello"))
  File "E:\projects\Virtual Environment\discord-bot\lib\site-packages\discord\activity.py", line 193, in __init__
    self.emoji = PartialEmoji.from_dict(emoji)
  File "E:\projects\Virtual Environment\discord-bot\lib\site-packages\discord\partial_emoji.py", line 83, in from_dict
    animated=data.get('animated', False),
AttributeError: 'str' object has no attribute 'get'

您的问题中有几点需要注意。

首先是机器人账户不允许设置自定义活动(Activity在你的情况下类型4),这是[=32的限制=]DiscordAPI本身,这个没什么关系,建议你看看其他类型的活动。

其次,在尝试构建 CustomActivity 对象时,您将表情符号字符串作为参数传递,其中 documentation 要求 PartialEmoji 对象,您应该首先检索 PartialEmoji 对象并将其作为有关文档的参数传递,但请继续阅读以下要点。

第三个也是最后一个,在创建CustomActivity对象时,在discord.py中有一个已知的issue。问题源于文档中的一个错误,正如我提到的,它告诉您将 PartialEmoji 作为参数传递,但这只适用于最新版本的 discord.py(如果您查看github 昨天更新的问题)。问题是代码不期望 PartialEmoji,它实际上期望 dict 对象中有 PartialEmoji(因此它寻找 get() 函数的原因).我建议你使用最后一种传递表情符号参数的方法。

您可以通过查看 discord.py

source code 来检查这一点