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

2024-09-29 19:20:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我还可以使用什么来查看被禁止的用户和禁止他们的人

感谢您的帮助:)


Tags: 用户inselfforasyncdefawaitcommand
2条回答

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


一步一步的方法来存储谁禁止了一个成员

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

JSON文件将用于将数据保存到JSON文件中,就像重新启动bot时删除收集的资源一样。因此,通过将这些信息添加到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文件中提取值。

我们将创建一个函数,然后提取特定值并将其嵌入到消息中,然后打印它。此命令将显示我们需要的数据

班查特功能:

@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}**")

这个命令对于您想要执行的操作非常有效

这就是你要做的一切


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

一,。正在执行BAN命令和确认消息。

Command Execution and Result

二,。包含我们的信息的BANCHART命令。

BANCHART Command with desired result

三,。JSON文件中的数据。

JSON File Data


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

谢谢D

你可以获取公会的审计日志并在那里搜索条目

相关问题 更多 >

    热门问题