我是 Python 新手,所以如果问题很愚蠢,我很抱歉,但我希望你们能帮助我。 Bot 不会每 5 秒更新一次状态(我把更多的时间放在 5 分钟之类的时间里,但它也不起作用)。它显示了服务器数量,并且不会更改为第二状态。
from discord.ext import commands, tasks
from itertools import cycle
@tasks.loop( seconds = 12 )
async def changeStatus():
status = cycle( [f' on { len(client.guilds) } servers', '~help'] )
await client.change_presence( activity = discord.Activity( type = discord.ActivityType.playing, name = next(status) ) )
@client.event
async def on_ready():
print( 'bot connected' )
changeStatus.start()
答案 0 :(得分:1)
自从
status = cycle( [f' on { len(client.guilds) } servers', '~help'] )
每次调用函数时都会被调用,它会被重新解释,这意味着 next()
函数总是返回第一个元素。要解决此问题,您将需要一种不同的方法。例如,创建一个全局 iteration-variable
并声明您 cycle-list
只是一个列表。
iterationPosition = 0
@tasks.loop( seconds = 12 )
async def changeStatus():
status = [f' on { len(client.guilds) } servers', '~help']
await client.change_presence(activity=discord.Activity(type=discord.ActivityType.playing, name=status[iterationPosition]))
iterationPosition = 0 if (iterationPosition == len(status) - 1) else (iterationPosition + 1)
如果您已到达列表末尾,则需要跟踪。这是由最后一行代码完成的。
答案 1 :(得分:-1)
它不会更改状态,因为您获得了 每个会话 5/60 秒的状态更新速率限制。这些速率限制是动态的,所以不要太接近它们
答案 2 :(得分:-1)
status = cycle( [f' on { len(client.guilds) } servers', '~help'] )
这一行应该在 changeStatus
函数之外,因为无论何时调用它,它都会使 [f' on { len(client.guilds) } servers
成为第一项。