Python Telegram Bot无法返回本地文件内容:请求排查故障原因
问题排查与修复
核心问题1:返回值类型错误
curl_request函数返回的是元组(用逗号分隔两个值会创建元组),而bot.send_message需要接收字符串类型的消息内容。Telebot在处理元组时只会显示第一个元素,导致日志内容被丢弃。
修复方法:将返回的两个字符串拼接在一起,而不是返回元组:
def curl_request(): resp = requests.get(url) if resp.status_code == 200: return "Available \n" + current_status() # 用+拼接字符串 else: return "Isn't available \n" + current_status()
核心问题2:条件判断逻辑错误
if message.text == "Status" or "status" 这个写法逻辑错误,"status"是一个非空字符串,永远为真,导致任何文本消息都会触发Status分支。
修复方法:改成正确的相等判断:
def get_text_messages(message): # 方法1:直接判断两种情况 if message.text == "Status" or message.text == "status": bot.send_message(message.from_user.id, curl_request()) # 方法2:统一转小写判断,更简洁 # if message.text.lower() == "status": # bot.send_message(message.from_user.id, curl_request())
可选优化:读取完整日志内容
current_status里的file.readline()只会读取日志的第一行,如果需要返回全部日志内容,改成file.read():
def current_status(): with open('current_status.log') as file: status = file.read() # 读取全部内容 return status
完整修复后的代码
import telebot import requests url = "https://link.com" bot = telebot.TeleBot('TOKEN') @bot.message_handler(content_types=['text']) def get_text_messages(message): if message.text.lower() == "status": bot.send_message(message.from_user.id, curl_request()) def current_status(): with open('current_status.log') as file: return file.read() def curl_request(): resp = requests.get(url) if resp.status_code == 200: return "Available \n" + current_status() else: return "Isn't available \n" + current_status() bot.polling(none_stop=True, interval=0)
内容的提问来源于stack exchange,提问作者macder
相关产品推荐
相关产品推荐

