机器人加入服务器时更改状态 | discord.py

Change status when bot joins server | discord.py

在我的 discord 机器人的状态中,它显示了它在多少台服务器中,但是当机器人加入服务器时我该如何刷新它?我想我必须把它放在下面:

@client.event
async def on_guild_join(guild):

但是我不知道怎么办。 这是我的状态命令:

async def chng_pr():
  await client.wait_until_ready()

  statuses = [f"-help | {len(client.guilds)} servers", f"-setup | {len(client.guilds)} servers", f"-vote | {len(client.guilds)} servers", f"-patreon | {len(client.guilds)} servers"]

  while not client.is_closed():
    status = random.choice(statuses)

    await client.change_presence(activity=discord.Game(status))

    await asyncio.sleep(120)

client.loop.create_task(chng_pr())

首先,chng_pr函数会每两分钟循环一次,所以当机器人加入公会时改变存在感是没有用的。但是如果你真的想要,你可以删除那个 while 循环并在机器人加入公会时调用它。如果您还希望它每 2 分钟查看一次,您可以使用 discord.ext.tasks.

下面是您应该如何更改函数。

async def chng_pr():
    """Changes presences"""
    statuses = [f"-help | {len(client.guilds)} servers", f"-setup | {len(client.guilds)} servers", f"-vote | {len(client.guilds)} servers", f"-patreon | {len(client.guilds)} servers"]

    status = random.choice(statuses)

    await client.change_presence(activity=discord.Game(status))

以下是如何在机器人加入公会时更改状态。

@client.event
async def on_guild_join(guild):
    await chng_pr()

这是在 on_ready 活动中 运行 创建任务的方法

from discord.ext import tasks

@tasks.loop(minutes=2)
async def change_presence():
    """Will loop every two minutes and change presences"""
    await chng_pr()


@client.event
async def on_ready():
    await client.wait_until_ready()
    # Starting the loop
    change_presence.start()

你也可以让它在命令中使用。

注意:这需要intents.guilds