如何查看禁止某人的用户名?

时间:2021-03-24 20:07:15

标签: python discord discord.py

@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() 似乎只显示被禁止用户的姓名。

我还能用什么来查看被禁止的用户和禁止他们的人?

感谢任何帮助:)

2 个答案:

答案 0 :(得分:2)

这会变得有点复杂,但让我一步一步来。这可能有点令人困惑,但是


分步方法来存储谁禁止了成员

步骤 1:创建一个 JSON 文件并在其中添加一个空字典。

JSON 文件将用于将数据保存到 JSON 文件中,因为当机器人重新启动时,收集的资源将被删除。因此,通过将此信息添加到 JSON 文件,我们将永久保存它。我们可以从 JSON 文件中添加和提取数据,因此在这里会有帮助。

创建一个任意名称的文件。我正在制作:moderationinfo.json

现在在其中添加以下代码:

{
    "ban-mod": [
        
    ]
}

第 2 步:创建 Ban 命令并将用户数据添加到 JSON 文件中。

该命令将禁止成员并将信息上传到 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-idmoderatorbanned-membertime

可以从这个答案中获取更多信息:

Discord.py: How to extract a Boolean value for if someone is muted or not

我曾为 tempmute 提出过这个问题,但 JSON 工作是相同的。所以你可以参考它。

第 3 步:创建 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}**")

这个命令很适合你想做的事情。

这就是你所要做的。


一些解释这些步骤的图片:

1.执行 BAN 命令和确认消息。

Command Execution and Result

2.带有我们信息的 BANCART 命令。

BANCHART Command with desired result

3. JSON 文件中的数据。

JSON File Data


我希望我能够解释我的工作,如果您还有任何问题,请随时问我任何问题。 :)

谢谢! :D

答案 1 :(得分:-1)

您可以获取公会的审核日志并在其中搜索条目。