Discord Bot直播检测后发送消息功能失效无报错求助
问题分析与修复方案
核心问题
- 事件装饰器误用:
@bot.event仅适用于Discord.py内置的标准事件(如on_ready、on_message),自定义函数broadcast2不能用这个装饰器,且事件函数的参数是固定的,无法自定义传入broadcast1。 contents变量未定义:broadcast1里的contents没有数据来源,必须先通过直播平台API获取状态数据并赋值给它,才能检测isLiveBroadcast字段。- 函数无联动逻辑:两个函数完全独立,没有定时检测或触发机制调用
broadcast1判断状态,也没有触发broadcast2发送消息的逻辑。 - 频道获取有隐患:
bot.get_channel在Bot未完全就绪时可能返回None,建议用fetch_channel确保能正确获取频道。
修复后的示例代码
import discord from discord.ext import tasks intents = discord.Intents.default() bot = discord.Bot(intents=intents) # 替换为实际直播平台的API调用逻辑 def get_live_status(): # 示例:模拟API返回的直播状态数据 # 实际需调用Twitch/YouTube等平台的直播检测接口 contents = {"isLiveBroadcast": True} return 'isLiveBroadcast' in contents @bot.event async def on_ready(): print(f"已登录:{bot.user}") # 启动定时检测任务 check_live_loop.start() @tasks.loop(minutes=5) # 每5分钟检测一次,可调整间隔 async def check_live_loop(): if get_live_status(): channel = await bot.fetch_channel(1067083439263727646) await channel.send('ЖАБА СТРИМИТ') bot.run("你的Bot令牌")
关键修改说明
- 用
tasks.loop创建定时任务,定期自动检测直播状态,替代原有的无触发逻辑。 - 新增
get_live_status函数,明确直播状态的获取逻辑(需替换为真实API调用)。 - 在
on_ready事件中启动定时任务,确保Bot完全就绪后再执行检测。 - 用
fetch_channel替代get_channel,避免Bot未就绪时获取不到频道的问题。 - 移除错误的
@bot.event装饰器,改用Discord.py的任务系统实现自动通知逻辑。
内容的提问来源于stack exchange,提问作者nik1t00s
相关产品推荐
相关产品推荐

