警告命令不执行

时间:2020-09-29 20:40:09

标签: discord.py discord.py-rewrite

因此,我正在尝试发出警告命令,但似乎没有任何效果。我已经尝试了几个月,我已经做了我能想到的一切。

首先,我使用JSON,但是代码无法执行。 其次,我尝试制作某种警报系统,但这并不可靠。 第三,我尝试使用字典,但是我不知道如何添加变量。

这是我当前的代码

async def warn(ctx, member: discord.Member):
    def warn(warn, user):
        warn[user] = warn[user] + 1
        
        return warn
    warn = {}
    warn = warn(warn, member)
    await ctx.send(f"Warned")

任何帮助将不胜感激。预先感谢!

2 个答案:

答案 0 :(得分:0)

我有工作代码:

async def update_data(users, user):
    if not f'{user.id}' in users:
        users[f'{user.id}'] = {}
        users[f'{user.id}']['warns'] = 0

async def add_warns(users, user, warns):
    users[f'{user.id}']['warns'] += warns

@client.command()
async def warn(ctx, user: discord.Member):
    with open('warns.json', 'r') as f:
        users = json.load(f)

    await update_data(users, user)
    await add_warns(users, user, 1)

    with open('warns.json', 'w') as f:
        json.dump(users, f, sort_keys=True, ensure_ascii=False, indent=4)

    await ctx.send(f'Warned {user}')

该代码应该可以工作(导入json),它将对.json文件进行排序。

编辑1: 我做了一个未警告的代码,它的工作原理就像一个超级按钮(它删除了用户ID并发出警告,因此它比仅保留0节省了更多空间)

@client.command()
async def remove_warn(ctx, user: discord.Member, amount: int=None):
    with open('warns.json', 'r') as f:
        users = json.load(f)

    amount = amount or 1

    await update_data(users, user)
    await add_warns(users, user, -amount)

    if users[f'{user.id}']['warns'] <= 0:
        with open('warns.json', 'w') as f:
            del users[f'{user.id}']['warns']
            del users[f'{user.id}']
            f.write(json.dumps(users, indent=4))
        return

    else:

        with open('warns.json', 'w') as f:
            json.dump(users, f, sort_keys=True, ensure_ascii=False, indent=4)

        await ctx.send(f'Removed {amount} warn for {user}')
        return

编辑2: 做了一个有效的警告检查器。

@client.command()
async def warns(ctx, user: discord.Member=None):
    user = user or ctx.author
    try:
        with open('warns.json', 'r') as f:
            users = json.load(f)

        warns = users[f'{user.id}']['warns']

        await ctx.send(f'{user} has {warns} warnings')
    except:
        await ctx.send(f"{user} doesn't have any warnings.")

答案 1 :(得分:0)

不能完全确定您要实现的目标,但是这里有一个示例,当用户在行会的任何频道中说出“错误”字眼时,都会向用户发出警告。他们说了不止一次之后,他们收到一条消息,说这是您的最后警告。如果他们在柜台上超过3,则可以轻松添加一个底牌{member}。希望这会有所帮助。

@client.event
async def on_message(message):
    counter = 0
    member = client.get_user(message.author.id)
    channel = client.get_channel(message.channel.id)
    async for message in channel.history():
        if message.content == 'badword' and message.author == member:
            counter = counter + 1

    if counter == 1:
        await channel.send(f'{member} you have been warned.')
    elif counter == 2:
        await channel.send(f'{member} this is your last warning.')
        return

编辑:我一直在等待发布此内容,直到我得到一个可行的示例,其中包括从服务器踢用户,但根据发布的内容和文档无法使其正常工作。由于我认为这不是您的目标,因此我打算将其发布,希望对您有所帮助。