discord.py机器人加入新服务器时如何正确展示服务器总成员数量?
问题原因
guild.members 是服务器所有成员对象的列表,直接作为值传入embed字段时,会被自动转换为列表的字符串表达形式,也就是你现在看到的成员对象拼接内容。
代码修改
将on_guild_join事件中Members字段的value值替换为guild.member_count即可,该属性直接返回服务器总成员数,会正常展示数字:
import discord from discord.ext import commands import asyncio import requests import time import random # discord.py 2.0+版本需要先配置成员意图才能拿到正确的成员数 intents = discord.Intents.default() intents.members = True # 替换你原有client初始化代码,添加intents参数 client = commands.Bot(command_prefix='自定义前缀', intents=intents) @client.event async def on_guild_join(guild): channel = client.get_channel(899768588011966478) invite = await guild.system_channel.create_invite() e = discord.Embed(color=0xd41818,title="I joined a server") e.add_field(name="Server Name", value=guild.name, inline=False) e.add_field(name="Invite", value=invite, inline=False) # 仅修改下方这一行即可 e.add_field(name="Members", value=guild.member_count, inline=False) await channel.send(embed=e) client.run(token)
额外注意事项
- 如果你使用的是discord.py 2.0及以上版本,需要先到Discord开发者平台的机器人管理页面,开启
Server Members Intent(服务器成员意图)特权开关,否则获取到的成员数只会包含机器人自己。 - 如果目标服务器没有启用系统频道,
guild.system_channel会返回None,创建邀请的代码会报错,可以额外添加判断逻辑规避崩溃。
内容的提问来源于stack exchange,提问作者TheShrek
相关产品推荐
相关产品推荐

