在消息[discord.py]上创建DM

时间:2020-10-29 13:40:28

标签: python discord.py

我正在尝试创建一条命令,以删除消息内容,如果不是单词“ role”,则将其发送回用户。

代码运行正常。如果消息不是“ role”,则消息将被删除,并且确实收到了带有已删除消息的dm,但是我不知道我是否做对了,因为我收到此错误“ AttributeError:'ClientUser'对象没有属性' create_dm'”。

这是我的代码:

composer-1.12.4-airflow-1.10.6

1 个答案:

答案 0 :(得分:0)

Discord漫游器无法将DM发送给彼此,而只能发送给Users。您的漫游器正在尝试向自己发送DM,但不能。您需要使用if语句检查消息的作者是否是漫游器。

您已经在稍后的代码中进行了此操作,以查看它是否应该发送消息,但是顶部的create_dm()函数此时将已经失败(因为它不能创建dm),因此它将永远无法到达那里。

@commands.Cog.listener()
async def on_message(self, message):
    if message.author.bot:
        return # Ignore bot messages

    if not message.guild:
        return

    if not message.channel.name == 'roles':
        return

    elif message.content != 'role':
        await message.author.send(message.content)
        await message.delete()

PS。这里还有一些注意事项:

  • 您可以只使用User.send()代替create_dm()dm.send()

  • 仅包含内容的f-string可以只是内容本身(f"{word}" == word,如果不是字符串,则为str(word)

  • 您有if检查频道名称是否不是“角色”,然后在elif中检查频道名称​​是-是否不是“角色”,那么它将进入第一个if并返回,因此第二个不必要。