作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图发出一个命令,让机器人“狙击”最后一条删除的消息。这是我当前的代码:
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)。
首先,你的变量 sma
和 smc
的类型是 None
,但是方法 remove
和 append
是 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 秒后,之前消息执行的函数会将 sma
和 smc
的值设置为 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/
我是一名优秀的程序员,十分优秀!