[英]I want to change the discord bot status dynamically
这是我使用的代码
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)
要定期更改机器人的存在,您可以使用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 中。 这将允许您保留一个 static 活动列表,而不是动态创建它(只需在 Cog 的__init__
中创建它并将其存储为 class 变量),还可以集中存储下一个活动的索引,无需每次都计算它调用循环的时间
这就是我改变机器人存在的方式
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 秒,然后每分钟都会更改
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.