【问题标题】:how to see the name of the user that banned someone?如何查看禁止某人的用户的名称?
【发布时间】:2021-06-21 14:35:00
【问题描述】:
@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() 似乎只显示被禁止用户的姓名。

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

任何帮助表示赞赏:)

【问题讨论】:

    标签: python discord discord.py


    【解决方案1】:

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


    逐步方法存储谁禁止了会员

    第 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 命令和确认消息。

    2。带有我们信息的 BANCHART 命令。

    3。 JSON 文件中的数据。


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

    谢谢! :D

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-28
        • 2018-07-28
        • 1970-01-01
        • 2021-11-24
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多