繁体   English   中英

"如何为 discord.py 上的命令添加冷却时间"

[英]How do I add a cooldown for a command on discord.py

我一直在尝试为 discord.py 上的一个功能进行冷却。 我在 test.py 文件中制作了它并且它可以工作,但在我的主文件中它没有。 你认为我可以如何解决这个问题? 我浏览了很多视频,但我不确定为什么这不起作用。 “锉刀农场”功能有效,冷却也有效,但我希望在冷却时出现一条消息,使用此代码我得到错误

# python main.py

import os
import discord
import wikipedia
from discord.utils import get
import time
import random
from discord.ext.commands import Bot
import asyncio
import json
from discord.ext.commands import cooldown, BucketType
from dotenv import load_dotenv
from discord.ext import commands


os.chdir(r"C:\Users\laksh\PycharmProjects\Raspberry")
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')

client = discord.Client()
bot = commands.Bot(command_prefix='rasp ')


# Start up
@bot.event
async def on_ready():
    print(f'{bot.user} has connected to Discord!')



@bot.command()
async def balance(ctx):
    await open_account(ctx.author)

    user = ctx.author
    users = await get_bank_data()

    wallet_amt = users[str(user.id)]["wallet"]
    bank_amt = users[str(user.id)]["bank"]
    em = discord.Embed(title=f"{ctx.author.name}'s raspberries", color=discord.Color.red())
    em.add_field(name= "Wallet",value=wallet_amt)
    em.add_field(name="Bank", value=bank_amt)
    await ctx.send(embed = em)


@commands.cooldown(1, 3, commands.BucketType.user)
@bot.command()
async def farm(ctx):
    await open_account(ctx.author)
    user = ctx.author
    users = await get_bank_data()
    earnings = random.randrange(201)

    await ctx.send(f"You picked {earnings} raspberries!! (Raspberries take 1 minute to grow again!)")

    users[str(user.id)]["wallet"] += earnings
    with open("mainbank.json","w") as f:
        users = json.dump(users,f)
@farm.error
async def farm_error(ctx, error):
    if isinstance(error, farm.CommandOnCooldown):
        em = discord.Embed(title=f"You are in cooldown",description=f"Try again in {error.retry_after:.2f}s.", color=discord.Color.orange())
        await ctx.send(embed=em)

async def open_account(user):
    users = await get_bank_data()
    if str(user.id) in users:
        return False
    else:
        users[str(user.id)] = {}
        users[str(user.id)]["wallet"] = 0
        users[str(user.id)]["bank"] = 0
    with open("mainbank.json","w") as a:
        users = json.dump(users,a)
    return True

async def get_bank_data():
    with open("mainbank.json", "r") as a:
        users = json.load(a)
    return users



@bot.command()
async def commands(ctx):
    embed = discord.Embed(title="My commands:", description="My prefix is 'rasp' for example a command is 'rasp farm'.",
                          color=0xff4d4d)
    embed.add_field(name="'rasp farm'", value="Farms your ripened raspberries!                ", inline=True)
    embed.add_field(name=" 'rasp balance'", value="Checks how many raspberries your wallet and bank holds!",
                    inline=True)
    embed.add_field(name="'rasp shop'", value="Buy items to multiply your raspberry earnings :yum:", inline=True)
    await ctx.send(embed=embed)


问题是您尝试从命令中访问错误类,而该命令没有。 您必须访问discord.ext.commands.CommandOnCooldown而不是farm.CommandOnCooldown

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM