我想动态更改不和谐机器人状态

时间:2021-03-22 10:39:33

标签: python-3.x discord.py

这是我使用的代码

async def on_ready():
    print(f'bots up')
    await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.listening, name='.help'))

就像状态每分钟都在变化一样, 我试过了,但它不允许我使用其他命令,我放了这段代码,但它会给出一个错误,说我不能把消息参数放在 on_ready()

await bot.process_commands(message)

2 个答案:

答案 0 :(得分:0)

要定期更改您的机器人的存在,您可以使用 discord.ext.tasks.Loop。基本蓝图可能如下所示:

import discord
from discord.ext import commands
from discord.ext import tasks

bot = commands.Bot('.')

@tasks.loop(seconds=30)
async def switch_presence():
    # list of all activities to switch between
    activities = [
        discord.Activity(type=discord.ActivityType.listening, name='First activity'),
        discord.Activity(type=discord.ActivityType.listening, name='Another activity')
    ]
    curr_activity = bot.activity
    # default to the first activity if not set or invalid
    if curr_activity not in activities:
        await bot.change_presence(activity=activities[0])
        return
    # use modulo to start from the beginning once the list is exhausted
    next_activity_index = (activities.index(curr_activity) + 1) % len(activities)
    await bot.change_presence(activity=activities[next_activity_index])

@bot.event
async def on_ready():
    switch_presence.start()

通过一些修改,您也可以将其放入 Cog。这将允许您保留一个静态活动列表而不是动态创建它(只需在 Cog 的 __init__ 中创建它并将其存储为类变量)并且还集中存储下一个活动的索引,从而无需每次调用循环时计算它

答案 1 :(得分:0)

这就是我改变机器人存在的方式

async def status_task():
while True:
    await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.listening, name=f"listining status"))
    await asyncio.sleep(10)# 10 as in 10seconds
    await bot.change_presence(activity=discord.Game(name="playing status"))
    await asyncio.sleep(10)
    await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.competing, name=f"competing status"))
    await asyncio.sleep(10)
    await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.streaming, name=f"streaming status"))
    await asyncio.sleep(10)

然后 on_ready

@bot.event
async def on_ready():
    print(f"bots up")
    bot.loop.create_task(status_task())

希望这对您有用,(对于 status_task)将每个之间的 10 秒更改为 60 ,然后每分钟都会更改