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
相关产品推荐
相关产品推荐

