这是我使用的代码
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)
答案 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 ,然后每分钟都会更改