@commands.command()
async def banchart(self,ctx):
bannnedUsers = await ctx.guild.bans()
for user in bannnedUsers:
for i in range(len(user)):
await ctx.send(user[i])
我正在尝试创建一个命令,我可以在其中查看哪些用户被禁止使用服务器以及是谁禁止了他们。
但 ctx.guild.bans()
似乎只显示被禁止用户的姓名。
我还能用什么来查看被禁止的用户和禁止他们的人?
感谢任何帮助:)
答案 0 :(得分:2)
这会变得有点复杂,但让我一步一步来。这可能有点令人困惑,但是
JSON 文件将用于将数据保存到 JSON 文件中,因为当机器人重新启动时,收集的资源将被删除。因此,通过将此信息添加到 JSON 文件,我们将永久保存它。我们可以从 JSON 文件中添加和提取数据,因此在这里会有帮助。
创建一个任意名称的文件。我正在制作:moderationinfo.json
现在在其中添加以下代码:
{
"ban-mod": [
]
}
该命令将禁止成员并将信息上传到 JSON 文件中。然后,我们将使用我将在下面解释的另一个命令从 JSON 文件中提取数据。
禁止命令:
@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)
我认为被禁止的用户的 ID 是一个重要的值,因为它对每个人都是唯一的。因此,代码首先检查条目是否存在。如果没有,则创建一个列表,如果有,则向其附加值。
相加的值是:banned-member-id
、moderator
、banned-member
和 time
。
可以从这个答案中获取更多信息:
Discord.py: How to extract a Boolean value for if someone is muted or not
我曾为 tempmute 提出过这个问题,但 JSON 工作是相同的。所以你可以参考它。
banchart
函数以从 JSON 文件中提取值。我们将创建一个函数,然后提取特定值并将其嵌入到消息中,然后打印出来。这个命令会显示我们想要的数据。
BANCHART 函数:
@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}**")
这个命令很适合你想做的事情。
这就是你所要做的。
我希望我能够解释我的工作,如果您还有任何问题,请随时问我任何问题。 :)
谢谢! :D
答案 1 :(得分:-1)
您可以获取公会的审核日志并在其中搜索条目。