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

Discord Bot执行!prem命令发送英超表格时遇空消息错误求助

解决Discord Bot发送英超积分榜空消息的问题

核心问题是你的爬取函数没有返回可用于发送的内容,而是用print()把表格输出到终端,导致Discord Bot拿不到要发送的文本,触发了空消息错误。


1. 修正爬取函数的返回逻辑

把函数里所有print()语句替换成字符串拼接,最后返回完整的积分榜文本。别再用print输出到终端,要把内容传递给Bot的命令处理代码。

举个修正后的函数示例(假设你用常见的爬取逻辑):

# 封装的爬取积分榜函数
def get_premier_league_table():
    # 这里放你的爬取+解析代码(比如requests请求网页、BeautifulSoup解析数据)
    # 假设解析后得到的每行数据存在table_rows列表里,格式是(排名, 球队, 积分)
    table_rows = [
        (1, "曼城", 32),
        (2, "阿森纳", 29),
        (3, "利物浦", 27),
        # ... 其他球队数据
    ]
    
    # 拼接成易读的表格字符串
    table_content = "🏆 英超联赛积分榜 🏆\n"
    table_content += "------------------------\n"
    table_content += "排名 | 球队 | 积分\n"
    table_content += "------------------------\n"
    for rank, team, points in table_rows:
        table_content += f"{rank:2d}  | {team:<4} | {points}\n"
    
    # 关键:返回拼接好的字符串,不是print
    return table_content

2. 调整Discord命令的处理逻辑

在命令函数里调用爬取函数,拿到返回的文本后直接发送,还要加个空内容判断防止爬取失败:

# Discord Bot的!prem命令处理
@bot.command(name="prem")
async def show_prem_table(ctx):
    # 调用爬取函数拿数据
    table_text = get_premier_league_table()
    
    # 检查是否获取到有效内容
    if not table_text.strip():
        await ctx.send("😅 暂时无法获取积分榜,请稍后再试")
        return
    
    # 用代码块包裹表格,Discord里显示更整齐
    await ctx.send(f"```\n{table_text}\n```")

3. 额外注意事项

  • 如果爬取时可能出现网络错误,要在函数里加异常捕获,比如返回错误提示字符串,避免返回空值
  • 确保单条消息不超过Discord的2000字符限制(英超积分榜只有20行左右,完全没问题)
  • 别再把爬取代码直接写进响应文件,保持函数封装的好习惯,方便后续维护

内容的提问来源于stack exchange,提问作者Xdvanced

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:02:20