You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord Bot直播检测后发送消息功能失效无报错求助

问题分析与修复方案

核心问题

  1. 事件装饰器误用:@bot.event仅适用于Discord.py内置的标准事件(如on_ready、on_message),自定义函数broadcast2不能用这个装饰器,且事件函数的参数是固定的,无法自定义传入broadcast1。
  2. contents变量未定义:broadcast1里的contents没有数据来源,必须先通过直播平台API获取状态数据并赋值给它,才能检测isLiveBroadcast字段。
  3. 函数无联动逻辑:两个函数完全独立,没有定时检测或触发机制调用broadcast1判断状态,也没有触发broadcast2发送消息的逻辑。
  4. 频道获取有隐患: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:37:12