Discord.py Snipe命令

威尔威尔

我正在尝试发出一条命令,使机器人在其中“截取”最后删除的消息。这是我当前的代码:


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 snipe.")部分工作正常,但其余部分将无法工作。有人可以帮忙吗?

Thörni

好吧,您的on_message_delete()功能就无法正常工作。

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

首先,您的变量smasmc是类型None,但方法removeappend是类型的一部分list,因此您必须声明列表

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.sleep并且asyncio.sleep都需要一个integer才能工作。(顺便说一句,如果您想将60作为字符串,则只需"60"用引号引起来。

同时,应注意以下情况:如果消息被删除,不过50秒后,一个新的消息被删除,sma并且smc将被分配到新的消息。但是,10秒后,之前的消息执行的功能将设置他看重的smasmc为无。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章