那么你的on_message_delete()
功能不起作用。
首先,你的变量snipe_message_author
and snipe_message_content
属于类型None
,但是方法remove
and append
是类型的一部分list
,所以你必须声明列表
snipe_message_content = []
snipe_message_author = []
为了让他们能够工作。
不过,无论如何你都不必这样做。只需给当前变量一个新值:
snipe_message_content = None
snipe_message_author = None
@client.event
async def on_message_delete(message):
global snipe_message_content
global snipe_message_author
# Variables outside a function have to be declared as global in order to be changed
snipe_message_content = message.content
snipe_message_author = message.author.id
await asyncio.sleep(60)
snipe_message_author = None
snipe_message_content = None
另外,不要将 60 转换为字符串。time.sleep
and asyncio.sleep
两者都需要一个integer
为了工作(旁注:如果你想让 60 成为一个字符串,只需写"60"
在引号中)。
最后,请注意以下情况: 如果一条消息x
被删除,但 50 秒后又出现一条新消息y
被删除,snipe_message_author
and snipe_message_content
将被分配给新消息y
。但10秒后,消息执行的函数x
将设置的值snipe_message_author
and snipe_message_content
没有。
因此,之后await asyncio.sleep(60)
,检查你的消息是否还和以前一样:
snipe_message_content = None
snipe_message_author = None
snipe_message_id = None
@client.event
async def on_message_delete(message):
global snipe_message_content
global snipe_message_author
global snipe_message_id
snipe_message_content = message.content
snipe_message_author = message.author.id
snipe_message_id = message.id
await asyncio.sleep(60)
if message.id == snipe_message_id:
snipe_message_author = None
snipe_message_content = None
snipe_message_id = None