Discord机器人间隔切换状态不生效 如何实现状态循环切换功能?
问题原因
- 状态更新代码写在
client.run()之前,机器人还未完成登录,代码就已经全部执行完毕,自然不会生效 - 直接调用同步
sleep()会阻塞discord.py的异步事件循环,且没有使用异步休眠的正确写法await asyncio.sleep() - 缺少循环逻辑,状态只能执行单次赋值不会重复切换
修复后可运行代码
import discord import asyncio # 新版discord.py需要显式声明意图,v1.x版本可删除intents参数 client = discord.Client(intents=discord.Intents.default()) # 把所有要循环的状态提前放到列表里,后续加状态直接改这里就行 activity_list = [ discord.Activity(name="Todos os membros da Cyber$ell.", type=discord.ActivityType.watching), discord.Activity(name="Cyber$ell o MELHOR discord de vendas do 🇧🇷", type=discord.ActivityType.watching), discord.Activity(name="Cyber$ell 😳Promoções😳 em BREVE?!", type=discord.ActivityType.watching), discord.Activity(name="Já descobriu oque vai comprar?, Cria o seu ticket então.", type=discord.ActivityType.watching) ] @client.event async def on_ready(): print('Logged in as') print(client.user.name) print(client.user.id) print('------') # 登录完成后启动状态循环 while True: for activity in activity_list: await client.change_presence(activity=activity) # 官方提供的修改状态方法 await asyncio.sleep(60) # 异步休眠60秒,不会阻塞机器人其他功能运行 token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx' client.run(token)
补充说明
- 切换间隔可以通过修改
asyncio.sleep()的参数调整,单位为秒 - 后续要新增状态直接往
activity_list列表里加对应Activity对象即可,不需要修改循环逻辑
内容的提问来源于stack exchange,提问作者coding is a hell lol
相关产品推荐
相关产品推荐

