stats.py 文件源码

python
阅读 31 收藏 0 点赞 0 评论 0

项目:dogbot 作者: slice 项目源码 文件源码
def stats(self, ctx):
        """Shows participation info about the bot."""
        # TODO: Make this function neater. It's currently trash.

        # member stats
        all_members = list(self.bot.get_all_members())

        def filter_members_by_status(status):
            return len([m for m in all_members if m.status == status])
        num_members = len(all_members)
        num_online = filter_members_by_status(discord.Status.online)
        num_idle = filter_members_by_status(discord.Status.idle)
        num_dnd = filter_members_by_status(discord.Status.dnd)
        num_offline = filter_members_by_status(discord.Status.offline)
        perc_online = f'{round(num_online / num_members * 100, 2)}% is online'

        # channel stats
        all_channels = list(self.bot.get_all_channels())
        num_channels = len(all_channels)
        num_voice_channels = len([c for c in all_channels if isinstance(c, discord.VoiceChannel)])
        num_text_channels = len([c for c in all_channels if isinstance(c, discord.TextChannel)])

        # other stats
        num_emojis = len(self.bot.emojis)
        num_emojis_managed = len([e for e in self.bot.emojis if e.managed])
        num_servers = len(self.bot.guilds)
        member_counts = [len(g.members) for g in self.bot.guilds]
        average_member_count = int(sum(member_counts) / len(member_counts))
        uptime = str(datetime.datetime.utcnow() - self.bot.boot_time)[:-7]

        def cm(v):
            return utils.commas(v)

        embed = discord.Embed(title='Statistics')
        embed.set_footer(text=f'Booted at {utils.standard_datetime(self.bot.boot_time)} UTC')
        fields = {
            'Members': f'{cm(num_members)} total, {cm(num_online)} online\n{cm(num_dnd)} DnD, '
                       f'{cm(num_idle)} idle\n{cm(num_offline)} offline\n\n{perc_online}',
            'Channels': f'{cm(num_channels)} total\n'
                        f'{cm(num_voice_channels)} voice channel(s)\n'
                        f'{cm(num_text_channels)} text channel(s)\n',
            'Emoji': f'{cm(num_emojis)} total\n{cm(num_emojis_managed)} managed',
            'Servers': f'{cm(num_servers)} total\n{cm(average_member_count)} average members\n'
                       f'{cm(max(member_counts))} max, {cm(min(member_counts))} min',
            'Uptime': uptime
        }
        for name, value in fields.items():
            embed.add_field(name=name, value=value)
        await ctx.send(embed=embed)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号