我的不和谐机器人的每日命令不起作用

时间:2020-05-27 16:03:37

标签: python discord.py

我正在使用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) 

2 个答案:

答案 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

参考: