gpt4 book ai didi

python - Discord.py 狙击命令

转载 作者:行者123 更新时间:2023-12-05 00:45:14 25 4
gpt4 key购买 nike

我试图发出一个命令,让机器人“狙击”最后一条删除的消息。这是我当前的代码:


snipe_message_content = None
snipe_message_author = None

@client.event
async def on_message_delete(message):
snipe_message_author.remove(None)
snipe_message_content.remove(None)
snipe_message_content.append(message.content)
snipe_message_author.append(message.author.id)
await asyncio.sleep(str(60))
snipe_message_author.remove(message.author.id)
snipe_message_content.remove(message.content)


@client.command()
async def snipe(message):
if snipe_message_content==None:
await message.channel.send("Theres nothing to snipe.")
else:
embed = discord.Embed(description=f"{snipe_message_content}")
embed.set_footer(text=f"Asked by {message.author.name}#{message.author.discriminator}", icon_url=message.author.avatar_url)
embed.set_author(name= f"<@{snipe_message_author}>")
await message.channel.send(embed=embed)
return

await message.channel.send("Theres nothing to snip.") 部分工作得很好,但其余部分不起作用。有人可以帮忙吗?

最佳答案

好吧,您的 on_message_delete() 函数不起作用。

我会将您的变量缩短为 smc (snipe_message_content) 和 sma (snipe_message_author)。

首先,你的变量 smasmc 的类型是 None,但是方法 removeappendlist 类型的一部分,所以你必须声明列表

smc = []
sma = []

为了让他们工作。

不过,无论如何您都不必这样做。只需给您当前的变量一个新值:

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.sleepasyncio.sleep 都需要一个 integer 才能工作。 (顺便说一句,如果你想让 60 成为一个字符串,只需将 "60" 写成带引号。

另外,请注意以下情况:如果一条消息被删除,但在新消息被删除 50 秒后,smasmc 将分配给新消息。但是 10 秒后,之前消息执行的函数会将 smasmc 的值设置为 None。

因此,在 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

关于python - Discord.py 狙击命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64383524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com