You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.py如何在stats命令中显示shard ID、对应shard的延迟和服务器数量

解决方案

最小改动方案(仅展示当前命令触发服务器所属的shard信息)

直接替换你原有代码中shardID、shardPING、shardSERVERS三个变量的固定赋值即可,修改后完整代码如下:

@commands.command(aliases=["botstats"])
async def stats(self, ctx):
    dpyVersion = discord.__version__
    serverCount = len(self.bot.guilds)
    memberCount = len(set(self.bot.get_all_members()))

    # 以下为修改的动态取值逻辑
    current_shard_id = ctx.guild.shard_id
    current_shard = self.bot.get_shard(current_shard_id)
    shardID = str(current_shard_id)
    shardPING = f"{round(current_shard.latency * 1000, 2)}ms"
    shardSERVERS = str(len([g for g in self.bot.guilds if g.shard_id == current_shard_id]))

    embed = discord.Embed(title=f'{self.bot.user.name} - Stats')

    embed.add_field(name='Bot Version:', value=self.bot.version)
    embed.add_field(name='Discord.Py Version:', value=dpyVersion)
    embed.add_field(name='Total Guilds:', value=serverCount)
    embed.add_field(name='Total Users:', value=memberCount)
    embed.add_field(name='Shard ID:', value=shardID)
    embed.add_field(name='Shard Ping:', value=shardPING)
    embed.add_field(name='Shard Servers:', value=shardSERVERS)

    # 注意:原代码的thumbnail变量未定义,请替换为实际图片链接后再使用该行
    # embed.set_thumbnail(url=thumbnail)
    embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar_url)

    await ctx.send(embed=embed)

全shard展示方案(展示所有shard的三项信息)

如果需要在stats里一次性列出所有shard的ID、延迟、服务器数,可以合并为一个字段展示,修改逻辑如下:

@commands.command(aliases=["botstats"])
async def stats(self, ctx):
    dpyVersion = discord.__version__
    serverCount = len(self.bot.guilds)
    memberCount = len(set(self.bot.get_all_members()))

    # 统计每个shard的服务器数量
    shard_server_count = {}
    for guild in self.bot.guilds:
        sid = guild.shard_id
        shard_server_count[sid] = shard_server_count.get(sid, 0) + 1
    
    # 拼接所有shard的信息
    shard_info = []
    for shard_id, shard_obj in self.bot.shards.items():
        ping = round(shard_obj.latency * 1000, 2)
        s_count = shard_server_count.get(shard_id, 0)
        shard_info.append(f"ID: {shard_id} | 延迟: {ping}ms | 服务器数: {s_count}")
    shard_info_str = "\n".join(shard_info)

    embed = discord.Embed(title=f'{self.bot.user.name} - Stats')

    embed.add_field(name='Bot Version:', value=self.bot.version)
    embed.add_field(name='Discord.Py Version:', value=dpyVersion)
    embed.add_field(name='Total Guilds:', value=serverCount)
    embed.add_field(name='Total Users:', value=memberCount)
    # 用单个字段展示所有shard信息
    embed.add_field(name='Shard详情', value=shard_info_str, inline=False)

    # 注意:原代码的thumbnail变量未定义,请替换为实际图片链接后再使用该行
    # embed.set_thumbnail(url=thumbnail)
    embed.set_author(name=ctx.author.display_name, icon_url=ctx.author.avatar_url)

    await ctx.send(embed=embed)
注意事项
  • 原有代码中async def stats行的缩进错误,已经在上述代码中修正
  • 原代码引用的thumbnail变量未定义,使用前请替换为实际的图片链接,或者删除对应行

内容的提问来源于stack exchange,提问作者Slxy_Txz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 20:36:03