0

我正在尝试为我的服务器制作一个不和谐的机器人,并为 modmail 创建一个频道。但是每次我尝试创建一个时,都会出现此错误。我正在使用 python 3.10

  File "C:\Users\dyimi\Desktop\Code related stuff\python\discord..py\Palace Guard\cogs\modmail.py", line 35, in on_message  
    channel = await guild.create_text_channel(name=text_channel_name, overwrites=overwrites)
  File "C:\Users\dyimi\Desktop\Code related stuff\python\discord..py\Palace Guard\venv\lib\site-packages\discord\guild.py", 
line 948, in create_text_channel
    data = await self._create_channel(name, overwrites, ChannelType.text, category, reason=reason, **options)
  File "C:\Users\dyimi\Desktop\Code related stuff\python\discord..py\Palace Guard\venv\lib\site-packages\discord\guild.py", 
line 844, in _create_channel
    'id': target.id
AttributeError: 'str' object has no attribute 'id'

这是我的代码:

@commands.Cog.listener()
    async def on_message(self, message):
        if message.content.lower() in ["yes", "y", "ya", "yee", "ye", "no", "n", "nope"]:
            return
        
        if message.author == self.client.user:
            return
        
        def check(msg):
            return msg.content.lower() in ["yes", "y", "ya", "yee", "ye"] and msg.author == message.author
        if isinstance(message.channel, discord.channel.DMChannel):
            await message.channel.send("Create ticket to modmail in Veemo's Kingdom? Yes or no.")
            response = await self.client.wait_for("message", check=check)
        if response:
            guild = discord.utils.get(self.client.guilds, id=834666434042658816)
            text_channel_name = message.author.name + "-" + message.author.discriminator
            roles = guild.roles
            overwrites = {
                guild.default_role: discord.PermissionOverwrite(view_channel=False)
            }
            for role in roles:
                if role.name not in mod_roles_list:
                    overwrites[role.name] = discord.PermissionOverwrite(view_channel=False)
            channel = await guild.create_text_channel(name=text_channel_name, overwrites=overwrites)
        else:
            await message.channel.send("Ticket not created.")
4

1 回答 1

1

我认为这里的问题在于overwrites字典变量,

下面的行用as而不是对象附加overwrites变量。这导致了这个错误。keysstrdiscord.py RoleAttributeError: 'str' object has no attribute 'id'

overwrites[role.name] = discord.PermissionOverwrite(view_channel=False)

有问题的输出

{
  <Role id=<id no> name='@everyone'>: <discord.permissions.PermissionOverwrite object at ...>,
  '@everyone': <discord.permissions.PermissionOverwrite object at ...>,
  'Bot': <discord.permissions.PermissionOverwrite object at ...>,
  'pbot': <discord.permissions.PermissionOverwrite object at ...>
}

它应该如下所示,所以keydiscord.py Role包含属性的对象id

overwrites[role] = discord.PermissionOverwrite(view_channel=False)

输出

{
  <Role id=<id no> name='@everyone'>: <discord.permissions.PermissionOverwrite object at ...>,
  <Role id=<id no> name='Bot'>: <discord.permissions.PermissionOverwrite object at ...>,
  <Role id=<id no> name='pbot'>: <discord.permissions.PermissionOverwrite object at ...>
}
于 2021-10-20T01:45:10.083 回答