Discord.py Snipe command(Discord.py 狙击命令)
问题描述
我试图在机器人狙击"的地方发出命令.最后删除的消息.这是我当前的代码:
Im trying to make a command where the bot "snipes" the last deleted message. this is my current code:
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.") 部分可以正常工作,但其余部分无法正常工作.有人可以帮忙吗?
the await message.channel.send("Theres nothing to snipe.") part works perfectly fine, but the rest wont work. Can anyone help?
推荐答案
你的 on_message_delete() 函数只是不工作.
Well your on_message_delete() function is just not working.
我会将您的变量缩短为 smc (snipe_message_content) 和 sma (snipe_message_author).
I'll shorten your variables as smc (snipe_message_content) and sma (snipe_message_author).
首先,你的变量 sma 和 smc 的类型是 None,但是方法 remove和 append 是 list 类型的一部分,所以你必须声明列表
First of all, your variables sma and smc are of the type None, but the methods remove and append are part of the type list, so you'd have to declare lists
smc = []
sma = []
为了让他们工作.
不过,无论如何您都不必这样做.只需给您当前的变量一个新值:
Still, you wouldn't have to do this anyway. Just give your current variables a new value:
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" 写成带引号.
Also, you should not convert 60 to a string. time.sleep and asyncio.sleep both need an integer in order to work. (And by the way, if you wanted 60 to be a string, just write "60" with quotation marks.
另外,请注意以下情况:如果一条消息被删除,但在新消息被删除 50 秒后,sma 和 smc 将分配给新消息.但是 10 秒后,之前消息执行的函数会将 sma 和 smc 的值设置为 None.
Also, be careful of the following case: If a message gets deleted, but 50 seconds after a new message gets deleted, sma and smc would be assigned to the new message. But 10 seconds later, the function executed by the message before would set he value of sma and smc to None.
因此,在 await asyncio.sleep(60) 之后检查您的消息是否仍然与之前相同:
Therefore, after await asyncio.sleep(60) check wether your message is still the same as before:
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
这篇关于Discord.py 狙击命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Discord.py 狙击命令
基础教程推荐
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- 求两个直方图的卷积 2022-01-01
- 包装空间模型 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
