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
相关产品推荐
相关产品推荐

