我正在尝试创建一条命令,以删除消息内容,如果不是单词“ role”,则将其发送回用户。
代码运行正常。如果消息不是“ role”,则消息将被删除,并且确实收到了带有已删除消息的dm,但是我不知道我是否做对了,因为我收到此错误“ AttributeError:'ClientUser'对象没有属性' create_dm'”。
这是我的代码:
composer-1.12.4-airflow-1.10.6
答案 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
并返回,因此第二个不必要。