Python 3.x 如何将bot所在的服务器数设置为状态(discord.py rewrite)?

Python 3.x 如何将bot所在的服务器数设置为状态(discord.py rewrite)?,python-3.x,discord.py,Python 3.x,Discord.py,我尝试使用这段代码: status = cycle(['.apuva', f'{str(len(client.guilds))} palvelimella!'] @client.event async def on_ready(): change_status.start() print('Botti on käynnissä.') async def change_status(): await client.change_presence(activity=dis

我尝试使用这段代码:

status = cycle(['.apuva', f'{str(len(client.guilds))} palvelimella!']

@client.event
async def on_ready():
    change_status.start()
    print('Botti on käynnissä.')

async def change_status():
    await client.change_presence(activity=discord.Game(next(status)))

但是,这显示状态为“0服务器”,即使我的bot位于3台服务器上。如何在discord.py的重写版本中修复此问题?

我就是这样写的,因此bot的状态将更改为“Playing x servers!”:


我就是这样写的,所以机器人的状态将变为“玩x服务器!”:


它之所以说0服务器,是因为f字符串在声明它们的同一行上求值。由于bot尚未运行,
len(client.guilds)
在字符串中的计算结果为0,因此这与分配
status=cycle(['.apuva',0 palvelimella!'])
相同

您可以在字符串中保留占位符,而不是使用f字符串,然后在循环中格式化占位符

status=itertools.cycle(['In{n}服务器',…])
... 
@tasks.loop(分钟=5)
异步def更改_状态():
名称=下一个(状态)
name=name.format(n=len(client.guilds))
#请注意,如果占位符“{n}”在字符串中不存在,
#不会发生错误,字符串保持不变
等待客户。更改您的状态(…)

之所以说0服务器,是因为f字符串是在您声明它们的同一行上计算的。由于bot尚未运行,
len(client.guilds)
在字符串中的计算结果为0,因此这与分配
status=cycle(['.apuva',0 palvelimella!'])
相同

您可以在字符串中保留占位符,而不是使用f字符串,然后在循环中格式化占位符

status=itertools.cycle(['In{n}服务器',…])
... 
@tasks.loop(分钟=5)
异步def更改_状态():
名称=下一个(状态)
name=name.format(n=len(client.guilds))
#请注意,如果占位符“{n}”在字符串中不存在,
#不会发生错误,字符串保持不变
等待客户。更改您的状态(…)

谢谢,它很管用!谢谢,它很管用!
@client.event
async def on_ready():
    print('Bot is ready.')
    await client.change_presence(activity=discord.Game(name=f"{len(client.guilds)} servers!"))
import asyncio
@client.event
async def on_ready():
    print("Bot is ready!")
    while not client.is_closed():
        await client.change_presence(activity=discord.Game(name=f"{len(client.guilds)} servers!")
        await asyncio.sleep(10)
        await client.change_presence(activity=discord.Game(name="Status 2")
        await asyncio.sleep(10)