如何创建编号报告系统?

时间:2020-09-20 14:48:43

标签: discord.py

您好,所以我试图创建一个报告系统,其中创建报告时是报告#0001,而新报告是报告#0002,这是到目前为止的代码。

    @commands.command()
    async def report(self, ctx, member : discord.Member, reason=None):
        await ctx.send(f'{member} has been reported!')
        channel = discord.utils.get(ctx.guild.text_channels, name='reports')
        embed = discord.Embed(name=f'Report incoming! #0001 ')
        embed.add_field(name='Member', value=f'{member}', inline=False)
        embed.add_field(name='Member who reported them', value=f'{ctx.author}', inline=False)
        embed.add_field(name='Reason', value=f'{reason}', inline=False)
        embed.add_field(name='Channel', value=f'{ctx.channel}', inline=False)
        await channel.send(content=None, embed=embed)

有人知道怎么回事吗?

2 个答案:

答案 0 :(得分:0)

那么,您必须将报告计数存储在某个位置,最好是一个适当的数据库。对于此示例,您可以使用json文件,但是请记住,由于缺少原子写入功能,因此作为数据库的json文件在根本上存在缺陷,这可能导致数据损坏和丢失。

import json

@commands.command()
async def report(self, ctx, member: discord.Member, reason=None):
    # Get currect report number
    with open('reports.json', 'r', encoding='utf-8') as counts:
        data = json.load(counts)
        counter = data['count']

    await ctx.send(f'{member} has been reported!')
    data = {"count": counter + 1}  # Add 1 everytime a report is invoked
    with open('reports.json', 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=4)

    channel = discord.utils.get(ctx.guild.text_channels, name='reports')
    embed = discord.Embed(title=f'Report incoming! #{counter} ')
    embed.add_field(name='Member', value=f'{member}', inline=False)
    embed.add_field(name='Member who reported them', value=f'{ctx.author}', inline=False)
    embed.add_field(name='Reason', value=f'{reason}', inline=False)
    embed.add_field(name='Channel', value=f'{ctx.channel}', inline=False)
    await channel.send(content=None, embed=embed)

reports.json

{
    "count": 0
}

答案 1 :(得分:0)

如果您确定不会出现互联网问题或其他一些会阻止船运行的问题,则只需执行

count = 0
@commands.command()
async def report(self, ctx, member : discord.Member, reason=None):
    count += 1
    #the rest of the command

然后您可以像这样更改嵌入名称

embed = discord.Embed(name=f'Report incoming! #{count}')

但是,如果您不能完全确定该漫游器没有任何问题, 您可以将数字保存在 txt json yaml 等文件中。在这种情况下,我希望使用 txt ,因为您只需要保存一行文本即可。因此,您可以这样做:

with open('counts.txt', 'r+') as file:
    number = file.read()
    if number == '':
        file.write('0')
@commands.command()
async def report(self, ctx, member : discord.Member, reason=None):
    with open('counts.txt', 'w+') as file:
        count = file.read()
        file.write(int(count)+1)
    embed = discord.Embed(name=f'Report incoming! #{count}')