您好,所以我试图创建一个报告系统,其中创建报告时是报告#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)
有人知道怎么回事吗?
答案 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}')