Discord bot 不更新状态

时间:2021-05-07 06:27:16

标签: python discord discord.py bots

我是 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()

3 个答案:

答案 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 成为第一项。