Discord bot未更新状态

2024-04-26 13:56:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的新手,所以若这个问题很愚蠢,我希望你们能帮助我。 机器人没有每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()

Tags: fromimportclientasyncon状态defstatus
3条回答

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)

如果你已经到了列表的末尾,你需要保持跟踪。这是由最后一行代码完成的

status = cycle( [f' on { len(client.guilds) } servers', '~help'] )此行应该在changeStatus函数之外,因为无论何时调用它,它都会使[f' on { len(client.guilds) } servers成为第一项

它不会更改状态,因为每个会话的状态更新速率限制为5/60秒。这些利率限制是动态的,所以不要太接近它们

相关问题 更多 >