我正在使用discord.py编码一个不和谐的货币机器人,并且冷却时间不起作用。
它说:
File "main.py", line 106
await message.channel.send("You got 2500 discs")
^
SyntaxError: invalid syntax
当我运行它时。
if message.content == '|daily':
@commands.cooldown(1, 86400, type=BucketType.user)
await message.channel.send("You got 2500 discs")
setdiscs(user, getdiscs(user)+2500)
答案 0 :(得分:0)
命令冷却效果很好,但是如果僵尸程序重新启动,则冷却时间将丢失,因此您应该将冷却时间数据存储在文件中。
在与文件相同的目录中创建名为daily
的文件,其内容如下:
{}
并为您的日常命令尝试以下代码:
import math
import time
with open('daily', 'r') as f:
daily = eval(f.read())
def save_daily():
with open('daily', 'w') as f:
f.write(repr(daily))
# ...
@client.event
async def on_message(message):
# ...
if message.content == '|daily':
if (user in daily) and daily[user] > time.time():
waittime = daily[user] - time.time()
await message.channel.send(f'Please wait **{math.floor(waittime/3600)}h {math.floor((waittime/60) % 60)}m** to use this again!')
else:
await message.channel.send('You got 2500 daily discs!')
setdiscs(user, getdiscs(user)+2500)
daily[user] = time.time() + 86400
# ...
save_daily()
答案 1 :(得分:-1)
装饰器用于功能。
如果我是您,我会考虑使用命令修饰符而不是on_message
事件,因为它使命令处理参数,修饰符等方面变得非常容易。
@bot.command()
@commands.cooldown(1, 86400, commands.BucketType.user)
async def daily(ctx):
await ctx.send("You got 2500 discs")
setdiscs(ctx.author, getdiscs(ctx.author) + 2500)
如果您使用的是命令修饰符,则需要在process_commands
事件中on_message
,如下所示:
@bot.event
async def on_message(message):
await bot.process_commands(message)
# rest of your on_message code
参考:
BucketType.user
commands.Context
-这是使用d.py中的命令装饰器的每个命令的第一个参数Bot.process_commands()