如何创建编号报告系统



你好,我正在尝试创建一个报告系统,当创建报告时,它是报告#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)

有人知道吗?如果是的话,请对此表示感谢!

如果你确定不会有互联网问题或其他一些会阻止船只运行的问题,你可以简单地进行

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}')

但如果你不完全确定机器人不会有任何问题,您可以将数字保存在txtjsonyaml等文件中。在这种情况下,我更喜欢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}')

好吧,您必须将报告计数存储在某个地方,最好是一个合适的数据库。对于本例,您可以使用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
}

最新更新