<p>这会变得有点复杂,但让我一步一步来。这可能会让人有点困惑,但是</p>
<hr/>
<h2>一步一步的方法来存储谁禁止了一个成员</h2>
<h3>步骤1:创建一个JSON文件并在其中添加一个空字典。</h3>
<p>JSON文件将用于将数据保存到JSON文件中,就像重新启动bot时删除收集的资源一样。因此,通过将这些信息添加到JSON文件中,我们将永久保存它。我们可以从JSON文件中添加和提取数据,因此在这里会有所帮助</p>
<p>创建具有任意名称的文件。我正在制作:<code>moderationinfo.json</code></p>
<p>现在在其中添加以下代码:</p>
<pre><code>{
"ban-mod": [
]
}
</code></pre>
<h3>步骤2:创建Ban命令,将用户数据添加到JSON文件中。</h3>
<p>该命令将禁止一个成员,并将信息上传到JSON文件中。然后,我们将使用下面将要解释的另一个命令从JSON文件中提取数据</p>
<p>禁令命令:</p>
<pre><code>@mybot.command()
@commands.has_permissions(manage_roles=True, kick_members=True, ban_members=True)
async def ban(ctx, member : discord.Member, *, reason):
with open("moderationinfo.json") as f:
data = json.load(f)
all_users = []
for user in data['ban-mod']:
all_users.append(user['banned-member-id'])
if member.id in all_users:
for user in data['ban-mod']:
if member.id == user['banned-member-id']:
if user['moderator'] == str(ctx.author):
user['banned-member'] = str(member.name)
await member.ban(reason=reason)
await ctx.channel.send(f'{member.mention} banned successfully by {ctx.author.name}!')
else:
await member.ban(reason=reason)
await ctx.channel.send(f'{member.mention} banned successfully by {ctx.author.name}')
data["ban-mod"].append({"banned-member-id": member.id, "moderator": str(ctx.author), "banner-member": str(member.name)})
with open("moderationinfo.json", 'w') as f:
json.dump(data, f, indent=2)
</code></pre>
<p>我认为被禁止的用户ID是一个重要的值,因为它对每个人都是唯一的。因此,代码首先检查条目是否存在。如果没有,它将创建一个列表,如果有,则将值附加到列表中</p>
<p>加起来的值是:<code>banned-member-id</code>、<code>moderator</code>、<code>banned-member</code>和<code>time</code></p>
<p>更多信息可从以下答案中获取:</p>
<p><a href="https://stackoverflow.com/questions/66968714/discord-py-how-to-extract-a-boolean-value-for-if-someone-is-muted-or-not">Discord.py: How to extract a Boolean value for if someone is muted or not</a></p>
<p>我曾为tempmute问过这个问题,但JSON的工作是一样的。所以你可以参考它</p>
<h3>步骤3:创建<code>banchart</code>函数以从JSON文件中提取值。</h3>
<p>我们将创建一个函数,然后提取特定值并将其嵌入到消息中,然后打印它。此命令将显示我们需要的数据</p>
<p>班查特功能:</p>
<pre><code>@mybot.command()
@commands.has_permissions(manage_roles=True, kick_members=True, ban_members=True)
async def banchart(ctx):
with open("moderationinfo.json") as f:
data = json.load(f)
await ctx.channel.send(f'The banchart shows:')
for user in data['ban-mod']:
moderator = user['moderator']
banned_member = user['banned-member']
date = user['time']
await ctx.channel.send(f"The moderator, **{moderator}** banned the user, **{banned_member}** on **{date}**")
</code></pre>
<p>这个命令对于您想要执行的操作非常有效</p>
<p>这就是你要做的一切</p>
<hr/>
<h2>一些图片解释了这些步骤:</h2>
<h3>一,。正在执行BAN命令和确认消息。</h3>
<p><a href="https://i.stack.imgur.com/AKdP0.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/AKdP0.png" alt="Command Execution and Result"/></a></p>
<h3>二,。包含我们的信息的BANCHART命令。</h3>
<p><a href="https://i.stack.imgur.com/f4pnT.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/f4pnT.png" alt="BANCHART Command with desired result"/></a></p>
<h3>三,。JSON文件中的数据。</h3>
<p><a href="https://i.stack.imgur.com/h3Eyf.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/h3Eyf.png" alt="JSON File Data"/></a></p>
<hr/>
<p>我希望我能够解释我的工作,如果您还有任何问题,请随时问我</p>
<p>谢谢D</p>